diff --git a/composer.lock b/composer.lock
index 1d7a5edcf4ff040ce0ad312195446e948a3d9178..a59f391c9df90880b6e7dfd611d2ce9f9cf8001d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -134,16 +134,16 @@
         },
         {
             "name": "brumann/polyfill-unserialize",
-            "version": "v1.0.3",
+            "version": "v1.0.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/dbrumann/polyfill-unserialize.git",
-                "reference": "844d7e44b62a1a3d5c68cfb7ebbd59c17ea0fd7b"
+                "reference": "8ed1cd343ddc134a7ef649aca0aa0fe2a1b45008"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/dbrumann/polyfill-unserialize/zipball/844d7e44b62a1a3d5c68cfb7ebbd59c17ea0fd7b",
-                "reference": "844d7e44b62a1a3d5c68cfb7ebbd59c17ea0fd7b",
+                "url": "https://api.github.com/repos/dbrumann/polyfill-unserialize/zipball/8ed1cd343ddc134a7ef649aca0aa0fe2a1b45008",
+                "reference": "8ed1cd343ddc134a7ef649aca0aa0fe2a1b45008",
                 "shasum": ""
             },
             "require": {
@@ -166,7 +166,7 @@
                 }
             ],
             "description": "Backports unserialize options introduced in PHP 7.0 to older PHP versions.",
-            "time": "2017-02-03T09:55:47+00:00"
+            "time": "2019-07-14T23:16:24+00:00"
         },
         {
             "name": "chi-teck/drupal-code-generator",
@@ -3421,16 +3421,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "8.7.5",
+            "version": "8.7.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "12cea52c782bb76e666c54c2a65cd3946daa3613"
+                "reference": "a691876294fadc2795a8add96359b5ffc109d7f2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/12cea52c782bb76e666c54c2a65cd3946daa3613",
-                "reference": "12cea52c782bb76e666c54c2a65cd3946daa3613",
+                "url": "https://api.github.com/repos/drupal/core/zipball/a691876294fadc2795a8add96359b5ffc109d7f2",
+                "reference": "a691876294fadc2795a8add96359b5ffc109d7f2",
                 "shasum": ""
             },
             "require": {
@@ -3456,7 +3456,7 @@
                 "guzzlehttp/guzzle": "^6.2.1",
                 "masterminds/html5": "^2.1",
                 "paragonie/random_compat": "^1.0|^2.0|^9.99.99",
-                "pear/archive_tar": "^1.4",
+                "pear/archive_tar": "^1.4.9",
                 "php": "^5.5.9|>=7.0.8",
                 "stack/builder": "^1.0",
                 "symfony-cmf/routing": "^1.4",
@@ -3468,7 +3468,7 @@
                 "symfony/http-kernel": "~3.4.14",
                 "symfony/polyfill-iconv": "^1.0",
                 "symfony/process": "~3.4.0",
-                "symfony/psr-http-message-bridge": "^1.0",
+                "symfony/psr-http-message-bridge": "^1.1.2",
                 "symfony/routing": "~3.4.0",
                 "symfony/serializer": "~3.4.0",
                 "symfony/translation": "~3.4.0",
@@ -3480,7 +3480,8 @@
                 "zendframework/zend-feed": "^2.4"
             },
             "conflict": {
-                "drush/drush": "<8.1.10"
+                "drush/drush": "<8.1.10",
+                "symfony/dom-crawler": ">=4"
             },
             "replace": {
                 "drupal/action": "self.version",
@@ -3665,7 +3666,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-            "time": "2019-07-16T16:24:57+00:00"
+            "time": "2019-12-18T08:55:29+00:00"
         },
         {
             "name": "drupal/crop",
@@ -8772,16 +8773,16 @@
         },
         {
             "name": "egulias/email-validator",
-            "version": "2.1.9",
+            "version": "2.1.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/egulias/EmailValidator.git",
-                "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25"
+                "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25",
-                "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25",
+                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23",
+                "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23",
                 "shasum": ""
             },
             "require": {
@@ -8791,7 +8792,8 @@
             "require-dev": {
                 "dominicsayers/isemail": "dev-master",
                 "phpunit/phpunit": "^4.8.35||^5.7||^6.0",
-                "satooshi/php-coveralls": "^1.0.1"
+                "satooshi/php-coveralls": "^1.0.1",
+                "symfony/phpunit-bridge": "^4.4@dev"
             },
             "suggest": {
                 "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
@@ -8799,7 +8801,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.0.x-dev"
+                    "dev-master": "2.1.x-dev"
                 }
             },
             "autoload": {
@@ -8825,7 +8827,7 @@
                 "validation",
                 "validator"
             ],
-            "time": "2019-06-23T10:14:27+00:00"
+            "time": "2019-08-13T17:33:27+00:00"
         },
         {
             "name": "enyo/dropzone",
@@ -9093,44 +9095,46 @@
         },
         {
             "name": "guzzlehttp/guzzle",
-            "version": "6.3.3",
+            "version": "6.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/guzzle.git",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+                "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
-                "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+                "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
+                "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
                 "shasum": ""
             },
             "require": {
+                "ext-json": "*",
                 "guzzlehttp/promises": "^1.0",
-                "guzzlehttp/psr7": "^1.4",
+                "guzzlehttp/psr7": "^1.6.1",
                 "php": ">=5.5"
             },
             "require-dev": {
                 "ext-curl": "*",
                 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-                "psr/log": "^1.0"
+                "psr/log": "^1.1"
             },
             "suggest": {
+                "ext-intl": "Required for Internationalized Domain Name (IDN) support",
                 "psr/log": "Required for using the Log middleware"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "6.3-dev"
+                    "dev-master": "6.5-dev"
                 }
             },
             "autoload": {
-                "files": [
-                    "src/functions_include.php"
-                ],
                 "psr-4": {
                     "GuzzleHttp\\": "src/"
-                }
+                },
+                "files": [
+                    "src/functions_include.php"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
@@ -9154,7 +9158,7 @@
                 "rest",
                 "web service"
             ],
-            "time": "2018-04-22T15:46:56+00:00"
+            "time": "2019-12-07T18:20:45+00:00"
         },
         {
             "name": "guzzlehttp/promises",
@@ -9532,16 +9536,16 @@
         },
         {
             "name": "masterminds/html5",
-            "version": "2.6.0",
+            "version": "2.7.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Masterminds/html5-php.git",
-                "reference": "c961ca6a0a81dc6b55b6859b3f9ea7f402edf9ad"
+                "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/c961ca6a0a81dc6b55b6859b3f9ea7f402edf9ad",
-                "reference": "c961ca6a0a81dc6b55b6859b3f9ea7f402edf9ad",
+                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/104443ad663d15981225f99532ba73c2f1d6b6f2",
+                "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2",
                 "shasum": ""
             },
             "require": {
@@ -9558,7 +9562,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.6-dev"
+                    "dev-master": "2.7-dev"
                 }
             },
             "autoload": {
@@ -9575,13 +9579,13 @@
                     "name": "Matt Butcher",
                     "email": "technosophos@gmail.com"
                 },
-                {
-                    "name": "Asmir Mustafic",
-                    "email": "goetas@gmail.com"
-                },
                 {
                     "name": "Matt Farina",
                     "email": "matt@mattfarina.com"
+                },
+                {
+                    "name": "Asmir Mustafic",
+                    "email": "goetas@gmail.com"
                 }
             ],
             "description": "An HTML5 parser and serializer.",
@@ -9595,7 +9599,7 @@
                 "serializer",
                 "xml"
             ],
-            "time": "2019-03-10T11:41:28+00:00"
+            "time": "2019-07-25T07:03:26+00:00"
         },
         {
             "name": "mehrpadin/superfish",
@@ -9846,16 +9850,16 @@
         },
         {
             "name": "pear/archive_tar",
-            "version": "1.4.7",
+            "version": "1.4.9",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Archive_Tar.git",
-                "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845"
+                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845",
-                "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845",
+                "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
+                "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
                 "shasum": ""
             },
             "require": {
@@ -9908,20 +9912,20 @@
                 "archive",
                 "tar"
             ],
-            "time": "2019-04-08T13:15:55+00:00"
+            "time": "2019-12-04T10:17:28+00:00"
         },
         {
             "name": "pear/console_getopt",
-            "version": "v1.4.2",
+            "version": "v1.4.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/Console_Getopt.git",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0"
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0",
-                "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0",
+                "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+                "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
                 "shasum": ""
             },
             "type": "library",
@@ -9938,11 +9942,6 @@
                 "BSD-2-Clause"
             ],
             "authors": [
-                {
-                    "name": "Greg Beaver",
-                    "email": "cellog@php.net",
-                    "role": "Helper"
-                },
                 {
                     "name": "Andrei Zmievski",
                     "email": "andrei@php.net",
@@ -9952,10 +9951,15 @@
                     "name": "Stig Bakken",
                     "email": "stig@php.net",
                     "role": "Developer"
+                },
+                {
+                    "name": "Greg Beaver",
+                    "email": "cellog@php.net",
+                    "role": "Helper"
                 }
             ],
             "description": "More info available on: http://pear.php.net/package/Console_Getopt",
-            "time": "2019-02-06T16:52:33+00:00"
+            "time": "2019-11-20T18:27:48+00:00"
         },
         {
             "name": "pear/console_table",
@@ -10014,16 +10018,16 @@
         },
         {
             "name": "pear/pear-core-minimal",
-            "version": "v1.10.9",
+            "version": "v1.10.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/pear-core-minimal.git",
-                "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f"
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f",
-                "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f",
+                "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+                "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
                 "shasum": ""
             },
             "require": {
@@ -10054,20 +10058,20 @@
                 }
             ],
             "description": "Minimal set of PEAR core files to be used as composer dependency",
-            "time": "2019-03-13T18:15:44+00:00"
+            "time": "2019-11-19T19:00:24+00:00"
         },
         {
             "name": "pear/pear_exception",
-            "version": "v1.0.0",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/pear/PEAR_Exception.git",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
-                "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+                "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+                "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
                 "shasum": ""
             },
             "require": {
@@ -10083,9 +10087,9 @@
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "PEAR": ""
-                }
+                "classmap": [
+                    "PEAR/"
+                ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "include-path": [
@@ -10109,7 +10113,7 @@
             "keywords": [
                 "exception"
             ],
-            "time": "2015-02-10T20:07:52+00:00"
+            "time": "2019-12-10T10:24:42+00:00"
         },
         {
             "name": "psr/container",
@@ -10753,16 +10757,16 @@
         },
         {
             "name": "symfony/class-loader",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/class-loader.git",
-                "reference": "4459eef5298dedfb69f771186a580062b8516497"
+                "reference": "e212b06996819a2bce026a63da03b7182d05a690"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497",
-                "reference": "4459eef5298dedfb69f771186a580062b8516497",
+                "url": "https://api.github.com/repos/symfony/class-loader/zipball/e212b06996819a2bce026a63da03b7182d05a690",
+                "reference": "e212b06996819a2bce026a63da03b7182d05a690",
                 "shasum": ""
             },
             "require": {
@@ -10805,7 +10809,7 @@
             ],
             "description": "Symfony ClassLoader Component",
             "homepage": "https://symfony.com",
-            "time": "2019-01-16T09:39:14+00:00"
+            "time": "2019-08-20T13:31:17+00:00"
         },
         {
             "name": "symfony/config",
@@ -10873,16 +10877,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "c4d2f3529755ffc0be9fb823583b28d8744eeb3d"
+                "reference": "1ee23b3b659b06c622f2bd2492a229e416eb4586"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/c4d2f3529755ffc0be9fb823583b28d8744eeb3d",
-                "reference": "c4d2f3529755ffc0be9fb823583b28d8744eeb3d",
+                "url": "https://api.github.com/repos/symfony/console/zipball/1ee23b3b659b06c622f2bd2492a229e416eb4586",
+                "reference": "1ee23b3b659b06c622f2bd2492a229e416eb4586",
                 "shasum": ""
             },
             "require": {
@@ -10941,7 +10945,7 @@
             ],
             "description": "Symfony Console Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-05T11:33:52+00:00"
+            "time": "2019-12-01T10:04:45+00:00"
         },
         {
             "name": "symfony/css-selector",
@@ -10998,16 +11002,16 @@
         },
         {
             "name": "symfony/debug",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/debug.git",
-                "reference": "1172dc1abe44dfadd162239153818b074e6e53bf"
+                "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/debug/zipball/1172dc1abe44dfadd162239153818b074e6e53bf",
-                "reference": "1172dc1abe44dfadd162239153818b074e6e53bf",
+                "url": "https://api.github.com/repos/symfony/debug/zipball/f72e33fdb1170b326e72c3157f0cd456351dd086",
+                "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086",
                 "shasum": ""
             },
             "require": {
@@ -11050,20 +11054,20 @@
             ],
             "description": "Symfony Debug Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-18T21:26:03+00:00"
+            "time": "2019-10-24T15:33:53+00:00"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "76857ce235ba1866b66a1d5be34c6794c8895435"
+                "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/76857ce235ba1866b66a1d5be34c6794c8895435",
-                "reference": "76857ce235ba1866b66a1d5be34c6794c8895435",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0d201916bfb3af939fec3c0c8815ea16c60ac1a2",
+                "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2",
                 "shasum": ""
             },
             "require": {
@@ -11121,7 +11125,7 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "https://symfony.com",
-            "time": "2019-05-30T15:47:52+00:00"
+            "time": "2019-12-01T08:33:36+00:00"
         },
         {
             "name": "symfony/dom-crawler",
@@ -11182,16 +11186,16 @@
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "f18fdd6cc7006441865e698420cee26bac94741f"
+                "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f18fdd6cc7006441865e698420cee26bac94741f",
-                "reference": "f18fdd6cc7006441865e698420cee26bac94741f",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177",
+                "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177",
                 "shasum": ""
             },
             "require": {
@@ -11241,7 +11245,7 @@
             ],
             "description": "Symfony EventDispatcher Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-25T07:45:31+00:00"
+            "time": "2019-10-24T15:33:53+00:00"
         },
         {
             "name": "symfony/filesystem",
@@ -11344,16 +11348,16 @@
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "8cfbf75bb3a72963b12c513a73e9247891df24f8"
+                "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8cfbf75bb3a72963b12c513a73e9247891df24f8",
-                "reference": "8cfbf75bb3a72963b12c513a73e9247891df24f8",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d2d0cfe8e319d9df44c4cca570710fcf221d4593",
+                "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593",
                 "shasum": ""
             },
             "require": {
@@ -11394,20 +11398,20 @@
             ],
             "description": "Symfony HttpFoundation Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-22T20:10:25+00:00"
+            "time": "2019-11-28T12:52:59+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "abbb38dbab652ddc40a86d0c3b0e14ca52d58ed2"
+                "reference": "c42c8339acb28cfff0fb1786948db4d23d609ff7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/abbb38dbab652ddc40a86d0c3b0e14ca52d58ed2",
-                "reference": "abbb38dbab652ddc40a86d0c3b0e14ca52d58ed2",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c42c8339acb28cfff0fb1786948db4d23d609ff7",
+                "reference": "c42c8339acb28cfff0fb1786948db4d23d609ff7",
                 "shasum": ""
             },
             "require": {
@@ -11416,7 +11420,8 @@
                 "symfony/debug": "^3.3.3|~4.0",
                 "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
                 "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
-                "symfony/polyfill-ctype": "~1.8"
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-php56": "~1.8"
             },
             "conflict": {
                 "symfony/config": "<2.8",
@@ -11483,7 +11488,7 @@
             ],
             "description": "Symfony HttpKernel Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-26T13:56:39+00:00"
+            "time": "2019-12-01T13:50:37+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -11545,16 +11550,16 @@
         },
         {
             "name": "symfony/polyfill-iconv",
-            "version": "v1.11.0",
+            "version": "v1.13.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-iconv.git",
-                "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7"
+                "reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7",
-                "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7",
+                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/a019efccc03f1a335af6b4f20c30f5ea8060be36",
+                "reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36",
                 "shasum": ""
             },
             "require": {
@@ -11566,7 +11571,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.11-dev"
+                    "dev-master": "1.13-dev"
                 }
             },
             "autoload": {
@@ -11600,20 +11605,20 @@
                 "portable",
                 "shim"
             ],
-            "time": "2019-02-06T07:57:58+00:00"
+            "time": "2019-11-27T13:56:44+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.11.0",
+            "version": "v1.13.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
+                "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
-                "reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
+                "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
                 "shasum": ""
             },
             "require": {
@@ -11625,7 +11630,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.11-dev"
+                    "dev-master": "1.13-dev"
                 }
             },
             "autoload": {
@@ -11659,20 +11664,76 @@
                 "portable",
                 "shim"
             ],
-            "time": "2019-02-06T07:57:58+00:00"
+            "time": "2019-11-27T14:18:11+00:00"
+        },
+        {
+            "name": "symfony/polyfill-php56",
+            "version": "v1.13.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php56.git",
+                "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/53dd1cdf3cb986893ccf2b96665b25b3abb384f4",
+                "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3",
+                "symfony/polyfill-util": "~1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.13-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php56\\": ""
+                },
+                "files": [
+                    "bootstrap.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "time": "2019-11-27T13:56:44+00:00"
         },
         {
             "name": "symfony/polyfill-php70",
-            "version": "v1.11.0",
+            "version": "v1.13.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php70.git",
-                "reference": "bc4858fb611bda58719124ca079baff854149c89"
+                "reference": "af23c7bb26a73b850840823662dda371484926c4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89",
-                "reference": "bc4858fb611bda58719124ca079baff854149c89",
+                "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/af23c7bb26a73b850840823662dda371484926c4",
+                "reference": "af23c7bb26a73b850840823662dda371484926c4",
                 "shasum": ""
             },
             "require": {
@@ -11682,7 +11743,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.11-dev"
+                    "dev-master": "1.13-dev"
                 }
             },
             "autoload": {
@@ -11718,20 +11779,72 @@
                 "portable",
                 "shim"
             ],
-            "time": "2019-02-06T07:57:58+00:00"
+            "time": "2019-11-27T13:56:44+00:00"
+        },
+        {
+            "name": "symfony/polyfill-util",
+            "version": "v1.13.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-util.git",
+                "reference": "964a67f293b66b95883a5ed918a65354fcd2258f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/964a67f293b66b95883a5ed918a65354fcd2258f",
+                "reference": "964a67f293b66b95883a5ed918a65354fcd2258f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.13-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Polyfill\\Util\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Nicolas Grekas",
+                    "email": "p@tchwork.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Symfony utilities for portability of PHP codes",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compat",
+                "compatibility",
+                "polyfill",
+                "shim"
+            ],
+            "time": "2019-11-27T13:56:44+00:00"
         },
         {
             "name": "symfony/process",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "d129c017e8602507688ef2c3007951a16c1a8407"
+                "reference": "9a4545c01e1e4f473492bd52b71e574dcc401ca2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/d129c017e8602507688ef2c3007951a16c1a8407",
-                "reference": "d129c017e8602507688ef2c3007951a16c1a8407",
+                "url": "https://api.github.com/repos/symfony/process/zipball/9a4545c01e1e4f473492bd52b71e574dcc401ca2",
+                "reference": "9a4545c01e1e4f473492bd52b71e574dcc401ca2",
                 "shasum": ""
             },
             "require": {
@@ -11767,7 +11880,7 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "https://symfony.com",
-            "time": "2019-05-30T15:47:52+00:00"
+            "time": "2019-11-28T10:05:51+00:00"
         },
         {
             "name": "symfony/psr-http-message-bridge",
@@ -11834,16 +11947,16 @@
         },
         {
             "name": "symfony/routing",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "8d804d8a65a26dc9de1aaf2ff3a421e581d050e6"
+                "reference": "b689ccd48e234ea404806d94b07eeb45f9f6f06a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/8d804d8a65a26dc9de1aaf2ff3a421e581d050e6",
-                "reference": "8d804d8a65a26dc9de1aaf2ff3a421e581d050e6",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/b689ccd48e234ea404806d94b07eeb45f9f6f06a",
+                "reference": "b689ccd48e234ea404806d94b07eeb45f9f6f06a",
                 "shasum": ""
             },
             "require": {
@@ -11906,20 +12019,20 @@
                 "uri",
                 "url"
             ],
-            "time": "2019-06-26T11:14:13+00:00"
+            "time": "2019-12-01T08:33:36+00:00"
         },
         {
             "name": "symfony/serializer",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/serializer.git",
-                "reference": "c060c0e0b97dc13b3c3fd8f981a68fa32a24371c"
+                "reference": "05a1125ff3fdd10a68a2857a5d1d4a1ceb93ba42"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/serializer/zipball/c060c0e0b97dc13b3c3fd8f981a68fa32a24371c",
-                "reference": "c060c0e0b97dc13b3c3fd8f981a68fa32a24371c",
+                "url": "https://api.github.com/repos/symfony/serializer/zipball/05a1125ff3fdd10a68a2857a5d1d4a1ceb93ba42",
+                "reference": "05a1125ff3fdd10a68a2857a5d1d4a1ceb93ba42",
                 "shasum": ""
             },
             "require": {
@@ -11985,20 +12098,20 @@
             ],
             "description": "Symfony Serializer Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-14T05:50:06+00:00"
+            "time": "2019-11-25T16:36:22+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "5c07632afb8cb14b422051b651213ed17bf7c249"
+                "reference": "0be25347c4a8695d9423fe897f4c774f46e97b51"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/5c07632afb8cb14b422051b651213ed17bf7c249",
-                "reference": "5c07632afb8cb14b422051b651213ed17bf7c249",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/0be25347c4a8695d9423fe897f4c774f46e97b51",
+                "reference": "0be25347c4a8695d9423fe897f4c774f46e97b51",
                 "shasum": ""
             },
             "require": {
@@ -12055,20 +12168,20 @@
             ],
             "description": "Symfony Translation Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-13T10:34:15+00:00"
+            "time": "2019-11-23T20:30:33+00:00"
         },
         {
             "name": "symfony/validator",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/validator.git",
-                "reference": "d6561bff343346be8ff3e93eb5c4344985bc538b"
+                "reference": "55e329a518baa3b169b7d278620ae2cd76005188"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/d6561bff343346be8ff3e93eb5c4344985bc538b",
-                "reference": "d6561bff343346be8ff3e93eb5c4344985bc538b",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/55e329a518baa3b169b7d278620ae2cd76005188",
+                "reference": "55e329a518baa3b169b7d278620ae2cd76005188",
                 "shasum": ""
             },
             "require": {
@@ -12078,15 +12191,16 @@
                 "symfony/translation": "~2.8|~3.0|~4.0"
             },
             "conflict": {
+                "doctrine/lexer": "<1.0.2",
                 "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
                 "symfony/dependency-injection": "<3.3",
                 "symfony/http-kernel": "<3.3.5",
                 "symfony/yaml": "<3.4"
             },
             "require-dev": {
-                "doctrine/annotations": "~1.0",
+                "doctrine/annotations": "~1.7",
                 "doctrine/cache": "~1.0",
-                "egulias/email-validator": "^1.2.8|~2.0",
+                "egulias/email-validator": "^2.1.10",
                 "symfony/cache": "~3.1|~4.0",
                 "symfony/config": "~2.8|~3.0|~4.0",
                 "symfony/dependency-injection": "~3.3|~4.0",
@@ -12140,7 +12254,7 @@
             ],
             "description": "Symfony Validator Component",
             "homepage": "https://symfony.com",
-            "time": "2019-06-20T06:43:29+00:00"
+            "time": "2019-11-29T19:07:18+00:00"
         },
         {
             "name": "symfony/var-dumper",
@@ -12213,16 +12327,16 @@
         },
         {
             "name": "symfony/yaml",
-            "version": "v3.4.29",
+            "version": "v3.4.36",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996"
+                "reference": "dab657db15207879217fc81df4f875947bf68804"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996",
-                "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804",
+                "reference": "dab657db15207879217fc81df4f875947bf68804",
                 "shasum": ""
             },
             "require": {
@@ -12268,7 +12382,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "https://symfony.com",
-            "time": "2019-03-25T07:48:46+00:00"
+            "time": "2019-10-24T15:33:53+00:00"
         },
         {
             "name": "twig/extensions",
@@ -12393,16 +12507,16 @@
         },
         {
             "name": "typo3/phar-stream-wrapper",
-            "version": "v2.1.2",
+            "version": "v2.1.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/TYPO3/phar-stream-wrapper.git",
-                "reference": "057622f5a3b92a5ffbea0fbaadce573500a62870"
+                "reference": "e8a656d72028b97ab9f61ed993734f3cded02eeb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/057622f5a3b92a5ffbea0fbaadce573500a62870",
-                "reference": "057622f5a3b92a5ffbea0fbaadce573500a62870",
+                "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e8a656d72028b97ab9f61ed993734f3cded02eeb",
+                "reference": "e8a656d72028b97ab9f61ed993734f3cded02eeb",
                 "shasum": ""
             },
             "require": {
@@ -12435,7 +12549,7 @@
                 "security",
                 "stream-wrapper"
             ],
-            "time": "2019-05-14T13:14:31+00:00"
+            "time": "2019-10-18T11:59:10+00:00"
         },
         {
             "name": "webflo/drupal-finder",
@@ -12660,16 +12774,16 @@
         },
         {
             "name": "zendframework/zend-diactoros",
-            "version": "1.8.6",
+            "version": "1.8.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-diactoros.git",
-                "reference": "20da13beba0dde8fb648be3cc19765732790f46e"
+                "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e",
-                "reference": "20da13beba0dde8fb648be3cc19765732790f46e",
+                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/a85e67b86e9b8520d07e6415fcbcb8391b44a75b",
+                "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b",
                 "shasum": ""
             },
             "require": {
@@ -12689,9 +12803,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.8.x-dev",
-                    "dev-develop": "1.9.x-dev",
-                    "dev-release-2.0": "2.0.x-dev"
+                    "dev-release-1.8": "1.8.x-dev"
                 }
             },
             "autoload": {
@@ -12720,20 +12832,20 @@
                 "psr",
                 "psr-7"
             ],
-            "time": "2018-09-05T19:29:37+00:00"
+            "time": "2019-08-06T17:53:53+00:00"
         },
         {
             "name": "zendframework/zend-escaper",
-            "version": "2.6.0",
+            "version": "2.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/zend-escaper.git",
-                "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074"
+                "reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074",
-                "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074",
+                "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
+                "reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
                 "shasum": ""
             },
             "require": {
@@ -12765,7 +12877,7 @@
                 "escaper",
                 "zf"
             ],
-            "time": "2018-04-25T15:48:53+00:00"
+            "time": "2019-09-05T20:03:20+00:00"
         },
         {
             "name": "zendframework/zend-feed",
diff --git a/vendor/brumann/polyfill-unserialize/.gitattributes b/vendor/brumann/polyfill-unserialize/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..19e1a399236d2fa70935bb09f53d8f8d2d5719c2
--- /dev/null
+++ b/vendor/brumann/polyfill-unserialize/.gitattributes
@@ -0,0 +1,3 @@
+tests/              export-ignore
+.travis.yml         export-ignore
+phpunit.xml.dist    export-ignore
diff --git a/vendor/brumann/polyfill-unserialize/.gitignore b/vendor/brumann/polyfill-unserialize/.gitignore
index 767699f1b8582342107dc0150e56452dea18914f..997ec75f764c8ad5bd885b25dd5d91f971f922e9 100644
--- a/vendor/brumann/polyfill-unserialize/.gitignore
+++ b/vendor/brumann/polyfill-unserialize/.gitignore
@@ -1,4 +1,3 @@
-/vendor/
-/phpunit.xml
-/.composer.lock
-
+build/
+vendor/
+phpunit.xml
diff --git a/vendor/brumann/polyfill-unserialize/.travis.yml b/vendor/brumann/polyfill-unserialize/.travis.yml
deleted file mode 100644
index 352536f458432ba1da2310442477cba9a45a7834..0000000000000000000000000000000000000000
--- a/vendor/brumann/polyfill-unserialize/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: php
-
-sudo: false
-
-php:
-  - '5.3'
-  - '5.4'
-  - '5.5'
-  - '5.6'
-  - '7.0'
-  - '7.1'
-
-before_install:
-  - phpenv config-rm xdebug.ini
-  - composer self-update
-
-install:
-  - composer install
-
-script: phpunit
diff --git a/vendor/brumann/polyfill-unserialize/LICENSE b/vendor/brumann/polyfill-unserialize/LICENSE
index 0cb53d3b0261b902e062b5cb513b622d3b5b4484..ba944cccfe1f4960f96496a51d86f6e91bac31c7 100644
--- a/vendor/brumann/polyfill-unserialize/LICENSE
+++ b/vendor/brumann/polyfill-unserialize/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2016 Denis Brumann
+Copyright (c) 2016-2019 Denis Brumann
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/vendor/brumann/polyfill-unserialize/README.md b/vendor/brumann/polyfill-unserialize/README.md
index bac25fe049cf6635dbd64efd37d5a91a212f83bc..444f08fe29158cc2c596a5ea4e6afa677e95cf82 100644
--- a/vendor/brumann/polyfill-unserialize/README.md
+++ b/vendor/brumann/polyfill-unserialize/README.md
@@ -2,18 +2,23 @@ Polyfill unserialize [![Build Status](https://travis-ci.org/dbrumann/polyfill-un
 ===
 
 Backports unserialize options introduced in PHP 7.0 to older PHP versions.
-This was originally designed as a Proof of Concept for Symfony Issue [#21090](https://github.com/symfony/symfony/pull/21090).
+This was originally designed as a Proof of Concept for Symfony Issue
+[#21090](https://github.com/symfony/symfony/pull/21090).
 
-You can use this package in projects that rely on PHP versions older than PHP 7.0.
-In case you are using PHP 7.0+ the original `unserialize()` will be used instead.
+You can use this package in projects that rely on PHP versions older than
+PHP 7.0. In case you are using PHP 7.0+ the original `unserialize()` will be
+used instead.
 
 From the [documentation](https://secure.php.net/manual/en/function.unserialize.php):
 
-> Warning: Do not pass untrusted user input to unserialize(). Unserialization can
-> result in code being loaded and executed due to object instantiation
-> and autoloading, and a malicious user may be able to exploit this.
-
-This warning holds true even when `allowed_classes` is used.
+> **Warning**
+>
+> Do not pass untrusted user input to unserialize() regardless of the options
+> value of allowed_classes. Unserialization can result in code being loaded and
+> executed due to object instantiation and autoloading, and a malicious user
+> may be able to exploit this. Use a safe, standard data interchange format
+> such as JSON (via json_decode() and json_encode()) if you need to pass
+> serialized data to the user.
 
 Requirements
 ------------
@@ -25,7 +30,7 @@ Installation
 
 You can install this package via composer:
 
-```
+```bash
 composer require brumann/polyfill-unserialize "^1.0"
 ```
 
@@ -33,8 +38,10 @@ Known Issues
 ------------
 
 There is a mismatch in behavior when `allowed_classes` in `$options` is not
-of the correct type (array or boolean). PHP 7.1 will issue a warning, whereas
-PHP 7.0 will not. I opted to copy the behavior of the former.
+of the correct type (array or boolean). PHP 7.0 will not issue a warning that
+an invalid type was provided. This library will trigger a warning, similar to
+the one PHP 7.1+ will raise and then continue, assuming `false` to make sure
+no classes are deserialized by accident.
 
 Tests
 -----
@@ -48,14 +55,15 @@ for information how to install it on your system.
 
 You can run the test suite as follows:
 
-```
+```bash
 phpunit -c phpunit.xml.dist tests/
 ```
 
 Contributing
 ------------
 
-This package is considered feature complete. As such I will likely not update it
-unless there are security issues.
+This package is considered feature complete. As such I will likely not update
+it unless there are security issues.
 
-Should you find any bugs or have questions, feel free to submit an Issue or a Pull Request.
+Should you find any bugs or have questions, feel free to submit an Issue or a
+Pull Request on GitHub.
diff --git a/vendor/brumann/polyfill-unserialize/composer.lock b/vendor/brumann/polyfill-unserialize/composer.lock
new file mode 100644
index 0000000000000000000000000000000000000000..fc4975f21389be01647e948d965af33ebba67ad1
--- /dev/null
+++ b/vendor/brumann/polyfill-unserialize/composer.lock
@@ -0,0 +1,19 @@
+{
+    "_readme": [
+        "This file locks the dependencies of your project to a known state",
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+        "This file is @generated automatically"
+    ],
+    "content-hash": "4652074dc1ca355fb75426f0f6f439af",
+    "packages": [],
+    "packages-dev": [],
+    "aliases": [],
+    "minimum-stability": "stable",
+    "stability-flags": [],
+    "prefer-stable": false,
+    "prefer-lowest": false,
+    "platform": {
+        "php": "^5.3|^7.0"
+    },
+    "platform-dev": []
+}
diff --git a/vendor/brumann/polyfill-unserialize/phpunit.xml.dist b/vendor/brumann/polyfill-unserialize/phpunit.xml.dist
deleted file mode 100644
index 8fea1bab869db3e1491ad9f766c2043c92e0caad..0000000000000000000000000000000000000000
--- a/vendor/brumann/polyfill-unserialize/phpunit.xml.dist
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
-    backupGlobals="false"
-    colors="true"
-    bootstrap="vendor/autoload.php"
->
-    <php>
-        <ini name="error_reporting" value="-1" />
-    </php>
-
-    <testsuites>
-        <testsuite name="Brumann\Polyfill Test Suite">
-            <directory>./tests/</directory>
-        </testsuite>
-    </testsuites>
-
-    <filter>
-        <whitelist>
-            <directory>./src/</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/brumann/polyfill-unserialize/src/Unserialize.php b/vendor/brumann/polyfill-unserialize/src/Unserialize.php
index e025d55ed4ef2cbfb83a7a93b056f071ff10b367..712e3e5049ec6fd7da36d38b3b255689864b0670 100644
--- a/vendor/brumann/polyfill-unserialize/src/Unserialize.php
+++ b/vendor/brumann/polyfill-unserialize/src/Unserialize.php
@@ -17,38 +17,39 @@ public static function unserialize($serialized, array $options = array())
         if (PHP_VERSION_ID >= 70000) {
             return \unserialize($serialized, $options);
         }
-        if (!array_key_exists('allowed_classes', $options)) {
-            $options['allowed_classes'] = true;
-        }
-        $allowedClasses = $options['allowed_classes'];
-        if (true === $allowedClasses) {
+        if (!array_key_exists('allowed_classes', $options) || true === $options['allowed_classes']) {
             return \unserialize($serialized);
         }
+        $allowedClasses = $options['allowed_classes'];
         if (false === $allowedClasses) {
             $allowedClasses = array();
         }
         if (!is_array($allowedClasses)) {
+            $allowedClasses = array();
             trigger_error(
                 'unserialize(): allowed_classes option should be array or boolean',
                 E_USER_WARNING
             );
-            $allowedClasses = array();
         }
 
         $sanitizedSerialized = preg_replace_callback(
             '/(^|;)O:\d+:"([^"]*)":(\d+):{/',
             function ($match) use ($allowedClasses) {
-                list($completeMatch, $leftBorder, $className, $objectSize) = $match;
-                if (in_array($className, $allowedClasses)) {
+                $completeMatch = (string) array_shift($match);
+                $leftBorder = (string) array_shift($match);
+                $className = (string) array_shift($match);
+                $objectSize = (int) array_shift($match);
+
+                if (in_array($className, $allowedClasses, true)) {
                     return $completeMatch;
-                } else {
-                    return sprintf(
-                        '%sO:22:"__PHP_Incomplete_Class":%d:{s:27:"__PHP_Incomplete_Class_Name";%s',
-                        $leftBorder,
-                        $objectSize + 1, // size of object + 1 for added string
-                        \serialize($className)
-                    );
                 }
+
+                return sprintf(
+                    '%sO:22:"__PHP_Incomplete_Class":%d:{s:27:"__PHP_Incomplete_Class_Name";%s',
+                    $leftBorder,
+                    $objectSize + 1, // size of object + 1 for added string
+                    \serialize($className)
+                );
             },
             $serialized
         );
diff --git a/vendor/brumann/polyfill-unserialize/tests/Foo.php b/vendor/brumann/polyfill-unserialize/tests/Foo.php
deleted file mode 100644
index b2a16e575ac8a50f4c9020f8bf40a799ecad79a6..0000000000000000000000000000000000000000
--- a/vendor/brumann/polyfill-unserialize/tests/Foo.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Tests\Brumann\Polyfill;
-
-class Foo
-{
-}
diff --git a/vendor/brumann/polyfill-unserialize/tests/UnserializeTest.php b/vendor/brumann/polyfill-unserialize/tests/UnserializeTest.php
deleted file mode 100644
index e4ea424bcaaba79e5f5b180be062de4de3c8ae61..0000000000000000000000000000000000000000
--- a/vendor/brumann/polyfill-unserialize/tests/UnserializeTest.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-
-namespace Tests\Brumann\Polyfill;
-
-use Brumann\Polyfill\Unserialize;
-
-class UnserializeTest extends \PHPUnit_Framework_TestCase
-{
-    public function test_unserialize_without_options_returns_instance()
-    {
-        $foo = new Foo();
-        $serialized = serialize($foo);
-
-        $unserialized = Unserialize::unserialize($serialized);
-
-        $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized);
-    }
-
-    public function test_unserialize_with_cqn_returns_instance()
-    {
-        $foo = new Foo();
-        $serialized = serialize($foo);
-        $options = array(
-            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertInstanceOf('Tests\\Brumann\\Polyfill\\Foo', $unserialized);
-    }
-
-    public function test_unserialize_with_fqcn_allowed_returns_instance()
-    {
-        $foo = new Foo();
-        $serialized = serialize($foo);
-        $options = array(
-            'allowed_classes' => array('\\Tests\\Brumann\\Polyfill\\Foo'),
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
-    }
-
-    public function test_unserialize_with_allowed_classes_false_returns_incomplete_object()
-    {
-        $foo = new Foo();
-        $serialized = serialize($foo);
-        $options = array(
-            'allowed_classes' => false,
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
-    }
-
-    /**
-     * @requires PHP < 7.0
-     *
-     * @expectedException \PHPUnit_Framework_Error_Warning
-     * @expectedMessage allowed_classes option should be array or boolean
-     */
-    public function test_unserialize_with_allowed_classes_null_behaves_like_php71()
-    {
-        $foo = new Foo();
-        $serialized = serialize($foo);
-        $options = array(
-            'allowed_classes' => null,
-        );
-
-        Unserialize::unserialize($serialized, $options);
-    }
-
-    /**
-     * @expectedException \PHPUnit_Framework_Error_Notice
-     * @expectedExceptionMessage tried to execute a method or access a property of an incomplete object.
-     */
-    public function test_accessing_property_of_incomplete_object_returns_warning()
-    {
-        $bar = new \stdClass();
-        $bar->foo = new Foo();
-        $serialized = serialize($bar);
-        $options = array(
-            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
-        $unserialized->foo;
-    }
-
-    public function test_unserialize_only_parent_object()
-    {
-        $foo = new Foo();
-        $foo->bar = new \stdClass();
-        $serialized = serialize($foo);
-        $options = array(
-            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized);
-        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized->bar);
-    }
-
-    public function test_unserialize_parent_and_embedded_object()
-    {
-        $foo = new Foo();
-        $foo->foo = new Foo();
-        $serialized = serialize($foo);
-        $options = array(
-            'allowed_classes' => array('Tests\\Brumann\\Polyfill\\Foo'),
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized);
-        $this->assertInstanceOf('\\Tests\\Brumann\\Polyfill\\Foo', $unserialized->foo);
-    }
-
-    public function test_unserialize_with_allowed_classes_false_serializes_string()
-    {
-        $string = 'This is an ordinary string';
-        $serialized = serialize($string);
-        $options = array(
-            'allowed_classes' => false,
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertEquals($string, $unserialized);
-    }
-
-    public function test_unserialize_with_allowed_classes_false_serializes_bool()
-    {
-        $bool = true;
-        $serialized = serialize($bool);
-        $options = array(
-            'allowed_classes' => false,
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertEquals($bool, $unserialized);
-    }
-
-    public function test_unserialize_with_allowed_classes_false_serializes_array()
-    {
-        $array = array(
-            'key' => 42,
-            1 => 'foo',
-            'bar' => 'baz',
-            2 => 23,
-            4 => true,
-        );
-        $serialized = serialize($array);
-        $options = array(
-            'allowed_classes' => false,
-        );
-
-        $unserialized = Unserialize::unserialize($serialized, $options);
-
-        $this->assertSame($array, $unserialized);
-    }
-
-    public function test_double_serialized_unserializes_as_first_serialized()
-    {
-        $foo = new Foo();
-        $first = serialize($foo);
-        $second = serialize($first);
-        $options = array(
-            'allowed_classes' => false,
-        );
-
-        $unserialized = Unserialize::unserialize($second, $options);
-
-        $this->assertSame($first, $unserialized);
-    }
-
-    public function test_double_unserialize_double_serialized()
-    {
-        $foo = new Foo();
-        $serialized = serialize(serialize($foo));
-        $options = array(
-            'allowed_classes' => false,
-        );
-
-        $first = Unserialize::unserialize($serialized, $options);
-        $unserialized = Unserialize::unserialize($first, $options);
-
-        $this->assertInstanceOf('__PHP_Incomplete_Class', $unserialized);
-    }
-}
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 1abde09dee4aa3030fb6eac1e8b59132a36865be..f1c02b89428bcd81af818515a5ac64fa1a958408 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -2624,6 +2624,7 @@
     'Drupal\\Core\\Test\\HttpClientMiddleware\\TestHttpClientMiddleware' => $baseDir . '/web/core/lib/Drupal/Core/Test/HttpClientMiddleware/TestHttpClientMiddleware.php',
     'Drupal\\Core\\Test\\ObjectSerialization' => $baseDir . '/web/core/lib/Drupal/Core/Test/ObjectSerialization.php',
     'Drupal\\Core\\Test\\RefreshVariablesTrait' => $baseDir . '/web/core/lib/Drupal/Core/Test/RefreshVariablesTrait.php',
+    'Drupal\\Core\\Test\\RunTests\\TestFileParser' => $baseDir . '/web/core/lib/Drupal/Core/Test/RunTests/TestFileParser.php',
     'Drupal\\Core\\Test\\TestDatabase' => $baseDir . '/web/core/lib/Drupal/Core/Test/TestDatabase.php',
     'Drupal\\Core\\Test\\TestKernel' => $baseDir . '/web/core/lib/Drupal/Core/Test/TestKernel.php',
     'Drupal\\Core\\Test\\TestRunnerKernel' => $baseDir . '/web/core/lib/Drupal/Core/Test/TestRunnerKernel.php',
@@ -2705,6 +2706,7 @@
     'Drupal\\Core\\TypedData\\Validation\\RecursiveValidator' => $baseDir . '/web/core/lib/Drupal/Core/TypedData/Validation/RecursiveValidator.php',
     'Drupal\\Core\\TypedData\\Validation\\TypedDataAwareValidatorTrait' => $baseDir . '/web/core/lib/Drupal/Core/TypedData/Validation/TypedDataAwareValidatorTrait.php',
     'Drupal\\Core\\TypedData\\Validation\\TypedDataMetadata' => $baseDir . '/web/core/lib/Drupal/Core/TypedData/Validation/TypedDataMetadata.php',
+    'Drupal\\Core\\Update\\UpdateCompilerPass' => $baseDir . '/web/core/lib/Drupal/Core/Update/UpdateCompilerPass.php',
     'Drupal\\Core\\Update\\UpdateKernel' => $baseDir . '/web/core/lib/Drupal/Core/Update/UpdateKernel.php',
     'Drupal\\Core\\Update\\UpdateRegistry' => $baseDir . '/web/core/lib/Drupal/Core/Update/UpdateRegistry.php',
     'Drupal\\Core\\Update\\UpdateRegistryFactory' => $baseDir . '/web/core/lib/Drupal/Core/Update/UpdateRegistryFactory.php',
@@ -3130,6 +3132,7 @@
     'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
     'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
     'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
+    'GuzzleHttp\\Exception\\InvalidArgumentException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php',
     'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
     'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
     'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
@@ -3257,7 +3260,6 @@
     'PEAR_Error' => $vendorDir . '/pear/pear-core-minimal/src/PEAR.php',
     'PEAR_ErrorStack' => $vendorDir . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php',
     'PEAR_Exception' => $vendorDir . '/pear/pear_exception/PEAR/Exception.php',
-    'PEAR_ExceptionTest' => $vendorDir . '/pear/pear_exception/tests/PEAR/ExceptionTest.php',
     'PantheonSystems\\CDNBehatHelpers\\AgeTracker' => $baseDir . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/AgeTracker.php',
     'PantheonSystems\\CDNBehatHelpers\\Contexts\\FeatureContext' => $baseDir . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/Contexts/FeatureContext.php',
     'PantheonSystems\\CDNBehatHelpers\\tests\\AgeTrackerTest' => $baseDir . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/tests/AgeTrackerTest.php',
@@ -5150,7 +5152,7 @@
     'Symfony\\Component\\Validator\\ObjectInitializerInterface' => $vendorDir . '/symfony/validator/ObjectInitializerInterface.php',
     'Symfony\\Component\\Validator\\Test\\ConstraintValidatorTestCase' => $vendorDir . '/symfony/validator/Test/ConstraintValidatorTestCase.php',
     'Symfony\\Component\\Validator\\Test\\ConstraintViolationAssertion' => $vendorDir . '/symfony/validator/Test/ConstraintValidatorTestCase.php',
-    'Symfony\\Component\\Validator\\Test\\TestCaseSetUpTearDownTrait' => $vendorDir . '/symfony/validator/Test/TestCaseSetUpTearDownTrait.php',
+    'Symfony\\Component\\Validator\\Test\\ForwardCompatTestTrait' => $vendorDir . '/symfony/validator/Test/ForwardCompatTestTrait.php',
     'Symfony\\Component\\Validator\\Util\\PropertyPath' => $vendorDir . '/symfony/validator/Util/PropertyPath.php',
     'Symfony\\Component\\Validator\\Validation' => $vendorDir . '/symfony/validator/Validation.php',
     'Symfony\\Component\\Validator\\ValidatorBuilder' => $vendorDir . '/symfony/validator/ValidatorBuilder.php',
@@ -5217,7 +5219,16 @@
     'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
     'Symfony\\Polyfill\\Iconv\\Iconv' => $vendorDir . '/symfony/polyfill-iconv/Iconv.php',
     'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
+    'Symfony\\Polyfill\\Php56\\Php56' => $vendorDir . '/symfony/polyfill-php56/Php56.php',
     'Symfony\\Polyfill\\Php70\\Php70' => $vendorDir . '/symfony/polyfill-php70/Php70.php',
+    'Symfony\\Polyfill\\Util\\Binary' => $vendorDir . '/symfony/polyfill-util/Binary.php',
+    'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryNoFuncOverload.php',
+    'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryOnFuncOverload.php',
+    'Symfony\\Polyfill\\Util\\TestListener' => $vendorDir . '/symfony/polyfill-util/TestListener.php',
+    'Symfony\\Polyfill\\Util\\TestListenerForV5' => $vendorDir . '/symfony/polyfill-util/TestListenerForV5.php',
+    'Symfony\\Polyfill\\Util\\TestListenerForV6' => $vendorDir . '/symfony/polyfill-util/TestListenerForV6.php',
+    'Symfony\\Polyfill\\Util\\TestListenerForV7' => $vendorDir . '/symfony/polyfill-util/TestListenerForV7.php',
+    'Symfony\\Polyfill\\Util\\TestListenerTrait' => $vendorDir . '/symfony/polyfill-util/TestListenerTrait.php',
     'System' => $vendorDir . '/pear/pear-core-minimal/src/System.php',
     'TYPO3\\PharStreamWrapper\\Assertable' => $vendorDir . '/typo3/phar-stream-wrapper/src/Assertable.php',
     'TYPO3\\PharStreamWrapper\\Behavior' => $vendorDir . '/typo3/phar-stream-wrapper/src/Behavior.php',
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
index 99ed59874660781b44a642b0416763277a9891d4..e27cd9d82653c9f7eec892bc16fc0ec312d31d29 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -9,6 +9,7 @@
     '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
     '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
     '023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php',
+    'bd9634f2d41831496de0d3dfe4c94881' => $vendorDir . '/symfony/polyfill-php56/bootstrap.php',
     '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
     '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
     'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
index 95bd206b1e0447cd5cba7fb41cbf1e1fd7af014a..8c5b9f67e1c87a7e2298c6b339ebf4b67b531ad8 100644
--- a/vendor/composer/autoload_namespaces.php
+++ b/vendor/composer/autoload_namespaces.php
@@ -10,7 +10,6 @@
     'Twig_' => array($vendorDir . '/twig/twig/lib'),
     'Stack' => array($vendorDir . '/stack/builder/src'),
     'SAML2\\' => array($vendorDir . '/simplesamlphp/saml2/src'),
-    'PEAR' => array($vendorDir . '/pear/pear_exception'),
     'EasyRdf_' => array($vendorDir . '/easyrdf/easyrdf/lib'),
     'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/lib'),
     'Dflydev\\PlaceholderResolver' => array($vendorDir . '/dflydev/placeholder-resolver/src'),
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 96ec0a75e854219e4a33b7aa68e400dec82a0e2f..85985433a44de0264e6ec5d5e8e0216803642765 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -20,7 +20,9 @@
     'Twig\\Extensions\\' => array($vendorDir . '/twig/extensions/src'),
     'Twig\\' => array($vendorDir . '/twig/twig/src'),
     'TYPO3\\PharStreamWrapper\\' => array($vendorDir . '/typo3/phar-stream-wrapper/src'),
+    'Symfony\\Polyfill\\Util\\' => array($vendorDir . '/symfony/polyfill-util'),
     'Symfony\\Polyfill\\Php70\\' => array($vendorDir . '/symfony/polyfill-php70'),
+    'Symfony\\Polyfill\\Php56\\' => array($vendorDir . '/symfony/polyfill-php56'),
     'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
     'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
     'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 6e1a6a9424fbf9b298573d178be7209da7851a14..479abd309d7a31c8cec9eedbcbe179e4ac37f945 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -10,6 +10,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
         '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
         '023d27dca8066ef29e6739335ea73bad' => __DIR__ . '/..' . '/symfony/polyfill-php70/bootstrap.php',
+        'bd9634f2d41831496de0d3dfe4c94881' => __DIR__ . '/..' . '/symfony/polyfill-php56/bootstrap.php',
         '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
         '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
         'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
@@ -69,7 +70,9 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         ),
         'S' => 
         array (
+            'Symfony\\Polyfill\\Util\\' => 22,
             'Symfony\\Polyfill\\Php70\\' => 23,
+            'Symfony\\Polyfill\\Php56\\' => 23,
             'Symfony\\Polyfill\\Mbstring\\' => 26,
             'Symfony\\Polyfill\\Iconv\\' => 23,
             'Symfony\\Polyfill\\Ctype\\' => 23,
@@ -249,10 +252,18 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         array (
             0 => __DIR__ . '/..' . '/typo3/phar-stream-wrapper/src',
         ),
+        'Symfony\\Polyfill\\Util\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-util',
+        ),
         'Symfony\\Polyfill\\Php70\\' => 
         array (
             0 => __DIR__ . '/..' . '/symfony/polyfill-php70',
         ),
+        'Symfony\\Polyfill\\Php56\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-php56',
+        ),
         'Symfony\\Polyfill\\Mbstring\\' => 
         array (
             0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
@@ -598,13 +609,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
                 0 => __DIR__ . '/..' . '/simplesamlphp/saml2/src',
             ),
         ),
-        'P' => 
-        array (
-            'PEAR' => 
-            array (
-                0 => __DIR__ . '/..' . '/pear/pear_exception',
-            ),
-        ),
         'E' => 
         array (
             'EasyRdf_' => 
@@ -3274,6 +3278,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Core\\Test\\HttpClientMiddleware\\TestHttpClientMiddleware' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/HttpClientMiddleware/TestHttpClientMiddleware.php',
         'Drupal\\Core\\Test\\ObjectSerialization' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/ObjectSerialization.php',
         'Drupal\\Core\\Test\\RefreshVariablesTrait' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/RefreshVariablesTrait.php',
+        'Drupal\\Core\\Test\\RunTests\\TestFileParser' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/RunTests/TestFileParser.php',
         'Drupal\\Core\\Test\\TestDatabase' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/TestDatabase.php',
         'Drupal\\Core\\Test\\TestKernel' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/TestKernel.php',
         'Drupal\\Core\\Test\\TestRunnerKernel' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Test/TestRunnerKernel.php',
@@ -3355,6 +3360,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Drupal\\Core\\TypedData\\Validation\\RecursiveValidator' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/TypedData/Validation/RecursiveValidator.php',
         'Drupal\\Core\\TypedData\\Validation\\TypedDataAwareValidatorTrait' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/TypedData/Validation/TypedDataAwareValidatorTrait.php',
         'Drupal\\Core\\TypedData\\Validation\\TypedDataMetadata' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/TypedData/Validation/TypedDataMetadata.php',
+        'Drupal\\Core\\Update\\UpdateCompilerPass' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Update/UpdateCompilerPass.php',
         'Drupal\\Core\\Update\\UpdateKernel' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Update/UpdateKernel.php',
         'Drupal\\Core\\Update\\UpdateRegistry' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Update/UpdateRegistry.php',
         'Drupal\\Core\\Update\\UpdateRegistryFactory' => __DIR__ . '/../..' . '/web/core/lib/Drupal/Core/Update/UpdateRegistryFactory.php',
@@ -3780,6 +3786,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
         'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
         'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
+        'GuzzleHttp\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php',
         'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
         'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
         'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
@@ -3907,7 +3914,6 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'PEAR_Error' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR.php',
         'PEAR_ErrorStack' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php',
         'PEAR_Exception' => __DIR__ . '/..' . '/pear/pear_exception/PEAR/Exception.php',
-        'PEAR_ExceptionTest' => __DIR__ . '/..' . '/pear/pear_exception/tests/PEAR/ExceptionTest.php',
         'PantheonSystems\\CDNBehatHelpers\\AgeTracker' => __DIR__ . '/../..' . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/AgeTracker.php',
         'PantheonSystems\\CDNBehatHelpers\\Contexts\\FeatureContext' => __DIR__ . '/../..' . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/Contexts/FeatureContext.php',
         'PantheonSystems\\CDNBehatHelpers\\tests\\AgeTrackerTest' => __DIR__ . '/../..' . '/web/modules/pantheon_advanced_page_cache/tests/behat/helper_classes/tests/AgeTrackerTest.php',
@@ -5800,7 +5806,7 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Component\\Validator\\ObjectInitializerInterface' => __DIR__ . '/..' . '/symfony/validator/ObjectInitializerInterface.php',
         'Symfony\\Component\\Validator\\Test\\ConstraintValidatorTestCase' => __DIR__ . '/..' . '/symfony/validator/Test/ConstraintValidatorTestCase.php',
         'Symfony\\Component\\Validator\\Test\\ConstraintViolationAssertion' => __DIR__ . '/..' . '/symfony/validator/Test/ConstraintValidatorTestCase.php',
-        'Symfony\\Component\\Validator\\Test\\TestCaseSetUpTearDownTrait' => __DIR__ . '/..' . '/symfony/validator/Test/TestCaseSetUpTearDownTrait.php',
+        'Symfony\\Component\\Validator\\Test\\ForwardCompatTestTrait' => __DIR__ . '/..' . '/symfony/validator/Test/ForwardCompatTestTrait.php',
         'Symfony\\Component\\Validator\\Util\\PropertyPath' => __DIR__ . '/..' . '/symfony/validator/Util/PropertyPath.php',
         'Symfony\\Component\\Validator\\Validation' => __DIR__ . '/..' . '/symfony/validator/Validation.php',
         'Symfony\\Component\\Validator\\ValidatorBuilder' => __DIR__ . '/..' . '/symfony/validator/ValidatorBuilder.php',
@@ -5867,7 +5873,16 @@ class ComposerStaticInit5c689ffcd54b9e495ed983fdce09b530
         'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php',
         'Symfony\\Polyfill\\Iconv\\Iconv' => __DIR__ . '/..' . '/symfony/polyfill-iconv/Iconv.php',
         'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
+        'Symfony\\Polyfill\\Php56\\Php56' => __DIR__ . '/..' . '/symfony/polyfill-php56/Php56.php',
         'Symfony\\Polyfill\\Php70\\Php70' => __DIR__ . '/..' . '/symfony/polyfill-php70/Php70.php',
+        'Symfony\\Polyfill\\Util\\Binary' => __DIR__ . '/..' . '/symfony/polyfill-util/Binary.php',
+        'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryNoFuncOverload.php',
+        'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryOnFuncOverload.php',
+        'Symfony\\Polyfill\\Util\\TestListener' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListener.php',
+        'Symfony\\Polyfill\\Util\\TestListenerForV5' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerForV5.php',
+        'Symfony\\Polyfill\\Util\\TestListenerForV6' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerForV6.php',
+        'Symfony\\Polyfill\\Util\\TestListenerForV7' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerForV7.php',
+        'Symfony\\Polyfill\\Util\\TestListenerTrait' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerTrait.php',
         'System' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/System.php',
         'TYPO3\\PharStreamWrapper\\Assertable' => __DIR__ . '/..' . '/typo3/phar-stream-wrapper/src/Assertable.php',
         'TYPO3\\PharStreamWrapper\\Behavior' => __DIR__ . '/..' . '/typo3/phar-stream-wrapper/src/Behavior.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 0a8b45f3c008f0c81ddae4b0ce1e76c8d8be8369..546cd86083def4ece09d1120c950a10d1495d157 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -133,23 +133,23 @@
     },
     {
         "name": "brumann/polyfill-unserialize",
-        "version": "v1.0.3",
-        "version_normalized": "1.0.3.0",
+        "version": "v1.0.4",
+        "version_normalized": "1.0.4.0",
         "source": {
             "type": "git",
             "url": "https://github.com/dbrumann/polyfill-unserialize.git",
-            "reference": "844d7e44b62a1a3d5c68cfb7ebbd59c17ea0fd7b"
+            "reference": "8ed1cd343ddc134a7ef649aca0aa0fe2a1b45008"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/dbrumann/polyfill-unserialize/zipball/844d7e44b62a1a3d5c68cfb7ebbd59c17ea0fd7b",
-            "reference": "844d7e44b62a1a3d5c68cfb7ebbd59c17ea0fd7b",
+            "url": "https://api.github.com/repos/dbrumann/polyfill-unserialize/zipball/8ed1cd343ddc134a7ef649aca0aa0fe2a1b45008",
+            "reference": "8ed1cd343ddc134a7ef649aca0aa0fe2a1b45008",
             "shasum": ""
         },
         "require": {
             "php": "^5.3|^7.0"
         },
-        "time": "2017-02-03T09:55:47+00:00",
+        "time": "2019-07-14T23:16:24+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -3532,17 +3532,17 @@
     },
     {
         "name": "drupal/core",
-        "version": "8.7.5",
-        "version_normalized": "8.7.5.0",
+        "version": "8.7.11",
+        "version_normalized": "8.7.11.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core.git",
-            "reference": "12cea52c782bb76e666c54c2a65cd3946daa3613"
+            "reference": "a691876294fadc2795a8add96359b5ffc109d7f2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core/zipball/12cea52c782bb76e666c54c2a65cd3946daa3613",
-            "reference": "12cea52c782bb76e666c54c2a65cd3946daa3613",
+            "url": "https://api.github.com/repos/drupal/core/zipball/a691876294fadc2795a8add96359b5ffc109d7f2",
+            "reference": "a691876294fadc2795a8add96359b5ffc109d7f2",
             "shasum": ""
         },
         "require": {
@@ -3568,7 +3568,7 @@
             "guzzlehttp/guzzle": "^6.2.1",
             "masterminds/html5": "^2.1",
             "paragonie/random_compat": "^1.0|^2.0|^9.99.99",
-            "pear/archive_tar": "^1.4",
+            "pear/archive_tar": "^1.4.9",
             "php": "^5.5.9|>=7.0.8",
             "stack/builder": "^1.0",
             "symfony-cmf/routing": "^1.4",
@@ -3580,7 +3580,7 @@
             "symfony/http-kernel": "~3.4.14",
             "symfony/polyfill-iconv": "^1.0",
             "symfony/process": "~3.4.0",
-            "symfony/psr-http-message-bridge": "^1.0",
+            "symfony/psr-http-message-bridge": "^1.1.2",
             "symfony/routing": "~3.4.0",
             "symfony/serializer": "~3.4.0",
             "symfony/translation": "~3.4.0",
@@ -3592,7 +3592,8 @@
             "zendframework/zend-feed": "^2.4"
         },
         "conflict": {
-            "drush/drush": "<8.1.10"
+            "drush/drush": "<8.1.10",
+            "symfony/dom-crawler": ">=4"
         },
         "replace": {
             "drupal/action": "self.version",
@@ -3719,7 +3720,7 @@
             "symfony/debug": "^3.4.0",
             "symfony/phpunit-bridge": "^3.4.3"
         },
-        "time": "2019-07-16T16:24:57+00:00",
+        "time": "2019-12-18T08:55:29+00:00",
         "type": "drupal-core",
         "extra": {
             "merge-plugin": {
@@ -9048,17 +9049,17 @@
     },
     {
         "name": "egulias/email-validator",
-        "version": "2.1.9",
-        "version_normalized": "2.1.9.0",
+        "version": "2.1.11",
+        "version_normalized": "2.1.11.0",
         "source": {
             "type": "git",
             "url": "https://github.com/egulias/EmailValidator.git",
-            "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25"
+            "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25",
-            "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25",
+            "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23",
+            "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23",
             "shasum": ""
         },
         "require": {
@@ -9068,16 +9069,17 @@
         "require-dev": {
             "dominicsayers/isemail": "dev-master",
             "phpunit/phpunit": "^4.8.35||^5.7||^6.0",
-            "satooshi/php-coveralls": "^1.0.1"
+            "satooshi/php-coveralls": "^1.0.1",
+            "symfony/phpunit-bridge": "^4.4@dev"
         },
         "suggest": {
             "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
         },
-        "time": "2019-06-23T10:14:27+00:00",
+        "time": "2019-08-13T17:33:27+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.0.x-dev"
+                "dev-master": "2.1.x-dev"
             }
         },
         "installation-source": "dist",
@@ -9383,47 +9385,49 @@
     },
     {
         "name": "guzzlehttp/guzzle",
-        "version": "6.3.3",
-        "version_normalized": "6.3.3.0",
+        "version": "6.5.0",
+        "version_normalized": "6.5.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/guzzle/guzzle.git",
-            "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
+            "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
-            "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
+            "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
+            "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
             "shasum": ""
         },
         "require": {
+            "ext-json": "*",
             "guzzlehttp/promises": "^1.0",
-            "guzzlehttp/psr7": "^1.4",
+            "guzzlehttp/psr7": "^1.6.1",
             "php": ">=5.5"
         },
         "require-dev": {
             "ext-curl": "*",
             "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-            "psr/log": "^1.0"
+            "psr/log": "^1.1"
         },
         "suggest": {
+            "ext-intl": "Required for Internationalized Domain Name (IDN) support",
             "psr/log": "Required for using the Log middleware"
         },
-        "time": "2018-04-22T15:46:56+00:00",
+        "time": "2019-12-07T18:20:45+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "6.3-dev"
+                "dev-master": "6.5-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
-            "files": [
-                "src/functions_include.php"
-            ],
             "psr-4": {
                 "GuzzleHttp\\": "src/"
-            }
+            },
+            "files": [
+                "src/functions_include.php"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
@@ -9838,17 +9842,17 @@
     },
     {
         "name": "masterminds/html5",
-        "version": "2.6.0",
-        "version_normalized": "2.6.0.0",
+        "version": "2.7.0",
+        "version_normalized": "2.7.0.0",
         "source": {
             "type": "git",
             "url": "https://github.com/Masterminds/html5-php.git",
-            "reference": "c961ca6a0a81dc6b55b6859b3f9ea7f402edf9ad"
+            "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/c961ca6a0a81dc6b55b6859b3f9ea7f402edf9ad",
-            "reference": "c961ca6a0a81dc6b55b6859b3f9ea7f402edf9ad",
+            "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/104443ad663d15981225f99532ba73c2f1d6b6f2",
+            "reference": "104443ad663d15981225f99532ba73c2f1d6b6f2",
             "shasum": ""
         },
         "require": {
@@ -9862,11 +9866,11 @@
             "sami/sami": "~2.0",
             "satooshi/php-coveralls": "1.0.*"
         },
-        "time": "2019-03-10T11:41:28+00:00",
+        "time": "2019-07-25T07:03:26+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.6-dev"
+                "dev-master": "2.7-dev"
             }
         },
         "installation-source": "dist",
@@ -9884,13 +9888,13 @@
                 "name": "Matt Butcher",
                 "email": "technosophos@gmail.com"
             },
-            {
-                "name": "Asmir Mustafic",
-                "email": "goetas@gmail.com"
-            },
             {
                 "name": "Matt Farina",
                 "email": "matt@mattfarina.com"
+            },
+            {
+                "name": "Asmir Mustafic",
+                "email": "goetas@gmail.com"
             }
         ],
         "description": "An HTML5 parser and serializer.",
@@ -10166,17 +10170,17 @@
     },
     {
         "name": "pear/archive_tar",
-        "version": "1.4.7",
-        "version_normalized": "1.4.7.0",
+        "version": "1.4.9",
+        "version_normalized": "1.4.9.0",
         "source": {
             "type": "git",
             "url": "https://github.com/pear/Archive_Tar.git",
-            "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845"
+            "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845",
-            "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845",
+            "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/c5b00053770e1d72128252c62c2c1a12c26639f0",
+            "reference": "c5b00053770e1d72128252c62c2c1a12c26639f0",
             "shasum": ""
         },
         "require": {
@@ -10191,7 +10195,7 @@
             "ext-xz": "Lzma2 compression support.",
             "ext-zlib": "Gzip compression support."
         },
-        "time": "2019-04-08T13:15:55+00:00",
+        "time": "2019-12-04T10:17:28+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -10234,20 +10238,20 @@
     },
     {
         "name": "pear/console_getopt",
-        "version": "v1.4.2",
-        "version_normalized": "1.4.2.0",
+        "version": "v1.4.3",
+        "version_normalized": "1.4.3.0",
         "source": {
             "type": "git",
             "url": "https://github.com/pear/Console_Getopt.git",
-            "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0"
+            "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0",
-            "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0",
+            "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+            "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
             "shasum": ""
         },
-        "time": "2019-02-06T16:52:33+00:00",
+        "time": "2019-11-20T18:27:48+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -10263,11 +10267,6 @@
             "BSD-2-Clause"
         ],
         "authors": [
-            {
-                "name": "Greg Beaver",
-                "email": "cellog@php.net",
-                "role": "Helper"
-            },
             {
                 "name": "Andrei Zmievski",
                 "email": "andrei@php.net",
@@ -10277,6 +10276,11 @@
                 "name": "Stig Bakken",
                 "email": "stig@php.net",
                 "role": "Developer"
+            },
+            {
+                "name": "Greg Beaver",
+                "email": "cellog@php.net",
+                "role": "Helper"
             }
         ],
         "description": "More info available on: http://pear.php.net/package/Console_Getopt"
@@ -10340,17 +10344,17 @@
     },
     {
         "name": "pear/pear-core-minimal",
-        "version": "v1.10.9",
-        "version_normalized": "1.10.9.0",
+        "version": "v1.10.10",
+        "version_normalized": "1.10.10.0",
         "source": {
             "type": "git",
             "url": "https://github.com/pear/pear-core-minimal.git",
-            "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f"
+            "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f",
-            "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f",
+            "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+            "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
             "shasum": ""
         },
         "require": {
@@ -10360,7 +10364,7 @@
         "replace": {
             "rsky/pear-core-min": "self.version"
         },
-        "time": "2019-03-13T18:15:44+00:00",
+        "time": "2019-11-19T19:00:24+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -10386,17 +10390,17 @@
     },
     {
         "name": "pear/pear_exception",
-        "version": "v1.0.0",
-        "version_normalized": "1.0.0.0",
+        "version": "v1.0.1",
+        "version_normalized": "1.0.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/pear/PEAR_Exception.git",
-            "reference": "8c18719fdae000b690e3912be401c76e406dd13b"
+            "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
-            "reference": "8c18719fdae000b690e3912be401c76e406dd13b",
+            "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
+            "reference": "dbb42a5a0e45f3adcf99babfb2a1ba77b8ac36a7",
             "shasum": ""
         },
         "require": {
@@ -10405,7 +10409,7 @@
         "require-dev": {
             "phpunit/phpunit": "*"
         },
-        "time": "2015-02-10T20:07:52+00:00",
+        "time": "2019-12-10T10:24:42+00:00",
         "type": "class",
         "extra": {
             "branch-alias": {
@@ -10414,9 +10418,9 @@
         },
         "installation-source": "dist",
         "autoload": {
-            "psr-0": {
-                "PEAR": ""
-            }
+            "classmap": [
+                "PEAR/"
+            ]
         },
         "notification-url": "https://packagist.org/downloads/",
         "include-path": [
@@ -11107,17 +11111,17 @@
     },
     {
         "name": "symfony/class-loader",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/class-loader.git",
-            "reference": "4459eef5298dedfb69f771186a580062b8516497"
+            "reference": "e212b06996819a2bce026a63da03b7182d05a690"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497",
-            "reference": "4459eef5298dedfb69f771186a580062b8516497",
+            "url": "https://api.github.com/repos/symfony/class-loader/zipball/e212b06996819a2bce026a63da03b7182d05a690",
+            "reference": "e212b06996819a2bce026a63da03b7182d05a690",
             "shasum": ""
         },
         "require": {
@@ -11130,7 +11134,7 @@
         "suggest": {
             "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
         },
-        "time": "2019-01-16T09:39:14+00:00",
+        "time": "2019-08-20T13:31:17+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11231,17 +11235,17 @@
     },
     {
         "name": "symfony/console",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/console.git",
-            "reference": "c4d2f3529755ffc0be9fb823583b28d8744eeb3d"
+            "reference": "1ee23b3b659b06c622f2bd2492a229e416eb4586"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/console/zipball/c4d2f3529755ffc0be9fb823583b28d8744eeb3d",
-            "reference": "c4d2f3529755ffc0be9fb823583b28d8744eeb3d",
+            "url": "https://api.github.com/repos/symfony/console/zipball/1ee23b3b659b06c622f2bd2492a229e416eb4586",
+            "reference": "1ee23b3b659b06c622f2bd2492a229e416eb4586",
             "shasum": ""
         },
         "require": {
@@ -11270,7 +11274,7 @@
             "symfony/lock": "",
             "symfony/process": ""
         },
-        "time": "2019-06-05T11:33:52+00:00",
+        "time": "2019-12-01T10:04:45+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11360,17 +11364,17 @@
     },
     {
         "name": "symfony/debug",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/debug.git",
-            "reference": "1172dc1abe44dfadd162239153818b074e6e53bf"
+            "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/debug/zipball/1172dc1abe44dfadd162239153818b074e6e53bf",
-            "reference": "1172dc1abe44dfadd162239153818b074e6e53bf",
+            "url": "https://api.github.com/repos/symfony/debug/zipball/f72e33fdb1170b326e72c3157f0cd456351dd086",
+            "reference": "f72e33fdb1170b326e72c3157f0cd456351dd086",
             "shasum": ""
         },
         "require": {
@@ -11383,7 +11387,7 @@
         "require-dev": {
             "symfony/http-kernel": "~2.8|~3.0|~4.0"
         },
-        "time": "2019-06-18T21:26:03+00:00",
+        "time": "2019-10-24T15:33:53+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11418,17 +11422,17 @@
     },
     {
         "name": "symfony/dependency-injection",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/dependency-injection.git",
-            "reference": "76857ce235ba1866b66a1d5be34c6794c8895435"
+            "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/76857ce235ba1866b66a1d5be34c6794c8895435",
-            "reference": "76857ce235ba1866b66a1d5be34c6794c8895435",
+            "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0d201916bfb3af939fec3c0c8815ea16c60ac1a2",
+            "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2",
             "shasum": ""
         },
         "require": {
@@ -11456,7 +11460,7 @@
             "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
             "symfony/yaml": ""
         },
-        "time": "2019-05-30T15:47:52+00:00",
+        "time": "2019-12-01T08:33:36+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11550,17 +11554,17 @@
     },
     {
         "name": "symfony/event-dispatcher",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/event-dispatcher.git",
-            "reference": "f18fdd6cc7006441865e698420cee26bac94741f"
+            "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f18fdd6cc7006441865e698420cee26bac94741f",
-            "reference": "f18fdd6cc7006441865e698420cee26bac94741f",
+            "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177",
+            "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177",
             "shasum": ""
         },
         "require": {
@@ -11580,7 +11584,7 @@
             "symfony/dependency-injection": "",
             "symfony/http-kernel": ""
         },
-        "time": "2019-06-25T07:45:31+00:00",
+        "time": "2019-10-24T15:33:53+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11718,17 +11722,17 @@
     },
     {
         "name": "symfony/http-foundation",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/http-foundation.git",
-            "reference": "8cfbf75bb3a72963b12c513a73e9247891df24f8"
+            "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8cfbf75bb3a72963b12c513a73e9247891df24f8",
-            "reference": "8cfbf75bb3a72963b12c513a73e9247891df24f8",
+            "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d2d0cfe8e319d9df44c4cca570710fcf221d4593",
+            "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593",
             "shasum": ""
         },
         "require": {
@@ -11739,7 +11743,7 @@
         "require-dev": {
             "symfony/expression-language": "~2.8|~3.0|~4.0"
         },
-        "time": "2019-06-22T20:10:25+00:00",
+        "time": "2019-11-28T12:52:59+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11774,17 +11778,17 @@
     },
     {
         "name": "symfony/http-kernel",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/http-kernel.git",
-            "reference": "abbb38dbab652ddc40a86d0c3b0e14ca52d58ed2"
+            "reference": "c42c8339acb28cfff0fb1786948db4d23d609ff7"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/http-kernel/zipball/abbb38dbab652ddc40a86d0c3b0e14ca52d58ed2",
-            "reference": "abbb38dbab652ddc40a86d0c3b0e14ca52d58ed2",
+            "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c42c8339acb28cfff0fb1786948db4d23d609ff7",
+            "reference": "c42c8339acb28cfff0fb1786948db4d23d609ff7",
             "shasum": ""
         },
         "require": {
@@ -11793,7 +11797,8 @@
             "symfony/debug": "^3.3.3|~4.0",
             "symfony/event-dispatcher": "~2.8|~3.0|~4.0",
             "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
-            "symfony/polyfill-ctype": "~1.8"
+            "symfony/polyfill-ctype": "~1.8",
+            "symfony/polyfill-php56": "~1.8"
         },
         "conflict": {
             "symfony/config": "<2.8",
@@ -11830,7 +11835,7 @@
             "symfony/finder": "",
             "symfony/var-dumper": ""
         },
-        "time": "2019-06-26T13:56:39+00:00",
+        "time": "2019-12-01T13:50:37+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -11925,17 +11930,17 @@
     },
     {
         "name": "symfony/polyfill-iconv",
-        "version": "v1.11.0",
-        "version_normalized": "1.11.0.0",
+        "version": "v1.13.1",
+        "version_normalized": "1.13.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/polyfill-iconv.git",
-            "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7"
+            "reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7",
-            "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7",
+            "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/a019efccc03f1a335af6b4f20c30f5ea8060be36",
+            "reference": "a019efccc03f1a335af6b4f20c30f5ea8060be36",
             "shasum": ""
         },
         "require": {
@@ -11944,11 +11949,11 @@
         "suggest": {
             "ext-iconv": "For best performance"
         },
-        "time": "2019-02-06T07:57:58+00:00",
+        "time": "2019-11-27T13:56:44+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.11-dev"
+                "dev-master": "1.13-dev"
             }
         },
         "installation-source": "dist",
@@ -11986,17 +11991,17 @@
     },
     {
         "name": "symfony/polyfill-mbstring",
-        "version": "v1.11.0",
-        "version_normalized": "1.11.0.0",
+        "version": "v1.13.1",
+        "version_normalized": "1.13.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/polyfill-mbstring.git",
-            "reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
+            "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
-            "reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
+            "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
+            "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
             "shasum": ""
         },
         "require": {
@@ -12005,11 +12010,11 @@
         "suggest": {
             "ext-mbstring": "For best performance"
         },
-        "time": "2019-02-06T07:57:58+00:00",
+        "time": "2019-11-27T14:18:11+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.11-dev"
+                "dev-master": "1.13-dev"
             }
         },
         "installation-source": "dist",
@@ -12045,30 +12050,88 @@
             "shim"
         ]
     },
+    {
+        "name": "symfony/polyfill-php56",
+        "version": "v1.13.1",
+        "version_normalized": "1.13.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/polyfill-php56.git",
+            "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/53dd1cdf3cb986893ccf2b96665b25b3abb384f4",
+            "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "symfony/polyfill-util": "~1.0"
+        },
+        "time": "2019-11-27T13:56:44+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.13-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Symfony\\Polyfill\\Php56\\": ""
+            },
+            "files": [
+                "bootstrap.php"
+            ]
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Nicolas Grekas",
+                "email": "p@tchwork.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+        "homepage": "https://symfony.com",
+        "keywords": [
+            "compatibility",
+            "polyfill",
+            "portable",
+            "shim"
+        ]
+    },
     {
         "name": "symfony/polyfill-php70",
-        "version": "v1.11.0",
-        "version_normalized": "1.11.0.0",
+        "version": "v1.13.1",
+        "version_normalized": "1.13.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/polyfill-php70.git",
-            "reference": "bc4858fb611bda58719124ca079baff854149c89"
+            "reference": "af23c7bb26a73b850840823662dda371484926c4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89",
-            "reference": "bc4858fb611bda58719124ca079baff854149c89",
+            "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/af23c7bb26a73b850840823662dda371484926c4",
+            "reference": "af23c7bb26a73b850840823662dda371484926c4",
             "shasum": ""
         },
         "require": {
             "paragonie/random_compat": "~1.0|~2.0|~9.99",
             "php": ">=5.3.3"
         },
-        "time": "2019-02-06T07:57:58+00:00",
+        "time": "2019-11-27T13:56:44+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.11-dev"
+                "dev-master": "1.13-dev"
             }
         },
         "installation-source": "dist",
@@ -12106,25 +12169,79 @@
             "shim"
         ]
     },
+    {
+        "name": "symfony/polyfill-util",
+        "version": "v1.13.1",
+        "version_normalized": "1.13.1.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony/polyfill-util.git",
+            "reference": "964a67f293b66b95883a5ed918a65354fcd2258f"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/964a67f293b66b95883a5ed918a65354fcd2258f",
+            "reference": "964a67f293b66b95883a5ed918a65354fcd2258f",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3"
+        },
+        "time": "2019-11-27T13:56:44+00:00",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.13-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Symfony\\Polyfill\\Util\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Nicolas Grekas",
+                "email": "p@tchwork.com"
+            },
+            {
+                "name": "Symfony Community",
+                "homepage": "https://symfony.com/contributors"
+            }
+        ],
+        "description": "Symfony utilities for portability of PHP codes",
+        "homepage": "https://symfony.com",
+        "keywords": [
+            "compat",
+            "compatibility",
+            "polyfill",
+            "shim"
+        ]
+    },
     {
         "name": "symfony/process",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/process.git",
-            "reference": "d129c017e8602507688ef2c3007951a16c1a8407"
+            "reference": "9a4545c01e1e4f473492bd52b71e574dcc401ca2"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/process/zipball/d129c017e8602507688ef2c3007951a16c1a8407",
-            "reference": "d129c017e8602507688ef2c3007951a16c1a8407",
+            "url": "https://api.github.com/repos/symfony/process/zipball/9a4545c01e1e4f473492bd52b71e574dcc401ca2",
+            "reference": "9a4545c01e1e4f473492bd52b71e574dcc401ca2",
             "shasum": ""
         },
         "require": {
             "php": "^5.5.9|>=7.0.8"
         },
-        "time": "2019-05-30T15:47:52+00:00",
+        "time": "2019-11-28T10:05:51+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -12224,17 +12341,17 @@
     },
     {
         "name": "symfony/routing",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/routing.git",
-            "reference": "8d804d8a65a26dc9de1aaf2ff3a421e581d050e6"
+            "reference": "b689ccd48e234ea404806d94b07eeb45f9f6f06a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/routing/zipball/8d804d8a65a26dc9de1aaf2ff3a421e581d050e6",
-            "reference": "8d804d8a65a26dc9de1aaf2ff3a421e581d050e6",
+            "url": "https://api.github.com/repos/symfony/routing/zipball/b689ccd48e234ea404806d94b07eeb45f9f6f06a",
+            "reference": "b689ccd48e234ea404806d94b07eeb45f9f6f06a",
             "shasum": ""
         },
         "require": {
@@ -12261,7 +12378,7 @@
             "symfony/http-foundation": "For using a Symfony Request object",
             "symfony/yaml": "For using the YAML loader"
         },
-        "time": "2019-06-26T11:14:13+00:00",
+        "time": "2019-12-01T08:33:36+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -12302,17 +12419,17 @@
     },
     {
         "name": "symfony/serializer",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/serializer.git",
-            "reference": "c060c0e0b97dc13b3c3fd8f981a68fa32a24371c"
+            "reference": "05a1125ff3fdd10a68a2857a5d1d4a1ceb93ba42"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/serializer/zipball/c060c0e0b97dc13b3c3fd8f981a68fa32a24371c",
-            "reference": "c060c0e0b97dc13b3c3fd8f981a68fa32a24371c",
+            "url": "https://api.github.com/repos/symfony/serializer/zipball/05a1125ff3fdd10a68a2857a5d1d4a1ceb93ba42",
+            "reference": "05a1125ff3fdd10a68a2857a5d1d4a1ceb93ba42",
             "shasum": ""
         },
         "require": {
@@ -12348,7 +12465,7 @@
             "symfony/property-info": "To deserialize relations.",
             "symfony/yaml": "For using the default YAML mapping loader."
         },
-        "time": "2019-06-14T05:50:06+00:00",
+        "time": "2019-11-25T16:36:22+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -12383,17 +12500,17 @@
     },
     {
         "name": "symfony/translation",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/translation.git",
-            "reference": "5c07632afb8cb14b422051b651213ed17bf7c249"
+            "reference": "0be25347c4a8695d9423fe897f4c774f46e97b51"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/translation/zipball/5c07632afb8cb14b422051b651213ed17bf7c249",
-            "reference": "5c07632afb8cb14b422051b651213ed17bf7c249",
+            "url": "https://api.github.com/repos/symfony/translation/zipball/0be25347c4a8695d9423fe897f4c774f46e97b51",
+            "reference": "0be25347c4a8695d9423fe897f4c774f46e97b51",
             "shasum": ""
         },
         "require": {
@@ -12420,7 +12537,7 @@
             "symfony/config": "",
             "symfony/yaml": ""
         },
-        "time": "2019-06-13T10:34:15+00:00",
+        "time": "2019-11-23T20:30:33+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -12455,17 +12572,17 @@
     },
     {
         "name": "symfony/validator",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/validator.git",
-            "reference": "d6561bff343346be8ff3e93eb5c4344985bc538b"
+            "reference": "55e329a518baa3b169b7d278620ae2cd76005188"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/validator/zipball/d6561bff343346be8ff3e93eb5c4344985bc538b",
-            "reference": "d6561bff343346be8ff3e93eb5c4344985bc538b",
+            "url": "https://api.github.com/repos/symfony/validator/zipball/55e329a518baa3b169b7d278620ae2cd76005188",
+            "reference": "55e329a518baa3b169b7d278620ae2cd76005188",
             "shasum": ""
         },
         "require": {
@@ -12475,15 +12592,16 @@
             "symfony/translation": "~2.8|~3.0|~4.0"
         },
         "conflict": {
+            "doctrine/lexer": "<1.0.2",
             "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
             "symfony/dependency-injection": "<3.3",
             "symfony/http-kernel": "<3.3.5",
             "symfony/yaml": "<3.4"
         },
         "require-dev": {
-            "doctrine/annotations": "~1.0",
+            "doctrine/annotations": "~1.7",
             "doctrine/cache": "~1.0",
-            "egulias/email-validator": "^1.2.8|~2.0",
+            "egulias/email-validator": "^2.1.10",
             "symfony/cache": "~3.1|~4.0",
             "symfony/config": "~2.8|~3.0|~4.0",
             "symfony/dependency-injection": "~3.3|~4.0",
@@ -12507,7 +12625,7 @@
             "symfony/property-access": "For accessing properties within comparison constraints",
             "symfony/yaml": ""
         },
-        "time": "2019-06-20T06:43:29+00:00",
+        "time": "2019-11-29T19:07:18+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -12613,17 +12731,17 @@
     },
     {
         "name": "symfony/yaml",
-        "version": "v3.4.29",
-        "version_normalized": "3.4.29.0",
+        "version": "v3.4.36",
+        "version_normalized": "3.4.36.0",
         "source": {
             "type": "git",
             "url": "https://github.com/symfony/yaml.git",
-            "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996"
+            "reference": "dab657db15207879217fc81df4f875947bf68804"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996",
-            "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996",
+            "url": "https://api.github.com/repos/symfony/yaml/zipball/dab657db15207879217fc81df4f875947bf68804",
+            "reference": "dab657db15207879217fc81df4f875947bf68804",
             "shasum": ""
         },
         "require": {
@@ -12639,7 +12757,7 @@
         "suggest": {
             "symfony/console": "For validating YAML files using the lint command"
         },
-        "time": "2019-03-25T07:48:46+00:00",
+        "time": "2019-10-24T15:33:53+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
@@ -12799,17 +12917,17 @@
     },
     {
         "name": "typo3/phar-stream-wrapper",
-        "version": "v2.1.2",
-        "version_normalized": "2.1.2.0",
+        "version": "v2.1.3",
+        "version_normalized": "2.1.3.0",
         "source": {
             "type": "git",
             "url": "https://github.com/TYPO3/phar-stream-wrapper.git",
-            "reference": "057622f5a3b92a5ffbea0fbaadce573500a62870"
+            "reference": "e8a656d72028b97ab9f61ed993734f3cded02eeb"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/057622f5a3b92a5ffbea0fbaadce573500a62870",
-            "reference": "057622f5a3b92a5ffbea0fbaadce573500a62870",
+            "url": "https://api.github.com/repos/TYPO3/phar-stream-wrapper/zipball/e8a656d72028b97ab9f61ed993734f3cded02eeb",
+            "reference": "e8a656d72028b97ab9f61ed993734f3cded02eeb",
             "shasum": ""
         },
         "require": {
@@ -12824,7 +12942,7 @@
         "suggest": {
             "ext-fileinfo": "For PHP builtin file type guessing, otherwise uses internal processing"
         },
-        "time": "2019-05-14T13:14:31+00:00",
+        "time": "2019-10-18T11:59:10+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -13078,17 +13196,17 @@
     },
     {
         "name": "zendframework/zend-diactoros",
-        "version": "1.8.6",
-        "version_normalized": "1.8.6.0",
+        "version": "1.8.7",
+        "version_normalized": "1.8.7.0",
         "source": {
             "type": "git",
             "url": "https://github.com/zendframework/zend-diactoros.git",
-            "reference": "20da13beba0dde8fb648be3cc19765732790f46e"
+            "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/20da13beba0dde8fb648be3cc19765732790f46e",
-            "reference": "20da13beba0dde8fb648be3cc19765732790f46e",
+            "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/a85e67b86e9b8520d07e6415fcbcb8391b44a75b",
+            "reference": "a85e67b86e9b8520d07e6415fcbcb8391b44a75b",
             "shasum": ""
         },
         "require": {
@@ -13105,13 +13223,11 @@
             "phpunit/phpunit": "^5.7.16 || ^6.0.8 || ^7.2.7",
             "zendframework/zend-coding-standard": "~1.0"
         },
-        "time": "2018-09-05T19:29:37+00:00",
+        "time": "2019-08-06T17:53:53+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.8.x-dev",
-                "dev-develop": "1.9.x-dev",
-                "dev-release-2.0": "2.0.x-dev"
+                "dev-release-1.8": "1.8.x-dev"
             }
         },
         "installation-source": "dist",
@@ -13144,17 +13260,17 @@
     },
     {
         "name": "zendframework/zend-escaper",
-        "version": "2.6.0",
-        "version_normalized": "2.6.0.0",
+        "version": "2.6.1",
+        "version_normalized": "2.6.1.0",
         "source": {
             "type": "git",
             "url": "https://github.com/zendframework/zend-escaper.git",
-            "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074"
+            "reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/31d8aafae982f9568287cb4dce987e6aff8fd074",
-            "reference": "31d8aafae982f9568287cb4dce987e6aff8fd074",
+            "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
+            "reference": "3801caa21b0ca6aca57fa1c42b08d35c395ebd5f",
             "shasum": ""
         },
         "require": {
@@ -13164,7 +13280,7 @@
             "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2",
             "zendframework/zend-coding-standard": "~1.0.0"
         },
-        "time": "2018-04-25T15:48:53+00:00",
+        "time": "2019-09-05T20:03:20+00:00",
         "type": "library",
         "extra": {
             "branch-alias": {
diff --git a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php
index 38e4714ac0d8ae19aac73557fda3cf5fab3efda5..44857288dd2ed6076b074a4f6207471060b85d46 100644
--- a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php
+++ b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php
@@ -77,10 +77,25 @@ class EmailLexer extends AbstractLexer
 
     protected $previous;
 
+    private static $nullToken = [
+        'value' => '',
+        'type' => null,
+        'position' => 0,
+    ];
+
+    public function __construct()
+    {
+        $this->previous = $this->token = self::$nullToken;
+    }
+
+    /**
+     * @return void
+     */
     public function reset()
     {
         $this->hasInvalidTokens = false;
         parent::reset();
+        $this->previous = $this->token = self::$nullToken;
     }
 
     public function hasInvalidTokens()
@@ -122,8 +137,10 @@ public function getPrevious()
     public function moveNext()
     {
         $this->previous = $this->token;
+        $hasNext = parent::moveNext();
+        $this->token = $this->token ?: self::$nullToken;
 
-        return parent::moveNext();
+        return $hasNext;
     }
 
     /**
@@ -214,6 +231,9 @@ protected function isUTF8Invalid($value)
         return false;
     }
 
+    /**
+     * @return string
+     */
     protected function getModifiers()
     {
         return 'iu';
diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php b/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php
index f2fd25a11b891f9f7d28c425750e10f570319749..8ed240b3935e4cd36bc63e11d90f3029f5397a36 100644
--- a/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php
+++ b/vendor/egulias/email-validator/EmailValidator/Parser/DomainPart.php
@@ -184,7 +184,7 @@ protected function doParseDomainPart()
 
             $domain .= $this->lexer->token['value'];
             $this->lexer->moveNext();
-        } while ($this->lexer->token);
+        } while (null !== $this->lexer->token['type']);
 
         return $domain;
     }
diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php
index 8ab16ab4a1f331f97e180290bd543a5b06133472..fa1d17b7f4e1f5717b5e79344a2074d884589a43 100644
--- a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php
+++ b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php
@@ -21,8 +21,8 @@ public function parse($localPart)
         $closingQuote = false;
         $openedParenthesis = 0;
 
-        while ($this->lexer->token['type'] !== EmailLexer::S_AT && $this->lexer->token) {
-            if ($this->lexer->token['type'] === EmailLexer::S_DOT && !$this->lexer->getPrevious()) {
+        while ($this->lexer->token['type'] !== EmailLexer::S_AT && null !== $this->lexer->token['type']) {
+            if ($this->lexer->token['type'] === EmailLexer::S_DOT && null === $this->lexer->getPrevious()['type']) {
                 throw new DotAtStart();
             }
 
@@ -86,7 +86,7 @@ protected function parseDoubleQuote()
 
         $this->lexer->moveNext();
 
-        while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && $this->lexer->token) {
+        while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && null !== $this->lexer->token['type']) {
             $parseAgain = false;
             if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) {
                 $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
diff --git a/vendor/egulias/email-validator/composer.json b/vendor/egulias/email-validator/composer.json
index 5423e9f02b649be0ca92a25d17233c8518bea7db..4956da9e0013126422bd6274f22298319bce2a10 100644
--- a/vendor/egulias/email-validator/composer.json
+++ b/vendor/egulias/email-validator/composer.json
@@ -10,7 +10,7 @@
   ],
   "extra": {
     "branch-alias": {
-      "dev-master": "2.0.x-dev"
+      "dev-master": "2.1.x-dev"
     }
   },
   "repositories": [
@@ -26,6 +26,7 @@
   "require-dev" :   {
     "satooshi/php-coveralls": "^1.0.1",
     "phpunit/phpunit": "^4.8.35||^5.7||^6.0",
+    "symfony/phpunit-bridge": "^4.4@dev",
     "dominicsayers/isemail": "dev-master"
   },
   "suggest": {
diff --git a/vendor/egulias/email-validator/phpunit.xml.dist b/vendor/egulias/email-validator/phpunit.xml.dist
index b0812f97be9e333c904228d5ac24debfd395628c..754445a76d24986af592743d1cf4f30e78ffa765 100644
--- a/vendor/egulias/email-validator/phpunit.xml.dist
+++ b/vendor/egulias/email-validator/phpunit.xml.dist
@@ -8,7 +8,6 @@
          convertWarningsToExceptions="true"
          processIsolation="false"
          stopOnFailure="false"
-         syntaxCheck="false"
          bootstrap="vendor/autoload.php"
 >
 <testsuites>
@@ -19,8 +18,12 @@
 </testsuites>
 
 <filter>
-  <blacklist>
-    <directory>./vendor</directory>
-  </blacklist>
+  <whitelist>
+    <directory>./EmailValidator/</directory>
+  </whitelist>
 </filter>
+
+<listeners>
+  <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
+</listeners>
 </phpunit>
diff --git a/vendor/guzzlehttp/guzzle/.php_cs b/vendor/guzzlehttp/guzzle/.php_cs
new file mode 100644
index 0000000000000000000000000000000000000000..2dd5036c1f2b63fcf74a59df09d3b9e649e91e19
--- /dev/null
+++ b/vendor/guzzlehttp/guzzle/.php_cs
@@ -0,0 +1,23 @@
+<?php
+
+$config = PhpCsFixer\Config::create()
+    ->setRiskyAllowed(true)
+    ->setRules([
+        '@PSR2' => true,
+        'array_syntax' => ['syntax' => 'short'],
+        'declare_strict_types' => false,
+        'concat_space' => ['spacing'=>'one'],
+        'php_unit_test_case_static_method_calls' => ['call_type' => 'self'],
+        'ordered_imports' => true,
+        // 'phpdoc_align' => ['align'=>'vertical'],
+        // 'native_function_invocation' => true,
+    ])
+    ->setFinder(
+        PhpCsFixer\Finder::create()
+            ->in(__DIR__.'/src')
+            ->in(__DIR__.'/tests')
+            ->name('*.php')
+    )
+;
+
+return $config;
diff --git a/vendor/guzzlehttp/guzzle/CHANGELOG.md b/vendor/guzzlehttp/guzzle/CHANGELOG.md
index 17badd756062b2fbb6d893750da457b88117d2f1..342e0b6c08bc175aac79e011d12a95ae73fe0522 100644
--- a/vendor/guzzlehttp/guzzle/CHANGELOG.md
+++ b/vendor/guzzlehttp/guzzle/CHANGELOG.md
@@ -1,5 +1,31 @@
 # Change Log
 
+## 6.5.0 - 2019-11-07
+
+* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)
+* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)
+* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)
+* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)
+* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)
+* Deprecated `ClientInterface::VERSION`
+
+## 6.4.1 - 2019-10-23
+
+* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that 
+* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`
+
+## 6.4.0 - 2019-10-23
+
+* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)
+* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)
+* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)
+* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)
+* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)
+* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)
+* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)
+* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)
+* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)
+
 ## 6.3.3 - 2018-04-22
 
 * Fix: Default headers when decode_content is specified
diff --git a/vendor/guzzlehttp/guzzle/Dockerfile b/vendor/guzzlehttp/guzzle/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..f6a095230e85638cc9f98dd7beef2bcf8c87e98e
--- /dev/null
+++ b/vendor/guzzlehttp/guzzle/Dockerfile
@@ -0,0 +1,18 @@
+FROM composer:latest as setup
+
+RUN mkdir /guzzle
+
+WORKDIR /guzzle
+
+RUN set -xe \
+    && composer init --name=guzzlehttp/test --description="Simple project for testing Guzzle scripts" --author="Márk Sági-Kazár <mark.sagikazar@gmail.com>" --no-interaction \
+    && composer require guzzlehttp/guzzle
+
+
+FROM php:7.3
+
+RUN mkdir /guzzle
+
+WORKDIR /guzzle
+
+COPY --from=setup /guzzle /guzzle
diff --git a/vendor/guzzlehttp/guzzle/README.md b/vendor/guzzlehttp/guzzle/README.md
index bcd18b8e718bcfb922288cf6350eced1dbae966d..5fdb6c5f42dba76d7d29d51dd23512478ac3ccdb 100644
--- a/vendor/guzzlehttp/guzzle/README.md
+++ b/vendor/guzzlehttp/guzzle/README.md
@@ -21,19 +21,18 @@ trivial to integrate with web services.
 
 ```php
 $client = new \GuzzleHttp\Client();
-$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
-echo $res->getStatusCode();
-// 200
-echo $res->getHeaderLine('content-type');
-// 'application/json; charset=utf8'
-echo $res->getBody();
-// '{"id": 1420053, "name": "guzzle", ...}'
-
-// Send an asynchronous request.
+$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
+
+echo $response->getStatusCode(); # 200
+echo $response->getHeaderLine('content-type'); # 'application/json; charset=utf8'
+echo $response->getBody(); # '{"id": 1420053, "name": "guzzle", ...}'
+
+# Send an asynchronous request.
 $request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
 $promise = $client->sendAsync($request)->then(function ($response) {
     echo 'I completed! ' . $response->getBody();
 });
+
 $promise->wait();
 ```
 
@@ -57,7 +56,7 @@ curl -sS https://getcomposer.org/installer | php
 Next, run the Composer command to install the latest stable version of Guzzle:
 
 ```bash
-php composer.phar require guzzlehttp/guzzle
+composer require guzzlehttp/guzzle
 ```
 
 After installing, you need to require Composer's autoloader:
@@ -69,7 +68,7 @@ require 'vendor/autoload.php';
 You can then later update Guzzle using composer:
 
  ```bash
-composer.phar update
+composer update
  ```
 
 
@@ -79,13 +78,13 @@ composer.phar update
 |---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------|
 | 3.x     | EOL        | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >= 5.3.3    |
 | 4.x     | EOL        | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >= 5.4      |
-| 5.x     | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >= 5.4      |
+| 5.x     | EOL        | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >= 5.4      |
 | 6.x     | Latest     | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >= 5.5      |
 
 [guzzle-3-repo]: https://github.com/guzzle/guzzle3
 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x
 [guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3
 [guzzle-6-repo]: https://github.com/guzzle/guzzle
-[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/
+[guzzle-3-docs]: http://guzzle3.readthedocs.org
 [guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/
 [guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/
diff --git a/vendor/guzzlehttp/guzzle/composer.json b/vendor/guzzlehttp/guzzle/composer.json
index 1f328e308cdbf05fd63eac1be11099a194d3cb1c..bbf0ff20b4f550424b5d9248ea2fe4b3bc8ca58a 100644
--- a/vendor/guzzlehttp/guzzle/composer.json
+++ b/vendor/guzzlehttp/guzzle/composer.json
@@ -2,7 +2,15 @@
     "name": "guzzlehttp/guzzle",
     "type": "library",
     "description": "Guzzle is a PHP HTTP client library",
-    "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
+    "keywords": [
+        "framework",
+        "http",
+        "rest",
+        "web service",
+        "curl",
+        "client",
+        "HTTP client"
+    ],
     "homepage": "http://guzzlephp.org/",
     "license": "MIT",
     "authors": [
@@ -14,31 +22,38 @@
     ],
     "require": {
         "php": ">=5.5",
-        "guzzlehttp/psr7": "^1.4",
-        "guzzlehttp/promises": "^1.0"
+        "ext-json": "*",
+        "guzzlehttp/promises": "^1.0",
+        "guzzlehttp/psr7": "^1.6.1"
     },
     "require-dev": {
         "ext-curl": "*",
         "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
-        "psr/log": "^1.0"
+        "psr/log": "^1.1"
+    },
+    "suggest": {
+        "psr/log": "Required for using the Log middleware",
+        "ext-intl": "Required for Internationalized Domain Name (IDN) support"
+    },
+    "config": {
+        "sort-packages": true
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "6.5-dev"
+        }
     },
     "autoload": {
-        "files": ["src/functions_include.php"],
         "psr-4": {
             "GuzzleHttp\\": "src/"
-        }
+        },
+        "files": [
+            "src/functions_include.php"
+        ]
     },
     "autoload-dev": {
         "psr-4": {
             "GuzzleHttp\\Tests\\": "tests/"
         }
-    },
-    "suggest": {
-        "psr/log": "Required for using the Log middleware"
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "6.3-dev"
-        }
     }
 }
diff --git a/vendor/guzzlehttp/guzzle/src/Client.php b/vendor/guzzlehttp/guzzle/src/Client.php
index 80417918d053c720a6079496dc9dbf40d19c41d7..db4062f94252ac6409a9ac554ea9cd61387057f1 100644
--- a/vendor/guzzlehttp/guzzle/src/Client.php
+++ b/vendor/guzzlehttp/guzzle/src/Client.php
@@ -2,11 +2,12 @@
 namespace GuzzleHttp;
 
 use GuzzleHttp\Cookie\CookieJar;
+use GuzzleHttp\Exception\InvalidArgumentException;
 use GuzzleHttp\Promise;
 use GuzzleHttp\Psr7;
-use Psr\Http\Message\UriInterface;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\UriInterface;
 
 /**
  * @method ResponseInterface get(string|UriInterface $uri, array $options = [])
@@ -75,6 +76,12 @@ public function __construct(array $config = [])
         $this->configureDefaults($config);
     }
 
+    /**
+     * @param string $method
+     * @param array  $args
+     *
+     * @return Promise\PromiseInterface
+     */
     public function __call($method, $args)
     {
         if (count($args) < 1) {
@@ -89,6 +96,14 @@ public function __call($method, $args)
             : $this->request($method, $uri, $opts);
     }
 
+    /**
+     * Asynchronously send an HTTP request.
+     *
+     * @param array $options Request options to apply to the given
+     *                       request and to the transfer. See \GuzzleHttp\RequestOptions.
+     *
+     * @return PromiseInterface
+     */
     public function sendAsync(RequestInterface $request, array $options = [])
     {
         // Merge the base URI into the request URI if needed.
@@ -100,12 +115,35 @@ public function sendAsync(RequestInterface $request, array $options = [])
         );
     }
 
+    /**
+     * Send an HTTP request.
+     *
+     * @param array $options Request options to apply to the given
+     *                       request and to the transfer. See \GuzzleHttp\RequestOptions.
+     *
+     * @return ResponseInterface
+     * @throws GuzzleException
+     */
     public function send(RequestInterface $request, array $options = [])
     {
         $options[RequestOptions::SYNCHRONOUS] = true;
         return $this->sendAsync($request, $options)->wait();
     }
 
+    /**
+     * Create and send an asynchronous HTTP request.
+     *
+     * Use an absolute path to override the base path of the client, or a
+     * relative path to append to the base path of the client. The URL can
+     * contain the query string as well. Use an array to provide a URL
+     * template and additional variables to use in the URL template expansion.
+     *
+     * @param string              $method  HTTP method
+     * @param string|UriInterface $uri     URI object or string.
+     * @param array               $options Request options to apply. See \GuzzleHttp\RequestOptions.
+     *
+     * @return PromiseInterface
+     */
     public function requestAsync($method, $uri = '', array $options = [])
     {
         $options = $this->prepareDefaults($options);
@@ -125,12 +163,37 @@ public function requestAsync($method, $uri = '', array $options = [])
         return $this->transfer($request, $options);
     }
 
+    /**
+     * Create and send an HTTP request.
+     *
+     * Use an absolute path to override the base path of the client, or a
+     * relative path to append to the base path of the client. The URL can
+     * contain the query string as well.
+     *
+     * @param string              $method  HTTP method.
+     * @param string|UriInterface $uri     URI object or string.
+     * @param array               $options Request options to apply. See \GuzzleHttp\RequestOptions.
+     *
+     * @return ResponseInterface
+     * @throws GuzzleException
+     */
     public function request($method, $uri = '', array $options = [])
     {
         $options[RequestOptions::SYNCHRONOUS] = true;
         return $this->requestAsync($method, $uri, $options)->wait();
     }
 
+    /**
+     * Get a client configuration option.
+     *
+     * These options include default request options of the client, a "handler"
+     * (if utilized by the concrete client), and a "base_uri" if utilized by
+     * the concrete client.
+     *
+     * @param string|null $option The config option to retrieve.
+     *
+     * @return mixed
+     */
     public function getConfig($option = null)
     {
         return $option === null
@@ -138,6 +201,11 @@ public function getConfig($option = null)
             : (isset($this->config[$option]) ? $this->config[$option] : null);
     }
 
+    /**
+     * @param  string|null $uri
+     *
+     * @return UriInterface
+     */
     private function buildUri($uri, array $config)
     {
         // for BC we accept null which would otherwise fail in uri_for
@@ -147,6 +215,38 @@ private function buildUri($uri, array $config)
             $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri);
         }
 
+        if ($uri->getHost() && isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) {
+            $idnOptions = ($config['idn_conversion'] === true) ? IDNA_DEFAULT : $config['idn_conversion'];
+
+            $asciiHost = idn_to_ascii($uri->getHost(), $idnOptions, INTL_IDNA_VARIANT_UTS46, $info);
+            if ($asciiHost === false) {
+                $errorBitSet = isset($info['errors']) ? $info['errors'] : 0;
+
+                $errorConstants = array_filter(array_keys(get_defined_constants()), function ($name) {
+                    return substr($name, 0, 11) === 'IDNA_ERROR_';
+                });
+
+                $errors = [];
+                foreach ($errorConstants as $errorConstant) {
+                    if ($errorBitSet & constant($errorConstant)) {
+                        $errors[] = $errorConstant;
+                    }
+                }
+
+                $errorMessage = 'IDN conversion failed';
+                if ($errors) {
+                    $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')';
+                }
+
+                throw new InvalidArgumentException($errorMessage);
+            } else {
+                if ($uri->getHost() !== $asciiHost) {
+                    // Replace URI only if the ASCII version is different
+                    $uri = $uri->withHost($asciiHost);
+                }
+            }
+        }
+
         return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;
     }
 
@@ -154,6 +254,7 @@ private function buildUri($uri, array $config)
      * Configures the default options for a client.
      *
      * @param array $config
+     * @return void
      */
     private function configureDefaults(array $config)
     {
@@ -165,12 +266,15 @@ private function configureDefaults(array $config)
             'cookies'         => false
         ];
 
+        // idn_to_ascii() is a part of ext-intl and might be not available
+        $defaults['idn_conversion'] = function_exists('idn_to_ascii');
+
         // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.
 
         // We can only trust the HTTP_PROXY environment variable in a CLI
         // process due to the fact that PHP has no reliable mechanism to
         // get environment variables that start with "HTTP_".
-        if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) {
+        if (php_sapi_name() === 'cli' && getenv('HTTP_PROXY')) {
             $defaults['proxy']['http'] = getenv('HTTP_PROXY');
         }
 
@@ -210,7 +314,7 @@ private function configureDefaults(array $config)
      *
      * @return array
      */
-    private function prepareDefaults($options)
+    private function prepareDefaults(array $options)
     {
         $defaults = $this->config;
 
@@ -225,7 +329,7 @@ private function prepareDefaults($options)
         if (array_key_exists('headers', $options)) {
             // Allows default headers to be unset.
             if ($options['headers'] === null) {
-                $defaults['_conditional'] = null;
+                $defaults['_conditional'] = [];
                 unset($options['headers']);
             } elseif (!is_array($options['headers'])) {
                 throw new \InvalidArgumentException('headers must be an array');
@@ -251,8 +355,7 @@ private function prepareDefaults($options)
      * The URI of the request is not modified and the request options are used
      * as-is without merging in default options.
      *
-     * @param RequestInterface $request
-     * @param array            $options
+     * @param array $options See \GuzzleHttp\RequestOptions.
      *
      * @return Promise\PromiseInterface
      */
@@ -271,6 +374,7 @@ private function transfer(RequestInterface $request, array $options)
         }
 
         $request = $this->applyOptions($request, $options);
+        /** @var HandlerStack $handler */
         $handler = $options['handler'];
 
         try {
@@ -411,6 +515,11 @@ private function applyOptions(RequestInterface $request, array &$options)
         return $request;
     }
 
+    /**
+     * Throw Exception with pre-set message.
+     * @return void
+     * @throws InvalidArgumentException Invalid body.
+     */
     private function invalidBody()
     {
         throw new \InvalidArgumentException('Passing in the "body" request '
diff --git a/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/vendor/guzzlehttp/guzzle/src/ClientInterface.php
index 2dbcffa492d0c4ade0b8bf7ba73756cdede249a0..0829b3607a63c2384b589f0b7a0f636dbc279b81 100644
--- a/vendor/guzzlehttp/guzzle/src/ClientInterface.php
+++ b/vendor/guzzlehttp/guzzle/src/ClientInterface.php
@@ -1,8 +1,8 @@
 <?php
 namespace GuzzleHttp;
 
-use GuzzleHttp\Promise\PromiseInterface;
 use GuzzleHttp\Exception\GuzzleException;
+use GuzzleHttp\Promise\PromiseInterface;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\UriInterface;
@@ -12,7 +12,10 @@
  */
 interface ClientInterface
 {
-    const VERSION = '6.3.3';
+    /**
+     * @deprecated Will be removed in Guzzle 7.0.0
+     */
+    const VERSION = '6.5.0';
 
     /**
      * Send an HTTP request.
diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
index 78f2b79fecb55316ad3b974e3293206d66e81590..38f98ad7c0c97fc1df0668c6639659e2870b4e4e 100644
--- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
+++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
@@ -94,8 +94,8 @@ public static function shouldPersist(
      */
     public function getCookieByName($name)
     {
-        // don't allow a null name
-        if ($name === null) {
+        // don't allow a non string name
+        if ($name === null || !is_scalar($name)) {
             return null;
         }
         foreach ($this->cookies as $cookie) {
@@ -103,6 +103,8 @@ public function getCookieByName($name)
                 return $cookie;
             }
         }
+
+        return null;
     }
 
     public function toArray()
@@ -120,7 +122,7 @@ public function clear($domain = null, $path = null, $name = null)
         } elseif (!$path) {
             $this->cookies = array_filter(
                 $this->cookies,
-                function (SetCookie $cookie) use ($path, $domain) {
+                function (SetCookie $cookie) use ($domain) {
                     return !$cookie->matchesDomain($domain);
                 }
             );
diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
index 2cf298a867b3713f6fa3143d5288ce2458c311c2..6ee11885e1f1f2cfc82ffc1d463966e24ddd9d25 100644
--- a/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
+++ b/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
@@ -58,9 +58,9 @@ public function setCookie(SetCookie $cookie);
      * arguments, then the cookie with the specified name, path and domain is
      * removed.
      *
-     * @param string $domain Clears cookies matching a domain
-     * @param string $path   Clears cookies matching a domain and path
-     * @param string $name   Clears cookies matching a domain, path, and name
+     * @param string|null $domain Clears cookies matching a domain
+     * @param string|null $path   Clears cookies matching a domain and path
+     * @param string|null $name   Clears cookies matching a domain, path, and name
      *
      * @return CookieJarInterface
      */
diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
index 9887c1d54b2db295e6d9e5dfc67510d54941d940..3fb8600ef07be182db6d8ad607b73582ec1746e3 100644
--- a/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
+++ b/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
@@ -23,6 +23,7 @@ class FileCookieJar extends CookieJar
      */
     public function __construct($cookieFile, $storeSessionCookies = false)
     {
+        parent::__construct();
         $this->filename = $cookieFile;
         $this->storeSessionCookies = $storeSessionCookies;
 
@@ -56,7 +57,7 @@ public function save($filename)
         }
 
         $jsonStr = \GuzzleHttp\json_encode($json);
-        if (false === file_put_contents($filename, $jsonStr)) {
+        if (false === file_put_contents($filename, $jsonStr, LOCK_EX)) {
             throw new \RuntimeException("Unable to save file {$filename}");
         }
     }
diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
index 4497bcf03e24ec69b443eff05ac56b2c94e62c9f..0224a2447b14c55eadac53831258e7bdc3041210 100644
--- a/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
+++ b/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
@@ -22,6 +22,7 @@ class SessionCookieJar extends CookieJar
      */
     public function __construct($sessionKey, $storeSessionCookies = false)
     {
+        parent::__construct();
         $this->sessionKey = $sessionKey;
         $this->storeSessionCookies = $storeSessionCookies;
         $this->load();
diff --git a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
index f6993943e747c2d56218b343c74d7444bcb98cd8..3d776a70bc78c3eb5d7f10f325780eada7803244 100644
--- a/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
+++ b/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
@@ -227,7 +227,7 @@ public function setExpires($timestamp)
     /**
      * Get whether or not this is a secure cookie
      *
-     * @return null|bool
+     * @return bool|null
      */
     public function getSecure()
     {
@@ -247,7 +247,7 @@ public function setSecure($secure)
     /**
      * Get whether or not this is a session cookie
      *
-     * @return null|bool
+     * @return bool|null
      */
     public function getDiscard()
     {
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
index f95c09f2b1a50923056acbf108e1695e2a148bfa..4cfd393cc1a48c227f450caaf6f5eeac9bb7e214 100644
--- a/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
+++ b/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
@@ -4,4 +4,6 @@
 /**
  * Exception when a client error is encountered (4xx codes)
  */
-class ClientException extends BadResponseException {}
+class ClientException extends BadResponseException
+{
+}
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
index 510778f6eb2f6800eef95d903d0b5b3ff139b415..27b2722b0b6716d131b74631359cda86d3dcbbdb 100644
--- a/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
+++ b/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
@@ -1,13 +1,23 @@
 <?php
 namespace GuzzleHttp\Exception;
 
-/**
- * @method string getMessage()
- * @method \Throwable|null getPrevious()
- * @method mixed getCode()
- * @method string getFile()
- * @method int getLine()
- * @method array getTrace()
- * @method string getTraceAsString()
- */
-interface GuzzleException {}
+use Throwable;
+
+if (interface_exists(Throwable::class)) {
+    interface GuzzleException extends Throwable
+    {
+    }
+} else {
+    /**
+     * @method string getMessage()
+     * @method \Throwable|null getPrevious()
+     * @method mixed getCode()
+     * @method string getFile()
+     * @method int getLine()
+     * @method array getTrace()
+     * @method string getTraceAsString()
+     */
+    interface GuzzleException
+    {
+    }
+}
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php b/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000000000000000000000000000000..bfd20e232bba460f910e7c4ed7315e9a244ffad2
--- /dev/null
+++ b/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace GuzzleHttp\Exception;
+
+final class InvalidArgumentException extends \InvalidArgumentException implements GuzzleException
+{
+}
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
index 39de327e7b6ea887f0ebb904faa3340c2c1d5d0f..12dd081eb6c2b99f9561e5bb37ffd51bd968ea7f 100644
--- a/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
+++ b/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
@@ -1,9 +1,9 @@
 <?php
 namespace GuzzleHttp\Exception;
 
+use GuzzleHttp\Promise\PromiseInterface;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
-use GuzzleHttp\Promise\PromiseInterface;
 use Psr\Http\Message\UriInterface;
 
 /**
@@ -14,7 +14,7 @@ class RequestException extends TransferException
     /** @var RequestInterface */
     private $request;
 
-    /** @var ResponseInterface */
+    /** @var ResponseInterface|null */
     private $response;
 
     /** @var array */
@@ -124,42 +124,17 @@ public static function create(
      */
     public static function getResponseBodySummary(ResponseInterface $response)
     {
-        $body = $response->getBody();
-
-        if (!$body->isSeekable()) {
-            return null;
-        }
-
-        $size = $body->getSize();
-
-        if ($size === 0) {
-            return null;
-        }
-
-        $summary = $body->read(120);
-        $body->rewind();
-
-        if ($size > 120) {
-            $summary .= ' (truncated...)';
-        }
-
-        // Matches any printable character, including unicode characters:
-        // letters, marks, numbers, punctuation, spacing, and separators.
-        if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) {
-            return null;
-        }
-
-        return $summary;
+        return \GuzzleHttp\Psr7\get_message_body_summary($response);
     }
 
     /**
-     * Obfuscates URI if there is an username and a password present
+     * Obfuscates URI if there is a username and a password present
      *
      * @param UriInterface $uri
      *
      * @return UriInterface
      */
-    private static function obfuscateUri($uri)
+    private static function obfuscateUri(UriInterface $uri)
     {
         $userInfo = $uri->getUserInfo();
 
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
index 7cdd340866b63b318e78b38981565d3e78eaacdd..127094c149959a8c95be188f699bc3e5219e0e19 100644
--- a/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
+++ b/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
@@ -4,4 +4,6 @@
 /**
  * Exception when a server error is encountered (5xx codes)
  */
-class ServerException extends BadResponseException {}
+class ServerException extends BadResponseException
+{
+}
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
index b60a9678d650676bdecd6fab6740d0f9a39e7849..fff05251d502c010be4ad114381f8b5aa179d37f 100644
--- a/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
+++ b/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
@@ -1,4 +1,6 @@
 <?php
 namespace GuzzleHttp\Exception;
 
-class TooManyRedirectsException extends RequestException {}
+class TooManyRedirectsException extends RequestException
+{
+}
diff --git a/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
index b92071ca20630d1a988249a9befc247ab4e3d2de..7c11db3abc1d8b5c5ec60c9f9b9d4fa9d5603817 100644
--- a/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
+++ b/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
@@ -1,4 +1,6 @@
 <?php
 namespace GuzzleHttp\Exception;
 
-class TransferException extends \RuntimeException implements GuzzleException {}
+class TransferException extends \RuntimeException implements GuzzleException
+{
+}
diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
index e0923714306af0cc5c92bfbd838503e872e4fc68..4a28a96ebce6dbd41d31c2e24c1216052644344c 100644
--- a/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
+++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
@@ -1,8 +1,8 @@
 <?php
 namespace GuzzleHttp\Handler;
 
-use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Exception\ConnectException;
+use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Promise\FulfilledPromise;
 use GuzzleHttp\Psr7;
 use GuzzleHttp\Psr7\LazyOpenStream;
@@ -14,6 +14,9 @@
  */
 class CurlFactory implements CurlFactoryInterface
 {
+    const CURL_VERSION_STR = 'curl_version';
+    const LOW_CURL_VERSION_NUMBER = '7.21.2';
+
     /** @var array */
     private $handles = [];
 
@@ -117,6 +120,7 @@ public static function finish(
     private static function invokeStats(EasyHandle $easy)
     {
         $curlStats = curl_getinfo($easy->handle);
+        $curlStats['appconnect_time'] = curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME);
         $stats = new TransferStats(
             $easy->request,
             $easy->response,
@@ -136,7 +140,9 @@ private static function finishError(
         $ctx = [
             'errno' => $easy->errno,
             'error' => curl_error($easy->handle),
+            'appconnect_time' => curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME),
         ] + curl_getinfo($easy->handle);
+        $ctx[self::CURL_VERSION_STR] = curl_version()['version'];
         $factory->release($easy);
 
         // Retry when nothing is present or when curl failed to rewind.
@@ -172,13 +178,22 @@ private static function createRejection(EasyHandle $easy, array $ctx)
                 )
             );
         }
-
-        $message = sprintf(
-            'cURL error %s: %s (%s)',
-            $ctx['errno'],
-            $ctx['error'],
-            'see http://curl.haxx.se/libcurl/c/libcurl-errors.html'
-        );
+        if (version_compare($ctx[self::CURL_VERSION_STR], self::LOW_CURL_VERSION_NUMBER)) {
+            $message = sprintf(
+                'cURL error %s: %s (%s)',
+                $ctx['errno'],
+                $ctx['error'],
+                'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'
+            );
+        } else {
+            $message = sprintf(
+                'cURL error %s: %s (%s) for %s',
+                $ctx['errno'],
+                $ctx['error'],
+                'see https://curl.haxx.se/libcurl/c/libcurl-errors.html',
+                $easy->request->getUri()
+            );
+        }
 
         // Create a connection exception if it was a specific error code.
         $error = isset($connectionErrors[$easy->errno])
@@ -439,11 +454,16 @@ private function applyHandlerOptions(EasyHandle $easy, array &$conf)
         }
 
         if (isset($options['ssl_key'])) {
-            $sslKey = $options['ssl_key'];
-            if (is_array($sslKey)) {
-                $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1];
-                $sslKey = $sslKey[0];
+            if (is_array($options['ssl_key'])) {
+                if (count($options['ssl_key']) === 2) {
+                    list($sslKey, $conf[CURLOPT_SSLKEYPASSWD]) = $options['ssl_key'];
+                } else {
+                    list($sslKey) = $options['ssl_key'];
+                }
             }
+
+            $sslKey = isset($sslKey) ? $sslKey: $options['ssl_key'];
+
             if (!file_exists($sslKey)) {
                 throw new \InvalidArgumentException(
                     "SSL private key not found: {$sslKey}"
diff --git a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
index 2754d8e4378d92530e1a3767c92cc3b673660161..b73e5c72d42c17cd63f53a0db9a0d77ff906f8a3 100644
--- a/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
+++ b/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
@@ -1,9 +1,9 @@
 <?php
 namespace GuzzleHttp\Handler;
 
+use GuzzleHttp\Exception\InvalidArgumentException;
 use GuzzleHttp\Promise as P;
 use GuzzleHttp\Promise\Promise;
-use GuzzleHttp\Psr7;
 use Psr\Http\Message\RequestInterface;
 
 /**
@@ -23,6 +23,7 @@ class CurlMultiHandler
     private $active;
     private $handles = [];
     private $delays = [];
+    private $options = [];
 
     /**
      * This handler accepts the following options:
@@ -30,6 +31,8 @@ class CurlMultiHandler
      * - handle_factory: An optional factory  used to create curl handles
      * - select_timeout: Optional timeout (in seconds) to block before timing
      *   out while selecting curl handles. Defaults to 1 second.
+     * - options: An associative array of CURLMOPT_* options and
+     *   corresponding values for curl_multi_setopt()
      *
      * @param array $options
      */
@@ -37,14 +40,31 @@ public function __construct(array $options = [])
     {
         $this->factory = isset($options['handle_factory'])
             ? $options['handle_factory'] : new CurlFactory(50);
-        $this->selectTimeout = isset($options['select_timeout'])
-            ? $options['select_timeout'] : 1;
+
+        if (isset($options['select_timeout'])) {
+            $this->selectTimeout = $options['select_timeout'];
+        } elseif ($selectTimeout = getenv('GUZZLE_CURL_SELECT_TIMEOUT')) {
+            $this->selectTimeout = $selectTimeout;
+        } else {
+            $this->selectTimeout = 1;
+        }
+
+        $this->options = isset($options['options']) ? $options['options'] : [];
     }
 
     public function __get($name)
     {
         if ($name === '_mh') {
-            return $this->_mh = curl_multi_init();
+            $this->_mh = curl_multi_init();
+
+            foreach ($this->options as $option => $value) {
+                // A warning is raised in case of a wrong option.
+                curl_multi_setopt($this->_mh, $option, $value);
+            }
+
+            // Further calls to _mh will return the value directly, without entering the
+            // __get() method at all.
+            return $this->_mh;
         }
 
         throw new \BadMethodCallException();
@@ -82,7 +102,7 @@ public function tick()
     {
         // Add any delayed handles if needed.
         if ($this->delays) {
-            $currentTime = microtime(true);
+            $currentTime = \GuzzleHttp\_current_time();
             foreach ($this->delays as $id => $delay) {
                 if ($currentTime >= $delay) {
                     unset($this->delays[$id]);
@@ -134,7 +154,7 @@ private function addRequest(array $entry)
         if (empty($easy->options['delay'])) {
             curl_multi_add_handle($this->_mh, $easy->handle);
         } else {
-            $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000);
+            $this->delays[$id] = \GuzzleHttp\_current_time() + ($easy->options['delay'] / 1000);
         }
     }
 
@@ -186,7 +206,7 @@ private function processMessages()
 
     private function timeToNext()
     {
-        $currentTime = microtime(true);
+        $currentTime = \GuzzleHttp\_current_time();
         $nextTime = PHP_INT_MAX;
         foreach ($this->delays as $time) {
             if ($time < $nextTime) {
diff --git a/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
index d892061c7a0074063d33c20fea167c898dc2beb2..5b312bc0428ab910c00bfdbf4f962beba08c75b1 100644
--- a/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
+++ b/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
@@ -66,7 +66,7 @@ public function __invoke(RequestInterface $request, array $options)
             throw new \OutOfBoundsException('Mock queue is empty');
         }
 
-        if (isset($options['delay'])) {
+        if (isset($options['delay']) && is_numeric($options['delay'])) {
             usleep($options['delay'] * 1000);
         }
 
@@ -175,6 +175,11 @@ public function count()
         return count($this->queue);
     }
 
+    public function reset()
+    {
+        $this->queue = [];
+    }
+
     private function invokeStats(
         RequestInterface $request,
         array $options,
@@ -182,7 +187,8 @@ private function invokeStats(
         $reason = null
     ) {
         if (isset($options['on_stats'])) {
-            $stats = new TransferStats($request, $response, 0, $reason);
+            $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0;
+            $stats = new TransferStats($request, $response, $transferTime, $reason);
             call_user_func($options['on_stats'], $stats);
         }
     }
diff --git a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
index b686545ea7f1d44d0de79ee0343524fc2b68128f..a8eba3786be348c6ab5ab6bcb9c6130a19836c21 100644
--- a/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
+++ b/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
@@ -1,8 +1,8 @@
 <?php
 namespace GuzzleHttp\Handler;
 
-use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Exception\ConnectException;
+use GuzzleHttp\Exception\RequestException;
 use GuzzleHttp\Promise\FulfilledPromise;
 use GuzzleHttp\Promise\PromiseInterface;
 use GuzzleHttp\Psr7;
@@ -33,7 +33,7 @@ public function __invoke(RequestInterface $request, array $options)
             usleep($options['delay'] * 1000);
         }
 
-        $startTime = isset($options['on_stats']) ? microtime(true) : null;
+        $startTime = isset($options['on_stats']) ? \GuzzleHttp\_current_time() : null;
 
         try {
             // Does not support the expect header.
@@ -42,7 +42,7 @@ public function __invoke(RequestInterface $request, array $options)
             // Append a content-length header if body size is zero to match
             // cURL's behavior.
             if (0 === $request->getBody()->getSize()) {
-                $request = $request->withHeader('Content-Length', 0);
+                $request = $request->withHeader('Content-Length', '0');
             }
 
             return $this->createResponse(
@@ -82,7 +82,7 @@ private function invokeStats(
             $stats = new TransferStats(
                 $request,
                 $response,
-                microtime(true) - $startTime,
+                \GuzzleHttp\_current_time() - $startTime,
                 $error,
                 []
             );
@@ -343,13 +343,25 @@ private function resolveHost(RequestInterface $request, array $options)
             if ('v4' === $options['force_ip_resolve']) {
                 $records = dns_get_record($uri->getHost(), DNS_A);
                 if (!isset($records[0]['ip'])) {
-                    throw new ConnectException(sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request);
+                    throw new ConnectException(
+                        sprintf(
+                            "Could not resolve IPv4 address for host '%s'",
+                            $uri->getHost()
+                        ),
+                        $request
+                    );
                 }
                 $uri = $uri->withHost($records[0]['ip']);
             } elseif ('v6' === $options['force_ip_resolve']) {
                 $records = dns_get_record($uri->getHost(), DNS_AAAA);
                 if (!isset($records[0]['ipv6'])) {
-                    throw new ConnectException(sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request);
+                    throw new ConnectException(
+                        sprintf(
+                            "Could not resolve IPv6 address for host '%s'",
+                            $uri->getHost()
+                        ),
+                        $request
+                    );
                 }
                 $uri = $uri->withHost('[' . $records[0]['ipv6'] . ']');
             }
diff --git a/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/vendor/guzzlehttp/guzzle/src/HandlerStack.php
index 24c46fd9fea30c28a93137325f39bc18e9c8873c..6a49cc0690cb0fa24b8987957aa8e4ba43b7cf05 100644
--- a/vendor/guzzlehttp/guzzle/src/HandlerStack.php
+++ b/vendor/guzzlehttp/guzzle/src/HandlerStack.php
@@ -1,7 +1,9 @@
 <?php
 namespace GuzzleHttp;
 
+use GuzzleHttp\Promise\PromiseInterface;
 use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ResponseInterface;
 
 /**
  * Creates a composed Guzzle handler function by stacking middlewares on top of
@@ -9,7 +11,7 @@
  */
 class HandlerStack
 {
-    /** @var callable */
+    /** @var callable|null */
     private $handler;
 
     /** @var array */
@@ -59,6 +61,8 @@ public function __construct(callable $handler = null)
      *
      * @param RequestInterface $request
      * @param array            $options
+     *
+     * @return ResponseInterface|PromiseInterface
      */
     public function __invoke(RequestInterface $request, array $options)
     {
@@ -206,7 +210,7 @@ public function resolve()
     }
 
     /**
-     * @param $name
+     * @param string $name
      * @return int
      */
     private function findByName($name)
@@ -223,10 +227,10 @@ private function findByName($name)
     /**
      * Splices a function into the middleware list at a specific position.
      *
-     * @param          $findName
-     * @param          $withName
+     * @param string   $findName
+     * @param string   $withName
      * @param callable $middleware
-     * @param          $before
+     * @param bool     $before
      */
     private function splice($findName, $withName, callable $middleware, $before)
     {
diff --git a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
index 663ac7391632645eb2f6b926123a1d669c1b9e69..dc36bb524d4b7f2515e9ce053c20557169c990aa 100644
--- a/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
+++ b/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
@@ -168,6 +168,11 @@ function (array $matches) use ($request, $response, $error, &$cache) {
         );
     }
 
+    /**
+     * Get headers from message as string
+     *
+     * @return string
+     */
     private function headers(MessageInterface $message)
     {
         $result = '';
diff --git a/vendor/guzzlehttp/guzzle/src/Middleware.php b/vendor/guzzlehttp/guzzle/src/Middleware.php
index d4ad75c94f333a43b97f42e973e3c5962572d606..bffc1974bbe0d94287ff580d0cfe657e32cf041e 100644
--- a/vendor/guzzlehttp/guzzle/src/Middleware.php
+++ b/vendor/guzzlehttp/guzzle/src/Middleware.php
@@ -7,7 +7,6 @@
 use GuzzleHttp\Psr7;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Log\LoggerInterface;
-use Psr\Log\LogLevel;
 
 /**
  * Functions used to create and wrap handlers with handler middleware.
@@ -39,7 +38,7 @@ function ($response) use ($cookieJar, $request) {
                             $cookieJar->extractCookies($request, $response);
                             return $response;
                         }
-                );
+                    );
             };
         };
     }
@@ -58,7 +57,7 @@ public static function httpErrors()
                     return $handler($request, $options);
                 }
                 return $handler($request, $options)->then(
-                    function (ResponseInterface $response) use ($request, $handler) {
+                    function (ResponseInterface $response) use ($request) {
                         $code = $response->getStatusCode();
                         if ($code < 400) {
                             return $response;
@@ -183,7 +182,7 @@ public static function retry(callable $decider, callable $delay = null)
      *
      * @return callable Returns a function that accepts the next handler.
      */
-    public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO)
+    public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = 'info' /* \Psr\Log\LogLevel::INFO */)
     {
         return function (callable $handler) use ($logger, $formatter, $logLevel) {
             return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) {
diff --git a/vendor/guzzlehttp/guzzle/src/Pool.php b/vendor/guzzlehttp/guzzle/src/Pool.php
index 8f1be33cd396b60e9dd738fe81150cb62dd9e211..ec7df6c0e0533552f3fab0a69be08bf4a4c38b04 100644
--- a/vendor/guzzlehttp/guzzle/src/Pool.php
+++ b/vendor/guzzlehttp/guzzle/src/Pool.php
@@ -1,12 +1,12 @@
 <?php
 namespace GuzzleHttp;
 
+use GuzzleHttp\Promise\EachPromise;
 use GuzzleHttp\Promise\PromisorInterface;
 use Psr\Http\Message\RequestInterface;
-use GuzzleHttp\Promise\EachPromise;
 
 /**
- * Sends and iterator of requests concurrently using a capped pool size.
+ * Sends an iterator of requests concurrently using a capped pool size.
  *
  * The pool will read from an iterator until it is cancelled or until the
  * iterator is consumed. When a request is yielded, the request is sent after
@@ -69,6 +69,10 @@ public function __construct(
         $this->each = new EachPromise($requests(), $config);
     }
 
+    /**
+     * Get promise
+     * @return GuzzleHttp\Promise\Promise
+     */
     public function promise()
     {
         return $this->each->promise();
@@ -106,6 +110,11 @@ public static function batch(
         return $res;
     }
 
+    /**
+     * Execute callback(s)
+     *
+     * @return void
+     */
     private static function cmpCallback(array &$options, $name, array &$results)
     {
         if (!isset($options[$name])) {
diff --git a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
index 2eb95f9b2d3a1d9ce581f34bb01fcdf46ddd493d..568a1e906c97071c5d7220439278fc9aaf4058f2 100644
--- a/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
+++ b/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
@@ -66,6 +66,11 @@ public function __invoke(RequestInterface $request, array $options)
         return $fn(Psr7\modify_request($request, $modify), $options);
     }
 
+    /**
+     * Add expect header
+     *
+     * @return void
+     */
     private function addExpectHeader(
         RequestInterface $request,
         array $options,
diff --git a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
index 131b77179aa07f59ef65ff0945dd51083d58eb0e..5a0edd5728906e58c80583910fba2c0fbd98c122 100644
--- a/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
+++ b/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
@@ -76,7 +76,7 @@ public function __invoke(RequestInterface $request, array $options)
     /**
      * @param RequestInterface  $request
      * @param array             $options
-     * @param ResponseInterface|PromiseInterface $response
+     * @param ResponseInterface $response
      *
      * @return ResponseInterface|PromiseInterface
      */
@@ -118,6 +118,11 @@ public function checkRedirect(
         return $promise;
     }
 
+    /**
+     * Enable tracking on promise.
+     *
+     * @return PromiseInterface
+     */
     private function withTracking(PromiseInterface $promise, $uri, $statusCode)
     {
         return $promise->then(
@@ -135,6 +140,13 @@ function (ResponseInterface $response) use ($uri, $statusCode) {
         );
     }
 
+    /**
+     * Check for too many redirects
+     *
+     * @return void
+     *
+     * @throws TooManyRedirectsException Too many redirects.
+     */
     private function guardMax(RequestInterface $request, array &$options)
     {
         $current = isset($options['__redirect_count'])
@@ -172,7 +184,7 @@ public function modifyRequest(
         // would do.
         $statusCode = $response->getStatusCode();
         if ($statusCode == 303 ||
-            ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict'])
+            ($statusCode <= 302 && !$options['allow_redirects']['strict'])
         ) {
             $modify['method'] = 'GET';
             $modify['body'] = '';
@@ -186,7 +198,7 @@ public function modifyRequest(
         if ($options['allow_redirects']['referer']
             && $modify['uri']->getScheme() === $request->getUri()->getScheme()
         ) {
-            $uri = $request->getUri()->withUserInfo('', '');
+            $uri = $request->getUri()->withUserInfo('');
             $modify['set_headers']['Referer'] = (string) $uri;
         } else {
             $modify['remove_headers'][] = 'Referer';
diff --git a/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/vendor/guzzlehttp/guzzle/src/RequestOptions.php
index c6aacfb15782756a14e24ccc71143663795011fa..355f658f03457e48a615ec368a4fc6d31b83f1ad 100644
--- a/vendor/guzzlehttp/guzzle/src/RequestOptions.php
+++ b/vendor/guzzlehttp/guzzle/src/RequestOptions.php
@@ -22,7 +22,7 @@ final class RequestOptions
      * - strict: (bool, default=false) Set to true to use strict redirects
      *   meaning redirect POST requests with POST requests vs. doing what most
      *   browsers do which is redirect POST requests with GET requests
-     * - referer: (bool, default=true) Set to false to disable the Referer
+     * - referer: (bool, default=false) Set to true to enable the Referer
      *   header.
      * - protocols: (array, default=['http', 'https']) Allowed redirect
      *   protocols.
@@ -132,6 +132,14 @@ final class RequestOptions
      */
     const HTTP_ERRORS = 'http_errors';
 
+    /**
+     * idn: (bool|int, default=true) A combination of IDNA_* constants for
+     * idn_to_ascii() PHP's function (see "options" parameter). Set to false to
+     * disable IDN support completely, or to true to use the default
+     * configuration (IDNA_DEFAULT constant).
+     */
+    const IDN_CONVERSION = 'idn_conversion';
+
     /**
      * json: (mixed) Adds JSON data to a request. The provided value is JSON
      * encoded and a Content-Type header of application/json will be added to
diff --git a/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
index f27090fd197ab7ff443f12f6501d639f169871cf..5acc8c5c392eb717c00d0fc5643dacaf670b9149 100644
--- a/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
+++ b/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
@@ -19,6 +19,9 @@ class RetryMiddleware
     /** @var callable */
     private $decider;
 
+    /** @var callable */
+    private $delay;
+
     /**
      * @param callable $decider     Function that accepts the number of retries,
      *                              a request, [response], and [exception] and
@@ -42,13 +45,13 @@ public function __construct(
     /**
      * Default exponential backoff delay function.
      *
-     * @param $retries
+     * @param int $retries
      *
-     * @return int
+     * @return int milliseconds.
      */
     public static function exponentialDelay($retries)
     {
-        return (int) pow(2, $retries - 1);
+        return (int) pow(2, $retries - 1) * 1000;
     }
 
     /**
@@ -71,6 +74,11 @@ public function __invoke(RequestInterface $request, array $options)
             );
     }
 
+    /**
+     * Execute fulfilled closure
+     *
+     * @return mixed
+     */
     private function onFulfilled(RequestInterface $req, array $options)
     {
         return function ($value) use ($req, $options) {
@@ -87,6 +95,11 @@ private function onFulfilled(RequestInterface $req, array $options)
         };
     }
 
+    /**
+     * Execute rejected closure
+     *
+     * @return callable
+     */
     private function onRejected(RequestInterface $req, array $options)
     {
         return function ($reason) use ($req, $options) {
@@ -103,6 +116,9 @@ private function onRejected(RequestInterface $req, array $options)
         };
     }
 
+    /**
+     * @return self
+     */
     private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null)
     {
         $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response);
diff --git a/vendor/guzzlehttp/guzzle/src/TransferStats.php b/vendor/guzzlehttp/guzzle/src/TransferStats.php
index 15f717e1ea6e8edf6bc3a252f5a478e19e835b04..87fb3c00164d274d9b5cec535339bcfb059efc84 100644
--- a/vendor/guzzlehttp/guzzle/src/TransferStats.php
+++ b/vendor/guzzlehttp/guzzle/src/TransferStats.php
@@ -18,11 +18,11 @@ final class TransferStats
     private $handlerErrorData;
 
     /**
-     * @param RequestInterface  $request          Request that was sent.
-     * @param ResponseInterface $response         Response received (if any)
-     * @param null              $transferTime     Total handler transfer time.
-     * @param mixed             $handlerErrorData Handler error data.
-     * @param array             $handlerStats     Handler specific stats.
+     * @param RequestInterface       $request          Request that was sent.
+     * @param ResponseInterface|null $response         Response received (if any)
+     * @param float|null             $transferTime     Total handler transfer time.
+     * @param mixed                  $handlerErrorData Handler error data.
+     * @param array                  $handlerStats     Handler specific stats.
      */
     public function __construct(
         RequestInterface $request,
@@ -93,7 +93,7 @@ public function getEffectiveUri()
     /**
      * Get the estimated time the request was being transferred by the handler.
      *
-     * @return float Time in seconds.
+     * @return float|null Time in seconds.
      */
     public function getTransferTime()
     {
diff --git a/vendor/guzzlehttp/guzzle/src/functions.php b/vendor/guzzlehttp/guzzle/src/functions.php
index a3ac450db94cfe1409f5ec052d2710e6426e469e..aff69d557a2377f78bb82563eeb7e3cc99d0b04c 100644
--- a/vendor/guzzlehttp/guzzle/src/functions.php
+++ b/vendor/guzzlehttp/guzzle/src/functions.php
@@ -56,7 +56,7 @@ function describe_type($input)
 /**
  * Parses an array of header lines into an associative array of headers.
  *
- * @param array $lines Header lines array of strings in the following
+ * @param iterable $lines Header lines array of strings in the following
  *                     format: "Name: Value"
  * @return array
  */
@@ -196,7 +196,8 @@ function default_ca_bundle()
         }
     }
 
-    throw new \RuntimeException(<<< EOT
+    throw new \RuntimeException(
+        <<< EOT
 No system CA bundle could be found in any of the the common system locations.
 PHP versions earlier than 5.6 are not properly configured to use the system's
 CA bundle by default. In order to verify peer certificates, you will need to
@@ -294,14 +295,14 @@ function is_host_in_noproxy($host, array $noProxyArray)
  * @param int    $options Bitmask of JSON decode options.
  *
  * @return mixed
- * @throws \InvalidArgumentException if the JSON cannot be decoded.
+ * @throws Exception\InvalidArgumentException if the JSON cannot be decoded.
  * @link http://www.php.net/manual/en/function.json-decode.php
  */
 function json_decode($json, $assoc = false, $depth = 512, $options = 0)
 {
     $data = \json_decode($json, $assoc, $depth, $options);
     if (JSON_ERROR_NONE !== json_last_error()) {
-        throw new \InvalidArgumentException(
+        throw new Exception\InvalidArgumentException(
             'json_decode error: ' . json_last_error_msg()
         );
     }
@@ -317,17 +318,29 @@ function json_decode($json, $assoc = false, $depth = 512, $options = 0)
  * @param int    $depth   Set the maximum depth. Must be greater than zero.
  *
  * @return string
- * @throws \InvalidArgumentException if the JSON cannot be encoded.
+ * @throws Exception\InvalidArgumentException if the JSON cannot be encoded.
  * @link http://www.php.net/manual/en/function.json-encode.php
  */
 function json_encode($value, $options = 0, $depth = 512)
 {
     $json = \json_encode($value, $options, $depth);
     if (JSON_ERROR_NONE !== json_last_error()) {
-        throw new \InvalidArgumentException(
+        throw new Exception\InvalidArgumentException(
             'json_encode error: ' . json_last_error_msg()
         );
     }
 
     return $json;
 }
+
+/**
+ * Wrapper for the hrtime() or microtime() functions
+ * (depending on the PHP version, one of the two is used)
+ *
+ * @return float|mixed UNIX timestamp
+ * @internal
+ */
+function _current_time()
+{
+    return function_exists('hrtime') ? hrtime(true) / 1e9 : microtime(true);
+}
diff --git a/vendor/masterminds/html5/.travis.yml b/vendor/masterminds/html5/.travis.yml
index f10bcf3f42e15cca03e4bba411cef66778747639..469dc220ad90a88b89193e0366e3563ce1472fbf 100644
--- a/vendor/masterminds/html5/.travis.yml
+++ b/vendor/masterminds/html5/.travis.yml
@@ -16,8 +16,8 @@ matrix:
     - php: 7.1
       env: CS_FIXER=1
     - php: 7.2
+    - php: 7.3
       env: BENCHMARK=1
-    - php: hhvm
   fast_finish: true
 
 cache:
diff --git a/vendor/masterminds/html5/README.md b/vendor/masterminds/html5/README.md
index ef247370085b2e7be43f84c8e3d5b6f7c2ef2865..546d3e24cfe78a5fdb92cbc23dcf7b4d32248f4c 100644
--- a/vendor/masterminds/html5/README.md
+++ b/vendor/masterminds/html5/README.md
@@ -12,7 +12,7 @@ HTML5 provides the following features.
 - Event-based (SAX-like) parser
 - A DOM tree builder
 - Interoperability with [QueryPath](https://github.com/technosophos/querypath)
-- Runs on **PHP** 5.3.0 or newer and **HHVM** 3.2 or newer
+- Runs on **PHP** 5.3.0 or newer
 
 [![Build Status](https://travis-ci.org/Masterminds/html5-php.png?branch=master)](https://travis-ci.org/Masterminds/html5-php)
 [![Latest Stable Version](https://poser.pugx.org/masterminds/html5/v/stable.png)](https://packagist.org/packages/masterminds/html5)
diff --git a/vendor/masterminds/html5/RELEASE.md b/vendor/masterminds/html5/RELEASE.md
index 3c51cecbf5f2e98de31472b343c3eff926fd9c57..cd43e7b8cb8f8f9c349beea303a34d30fa59cb2c 100644
--- a/vendor/masterminds/html5/RELEASE.md
+++ b/vendor/masterminds/html5/RELEASE.md
@@ -1,5 +1,10 @@
 # Release Notes
 
+2.7.0 (2019-07-25)
+
+- #164: Drop HHVM support
+- #168: Set default encoding in the DOMDocument object
+
 2.6.0 (2019-03-10)
 
 - #163: Allow to pass a charset to the Scanner
diff --git a/vendor/masterminds/html5/composer.json b/vendor/masterminds/html5/composer.json
index a1c059bef73bb67bdda94b5c498a5a55cbcb292d..65047905c977b67a0ff9e10d443f8dec2bff8cbf 100644
--- a/vendor/masterminds/html5/composer.json
+++ b/vendor/masterminds/html5/composer.json
@@ -38,7 +38,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.6-dev"
+            "dev-master": "2.7-dev"
         }
     }
 }
diff --git a/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php b/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php
index f01cf4d1267e87511e815a3b0d3a3ef2170ce6b1..e9bca4e160cad61eea51a0dff8ebaf5836bb8572 100644
--- a/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php
+++ b/vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php
@@ -176,6 +176,7 @@ public function __construct($isFragment = false, array $options = array())
             $dt = $impl->createDocumentType('html');
             // $this->doc = \DOMImplementation::createDocument(NULL, 'html', $dt);
             $this->doc = $impl->createDocument(null, null, $dt);
+            $this->doc->encoding = !empty($options['encoding']) ? $options['encoding'] : 'UTF-8';
         }
 
         $this->errors = array();
@@ -391,11 +392,6 @@ public function startTag($name, $attributes = array(), $selfClosing = false)
             // to avoid spl_object_hash collisions whe have to avoid garbage collection of $ele storing it into $pushes
             // see https://bugs.php.net/bug.php?id=67459
             $this->pushes[spl_object_hash($ele)] = array($pushes, $ele);
-
-            // SEE https://github.com/facebook/hhvm/issues/2962
-            if (defined('HHVM_VERSION')) {
-                $ele->setAttribute('html5-php-fake-id-attribute', spl_object_hash($ele));
-            }
         }
 
         foreach ($attributes as $aName => $aVal) {
@@ -509,12 +505,7 @@ public function endTag($name)
             $lname = Elements::normalizeSvgElement($lname);
         }
 
-        // See https://github.com/facebook/hhvm/issues/2962
-        if (defined('HHVM_VERSION') && ($cid = $this->current->getAttribute('html5-php-fake-id-attribute'))) {
-            $this->current->removeAttribute('html5-php-fake-id-attribute');
-        } else {
-            $cid = spl_object_hash($this->current);
-        }
+        $cid = spl_object_hash($this->current);
 
         // XXX: HTML has no parent. What do we do, though,
         // if this element appears in the wrong place?
diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php b/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
index 41616d57aeab9ff3264b598f3e859dad224d2b93..1c4e8929a296ff7623f5aeb3e1f97390bf1217a6 100644
--- a/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
+++ b/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
@@ -167,9 +167,7 @@ public function __construct($output, $options = array())
 
         $this->outputMode = static::IM_IN_HTML;
         $this->out = $output;
-
-        // If HHVM, see https://github.com/facebook/hhvm/issues/2727
-        $this->hasHTML5 = defined('ENT_HTML5') && !defined('HHVM_VERSION');
+        $this->hasHTML5 = defined('ENT_HTML5');
     }
 
     public function addRule(array $rule)
diff --git a/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php b/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
index 21e9cea299e504d3d14ae9d69936bf1ec668b025..b5940c23a9d4680af9fb132dd4148943b62a2da6 100644
--- a/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
+++ b/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
@@ -52,6 +52,7 @@ public function testDocument()
         $html = '<!DOCTYPE html><html></html>';
         $doc = $this->parse($html);
 
+        $this->assertEquals('UTF-8', $doc->encoding);
         $this->assertInstanceOf('\DOMDocument', $doc);
         $this->assertEquals('html', $doc->documentElement->tagName);
         $this->assertEquals('http://www.w3.org/1999/xhtml', $doc->documentElement->namespaceURI);
diff --git a/vendor/pear/archive_tar/.travis.yml b/vendor/pear/archive_tar/.travis.yml
index a0af9f106e4910b888e952ba020984df83447f88..b841f4efc8d97126b937c525f9e967909b73ae5c 100644
--- a/vendor/pear/archive_tar/.travis.yml
+++ b/vendor/pear/archive_tar/.travis.yml
@@ -20,9 +20,18 @@ matrix:
     dist: trusty
   - php: 7.3
     dist: trusty
+  - php: 7.4snapshot
+  - php: master
+
+jobs:
+  allow_failures:
+    - php: 7.4snapshot
+    - php: master
+
 install:
 #  - pear upgrade --force --alldeps pear/pear
   - pear install -f package.xml
 script:
+  - pear version
   - pear run-tests -qr tests/
   - for i in `find tests/ -name '*.out'`; do echo "$i"; cat "$i"; done
diff --git a/vendor/pear/archive_tar/Archive/Tar.php b/vendor/pear/archive_tar/Archive/Tar.php
index 53966c255d301801be433bcb03c78b18192a961e..2f328c22737882269334f1687f1ac142b2e41272 100644
--- a/vendor/pear/archive_tar/Archive/Tar.php
+++ b/vendor/pear/archive_tar/Archive/Tar.php
@@ -312,11 +312,12 @@ public function add($p_filelist)
     /**
      * @param string $p_path
      * @param bool $p_preserve
+     * @param bool $p_symlinks
      * @return bool
      */
-    public function extract($p_path = '', $p_preserve = false)
+    public function extract($p_path = '', $p_preserve = false, $p_symlinks = true)
     {
-        return $this->extractModify($p_path, '', $p_preserve);
+        return $this->extractModify($p_path, '', $p_preserve, $p_symlinks);
     }
 
     /**
@@ -557,11 +558,12 @@ public function addString($p_filename, $p_string, $p_datetime = false, $p_params
      *                               removed if present at the beginning of
      *                               the file/dir path.
      * @param boolean $p_preserve Preserve user/group ownership of files
+     * @param boolean $p_symlinks Allow symlinks.
      *
      * @return boolean true on success, false on error.
      * @see    extractList()
      */
-    public function extractModify($p_path, $p_remove_path, $p_preserve = false)
+    public function extractModify($p_path, $p_remove_path, $p_preserve = false, $p_symlinks = true)
     {
         $v_result = true;
         $v_list_detail = array();
@@ -573,7 +575,8 @@ public function extractModify($p_path, $p_remove_path, $p_preserve = false)
                 "complete",
                 0,
                 $p_remove_path,
-                $p_preserve
+                $p_preserve,
+                $p_symlinks
             );
             $this->_close();
         }
@@ -617,11 +620,12 @@ public function extractInString($p_filename)
      *                               removed if present at the beginning of
      *                               the file/dir path.
      * @param boolean $p_preserve Preserve user/group ownership of files
+     * @param boolean $p_symlinks Allow symlinks.
      *
      * @return true on success, false on error.
      * @see    extractModify()
      */
-    public function extractList($p_filelist, $p_path = '', $p_remove_path = '', $p_preserve = false)
+    public function extractList($p_filelist, $p_path = '', $p_remove_path = '', $p_preserve = false, $p_symlinks = true)
     {
         $v_result = true;
         $v_list_detail = array();
@@ -642,7 +646,8 @@ public function extractList($p_filelist, $p_path = '', $p_remove_path = '', $p_p
                 "partial",
                 $v_list,
                 $p_remove_path,
-                $p_preserve
+                $p_preserve,
+                $p_symlinks
             );
             $this->_close();
         }
@@ -1692,7 +1697,16 @@ public function _readHeader($v_binary_data, &$v_header)
         }
 
         // ----- Extract the checksum
-        $v_header['checksum'] = OctDec(trim($v_data['checksum']));
+        $v_data_checksum = trim($v_data['checksum']);
+        if (!preg_match('/^[0-7]*$/', $v_data_checksum)) {
+            $this->_error(
+                'Invalid checksum for file "' . $v_data['filename']
+                . '" : ' . $v_data_checksum . ' extracted'
+            );
+            return false;
+        }
+
+        $v_header['checksum'] = OctDec($v_data_checksum);
         if ($v_header['checksum'] != $v_checksum) {
             $v_header['filename'] = '';
 
@@ -1908,6 +1922,7 @@ private function _extractInString($p_filename)
      * @param string $p_file_list
      * @param string $p_remove_path
      * @param bool $p_preserve
+     * @param bool $p_symlinks
      * @return bool
      */
     public function _extractList(
@@ -1916,7 +1931,8 @@ public function _extractList(
         $p_mode,
         $p_file_list,
         $p_remove_path,
-        $p_preserve = false
+        $p_preserve = false,
+        $p_symlinks = true
     )
     {
         $v_result = true;
@@ -2099,6 +2115,13 @@ public function _extractList(
                             }
                         }
                     } elseif ($v_header['typeflag'] == "2") {
+                        if (!$p_symlinks) {
+                            $this->_warning('Symbolic links are not allowed. '
+                                . 'Unable to extract {'
+                                . $v_header['filename'] . '}'
+                            );
+                            return false;
+                        }
                         if (@file_exists($v_header['filename'])) {
                             @unlink($v_header['filename']);
                         }
diff --git a/vendor/pear/archive_tar/package.xml b/vendor/pear/archive_tar/package.xml
index 3e3448a953aa20ea8b148a78a9aa8066cba4eb1e..6834939518d74245d1585df11a62a3c04071f766 100644
--- a/vendor/pear/archive_tar/package.xml
+++ b/vendor/pear/archive_tar/package.xml
@@ -32,10 +32,10 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
   <email>stig@php.net</email>
   <active>no</active>
  </helper>
- <date>2019-04-08</date>
- <time>15:30:00</time>
+ <date>2019-12-04</date>
+ <time>09:25:16</time>
  <version>
-  <release>1.4.7</release>
+  <release>1.4.9</release>
   <api>1.4.0</api>
  </version>
  <stability>
@@ -44,7 +44,7 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
  </stability>
  <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
  <notes>
-* Improved performance by increasing read buffer size
+* Implement Feature #23861: Add option to disallow symlinks [mrook]
  </notes>
  <contents>
   <dir name="/">
@@ -74,6 +74,36 @@ Also Lzma2 compressed archives are supported with xz extension.</description>
  </dependencies>
  <phprelease />
  <changelog>
+  <release>
+   <version>
+    <release>1.4.8</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2019-10-21</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>
+* Fix Bug #23852: PHP 7.4 - Archive_Tar-&gt;_readHeader throws deprecation [mrook]
+   </notes>
+  </release>
+  <release>
+   <version>
+    <release>1.4.7</release>
+    <api>1.4.0</api>
+   </version>
+   <stability>
+    <release>stable</release>
+    <api>stable</api>
+   </stability>
+   <date>2019-04-08</date>
+   <license uri="http://www.opensource.org/licenses/bsd-license.php">New BSD License</license>
+   <notes>
+* Improved performance by increasing read buffer size
+   </notes>
+  </release>
   <release>
    <version>
     <release>1.4.6</release>
diff --git a/vendor/pear/archive_tar/tests/invalidchecksum.phpt b/vendor/pear/archive_tar/tests/invalidchecksum.phpt
new file mode 100644
index 0000000000000000000000000000000000000000..c70cee79335bd1293ee65da99c35f07469c5c15d
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/invalidchecksum.phpt
@@ -0,0 +1,20 @@
+--TEST--
+test saving of dead symbolic links
+--SKIPIF--
+--FILE--
+<?php
+require_once dirname(__FILE__) . '/setup.php.inc';
+
+$tar1 = new Archive_Tar(dirname(__FILE__) . '/text-0.txt');
+$tar1->listContent();
+
+$phpunit->assertErrors(array(
+    array('package' => 'PEAR_Error', 'message' => "Invalid checksum for file \"4&2Vib~Au.=ZqMTw~=}UoF/~5Gs;JTXF*<FyG\"\n" .
+                                                                               '1Hvu#nol Y 21/{G9i|D=$GTI KREuA\wI<wM@dYOKzS{6&]QE8ud|EPb:f?-Gt' . "\n" .
+                                                                               'I#)E9)@;_.0y9`P,&jY! :\.J8uG/a8,.vT[$Fe;>}hm\"#xO7:46y_tg6c-[A&S]z0fke?(B6?$:W$X{E%PO>~UWl8(' . "\n" .
+                                                                               '.%RWPjN55)cd&?oJPgFFZj#+U<qrF:9yIRe\" : UPJX05Zz extracted')), 'after 1');
+echo 'tests done';
+?>
+--CLEAN--
+--EXPECT--
+tests done
diff --git a/vendor/pear/archive_tar/tests/phpt_test.php.inc b/vendor/pear/archive_tar/tests/phpt_test.php.inc
index 67222e8df85cda392ea108e36c2800ece4d485ed..8153dd6402096cf54419fa9686237d57e11d7400 100644
--- a/vendor/pear/archive_tar/tests/phpt_test.php.inc
+++ b/vendor/pear/archive_tar/tests/phpt_test.php.inc
@@ -8,7 +8,7 @@ class PEAR_PHPTest
 {
     var $_diffonly;
     var $_errors;
-    function PEAR_PHPTest($diffonly = false, $noStackCatch = false)
+    function __construct($diffonly = false, $noStackCatch = false)
     {
         $this->_diffonly = $diffonly;
         $this->_errors = array();
diff --git a/vendor/pear/archive_tar/tests/setup.php.inc b/vendor/pear/archive_tar/tests/setup.php.inc
index b2415a906a65a89d6e250ff08e3ca5f20c47972c..0c7759b78b7708f8e85bc4c2bbf5fa622623c694 100644
--- a/vendor/pear/archive_tar/tests/setup.php.inc
+++ b/vendor/pear/archive_tar/tests/setup.php.inc
@@ -1,4 +1,5 @@
 <?php
+error_reporting(E_ALL);
 require_once dirname(__FILE__) . '/phpt_test.php.inc';
 $phpunit = new PEAR_PHPTest(true);
 require_once dirname(dirname(__FILE__)) . '/Archive/Tar.php';
diff --git a/vendor/pear/archive_tar/tests/symlink_disallow.phpt b/vendor/pear/archive_tar/tests/symlink_disallow.phpt
new file mode 100644
index 0000000000000000000000000000000000000000..209ec1e0172f4375327de424cda36c2223e16471
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/symlink_disallow.phpt
@@ -0,0 +1,28 @@
+--TEST--
+test symbolic links
+--SKIPIF--
+--FILE--
+<?php
+require_once dirname(__FILE__) . '/setup.php.inc';
+$me = dirname(__FILE__) . '/testit';
+$tar = new Archive_Tar(dirname(__FILE__) . '/testsymlink.tar');
+$tar->extract('', false, false);
+$phpunit->assertErrors(array(
+    array(
+        'package' => 'PEAR_Error',
+        'message' => 'Symbolic links are not allowed. Unable to extract {testme/symlink.txt}'
+    ),
+), 'Warning thrown');
+$phpunit->assertFileExists('testme', 'dir');
+$phpunit->assertFileNotExists('testme/file1.txt', 'file1.txt');
+$phpunit->assertFileNotExists('testme/symlink.txt', 'symlink.txt');
+echo 'tests done';
+?>
+--CLEAN--
+<?php
+@unlink('testme/file1.txt');
+@unlink('testme/symlink.txt');
+@rmdir('testme');
+?>
+--EXPECT--
+tests done
diff --git a/vendor/pear/archive_tar/tests/text-0.txt b/vendor/pear/archive_tar/tests/text-0.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d34a84cd6811b5aca95fa8073e5bd24100076331
--- /dev/null
+++ b/vendor/pear/archive_tar/tests/text-0.txt
@@ -0,0 +1,16 @@
+a8,.vT[$Fe;>}hm\"#xO7:46y_tg6c-[A&S]z0fke?(B6?$:W$X{E%PO>~UWl8(
+.%RWPjN55)cd&?oJPgFFZj#+U<qrF:9yIRe\S0F}Y|[`+4^::byA2Is7UY8QShd
+v]F 1O0_[Ip7.12B"!u!UPJX05ZzKXP<JJ(X@4r(M2D})|TA@b#2zFlG(EQqT@M
+[RKXlK41}Q= uEq4`p"ons9eil/$Tbp>T~!xcu46(QhbViq%FShbsm5Qt:8}[V1
+ov!|iNrfBH)JBa)G?P*v!@=?:Y^2!)v `wxPQ^xT[~W6&q^Un@"c#g3=M++ 0.x
+]^Lo4{|}Q]YN?GSaA/*s,Az>04&2Vib~Au.=ZqMTw~=}UoF/~5Gs;JTXF*<FyG"
+1Hvu#nol Y 21/{G9i|D=$GTI KREuA\wI<wM@dYOKzS{6&]QE8ud|EPb:f?-Gt
+I#)E9)@;_.0y9`P,&jY! :\.J8uGnUd},~`DXkJ-4\\xK24FvGqX434G#0hXLrH
+q3YXk^{Rgb` Gg&hUJY)+IrJffZ<O/7)UYj^I}gy.>C#&Vx%>lw9AdZ_eM{s8B#
+II*pD'_4H[LivE<WtfQW1IK'(6%|sQG=C,6nfeRVXJ{u:tTB(A"({4>(4!$@Ak^
+=|U/{r5n)I{(01wGUM53800-aIdiv1U_HDvgp2q}X,v-{O! 'u$8RJbBO]<PTA 
+CiqiD_L,=;^W&n?,ai}U&MV9nU[=,t_qDiCkR]SM18ok;dVe@g+G*`FYtl/{cMq
+B8R6kfeHNA{bZU?]{[LMLCqokIld;w&NebP<. :8l4d2[~P*\m+MYT}1RK.q4bH
+,:XUk'YazKlPN@_WBpb!\em%]H|A+_Fbqki<fjpahg89Xb$fB5ME~ItuXM5H4Ol
+*a1SfkUQmv|+xM+Rz2Wq{sXA^uTU(j;Ne.Tcd3uW;>lJSI3L"hj=z .Bfl)waj*
+8.G,qEubj;:xJc@Y14nZ`V|%dIk$GAks_MI|y^0R3)rIY9I.DfD,kZ9ap{z Xn 
diff --git a/vendor/pear/console_getopt/Console/Getopt.php b/vendor/pear/console_getopt/Console/Getopt.php
index f8df71ce595c9d2696c3ad6813976d87709db086..e5793bbb181ef096d53d88f1c872ee7df80fe0c0 100644
--- a/vendor/pear/console_getopt/Console/Getopt.php
+++ b/vendor/pear/console_getopt/Console/Getopt.php
@@ -123,7 +123,7 @@ public static function doGetopt($version, $args, $short_options, $long_options =
          * erroneous POSIX fix.
          */
         if ($version < 2) {
-            if (isset($args[0]{0}) && $args[0]{0} != '-') {
+            if (isset($args[0][0]) && $args[0][0] != '-') {
                 array_shift($args);
             }
         }
@@ -138,10 +138,10 @@ public static function doGetopt($version, $args, $short_options, $long_options =
                 break;
             }
 
-            if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
+            if ($arg[0] != '-' || (strlen($arg) > 1 && $arg[1] == '-' && !$long_options)) {
                 $non_opts = array_merge($non_opts, array_slice($args, $i));
                 break;
-            } elseif (strlen($arg) > 1 && $arg{1} == '-') {
+            } elseif (strlen($arg) > 1 && $arg[1] == '-') {
                 $error = Console_Getopt::_parseLongOption(substr($arg, 2),
                                                           $long_options,
                                                           $opts,
@@ -186,11 +186,11 @@ public static function doGetopt($version, $args, $short_options, $long_options =
     protected static function _parseShortOption($arg, $short_options, &$opts, &$argIdx, $args, $skip_unknown)
     {
         for ($i = 0; $i < strlen($arg); $i++) {
-            $opt     = $arg{$i};
+            $opt     = $arg[$i];
             $opt_arg = null;
 
             /* Try to find the short option in the specifier string. */
-            if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') {
+            if (($spec = strstr($short_options, $opt)) === false || $arg[$i] == ':') {
                 if ($skip_unknown === true) {
                     break;
                 }
@@ -199,8 +199,8 @@ protected static function _parseShortOption($arg, $short_options, &$opts, &$argI
                 return PEAR::raiseError($msg);
             }
 
-            if (strlen($spec) > 1 && $spec{1} == ':') {
-                if (strlen($spec) > 2 && $spec{2} == ':') {
+            if (strlen($spec) > 1 && $spec[1] == ':') {
+                if (strlen($spec) > 2 && $spec[2] == ':') {
                     if ($i + 1 < strlen($arg)) {
                         /* Option takes an optional argument. Use the remainder of
                            the arg string if there is anything left. */
@@ -296,11 +296,11 @@ protected static function _parseLongOption($arg, $long_options, &$opts, &$argIdx
                 $next_option_rest = '';
             }
 
-            if ($opt_rest != '' && $opt{0} != '=' &&
+            if ($opt_rest != '' && $opt[0] != '=' &&
                 $i + 1 < count($long_options) &&
                 $opt == substr($long_options[$i+1], 0, $opt_len) &&
                 $next_option_rest != '' &&
-                $next_option_rest{0} != '=') {
+                $next_option_rest[0] != '=') {
 
                 $msg = "Console_Getopt: option --$opt is ambiguous";
                 return PEAR::raiseError($msg);
diff --git a/vendor/pear/console_getopt/package.xml b/vendor/pear/console_getopt/package.xml
index 3c8da769d60e1adea4086cb0b6443f621546fead..d3fd7840294c574e87a38dc419c4ff6db6955182 100644
--- a/vendor/pear/console_getopt/package.xml
+++ b/vendor/pear/console_getopt/package.xml
@@ -24,9 +24,9 @@ short and long options.</description>
   <active>no</active>
  </helper>
 
- <date>2019-02-06</date>
+ <date>2019-11-20</date>
  <version>
-  <release>1.4.2</release>
+  <release>1.4.3</release>
   <api>1.4.0</api>
  </version>
  <stability>
@@ -36,7 +36,8 @@ short and long options.</description>
  <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
 
  <notes>
-* Remove use of each(), which is removed in PHP 8
+* PR #4:  Fix PHP 7.4 deprecation: array/string curly braces access
+* PR #5:  fix phplint warnings
  </notes>
 
  <contents>
@@ -75,6 +76,23 @@ short and long options.</description>
 
  <changelog>
 
+  <release>
+    <date>2019-11-20</date>
+    <version>
+     <release>1.4.3</release>
+     <api>1.4.0</api>
+    </version>
+    <stability>
+     <release>stable</release>
+     <api>stable</api>
+    </stability>
+    <license uri="http://opensource.org/licenses/bsd-license.php">BSD-2-Clause</license>
+    <notes>
+    * PR #4:  Fix PHP 7.4 deprecation: array/string curly braces access
+    * PR #5:  fix phplint warnings
+    </notes>
+  </release>
+
   <release>
     <date>2019-02-06</date>
     <version>
diff --git a/vendor/pear/pear-core-minimal/src/OS/Guess.php b/vendor/pear/pear-core-minimal/src/OS/Guess.php
index c45e84f155d68bdd0eda7c68991cbac959300abc..d5aa295c3b1137c6045d28773e5bc845e2bc6773 100644
--- a/vendor/pear/pear-core-minimal/src/OS/Guess.php
+++ b/vendor/pear/pear-core-minimal/src/OS/Guess.php
@@ -195,9 +195,22 @@ function _detectGlibcVersion()
         }
         $major = $minor = 0;
         include_once "System.php";
+
+        if (@is_link('/lib64/libc.so.6')) {
+            // Let's try reading the libc.so.6 symlink
+            if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib64/libc.so.6')), $matches)) {
+                list($major, $minor) = explode('.', $matches[1]);
+            }
+        } else if (@is_link('/lib/libc.so.6')) {
+            // Let's try reading the libc.so.6 symlink
+            if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) {
+                list($major, $minor) = explode('.', $matches[1]);
+            }
+        }
         // Use glibc's <features.h> header file to
         // get major and minor version number:
-        if (@file_exists('/usr/include/features.h') &&
+        if (!($major && $minor) &&
+              @file_exists('/usr/include/features.h') &&
               @is_readable('/usr/include/features.h')) {
             if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) {
                 $features_file = fopen('/usr/include/features.h', 'rb');
@@ -240,7 +253,7 @@ function _detectGlibcVersion()
             fclose($fp);
             $cpp = popen("/usr/bin/cpp $tmpfile", "r");
             while ($line = fgets($cpp, 1024)) {
-                if ($line{0} == '#' || trim($line) == '') {
+                if ($line[0] == '#' || trim($line) == '') {
                     continue;
                 }
 
@@ -252,13 +265,6 @@ function _detectGlibcVersion()
             unlink($tmpfile);
         } // features.h
 
-        if (!($major && $minor) && @is_link('/lib/libc.so.6')) {
-            // Let's try reading the libc.so.6 symlink
-            if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) {
-                list($major, $minor) = explode('.', $matches[1]);
-            }
-        }
-
         if (!($major && $minor)) {
             return $glibc = '';
         }
diff --git a/vendor/pear/pear-core-minimal/src/PEAR.php b/vendor/pear/pear-core-minimal/src/PEAR.php
index cf9a02de2fa2916a6564eac1097a1d09e2980eb5..fee6638f44ee2fd6c856f35fab7c3ae0dd141f5b 100644
--- a/vendor/pear/pear-core-minimal/src/PEAR.php
+++ b/vendor/pear/pear-core-minimal/src/PEAR.php
@@ -766,6 +766,28 @@ function_exists('dl') === false ||
 
         return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
     }
+
+    /**
+     * Get SOURCE_DATE_EPOCH environment variable
+     * See https://reproducible-builds.org/specs/source-date-epoch/
+     *
+     * @return int
+     * @access public
+     */
+    static function getSourceDateEpoch()
+    {
+        if ($source_date_epoch = getenv('SOURCE_DATE_EPOCH')) {
+            if (preg_match('/^\d+$/', $source_date_epoch)) {
+                return (int) $source_date_epoch;
+            } else {
+            //  "If the value is malformed, the build process SHOULD exit with a non-zero error code."
+            self::raiseError("Invalid SOURCE_DATE_EPOCH: $source_date_epoch");
+            exit(1);
+            }
+        } else {
+            return time();
+        }
+    }
 }
 
 function _PEAR_call_destructors()
diff --git a/vendor/pear/pear-core-minimal/src/System.php b/vendor/pear/pear-core-minimal/src/System.php
index aefc85b3f9e7c3d456f3cc72522ff2af89c89ffc..cf8f3799356e1bbb7edcefceee27a8d9105e03a8 100644
--- a/vendor/pear/pear-core-minimal/src/System.php
+++ b/vendor/pear/pear-core-minimal/src/System.php
@@ -74,7 +74,7 @@ public static function _parseArgs($argv, $short_options, $long_options = null)
             $offset = 0;
             foreach ($av as $a) {
                 $b = trim($a[0]);
-                if ($b{0} == '"' || $b{0} == "'") {
+                if ($b[0] == '"' || $b[0] == "'") {
                     continue;
                 }
 
@@ -265,7 +265,7 @@ public static function mkDir($args)
             } elseif ($opt[0] == 'm') {
                 // if the mode is clearly an octal number (starts with 0)
                 // convert it to decimal
-                if (strlen($opt[1]) && $opt[1]{0} == '0') {
+                if (strlen($opt[1]) && $opt[1][0] == '0') {
                     $opt[1] = octdec($opt[1]);
                 } else {
                     // convert to int
@@ -480,7 +480,7 @@ public static function tmpdir()
         if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) {
             return $var;
         }
-        return realpath('/tmp');
+        return realpath(function_exists('sys_get_temp_dir') ? sys_get_temp_dir() : '/tmp');
     }
 
     /**
diff --git a/vendor/pear/pear_exception/composer.json b/vendor/pear/pear_exception/composer.json
index ce33ed1c805c22514ca13a5927f26cf32d4ecf44..b923cf7181bd02a987e685988a26185d0c5d4aff 100644
--- a/vendor/pear/pear_exception/composer.json
+++ b/vendor/pear/pear_exception/composer.json
@@ -21,9 +21,7 @@
         "php": ">=4.4.0"
     },
     "autoload": {
-        "psr-0": {
-            "PEAR": ""
-        }
+        "classmap": ["PEAR/"]
     },
     "extra": {
         "branch-alias": {
diff --git a/vendor/symfony/class-loader/ApcClassLoader.php b/vendor/symfony/class-loader/ApcClassLoader.php
index 83038d749f78da7261f470da570af3749f77bc7d..57d22bfa358ea5b57d0ad7784e1044d476501821 100644
--- a/vendor/symfony/class-loader/ApcClassLoader.php
+++ b/vendor/symfony/class-loader/ApcClassLoader.php
@@ -113,6 +113,8 @@ public function loadClass($class)
 
             return true;
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/class-loader/ClassLoader.php b/vendor/symfony/class-loader/ClassLoader.php
index d727278ee81b68f24f2484b692650288b21dcb3f..277aa523df71adb52123251cb29bb4401fa9f2e4 100644
--- a/vendor/symfony/class-loader/ClassLoader.php
+++ b/vendor/symfony/class-loader/ClassLoader.php
@@ -161,6 +161,8 @@ public function loadClass($class)
 
             return true;
         }
+
+        return null;
     }
 
     /**
@@ -203,5 +205,7 @@ public function findFile($class)
         if ($this->useIncludePath && $file = stream_resolve_include_path($classPath)) {
             return $file;
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/class-loader/MapClassLoader.php b/vendor/symfony/class-loader/MapClassLoader.php
index a9719d6bd2683005bb0b2bd2223b5b2a069f5f40..e6b89e51434643a12254f6edaa07f07075ea16ce 100644
--- a/vendor/symfony/class-loader/MapClassLoader.php
+++ b/vendor/symfony/class-loader/MapClassLoader.php
@@ -63,8 +63,6 @@ public function loadClass($class)
      */
     public function findFile($class)
     {
-        if (isset($this->map[$class])) {
-            return $this->map[$class];
-        }
+        return isset($this->map[$class]) ? $this->map[$class] : null;
     }
 }
diff --git a/vendor/symfony/class-loader/Psr4ClassLoader.php b/vendor/symfony/class-loader/Psr4ClassLoader.php
index 7ea521d82e6e716506487f2a4e33a8a5d3e20e6b..f4e79cab627d7a340ec22ed17413fa643c33e2e8 100644
--- a/vendor/symfony/class-loader/Psr4ClassLoader.php
+++ b/vendor/symfony/class-loader/Psr4ClassLoader.php
@@ -55,6 +55,8 @@ public function findFile($class)
                 }
             }
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/class-loader/Tests/ClassCollectionLoaderTest.php b/vendor/symfony/class-loader/Tests/ClassCollectionLoaderTest.php
index 816f3c39451fda54c6e008c6c8a28cba8fb647c2..e1d5f56de3ad5ac9f03a4398e49e338aff11fffa 100644
--- a/vendor/symfony/class-loader/Tests/ClassCollectionLoaderTest.php
+++ b/vendor/symfony/class-loader/Tests/ClassCollectionLoaderTest.php
@@ -208,11 +208,9 @@ public function getFixNamespaceDeclarationsDataWithoutTokenizer()
         ];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testUnableToLoadClassException()
     {
+        $this->expectException('InvalidArgumentException');
         if (is_file($file = sys_get_temp_dir().'/foo.php')) {
             unlink($file);
         }
diff --git a/vendor/symfony/class-loader/WinCacheClassLoader.php b/vendor/symfony/class-loader/WinCacheClassLoader.php
index a7149ce9daf3ea8507fe995c055aa9fccc754775..374608bb87d6a228fa1e0ee234d254010ab420e3 100644
--- a/vendor/symfony/class-loader/WinCacheClassLoader.php
+++ b/vendor/symfony/class-loader/WinCacheClassLoader.php
@@ -112,6 +112,8 @@ public function loadClass($class)
 
             return true;
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/class-loader/XcacheClassLoader.php b/vendor/symfony/class-loader/XcacheClassLoader.php
index 56965df4c8ea9c3589f52d4055c7a702bab7eff2..d236bb4f07a34581caaa28de6fae046462a2a98a 100644
--- a/vendor/symfony/class-loader/XcacheClassLoader.php
+++ b/vendor/symfony/class-loader/XcacheClassLoader.php
@@ -106,6 +106,8 @@ public function loadClass($class)
 
             return true;
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/console/Application.php b/vendor/symfony/console/Application.php
index 4d10c31699731e18a93422a6e445ba1f6c6c3b69..d181e41e80c46eb070aa1386a82d335513b6f0da 100644
--- a/vendor/symfony/console/Application.php
+++ b/vendor/symfony/console/Application.php
@@ -454,12 +454,11 @@ public function add(Command $command)
         if (!$command->isEnabled()) {
             $command->setApplication(null);
 
-            return;
+            return null;
         }
 
-        if (null === $command->getDefinition()) {
-            throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', \get_class($command)));
-        }
+        // Will throw if the command is not correctly initialized.
+        $command->getDefinition();
 
         if (!$command->getName()) {
             throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', \get_class($command)));
@@ -530,6 +529,10 @@ public function getNamespaces()
     {
         $namespaces = [];
         foreach ($this->all() as $command) {
+            if ($command->isHidden()) {
+                continue;
+            }
+
             $namespaces = array_merge($namespaces, $this->extractAllNamespaces($command->getName()));
 
             foreach ($command->getAliases() as $alias) {
@@ -623,6 +626,11 @@ public function find($name)
             $message = sprintf('Command "%s" is not defined.', $name);
 
             if ($alternatives = $this->findAlternatives($name, $allCommands)) {
+                // remove hidden commands
+                $alternatives = array_filter($alternatives, function ($name) {
+                    return !$this->get($name)->isHidden();
+                });
+
                 if (1 == \count($alternatives)) {
                     $message .= "\n\nDid you mean this?\n    ";
                 } else {
@@ -631,7 +639,7 @@ public function find($name)
                 $message .= implode("\n    ", $alternatives);
             }
 
-            throw new CommandNotFoundException($message, $alternatives);
+            throw new CommandNotFoundException($message, array_values($alternatives));
         }
 
         // filter out aliases for commands which are already on the list
@@ -655,13 +663,18 @@ public function find($name)
             }
             $abbrevs = array_map(function ($cmd) use ($commandList, $usableWidth, $maxLen) {
                 if (!$commandList[$cmd] instanceof Command) {
-                    return $cmd;
+                    $commandList[$cmd] = $this->commandLoader->get($cmd);
+                }
+
+                if ($commandList[$cmd]->isHidden()) {
+                    return false;
                 }
+
                 $abbrev = str_pad($cmd, $maxLen, ' ').' '.$commandList[$cmd]->getDescription();
 
                 return Helper::strlen($abbrev) > $usableWidth ? Helper::substr($abbrev, 0, $usableWidth - 3).'...' : $abbrev;
             }, array_values($commands));
-            $suggestions = $this->getAbbreviationSuggestions($abbrevs);
+            $suggestions = $this->getAbbreviationSuggestions(array_filter($abbrevs));
 
             throw new CommandNotFoundException(sprintf("Command \"%s\" is ambiguous.\nDid you mean one of these?\n%s", $name, $suggestions), array_values($commands));
         }
@@ -809,11 +822,11 @@ protected function doRenderException(\Exception $e, OutputInterface $output)
                 for ($i = 0, $count = \count($trace); $i < $count; ++$i) {
                     $class = isset($trace[$i]['class']) ? $trace[$i]['class'] : '';
                     $type = isset($trace[$i]['type']) ? $trace[$i]['type'] : '';
-                    $function = $trace[$i]['function'];
+                    $function = isset($trace[$i]['function']) ? $trace[$i]['function'] : '';
                     $file = isset($trace[$i]['file']) ? $trace[$i]['file'] : 'n/a';
                     $line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a';
 
-                    $output->writeln(sprintf(' %s%s%s() at <info>%s:%s</info>', $class, $type, $function, $file, $line), OutputInterface::VERBOSITY_QUIET);
+                    $output->writeln(sprintf(' %s%s at <info>%s:%s</info>', $class, $function ? $type.$function.'()' : '', $file, $line), OutputInterface::VERBOSITY_QUIET);
                 }
 
                 $output->writeln('', OutputInterface::VERBOSITY_QUIET);
@@ -1023,7 +1036,7 @@ protected function doRunCommand(Command $command, InputInterface $input, OutputI
     /**
      * Gets the name of the command based on input.
      *
-     * @return string The command name
+     * @return string|null
      */
     protected function getCommandName(InputInterface $input)
     {
@@ -1099,8 +1112,7 @@ private function getAbbreviationSuggestions($abbrevs)
      */
     public function extractNamespace($name, $limit = null)
     {
-        $parts = explode(':', $name);
-        array_pop($parts);
+        $parts = explode(':', $name, -1);
 
         return implode(':', null === $limit ? $parts : \array_slice($parts, 0, $limit));
     }
diff --git a/vendor/symfony/console/CHANGELOG.md b/vendor/symfony/console/CHANGELOG.md
index 946ff1e0ba08fbd99f485fb6dbceb0f933b76313..6dba1a4ded0cf98b2ed0e50ed28c3c0e86448393 100644
--- a/vendor/symfony/console/CHANGELOG.md
+++ b/vendor/symfony/console/CHANGELOG.md
@@ -22,7 +22,7 @@ CHANGELOG
   with value optional explicitly passed empty
 * added console.error event to catch exceptions thrown by other listeners
 * deprecated console.exception event in favor of console.error
-* added ability to handle `CommandNotFoundException` through the 
+* added ability to handle `CommandNotFoundException` through the
  `console.error` event
 * deprecated default validation in `SymfonyQuestionHelper::ask`
 
@@ -38,7 +38,7 @@ CHANGELOG
 -----
 
  * added truncate method to FormatterHelper
- * added setColumnWidth(s) method to Table 
+ * added setColumnWidth(s) method to Table
 
 2.8.3
 -----
diff --git a/vendor/symfony/console/Command/Command.php b/vendor/symfony/console/Command/Command.php
index 5f30da7a2a5a9c3155865a43f8938b4400804614..493800b315d920bdb5b609041988b93b216fb5e7 100644
--- a/vendor/symfony/console/Command/Command.php
+++ b/vendor/symfony/console/Command/Command.php
@@ -40,8 +40,8 @@ class Command
     private $aliases = [];
     private $definition;
     private $hidden = false;
-    private $help;
-    private $description;
+    private $help = '';
+    private $description = '';
     private $ignoreValidationErrors = false;
     private $applicationDefinitionMerged = false;
     private $applicationDefinitionMergedWithArgs = false;
@@ -105,7 +105,7 @@ public function setHelperSet(HelperSet $helperSet)
     /**
      * Gets the helper set.
      *
-     * @return HelperSet A HelperSet instance
+     * @return HelperSet|null A HelperSet instance
      */
     public function getHelperSet()
     {
@@ -115,7 +115,7 @@ public function getHelperSet()
     /**
      * Gets the application instance for this command.
      *
-     * @return Application An Application instance
+     * @return Application|null An Application instance
      */
     public function getApplication()
     {
@@ -278,7 +278,7 @@ public function setCode(callable $code)
             $r = new \ReflectionFunction($code);
             if (null === $r->getClosureThis()) {
                 if (\PHP_VERSION_ID < 70000) {
-                    // Bug in PHP5: https://bugs.php.net/bug.php?id=64761
+                    // Bug in PHP5: https://bugs.php.net/64761
                     // This means that we cannot bind static closures and therefore we must
                     // ignore any errors here.  There is no way to test if the closure is
                     // bindable.
@@ -347,6 +347,10 @@ public function setDefinition($definition)
      */
     public function getDefinition()
     {
+        if (null === $this->definition) {
+            throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', \get_class($this)));
+        }
+
         return $this->definition;
     }
 
@@ -449,7 +453,7 @@ public function setProcessTitle($title)
     /**
      * Returns the command name.
      *
-     * @return string The command name
+     * @return string|null
      */
     public function getName()
     {
diff --git a/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php
index 9462996f6d2afe18fe6b3a3f0cccb24163dd835a..ca1029cb60042394e28e4d7b96b327817cf11ab3 100644
--- a/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php
+++ b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php
@@ -1,5 +1,14 @@
 <?php
 
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace Symfony\Component\Console\CommandLoader;
 
 use Symfony\Component\Console\Command\Command;
diff --git a/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php
index 753ad0fb705c2702b88e36f59d90605048d673f6..8000c7d5eca8209696956276bb265978ccb29d87 100644
--- a/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php
+++ b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php
@@ -1,5 +1,14 @@
 <?php
 
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
 namespace Symfony\Component\Console\CommandLoader;
 
 use Psr\Container\ContainerInterface;
diff --git a/vendor/symfony/console/Descriptor/ApplicationDescription.php b/vendor/symfony/console/Descriptor/ApplicationDescription.php
index 79a358fb32ee1ef85ee19e013625f6cdc2cfaa9c..7e214712da6f3d3b080d778f5e7af813e6a41526 100644
--- a/vendor/symfony/console/Descriptor/ApplicationDescription.php
+++ b/vendor/symfony/console/Descriptor/ApplicationDescription.php
@@ -44,7 +44,6 @@ class ApplicationDescription
     private $aliases;
 
     /**
-     * @param Application $application
      * @param string|null $namespace
      * @param bool        $showHidden
      */
@@ -130,23 +129,29 @@ private function sortCommands(array $commands)
     {
         $namespacedCommands = [];
         $globalCommands = [];
+        $sortedCommands = [];
         foreach ($commands as $name => $command) {
             $key = $this->application->extractNamespace($name, 1);
-            if (!$key) {
-                $globalCommands['_global'][$name] = $command;
+            if (\in_array($key, ['', self::GLOBAL_NAMESPACE], true)) {
+                $globalCommands[$name] = $command;
             } else {
                 $namespacedCommands[$key][$name] = $command;
             }
         }
-        ksort($namespacedCommands);
-        $namespacedCommands = array_merge($globalCommands, $namespacedCommands);
 
-        foreach ($namespacedCommands as &$commandsSet) {
-            ksort($commandsSet);
+        if ($globalCommands) {
+            ksort($globalCommands);
+            $sortedCommands[self::GLOBAL_NAMESPACE] = $globalCommands;
         }
-        // unset reference to keep scope clear
-        unset($commandsSet);
 
-        return $namespacedCommands;
+        if ($namespacedCommands) {
+            ksort($namespacedCommands);
+            foreach ($namespacedCommands as $key => $commandsSet) {
+                ksort($commandsSet);
+                $sortedCommands[$key] = $commandsSet;
+            }
+        }
+
+        return $sortedCommands;
     }
 }
diff --git a/vendor/symfony/console/Descriptor/DescriptorInterface.php b/vendor/symfony/console/Descriptor/DescriptorInterface.php
index fbc07df879abaceb47a232bc02a3b50e59c6fbb0..e3184a6a5a2084eae7433aac89cd2d340f636067 100644
--- a/vendor/symfony/console/Descriptor/DescriptorInterface.php
+++ b/vendor/symfony/console/Descriptor/DescriptorInterface.php
@@ -23,9 +23,7 @@ interface DescriptorInterface
     /**
      * Describes an object if supported.
      *
-     * @param OutputInterface $output
-     * @param object          $object
-     * @param array           $options
+     * @param object $object
      */
     public function describe(OutputInterface $output, $object, array $options = []);
 }
diff --git a/vendor/symfony/console/Descriptor/JsonDescriptor.php b/vendor/symfony/console/Descriptor/JsonDescriptor.php
index f5a143800b27ccc1f910ff14d9a9d46711a749ec..d1af3bab2a4a820807cbbe8af71db847215b29e5 100644
--- a/vendor/symfony/console/Descriptor/JsonDescriptor.php
+++ b/vendor/symfony/console/Descriptor/JsonDescriptor.php
@@ -92,8 +92,6 @@ protected function describeApplication(Application $application, array $options
 
     /**
      * Writes data as json.
-     *
-     * @return array|string
      */
     private function writeData(array $data, array $options)
     {
diff --git a/vendor/symfony/console/Descriptor/XmlDescriptor.php b/vendor/symfony/console/Descriptor/XmlDescriptor.php
index 0cc0c9901f193378d7e83e225f42c304f6462b7a..2d2545864fcf0488554c2087a0f00ecde68e90f7 100644
--- a/vendor/symfony/console/Descriptor/XmlDescriptor.php
+++ b/vendor/symfony/console/Descriptor/XmlDescriptor.php
@@ -81,7 +81,6 @@ public function getCommandDocument(Command $command)
     }
 
     /**
-     * @param Application $application
      * @param string|null $namespace
      *
      * @return \DOMDocument
@@ -179,8 +178,6 @@ private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent)
 
     /**
      * Writes DOM document.
-     *
-     * @return \DOMDocument|string
      */
     private function writeDocument(\DOMDocument $dom)
     {
diff --git a/vendor/symfony/console/EventListener/ErrorListener.php b/vendor/symfony/console/EventListener/ErrorListener.php
index 212ad1d96ff4f416a6b486da8e374123fb7c194e..783c10793f2c99a485833de75ace7203442cf9d4 100644
--- a/vendor/symfony/console/EventListener/ErrorListener.php
+++ b/vendor/symfony/console/EventListener/ErrorListener.php
@@ -40,7 +40,9 @@ public function onConsoleError(ConsoleErrorEvent $event)
         $error = $event->getError();
 
         if (!$inputString = $this->getInputString($event)) {
-            return $this->logger->error('An error occurred while using the console. Message: "{message}"', ['exception' => $error, 'message' => $error->getMessage()]);
+            $this->logger->error('An error occurred while using the console. Message: "{message}"', ['exception' => $error, 'message' => $error->getMessage()]);
+
+            return;
         }
 
         $this->logger->error('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => $inputString, 'message' => $error->getMessage()]);
@@ -59,7 +61,9 @@ public function onConsoleTerminate(ConsoleTerminateEvent $event)
         }
 
         if (!$inputString = $this->getInputString($event)) {
-            return $this->logger->debug('The console exited with code "{code}"', ['code' => $exitCode]);
+            $this->logger->debug('The console exited with code "{code}"', ['code' => $exitCode]);
+
+            return;
         }
 
         $this->logger->debug('Command "{command}" exited with code "{code}"', ['command' => $inputString, 'code' => $exitCode]);
diff --git a/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/vendor/symfony/console/Formatter/OutputFormatterStyle.php
index b27439a761355e2a42a4b9a877ae29b8d0204e8d..477bd87f0c4aa0ba128bc0dd8c663d8c644f8c65 100644
--- a/vendor/symfony/console/Formatter/OutputFormatterStyle.php
+++ b/vendor/symfony/console/Formatter/OutputFormatterStyle.php
@@ -75,11 +75,7 @@ public function __construct($foreground = null, $background = null, array $optio
     }
 
     /**
-     * Sets style foreground color.
-     *
-     * @param string|null $color The color name
-     *
-     * @throws InvalidArgumentException When the color name isn't defined
+     * {@inheritdoc}
      */
     public function setForeground($color = null)
     {
@@ -97,11 +93,7 @@ public function setForeground($color = null)
     }
 
     /**
-     * Sets style background color.
-     *
-     * @param string|null $color The color name
-     *
-     * @throws InvalidArgumentException When the color name isn't defined
+     * {@inheritdoc}
      */
     public function setBackground($color = null)
     {
@@ -119,11 +111,7 @@ public function setBackground($color = null)
     }
 
     /**
-     * Sets some specific style option.
-     *
-     * @param string $option The option name
-     *
-     * @throws InvalidArgumentException When the option name isn't defined
+     * {@inheritdoc}
      */
     public function setOption($option)
     {
@@ -137,11 +125,7 @@ public function setOption($option)
     }
 
     /**
-     * Unsets some specific style option.
-     *
-     * @param string $option The option name
-     *
-     * @throws InvalidArgumentException When the option name isn't defined
+     * {@inheritdoc}
      */
     public function unsetOption($option)
     {
@@ -168,11 +152,7 @@ public function setOptions(array $options)
     }
 
     /**
-     * Applies the style to a given text.
-     *
-     * @param string $text The text to style
-     *
-     * @return string
+     * {@inheritdoc}
      */
     public function apply($text)
     {
diff --git a/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php
index 4c7dc4134d7237556e68597f25029520c09fceec..af171c27020c91d0c15ebeff568e4c45a47673c9 100644
--- a/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php
+++ b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php
@@ -21,7 +21,7 @@ interface OutputFormatterStyleInterface
     /**
      * Sets style foreground color.
      *
-     * @param string $color The color name
+     * @param string|null $color The color name
      */
     public function setForeground($color = null);
 
diff --git a/vendor/symfony/console/Helper/DescriptorHelper.php b/vendor/symfony/console/Helper/DescriptorHelper.php
index f8a3847b49c6efd790b68eeffd2d19c5f32ba844..3055baefd432bf156ab41ceb6b01d7a8a71e1cd1 100644
--- a/vendor/symfony/console/Helper/DescriptorHelper.php
+++ b/vendor/symfony/console/Helper/DescriptorHelper.php
@@ -48,9 +48,7 @@ public function __construct()
      * * format: string, the output format name
      * * raw_text: boolean, sets output type as raw
      *
-     * @param OutputInterface $output
-     * @param object          $object
-     * @param array           $options
+     * @param object $object
      *
      * @throws InvalidArgumentException when the given format is not supported
      */
@@ -72,8 +70,7 @@ public function describe(OutputInterface $output, $object, array $options = [])
     /**
      * Registers a descriptor.
      *
-     * @param string              $format
-     * @param DescriptorInterface $descriptor
+     * @param string $format
      *
      * @return $this
      */
diff --git a/vendor/symfony/console/Helper/ProgressIndicator.php b/vendor/symfony/console/Helper/ProgressIndicator.php
index 3f5751fae63984fa7846caae6e75026f3b59d254..60ca0213ba51275dac6d8f763e713fda73ced168 100644
--- a/vendor/symfony/console/Helper/ProgressIndicator.php
+++ b/vendor/symfony/console/Helper/ProgressIndicator.php
@@ -34,10 +34,9 @@ class ProgressIndicator
     private static $formats;
 
     /**
-     * @param OutputInterface $output
-     * @param string|null     $format                  Indicator format
-     * @param int             $indicatorChangeInterval Change interval in milliseconds
-     * @param array|null      $indicatorValues         Animated indicator characters
+     * @param string|null $format                  Indicator format
+     * @param int         $indicatorChangeInterval Change interval in milliseconds
+     * @param array|null  $indicatorValues         Animated indicator characters
      */
     public function __construct(OutputInterface $output, $format = null, $indicatorChangeInterval = 100, $indicatorValues = null)
     {
diff --git a/vendor/symfony/console/Helper/QuestionHelper.php b/vendor/symfony/console/Helper/QuestionHelper.php
index 2d910f435611590613d48f40e198327bd6544644..1f93c06451630a0ebab0ec8c87fcd2002a819c62 100644
--- a/vendor/symfony/console/Helper/QuestionHelper.php
+++ b/vendor/symfony/console/Helper/QuestionHelper.php
@@ -21,6 +21,7 @@
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Question\ChoiceQuestion;
 use Symfony\Component\Console\Question\Question;
+use Symfony\Component\Console\Terminal;
 
 /**
  * The QuestionHelper class provides helpers to interact with the user.
@@ -157,7 +158,7 @@ private function doAsk(OutputInterface $output, Question $question)
         $inputStream = $this->inputStream ?: STDIN;
         $autocomplete = $question->getAutocompleterValues();
 
-        if (null === $autocomplete || !$this->hasSttyAvailable()) {
+        if (null === $autocomplete || !Terminal::hasSttyAvailable()) {
             $ret = false;
             if ($question->isHidden()) {
                 try {
@@ -230,10 +231,7 @@ protected function writeError(OutputInterface $output, \Exception $error)
     /**
      * Autocompletes a question.
      *
-     * @param OutputInterface $output
-     * @param Question        $question
-     * @param resource        $inputStream
-     * @param array           $autocomplete
+     * @param resource $inputStream
      *
      * @return string
      */
@@ -266,7 +264,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu
             } elseif ("\177" === $c) { // Backspace Character
                 if (0 === $numMatches && 0 !== $i) {
                     --$i;
-                    $fullChoice = substr($fullChoice, 0, -1);
+                    $fullChoice = self::substr($fullChoice, 0, $i);
                     // Move cursor backwards
                     $output->write("\033[1D");
                 }
@@ -280,7 +278,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu
                 }
 
                 // Pop the last character off the end of our string
-                $ret = substr($ret, 0, $i);
+                $ret = self::substr($ret, 0, $i);
             } elseif ("\033" === $c) {
                 // Did we read an escape sequence?
                 $c .= fread($inputStream, 2);
@@ -306,7 +304,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu
                         $remainingCharacters = substr($ret, \strlen(trim($this->mostRecentlyEnteredValue($fullChoice))));
                         $output->write($remainingCharacters);
                         $fullChoice .= $remainingCharacters;
-                        $i = \strlen($fullChoice);
+                        $i = self::strlen($fullChoice);
                     }
 
                     if ("\n" === $c) {
@@ -412,7 +410,7 @@ private function getHiddenResponse(OutputInterface $output, $inputStream)
             return $value;
         }
 
-        if ($this->hasSttyAvailable()) {
+        if (Terminal::hasSttyAvailable()) {
             $sttyMode = shell_exec('stty -g');
 
             shell_exec('stty -echo');
@@ -498,20 +496,4 @@ private function getShell()
 
         return self::$shell;
     }
-
-    /**
-     * Returns whether Stty is available or not.
-     *
-     * @return bool
-     */
-    private function hasSttyAvailable()
-    {
-        if (null !== self::$stty) {
-            return self::$stty;
-        }
-
-        exec('stty 2>&1', $output, $exitcode);
-
-        return self::$stty = 0 === $exitcode;
-    }
 }
diff --git a/vendor/symfony/console/Helper/Table.php b/vendor/symfony/console/Helper/Table.php
index 1c439dc1bfe981a83c3cf61cbeeaeb10d3bf23c9..0f3d673586ac8d3e561539aad4dfee4241a4e064 100644
--- a/vendor/symfony/console/Helper/Table.php
+++ b/vendor/symfony/console/Helper/Table.php
@@ -193,8 +193,6 @@ public function setColumnWidth($columnIndex, $width)
     /**
      * Sets the minimum width of all columns.
      *
-     * @param array $widths
-     *
      * @return $this
      */
     public function setColumnWidths(array $widths)
@@ -341,7 +339,6 @@ private function renderColumnSeparator()
      *
      *     | 9971-5-0210-0 | A Tale of Two Cities  | Charles Dickens  |
      *
-     * @param array  $row
      * @param string $cellFormat
      */
     private function renderRow(array $row, $cellFormat)
@@ -361,7 +358,6 @@ private function renderRow(array $row, $cellFormat)
     /**
      * Renders table cell with padding.
      *
-     * @param array  $row
      * @param int    $column
      * @param string $cellFormat
      */
@@ -453,8 +449,7 @@ private function buildTableRows($rows)
     /**
      * fill rows that contains rowspan > 1.
      *
-     * @param array $rows
-     * @param int   $line
+     * @param int $line
      *
      * @return array
      *
@@ -533,8 +528,7 @@ private function fillCells($row)
     }
 
     /**
-     * @param array $rows
-     * @param int   $line
+     * @param int $line
      *
      * @return array
      */
@@ -629,8 +623,7 @@ private function getColumnSeparatorWidth()
     /**
      * Gets cell width.
      *
-     * @param array $row
-     * @param int   $column
+     * @param int $column
      *
      * @return int
      */
diff --git a/vendor/symfony/console/Helper/TableCell.php b/vendor/symfony/console/Helper/TableCell.php
index cc5145329c188e869fecdf7fee23120baa2a849e..78e5d6975517a269a7cbc6998637443ab9024b7d 100644
--- a/vendor/symfony/console/Helper/TableCell.php
+++ b/vendor/symfony/console/Helper/TableCell.php
@@ -26,7 +26,6 @@ class TableCell
 
     /**
      * @param string $value
-     * @param array  $options
      */
     public function __construct($value = '', array $options = [])
     {
diff --git a/vendor/symfony/console/Input/ArgvInput.php b/vendor/symfony/console/Input/ArgvInput.php
index f604057ec02551dfe25686c373083907a7252753..b0c167d6905fa009d0262f6849fe7a28aafd3935 100644
--- a/vendor/symfony/console/Input/ArgvInput.php
+++ b/vendor/symfony/console/Input/ArgvInput.php
@@ -148,7 +148,7 @@ private function parseLongOption($token)
         if (false !== $pos = strpos($name, '=')) {
             if (0 === \strlen($value = substr($name, $pos + 1))) {
                 // if no value after "=" then substr() returns "" since php7 only, false before
-                // see http://php.net/manual/fr/migration70.incompatible.php#119151
+                // see https://php.net/migration70.incompatible.php#119151
                 if (\PHP_VERSION_ID < 70000 && false === $value) {
                     $value = '';
                 }
@@ -288,6 +288,8 @@ public function getFirstArgument()
 
             return $token;
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/console/Input/ArrayInput.php b/vendor/symfony/console/Input/ArrayInput.php
index 44c2f0d5c66aac7f1a5393ea3dce70fdaa304c20..b2ebc7c2258e2a7adcac3d8be9b22d00ed757f53 100644
--- a/vendor/symfony/console/Input/ArrayInput.php
+++ b/vendor/symfony/console/Input/ArrayInput.php
@@ -39,13 +39,15 @@ public function __construct(array $parameters, InputDefinition $definition = nul
      */
     public function getFirstArgument()
     {
-        foreach ($this->parameters as $key => $value) {
-            if ($key && '-' === $key[0]) {
+        foreach ($this->parameters as $param => $value) {
+            if ($param && \is_string($param) && '-' === $param[0]) {
                 continue;
             }
 
             return $value;
         }
+
+        return null;
     }
 
     /**
@@ -105,7 +107,7 @@ public function __toString()
     {
         $params = [];
         foreach ($this->parameters as $param => $val) {
-            if ($param && '-' === $param[0]) {
+            if ($param && \is_string($param) && '-' === $param[0]) {
                 if (\is_array($val)) {
                     foreach ($val as $v) {
                         $params[] = $param.('' != $v ? '='.$this->escapeToken($v) : '');
@@ -132,7 +134,7 @@ protected function parse()
             }
             if (0 === strpos($key, '--')) {
                 $this->addLongOption(substr($key, 2), $value);
-            } elseif ('-' === $key[0]) {
+            } elseif (0 === strpos($key, '-')) {
                 $this->addShortOption(substr($key, 1), $value);
             } else {
                 $this->addArgument($key, $value);
diff --git a/vendor/symfony/console/Logger/ConsoleLogger.php b/vendor/symfony/console/Logger/ConsoleLogger.php
index e531bb1ca56ce8c6db2a8c2c2c9dd3513c2091e7..6b1745e458c220a9fce0d32a5de058681ac4babc 100644
--- a/vendor/symfony/console/Logger/ConsoleLogger.php
+++ b/vendor/symfony/console/Logger/ConsoleLogger.php
@@ -22,7 +22,7 @@
  *
  * @author Kévin Dunglas <dunglas@gmail.com>
  *
- * @see http://www.php-fig.org/psr/psr-3/
+ * @see https://www.php-fig.org/psr/psr-3/
  */
 class ConsoleLogger extends AbstractLogger
 {
@@ -101,7 +101,6 @@ public function hasErrored()
      * @author PHP Framework Interoperability Group
      *
      * @param string $message
-     * @param array  $context
      *
      * @return string
      */
diff --git a/vendor/symfony/console/Question/ChoiceQuestion.php b/vendor/symfony/console/Question/ChoiceQuestion.php
index 5cb5056903e43d7a786da65dd2219ff8eb5c5dcc..3dca1600493389c180af9fa8272d06c1b264f12a 100644
--- a/vendor/symfony/console/Question/ChoiceQuestion.php
+++ b/vendor/symfony/console/Question/ChoiceQuestion.php
@@ -134,17 +134,15 @@ private function getDefaultValidator()
         $isAssoc = $this->isAssoc($choices);
 
         return function ($selected) use ($choices, $errorMessage, $multiselect, $isAssoc) {
-            // Collapse all spaces.
-            $selectedChoices = str_replace(' ', '', $selected);
-
             if ($multiselect) {
                 // Check for a separated comma values
-                if (!preg_match('/^[^,]+(?:,[^,]+)*$/', $selectedChoices, $matches)) {
+                if (!preg_match('/^[^,]+(?:,[^,]+)*$/', $selected, $matches)) {
                     throw new InvalidArgumentException(sprintf($errorMessage, $selected));
                 }
-                $selectedChoices = explode(',', $selectedChoices);
+
+                $selectedChoices = array_map('trim', explode(',', $selected));
             } else {
-                $selectedChoices = [$selected];
+                $selectedChoices = [trim($selected)];
             }
 
             $multiselectChoices = [];
diff --git a/vendor/symfony/console/Question/Question.php b/vendor/symfony/console/Question/Question.php
index 92b9b69362913c11a15e40298ab8ecfb68f17516..06464e135bae048e8f85e5a8da7ff4273ac3c779 100644
--- a/vendor/symfony/console/Question/Question.php
+++ b/vendor/symfony/console/Question/Question.php
@@ -156,8 +156,6 @@ public function setAutocompleterValues($values)
     /**
      * Sets a validator for the question.
      *
-     * @param callable|null $validator
-     *
      * @return $this
      */
     public function setValidator(callable $validator = null)
@@ -216,8 +214,6 @@ public function getMaxAttempts()
      *
      * The normalizer can be a callable (a string), a closure or a class implementing __invoke.
      *
-     * @param callable $normalizer
-     *
      * @return $this
      */
     public function setNormalizer(callable $normalizer)
@@ -232,7 +228,7 @@ public function setNormalizer(callable $normalizer)
      *
      * The normalizer can ba a callable (a string), a closure or a class implementing __invoke.
      *
-     * @return callable
+     * @return callable|null
      */
     public function getNormalizer()
     {
diff --git a/vendor/symfony/console/Style/StyleInterface.php b/vendor/symfony/console/Style/StyleInterface.php
index 475c268ffe40381df6a72915c0c9214a9b532acd..3b5b8af5161068a6860779d8c95ad175a4a42ff5 100644
--- a/vendor/symfony/console/Style/StyleInterface.php
+++ b/vendor/symfony/console/Style/StyleInterface.php
@@ -119,7 +119,6 @@ public function confirm($question, $default = true);
      * Asks a choice question.
      *
      * @param string          $question
-     * @param array           $choices
      * @param string|int|null $default
      *
      * @return mixed
diff --git a/vendor/symfony/console/Style/SymfonyStyle.php b/vendor/symfony/console/Style/SymfonyStyle.php
index e0ced01b22744593d8d9898c86aff72233ad174a..4291ada8f6cd69d74c1e043ea02f28a9340e5631 100644
--- a/vendor/symfony/console/Style/SymfonyStyle.php
+++ b/vendor/symfony/console/Style/SymfonyStyle.php
@@ -355,7 +355,9 @@ private function autoPrependBlock()
         $chars = substr(str_replace(PHP_EOL, "\n", $this->bufferedOutput->fetch()), -2);
 
         if (!isset($chars[0])) {
-            return $this->newLine(); //empty history, so we should start with a new line.
+            $this->newLine(); //empty history, so we should start with a new line.
+
+            return;
         }
         //Prepend new line for each non LF chars (This means no blank line was output before)
         $this->newLine(2 - substr_count($chars, "\n"));
diff --git a/vendor/symfony/console/Terminal.php b/vendor/symfony/console/Terminal.php
index 456cca11ca8a6ca02b3301890961698d7b1a491f..43a31826270bc1ecd9975863bb32f3b68586f319 100644
--- a/vendor/symfony/console/Terminal.php
+++ b/vendor/symfony/console/Terminal.php
@@ -15,6 +15,7 @@ class Terminal
 {
     private static $width;
     private static $height;
+    private static $stty;
 
     /**
      * Gets the terminal width.
@@ -54,6 +55,22 @@ public function getHeight()
         return self::$height ?: 50;
     }
 
+    /**
+     * @internal
+     *
+     * @return bool
+     */
+    public static function hasSttyAvailable()
+    {
+        if (null !== self::$stty) {
+            return self::$stty;
+        }
+
+        exec('stty 2>&1', $output, $exitcode);
+
+        return self::$stty = 0 === $exitcode;
+    }
+
     private static function initDimensions()
     {
         if ('\\' === \DIRECTORY_SEPARATOR) {
@@ -62,12 +79,34 @@ private static function initDimensions()
                 // or [w, h] from "wxh"
                 self::$width = (int) $matches[1];
                 self::$height = isset($matches[4]) ? (int) $matches[4] : (int) $matches[2];
+            } elseif (!self::hasVt100Support() && self::hasSttyAvailable()) {
+                // only use stty on Windows if the terminal does not support vt100 (e.g. Windows 7 + git-bash)
+                // testing for stty in a Windows 10 vt100-enabled console will implicitly disable vt100 support on STDOUT
+                self::initDimensionsUsingStty();
             } elseif (null !== $dimensions = self::getConsoleMode()) {
                 // extract [w, h] from "wxh"
                 self::$width = (int) $dimensions[0];
                 self::$height = (int) $dimensions[1];
             }
-        } elseif ($sttyString = self::getSttyColumns()) {
+        } else {
+            self::initDimensionsUsingStty();
+        }
+    }
+
+    /**
+     * Returns whether STDOUT has vt100 support (some Windows 10+ configurations).
+     */
+    private static function hasVt100Support()
+    {
+        return \function_exists('sapi_windows_vt100_support') && sapi_windows_vt100_support(fopen('php://stdout', 'w'));
+    }
+
+    /**
+     * Initializes dimensions using the output of an stty columns line.
+     */
+    private static function initDimensionsUsingStty()
+    {
+        if ($sttyString = self::getSttyColumns()) {
             if (preg_match('/rows.(\d+);.columns.(\d+);/i', $sttyString, $matches)) {
                 // extract [w, h] from "rows h; columns w;"
                 self::$width = (int) $matches[2];
@@ -87,25 +126,13 @@ private static function initDimensions()
      */
     private static function getConsoleMode()
     {
-        if (!\function_exists('proc_open')) {
-            return;
-        }
+        $info = self::readFromProcess('mode CON');
 
-        $descriptorspec = [
-            1 => ['pipe', 'w'],
-            2 => ['pipe', 'w'],
-        ];
-        $process = proc_open('mode CON', $descriptorspec, $pipes, null, null, ['suppress_errors' => true]);
-        if (\is_resource($process)) {
-            $info = stream_get_contents($pipes[1]);
-            fclose($pipes[1]);
-            fclose($pipes[2]);
-            proc_close($process);
-
-            if (preg_match('/--------+\r?\n.+?(\d+)\r?\n.+?(\d+)\r?\n/', $info, $matches)) {
-                return [(int) $matches[2], (int) $matches[1]];
-            }
+        if (null === $info || !preg_match('/--------+\r?\n.+?(\d+)\r?\n.+?(\d+)\r?\n/', $info, $matches)) {
+            return null;
         }
+
+        return [(int) $matches[2], (int) $matches[1]];
     }
 
     /**
@@ -114,9 +141,19 @@ private static function getConsoleMode()
      * @return string|null
      */
     private static function getSttyColumns()
+    {
+        return self::readFromProcess('stty -a | grep columns');
+    }
+
+    /**
+     * @param string $command
+     *
+     * @return string|null
+     */
+    private static function readFromProcess($command)
     {
         if (!\function_exists('proc_open')) {
-            return;
+            return null;
         }
 
         $descriptorspec = [
@@ -124,14 +161,16 @@ private static function getSttyColumns()
             2 => ['pipe', 'w'],
         ];
 
-        $process = proc_open('stty -a | grep columns', $descriptorspec, $pipes, null, null, ['suppress_errors' => true]);
-        if (\is_resource($process)) {
-            $info = stream_get_contents($pipes[1]);
-            fclose($pipes[1]);
-            fclose($pipes[2]);
-            proc_close($process);
-
-            return $info;
+        $process = proc_open($command, $descriptorspec, $pipes, null, null, ['suppress_errors' => true]);
+        if (!\is_resource($process)) {
+            return null;
         }
+
+        $info = stream_get_contents($pipes[1]);
+        fclose($pipes[1]);
+        fclose($pipes[2]);
+        proc_close($process);
+
+        return $info;
     }
 }
diff --git a/vendor/symfony/console/Tests/ApplicationTest.php b/vendor/symfony/console/Tests/ApplicationTest.php
index 181e82593db7664fbb7a154dadcc43440d6c1941..1ef2ed3d78d7a2e9adbe1eb2e50232736425f692 100644
--- a/vendor/symfony/console/Tests/ApplicationTest.php
+++ b/vendor/symfony/console/Tests/ApplicationTest.php
@@ -74,6 +74,7 @@ public static function setUpBeforeClass()
         require_once self::$fixturesPath.'/FooSubnamespaced2Command.php';
         require_once self::$fixturesPath.'/TestAmbiguousCommandRegistering.php';
         require_once self::$fixturesPath.'/TestAmbiguousCommandRegistering2.php';
+        require_once self::$fixturesPath.'/FooHiddenCommand.php';
     }
 
     protected function normalizeLineBreaks($text)
@@ -171,6 +172,7 @@ public function testRegisterAmbiguous()
         };
 
         $application = new Application();
+        $application->setAutoExit(false);
         $application
             ->register('test-foo')
             ->setAliases(['test'])
@@ -182,7 +184,7 @@ public function testRegisterAmbiguous()
 
         $tester = new ApplicationTester($application);
         $tester->run(['test']);
-        $this->assertContains('It works!', $tester->getDisplay(true));
+        $this->assertStringContainsString('It works!', $tester->getDisplay(true));
     }
 
     public function testAdd()
@@ -198,12 +200,10 @@ public function testAdd()
         $this->assertEquals([$foo, $foo1], [$commands['foo:bar'], $commands['foo:bar1']], '->addCommands() registers an array of commands');
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Command class "Foo5Command" is not correctly initialized. You probably forgot to call the parent constructor.
-     */
     public function testAddCommandWithEmptyConstructor()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Command class "Foo5Command" is not correctly initialized. You probably forgot to call the parent constructor.');
         $application = new Application();
         $application->add(new \Foo5Command());
     }
@@ -266,12 +266,10 @@ public function testSilentHelp()
         $this->assertEmpty($tester->getDisplay(true));
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\CommandNotFoundException
-     * @expectedExceptionMessage The command "foofoo" does not exist.
-     */
     public function testGetInvalidCommand()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage('The command "foofoo" does not exist.');
         $application = new Application();
         $application->get('foofoo');
     }
@@ -311,12 +309,8 @@ public function testFindAmbiguousNamespace()
 
         $expectedMsg = "The namespace \"f\" is ambiguous.\nDid you mean one of these?\n    foo\n    foo1";
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException(CommandNotFoundException::class);
-            $this->expectExceptionMessage($expectedMsg);
-        } else {
-            $this->setExpectedException(CommandNotFoundException::class, $expectedMsg);
-        }
+        $this->expectException(CommandNotFoundException::class);
+        $this->expectExceptionMessage($expectedMsg);
 
         $application->findNamespace('f');
     }
@@ -329,22 +323,18 @@ public function testFindNonAmbiguous()
         $this->assertEquals('test-ambiguous', $application->find('test')->getName());
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\CommandNotFoundException
-     * @expectedExceptionMessage There are no commands defined in the "bar" namespace.
-     */
     public function testFindInvalidNamespace()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage('There are no commands defined in the "bar" namespace.');
         $application = new Application();
         $application->findNamespace('bar');
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\CommandNotFoundException
-     * @expectedExceptionMessage Command "foo1" is not defined
-     */
     public function testFindUniqueNameButNamespaceName()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage('Command "foo1" is not defined');
         $application = new Application();
         $application->add(new \FooCommand());
         $application->add(new \Foo1Command());
@@ -387,12 +377,10 @@ public function testFindCaseInsensitiveAsFallback()
         $this->assertInstanceOf('FooSameCaseLowercaseCommand', $application->find('FoO:BaR'), '->find() will fallback to case insensitivity');
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\CommandNotFoundException
-     * @expectedExceptionMessage Command "FoO:BaR" is ambiguous
-     */
     public function testFindCaseInsensitiveSuggestions()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage('Command "FoO:BaR" is ambiguous');
         $application = new Application();
         $application->add(new \FooSameCaseLowercaseCommand());
         $application->add(new \FooSameCaseUppercaseCommand());
@@ -420,12 +408,8 @@ public function testFindWithCommandLoader()
     public function testFindWithAmbiguousAbbreviations($abbreviation, $expectedExceptionMessage)
     {
         putenv('COLUMNS=120');
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
-            $this->expectExceptionMessage($expectedExceptionMessage);
-        } else {
-            $this->setExpectedException('Symfony\Component\Console\Exception\CommandNotFoundException', $expectedExceptionMessage);
-        }
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage($expectedExceptionMessage);
 
         $application = new Application();
         $application->add(new \FooCommand());
@@ -484,12 +468,12 @@ public function testFindCommandWithMissingNamespace()
     }
 
     /**
-     * @dataProvider             provideInvalidCommandNamesSingle
-     * @expectedException        \Symfony\Component\Console\Exception\CommandNotFoundException
-     * @expectedExceptionMessage Did you mean this
+     * @dataProvider provideInvalidCommandNamesSingle
      */
     public function testFindAlternativeExceptionMessageSingle($name)
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage('Did you mean this');
         $application = new Application();
         $application->add(new \Foo3Command());
         $application->find($name);
@@ -537,7 +521,7 @@ public function testFindAlternativeExceptionMessageMultiple()
 
         // Subnamespace + plural
         try {
-            $a = $application->find('foo3:');
+            $application->find('foo3:');
             $this->fail('->find() should throw an Symfony\Component\Console\Exception\CommandNotFoundException if a command is ambiguous because of a subnamespace, with alternatives');
         } catch (\Exception $e) {
             $this->assertInstanceOf('Symfony\Component\Console\Exception\CommandNotFoundException', $e);
@@ -633,6 +617,7 @@ public function testFindAlternativesOutput()
         $application->add(new \Foo1Command());
         $application->add(new \Foo2Command());
         $application->add(new \Foo3Command());
+        $application->add(new \FooHiddenCommand());
 
         $expectedAlternatives = [
             'afoobar',
@@ -665,12 +650,10 @@ public function testFindNamespaceDoesNotFailOnDeepSimilarNamespaces()
         $this->assertEquals('foo:sublong', $application->findNamespace('f:sub'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
-     * @expectedExceptionMessage Command "foo::bar" is not defined.
-     */
     public function testFindWithDoubleColonInNameThrowsException()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
+        $this->expectExceptionMessage('Command "foo::bar" is not defined.');
         $application = new Application();
         $application->add(new \FooCommand());
         $application->add(new \Foo4Command());
@@ -724,7 +707,7 @@ public function testRenderException()
         $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception1.txt', $tester->getErrorOutput(true), '->renderException() renders a pretty exception');
 
         $tester->run(['command' => 'foo'], ['decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE, 'capture_stderr_separately' => true]);
-        $this->assertContains('Exception trace', $tester->getErrorOutput(), '->renderException() renders a pretty exception with a stack trace when verbosity is verbose');
+        $this->assertStringContainsString('Exception trace', $tester->getErrorOutput(), '->renderException() renders a pretty exception with a stack trace when verbosity is verbose');
 
         $tester->run(['command' => 'list', '--foo' => true], ['decorated' => false, 'capture_stderr_separately' => true]);
         $this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception2.txt', $tester->getErrorOutput(true), '->renderException() renders the command synopsis when an exception occurs in the context of a command');
@@ -825,7 +808,7 @@ public function testRenderExceptionStackTraceContainsRootException()
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'foo'], ['decorated' => false, 'verbosity' => Output::VERBOSITY_VERBOSE]);
 
-        $this->assertContains(sprintf('() at %s:', __FILE__), $tester->getDisplay());
+        $this->assertStringContainsString(sprintf('() at %s:', __FILE__), $tester->getDisplay());
     }
 
     public function testRun()
@@ -1040,12 +1023,10 @@ public function testRunDispatchesExitCodeOneForExceptionCodeZero()
         $this->assertTrue($passedRightValue, '-> exit code 1 was passed in the console.terminate event');
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage An option with shortcut "e" already exists.
-     */
     public function testAddingOptionWithDuplicateShortcut()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('An option with shortcut "e" already exists.');
         $dispatcher = new EventDispatcher();
         $application = new Application();
         $application->setAutoExit(false);
@@ -1068,11 +1049,11 @@ public function testAddingOptionWithDuplicateShortcut()
     }
 
     /**
-     * @expectedException \LogicException
      * @dataProvider getAddingAlreadySetDefinitionElementData
      */
     public function testAddingAlreadySetDefinitionElementData($def)
     {
+        $this->expectException('LogicException');
         $application = new Application();
         $application->setAutoExit(false);
         $application->setCatchExceptions(false);
@@ -1221,12 +1202,10 @@ public function testRunWithDispatcher()
         $this->assertEquals('before.foo.after.'.PHP_EOL, $tester->getDisplay());
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage error
-     */
     public function testRunWithExceptionAndDispatcher()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('error');
         $application = new Application();
         $application->setDispatcher($this->getDispatcher());
         $application->setAutoExit(false);
@@ -1254,7 +1233,7 @@ public function testRunDispatchesAllEventsWithException()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'foo']);
-        $this->assertContains('before.foo.error.after.', $tester->getDisplay());
+        $this->assertStringContainsString('before.foo.error.after.', $tester->getDisplay());
     }
 
     public function testRunDispatchesAllEventsWithExceptionInListener()
@@ -1274,7 +1253,7 @@ public function testRunDispatchesAllEventsWithExceptionInListener()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'foo']);
-        $this->assertContains('before.error.after.', $tester->getDisplay());
+        $this->assertStringContainsString('before.error.after.', $tester->getDisplay());
     }
 
     /**
@@ -1325,7 +1304,7 @@ public function testRunAllowsErrorListenersToSilenceTheException()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'foo']);
-        $this->assertContains('before.error.silenced.after.', $tester->getDisplay());
+        $this->assertStringContainsString('before.error.silenced.after.', $tester->getDisplay());
         $this->assertEquals(ConsoleCommandEvent::RETURN_CODE_DISABLED, $tester->getStatusCode());
     }
 
@@ -1344,7 +1323,7 @@ public function testConsoleErrorEventIsTriggeredOnCommandNotFound()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'unknown']);
-        $this->assertContains('silenced command not found', $tester->getDisplay());
+        $this->assertStringContainsString('silenced command not found', $tester->getDisplay());
         $this->assertEquals(1, $tester->getStatusCode());
     }
 
@@ -1371,8 +1350,8 @@ public function testLegacyExceptionListenersAreStillTriggered()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'foo']);
-        $this->assertContains('before.caught.error.after.', $tester->getDisplay());
-        $this->assertContains('replaced in caught.', $tester->getDisplay());
+        $this->assertStringContainsString('before.caught.error.after.', $tester->getDisplay());
+        $this->assertStringContainsString('replaced in caught.', $tester->getDisplay());
     }
 
     /**
@@ -1401,11 +1380,11 @@ public function testErrorIsRethrownIfNotHandledByConsoleErrorEvent()
 
     /**
      * @requires PHP 7
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage error
      */
     public function testRunWithErrorAndDispatcher()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('error');
         $application = new Application();
         $application->setDispatcher($this->getDispatcher());
         $application->setAutoExit(false);
@@ -1419,7 +1398,7 @@ public function testRunWithErrorAndDispatcher()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'dym']);
-        $this->assertContains('before.dym.error.after.', $tester->getDisplay(), 'The PHP Error did not dispached events');
+        $this->assertStringContainsString('before.dym.error.after.', $tester->getDisplay(), 'The PHP Error did not dispached events');
     }
 
     /**
@@ -1439,7 +1418,7 @@ public function testRunDispatchesAllEventsWithError()
 
         $tester = new ApplicationTester($application);
         $tester->run(['command' => 'dym']);
-        $this->assertContains('before.dym.error.after.', $tester->getDisplay(), 'The PHP Error did not dispached events');
+        $this->assertStringContainsString('before.dym.error.after.', $tester->getDisplay(), 'The PHP Error did not dispached events');
     }
 
     /**
@@ -1474,7 +1453,7 @@ public function testRunWithDispatcherSkippingCommand()
 
         $tester = new ApplicationTester($application);
         $exitCode = $tester->run(['command' => 'foo']);
-        $this->assertContains('before.after.', $tester->getDisplay());
+        $this->assertStringContainsString('before.after.', $tester->getDisplay());
         $this->assertEquals(ConsoleCommandEvent::RETURN_CODE_DISABLED, $exitCode);
     }
 
@@ -1602,27 +1581,10 @@ public function testSetRunCustomSingleCommand()
         $tester = new ApplicationTester($application);
 
         $tester->run([]);
-        $this->assertContains('called', $tester->getDisplay());
+        $this->assertStringContainsString('called', $tester->getDisplay());
 
         $tester->run(['--help' => true]);
-        $this->assertContains('The foo:bar command', $tester->getDisplay());
-    }
-
-    /**
-     * @requires function posix_isatty
-     */
-    public function testCanCheckIfTerminalIsInteractive()
-    {
-        $application = new CustomDefaultCommandApplication();
-        $application->setAutoExit(false);
-
-        $tester = new ApplicationTester($application);
-        $tester->run(['command' => 'help']);
-
-        $this->assertFalse($tester->getInput()->hasParameterOption(['--no-interaction', '-n']));
-
-        $inputStream = $tester->getInput()->getStream();
-        $this->assertEquals($tester->getInput()->isInteractive(), @posix_isatty($inputStream));
+        $this->assertStringContainsString('The foo:bar command', $tester->getDisplay());
     }
 
     public function testRunLazyCommandService()
@@ -1655,11 +1617,9 @@ public function testRunLazyCommandService()
         $this->assertSame(['lazy:alias', 'lazy:alias2'], $command->getAliases());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
-     */
     public function testGetDisabledLazyCommand()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
         $application = new Application();
         $application->setCommandLoader(new FactoryCommandLoader(['disabled' => function () { return new DisabledCommand(); }]));
         $application->get('disabled');
diff --git a/vendor/symfony/console/Tests/Command/CommandTest.php b/vendor/symfony/console/Tests/Command/CommandTest.php
index 9a135d325590a770d25fd502f6c57f756ac01cc9..207302fdf99296e76f8686615dfb95f029e85adb 100644
--- a/vendor/symfony/console/Tests/Command/CommandTest.php
+++ b/vendor/symfony/console/Tests/Command/CommandTest.php
@@ -40,12 +40,10 @@ public function testConstructor()
         $this->assertEquals('foo:bar', $command->getName(), '__construct() takes the command name as its first argument');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage The command defined in "Symfony\Component\Console\Command\Command" cannot have an empty name.
-     */
     public function testCommandNameCannotBeEmpty()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('The command defined in "Symfony\Component\Console\Command\Command" cannot have an empty name.');
         (new Application())->add(new Command());
     }
 
@@ -117,12 +115,8 @@ public function testGetNamespaceGetNameSetName()
      */
     public function testInvalidCommandNames($name)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('InvalidArgumentException');
-            $this->expectExceptionMessage(sprintf('Command name "%s" is invalid.', $name));
-        } else {
-            $this->setExpectedException('InvalidArgumentException', sprintf('Command name "%s" is invalid.', $name));
-        }
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage(sprintf('Command name "%s" is invalid.', $name));
 
         $command = new \TestCommand();
         $command->setName($name);
@@ -160,20 +154,20 @@ public function testGetProcessedHelp()
     {
         $command = new \TestCommand();
         $command->setHelp('The %command.name% command does... Example: php %command.full_name%.');
-        $this->assertContains('The namespace:name command does...', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.name% correctly');
-        $this->assertNotContains('%command.full_name%', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.full_name%');
+        $this->assertStringContainsString('The namespace:name command does...', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.name% correctly');
+        $this->assertStringNotContainsString('%command.full_name%', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.full_name%');
 
         $command = new \TestCommand();
         $command->setHelp('');
-        $this->assertContains('description', $command->getProcessedHelp(), '->getProcessedHelp() falls back to the description');
+        $this->assertStringContainsString('description', $command->getProcessedHelp(), '->getProcessedHelp() falls back to the description');
 
         $command = new \TestCommand();
         $command->setHelp('The %command.name% command does... Example: php %command.full_name%.');
         $application = new Application();
         $application->add($command);
         $application->setDefaultCommand('namespace:name', true);
-        $this->assertContains('The namespace:name command does...', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.name% correctly in single command applications');
-        $this->assertNotContains('%command.full_name%', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.full_name% in single command applications');
+        $this->assertStringContainsString('The namespace:name command does...', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.name% correctly in single command applications');
+        $this->assertStringNotContainsString('%command.full_name%', $command->getProcessedHelp(), '->getProcessedHelp() replaces %command.full_name% in single command applications');
     }
 
     public function testGetSetAliases()
@@ -188,7 +182,7 @@ public function testGetSetAliases()
     public function testSetAliasesNull()
     {
         $command = new \TestCommand();
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $this->expectException('InvalidArgumentException');
         $command->setAliases(null);
     }
 
@@ -218,12 +212,10 @@ public function testGetHelper()
         $this->assertEquals($formatterHelper->getName(), $command->getHelper('formatter')->getName(), '->getHelper() returns the correct helper');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage Cannot retrieve helper "formatter" because there is no HelperSet defined.
-     */
     public function testGetHelperWithoutHelperSet()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Cannot retrieve helper "formatter" because there is no HelperSet defined.');
         $command = new \TestCommand();
         $command->getHelper('formatter');
     }
@@ -291,22 +283,18 @@ public function testRunNonInteractive()
         $this->assertEquals('execute called'.PHP_EOL, $tester->getDisplay(), '->run() does not call the interact() method if the input is not interactive');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage You must override the execute() method in the concrete command class.
-     */
     public function testExecuteMethodNeedsToBeOverridden()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('You must override the execute() method in the concrete command class.');
         $command = new Command('foo');
         $command->run(new StringInput(''), new NullOutput());
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\InvalidOptionException
-     * @expectedExceptionMessage The "--bar" option does not exist.
-     */
     public function testRunWithInvalidOption()
     {
+        $this->expectException('Symfony\Component\Console\Exception\InvalidOptionException');
+        $this->expectExceptionMessage('The "--bar" option does not exist.');
         $command = new \TestCommand();
         $tester = new CommandTester($command);
         $tester->execute(['--bar' => true]);
diff --git a/vendor/symfony/console/Tests/Command/HelpCommandTest.php b/vendor/symfony/console/Tests/Command/HelpCommandTest.php
index ce9d8d4fe4ccbc4c450a29050ec3fb0e0a987379..5b25550a6d8ec43f47b0272b42007c907eb9b8e2 100644
--- a/vendor/symfony/console/Tests/Command/HelpCommandTest.php
+++ b/vendor/symfony/console/Tests/Command/HelpCommandTest.php
@@ -25,9 +25,9 @@ public function testExecuteForCommandAlias()
         $command->setApplication(new Application());
         $commandTester = new CommandTester($command);
         $commandTester->execute(['command_name' => 'li'], ['decorated' => false]);
-        $this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
-        $this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
-        $this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
+        $this->assertStringContainsString('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
+        $this->assertStringContainsString('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
+        $this->assertStringContainsString('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command alias');
     }
 
     public function testExecuteForCommand()
@@ -36,9 +36,9 @@ public function testExecuteForCommand()
         $commandTester = new CommandTester($command);
         $command->setCommand(new ListCommand());
         $commandTester->execute([], ['decorated' => false]);
-        $this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
-        $this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
-        $this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
     }
 
     public function testExecuteForCommandWithXmlOption()
@@ -47,7 +47,7 @@ public function testExecuteForCommandWithXmlOption()
         $commandTester = new CommandTester($command);
         $command->setCommand(new ListCommand());
         $commandTester->execute(['--format' => 'xml']);
-        $this->assertContains('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --xml is passed');
+        $this->assertStringContainsString('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --xml is passed');
     }
 
     public function testExecuteForApplicationCommand()
@@ -55,9 +55,9 @@ public function testExecuteForApplicationCommand()
         $application = new Application();
         $commandTester = new CommandTester($application->get('help'));
         $commandTester->execute(['command_name' => 'list']);
-        $this->assertContains('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
-        $this->assertContains('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
-        $this->assertContains('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('list [options] [--] [<namespace>]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('format=FORMAT', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('raw', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
     }
 
     public function testExecuteForApplicationCommandWithXmlOption()
@@ -65,7 +65,7 @@ public function testExecuteForApplicationCommandWithXmlOption()
         $application = new Application();
         $commandTester = new CommandTester($application->get('help'));
         $commandTester->execute(['command_name' => 'list', '--format' => 'xml']);
-        $this->assertContains('list [--raw] [--format FORMAT] [--] [&lt;namespace&gt;]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
-        $this->assertContains('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --format=xml is passed');
+        $this->assertStringContainsString('list [--raw] [--format FORMAT] [--] [&lt;namespace&gt;]', $commandTester->getDisplay(), '->execute() returns a text help for the given command');
+        $this->assertStringContainsString('<command', $commandTester->getDisplay(), '->execute() returns an XML help text if --format=xml is passed');
     }
 }
diff --git a/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php b/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php
index 18d6e77bfba4298ad99d7549118488caaee68c23..50fe125a64b08368250789ecd812406c5f3551d9 100644
--- a/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php
+++ b/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php
@@ -41,11 +41,9 @@ public function testGet()
         $this->assertInstanceOf(Command::class, $loader->get('bar'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
-     */
     public function testGetUnknownCommandThrows()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
         (new ContainerCommandLoader(new ServiceLocator([]), []))->get('unknown');
     }
 
diff --git a/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php b/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php
index 7b9ec837e624f874934db6474435b5e4cb8c4680..a37ad18de1daaa5e60910deb18ca7d78744ce066 100644
--- a/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php
+++ b/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php
@@ -40,11 +40,9 @@ public function testGet()
         $this->assertInstanceOf(Command::class, $loader->get('bar'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
-     */
     public function testGetUnknownCommandThrows()
     {
+        $this->expectException('Symfony\Component\Console\Exception\CommandNotFoundException');
         (new FactoryCommandLoader([]))->get('unknown');
     }
 
diff --git a/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php b/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php
index b97d0a8f91998c1efee9e8a2266098aff3eb5d05..1f8ae58e71c77cc559e891cbe73b933f143f87fd 100644
--- a/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php
+++ b/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php
@@ -121,12 +121,10 @@ public function visibilityProvider()
         ];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The service "my-command" tagged "console.command" must not be abstract.
-     */
     public function testProcessThrowAnExceptionIfTheServiceIsAbstract()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The service "my-command" tagged "console.command" must not be abstract.');
         $container = new ContainerBuilder();
         $container->setResourceTracking(false);
         $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
@@ -139,12 +137,10 @@ public function testProcessThrowAnExceptionIfTheServiceIsAbstract()
         $container->compile();
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The service "my-command" tagged "console.command" must be a subclass of "Symfony\Component\Console\Command\Command".
-     */
     public function testProcessThrowAnExceptionIfTheServiceIsNotASubclassOfCommand()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The service "my-command" tagged "console.command" must be a subclass of "Symfony\Component\Console\Command\Command".');
         $container = new ContainerBuilder();
         $container->setResourceTracking(false);
         $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
@@ -227,12 +223,10 @@ public function testProcessOnChildDefinitionWithParentClass()
         $this->assertInstanceOf($className, $command);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage The definition for "my-child-command" has no class.
-     */
     public function testProcessOnChildDefinitionWithoutClass()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('The definition for "my-child-command" has no class.');
         $container = new ContainerBuilder();
         $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING);
 
diff --git a/vendor/symfony/console/Tests/Descriptor/ApplicationDescriptionTest.php b/vendor/symfony/console/Tests/Descriptor/ApplicationDescriptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..33d5c3840f3e3255de15f37f7047026bab1520b1
--- /dev/null
+++ b/vendor/symfony/console/Tests/Descriptor/ApplicationDescriptionTest.php
@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Descriptor;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Console\Application;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Descriptor\ApplicationDescription;
+
+final class ApplicationDescriptionTest extends TestCase
+{
+    /**
+     * @dataProvider getNamespacesProvider
+     */
+    public function testGetNamespaces(array $expected, array $names)
+    {
+        $application = new TestApplication();
+        foreach ($names as $name) {
+            $application->add(new Command($name));
+        }
+
+        $this->assertSame($expected, array_keys((new ApplicationDescription($application))->getNamespaces()));
+    }
+
+    public function getNamespacesProvider()
+    {
+        return [
+            [['_global'], ['foobar']],
+            [['a', 'b'], ['b:foo', 'a:foo', 'b:bar']],
+            [['_global', 'b', 'z', 22, 33], ['z:foo', '1', '33:foo', 'b:foo', '22:foo:bar']],
+        ];
+    }
+}
+
+final class TestApplication extends Application
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function getDefaultCommands()
+    {
+        return [];
+    }
+}
diff --git a/vendor/symfony/console/Tests/Fixtures/FooHiddenCommand.php b/vendor/symfony/console/Tests/Fixtures/FooHiddenCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..75fbf7804ddc3ca965b7b61c74143b96f676234f
--- /dev/null
+++ b/vendor/symfony/console/Tests/Fixtures/FooHiddenCommand.php
@@ -0,0 +1,21 @@
+<?php
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class FooHiddenCommand extends Command
+{
+    protected function configure()
+    {
+        $this
+            ->setName('foo:hidden')
+            ->setAliases(['afoohidden'])
+            ->setHidden(true)
+        ;
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+    }
+}
diff --git a/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php b/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php
index e212bf25ec4c0e0e0e7a81fbcad765faafcd6494..d3020432efec7458cbf2884a1f861e4029a528fa 100644
--- a/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php
+++ b/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php
@@ -59,11 +59,9 @@ public function testPopNotLast()
         $this->assertEquals($s1, $stack->pop());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testInvalidPop()
     {
+        $this->expectException('InvalidArgumentException');
         $stack = new OutputFormatterStyleStack();
         $stack->push(new OutputFormatterStyle('white', 'black'));
         $stack->pop(new OutputFormatterStyle('yellow', 'blue'));
diff --git a/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php b/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
index d47760fe4e3e7a93a0fa2591ba22f99120f69219..4fe79805c567f1f545a47dd9d17400a3b124efc1 100644
--- a/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
+++ b/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php
@@ -41,7 +41,7 @@ public function testForeground()
         $style->setForeground('default');
         $this->assertEquals("\033[39mfoo\033[39m", $style->apply('foo'));
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $this->expectException('InvalidArgumentException');
         $style->setForeground('undefined-color');
     }
 
@@ -58,7 +58,7 @@ public function testBackground()
         $style->setBackground('default');
         $this->assertEquals("\033[49mfoo\033[49m", $style->apply('foo'));
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $this->expectException('InvalidArgumentException');
         $style->setBackground('undefined-color');
     }
 
@@ -86,7 +86,7 @@ public function testOptions()
             $this->fail('->setOption() throws an \InvalidArgumentException when the option does not exist in the available options');
         } catch (\Exception $e) {
             $this->assertInstanceOf('\InvalidArgumentException', $e, '->setOption() throws an \InvalidArgumentException when the option does not exist in the available options');
-            $this->assertContains('Invalid option specified: "foo"', $e->getMessage(), '->setOption() throws an \InvalidArgumentException when the option does not exist in the available options');
+            $this->assertStringContainsString('Invalid option specified: "foo"', $e->getMessage(), '->setOption() throws an \InvalidArgumentException when the option does not exist in the available options');
         }
 
         try {
@@ -94,7 +94,7 @@ public function testOptions()
             $this->fail('->unsetOption() throws an \InvalidArgumentException when the option does not exist in the available options');
         } catch (\Exception $e) {
             $this->assertInstanceOf('\InvalidArgumentException', $e, '->unsetOption() throws an \InvalidArgumentException when the option does not exist in the available options');
-            $this->assertContains('Invalid option specified: "foo"', $e->getMessage(), '->unsetOption() throws an \InvalidArgumentException when the option does not exist in the available options');
+            $this->assertStringContainsString('Invalid option specified: "foo"', $e->getMessage(), '->unsetOption() throws an \InvalidArgumentException when the option does not exist in the available options');
         }
     }
 }
diff --git a/vendor/symfony/console/Tests/Helper/HelperSetTest.php b/vendor/symfony/console/Tests/Helper/HelperSetTest.php
index ffb12b3421f9a7f8a56e4bf9662377cdca376da5..d608f7bfd2395087caf53155b046eb270c6dd37a 100644
--- a/vendor/symfony/console/Tests/Helper/HelperSetTest.php
+++ b/vendor/symfony/console/Tests/Helper/HelperSetTest.php
@@ -68,7 +68,7 @@ public function testGet()
         } catch (\Exception $e) {
             $this->assertInstanceOf('\InvalidArgumentException', $e, '->get() throws InvalidArgumentException when helper not found');
             $this->assertInstanceOf('Symfony\Component\Console\Exception\ExceptionInterface', $e, '->get() throws domain specific exception when helper not found');
-            $this->assertContains('The helper "foo" is not defined.', $e->getMessage(), '->get() throws InvalidArgumentException when helper not found');
+            $this->assertStringContainsString('The helper "foo" is not defined.', $e->getMessage(), '->get() throws InvalidArgumentException when helper not found');
         }
     }
 
diff --git a/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php b/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php
index 6c6f86f36e3f99dfa5214e10ba54a9f7d7d2f564..1428cf5e97a5f216255a17dc9651676b669ce198 100644
--- a/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php
+++ b/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php
@@ -100,42 +100,34 @@ public function testCustomIndicatorValues()
         );
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Must have at least 2 indicator value characters.
-     */
     public function testCannotSetInvalidIndicatorCharacters()
     {
-        $bar = new ProgressIndicator($this->getOutputStream(), null, 100, ['1']);
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('Must have at least 2 indicator value characters.');
+        new ProgressIndicator($this->getOutputStream(), null, 100, ['1']);
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Progress indicator already started.
-     */
     public function testCannotStartAlreadyStartedIndicator()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Progress indicator already started.');
         $bar = new ProgressIndicator($this->getOutputStream());
         $bar->start('Starting...');
         $bar->start('Starting Again.');
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Progress indicator has not yet been started.
-     */
     public function testCannotAdvanceUnstartedIndicator()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Progress indicator has not yet been started.');
         $bar = new ProgressIndicator($this->getOutputStream());
         $bar->advance();
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Progress indicator has not yet been started.
-     */
     public function testCannotFinishUnstartedIndicator()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Progress indicator has not yet been started.');
         $bar = new ProgressIndicator($this->getOutputStream());
         $bar->finish('Finished');
     }
diff --git a/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php b/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
index 53819e4be70ed3abd923dc5215e87f76cf552dad..d2afee42ffa261ef4beac1f3e44fcd131ef5d8a7 100644
--- a/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
+++ b/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php
@@ -19,6 +19,7 @@
 use Symfony\Component\Console\Question\ChoiceQuestion;
 use Symfony\Component\Console\Question\ConfirmationQuestion;
 use Symfony\Component\Console\Question\Question;
+use Symfony\Component\Console\Terminal;
 
 /**
  * @group tty
@@ -53,7 +54,7 @@ public function testAskChoice()
 
         rewind($output->getStream());
         $stream = stream_get_contents($output->getStream());
-        $this->assertContains('Input "Fabien" is not a superhero!', $stream);
+        $this->assertStringContainsString('Input "Fabien" is not a superhero!', $stream);
 
         try {
             $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '1');
@@ -167,26 +168,27 @@ public function testAsk()
 
     public function testAskWithAutocomplete()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
         // Acm<NEWLINE>
         // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
         // <NEWLINE>
-        // <UP ARROW><UP ARROW><NEWLINE>
-        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
+        // <UP ARROW><UP ARROW><UP ARROW><NEWLINE>
+        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
         // <DOWN ARROW><NEWLINE>
         // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE>
         // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE>
-        $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
+        // F⭐<TAB><BACKSPACE><BACKSPACE>⭐<TAB><NEWLINE>
+        $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\nF⭐\t\177\177⭐\t\n");
 
         $dialog = new QuestionHelper();
         $helperSet = new HelperSet([new FormatterHelper()]);
         $dialog->setHelperSet($helperSet);
 
         $question = new Question('Please select a bundle', 'FrameworkBundle');
-        $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle']);
+        $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle', 'F⭐Y']);
 
         $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
         $this->assertEquals('AsseticBundleTest', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
@@ -196,11 +198,12 @@ public function testAskWithAutocomplete()
         $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
         $this->assertEquals('AsseticBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
         $this->assertEquals('FooBundle', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
+        $this->assertEquals('F⭐Y', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
     }
 
     public function testAskWithAutocompleteWithNonSequentialKeys()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
@@ -219,7 +222,7 @@ public function testAskWithAutocompleteWithNonSequentialKeys()
 
     public function testAskWithAutocompleteWithExactMatch()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
@@ -255,7 +258,7 @@ public function getInputs()
      */
     public function testAskWithAutocompleteWithMultiByteCharacter($character)
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
@@ -279,7 +282,7 @@ public function testAskWithAutocompleteWithMultiByteCharacter($character)
 
     public function testAutocompleteWithTrailingBackslash()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
@@ -518,12 +521,10 @@ public function testSelectChoiceFromChoiceList($providedAnswer, $expectedValue)
         $this->assertSame($expectedValue, $answer);
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The provided answer is ambiguous. Value should be one of env_2 or env_3.
-     */
     public function testAmbiguousChoiceFromChoicelist()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The provided answer is ambiguous. Value should be one of env_2 or env_3.');
         $possibleChoices = [
             'env_1' => 'My first environment',
             'env_2' => 'My environment',
@@ -618,7 +619,7 @@ public function testLegacyAskChoice()
 
         rewind($output->getStream());
         $stream = stream_get_contents($output->getStream());
-        $this->assertContains('Input "Fabien" is not a superhero!', $stream);
+        $this->assertStringContainsString('Input "Fabien" is not a superhero!', $stream);
 
         try {
             $question = new ChoiceQuestion('What is your favorite superhero?', $heroes, '1');
@@ -674,19 +675,20 @@ public function testLegacyAsk()
      */
     public function testLegacyAskWithAutocomplete()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
         // Acm<NEWLINE>
         // Ac<BACKSPACE><BACKSPACE>s<TAB>Test<NEWLINE>
         // <NEWLINE>
-        // <UP ARROW><UP ARROW><NEWLINE>
-        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
+        // <UP ARROW><UP ARROW><UP ARROW><NEWLINE>
+        // <UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><UP ARROW><TAB>Test<NEWLINE>
         // <DOWN ARROW><NEWLINE>
         // S<BACKSPACE><BACKSPACE><DOWN ARROW><DOWN ARROW><NEWLINE>
         // F00<BACKSPACE><BACKSPACE>oo<TAB><NEWLINE>
-        $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\n");
+        // F⭐<TAB><BACKSPACE><BACKSPACE>⭐<TAB><NEWLINE>
+        $inputStream = $this->getInputStream("Acm\nAc\177\177s\tTest\n\n\033[A\033[A\033[A\n\033[A\033[A\033[A\033[A\033[A\033[A\033[A\tTest\n\033[B\nS\177\177\033[B\033[B\nF00\177\177oo\t\nF⭐\t⭐\t\n");
 
         $dialog = new QuestionHelper();
         $dialog->setInputStream($inputStream);
@@ -694,7 +696,7 @@ public function testLegacyAskWithAutocomplete()
         $dialog->setHelperSet($helperSet);
 
         $question = new Question('Please select a bundle', 'FrameworkBundle');
-        $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle']);
+        $question->setAutocompleterValues(['AcmeDemoBundle', 'AsseticBundle', 'SecurityBundle', 'FooBundle', 'F⭐Y']);
 
         $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
         $this->assertEquals('AsseticBundleTest', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
@@ -704,6 +706,7 @@ public function testLegacyAskWithAutocomplete()
         $this->assertEquals('AcmeDemoBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
         $this->assertEquals('AsseticBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
         $this->assertEquals('FooBundle', $dialog->ask($this->createInputInterfaceMock(), $this->createOutputInterface(), $question));
+        $this->assertEquals('F⭐Y', $dialog->ask($this->createStreamableInputInterfaceMock($inputStream), $this->createOutputInterface(), $question));
     }
 
     /**
@@ -711,7 +714,7 @@ public function testLegacyAskWithAutocomplete()
      */
     public function testLegacyAskWithAutocompleteWithNonSequentialKeys()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
@@ -748,7 +751,7 @@ public function testLegacyAskHiddenResponse()
     }
 
     /**
-     * @group        legacy
+     * @group legacy
      * @dataProvider getAskConfirmationData
      */
     public function testLegacyAskConfirmation($question, $expected, $default = true)
@@ -810,7 +813,7 @@ public function testLegacyAskAndValidate()
     }
 
     /**
-     * @group        legacy
+     * @group legacy
      * @dataProvider simpleAnswerProvider
      */
     public function testLegacySelectChoiceFromSimpleChoices($providedAnswer, $expectedValue)
@@ -834,7 +837,7 @@ public function testLegacySelectChoiceFromSimpleChoices($providedAnswer, $expect
     }
 
     /**
-     * @group        legacy
+     * @group legacy
      * @dataProvider mixedKeysChoiceListAnswerProvider
      */
     public function testLegacyChoiceFromChoicelistWithMixedKeys($providedAnswer, $expectedValue)
@@ -859,7 +862,7 @@ public function testLegacyChoiceFromChoicelistWithMixedKeys($providedAnswer, $ex
     }
 
     /**
-     * @group        legacy
+     * @group legacy
      * @dataProvider answerProvider
      */
     public function testLegacySelectChoiceFromChoiceList($providedAnswer, $expectedValue)
@@ -883,12 +886,12 @@ public function testLegacySelectChoiceFromChoiceList($providedAnswer, $expectedV
     }
 
     /**
-     * @group                    legacy
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The provided answer is ambiguous. Value should be one of env_2 or env_3.
+     * @group legacy
      */
     public function testLegacyAmbiguousChoiceFromChoicelist()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The provided answer is ambiguous. Value should be one of env_2 or env_3.');
         $possibleChoices = [
             'env_1' => 'My first environment',
             'env_2' => 'My environment',
@@ -938,36 +941,30 @@ public function testLegacyChoiceOutputFormattingQuestionForUtf8Keys()
         $dialog->ask($this->createInputInterfaceMock(), $output, $question);
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\RuntimeException
-     * @expectedExceptionMessage Aborted.
-     */
     public function testAskThrowsExceptionOnMissingInput()
     {
+        $this->expectException('Symfony\Component\Console\Exception\RuntimeException');
+        $this->expectExceptionMessage('Aborted.');
         $dialog = new QuestionHelper();
         $dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), new Question('What\'s your name?'));
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\RuntimeException
-     * @expectedExceptionMessage Aborted.
-     */
     public function testAskThrowsExceptionOnMissingInputForChoiceQuestion()
     {
+        $this->expectException('Symfony\Component\Console\Exception\RuntimeException');
+        $this->expectExceptionMessage('Aborted.');
         $dialog = new QuestionHelper();
         $dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), new ChoiceQuestion('Choice', ['a', 'b']));
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\RuntimeException
-     * @expectedExceptionMessage Aborted.
-     */
     public function testAskThrowsExceptionOnMissingInputWithValidator()
     {
+        $this->expectException('Symfony\Component\Console\Exception\RuntimeException');
+        $this->expectExceptionMessage('Aborted.');
         $dialog = new QuestionHelper();
 
         $question = new Question('What\'s your name?');
-        $question->setValidator(function () {
+        $question->setValidator(function ($value) {
             if (!$value) {
                 throw new \Exception('A value is required.');
             }
@@ -976,18 +973,16 @@ public function testAskThrowsExceptionOnMissingInputWithValidator()
         $dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), $question);
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Choice question must have at least 1 choice available.
-     */
     public function testEmptyChoices()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Choice question must have at least 1 choice available.');
         new ChoiceQuestion('Question', [], 'irrelevant');
     }
 
     public function testTraversableAutocomplete()
     {
-        if (!$this->hasSttyAvailable()) {
+        if (!Terminal::hasSttyAvailable()) {
             $this->markTestSkipped('`stty` is required to test autocomplete functionality');
         }
 
@@ -1072,13 +1067,6 @@ protected function createInputInterfaceMock($interactive = true)
 
         return $mock;
     }
-
-    private function hasSttyAvailable()
-    {
-        exec('stty 2>&1', $output, $exitcode);
-
-        return 0 === $exitcode;
-    }
 }
 
 class AutocompleteValues implements \IteratorAggregate
diff --git a/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php b/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php
index 6f621db95448a0a991f5e380a42fe92992414290..cbf3b957b3913d64fcfdd8f89e54035bc5b0bd91 100644
--- a/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php
+++ b/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php
@@ -122,12 +122,10 @@ public function testLabelTrailingBackslash()
         $this->assertOutputContains('Question with a trailing \\', $output);
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Console\Exception\RuntimeException
-     * @expectedExceptionMessage Aborted.
-     */
     public function testAskThrowsExceptionOnMissingInput()
     {
+        $this->expectException('Symfony\Component\Console\Exception\RuntimeException');
+        $this->expectExceptionMessage('Aborted.');
         $dialog = new SymfonyQuestionHelper();
         $dialog->ask($this->createStreamableInputInterfaceMock($this->getInputStream('')), $this->createOutputInterface(), new Question('What\'s your name?'));
     }
@@ -163,6 +161,6 @@ private function assertOutputContains($expected, StreamOutput $output)
     {
         rewind($output->getStream());
         $stream = stream_get_contents($output->getStream());
-        $this->assertContains($expected, $stream);
+        $this->assertStringContainsString($expected, $stream);
     }
 }
diff --git a/vendor/symfony/console/Tests/Helper/TableStyleTest.php b/vendor/symfony/console/Tests/Helper/TableStyleTest.php
index 13e918b3a0fe2365f1a56369aba0a2481acf295b..5980192540c941ebee4062c9ae647d54dd3239f7 100644
--- a/vendor/symfony/console/Tests/Helper/TableStyleTest.php
+++ b/vendor/symfony/console/Tests/Helper/TableStyleTest.php
@@ -16,12 +16,10 @@
 
 class TableStyleTest extends TestCase
 {
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).
-     */
     public function testSetPadTypeWithInvalidType()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).');
         $style = new TableStyle();
         $style->setPadType('TEST');
     }
diff --git a/vendor/symfony/console/Tests/Helper/TableTest.php b/vendor/symfony/console/Tests/Helper/TableTest.php
index d58a5036de83096e07dfbb524aa35797b78457cb..571cf0a6c43f4111a133598988577cb6ae56b686 100644
--- a/vendor/symfony/console/Tests/Helper/TableTest.php
+++ b/vendor/symfony/console/Tests/Helper/TableTest.php
@@ -726,12 +726,10 @@ public function testColumnStyle()
         $this->assertEquals($expected, $this->getOutputContent($output));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\InvalidArgumentException
-     * @expectedExceptionMessage A cell must be a TableCell, a scalar or an object implementing __toString, array given.
-     */
     public function testThrowsWhenTheCellInAnArray()
     {
+        $this->expectException('Symfony\Component\Console\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('A cell must be a TableCell, a scalar or an object implementing __toString, array given.');
         $table = new Table($output = $this->getOutputStream());
         $table
             ->setHeaders(['ISBN', 'Title', 'Author', 'Price'])
@@ -805,22 +803,18 @@ public function testColumnWidths()
         $this->assertEquals($expected, $this->getOutputContent($output));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Style "absent" is not defined.
-     */
     public function testIsNotDefinedStyleException()
     {
+        $this->expectException('Symfony\Component\Console\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Style "absent" is not defined.');
         $table = new Table($this->getOutputStream());
         $table->setStyle('absent');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Console\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Style "absent" is not defined.
-     */
     public function testGetStyleDefinition()
     {
+        $this->expectException('Symfony\Component\Console\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Style "absent" is not defined.');
         Table::getStyleDefinition('absent');
     }
 
diff --git a/vendor/symfony/console/Tests/Input/ArgvInputTest.php b/vendor/symfony/console/Tests/Input/ArgvInputTest.php
index e20bcdd21bc7c9c3c97a8ce3c7bf98597a7d78f6..51cc6e5175396dc33e0e2fd00bf7a1de7917d448 100644
--- a/vendor/symfony/console/Tests/Input/ArgvInputTest.php
+++ b/vendor/symfony/console/Tests/Input/ArgvInputTest.php
@@ -182,12 +182,8 @@ public function provideOptions()
      */
     public function testInvalidInput($argv, $definition, $expectedExceptionMessage)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('RuntimeException');
-            $this->expectExceptionMessage($expectedExceptionMessage);
-        } else {
-            $this->setExpectedException('RuntimeException', $expectedExceptionMessage);
-        }
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage($expectedExceptionMessage);
 
         $input = new ArgvInput($argv);
         $input->bind($definition);
diff --git a/vendor/symfony/console/Tests/Input/ArrayInputTest.php b/vendor/symfony/console/Tests/Input/ArrayInputTest.php
index afe74831e367a1693a77136809992946d6b85c4a..5e10223dd39cdb5c1a5f4e6be835627db5241d7e 100644
--- a/vendor/symfony/console/Tests/Input/ArrayInputTest.php
+++ b/vendor/symfony/console/Tests/Input/ArrayInputTest.php
@@ -127,12 +127,8 @@ public function provideOptions()
      */
     public function testParseInvalidInput($parameters, $definition, $expectedExceptionMessage)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('InvalidArgumentException');
-            $this->expectExceptionMessage($expectedExceptionMessage);
-        } else {
-            $this->setExpectedException('InvalidArgumentException', $expectedExceptionMessage);
-        }
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage($expectedExceptionMessage);
 
         new ArrayInput($parameters, $definition);
     }
diff --git a/vendor/symfony/console/Tests/Input/InputArgumentTest.php b/vendor/symfony/console/Tests/Input/InputArgumentTest.php
index 7561e10abe3629832006aba48b033a735d7ff39c..1fbcf9fc93e6f804a9466fd49e4a7846a2e5895a 100644
--- a/vendor/symfony/console/Tests/Input/InputArgumentTest.php
+++ b/vendor/symfony/console/Tests/Input/InputArgumentTest.php
@@ -42,12 +42,8 @@ public function testModes()
      */
     public function testInvalidModes($mode)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('InvalidArgumentException');
-            $this->expectExceptionMessage(sprintf('Argument mode "%s" is not valid.', $mode));
-        } else {
-            $this->setExpectedException('InvalidArgumentException', sprintf('Argument mode "%s" is not valid.', $mode));
-        }
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage(sprintf('Argument mode "%s" is not valid.', $mode));
 
         new InputArgument('foo', $mode);
     }
@@ -95,22 +91,18 @@ public function testSetDefault()
         $this->assertEquals([1, 2], $argument->getDefault(), '->setDefault() changes the default value');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage Cannot set a default value except for InputArgument::OPTIONAL mode.
-     */
     public function testSetDefaultWithRequiredArgument()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Cannot set a default value except for InputArgument::OPTIONAL mode.');
         $argument = new InputArgument('foo', InputArgument::REQUIRED);
         $argument->setDefault('default');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage A default value for an array argument must be an array.
-     */
     public function testSetDefaultWithArrayArgument()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('A default value for an array argument must be an array.');
         $argument = new InputArgument('foo', InputArgument::IS_ARRAY);
         $argument->setDefault('default');
     }
diff --git a/vendor/symfony/console/Tests/Input/InputDefinitionTest.php b/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
index 5fdcb981c6079f38a927c6e029f66145d2f85f74..4a881f595595208d6ad94d79c0b457fb331e9b15 100644
--- a/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
+++ b/vendor/symfony/console/Tests/Input/InputDefinitionTest.php
@@ -20,6 +20,7 @@ class InputDefinitionTest extends TestCase
 {
     protected static $fixtures;
 
+    protected $multi;
     protected $foo;
     protected $bar;
     protected $foo1;
@@ -86,12 +87,10 @@ public function testAddArgument()
         $this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getArguments(), '->addArgument() adds a InputArgument object');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage An argument with name "foo" already exists.
-     */
     public function testArgumentsMustHaveDifferentNames()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('An argument with name "foo" already exists.');
         $this->initializeArguments();
 
         $definition = new InputDefinition();
@@ -99,12 +98,10 @@ public function testArgumentsMustHaveDifferentNames()
         $definition->addArgument($this->foo1);
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage Cannot add an argument after an array argument.
-     */
     public function testArrayArgumentHasToBeLast()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Cannot add an argument after an array argument.');
         $this->initializeArguments();
 
         $definition = new InputDefinition();
@@ -112,12 +109,10 @@ public function testArrayArgumentHasToBeLast()
         $definition->addArgument(new InputArgument('anotherbar'));
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage Cannot add a required argument after an optional one.
-     */
     public function testRequiredArgumentCannotFollowAnOptionalOne()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Cannot add a required argument after an optional one.');
         $this->initializeArguments();
 
         $definition = new InputDefinition();
@@ -134,12 +129,10 @@ public function testGetArgument()
         $this->assertEquals($this->foo, $definition->getArgument('foo'), '->getArgument() returns a InputArgument by its name');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "bar" argument does not exist.
-     */
     public function testGetInvalidArgument()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "bar" argument does not exist.');
         $this->initializeArguments();
 
         $definition = new InputDefinition();
@@ -206,12 +199,10 @@ public function testSetOptions()
         $this->assertEquals(['bar' => $this->bar], $definition->getOptions(), '->setOptions() clears all InputOption objects');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "-f" option does not exist.
-     */
     public function testSetOptionsClearsOptions()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "-f" option does not exist.');
         $this->initializeOptions();
 
         $definition = new InputDefinition([$this->foo]);
@@ -240,12 +231,10 @@ public function testAddOption()
         $this->assertEquals(['foo' => $this->foo, 'bar' => $this->bar], $definition->getOptions(), '->addOption() adds a InputOption object');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage An option named "foo" already exists.
-     */
     public function testAddDuplicateOption()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('An option named "foo" already exists.');
         $this->initializeOptions();
 
         $definition = new InputDefinition();
@@ -253,12 +242,10 @@ public function testAddDuplicateOption()
         $definition->addOption($this->foo2);
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage An option with shortcut "f" already exists.
-     */
     public function testAddDuplicateShortcutOption()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('An option with shortcut "f" already exists.');
         $this->initializeOptions();
 
         $definition = new InputDefinition();
@@ -274,12 +261,10 @@ public function testGetOption()
         $this->assertEquals($this->foo, $definition->getOption('foo'), '->getOption() returns a InputOption by its name');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "--bar" option does not exist.
-     */
     public function testGetInvalidOption()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "--bar" option does not exist.');
         $this->initializeOptions();
 
         $definition = new InputDefinition([$this->foo]);
@@ -321,12 +306,10 @@ public function testGetOptionForMultiShortcut()
         $this->assertEquals($this->multi, $definition->getOptionForShortcut('mmm'), '->getOptionForShortcut() returns a InputOption by its shortcut');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "-l" option does not exist.
-     */
     public function testGetOptionForInvalidShortcut()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "-l" option does not exist.');
         $this->initializeOptions();
 
         $definition = new InputDefinition([$this->foo]);
diff --git a/vendor/symfony/console/Tests/Input/InputOptionTest.php b/vendor/symfony/console/Tests/Input/InputOptionTest.php
index 413cb5270078fc4b6d8db9487a9a32d8d3da3a06..f7dcbd18f201792f09b18e73278bc5149579577e 100644
--- a/vendor/symfony/console/Tests/Input/InputOptionTest.php
+++ b/vendor/symfony/console/Tests/Input/InputOptionTest.php
@@ -24,12 +24,10 @@ public function testConstructor()
         $this->assertEquals('foo', $option->getName(), '__construct() removes the leading -- of the option name');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.
-     */
     public function testArrayModeWithoutValue()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('Impossible to have an option mode VALUE_IS_ARRAY if the option does not accept a value.');
         new InputOption('foo', 'f', InputOption::VALUE_IS_ARRAY);
     }
 
@@ -78,12 +76,8 @@ public function testModes()
      */
     public function testInvalidModes($mode)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('InvalidArgumentException');
-            $this->expectExceptionMessage(sprintf('Option mode "%s" is not valid.', $mode));
-        } else {
-            $this->setExpectedException('InvalidArgumentException', sprintf('Option mode "%s" is not valid.', $mode));
-        }
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage(sprintf('Option mode "%s" is not valid.', $mode));
 
         new InputOption('foo', 'f', $mode);
     }
@@ -96,27 +90,21 @@ public function provideInvalidModes()
         ];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testEmptyNameIsInvalid()
     {
+        $this->expectException('InvalidArgumentException');
         new InputOption('');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testDoubleDashNameIsInvalid()
     {
+        $this->expectException('InvalidArgumentException');
         new InputOption('--');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testSingleDashOptionIsInvalid()
     {
+        $this->expectException('InvalidArgumentException');
         new InputOption('foo', '-');
     }
 
@@ -165,22 +153,18 @@ public function testSetDefault()
         $this->assertEquals([1, 2], $option->getDefault(), '->setDefault() changes the default value');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage Cannot set a default value when using InputOption::VALUE_NONE mode.
-     */
     public function testDefaultValueWithValueNoneMode()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Cannot set a default value when using InputOption::VALUE_NONE mode.');
         $option = new InputOption('foo', 'f', InputOption::VALUE_NONE);
         $option->setDefault('default');
     }
 
-    /**
-     * @expectedException        \LogicException
-     * @expectedExceptionMessage A default value for an array option must be an array.
-     */
     public function testDefaultValueWithIsArrayMode()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('A default value for an array option must be an array.');
         $option = new InputOption('foo', 'f', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY);
         $option->setDefault('default');
     }
diff --git a/vendor/symfony/console/Tests/Input/InputTest.php b/vendor/symfony/console/Tests/Input/InputTest.php
index 61608bf27cf4dc8b511e050596728f47366416ae..060b750f473bf27554915f50a9a132f895fcfd54 100644
--- a/vendor/symfony/console/Tests/Input/InputTest.php
+++ b/vendor/symfony/console/Tests/Input/InputTest.php
@@ -47,22 +47,18 @@ public function testOptions()
         $this->assertEquals(['name' => 'foo', 'bar' => null], $input->getOptions(), '->getOptions() returns all option values');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "foo" option does not exist.
-     */
     public function testSetInvalidOption()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "foo" option does not exist.');
         $input = new ArrayInput(['--name' => 'foo'], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
         $input->setOption('foo', 'bar');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "foo" option does not exist.
-     */
     public function testGetInvalidOption()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "foo" option does not exist.');
         $input = new ArrayInput(['--name' => 'foo'], new InputDefinition([new InputOption('name'), new InputOption('bar', '', InputOption::VALUE_OPTIONAL, '', 'default')]));
         $input->getOption('foo');
     }
@@ -81,43 +77,35 @@ public function testArguments()
         $this->assertEquals(['name' => 'foo', 'bar' => 'default'], $input->getArguments(), '->getArguments() returns all argument values, even optional ones');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "foo" argument does not exist.
-     */
     public function testSetInvalidArgument()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "foo" argument does not exist.');
         $input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default')]));
         $input->setArgument('foo', 'bar');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The "foo" argument does not exist.
-     */
     public function testGetInvalidArgument()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The "foo" argument does not exist.');
         $input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name'), new InputArgument('bar', InputArgument::OPTIONAL, '', 'default')]));
         $input->getArgument('foo');
     }
 
-    /**
-     * @expectedException        \RuntimeException
-     * @expectedExceptionMessage Not enough arguments (missing: "name").
-     */
     public function testValidateWithMissingArguments()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Not enough arguments (missing: "name").');
         $input = new ArrayInput([]);
         $input->bind(new InputDefinition([new InputArgument('name', InputArgument::REQUIRED)]));
         $input->validate();
     }
 
-    /**
-     * @expectedException        \RuntimeException
-     * @expectedExceptionMessage Not enough arguments (missing: "name").
-     */
     public function testValidateWithMissingRequiredArguments()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Not enough arguments (missing: "name").');
         $input = new ArrayInput(['bar' => 'baz']);
         $input->bind(new InputDefinition([new InputArgument('name', InputArgument::REQUIRED), new InputArgument('bar', InputArgument::OPTIONAL)]));
         $input->validate();
diff --git a/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php b/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php
index c99eb839b7f316d405cc1438e73b735071698be1..f1bbb61c5ff91f6d5d19605a2f66e9d40d77166e 100644
--- a/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php
+++ b/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php
@@ -141,11 +141,9 @@ public function provideLevelsAndMessages()
         ];
     }
 
-    /**
-     * @expectedException \Psr\Log\InvalidArgumentException
-     */
     public function testThrowsOnInvalidLevel()
     {
+        $this->expectException('Psr\Log\InvalidArgumentException');
         $logger = $this->getLogger();
         $logger->log('invalid level', 'Foo');
     }
@@ -164,7 +162,7 @@ public function testObjectCastToString()
         if (method_exists($this, 'createPartialMock')) {
             $dummy = $this->createPartialMock('Symfony\Component\Console\Tests\Logger\DummyTest', ['__toString']);
         } else {
-            $dummy = $this->getMock('Symfony\Component\Console\Tests\Logger\DummyTest', ['__toString']);
+            $dummy = $this->createPartialMock('Symfony\Component\Console\Tests\Logger\DummyTest', ['__toString']);
         }
         $dummy->method('__toString')->willReturn('DUMMY');
 
diff --git a/vendor/symfony/console/Tests/Output/StreamOutputTest.php b/vendor/symfony/console/Tests/Output/StreamOutputTest.php
index 780b5681fa8d20c2b14f70fcccbeb383b14cfad4..d843fa4a4559c8e6cd29436fcbcdeda0a5b2d74f 100644
--- a/vendor/symfony/console/Tests/Output/StreamOutputTest.php
+++ b/vendor/symfony/console/Tests/Output/StreamOutputTest.php
@@ -36,12 +36,10 @@ public function testConstructor()
         $this->assertTrue($output->isDecorated(), '__construct() takes the decorated flag as its second argument');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The StreamOutput class needs a stream as its first argument.
-     */
     public function testStreamIsRequired()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The StreamOutput class needs a stream as its first argument.');
         new StreamOutput('foo');
     }
 
diff --git a/vendor/symfony/console/Tests/Question/ChoiceQuestionTest.php b/vendor/symfony/console/Tests/Question/ChoiceQuestionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ec7a9cacb4de7bf20a0f9ceb4b01841b4c02acb
--- /dev/null
+++ b/vendor/symfony/console/Tests/Question/ChoiceQuestionTest.php
@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Tests\Question;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Console\Question\ChoiceQuestion;
+
+class ChoiceQuestionTest extends TestCase
+{
+    /**
+     * @dataProvider selectUseCases
+     */
+    public function testSelectUseCases($multiSelect, $answers, $expected, $message)
+    {
+        $question = new ChoiceQuestion('A question', [
+            'First response',
+            'Second response',
+            'Third response',
+            'Fourth response',
+        ]);
+
+        $question->setMultiselect($multiSelect);
+
+        foreach ($answers as $answer) {
+            $validator = $question->getValidator();
+            $actual = $validator($answer);
+
+            $this->assertEquals($actual, $expected, $message);
+        }
+    }
+
+    public function selectUseCases()
+    {
+        return [
+            [
+                false,
+                ['First response', 'First response ', ' First response', ' First response '],
+                'First response',
+                'When passed single answer on singleSelect, the defaultValidator must return this answer as a string',
+            ],
+            [
+                true,
+                ['First response', 'First response ', ' First response', ' First response '],
+                ['First response'],
+                'When passed single answer on MultiSelect, the defaultValidator must return this answer as an array',
+            ],
+            [
+                true,
+                ['First response,Second response', ' First response , Second response '],
+                ['First response', 'Second response'],
+                'When passed multiple answers on MultiSelect, the defaultValidator must return these answers as an array',
+            ],
+        ];
+    }
+}
diff --git a/vendor/symfony/console/Tests/TerminalTest.php b/vendor/symfony/console/Tests/TerminalTest.php
index 93b8c44a78158265ce3f207651de56a1cfb2b7c0..546d2214c4c466332b5d294d2709bb788a848fd8 100644
--- a/vendor/symfony/console/Tests/TerminalTest.php
+++ b/vendor/symfony/console/Tests/TerminalTest.php
@@ -18,17 +18,31 @@ class TerminalTest extends TestCase
 {
     private $colSize;
     private $lineSize;
+    private $ansiCon;
 
     protected function setUp()
     {
         $this->colSize = getenv('COLUMNS');
         $this->lineSize = getenv('LINES');
+        $this->ansiCon = getenv('ANSICON');
+        $this->resetStatics();
     }
 
     protected function tearDown()
     {
         putenv($this->colSize ? 'COLUMNS='.$this->colSize : 'COLUMNS');
         putenv($this->lineSize ? 'LINES' : 'LINES='.$this->lineSize);
+        putenv($this->ansiCon ? 'ANSICON='.$this->ansiCon : 'ANSICON');
+        $this->resetStatics();
+    }
+
+    private function resetStatics()
+    {
+        foreach (['height', 'width', 'stty'] as $name) {
+            $property = new \ReflectionProperty(Terminal::class, $name);
+            $property->setAccessible(true);
+            $property->setValue(null);
+        }
     }
 
     public function test()
@@ -56,4 +70,28 @@ public function test_zero_values()
         $this->assertSame(0, $terminal->getWidth());
         $this->assertSame(0, $terminal->getHeight());
     }
+
+    public function testSttyOnWindows()
+    {
+        if ('\\' !== \DIRECTORY_SEPARATOR) {
+            $this->markTestSkipped('Must be on windows');
+        }
+
+        $sttyString = exec('(stty -a | grep columns) 2>&1', $output, $exitcode);
+        if (0 !== $exitcode) {
+            $this->markTestSkipped('Must have stty support');
+        }
+
+        $matches = [];
+        if (0 === preg_match('/columns.(\d+)/i', $sttyString, $matches)) {
+            $this->fail('Could not determine existing stty columns');
+        }
+
+        putenv('COLUMNS');
+        putenv('LINES');
+        putenv('ANSICON');
+
+        $terminal = new Terminal();
+        $this->assertSame((int) $matches[1], $terminal->getWidth());
+    }
 }
diff --git a/vendor/symfony/console/Tests/Tester/CommandTesterTest.php b/vendor/symfony/console/Tests/Tester/CommandTesterTest.php
index f916b1821fcc899c6374534995c97c98162b81aa..1fa8292365b49ca27341b8578e02babf0478f3fb 100644
--- a/vendor/symfony/console/Tests/Tester/CommandTesterTest.php
+++ b/vendor/symfony/console/Tests/Tester/CommandTesterTest.php
@@ -138,12 +138,10 @@ public function testCommandWithDefaultInputs()
         $this->assertEquals(implode('', $questions), $tester->getDisplay(true));
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Aborted.
-     */
     public function testCommandWithWrongInputsNumber()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Aborted.');
         $questions = [
             'What\'s your name?',
             'How are you?',
@@ -165,12 +163,10 @@ public function testCommandWithWrongInputsNumber()
         $tester->execute([]);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Aborted.
-     */
     public function testCommandWithQuestionsButNoInputs()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Aborted.');
         $questions = [
             'What\'s your name?',
             'How are you?',
@@ -200,7 +196,7 @@ public function testSymfonyStyleCommandWithInputs()
         ];
 
         $command = new Command('foo');
-        $command->setCode(function ($input, $output) use ($questions, $command) {
+        $command->setCode(function ($input, $output) use ($questions) {
             $io = new SymfonyStyle($input, $output);
             $io->ask($questions[0]);
             $io->ask($questions[1]);
diff --git a/vendor/symfony/debug/DebugClassLoader.php b/vendor/symfony/debug/DebugClassLoader.php
index 9ceac9af162b03719738b68d64510cbb09744063..b0174187afd06b44db8304b610c9f46a1754cdd5 100644
--- a/vendor/symfony/debug/DebugClassLoader.php
+++ b/vendor/symfony/debug/DebugClassLoader.php
@@ -149,11 +149,11 @@ public function loadClass($class)
                 if (!$file = $this->classLoader[0]->findFile($class) ?: false) {
                     // no-op
                 } elseif (\function_exists('opcache_is_script_cached') && @opcache_is_script_cached($file)) {
-                    require $file;
+                    include $file;
 
                     return;
-                } else {
-                    require $file;
+                } elseif (false === include $file) {
+                    return;
                 }
             } else {
                 \call_user_func($this->classLoader, $class);
@@ -317,6 +317,12 @@ public function checkAnnotations(\ReflectionClass $refl, $class)
         return $deprecations;
     }
 
+    /**
+     * @param string $file
+     * @param string $class
+     *
+     * @return array|null
+     */
     public function checkCase(\ReflectionClass $refl, $file, $class)
     {
         $real = explode('\\', $class.strrchr($file, '.'));
@@ -333,7 +339,7 @@ public function checkCase(\ReflectionClass $refl, $file, $class)
         array_splice($tail, 0, $i + 1);
 
         if (!$tail) {
-            return;
+            return null;
         }
 
         $tail = \DIRECTORY_SEPARATOR.implode(\DIRECTORY_SEPARATOR, $tail);
@@ -349,6 +355,8 @@ public function checkCase(\ReflectionClass $refl, $file, $class)
         ) {
             return [substr($tail, -$tailLen + 1), substr($real, -$tailLen + 1), substr($real, 0, -$tailLen + 1)];
         }
+
+        return null;
     }
 
     /**
@@ -396,7 +404,7 @@ private function darwinRealpath($real)
         }
 
         if (isset($dirFiles[$file])) {
-            return $real .= $dirFiles[$file];
+            return $real.$dirFiles[$file];
         }
 
         $kFile = strtolower($file);
@@ -415,7 +423,7 @@ private function darwinRealpath($real)
             self::$darwinCache[$kDir][1] = $dirFiles;
         }
 
-        return $real .= $dirFiles[$kFile];
+        return $real.$dirFiles[$kFile];
     }
 
     /**
diff --git a/vendor/symfony/debug/ErrorHandler.php b/vendor/symfony/debug/ErrorHandler.php
index c7dc3279d73afee891007a25f50e40be3550cfa2..1b39fab5ca4018fcd254087efd249d0213467eb4 100644
--- a/vendor/symfony/debug/ErrorHandler.php
+++ b/vendor/symfony/debug/ErrorHandler.php
@@ -382,8 +382,7 @@ private function reRegister($prev)
      */
     public function handleError($type, $message, $file, $line)
     {
-        // @deprecated to be removed in Symfony 5.0
-        if (\PHP_VERSION_ID >= 70300 && $message && '"' === $message[0] && 0 === strpos($message, '"continue') && preg_match('/^"continue(?: \d++)?" targeting switch is equivalent to "break(?: \d++)?"\. Did you mean to use "continue(?: \d++)?"\?$/', $message)) {
+        if (\PHP_VERSION_ID >= 70300 && E_WARNING === $type && '"' === $message[0] && false !== strpos($message, '" targeting switch is equivalent to "break')) {
             $type = E_DEPRECATED;
         }
 
@@ -450,7 +449,7 @@ public function handleError($type, $message, $file, $line)
                 self::$silencedErrorCache[$id][$message] = $errorAsException;
             }
             if (null === $lightTrace) {
-                return;
+                return true;
             }
         } else {
             if ($scope) {
@@ -470,7 +469,7 @@ public function handleError($type, $message, $file, $line)
         }
 
         if ($throw) {
-            if (E_USER_ERROR & $type) {
+            if (\PHP_VERSION_ID < 70400 && E_USER_ERROR & $type) {
                 for ($i = 1; isset($backtrace[$i]); ++$i) {
                     if (isset($backtrace[$i]['function'], $backtrace[$i]['type'], $backtrace[$i - 1]['function'])
                         && '__toString' === $backtrace[$i]['function']
@@ -599,7 +598,9 @@ public function handleException($exception, array $error = null)
         $this->exceptionHandler = null;
         try {
             if (null !== $exceptionHandler) {
-                return \call_user_func($exceptionHandler, $exception);
+                $exceptionHandler($exception);
+
+                return;
             }
             $handlerException = $handlerException ?: $exception;
         } catch (\Exception $handlerException) {
diff --git a/vendor/symfony/debug/Exception/SilencedErrorContext.php b/vendor/symfony/debug/Exception/SilencedErrorContext.php
index f862b74f45d7f6f97453b6ba4b91cc0cab6a63c7..2bacfd5c9b0df68e954e1f0c6737e9c27eee3e54 100644
--- a/vendor/symfony/debug/Exception/SilencedErrorContext.php
+++ b/vendor/symfony/debug/Exception/SilencedErrorContext.php
@@ -54,7 +54,7 @@ public function getTrace()
         return $this->trace;
     }
 
-    public function JsonSerialize()
+    public function jsonSerialize()
     {
         return [
             'severity' => $this->severity,
diff --git a/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php b/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
index 45dcc00d5cb67ff31edfcc4009125ba93e9e6501..9bae6f86566fb90cebb7b49c9b201c165e371930 100644
--- a/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
+++ b/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php
@@ -33,11 +33,11 @@ public function handleError(array $error, FatalErrorException $exception)
         $notFoundSuffix = '\' not found';
         $notFoundSuffixLen = \strlen($notFoundSuffix);
         if ($notFoundSuffixLen > $messageLen) {
-            return;
+            return null;
         }
 
         if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
-            return;
+            return null;
         }
 
         foreach (['class', 'interface', 'trait'] as $typeName) {
@@ -71,6 +71,8 @@ public function handleError(array $error, FatalErrorException $exception)
 
             return new ClassNotFoundException($message, $exception);
         }
+
+        return null;
     }
 
     /**
@@ -196,6 +198,8 @@ private function convertFileToClass($path, $file, $prefix)
                 return $candidate;
             }
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php b/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
index 9eddeba5a64a30963c46c2243a88676067e5b41a..77fc7aa26132996cf95385aafdd824e7c009bd01 100644
--- a/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
+++ b/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
@@ -30,17 +30,17 @@ public function handleError(array $error, FatalErrorException $exception)
         $notFoundSuffix = '()';
         $notFoundSuffixLen = \strlen($notFoundSuffix);
         if ($notFoundSuffixLen > $messageLen) {
-            return;
+            return null;
         }
 
         if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
-            return;
+            return null;
         }
 
         $prefix = 'Call to undefined function ';
         $prefixLen = \strlen($prefix);
         if (0 !== strpos($error['message'], $prefix)) {
-            return;
+            return null;
         }
 
         $fullyQualifiedFunctionName = substr($error['message'], $prefixLen, -$notFoundSuffixLen);
diff --git a/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php b/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php
index 1318cb13baf8cc905772352b9510e198a59ce85c..ff2843b6811f2af90b159a1887983912f387f917 100644
--- a/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php
+++ b/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php
@@ -28,7 +28,7 @@ public function handleError(array $error, FatalErrorException $exception)
     {
         preg_match('/^Call to undefined method (.*)::(.*)\(\)$/', $error['message'], $matches);
         if (!$matches) {
-            return;
+            return null;
         }
 
         $className = $matches[1];
diff --git a/vendor/symfony/debug/Tests/DebugClassLoaderTest.php b/vendor/symfony/debug/Tests/DebugClassLoaderTest.php
index c6bc3f7d88b5e3717b21621d126b25bc2bab40ca..0388acba029ba38cd116fab6bf2c23270c219173 100644
--- a/vendor/symfony/debug/Tests/DebugClassLoaderTest.php
+++ b/vendor/symfony/debug/Tests/DebugClassLoaderTest.php
@@ -59,12 +59,10 @@ public function testIdempotence()
         $this->fail('DebugClassLoader did not register');
     }
 
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage boo
-     */
     public function testThrowingClass()
     {
+        $this->expectException('Exception');
+        $this->expectExceptionMessage('boo');
         try {
             class_exists(__NAMESPACE__.'\Fixtures\Throwing');
             $this->fail('Exception expected');
@@ -139,21 +137,17 @@ class ChildTestingStacking extends TestingStacking { function foo($bar) {} }
         }
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Case mismatch between loaded and declared class names
-     */
     public function testNameCaseMismatch()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Case mismatch between loaded and declared class names');
         class_exists(__NAMESPACE__.'\TestingCaseMismatch', true);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Case mismatch between class and real file names
-     */
     public function testFileCaseMismatch()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Case mismatch between class and real file names');
         if (!file_exists(__DIR__.'/Fixtures/CaseMismatch.php')) {
             $this->markTestSkipped('Can only be run on case insensitive filesystems');
         }
@@ -161,12 +155,10 @@ public function testFileCaseMismatch()
         class_exists(__NAMESPACE__.'\Fixtures\CaseMismatch', true);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Case mismatch between loaded and declared class names
-     */
     public function testPsr4CaseMismatch()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Case mismatch between loaded and declared class names');
         class_exists(__NAMESPACE__.'\Fixtures\Psr4CaseMismatch', true);
     }
 
@@ -447,5 +439,7 @@ public function internalMethod() { }
         } elseif ('Test\\'.__NAMESPACE__.'\UseTraitWithInternalMethod' === $class) {
             eval('namespace Test\\'.__NAMESPACE__.'; class UseTraitWithInternalMethod { use \\'.__NAMESPACE__.'\Fixtures\TraitWithInternalMethod; }');
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/debug/Tests/ErrorHandlerTest.php b/vendor/symfony/debug/Tests/ErrorHandlerTest.php
index bb82c63328b19ee05b68b7115b4066436ffd17a0..2cf75a0e8e322ed64bcccac5fe6268f8812b34af 100644
--- a/vendor/symfony/debug/Tests/ErrorHandlerTest.php
+++ b/vendor/symfony/debug/Tests/ErrorHandlerTest.php
@@ -70,8 +70,8 @@ public function testRegister()
 
     public function testErrorGetLast()
     {
-        $handler = ErrorHandler::register();
         $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
+        $handler = ErrorHandler::register();
         $handler->setDefaultLogger($logger);
         $handler->screamAt(E_ALL);
 
@@ -143,9 +143,8 @@ public function testConstruct()
     public function testDefaultLogger()
     {
         try {
-            $handler = ErrorHandler::register();
-
             $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
+            $handler = ErrorHandler::register();
 
             $handler->setDefaultLogger($logger, E_NOTICE);
             $handler->setDefaultLogger($logger, [E_USER_NOTICE => LogLevel::CRITICAL]);
@@ -284,6 +283,10 @@ public function testHandleError()
 
     public function testHandleUserError()
     {
+        if (\PHP_VERSION_ID >= 70400) {
+            $this->markTestSkipped('PHP 7.4 allows __toString to throw exceptions');
+        }
+
         try {
             $handler = ErrorHandler::register();
             $handler->throwAt(0, true);
@@ -334,12 +337,11 @@ public function testHandleDeprecation()
     public function testHandleException()
     {
         try {
+            $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
             $handler = ErrorHandler::register();
 
             $exception = new \Exception('foo');
 
-            $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
-
             $logArgCheck = function ($level, $message, $context) {
                 $this->assertSame('Uncaught Exception: foo', $message);
                 $this->assertArrayHasKey('exception', $context);
@@ -483,6 +485,7 @@ public function testSettingLoggerWhenExceptionIsBuffered()
     public function testHandleFatalError()
     {
         try {
+            $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
             $handler = ErrorHandler::register();
 
             $error = [
@@ -492,8 +495,6 @@ public function testHandleFatalError()
                 'line' => 123,
             ];
 
-            $logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
-
             $logArgCheck = function ($level, $message, $context) {
                 $this->assertEquals('Fatal Parse Error: foo', $message);
                 $this->assertArrayHasKey('exception', $context);
@@ -576,11 +577,11 @@ public function testHandleFatalErrorOnHHVM()
     }
 
     /**
-     * @expectedException \Exception
      * @group no-hhvm
      */
     public function testCustomExceptionHandler()
     {
+        $this->expectException('Exception');
         $handler = new ErrorHandler();
         $handler->setExceptionHandler(function ($e) use ($handler) {
             $handler->handleException($e);
diff --git a/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php b/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php
index f755a78cfcb5280c4ac7f467c04b35bbbc627051..0290b05bad48423c1e5d78d2b53854a1263584c8 100644
--- a/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php
+++ b/vendor/symfony/debug/Tests/Exception/FlattenExceptionTest.php
@@ -256,7 +256,7 @@ function () {},
 
         // assertEquals() does not like NAN values.
         $this->assertEquals($array[$i][0], 'float');
-        $this->assertTrue(is_nan($array[$i++][1]));
+        $this->assertNan($array[$i][1]);
     }
 
     public function testRecursionInArguments()
@@ -267,7 +267,7 @@ public function testRecursionInArguments()
 
         $flattened = FlattenException::create($exception);
         $trace = $flattened->getTrace();
-        $this->assertContains('*DEEP NESTED ARRAY*', serialize($trace));
+        $this->assertStringContainsString('*DEEP NESTED ARRAY*', serialize($trace));
     }
 
     public function testTooBigArray()
@@ -291,8 +291,8 @@ public function testTooBigArray()
 
         $serializeTrace = serialize($trace);
 
-        $this->assertContains('*SKIPPED over 10000 entries*', $serializeTrace);
-        $this->assertNotContains('*value1*', $serializeTrace);
+        $this->assertStringContainsString('*SKIPPED over 10000 entries*', $serializeTrace);
+        $this->assertStringNotContainsString('*value1*', $serializeTrace);
     }
 
     private function createException($foo)
diff --git a/vendor/symfony/debug/Tests/ExceptionHandlerTest.php b/vendor/symfony/debug/Tests/ExceptionHandlerTest.php
index e166136cbbed4ce6efce9e85002278ba5bd232d0..7a029e06fef24a465c0f59b9e62d29b35fa52529 100644
--- a/vendor/symfony/debug/Tests/ExceptionHandlerTest.php
+++ b/vendor/symfony/debug/Tests/ExceptionHandlerTest.php
@@ -39,8 +39,8 @@ public function testDebug()
         $handler->sendPhpResponse(new \RuntimeException('Foo'));
         $response = ob_get_clean();
 
-        $this->assertContains('Whoops, looks like something went wrong.', $response);
-        $this->assertNotContains('<div class="trace trace-as-html">', $response);
+        $this->assertStringContainsString('Whoops, looks like something went wrong.', $response);
+        $this->assertStringNotContainsString('<div class="trace trace-as-html">', $response);
 
         $handler = new ExceptionHandler(true);
 
@@ -48,8 +48,8 @@ public function testDebug()
         $handler->sendPhpResponse(new \RuntimeException('Foo'));
         $response = ob_get_clean();
 
-        $this->assertContains('Whoops, looks like something went wrong.', $response);
-        $this->assertContains('<div class="trace trace-as-html">', $response);
+        $this->assertStringContainsString('Whoops, looks like something went wrong.', $response);
+        $this->assertStringContainsString('<div class="trace trace-as-html">', $response);
     }
 
     public function testStatusCode()
@@ -60,7 +60,7 @@ public function testStatusCode()
         $handler->sendPhpResponse(new NotFoundHttpException('Foo'));
         $response = ob_get_clean();
 
-        $this->assertContains('Sorry, the page you are looking for could not be found.', $response);
+        $this->assertStringContainsString('Sorry, the page you are looking for could not be found.', $response);
 
         $expectedHeaders = [
             ['HTTP/1.0 404', true, null],
@@ -76,7 +76,7 @@ public function testHeaders()
 
         ob_start();
         $handler->sendPhpResponse(new MethodNotAllowedHttpException(['POST']));
-        $response = ob_get_clean();
+        ob_get_clean();
 
         $expectedHeaders = [
             ['HTTP/1.0 405', true, null],
@@ -99,35 +99,65 @@ public function testNestedExceptions()
 
     public function testHandle()
     {
-        $exception = new \Exception('foo');
+        $handler = new ExceptionHandler(true);
+        ob_start();
 
-        $handler = $this->getMockBuilder('Symfony\Component\Debug\ExceptionHandler')->setMethods(['sendPhpResponse'])->getMock();
-        $handler
-            ->expects($this->exactly(2))
-            ->method('sendPhpResponse');
+        $handler->handle(new \Exception('foo'));
 
-        $handler->handle($exception);
+        $this->assertThatTheExceptionWasOutput(ob_get_clean(), \Exception::class, 'Exception', 'foo');
+    }
 
-        $handler->setHandler(function ($e) use ($exception) {
-            $this->assertSame($exception, $e);
+    public function testHandleWithACustomHandlerThatOutputsSomething()
+    {
+        $handler = new ExceptionHandler(true);
+        ob_start();
+        $handler->setHandler(function () {
+            echo 'ccc';
         });
 
-        $handler->handle($exception);
+        $handler->handle(new \Exception());
+        ob_end_flush(); // Necessary because of this PHP bug : https://bugs.php.net/76563
+        $this->assertSame('ccc', ob_get_clean());
     }
 
-    public function testHandleOutOfMemoryException()
+    public function testHandleWithACustomHandlerThatOutputsNothing()
+    {
+        $handler = new ExceptionHandler(true);
+        $handler->setHandler(function () {});
+
+        $handler->handle(new \Exception('ccc'));
+
+        $this->assertThatTheExceptionWasOutput(ob_get_clean(), \Exception::class, 'Exception', 'ccc');
+    }
+
+    public function testHandleWithACustomHandlerThatFails()
     {
-        $exception = new OutOfMemoryException('foo', 0, E_ERROR, __FILE__, __LINE__);
+        $handler = new ExceptionHandler(true);
+        $handler->setHandler(function () {
+            throw new \RuntimeException();
+        });
 
-        $handler = $this->getMockBuilder('Symfony\Component\Debug\ExceptionHandler')->setMethods(['sendPhpResponse'])->getMock();
-        $handler
-            ->expects($this->once())
-            ->method('sendPhpResponse');
+        $handler->handle(new \Exception('ccc'));
 
-        $handler->setHandler(function ($e) {
+        $this->assertThatTheExceptionWasOutput(ob_get_clean(), \Exception::class, 'Exception', 'ccc');
+    }
+
+    public function testHandleOutOfMemoryException()
+    {
+        $handler = new ExceptionHandler(true);
+        ob_start();
+        $handler->setHandler(function () {
             $this->fail('OutOfMemoryException should bypass the handler');
         });
 
-        $handler->handle($exception);
+        $handler->handle(new OutOfMemoryException('foo', 0, E_ERROR, __FILE__, __LINE__));
+
+        $this->assertThatTheExceptionWasOutput(ob_get_clean(), OutOfMemoryException::class, 'OutOfMemoryException', 'foo');
+    }
+
+    private function assertThatTheExceptionWasOutput($content, $expectedClass, $expectedTitle, $expectedMessage)
+    {
+        $this->assertStringContainsString(sprintf('<span class="exception_title"><abbr title="%s">%s</abbr></span>', $expectedClass, $expectedTitle), $content);
+        $this->assertStringContainsString(sprintf('<p class="break-long-words trace-message">%s</p>', $expectedMessage), $content);
     }
 }
diff --git a/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php b/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
index 8e615ac640be9201a1fded2d8775fceb55e84afb..9a56b3b4ec8fc8ec6f546e97c6a18865f43f1a38 100644
--- a/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
+++ b/vendor/symfony/debug/Tests/FatalErrorHandler/ClassNotFoundFatalErrorHandlerTest.php
@@ -61,7 +61,7 @@ public function testHandleClassNotFound($error, $translatedMessage, $autoloader
         }
 
         $this->assertInstanceOf('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
-        $this->assertSame($translatedMessage, $exception->getMessage());
+        $this->assertRegExp($translatedMessage, $exception->getMessage());
         $this->assertSame($error['type'], $exception->getSeverity());
         $this->assertSame($error['file'], $exception->getFile());
         $this->assertSame($error['line'], $exception->getLine());
@@ -71,6 +71,7 @@ public function provideClassNotFoundData()
     {
         $autoloader = new ComposerClassLoader();
         $autoloader->add('Symfony\Component\Debug\Exception\\', realpath(__DIR__.'/../../Exception'));
+        $autoloader->add('Symfony_Component_Debug_Tests_Fixtures', realpath(__DIR__.'/../../Tests/Fixtures'));
 
         $debugClassLoader = new DebugClassLoader([$autoloader, 'loadClass']);
 
@@ -82,7 +83,7 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'WhizBangFactory\' not found',
                 ],
-                "Attempted to load class \"WhizBangFactory\" from the global namespace.\nDid you forget a \"use\" statement?",
+                "/^Attempted to load class \"WhizBangFactory\" from the global namespace.\nDid you forget a \"use\" statement\?$/",
             ],
             [
                 [
@@ -91,7 +92,7 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'Foo\\Bar\\WhizBangFactory\' not found',
                 ],
-                "Attempted to load class \"WhizBangFactory\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
+                "/^Attempted to load class \"WhizBangFactory\" from namespace \"Foo\\\\Bar\".\nDid you forget a \"use\" statement for another namespace\?$/",
             ],
             [
                 [
@@ -100,7 +101,8 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'UndefinedFunctionException\' not found',
                 ],
-                "Attempted to load class \"UndefinedFunctionException\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+                "/^Attempted to load class \"UndefinedFunctionException\" from the global namespace.\nDid you forget a \"use\" statement for .*\"Symfony\\\\Component\\\\Debug\\\\Exception\\\\UndefinedFunctionException\"\?$/",
+                [$debugClassLoader, 'loadClass'],
             ],
             [
                 [
@@ -109,7 +111,8 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'PEARClass\' not found',
                 ],
-                "Attempted to load class \"PEARClass\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony_Component_Debug_Tests_Fixtures_PEARClass\"?",
+                "/^Attempted to load class \"PEARClass\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony_Component_Debug_Tests_Fixtures_PEARClass\"\?$/",
+                [$debugClassLoader, 'loadClass'],
             ],
             [
                 [
@@ -118,7 +121,8 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
                 ],
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+                "/^Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\\\Bar\".\nDid you forget a \"use\" statement for .*\"Symfony\\\\Component\\\\Debug\\\\Exception\\\\UndefinedFunctionException\"\?$/",
+                [$debugClassLoader, 'loadClass'],
             ],
             [
                 [
@@ -127,7 +131,7 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
                 ],
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+                "/^Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\\\Bar\".\nDid you forget a \"use\" statement for \"Symfony\\\\Component\\\\Debug\\\\Exception\\\\UndefinedFunctionException\"\?$/",
                 [$autoloader, 'loadClass'],
             ],
             [
@@ -137,7 +141,7 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
                 ],
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
+                "/^Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\\\Bar\".\nDid you forget a \"use\" statement for \"Symfony\\\\Component\\\\Debug\\\\Exception\\\\UndefinedFunctionException\"\?/",
                 [$debugClassLoader, 'loadClass'],
             ],
             [
@@ -147,7 +151,7 @@ public function provideClassNotFoundData()
                     'file' => 'foo.php',
                     'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
                 ],
-                "Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
+                "/^Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\\\Bar\".\nDid you forget a \"use\" statement for another namespace\?$/",
                 function ($className) { /* do nothing here */ },
             ],
         ];
diff --git a/vendor/symfony/debug/Tests/MockExceptionHandler.php b/vendor/symfony/debug/Tests/MockExceptionHandler.php
deleted file mode 100644
index 2d6ce564d23a4270603053716b781622bb8a008a..0000000000000000000000000000000000000000
--- a/vendor/symfony/debug/Tests/MockExceptionHandler.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Debug\Tests;
-
-use Symfony\Component\Debug\ExceptionHandler;
-
-class MockExceptionHandler extends ExceptionHandler
-{
-    public $e;
-
-    public function handle(\Exception $e)
-    {
-        $this->e = $e;
-    }
-}
diff --git a/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php b/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php
index f8f771d627acf97ff112f5b0ecc9e52d14f991fc..b00a36c34f542985c6922e2bd0d549eab342d29b 100644
--- a/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php
+++ b/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php
@@ -20,7 +20,6 @@ class RewindableGenerator implements \IteratorAggregate, \Countable
     private $count;
 
     /**
-     * @param callable     $generator
      * @param int|callable $count
      */
     public function __construct(callable $generator, $count)
diff --git a/vendor/symfony/dependency-injection/ChildDefinition.php b/vendor/symfony/dependency-injection/ChildDefinition.php
index 29fbd48f2d17c06462359215133db4c0517bb258..123b387475bda98d09afc548f50f5a024b696516 100644
--- a/vendor/symfony/dependency-injection/ChildDefinition.php
+++ b/vendor/symfony/dependency-injection/ChildDefinition.php
@@ -89,7 +89,7 @@ public function getArgument($index)
      * @param int|string $index
      * @param mixed      $value
      *
-     * @return self the current instance
+     * @return $this
      *
      * @throws InvalidArgumentException when $index isn't an integer
      */
diff --git a/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php b/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php
index cff09d57d4adebb1e4a79a679633e4a1cfb48d45..5ca2b2246b76b8fa68da065501129f5b64a9b1a0 100644
--- a/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php
+++ b/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php
@@ -81,8 +81,7 @@ protected function processValue($value, $isRoot = false)
     }
 
     /**
-     * @param Definition $definition
-     * @param bool       $required
+     * @param bool $required
      *
      * @return \ReflectionFunctionAbstract|null
      *
@@ -90,6 +89,10 @@ protected function processValue($value, $isRoot = false)
      */
     protected function getConstructor(Definition $definition, $required)
     {
+        if ($definition->isSynthetic()) {
+            return null;
+        }
+
         if (\is_string($factory = $definition->getFactory())) {
             if (!\function_exists($factory)) {
                 throw new RuntimeException(sprintf('Invalid service "%s": function "%s" does not exist.', $this->currentId, $factory));
@@ -137,8 +140,7 @@ protected function getConstructor(Definition $definition, $required)
     }
 
     /**
-     * @param Definition $definition
-     * @param string     $method
+     * @param string $method
      *
      * @throws RuntimeException
      *
diff --git a/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php b/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php
index fc4047f902e13da37eeb220fc00d144bf38c7d8c..bff9d42079e121a701ef98769223b5b37888d841 100644
--- a/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php
+++ b/vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php
@@ -122,7 +122,7 @@ protected function processValue($value, $isRoot = false)
         $this->lazy = false;
 
         $byConstructor = $this->byConstructor;
-        $this->byConstructor = true;
+        $this->byConstructor = $isRoot || $byConstructor;
         $this->processValue($value->getFactory());
         $this->processValue($value->getArguments());
         $this->byConstructor = $byConstructor;
@@ -156,7 +156,7 @@ private function getDefinitionId($id)
         }
 
         if (!$this->container->hasDefinition($id)) {
-            return;
+            return null;
         }
 
         return $this->container->normalizeId($id);
diff --git a/vendor/symfony/dependency-injection/Compiler/AutowirePass.php b/vendor/symfony/dependency-injection/Compiler/AutowirePass.php
index c8e7a0f575f4eb3e4fdfe807b1b53810fcb2461a..91b279c77a256aa562f2a605288be4797b61a8f8 100644
--- a/vendor/symfony/dependency-injection/Compiler/AutowirePass.php
+++ b/vendor/symfony/dependency-injection/Compiler/AutowirePass.php
@@ -79,8 +79,6 @@ public function process(ContainerBuilder $container)
     /**
      * Creates a resource to help know if this service has changed.
      *
-     * @param \ReflectionClass $reflectionClass
-     *
      * @return AutowireServiceResource
      *
      * @deprecated since version 3.3, to be removed in 4.0. Use ContainerBuilder::getReflectionClass() instead.
@@ -168,9 +166,6 @@ private function doProcessValue($value, $isRoot = false)
     }
 
     /**
-     * @param \ReflectionClass $reflectionClass
-     * @param array            $methodCalls
-     *
      * @return array
      */
     private function autowireCalls(\ReflectionClass $reflectionClass, array $methodCalls)
@@ -205,9 +200,6 @@ private function autowireCalls(\ReflectionClass $reflectionClass, array $methodC
     /**
      * Autowires the constructor or a method.
      *
-     * @param \ReflectionFunctionAbstract $reflectionMethod
-     * @param array                       $arguments
-     *
      * @return array The autowired arguments
      *
      * @throws AutowiringFailedException
@@ -318,7 +310,7 @@ private function getAutowiredReference(TypedReference $reference, $deprecationMe
         }
 
         if (!$reference->canBeAutoregistered() || isset($this->types[$type]) || isset($this->ambiguousServiceTypes[$type])) {
-            return;
+            return null;
         }
 
         if (isset($this->autowired[$type])) {
@@ -328,6 +320,8 @@ private function getAutowiredReference(TypedReference $reference, $deprecationMe
         if (!$this->strictMode) {
             return $this->createAutowiredDefinition($type);
         }
+
+        return null;
     }
 
     /**
@@ -348,8 +342,7 @@ private function populateAvailableTypes($onlyAutowiringTypes = false)
     /**
      * Populates the list of available types for a given definition.
      *
-     * @param string     $id
-     * @param Definition $definition
+     * @param string $id
      */
     private function populateAvailableType($id, Definition $definition, $onlyAutowiringTypes)
     {
@@ -425,7 +418,7 @@ private function set($type, $id)
     private function createAutowiredDefinition($type)
     {
         if (!($typeHint = $this->container->getReflectionClass($type, false)) || !$typeHint->isInstantiable()) {
-            return;
+            return null;
         }
 
         $currentId = $this->currentId;
@@ -445,7 +438,7 @@ private function createAutowiredDefinition($type)
             $this->lastFailure = $e->getMessage();
             $this->container->log($this, $this->lastFailure);
 
-            return;
+            return null;
         } finally {
             $this->throwOnAutowiringException = $originalThrowSetting;
             $this->currentId = $currentId;
@@ -518,7 +511,7 @@ private function createTypeAlternatives(TypedReference $reference)
         } elseif ($reference->getRequiringClass() && !$reference->canBeAutoregistered() && !$this->strictMode) {
             return ' It cannot be auto-registered because it is from a different root namespace.';
         } else {
-            return;
+            return '';
         }
 
         return sprintf(' You should maybe alias this %s to %s.', class_exists($type, false) ? 'class' : 'interface', $message);
@@ -572,5 +565,7 @@ private function getAliasesSuggestionForType($type, $extraContext = null)
         if ($aliases) {
             return sprintf('Try changing the type-hint%s to "%s" instead.', $extraContext, $aliases[0]);
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php b/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php
index feb05c0499494aa4e1f6fc853cd00875ea347105..30a6f524ade46e84e48c13c8831c10ec691c567f 100644
--- a/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php
+++ b/vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php
@@ -81,5 +81,7 @@ protected function processValue($value, $isRoot = false)
                 }
             }
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/dependency-injection/Compiler/Compiler.php b/vendor/symfony/dependency-injection/Compiler/Compiler.php
index a6ae94d8cacc73e1b5776eee657d93a61a3f8f7d..bf0d9c3eab058aac462618594ef943829214fceb 100644
--- a/vendor/symfony/dependency-injection/Compiler/Compiler.php
+++ b/vendor/symfony/dependency-injection/Compiler/Compiler.php
@@ -73,9 +73,8 @@ public function getLoggingFormatter()
     /**
      * Adds a pass to the PassConfig.
      *
-     * @param CompilerPassInterface $pass     A compiler pass
-     * @param string                $type     The type of the pass
-     * @param int                   $priority Used to sort the passes
+     * @param CompilerPassInterface $pass A compiler pass
+     * @param string                $type The type of the pass
      */
     public function addPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/)
     {
diff --git a/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php b/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php
index 63f8013c313fbbdec92b0f8fd76cff9942d6aa7c..caa1fd225167294715a96b0d27c50185be738094 100644
--- a/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php
+++ b/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php
@@ -186,6 +186,10 @@ public function resolveEnvPlaceholders($value, $format = null, array &$usedEnvs
         $bag = $this->getParameterBag();
         $value = $bag->resolveValue($value);
 
+        if (!$bag instanceof EnvPlaceholderParameterBag) {
+            return parent::resolveEnvPlaceholders($value, $format, $usedEnvs);
+        }
+
         foreach ($bag->getEnvPlaceholders() as $env => $placeholders) {
             if (false === strpos($env, ':')) {
                 continue;
diff --git a/vendor/symfony/dependency-injection/Compiler/PassConfig.php b/vendor/symfony/dependency-injection/Compiler/PassConfig.php
index 77f4e953157c789883d12ea23ad257cf8e417978..323faad57f9a0f0faa1ffe6f0a4b859b2a680b69 100644
--- a/vendor/symfony/dependency-injection/Compiler/PassConfig.php
+++ b/vendor/symfony/dependency-injection/Compiler/PassConfig.php
@@ -113,9 +113,8 @@ public function getPasses()
     /**
      * Adds a pass.
      *
-     * @param CompilerPassInterface $pass     A Compiler pass
-     * @param string                $type     The pass type
-     * @param int                   $priority Used to sort the passes
+     * @param CompilerPassInterface $pass A Compiler pass
+     * @param string                $type The pass type
      *
      * @throws InvalidArgumentException when a pass type doesn't exist
      */
diff --git a/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php b/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php
index daff3495acdb746b6d95d4db0ecf2e171c6d8ccb..c7e12536eade6888fca9f74848d820e1ca4f87ef 100644
--- a/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php
+++ b/vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php
@@ -28,11 +28,10 @@ trait PriorityTaggedServiceTrait
      * and knowing that the \SplPriorityQueue class does not respect the FIFO method,
      * we should not use that class.
      *
-     * @see https://bugs.php.net/bug.php?id=53710
-     * @see https://bugs.php.net/bug.php?id=60926
+     * @see https://bugs.php.net/53710
+     * @see https://bugs.php.net/60926
      *
-     * @param string           $tagName
-     * @param ContainerBuilder $container
+     * @param string $tagName
      *
      * @return Reference[]
      */
diff --git a/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php b/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php
index b80e45256cbed5d57dfbc175f5c91ec5af60a75d..2559dcf10c00e638a4a957a731cecfc536da288f 100644
--- a/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php
+++ b/vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php
@@ -56,8 +56,7 @@ protected function processValue($value, $isRoot = false)
     /**
      * Resolves an alias into a definition id.
      *
-     * @param string           $id        The definition or alias id to resolve
-     * @param ContainerBuilder $container
+     * @param string $id The definition or alias id to resolve
      *
      * @return string The definition id with aliases resolved
      */
diff --git a/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php b/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php
index 51de4d7ac0978d52b3e85caef0049b23ef9bf2db..a7427c5a5bd664c60b949df2158ee93919721408 100644
--- a/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php
+++ b/vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php
@@ -41,6 +41,8 @@ protected function processValue($value, $isRoot = false)
             throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set.', $this->currentId));
         }
 
+        $i = 0;
+
         foreach ($arguments[0] as $k => $v) {
             if ($v instanceof ServiceClosureArgument) {
                 continue;
@@ -49,10 +51,13 @@ protected function processValue($value, $isRoot = false)
                 throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set, "%s" found for key "%s".', $this->currentId, \is_object($v) ? \get_class($v) : \gettype($v), $k));
             }
 
-            if (\is_int($k)) {
+            if ($i === $k) {
                 unset($arguments[0][$k]);
 
                 $k = (string) $v;
+                ++$i;
+            } elseif (\is_int($k)) {
+                $i = null;
             }
             $arguments[0][$k] = new ServiceClosureArgument($v);
         }
@@ -76,9 +81,8 @@ protected function processValue($value, $isRoot = false)
     }
 
     /**
-     * @param ContainerBuilder $container
-     * @param Reference[]      $refMap
-     * @param string|null      $callerId
+     * @param Reference[] $refMap
+     * @param string|null $callerId
      *
      * @return Reference
      */
diff --git a/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php b/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php
index 23d4745ed3d9ffc2cede4f6bce669f91e93d1f9f..e419e297e8f1ef66f25582b20e33d0bf9bf41864 100644
--- a/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php
+++ b/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php
@@ -89,9 +89,6 @@ public function clear()
      * @param string $destId
      * @param mixed  $destValue
      * @param string $reference
-     * @param bool   $lazy
-     * @param bool   $weak
-     * @param bool   $byConstructor
      */
     public function connect($sourceId, $sourceValue, $destId, $destValue = null, $reference = null/*, bool $lazy = false, bool $weak = false, bool $byConstructor = false*/)
     {
diff --git a/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php b/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php
index 5b8c84b6d61f67bd2fb4b936f2d4dc35a604c453..911e7a5f5facf19c992d8066ac799cfb447e2be8 100644
--- a/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php
+++ b/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php
@@ -28,12 +28,10 @@ class ServiceReferenceGraphEdge
     private $byConstructor;
 
     /**
-     * @param ServiceReferenceGraphNode $sourceNode
-     * @param ServiceReferenceGraphNode $destNode
-     * @param mixed                     $value
-     * @param bool                      $lazy
-     * @param bool                      $weak
-     * @param bool                      $byConstructor
+     * @param mixed $value
+     * @param bool  $lazy
+     * @param bool  $weak
+     * @param bool  $byConstructor
      */
     public function __construct(ServiceReferenceGraphNode $sourceNode, ServiceReferenceGraphNode $destNode, $value = null, $lazy = false, $weak = false, $byConstructor = false)
     {
diff --git a/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php b/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php
index 6abd6c86af703dead5a59d5bb32d43828fd20e3e..50140b5fffd678d11377793ec23be63a5f5173f9 100644
--- a/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php
+++ b/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php
@@ -81,7 +81,7 @@ public function getId()
     /**
      * Returns the in edges.
      *
-     * @return array The in ServiceReferenceGraphEdge array
+     * @return ServiceReferenceGraphEdge[]
      */
     public function getInEdges()
     {
@@ -91,7 +91,7 @@ public function getInEdges()
     /**
      * Returns the out edges.
      *
-     * @return array The out ServiceReferenceGraphEdge array
+     * @return ServiceReferenceGraphEdge[]
      */
     public function getOutEdges()
     {
diff --git a/vendor/symfony/dependency-injection/Container.php b/vendor/symfony/dependency-injection/Container.php
index e385f0689896ea9989d64afef3b884c9e905c0fe..b9f44b0bf9d5b6cb6822d96c6c62e2c2deb2d779 100644
--- a/vendor/symfony/dependency-injection/Container.php
+++ b/vendor/symfony/dependency-injection/Container.php
@@ -162,8 +162,8 @@ public function setParameter($name, $value)
      * Setting a synthetic service to null resets it: has() returns false and get()
      * behaves in the same way as if the service was never created.
      *
-     * @param string $id      The service identifier
-     * @param object $service The service instance
+     * @param string      $id      The service identifier
+     * @param object|null $service The service instance
      */
     public function set($id, $service)
     {
@@ -263,7 +263,7 @@ public function has($id)
      * @param string $id              The service identifier
      * @param int    $invalidBehavior The behavior when the service does not exist
      *
-     * @return object The associated service
+     * @return object|null The associated service
      *
      * @throws ServiceCircularReferenceException When a circular reference is detected
      * @throws ServiceNotFoundException          When the service is not defined
@@ -386,7 +386,7 @@ public function reset()
     /**
      * Gets all service ids.
      *
-     * @return array An array of all defined service ids
+     * @return string[] An array of all defined service ids
      */
     public function getServiceIds()
     {
@@ -405,7 +405,7 @@ public function getServiceIds()
         }
         $ids[] = 'service_container';
 
-        return array_unique(array_merge($ids, array_keys($this->methodMap), array_keys($this->fileMap), array_keys($this->services)));
+        return array_map('strval', array_unique(array_merge($ids, array_keys($this->methodMap), array_keys($this->fileMap), array_keys($this->aliases), array_keys($this->services))));
     }
 
     /**
@@ -444,8 +444,6 @@ public static function underscore($id)
 
     /**
      * Creates a service by requiring its factory file.
-     *
-     * @return object The service created by the file
      */
     protected function load($file)
     {
diff --git a/vendor/symfony/dependency-injection/ContainerBuilder.php b/vendor/symfony/dependency-injection/ContainerBuilder.php
index c322b4357ad20a9f8fd8d40665efe4240880241a..f9bfcb52109d5a747f2a07037cf90ea330f3ffb5 100644
--- a/vendor/symfony/dependency-injection/ContainerBuilder.php
+++ b/vendor/symfony/dependency-injection/ContainerBuilder.php
@@ -354,14 +354,14 @@ public function addClassResource(\ReflectionClass $class)
     public function getReflectionClass($class, $throw = true)
     {
         if (!$class = $this->getParameterBag()->resolveValue($class)) {
-            return;
+            return null;
         }
 
         if (isset(self::$internalTypes[$class])) {
             return null;
         }
 
-        $resource = null;
+        $resource = $classReflector = null;
 
         try {
             if (isset($this->classReflectors[$class])) {
@@ -376,7 +376,6 @@ public function getReflectionClass($class, $throw = true)
             if ($throw) {
                 throw $e;
             }
-            $classReflector = false;
         }
 
         if ($this->trackResources) {
@@ -519,8 +518,8 @@ public function getCompiler()
     /**
      * Sets a service.
      *
-     * @param string $id      The service identifier
-     * @param object $service The service instance
+     * @param string      $id      The service identifier
+     * @param object|null $service The service instance
      *
      * @throws BadMethodCallException When this ContainerBuilder is compiled
      */
@@ -571,7 +570,7 @@ public function has($id)
      * @param string $id              The service identifier
      * @param int    $invalidBehavior The behavior when the service does not exist
      *
-     * @return object The associated service
+     * @return object|null The associated service
      *
      * @throws InvalidArgumentException          when no definitions are available
      * @throws ServiceCircularReferenceException When a circular reference is detected
@@ -621,7 +620,7 @@ private function doGet($id, $invalidBehavior = ContainerInterface::EXCEPTION_ON_
             $definition = $this->getDefinition($id);
         } catch (ServiceNotFoundException $e) {
             if (ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $invalidBehavior) {
-                return;
+                return null;
             }
 
             throw $e;
@@ -815,13 +814,11 @@ public function compile(/*$resolveEnvPlaceholders = false*/)
     }
 
     /**
-     * Gets all service ids.
-     *
-     * @return array An array of all defined service ids
+     * {@inheritdoc}
      */
     public function getServiceIds()
     {
-        return array_unique(array_merge(array_keys($this->getDefinitions()), array_keys($this->aliasDefinitions), parent::getServiceIds()));
+        return array_map('strval', array_unique(array_merge(array_keys($this->getDefinitions()), array_keys($this->aliasDefinitions), parent::getServiceIds())));
     }
 
     /**
@@ -948,8 +945,8 @@ public function getAlias($id)
      * This methods allows for simple registration of service definition
      * with a fluid interface.
      *
-     * @param string $id         The service identifier
-     * @param string $class|null The service class
+     * @param string      $id    The service identifier
+     * @param string|null $class The service class
      *
      * @return Definition A Definition instance
      */
@@ -1106,7 +1103,7 @@ public function findDefinition($id)
      * @param string     $id         The service identifier
      * @param bool       $tryProxy   Whether to try proxying the service with a lazy proxy
      *
-     * @return object The service described by the service definition
+     * @return mixed The service described by the service definition
      *
      * @throws RuntimeException         When the factory definition is incomplete
      * @throws RuntimeException         When the service is a synthetic service
@@ -1652,8 +1649,7 @@ private function callMethod($service, $call, array &$inlineServices)
     /**
      * Shares a given service in the container.
      *
-     * @param Definition  $definition
-     * @param object      $service
+     * @param mixed       $service
      * @param string|null $id
      */
     private function shareService(Definition $definition, $service, $id, array &$inlineServices)
diff --git a/vendor/symfony/dependency-injection/ContainerInterface.php b/vendor/symfony/dependency-injection/ContainerInterface.php
index 2274ec7bb3266f3a7831f6e1e58ba9b269d8fc3e..c5ab4c2eda7d73d3572b1d2493069ce5ee36a68b 100644
--- a/vendor/symfony/dependency-injection/ContainerInterface.php
+++ b/vendor/symfony/dependency-injection/ContainerInterface.php
@@ -32,8 +32,8 @@ interface ContainerInterface extends PsrContainerInterface
     /**
      * Sets a service.
      *
-     * @param string $id      The service identifier
-     * @param object $service The service instance
+     * @param string      $id      The service identifier
+     * @param object|null $service The service instance
      */
     public function set($id, $service);
 
@@ -43,7 +43,7 @@ public function set($id, $service);
      * @param string $id              The service identifier
      * @param int    $invalidBehavior The behavior when the service does not exist
      *
-     * @return object The associated service
+     * @return object|null The associated service
      *
      * @throws ServiceCircularReferenceException When a circular reference is detected
      * @throws ServiceNotFoundException          When the service is not defined
diff --git a/vendor/symfony/dependency-injection/Definition.php b/vendor/symfony/dependency-injection/Definition.php
index ee58034713b0bf62a00dffa9d7e842708da49f16..c7d204948401d5fdc819ec543b337005f0b07bf0 100644
--- a/vendor/symfony/dependency-injection/Definition.php
+++ b/vendor/symfony/dependency-injection/Definition.php
@@ -796,7 +796,7 @@ public function setConfigurator($configurator)
     /**
      * Gets the configurator to call after the service is fully initialized.
      *
-     * @return callable|null The PHP callable to call
+     * @return callable|array|null
      */
     public function getConfigurator()
     {
@@ -936,8 +936,6 @@ public function getBindings()
      * injected in the matching parameters (of the constructor, of methods
      * called and of controller actions).
      *
-     * @param array $bindings
-     *
      * @return $this
      */
     public function setBindings(array $bindings)
diff --git a/vendor/symfony/dependency-injection/Dumper/DumperInterface.php b/vendor/symfony/dependency-injection/Dumper/DumperInterface.php
index 1ea775ddfe032340fd56091bd02675520d230ac7..8abc19250f70b62929f5b026c02036bc3decc3be 100644
--- a/vendor/symfony/dependency-injection/Dumper/DumperInterface.php
+++ b/vendor/symfony/dependency-injection/Dumper/DumperInterface.php
@@ -21,9 +21,7 @@ interface DumperInterface
     /**
      * Dumps the service container.
      *
-     * @param array $options An array of options
-     *
-     * @return string The representation of the service container
+     * @return string|array The representation of the service container
      */
     public function dump(array $options = []);
 }
diff --git a/vendor/symfony/dependency-injection/Dumper/PhpDumper.php b/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
index 73c868f1e54c9e1c6cdb4c25355ce812772feff5..7596b9953bda441203b3103c294001fae47f973e 100644
--- a/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
+++ b/vendor/symfony/dependency-injection/Dumper/PhpDumper.php
@@ -219,7 +219,7 @@ public function dump(array $options = [])
                 foreach ($ids as $id) {
                     $c .= '    '.$this->doExport($id)." => true,\n";
                 }
-                $files['removed-ids.php'] = $c .= "];\n";
+                $files['removed-ids.php'] = $c."];\n";
             }
 
             foreach ($this->generateServiceFiles() as $file => $c) {
@@ -302,10 +302,10 @@ private function getProxyDumper()
         return $this->proxyDumper;
     }
 
-    private function analyzeCircularReferences($sourceId, array $edges, &$checkedNodes, &$currentPath = [])
+    private function analyzeCircularReferences($sourceId, array $edges, &$checkedNodes, &$currentPath = [], $byConstructor = true)
     {
         $checkedNodes[$sourceId] = true;
-        $currentPath[$sourceId] = $sourceId;
+        $currentPath[$sourceId] = $byConstructor;
 
         foreach ($edges as $edge) {
             $node = $edge->getDestNode();
@@ -314,44 +314,52 @@ private function analyzeCircularReferences($sourceId, array $edges, &$checkedNod
             if (!$node->getValue() instanceof Definition || $sourceId === $id || $edge->isLazy() || $edge->isWeak()) {
                 // no-op
             } elseif (isset($currentPath[$id])) {
-                $currentId = $id;
-                foreach (array_reverse($currentPath) as $parentId) {
-                    $this->circularReferences[$parentId][$currentId] = $currentId;
-                    if ($parentId === $id) {
-                        break;
-                    }
-                    $currentId = $parentId;
-                }
+                $this->addCircularReferences($id, $currentPath, $edge->isReferencedByConstructor());
             } elseif (!isset($checkedNodes[$id])) {
-                $this->analyzeCircularReferences($id, $node->getOutEdges(), $checkedNodes, $currentPath);
+                $this->analyzeCircularReferences($id, $node->getOutEdges(), $checkedNodes, $currentPath, $edge->isReferencedByConstructor());
             } elseif (isset($this->circularReferences[$id])) {
-                $this->connectCircularReferences($id, $currentPath);
+                $this->connectCircularReferences($id, $currentPath, $edge->isReferencedByConstructor());
             }
         }
         unset($currentPath[$sourceId]);
     }
 
-    private function connectCircularReferences($sourceId, &$currentPath, &$subPath = [])
+    private function connectCircularReferences($sourceId, &$currentPath, $byConstructor, &$subPath = [])
     {
-        $subPath[$sourceId] = $sourceId;
-        $currentPath[$sourceId] = $sourceId;
+        $currentPath[$sourceId] = $subPath[$sourceId] = $byConstructor;
 
-        foreach ($this->circularReferences[$sourceId] as $id) {
+        foreach ($this->circularReferences[$sourceId] as $id => $byConstructor) {
             if (isset($currentPath[$id])) {
-                $currentId = $id;
-                foreach (array_reverse($currentPath) as $parentId) {
-                    $this->circularReferences[$parentId][$currentId] = $currentId;
-                    if ($parentId === $id) {
-                        break;
-                    }
-                    $currentId = $parentId;
-                }
+                $this->addCircularReferences($id, $currentPath, $byConstructor);
             } elseif (!isset($subPath[$id]) && isset($this->circularReferences[$id])) {
-                $this->connectCircularReferences($id, $currentPath, $subPath);
+                $this->connectCircularReferences($id, $currentPath, $byConstructor, $subPath);
             }
         }
-        unset($currentPath[$sourceId]);
-        unset($subPath[$sourceId]);
+        unset($currentPath[$sourceId], $subPath[$sourceId]);
+    }
+
+    private function addCircularReferences($id, $currentPath, $byConstructor)
+    {
+        $currentPath[$id] = $byConstructor;
+        $circularRefs = [];
+
+        foreach (array_reverse($currentPath) as $parentId => $v) {
+            $byConstructor = $byConstructor && $v;
+            $circularRefs[] = $parentId;
+
+            if ($parentId === $id) {
+                break;
+            }
+        }
+
+        $currentId = $id;
+        foreach ($circularRefs as $parentId) {
+            if (empty($this->circularReferences[$parentId][$currentId])) {
+                $this->circularReferences[$parentId][$currentId] = $byConstructor;
+            }
+
+            $currentId = $parentId;
+        }
     }
 
     private function collectLineage($class, array &$lineage)
@@ -462,9 +470,8 @@ private function addServiceInclude($cId, Definition $definition)
     /**
      * Generates the service instance.
      *
-     * @param string     $id
-     * @param Definition $definition
-     * @param bool       $isSimpleInstance
+     * @param string $id
+     * @param bool   $isSimpleInstance
      *
      * @return string
      *
@@ -501,8 +508,6 @@ private function addServiceInstance($id, Definition $definition, $isSimpleInstan
     /**
      * Checks if the definition is a trivial instance.
      *
-     * @param Definition $definition
-     *
      * @return bool
      */
     private function isTrivialInstance(Definition $definition)
@@ -546,8 +551,7 @@ private function isTrivialInstance(Definition $definition)
     /**
      * Adds method calls to a service definition.
      *
-     * @param Definition $definition
-     * @param string     $variableName
+     * @param string $variableName
      *
      * @return string
      */
@@ -579,8 +583,7 @@ private function addServiceProperties(Definition $definition, $variableName = 'i
     /**
      * Adds configurator definition.
      *
-     * @param Definition $definition
-     * @param string     $variableName
+     * @param string $variableName
      *
      * @return string
      */
@@ -616,9 +619,8 @@ private function addServiceConfigurator(Definition $definition, $variableName =
     /**
      * Adds a service.
      *
-     * @param string     $id
-     * @param Definition $definition
-     * @param string     &$file
+     * @param string $id
+     * @param string &$file
      *
      * @return string
      */
@@ -661,7 +663,6 @@ private function addService($id, Definition $definition, &$file = null)
         $autowired = $definition->isAutowired() ? ' autowired' : '';
 
         if ($definition->isLazy()) {
-            unset($this->circularReferences[$id]);
             $lazyInitialization = '$lazyLoad = true';
         } else {
             $lazyInitialization = '';
@@ -736,12 +737,12 @@ private function addInlineVariables($id, Definition $definition, array $argument
 
     private function addInlineReference($id, Definition $definition, $targetId, $forConstructor)
     {
-        list($callCount, $behavior) = $this->serviceCalls[$targetId];
-
         while ($this->container->hasAlias($targetId)) {
             $targetId = (string) $this->container->getAlias($targetId);
         }
 
+        list($callCount, $behavior) = $this->serviceCalls[$targetId];
+
         if ($id === $targetId) {
             return $this->addInlineService($id, $definition, $definition);
         }
@@ -750,9 +751,13 @@ private function addInlineReference($id, Definition $definition, $targetId, $for
             return '';
         }
 
-        $hasSelfRef = isset($this->circularReferences[$id][$targetId]);
-        $forConstructor = $forConstructor && !isset($this->definitionVariables[$definition]);
-        $code = $hasSelfRef && !$forConstructor ? $this->addInlineService($id, $definition, $definition) : '';
+        $hasSelfRef = isset($this->circularReferences[$id][$targetId]) && !isset($this->definitionVariables[$definition]);
+
+        if ($hasSelfRef && !$forConstructor && !$forConstructor = !$this->circularReferences[$id][$targetId]) {
+            $code = $this->addInlineService($id, $definition, $definition);
+        } else {
+            $code = '';
+        }
 
         if (isset($this->referenceVariables[$targetId]) || (2 > $callCount && (!$hasSelfRef || !$forConstructor))) {
             return $code;
@@ -785,15 +790,23 @@ private function addInlineReference($id, Definition $definition, $targetId, $for
 
     private function addInlineService($id, Definition $definition, Definition $inlineDef = null, $forConstructor = true)
     {
-        $isSimpleInstance = $isRootInstance = null === $inlineDef;
+        $code = '';
+
+        if ($isSimpleInstance = $isRootInstance = null === $inlineDef) {
+            foreach ($this->serviceCalls as $targetId => list($callCount, $behavior, $byConstructor)) {
+                if ($byConstructor && isset($this->circularReferences[$id][$targetId]) && !$this->circularReferences[$id][$targetId]) {
+                    $code .= $this->addInlineReference($id, $definition, $targetId, $forConstructor);
+                }
+            }
+        }
 
         if (isset($this->definitionVariables[$inlineDef = $inlineDef ?: $definition])) {
-            return '';
+            return $code;
         }
 
         $arguments = [$inlineDef->getArguments(), $inlineDef->getFactory()];
 
-        $code = $this->addInlineVariables($id, $definition, $arguments, $forConstructor);
+        $code .= $this->addInlineVariables($id, $definition, $arguments, $forConstructor);
 
         if ($arguments = array_filter([$inlineDef->getProperties(), $inlineDef->getMethodCalls(), $inlineDef->getConfigurator()])) {
             $isSimpleInstance = false;
@@ -950,7 +963,7 @@ private function startClass($class, $baseClass, $baseClassWithNamespace)
  */
 class $class extends $baseClass
 {
-    private \$parameters;
+    private \$parameters = [];
     private \$targetDirs = [];
 
     public function __construct()
@@ -1452,7 +1465,6 @@ protected function getDefaultParameters()
     /**
      * Exports parameters.
      *
-     * @param array  $parameters
      * @param string $path
      * @param int    $indent
      *
@@ -1550,7 +1562,7 @@ private function getServiceConditionals($value)
         return implode(' && ', $conditions);
     }
 
-    private function getDefinitionsFromArguments(array $arguments, \SplObjectStorage $definitions = null, array &$calls = [])
+    private function getDefinitionsFromArguments(array $arguments, \SplObjectStorage $definitions = null, array &$calls = [], $byConstructor = null)
     {
         if (null === $definitions) {
             $definitions = new \SplObjectStorage();
@@ -1558,12 +1570,16 @@ private function getDefinitionsFromArguments(array $arguments, \SplObjectStorage
 
         foreach ($arguments as $argument) {
             if (\is_array($argument)) {
-                $this->getDefinitionsFromArguments($argument, $definitions, $calls);
+                $this->getDefinitionsFromArguments($argument, $definitions, $calls, $byConstructor);
             } elseif ($argument instanceof Reference) {
                 $id = $this->container->normalizeId($argument);
 
+                while ($this->container->hasAlias($id)) {
+                    $id = (string) $this->container->getAlias($id);
+                }
+
                 if (!isset($calls[$id])) {
-                    $calls[$id] = [0, $argument->getInvalidBehavior()];
+                    $calls[$id] = [0, $argument->getInvalidBehavior(), $byConstructor];
                 } else {
                     $calls[$id][1] = min($calls[$id][1], $argument->getInvalidBehavior());
                 }
@@ -1575,8 +1591,10 @@ private function getDefinitionsFromArguments(array $arguments, \SplObjectStorage
                 $definitions[$argument] = 1 + $definitions[$argument];
             } else {
                 $definitions[$argument] = 1;
-                $arguments = [$argument->getArguments(), $argument->getFactory(), $argument->getProperties(), $argument->getMethodCalls(), $argument->getConfigurator()];
-                $this->getDefinitionsFromArguments($arguments, $definitions, $calls);
+                $arguments = [$argument->getArguments(), $argument->getFactory()];
+                $this->getDefinitionsFromArguments($arguments, $definitions, $calls, null === $byConstructor || $byConstructor);
+                $arguments = [$argument->getProperties(), $argument->getMethodCalls(), $argument->getConfigurator()];
+                $this->getDefinitionsFromArguments($arguments, $definitions, $calls, null !== $byConstructor && $byConstructor);
             }
         }
 
@@ -1717,6 +1735,11 @@ private function dumpValue($value, $interpolate = true)
             return '$'.$value;
         } elseif ($value instanceof Reference) {
             $id = $this->container->normalizeId($value);
+
+            while ($this->container->hasAlias($id)) {
+                $id = (string) $this->container->getAlias($id);
+            }
+
             if (null !== $this->referenceVariables && isset($this->referenceVariables[$id])) {
                 return $this->dumpValue($this->referenceVariables[$id], $interpolate);
             }
diff --git a/vendor/symfony/dependency-injection/Dumper/XmlDumper.php b/vendor/symfony/dependency-injection/Dumper/XmlDumper.php
index 67b6dbebb438c8e718fd33cf6dc379c4f99928d8..eff421ec4e71fc9c3885cb2d9ce159e907eb936d 100644
--- a/vendor/symfony/dependency-injection/Dumper/XmlDumper.php
+++ b/vendor/symfony/dependency-injection/Dumper/XmlDumper.php
@@ -90,9 +90,8 @@ private function addMethodCalls(array $methodcalls, \DOMElement $parent)
     /**
      * Adds a service.
      *
-     * @param Definition  $definition
-     * @param string      $id
-     * @param \DOMElement $parent
+     * @param Definition $definition
+     * @param string     $id
      */
     private function addService($definition, $id, \DOMElement $parent)
     {
@@ -221,9 +220,7 @@ private function addService($definition, $id, \DOMElement $parent)
     /**
      * Adds a service alias.
      *
-     * @param string      $alias
-     * @param Alias       $id
-     * @param \DOMElement $parent
+     * @param string $alias
      */
     private function addServiceAlias($alias, Alias $id, \DOMElement $parent)
     {
@@ -261,10 +258,8 @@ private function addServices(\DOMElement $parent)
     /**
      * Converts parameters.
      *
-     * @param array       $parameters
-     * @param string      $type
-     * @param \DOMElement $parent
-     * @param string      $keyAttribute
+     * @param string $type
+     * @param string $keyAttribute
      */
     private function convertParameters(array $parameters, $type, \DOMElement $parent, $keyAttribute = 'key')
     {
@@ -309,6 +304,11 @@ private function convertParameters(array $parameters, $type, \DOMElement $parent
                 if (\in_array($value, ['null', 'true', 'false'], true)) {
                     $element->setAttribute('type', 'string');
                 }
+
+                if (\is_string($value) && (is_numeric($value) || preg_match('/^0b[01]*$/', $value) || preg_match('/^0x[0-9a-f]++$/i', $value))) {
+                    $element->setAttribute('type', 'string');
+                }
+
                 $text = $this->document->createTextNode(self::phpToXml($value));
                 $element->appendChild($text);
             }
diff --git a/vendor/symfony/dependency-injection/Dumper/YamlDumper.php b/vendor/symfony/dependency-injection/Dumper/YamlDumper.php
index 8f3fcddf3079efbb005aee31a38a142255e63287..1e795c7daf3bfe17afa9b70f9705b8d5e6bcf05b 100644
--- a/vendor/symfony/dependency-injection/Dumper/YamlDumper.php
+++ b/vendor/symfony/dependency-injection/Dumper/YamlDumper.php
@@ -57,8 +57,7 @@ public function dump(array $options = [])
     /**
      * Adds a service.
      *
-     * @param string     $id
-     * @param Definition $definition
+     * @param string $id
      *
      * @return string
      */
@@ -171,7 +170,6 @@ private function addService($id, Definition $definition)
      * Adds a service alias.
      *
      * @param string $alias
-     * @param Alias  $id
      *
      * @return string
      */
@@ -230,9 +228,7 @@ private function addParameters()
     /**
      * Dumps callable to YAML format.
      *
-     * @param callable $callable
-     *
-     * @return callable
+     * @param mixed $callable
      */
     private function dumpCallable($callable)
     {
@@ -337,8 +333,7 @@ private function getExpressionCall($expression)
     /**
      * Prepares parameters.
      *
-     * @param array $parameters
-     * @param bool  $escape
+     * @param bool $escape
      *
      * @return array
      */
diff --git a/vendor/symfony/dependency-injection/EnvVarProcessor.php b/vendor/symfony/dependency-injection/EnvVarProcessor.php
index a23b83436bbe5edb62f9d165b1ea76d598de7bdf..88540809399976a9934c3010661b5140048dc826 100644
--- a/vendor/symfony/dependency-injection/EnvVarProcessor.php
+++ b/vendor/symfony/dependency-injection/EnvVarProcessor.php
@@ -65,7 +65,7 @@ public function getEnv($prefix, $name, \Closure $getEnv)
 
         if (false !== $i || 'string' !== $prefix) {
             if (null === $env = $getEnv($name)) {
-                return;
+                return null;
             }
         } elseif (isset($_ENV[$name])) {
             $env = $_ENV[$name];
@@ -77,7 +77,7 @@ public function getEnv($prefix, $name, \Closure $getEnv)
             }
 
             if (null === $env = $this->container->getParameter("env($name)")) {
-                return;
+                return null;
             }
         }
 
diff --git a/vendor/symfony/dependency-injection/Extension/Extension.php b/vendor/symfony/dependency-injection/Extension/Extension.php
index a9389862ccbe226e99b82e5bb157b91c1f2abeda..7df483064f11d0cd584674d3360f25db19960e90 100644
--- a/vendor/symfony/dependency-injection/Extension/Extension.php
+++ b/vendor/symfony/dependency-injection/Extension/Extension.php
@@ -84,11 +84,12 @@ public function getConfiguration(array $config, ContainerBuilder $container)
         $class = $container->getReflectionClass($class);
         $constructor = $class ? $class->getConstructor() : null;
 
-        if ($class && (!$constructor || !$constructor->getNumberOfRequiredParameters())) {
-            return $class->newInstance();
-        }
+        return $class && (!$constructor || !$constructor->getNumberOfRequiredParameters()) ? $class->newInstance() : null;
     }
 
+    /**
+     * @return array
+     */
     final protected function processConfiguration(ConfigurationInterface $configuration, array $configs)
     {
         $processor = new Processor();
diff --git a/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php b/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php
index 18de31272f32273d5a3fced54b8be2f398d56e9a..6a7a2cf0238191af61cabc88fed833d85fe64109 100644
--- a/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php
+++ b/vendor/symfony/dependency-injection/Extension/ExtensionInterface.php
@@ -37,7 +37,7 @@ public function getNamespace();
     /**
      * Returns the base path for the XSD files.
      *
-     * @return string The XSD base path
+     * @return string|false
      */
     public function getXsdValidationBasePath();
 
diff --git a/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php b/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php
index f2d0476f6e4a4226b24902934a3fe925447a421c..3946eafafde00c1ecf92225277254b3e6408813a 100644
--- a/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php
+++ b/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php
@@ -30,9 +30,7 @@ public function isProxyCandidate(Definition $definition);
     /**
      * Generates the code to be used to instantiate a proxy in the dumped factory code.
      *
-     * @param Definition $definition
-     * @param string     $id          Service identifier
-     * @param string     $factoryCode The code to execute to create the service, will be added to the interface in 4.0
+     * @param string $id Service identifier
      *
      * @return string
      */
diff --git a/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php b/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php
index fb21ba2e4e4b8c4f67c3b3a81303c6d03c61e681..cb19c729c100c7e865d00dde19f8ded462150ac4 100644
--- a/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php
+++ b/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php
@@ -37,7 +37,7 @@ public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionPa
             $type = method_exists($r, 'getReturnType') ? $r->getReturnType() : null;
         }
         if (!$type) {
-            return;
+            return null;
         }
         if (!\is_string($type)) {
             $name = $type instanceof \ReflectionNamedType ? $type->getName() : $type->__toString();
@@ -53,13 +53,12 @@ public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionPa
             return $prefix.$name;
         }
         if (!$r instanceof \ReflectionMethod) {
-            return;
+            return null;
         }
         if ('self' === $lcName) {
             return $prefix.$r->getDeclaringClass()->name;
         }
-        if ($parent = $r->getDeclaringClass()->getParentClass()) {
-            return $prefix.$parent->name;
-        }
+
+        return ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null;
     }
 }
diff --git a/vendor/symfony/dependency-injection/Loader/FileLoader.php b/vendor/symfony/dependency-injection/Loader/FileLoader.php
index f0d920189240b105fb97727c2b3486c07708a2a1..77cad3c046d735e67951f213425350f7fd491667 100644
--- a/vendor/symfony/dependency-injection/Loader/FileLoader.php
+++ b/vendor/symfony/dependency-injection/Loader/FileLoader.php
@@ -86,8 +86,7 @@ public function registerClasses(Definition $prototype, $namespace, $resource, $e
     /**
      * Registers a definition in the container with its instanceof-conditionals.
      *
-     * @param string     $id
-     * @param Definition $definition
+     * @param string $id
      */
     protected function setDefinition($id, Definition $definition)
     {
@@ -150,12 +149,7 @@ private function findClasses($namespace, $pattern, $excludePattern)
             try {
                 $r = $this->container->getReflectionClass($class);
             } catch (\ReflectionException $e) {
-                $classes[$class] = sprintf(
-                    'While discovering services from namespace "%s", an error was thrown when processing the class "%s": "%s".',
-                    $namespace,
-                    $class,
-                    $e->getMessage()
-                );
+                $classes[$class] = $e->getMessage();
                 continue;
             }
             // check to make sure the expected class exists
diff --git a/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php b/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
index 718592d8eca3954d727341fd8dd0925691665390..bd2902f85681a71efd052c6780245a085a134103 100644
--- a/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
+++ b/vendor/symfony/dependency-injection/Loader/XmlFileLoader.php
@@ -86,8 +86,7 @@ public function supports($resource, $type = null)
     /**
      * Parses parameters.
      *
-     * @param \DOMDocument $xml
-     * @param string       $file
+     * @param string $file
      */
     private function parseParameters(\DOMDocument $xml, $file)
     {
@@ -99,8 +98,7 @@ private function parseParameters(\DOMDocument $xml, $file)
     /**
      * Parses imports.
      *
-     * @param \DOMDocument $xml
-     * @param string       $file
+     * @param string $file
      */
     private function parseImports(\DOMDocument $xml, $file)
     {
@@ -121,8 +119,7 @@ private function parseImports(\DOMDocument $xml, $file)
     /**
      * Parses multiple definitions.
      *
-     * @param \DOMDocument $xml
-     * @param string       $file
+     * @param string $file
      */
     private function parseDefinitions(\DOMDocument $xml, $file, $defaults)
     {
@@ -193,9 +190,7 @@ private function getServiceDefaults(\DOMDocument $xml, $file)
     /**
      * Parses an individual Definition.
      *
-     * @param \DOMElement $service
-     * @param string      $file
-     * @param array       $defaults
+     * @param string $file
      *
      * @return Definition|null
      */
@@ -211,7 +206,7 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults)
                 $alias->setPublic($defaults['public']);
             }
 
-            return;
+            return null;
         }
 
         if ($this->isLoadingInstanceof) {
@@ -283,7 +278,7 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults)
             $definition->setDeprecated(true, $deprecated[0]->nodeValue ?: null);
         }
 
-        $definition->setArguments($this->getArgumentsAsPhp($service, 'argument', $file, false, $definition instanceof ChildDefinition));
+        $definition->setArguments($this->getArgumentsAsPhp($service, 'argument', $file, $definition instanceof ChildDefinition));
         $definition->setProperties($this->getArgumentsAsPhp($service, 'property', $file));
 
         if ($factories = $this->getChildren($service, 'factory')) {
@@ -394,9 +389,8 @@ private function parseFileToDOM($file)
     /**
      * Processes anonymous services.
      *
-     * @param \DOMDocument $xml
-     * @param string       $file
-     * @param array        $defaults
+     * @param string $file
+     * @param array  $defaults
      */
     private function processAnonymousServices(\DOMDocument $xml, $file, $defaults)
     {
@@ -456,14 +450,12 @@ private function processAnonymousServices(\DOMDocument $xml, $file, $defaults)
     /**
      * Returns arguments as valid php types.
      *
-     * @param \DOMElement $node
-     * @param string      $name
-     * @param string      $file
-     * @param bool        $lowercase
+     * @param string $name
+     * @param string $file
      *
      * @return mixed
      */
-    private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $lowercase = true, $isChildDefinition = false)
+    private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $isChildDefinition = false)
     {
         $arguments = [];
         foreach ($this->getChildren($node, $name) as $arg) {
@@ -513,10 +505,10 @@ private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $lowercase =
                     $arguments[$key] = new Expression($arg->nodeValue);
                     break;
                 case 'collection':
-                    $arguments[$key] = $this->getArgumentsAsPhp($arg, $name, $file, false);
+                    $arguments[$key] = $this->getArgumentsAsPhp($arg, $name, $file);
                     break;
                 case 'iterator':
-                    $arg = $this->getArgumentsAsPhp($arg, $name, $file, false);
+                    $arg = $this->getArgumentsAsPhp($arg, $name, $file);
                     try {
                         $arguments[$key] = new IteratorArgument($arg);
                     } catch (InvalidArgumentException $e) {
@@ -546,8 +538,7 @@ private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $lowercase =
     /**
      * Get child elements by name.
      *
-     * @param \DOMNode $node
-     * @param mixed    $name
+     * @param mixed $name
      *
      * @return \DOMElement[]
      */
@@ -566,8 +557,6 @@ private function getChildren(\DOMNode $node, $name)
     /**
      * Validates a documents XML schema.
      *
-     * @param \DOMDocument $dom
-     *
      * @return bool
      *
      * @throws RuntimeException When extension references a non-existent XSD file
@@ -645,8 +634,7 @@ public function validateSchema(\DOMDocument $dom)
     /**
      * Validates an alias.
      *
-     * @param \DOMElement $alias
-     * @param string      $file
+     * @param string $file
      */
     private function validateAlias(\DOMElement $alias, $file)
     {
@@ -666,8 +654,7 @@ private function validateAlias(\DOMElement $alias, $file)
     /**
      * Validates an extension.
      *
-     * @param \DOMDocument $dom
-     * @param string       $file
+     * @param string $file
      *
      * @throws InvalidArgumentException When no extension is found corresponding to a tag
      */
@@ -688,8 +675,6 @@ private function validateExtensions(\DOMDocument $dom, $file)
 
     /**
      * Loads from an extension.
-     *
-     * @param \DOMDocument $xml
      */
     private function loadFromExtensions(\DOMDocument $xml)
     {
@@ -724,7 +709,7 @@ private function loadFromExtensions(\DOMDocument $xml)
      *
      * @param \DOMElement $element A \DOMElement instance
      *
-     * @return array A PHP array
+     * @return mixed
      */
     public static function convertDomElementToArray(\DOMElement $element)
     {
diff --git a/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php b/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
index a3a799024e499aad0e975a46179210f2a9d51f51..891689bc16907419559282453666b23544fc8cfb 100644
--- a/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
+++ b/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php
@@ -170,7 +170,6 @@ public function supports($resource, $type = null)
     /**
      * Parses all imports.
      *
-     * @param array  $content
      * @param string $file
      */
     private function parseImports(array $content, $file)
@@ -200,7 +199,6 @@ private function parseImports(array $content, $file)
     /**
      * Parses definitions.
      *
-     * @param array  $content
      * @param string $file
      */
     private function parseDefinitions(array $content, $file)
@@ -241,7 +239,6 @@ private function parseDefinitions(array $content, $file)
     }
 
     /**
-     * @param array  $content
      * @param string $file
      *
      * @return array
@@ -306,8 +303,6 @@ private function parseDefaults(array &$content, $file)
     }
 
     /**
-     * @param array $service
-     *
      * @return bool
      */
     private function isUsingShortSyntax(array $service)
@@ -327,7 +322,6 @@ private function isUsingShortSyntax(array $service)
      * @param string       $id
      * @param array|string $service
      * @param string       $file
-     * @param array        $defaults
      *
      * @throws InvalidArgumentException When tags are invalid
      */
diff --git a/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php b/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php
index c4e702181fe688d1e7b46a4d65e26ca0e3042cf3..e13d2824f518ca5d3a458ac4a1dfe7e3819a3fe2 100644
--- a/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php
+++ b/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php
@@ -195,7 +195,7 @@ public function resolveValue($value, array $resolving = [])
      * @param string $value     The string to resolve
      * @param array  $resolving An array of keys that are being resolved (used internally to detect circular references)
      *
-     * @return string The resolved string
+     * @return mixed The resolved string
      *
      * @throws ParameterNotFoundException          if a placeholder references a parameter that does not exist
      * @throws ParameterCircularReferenceException if a circular reference if detected
diff --git a/vendor/symfony/dependency-injection/Tests/ChildDefinitionTest.php b/vendor/symfony/dependency-injection/Tests/ChildDefinitionTest.php
index cbae0eaaaa9eeb80aff7315e19b648b884d8d9c5..5091748392c5ece6c0784beae6a81f322ec11f7c 100644
--- a/vendor/symfony/dependency-injection/Tests/ChildDefinitionTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ChildDefinitionTest.php
@@ -90,11 +90,9 @@ public function testSetArgument()
         $this->assertSame(['index_0' => 'foo'], $def->getArguments());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testReplaceArgumentShouldRequireIntegerIndex()
     {
+        $this->expectException('InvalidArgumentException');
         $def = new ChildDefinition('foo');
 
         $def->replaceArgument('0', 'foo');
@@ -119,11 +117,9 @@ public function testReplaceArgument()
         $this->assertSame([0 => 'foo', 1 => 'bar', 'index_1' => 'baz', '$bar' => 'val'], $def->getArguments());
     }
 
-    /**
-     * @expectedException \OutOfBoundsException
-     */
     public function testGetArgumentShouldCheckBounds()
     {
+        $this->expectException('OutOfBoundsException');
         $def = new ChildDefinition('foo');
 
         $def->setArguments([0 => 'foo']);
@@ -137,20 +133,16 @@ public function testDefinitionDecoratorAliasExistsForBackwardsCompatibility()
         $this->assertInstanceOf(ChildDefinition::class, new DefinitionDecorator('foo'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\BadMethodCallException
-     */
     public function testCannotCallSetAutoconfigured()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\BadMethodCallException');
         $def = new ChildDefinition('foo');
         $def->setAutoconfigured(true);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\BadMethodCallException
-     */
     public function testCannotCallSetInstanceofConditionals()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\BadMethodCallException');
         $def = new ChildDefinition('foo');
         $def->setInstanceofConditionals(['Foo' => new ChildDefinition('')]);
     }
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php
index 0bd94a3e609cb5fae872777edb0bc1a252e81182..66b6e19cc323a02a99bcdf842522d7c9c87670cc 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/AnalyzeServiceReferencesPassTest.php
@@ -25,28 +25,28 @@ public function testProcess()
     {
         $container = new ContainerBuilder();
 
-        $a = $container
+        $container
             ->register('a')
             ->addArgument($ref1 = new Reference('b'))
         ;
 
-        $b = $container
+        $container
             ->register('b')
             ->addMethodCall('setA', [$ref2 = new Reference('a')])
         ;
 
-        $c = $container
+        $container
             ->register('c')
             ->addArgument($ref3 = new Reference('a'))
             ->addArgument($ref4 = new Reference('b'))
         ;
 
-        $d = $container
+        $container
             ->register('d')
             ->setProperty('foo', $ref5 = new Reference('b'))
         ;
 
-        $e = $container
+        $container
             ->register('e')
             ->setConfigurator([$ref6 = new Reference('b'), 'methodName'])
         ;
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php
index d029636a7cc5d02564413a048f09234bcae63e37..4e17778f8fb98ac7d43cae33d33418b8f34eda18 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/AutoAliasServicePassTest.php
@@ -17,11 +17,9 @@
 
 class AutoAliasServicePassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException
-     */
     public function testProcessWithMissingParameter()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException');
         $container = new ContainerBuilder();
 
         $container->register('example')
@@ -31,11 +29,9 @@ public function testProcessWithMissingParameter()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     */
     public function testProcessWithMissingFormat()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $container = new ContainerBuilder();
 
         $container->register('example')
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php
index 31fa665ae7a8508898b4a637fd9337b22e412c83..c5bcc660a5e48813b25f1a05bcb7b030e3cb7b5e 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/AutowirePassTest.php
@@ -182,12 +182,10 @@ public function testExceptionsAreStored()
         $this->assertCount(1, $pass->getAutowiringExceptions());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Invalid service "private_service": constructor of class "Symfony\Component\DependencyInjection\Tests\Compiler\PrivateConstructor" must be public.
-     */
     public function testPrivateConstructorThrowsAutowireException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Invalid service "private_service": constructor of class "Symfony\Component\DependencyInjection\Tests\Compiler\PrivateConstructor" must be public.');
         $container = new ContainerBuilder();
 
         $container->autowire('private_service', __NAMESPACE__.'\PrivateConstructor');
@@ -196,12 +194,10 @@ public function testPrivateConstructorThrowsAutowireException()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "a": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\CannotBeAutowired::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists. You should maybe alias this interface to one of these existing services: "c1", "c2", "c3".
-     */
     public function testTypeCollision()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "a": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\CannotBeAutowired::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists. You should maybe alias this interface to one of these existing services: "c1", "c2", "c3".');
         $container = new ContainerBuilder();
 
         $container->register('c1', __NAMESPACE__.'\CollisionA');
@@ -214,12 +210,10 @@ public function testTypeCollision()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "a": argument "$k" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotGuessableArgument::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\Foo" but no such service exists. You should maybe alias this class to one of these existing services: "a1", "a2".
-     */
     public function testTypeNotGuessable()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "a": argument "$k" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotGuessableArgument::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\Foo" but no such service exists. You should maybe alias this class to one of these existing services: "a1", "a2".');
         $container = new ContainerBuilder();
 
         $container->register('a1', __NAMESPACE__.'\Foo');
@@ -231,12 +225,10 @@ public function testTypeNotGuessable()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "a": argument "$k" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotGuessableArgumentForSubclass::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\A" but no such service exists. You should maybe alias this class to one of these existing services: "a1", "a2".
-     */
     public function testTypeNotGuessableWithSubclass()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "a": argument "$k" of method "Symfony\Component\DependencyInjection\Tests\Compiler\NotGuessableArgumentForSubclass::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\A" but no such service exists. You should maybe alias this class to one of these existing services: "a1", "a2".');
         $container = new ContainerBuilder();
 
         $container->register('a1', __NAMESPACE__.'\B');
@@ -248,12 +240,10 @@ public function testTypeNotGuessableWithSubclass()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "a": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\CannotBeAutowired::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists.
-     */
     public function testTypeNotGuessableNoServicesFound()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "a": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\CannotBeAutowired::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists.');
         $container = new ContainerBuilder();
 
         $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired');
@@ -372,12 +362,10 @@ public function testDontTriggerAutowiring()
         $this->assertCount(0, $container->getDefinition('bar')->getArguments());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class was not found.
-     */
     public function testClassNotFoundThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\NotARealClass" but this class was not found.');
         $container = new ContainerBuilder();
 
         $aDefinition = $container->register('a', __NAMESPACE__.'\BadTypeHintedArgument');
@@ -389,12 +377,11 @@ public function testClassNotFoundThrowsException()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "a": argument "$r" of method "Symfony\Component\DependencyInjection\Tests\Compiler\BadParentTypeHintedArgument::__construct()" has type "Symfony\Component\DependencyInjection\Tests\Compiler\OptionalServiceClass" but this class is missing a parent class (Class Symfony\Bug\NotExistClass not found).
-     */
     public function testParentClassNotFoundThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessageRegExp('{^Cannot autowire service "a": argument "\$r" of method "(Symfony\\\\Component\\\\DependencyInjection\\\\Tests\\\\Compiler\\\\)BadParentTypeHintedArgument::__construct\(\)" has type "\1OptionalServiceClass" but this class is missing a parent class \(Class "?Symfony\\\\Bug\\\\NotExistClass"? not found}');
+
         $container = new ContainerBuilder();
 
         $aDefinition = $container->register('a', __NAMESPACE__.'\BadParentTypeHintedArgument');
@@ -455,12 +442,10 @@ public function testSomeSpecificArgumentsAreSet()
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "arg_no_type_hint": argument "$bar" of method "Symfony\Component\DependencyInjection\Tests\Compiler\MultipleArguments::__construct()" is type-hinted "array", you should configure its value explicitly.
-     */
     public function testScalarArgsCannotBeAutowired()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "arg_no_type_hint": argument "$bar" of method "Symfony\Component\DependencyInjection\Tests\Compiler\MultipleArguments::__construct()" is type-hinted "array", you should configure its value explicitly.');
         $container = new ContainerBuilder();
 
         $container->register(A::class);
@@ -473,12 +458,10 @@ public function testScalarArgsCannotBeAutowired()
         (new AutowirePass())->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "arg_no_type_hint": argument "$foo" of method "Symfony\Component\DependencyInjection\Tests\Compiler\MultipleArguments::__construct()" has no type-hint, you should configure its value explicitly.
-     */
     public function testNoTypeArgsCannotBeAutowired()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "arg_no_type_hint": argument "$foo" of method "Symfony\Component\DependencyInjection\Tests\Compiler\MultipleArguments::__construct()" has no type-hint, you should configure its value explicitly.');
         $container = new ContainerBuilder();
 
         $container->register(A::class);
@@ -606,12 +589,10 @@ public function testSetterInjection()
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @exceptedExceptionMessage Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy": method "setLogger()" does not exist.
-     */
     public function testWithNonExistingSetterAndAutowiring()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass": method "setLogger()" does not exist.');
         $container = new ContainerBuilder();
 
         $definition = $container->register(CaseSensitiveClass::class, CaseSensitiveClass::class)->setAutowired(true);
@@ -744,12 +725,10 @@ public function testSetterInjectionCollisionThrowsException()
         $this->assertSame('Cannot autowire service "setter_injection_collision": argument "$collision" of method "Symfony\Component\DependencyInjection\Tests\Compiler\SetterInjectionCollision::setMultipleInstancesForOneArg()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\CollisionInterface" but no such service exists. You should maybe alias this interface to one of these existing services: "c1", "c2".', $e->getMessage());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "my_service": argument "$i" of method "Symfony\Component\DependencyInjection\Tests\Compiler\K::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\IInterface" but no such service exists. Did you create a class that implements this interface?
-     */
     public function testInterfaceWithNoImplementationSuggestToWriteOne()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "my_service": argument "$i" of method "Symfony\Component\DependencyInjection\Tests\Compiler\K::__construct()" references interface "Symfony\Component\DependencyInjection\Tests\Compiler\IInterface" but no such service exists. Did you create a class that implements this interface?');
         $container = new ContainerBuilder();
 
         $aDefinition = $container->register('my_service', K::class);
@@ -815,10 +794,10 @@ public function testWithFactory()
 
     /**
      * @dataProvider provideNotWireableCalls
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
      */
     public function testNotWireableCalls($method, $expectedMsg)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
         $container = new ContainerBuilder();
 
         $foo = $container->register('foo', NotWireable::class)->setAutowired(true)
@@ -832,12 +811,8 @@ public function testNotWireableCalls($method, $expectedMsg)
             $foo->addMethodCall($method, []);
         }
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException(RuntimeException::class);
-            $this->expectExceptionMessage($expectedMsg);
-        } else {
-            $this->setExpectedException(RuntimeException::class, $expectedMsg);
-        }
+        $this->expectException(RuntimeException::class);
+        $this->expectExceptionMessage($expectedMsg);
 
         (new ResolveClassPass())->process($container);
         (new AutowireRequiredMethodsPass())->process($container);
@@ -891,12 +866,10 @@ public function testTypedReferenceDeprecationNotice()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "j": argument "$i" of method "Symfony\Component\DependencyInjection\Tests\Compiler\J::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\I" but no such service exists. Try changing the type-hint to "Symfony\Component\DependencyInjection\Tests\Compiler\IInterface" instead.
-     */
     public function testExceptionWhenAliasExists()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "j": argument "$i" of method "Symfony\Component\DependencyInjection\Tests\Compiler\J::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\I" but no such service exists. Try changing the type-hint to "Symfony\Component\DependencyInjection\Tests\Compiler\IInterface" instead.');
         $container = new ContainerBuilder();
 
         // multiple I services... but there *is* IInterface available
@@ -911,12 +884,11 @@ public function testExceptionWhenAliasExists()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\AutowiringFailedException
-     * @expectedExceptionMessage Cannot autowire service "j": argument "$i" of method "Symfony\Component\DependencyInjection\Tests\Compiler\J::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\I" but no such service exists. You should maybe alias this class to one of these existing services: "i", "i2".
-     */
     public function testExceptionWhenAliasDoesNotExist()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\AutowiringFailedException');
+        $this->expectExceptionMessage('Cannot autowire service "j": argument "$i" of method "Symfony\Component\DependencyInjection\Tests\Compiler\J::__construct()" references class "Symfony\Component\DependencyInjection\Tests\Compiler\I" but no such service exists. You should maybe alias this class to one of these existing services: "i", "i2".');
+
         $container = new ContainerBuilder();
 
         // multiple I instances... but no IInterface alias
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/CheckArgumentsValidityPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/CheckArgumentsValidityPassTest.php
index c1e47b308e76050bb457201718e43950621c7460..9554c23bb31097aa3e87045b5b560e347a121b54 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/CheckArgumentsValidityPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/CheckArgumentsValidityPassTest.php
@@ -41,11 +41,11 @@ public function testProcess()
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
      * @dataProvider definitionProvider
      */
     public function testException(array $arguments, array $methodCalls)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
         $definition = $container->register('foo');
         $definition->setArguments($arguments);
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/CheckCircularReferencesPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/CheckCircularReferencesPassTest.php
index 8423c5616b3b9d8c6b084c49450042cceacc293f..8d501368e470cb245f87e3c64ef47191a83c3a7d 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/CheckCircularReferencesPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/CheckCircularReferencesPassTest.php
@@ -21,11 +21,9 @@
 
 class CheckCircularReferencesPassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testProcess()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
         $container->register('a')->addArgument(new Reference('b'));
         $container->register('b')->addArgument(new Reference('a'));
@@ -33,11 +31,9 @@ public function testProcess()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testProcessWithAliases()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
         $container->register('a')->addArgument(new Reference('b'));
         $container->setAlias('b', 'c');
@@ -46,11 +42,9 @@ public function testProcessWithAliases()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testProcessWithFactory()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
 
         $container
@@ -64,11 +58,9 @@ public function testProcessWithFactory()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testProcessDetectsIndirectCircularReference()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
         $container->register('a')->addArgument(new Reference('b'));
         $container->register('b')->addArgument(new Reference('c'));
@@ -77,11 +69,9 @@ public function testProcessDetectsIndirectCircularReference()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testProcessDetectsIndirectCircularReferenceWithFactory()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
 
         $container->register('a')->addArgument(new Reference('b'));
@@ -95,11 +85,9 @@ public function testProcessDetectsIndirectCircularReferenceWithFactory()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testDeepCircularReference()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
         $container->register('a')->addArgument(new Reference('b'));
         $container->register('b')->addArgument(new Reference('c'));
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
index e1dd60b662be9c807a1e304695f92a746da39fab..6caa38c7b49f5fe6fd487db15c12a2a3b70044cd 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/CheckDefinitionValidityPassTest.php
@@ -17,22 +17,18 @@
 
 class CheckDefinitionValidityPassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     */
     public function testProcessDetectsSyntheticNonPublicDefinitions()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
         $container->register('a')->setSynthetic(true)->setPublic(false);
 
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     */
     public function testProcessDetectsNonSyntheticNonAbstractDefinitionWithoutClass()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
         $container->register('a')->setSynthetic(false)->setAbstract(false);
 
@@ -65,22 +61,18 @@ public function testValidTags()
         $this->addToAssertionCount(1);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     */
     public function testInvalidTags()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
         $container->register('a', 'class')->addTag('foo', ['bar' => ['baz' => 'baz']]);
 
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\EnvParameterException
-     */
     public function testDynamicPublicServiceName()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\EnvParameterException');
         $container = new ContainerBuilder();
         $env = $container->getParameterBag()->get('env(BAR)');
         $container->register("foo.$env", 'class')->setPublic(true);
@@ -88,11 +80,9 @@ public function testDynamicPublicServiceName()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\EnvParameterException
-     */
     public function testDynamicPublicAliasName()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\EnvParameterException');
         $container = new ContainerBuilder();
         $env = $container->getParameterBag()->get('env(BAR)');
         $container->setAlias("foo.$env", 'class')->setPublic(true);
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php
index 38717eaf1fd5d1fe81bbf3abaac8d921252e7fb1..c4f331b18100dbb7f81004e80789d835f9651b21 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/CheckExceptionOnInvalidReferenceBehaviorPassTest.php
@@ -35,11 +35,9 @@ public function testProcess()
         $this->addToAssertionCount(1);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
-     */
     public function testProcessThrowsExceptionOnInvalidReference()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException');
         $container = new ContainerBuilder();
 
         $container
@@ -50,11 +48,9 @@ public function testProcessThrowsExceptionOnInvalidReference()
         $this->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
-     */
     public function testProcessThrowsExceptionOnInvalidReferenceFromInlinedDefinition()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException');
         $container = new ContainerBuilder();
 
         $def = new Definition();
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/CheckReferenceValidityPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/CheckReferenceValidityPassTest.php
index 22b6fd1542e73a79209eb66983e559a2397a8a0c..85a8a40f13169d7d7ff7c8c8b4b838eddc9e94da 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/CheckReferenceValidityPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/CheckReferenceValidityPassTest.php
@@ -18,11 +18,9 @@
 
 class CheckReferenceValidityPassTest extends TestCase
 {
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testProcessDetectsReferenceToAbstractDefinition()
     {
+        $this->expectException('RuntimeException');
         $container = new ContainerBuilder();
 
         $container->register('a')->setAbstract(true);
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/DefinitionErrorExceptionPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/DefinitionErrorExceptionPassTest.php
index ce6f0496e0527e48e186d69c0b34d83726d8107b..273261976db778b634170cd48a0f2f877c71a33b 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/DefinitionErrorExceptionPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/DefinitionErrorExceptionPassTest.php
@@ -18,12 +18,10 @@
 
 class DefinitionErrorExceptionPassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Things went wrong!
-     */
     public function testThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Things went wrong!');
         $container = new ContainerBuilder();
         $def = new Definition();
         $def->addError('Things went wrong!');
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
index 6e5c80a7d5cd0c79da87204b8982b9bdc072144d..d98db6406472952c077b795a37aeba2601351171 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/InlineServiceDefinitionsPassTest.php
@@ -111,12 +111,10 @@ public function testProcessDoesNotInlineMixedServicesLoop()
         $this->assertEquals(new Reference('bar'), $container->getDefinition('foo')->getArgument(0));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     * @expectedExceptionMessage Circular reference detected for service "bar", path: "bar -> foo -> bar".
-     */
     public function testProcessThrowsOnNonSharedLoops()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
+        $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> foo -> bar".');
         $container = new ContainerBuilder();
         $container
             ->register('foo')
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/IntegrationTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/IntegrationTest.php
index 10c34aa489d45fd8d54fa8c438fb6a262ae6513d..348d1d7f535840c0bb6623ee6b61c6a5395d174a 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/IntegrationTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/IntegrationTest.php
@@ -43,7 +43,7 @@ public function testProcessRemovesAndInlinesRecursively()
             ->addArgument(new Reference('c'))
         ;
 
-        $b = $container
+        $container
             ->register('b', '\stdClass')
             ->addArgument(new Reference('c'))
             ->setPublic(false)
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/MergeExtensionConfigurationPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/MergeExtensionConfigurationPassTest.php
index 1bef795f2b523479d7e7b44da2ebe98c64d22e6c..13692657bac71afb4bd088c1f34692297c3ec9ed 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/MergeExtensionConfigurationPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/MergeExtensionConfigurationPassTest.php
@@ -85,7 +85,7 @@ public function testExtensionConfigurationIsTrackedByDefault()
         $pass = new MergeExtensionConfigurationPass();
         $pass->process($container);
 
-        $this->assertContains(new FileResource(__FILE__), $container->getResources(), '', false, false);
+        $this->assertContainsEquals(new FileResource(__FILE__), $container->getResources());
     }
 
     public function testOverriddenEnvsAreMerged()
@@ -102,12 +102,10 @@ public function testOverriddenEnvsAreMerged()
         $this->assertSame(['BAZ' => 1, 'FOO' => 0], $container->getEnvCounters());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Using a cast in "env(int:FOO)" is incompatible with resolution at compile time in "Symfony\Component\DependencyInjection\Tests\Compiler\BarExtension". The logic in the extension should be moved to a compiler pass, or an env parameter with no cast should be used instead.
-     */
     public function testProcessedEnvsAreIncompatibleWithResolve()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Using a cast in "env(int:FOO)" is incompatible with resolution at compile time in "Symfony\Component\DependencyInjection\Tests\Compiler\BarExtension". The logic in the extension should be moved to a compiler pass, or an env parameter with no cast should be used instead.');
         $container = new ContainerBuilder();
         $container->registerExtension(new BarExtension());
         $container->prependExtensionConfig('bar', []);
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/RegisterEnvVarProcessorsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/RegisterEnvVarProcessorsPassTest.php
index 3d3fdf7694702f9954572fba4f7d9fd9beb7e2e5..2c42ba0ceb4429d1482e8cfd28a74e67d5483670 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/RegisterEnvVarProcessorsPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/RegisterEnvVarProcessorsPassTest.php
@@ -53,12 +53,10 @@ public function testNoProcessor()
         $this->assertFalse($container->has('container.env_var_processors_locator'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid type "foo" returned by "Symfony\Component\DependencyInjection\Tests\Compiler\BadProcessor::getProvidedTypes()", expected one of "array", "bool", "float", "int", "string".
-     */
     public function testBadProcessor()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid type "foo" returned by "Symfony\Component\DependencyInjection\Tests\Compiler\BadProcessor::getProvidedTypes()", expected one of "array", "bool", "float", "int", "string".');
         $container = new ContainerBuilder();
         $container->register('foo', BadProcessor::class)->addTag('container.env_var_processor');
 
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/RegisterServiceSubscribersPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/RegisterServiceSubscribersPassTest.php
index 0356c9713318404e53a9b45aac71e494601bab98..a16bfc1690e78bd688a7db8d776a3facbd6992e4 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/RegisterServiceSubscribersPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/RegisterServiceSubscribersPassTest.php
@@ -28,12 +28,10 @@
 
 class RegisterServiceSubscribersPassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Service "foo" must implement interface "Symfony\Component\DependencyInjection\ServiceSubscriberInterface".
-     */
     public function testInvalidClass()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Service "foo" must implement interface "Symfony\Component\DependencyInjection\ServiceSubscriberInterface".');
         $container = new ContainerBuilder();
 
         $container->register('foo', CustomDefinition::class)
@@ -44,12 +42,10 @@ public function testInvalidClass()
         (new ResolveServiceSubscribersPass())->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The "container.service_subscriber" tag accepts only the "key" and "id" attributes, "bar" given for service "foo".
-     */
     public function testInvalidAttributes()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The "container.service_subscriber" tag accepts only the "key" and "id" attributes, "bar" given for service "foo".');
         $container = new ContainerBuilder();
 
         $container->register('foo', TestServiceSubscriber::class)
@@ -118,12 +114,10 @@ public function testWithAttributes()
         $this->assertEquals($expected, $container->getDefinition((string) $locator->getFactory()[0])->getArgument(0));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Service key "test" does not exist in the map returned by "Symfony\Component\DependencyInjection\Tests\Fixtures\TestServiceSubscriber::getSubscribedServices()" for service "foo_service".
-     */
     public function testExtraServiceSubscriber()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Service key "test" does not exist in the map returned by "Symfony\Component\DependencyInjection\Tests\Fixtures\TestServiceSubscriber::getSubscribedServices()" for service "foo_service".');
         $container = new ContainerBuilder();
         $container->register('foo_service', TestServiceSubscriber::class)
             ->setAutowired(true)
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php
index f9c755c35e1846c498a102def469c35b80e7e7e3..2f0a413ca930fe27394e853060cce6b1c5edafcc 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ReplaceAliasByActualDefinitionPassTest.php
@@ -53,11 +53,9 @@ public function testProcess()
         $this->assertSame('b_alias', (string) $resolvedFactory[0]);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testProcessWithInvalidAlias()
     {
+        $this->expectException('InvalidArgumentException');
         $container = new ContainerBuilder();
         $container->setAlias('a_alias', 'a');
         $this->process($container);
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php
index 7bbecf6207f467e3e412598faeb911145f0b620e..bfd3d67238277d86e72809ac8c1222985b8e7818 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveBindingsPassTest.php
@@ -14,6 +14,7 @@
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\DependencyInjection\Argument\BoundArgument;
 use Symfony\Component\DependencyInjection\Compiler\AutowireRequiredMethodsPass;
+use Symfony\Component\DependencyInjection\Compiler\DefinitionErrorExceptionPass;
 use Symfony\Component\DependencyInjection\Compiler\ResolveBindingsPass;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Definition;
@@ -48,12 +49,10 @@ public function testProcess()
         $this->assertEquals([['setSensitiveClass', [new Reference('foo')]]], $definition->getMethodCalls());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Unused binding "$quz" in service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy".
-     */
     public function testUnusedBinding()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Unused binding "$quz" in service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy".');
         $container = new ContainerBuilder();
 
         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
@@ -63,12 +62,11 @@ public function testUnusedBinding()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegexp Unused binding "$quz" in service [\s\S]+ Invalid service ".*\\ParentNotExists": class NotExists not found\.
-     */
     public function testMissingParent()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Unused binding "\$quz" in service [\s\S]+/');
+
         $container = new ContainerBuilder();
 
         $definition = $container->register(ParentNotExists::class, ParentNotExists::class);
@@ -113,12 +111,10 @@ public function testScalarSetter()
         $this->assertEquals([['setDefaultLocale', ['fr']]], $definition->getMethodCalls());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @exceptedExceptionMessage Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy": method "setLogger()" does not exist.
-     */
     public function testWithNonExistingSetterAndBinding()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy": method "setLogger()" does not exist.');
         $container = new ContainerBuilder();
 
         $bindings = [
@@ -132,4 +128,25 @@ public function testWithNonExistingSetterAndBinding()
         $pass = new ResolveBindingsPass();
         $pass->process($container);
     }
+
+    public function testSyntheticServiceWithBind()
+    {
+        $container = new ContainerBuilder();
+        $argument = new BoundArgument('bar');
+
+        $container->register('foo', 'stdClass')
+            ->addArgument(new Reference('synthetic.service'));
+
+        $container->register('synthetic.service')
+            ->setSynthetic(true)
+            ->setBindings(['$apiKey' => $argument]);
+
+        $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class)
+            ->setBindings(['$apiKey' => $argument]);
+
+        (new ResolveBindingsPass())->process($container);
+        (new DefinitionErrorExceptionPass())->process($container);
+
+        $this->assertSame([1 => 'bar'], $container->getDefinition(NamedArgumentsDummy::class)->getArguments());
+    }
 }
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveChildDefinitionsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveChildDefinitionsPassTest.php
index 4eca8f70738848418f0306ee20f07a472ee51755..eee4cf730c881577e0ef765f55297d2165225cc2 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveChildDefinitionsPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveChildDefinitionsPassTest.php
@@ -390,7 +390,7 @@ public function testBindings()
             ->setBindings(['a' => '1', 'b' => '2'])
         ;
 
-        $child = $container->setDefinition('child', new ChildDefinition('parent'))
+        $container->setDefinition('child', new ChildDefinition('parent'))
             ->setBindings(['b' => 'B', 'c' => 'C'])
         ;
 
@@ -432,12 +432,10 @@ protected function process(ContainerBuilder $container)
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     * @expectedExceptionMessageRegExp /^Circular reference detected for service "c", path: "c -> b -> a -> c"./
-     */
     public function testProcessDetectsChildDefinitionIndirectCircularReference()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
+        $this->expectExceptionMessageRegExp('/^Circular reference detected for service "c", path: "c -> b -> a -> c"./');
         $container = new ContainerBuilder();
 
         $container->register('a');
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveClassPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveClassPassTest.php
index 48df3843dc5b1bc8a2d6b9948587325f9b7b2413..81e05fb284bf271b16eea18f847e905377027f3c 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveClassPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveClassPassTest.php
@@ -82,15 +82,13 @@ public function testClassFoundChildDefinition()
         $this->assertSame(self::class, $child->getClass());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Service definition "App\Foo\Child" has a parent but no class, and its name looks like a FQCN. Either the class is missing or you want to inherit it from the parent service. To resolve this ambiguity, please rename this service to a non-FQCN (e.g. using dots), or create the missing class.
-     */
     public function testAmbiguousChildDefinition()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Service definition "App\Foo\Child" has a parent but no class, and its name looks like a FQCN. Either the class is missing or you want to inherit it from the parent service. To resolve this ambiguity, please rename this service to a non-FQCN (e.g. using dots), or create the missing class.');
         $container = new ContainerBuilder();
-        $parent = $container->register('App\Foo', null);
-        $child = $container->setDefinition('App\Foo\Child', new ChildDefinition('App\Foo'));
+        $container->register('App\Foo', null);
+        $container->setDefinition('App\Foo\Child', new ChildDefinition('App\Foo'));
 
         (new ResolveClassPass())->process($container);
     }
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveFactoryClassPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveFactoryClassPassTest.php
index 3438fad0689f3bfd5a3b58f44cbe68b9fb2758c5..b87fb3db98483c1c342426ba2ca8b1d3f33b022c 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveFactoryClassPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveFactoryClassPassTest.php
@@ -71,12 +71,10 @@ public function testIgnoresFulfilledFactories($factory)
         $this->assertSame($factory, $container->getDefinition('factory')->getFactory());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The "factory" service is defined to be created by a factory, but is missing the factory class. Did you forget to define the factory or service class?
-     */
     public function testNotAnyClassThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The "factory" service is defined to be created by a factory, but is missing the factory class. Did you forget to define the factory or service class?');
         $container = new ContainerBuilder();
 
         $factory = $container->register('factory');
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php
index 26560b4ca32490979cffe23b1b0320e532c4eb1d..83be84bd0c37cfa9332dd9b27d90465689c853c2 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveInstanceofConditionalsPassTest.php
@@ -172,12 +172,10 @@ public function testProcessDoesNotUseAutoconfiguredInstanceofIfNotEnabled()
         $this->assertFalse($def->isAutowired());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage "App\FakeInterface" is set as an "instanceof" conditional, but it does not exist.
-     */
     public function testBadInterfaceThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('"App\FakeInterface" is set as an "instanceof" conditional, but it does not exist.');
         $container = new ContainerBuilder();
         $def = $container->register('normal_service', self::class);
         $def->setInstanceofConditionals([
@@ -200,12 +198,10 @@ public function testBadInterfaceForAutomaticInstanceofIsOk()
         $this->assertTrue($container->hasDefinition('normal_service'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Autoconfigured instanceof for type "PHPUnit\Framework\TestCase" defines method calls but these are not supported and should be removed.
-     */
     public function testProcessThrowsExceptionForAutoconfiguredCalls()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Autoconfigured instanceof for type "PHPUnit[\\\\_]Framework[\\\\_]TestCase" defines method calls but these are not supported and should be removed\./');
         $container = new ContainerBuilder();
         $container->registerForAutoconfiguration(parent::class)
             ->addMethodCall('setFoo');
@@ -213,12 +209,10 @@ public function testProcessThrowsExceptionForAutoconfiguredCalls()
         (new ResolveInstanceofConditionalsPass())->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Autoconfigured instanceof for type "PHPUnit\Framework\TestCase" defines arguments but these are not supported and should be removed.
-     */
     public function testProcessThrowsExceptionForArguments()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Autoconfigured instanceof for type "PHPUnit[\\\\_]Framework[\\\\_]TestCase" defines arguments but these are not supported and should be removed\./');
         $container = new ContainerBuilder();
         $container->registerForAutoconfiguration(parent::class)
             ->addArgument('bar');
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveNamedArgumentsPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveNamedArgumentsPassTest.php
index e25d96f5396c2b33dd55647f8819e497ef312d51..a10d226f1c96f59cb3eed3f9c7e90b3863199be2 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveNamedArgumentsPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveNamedArgumentsPassTest.php
@@ -60,11 +60,9 @@ public function testWithFactory()
         $this->assertSame([0 => '123'], $definition->getArguments());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     */
     public function testClassNull()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
 
         $definition = $container->register(NamedArgumentsDummy::class);
@@ -74,11 +72,9 @@ public function testClassNull()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     */
     public function testClassNotExist()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
 
         $definition = $container->register(NotExist::class, NotExist::class);
@@ -88,11 +84,9 @@ public function testClassNotExist()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     */
     public function testClassNoConstructor()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
         $container = new ContainerBuilder();
 
         $definition = $container->register(NoConstructor::class, NoConstructor::class);
@@ -102,12 +96,10 @@ public function testClassNoConstructor()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy": method "__construct()" has no argument named "$notFound". Check your service definition.
-     */
     public function testArgumentNotFound()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\NamedArgumentsDummy": method "__construct()" has no argument named "$notFound". Check your service definition.');
         $container = new ContainerBuilder();
 
         $definition = $container->register(NamedArgumentsDummy::class, NamedArgumentsDummy::class);
@@ -117,12 +109,10 @@ public function testArgumentNotFound()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\TestDefinition1": method "Symfony\Component\DependencyInjection\Tests\Fixtures\FactoryDummyWithoutReturnTypes::createTestDefinition1()" has no argument named "$notFound". Check your service definition.
-     */
     public function testCorrectMethodReportedInException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid service "Symfony\Component\DependencyInjection\Tests\Fixtures\TestDefinition1": method "Symfony\Component\DependencyInjection\Tests\Fixtures\FactoryDummyWithoutReturnTypes::createTestDefinition1()" has no argument named "$notFound". Check your service definition.');
         $container = new ContainerBuilder();
 
         $container->register(FactoryDummyWithoutReturnTypes::class, FactoryDummyWithoutReturnTypes::class);
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php
index 55b47057b1fd506fcd57f993bac3e2a9d08f8972..2465bb7e37b6ab6e14b36d5510caba89905075ae 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ResolveReferencesToAliasesPassTest.php
@@ -51,11 +51,9 @@ public function testProcessRecursively()
         $this->assertEquals('foo', (string) $arguments[0]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testAliasCircularReference()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $container = new ContainerBuilder();
         $container->setAlias('bar', 'foo');
         $container->setAlias('foo', 'bar');
diff --git a/vendor/symfony/dependency-injection/Tests/Compiler/ServiceLocatorTagPassTest.php b/vendor/symfony/dependency-injection/Tests/Compiler/ServiceLocatorTagPassTest.php
index 27ee7db533f6d5664229fea51fdd177ef697dd40..66af69b543202d0a973b396eb773b1a2dc64154d 100644
--- a/vendor/symfony/dependency-injection/Tests/Compiler/ServiceLocatorTagPassTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Compiler/ServiceLocatorTagPassTest.php
@@ -25,12 +25,10 @@
 
 class ServiceLocatorTagPassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid definition for service "foo": an array of references is expected as first argument when the "container.service_locator" tag is set.
-     */
     public function testNoServices()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid definition for service "foo": an array of references is expected as first argument when the "container.service_locator" tag is set.');
         $container = new ContainerBuilder();
 
         $container->register('foo', ServiceLocator::class)
@@ -40,12 +38,10 @@ public function testNoServices()
         (new ServiceLocatorTagPass())->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid definition for service "foo": an array of references is expected as first argument when the "container.service_locator" tag is set, "string" found for key "0".
-     */
     public function testInvalidServices()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid definition for service "foo": an array of references is expected as first argument when the "container.service_locator" tag is set, "string" found for key "0".');
         $container = new ContainerBuilder();
 
         $container->register('foo', ServiceLocator::class)
@@ -118,6 +114,7 @@ public function testInheritedKeyOverwritesPreviousServiceWithKey()
             ->setArguments([[
                 'bar' => new Reference('baz'),
                 new Reference('bar'),
+                16 => new Reference('baz'),
             ]])
             ->addTag('container.service_locator')
         ;
@@ -128,6 +125,7 @@ public function testInheritedKeyOverwritesPreviousServiceWithKey()
         $locator = $container->get('foo');
 
         $this->assertSame(TestDefinition1::class, \get_class($locator('bar')));
+        $this->assertSame(TestDefinition2::class, \get_class($locator(16)));
     }
 
     public function testBindingsAreCopied()
diff --git a/vendor/symfony/dependency-injection/Tests/Config/ContainerParametersResourceCheckerTest.php b/vendor/symfony/dependency-injection/Tests/Config/ContainerParametersResourceCheckerTest.php
index eb5fc5a99d2e104ca3560214f463266d556be88a..51af451c160c601b6f8ce76f5c4934d35005abbe 100644
--- a/vendor/symfony/dependency-injection/Tests/Config/ContainerParametersResourceCheckerTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Config/ContainerParametersResourceCheckerTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\DependencyInjection\Tests\Config;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Config\ResourceCheckerInterface;
 use Symfony\Component\DependencyInjection\Config\ContainerParametersResource;
@@ -52,15 +53,15 @@ public function testIsFresh(callable $mockContainer, $expected)
 
     public function isFreshProvider()
     {
-        yield 'not fresh on missing parameter' => [function (\PHPUnit_Framework_MockObject_MockObject $container) {
+        yield 'not fresh on missing parameter' => [function (MockObject $container) {
             $container->method('hasParameter')->with('locales')->willReturn(false);
         }, false];
 
-        yield 'not fresh on different value' => [function (\PHPUnit_Framework_MockObject_MockObject $container) {
+        yield 'not fresh on different value' => [function (MockObject $container) {
             $container->method('getParameter')->with('locales')->willReturn(['nl', 'es']);
         }, false];
 
-        yield 'fresh on every identical parameters' => [function (\PHPUnit_Framework_MockObject_MockObject $container) {
+        yield 'fresh on every identical parameters' => [function (MockObject $container) {
             $container->expects($this->exactly(2))->method('hasParameter')->willReturn(true);
             $container->expects($this->exactly(2))->method('getParameter')
                 ->withConsecutive(
diff --git a/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php b/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
index b3bea30b749b9fc1121120de1d8a77793eccdda9..f2666ef9629b30c176498c7df20f2437d43654b8 100644
--- a/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ContainerBuilderTest.php
@@ -38,6 +38,7 @@
 use Symfony\Component\DependencyInjection\ServiceLocator;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\CaseSensitiveClass;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\CustomDefinition;
+use Symfony\Component\DependencyInjection\Tests\Fixtures\ScalarFactory;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\SimilarArgumentsDummy;
 use Symfony\Component\DependencyInjection\TypedReference;
 use Symfony\Component\ExpressionLanguage\Expression;
@@ -127,12 +128,10 @@ public function testHas()
         $this->assertTrue($builder->has('bar'), '->has() returns true if a service exists');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
-     * @expectedExceptionMessage You have requested a non-existent service "foo".
-     */
     public function testGetThrowsExceptionIfServiceDoesNotExist()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException');
+        $this->expectExceptionMessage('You have requested a non-existent service "foo".');
         $builder = new ContainerBuilder();
         $builder->get('foo');
     }
@@ -144,11 +143,9 @@ public function testGetReturnsNullIfServiceDoesNotExistAndInvalidReferenceIsUsed
         $this->assertNull($builder->get('foo', ContainerInterface::NULL_ON_INVALID_REFERENCE), '->get() returns null if the service does not exist and NULL_ON_INVALID_REFERENCE is passed as a second argument');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     */
     public function testGetThrowsCircularReferenceExceptionIfServiceHasReferenceToItself()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
         $builder = new ContainerBuilder();
         $builder->register('baz', 'stdClass')->setArguments([new Reference('baz')]);
         $builder->get('baz');
@@ -167,7 +164,7 @@ public function testGetCreatesServiceBasedOnDefinition()
         $builder = new ContainerBuilder();
         $builder->register('foo', 'stdClass');
 
-        $this->assertInternalType('object', $builder->get('foo'), '->get() returns the service definition associated with the id');
+        $this->assertIsObject($builder->get('foo'), '->get() returns the service definition associated with the id');
     }
 
     public function testGetReturnsRegisteredService()
@@ -196,21 +193,21 @@ public function testNonSharedServicesReturnsDifferentInstances()
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
      * @dataProvider provideBadId
      */
     public function testBadAliasId($id)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $builder = new ContainerBuilder();
         $builder->setAlias($id, 'foo');
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
      * @dataProvider provideBadId
      */
     public function testBadDefinitionId($id)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $builder = new ContainerBuilder();
         $builder->setDefinition($id, new Definition('Foo'));
     }
@@ -227,12 +224,10 @@ public function provideBadId()
         ];
     }
 
-    /**
-     * @expectedException        \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage You have requested a synthetic service ("foo"). The DIC does not know how to construct this service.
-     */
     public function testGetUnsetLoadingServiceWhenCreateServiceThrowsAnException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('You have requested a synthetic service ("foo"). The DIC does not know how to construct this service.');
         $builder = new ContainerBuilder();
         $builder->register('foo', 'stdClass')->setSynthetic(true);
 
@@ -511,11 +506,9 @@ public function testCreateServiceWithIteratorArgument()
         $this->assertEquals(0, $i);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testCreateSyntheticService()
     {
+        $this->expectException('RuntimeException');
         $builder = new ContainerBuilder();
         $builder->register('foo', 'Bar\FooClass')->setSynthetic(true);
         $builder->get('foo');
@@ -539,12 +532,10 @@ public function testResolveServices()
         $this->assertEquals($builder->get('foo'), $builder->resolveServices(new Expression('service("foo")')), '->resolveServices() resolves expressions');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Constructing service "foo" from a parent definition is not supported at build time.
-     */
     public function testResolveServicesWithDecoratedDefinition()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Constructing service "foo" from a parent definition is not supported at build time.');
         $builder = new ContainerBuilder();
         $builder->setDefinition('grandpa', new Definition('stdClass'));
         $builder->setDefinition('parent', new ChildDefinition('grandpa'));
@@ -620,12 +611,10 @@ public function testMerge()
         $this->assertSame(['AInterface' => $childDefA, 'BInterface' => $childDefB], $container->getAutoconfiguredInstanceof());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage "AInterface" has already been autoconfigured and merge() does not support merging autoconfiguration for the same class/interface.
-     */
     public function testMergeThrowsExceptionForDuplicateAutomaticInstanceofDefinitions()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('"AInterface" has already been autoconfigured and merge() does not support merging autoconfiguration for the same class/interface.');
         $container = new ContainerBuilder();
         $config = new ContainerBuilder();
         $container->registerForAutoconfiguration('AInterface');
@@ -661,7 +650,7 @@ public function testResolveEnvValuesWithArray()
         $container->resolveEnvPlaceholders('%dummy%', true);
         $container->resolveEnvPlaceholders('%dummy2%', true);
 
-        $this->assertInternalType('array', $container->resolveEnvPlaceholders('%dummy2%', true));
+        $this->assertIsArray($container->resolveEnvPlaceholders('%dummy2%', true));
 
         foreach ($dummyArray as $key => $value) {
             $this->assertArrayHasKey($key, $container->resolveEnvPlaceholders('%dummy2%', true));
@@ -727,12 +716,10 @@ public function testCompileWithArrayAndAnotherResolveEnv()
         putenv('ARRAY');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage A string value must be composed of strings and/or numbers, but found parameter "env(json:ARRAY)" of type array inside string value "ABC %env(json:ARRAY)%".
-     */
     public function testCompileWithArrayInStringResolveEnv()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('A string value must be composed of strings and/or numbers, but found parameter "env(json:ARRAY)" of type array inside string value "ABC %env(json:ARRAY)%".');
         putenv('ARRAY={"foo":"bar"}');
 
         $container = new ContainerBuilder();
@@ -742,12 +729,10 @@ public function testCompileWithArrayInStringResolveEnv()
         putenv('ARRAY');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\EnvNotFoundException
-     * @expectedExceptionMessage Environment variable not found: "FOO".
-     */
     public function testCompileWithResolveMissingEnv()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\EnvNotFoundException');
+        $this->expectExceptionMessage('Environment variable not found: "FOO".');
         $container = new ContainerBuilder();
         $container->setParameter('foo', '%env(FOO)%');
         $container->compile(true);
@@ -826,12 +811,10 @@ public function testEnvInId()
         $this->assertSame(['baz_bar'], array_keys($container->getDefinition('foo')->getArgument(1)));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException
-     * @expectedExceptionMessage Circular reference detected for parameter "env(resolve:DUMMY_ENV_VAR)" ("env(resolve:DUMMY_ENV_VAR)" > "env(resolve:DUMMY_ENV_VAR)").
-     */
     public function testCircularDynamicEnv()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException');
+        $this->expectExceptionMessage('Circular reference detected for parameter "env(resolve:DUMMY_ENV_VAR)" ("env(resolve:DUMMY_ENV_VAR)" > "env(resolve:DUMMY_ENV_VAR)").');
         putenv('DUMMY_ENV_VAR=some%foo%');
 
         $container = new ContainerBuilder();
@@ -845,11 +828,9 @@ public function testCircularDynamicEnv()
         }
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testMergeLogicException()
     {
+        $this->expectException('LogicException');
         $container = new ContainerBuilder();
         $container->setResourceTracking(false);
         $container->compile();
@@ -1052,7 +1033,7 @@ public function testExtension()
         $container->registerExtension($extension = new \ProjectExtension());
         $this->assertSame($container->getExtension('project'), $extension, '->registerExtension() registers an extension');
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('LogicException');
+        $this->expectException('LogicException');
         $container->getExtension('no_registered');
     }
 
@@ -1099,11 +1080,9 @@ public function testPrivateServiceUser()
         $this->assertInstanceOf('BarClass', $container->get('bar_user')->bar);
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testThrowsExceptionWhenSetServiceOnACompiledContainer()
     {
+        $this->expectException('BadMethodCallException');
         $container = new ContainerBuilder();
         $container->setResourceTracking(false);
         $container->register('a', 'stdClass')->setPublic(true);
@@ -1130,11 +1109,9 @@ public function testNoExceptionWhenSetSyntheticServiceOnACompiledContainer()
         $this->assertEquals($a, $container->get('a'));
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testThrowsExceptionWhenSetDefinitionOnACompiledContainer()
     {
+        $this->expectException('BadMethodCallException');
         $container = new ContainerBuilder();
         $container->setResourceTracking(false);
         $container->compile();
@@ -1226,12 +1203,10 @@ public function testInlinedDefinitions()
         $this->assertNotSame($bar->foo, $barUser->foo);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     * @expectedExceptionMessage Circular reference detected for service "app.test_class", path: "app.test_class -> App\TestClass -> app.test_class".
-     */
     public function testThrowsCircularExceptionForCircularAliases()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
+        $this->expectExceptionMessage('Circular reference detected for service "app.test_class", path: "app.test_class -> App\TestClass -> app.test_class".');
         $builder = new ContainerBuilder();
 
         $builder->setAliases([
@@ -1284,63 +1259,53 @@ public function testClassFromId()
         $this->assertEquals(CaseSensitiveClass::class, $autoloadClass->getClass());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The definition for "DateTime" has no class attribute, and appears to reference a class or interface in the global namespace.
-     */
     public function testNoClassFromGlobalNamespaceClassId()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The definition for "DateTime" has no class attribute, and appears to reference a class or interface in the global namespace.');
         $container = new ContainerBuilder();
 
-        $definition = $container->register(\DateTime::class);
+        $container->register(\DateTime::class);
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The definition for "\DateTime" has no class attribute, and appears to reference a class or interface in the global namespace.
-     */
     public function testNoClassFromGlobalNamespaceClassIdWithLeadingSlash()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The definition for "\DateTime" has no class attribute, and appears to reference a class or interface in the global namespace.');
         $container = new ContainerBuilder();
 
         $container->register('\\'.\DateTime::class);
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The definition for "\Symfony\Component\DependencyInjection\Tests\FooClass" has no class attribute, and appears to reference a class or interface. Please specify the class attribute explicitly or remove the leading backslash by renaming the service to "Symfony\Component\DependencyInjection\Tests\FooClass" to get rid of this error.
-     */
     public function testNoClassFromNamespaceClassIdWithLeadingSlash()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The definition for "\Symfony\Component\DependencyInjection\Tests\FooClass" has no class attribute, and appears to reference a class or interface. Please specify the class attribute explicitly or remove the leading backslash by renaming the service to "Symfony\Component\DependencyInjection\Tests\FooClass" to get rid of this error.');
         $container = new ContainerBuilder();
 
         $container->register('\\'.FooClass::class);
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The definition for "123_abc" has no class.
-     */
     public function testNoClassFromNonClassId()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The definition for "123_abc" has no class.');
         $container = new ContainerBuilder();
 
-        $definition = $container->register('123_abc');
+        $container->register('123_abc');
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The definition for "\foo" has no class.
-     */
     public function testNoClassFromNsSeparatorId()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The definition for "\foo" has no class.');
         $container = new ContainerBuilder();
 
-        $definition = $container->register('\\foo');
+        $container->register('\\foo');
         $container->compile();
     }
 
@@ -1422,6 +1387,13 @@ public function testAlmostCircular($visibility)
         $this->assertEquals((object) ['bar6' => (object) []], $foo6);
 
         $this->assertInstanceOf(\stdClass::class, $container->get('root'));
+
+        $manager3 = $container->get('manager3');
+        $listener3 = $container->get('listener3');
+        $this->assertSame($manager3, $listener3->manager, 'Both should identically be the manager3 service');
+
+        $listener4 = $container->get('listener4');
+        $this->assertInstanceOf('stdClass', $listener4);
     }
 
     public function provideAlmostCircular()
@@ -1532,6 +1504,20 @@ public function testDecoratedSelfReferenceInvolvingPrivateServices()
 
         $this->assertSame(['service_container'], array_keys($container->getDefinitions()));
     }
+
+    public function testScalarService()
+    {
+        $c = new ContainerBuilder();
+        $c->register('foo', 'string')
+            ->setPublic(true)
+            ->setFactory([ScalarFactory::class, 'getSomeValue'])
+        ;
+
+        $c->compile();
+
+        $this->assertTrue($c->has('foo'));
+        $this->assertSame('some value', $c->get('foo'));
+    }
 }
 
 class FooClass
diff --git a/vendor/symfony/dependency-injection/Tests/ContainerTest.php b/vendor/symfony/dependency-injection/Tests/ContainerTest.php
index d2616a34ba6b422d9b0c56fd6aadf74677048c8d..46527e09dd5bcd79337d3ed593949f10bcda595a 100644
--- a/vendor/symfony/dependency-injection/Tests/ContainerTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ContainerTest.php
@@ -12,7 +12,6 @@
 namespace Symfony\Component\DependencyInjection\Tests;
 
 use PHPUnit\Framework\TestCase;
-use Symfony\Component\DependencyInjection\Alias;
 use Symfony\Component\DependencyInjection\Container;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
@@ -157,7 +156,7 @@ public function testGetServiceIds()
 
         $sc = new ProjectServiceContainer();
         $sc->set('foo', $obj = new \stdClass());
-        $this->assertEquals(['service_container', 'internal', 'bar', 'foo_bar', 'foo.baz', 'circular', 'throw_exception', 'throws_exception_on_service_configuration', 'internal_dependency', 'foo'], $sc->getServiceIds(), '->getServiceIds() returns defined service ids by factory methods in the method map, followed by service ids defined by set()');
+        $this->assertEquals(['service_container', 'internal', 'bar', 'foo_bar', 'foo.baz', 'circular', 'throw_exception', 'throws_exception_on_service_configuration', 'internal_dependency', 'alias', 'foo'], $sc->getServiceIds(), '->getServiceIds() returns defined service ids by factory methods in the method map, followed by service ids defined by set()');
     }
 
     /**
@@ -169,7 +168,7 @@ public function testGetLegacyServiceIds()
         $sc = new LegacyProjectServiceContainer();
         $sc->set('foo', $obj = new \stdClass());
 
-        $this->assertEquals(['internal', 'bar', 'foo_bar', 'foo.baz', 'circular', 'throw_exception', 'throws_exception_on_service_configuration', 'service_container', 'foo'], $sc->getServiceIds(), '->getServiceIds() returns defined service ids by getXXXService() methods, followed by service ids defined by set()');
+        $this->assertEquals(['internal', 'bar', 'foo_bar', 'foo.baz', 'circular', 'throw_exception', 'throws_exception_on_service_configuration', 'service_container', 'alias', 'foo'], $sc->getServiceIds(), '->getServiceIds() returns defined service ids by getXXXService() methods, followed by service ids defined by set()');
     }
 
     public function testSet()
@@ -331,24 +330,20 @@ public function testGetCircularReference()
         }
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
-     * @expectedExceptionMessage The "request" service is synthetic, it needs to be set at boot time before it can be used.
-     */
     public function testGetSyntheticServiceThrows()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException');
+        $this->expectExceptionMessage('The "request" service is synthetic, it needs to be set at boot time before it can be used.');
         require_once __DIR__.'/Fixtures/php/services9_compiled.php';
 
         $container = new \ProjectServiceContainer();
         $container->get('request');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
-     * @expectedExceptionMessage The "inlined" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.
-     */
     public function testGetRemovedServiceThrows()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException');
+        $this->expectExceptionMessage('The "inlined" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.');
         require_once __DIR__.'/Fixtures/php/services9_compiled.php';
 
         $container = new \ProjectServiceContainer();
@@ -386,6 +381,16 @@ public function testLegacyHas()
         $this->assertTrue($sc->has('foo\\baz'), '->has() returns true if a get*Method() is defined');
     }
 
+    public function testScalarService()
+    {
+        $c = new Container();
+
+        $c->set('foo', 'some value');
+
+        $this->assertTrue($c->has('foo'));
+        $this->assertSame('some value', $c->get('foo'));
+    }
+
     public function testInitialized()
     {
         $sc = new ProjectServiceContainer();
@@ -420,12 +425,10 @@ public function testReset()
         $this->assertNull($c->get('bar', ContainerInterface::NULL_ON_INVALID_REFERENCE));
     }
 
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage Something went terribly wrong!
-     */
     public function testGetThrowsException()
     {
+        $this->expectException('Exception');
+        $this->expectExceptionMessage('Something went terribly wrong!');
         $c = new ProjectServiceContainer();
 
         try {
diff --git a/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php b/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
index ac58d3455183b6c7266957822f3d35020a0c7aed..8d382f81f863f90b882de7a40df8daefec10064a 100644
--- a/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
+++ b/vendor/symfony/dependency-injection/Tests/DefinitionDecoratorTest.php
@@ -92,11 +92,9 @@ public function testSetArgument()
         $this->assertEquals(['index_0' => 'foo'], $def->getArguments());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testReplaceArgumentShouldRequireIntegerIndex()
     {
+        $this->expectException('InvalidArgumentException');
         $def = new DefinitionDecorator('foo');
 
         $def->replaceArgument('0', 'foo');
@@ -117,11 +115,9 @@ public function testReplaceArgument()
         $this->assertEquals([0 => 'foo', 1 => 'bar', 'index_1' => 'baz'], $def->getArguments());
     }
 
-    /**
-     * @expectedException \OutOfBoundsException
-     */
     public function testGetArgumentShouldCheckBounds()
     {
+        $this->expectException('OutOfBoundsException');
         $def = new DefinitionDecorator('foo');
 
         $def->setArguments([0 => 'foo']);
diff --git a/vendor/symfony/dependency-injection/Tests/DefinitionTest.php b/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
index 3581fe855037e3c2f53bb6a3d071967e0def6987..1f1cd380f9386ecd1add3089e30a888ae7e1602e 100644
--- a/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
+++ b/vendor/symfony/dependency-injection/Tests/DefinitionTest.php
@@ -69,12 +69,8 @@ public function testSetGetDecoratedService()
 
         $def = new Definition('stdClass');
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('InvalidArgumentException');
-            $this->expectExceptionMessage('The decorated service inner name for "foo" must be different than the service name itself.');
-        } else {
-            $this->setExpectedException('InvalidArgumentException', 'The decorated service inner name for "foo" must be different than the service name itself.');
-        }
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The decorated service inner name for "foo" must be different than the service name itself.');
 
         $def->setDecoratedService('foo', 'foo');
     }
@@ -101,12 +97,10 @@ public function testMethodCalls()
         $this->assertEquals([['foo', ['foo']]], $def->getMethodCalls(), '->removeMethodCall() removes a method to call');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Method name cannot be empty.
-     */
     public function testExceptionOnEmptyMethodCall()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Method name cannot be empty.');
         $def = new Definition('stdClass');
         $def->addMethodCall('');
     }
@@ -169,10 +163,10 @@ public function testSetIsDeprecated()
 
     /**
      * @dataProvider invalidDeprecationMessageProvider
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
      */
     public function testSetDeprecatedWithInvalidDeprecationTemplate($message)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $def = new Definition('stdClass');
         $def->setDeprecated(false, $message);
     }
@@ -254,35 +248,29 @@ public function testSetArgument()
         $this->assertSame(['foo', 'bar'], $def->getArguments());
     }
 
-    /**
-     * @expectedException \OutOfBoundsException
-     */
     public function testGetArgumentShouldCheckBounds()
     {
+        $this->expectException('OutOfBoundsException');
         $def = new Definition('stdClass');
 
         $def->addArgument('foo');
         $def->getArgument(1);
     }
 
-    /**
-     * @expectedException \OutOfBoundsException
-     * @expectedExceptionMessage The index "1" is not in the range [0, 0].
-     */
     public function testReplaceArgumentShouldCheckBounds()
     {
+        $this->expectException('OutOfBoundsException');
+        $this->expectExceptionMessage('The index "1" is not in the range [0, 0].');
         $def = new Definition('stdClass');
 
         $def->addArgument('foo');
         $def->replaceArgument(1, 'bar');
     }
 
-    /**
-     * @expectedException \OutOfBoundsException
-     * @expectedExceptionMessage Cannot replace arguments if none have been configured yet.
-     */
     public function testReplaceArgumentWithoutExistingArgumentsShouldCheckBounds()
     {
+        $this->expectException('OutOfBoundsException');
+        $this->expectExceptionMessage('Cannot replace arguments if none have been configured yet.');
         $def = new Definition('stdClass');
         $def->replaceArgument(0, 'bar');
     }
diff --git a/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php b/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
index a1ccb52b60329f7268d282e3b5f7d997f044ccb4..b2cbb3caf6283addb05e7464cac13f370a51966a 100644
--- a/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Dumper/PhpDumperTest.php
@@ -30,6 +30,7 @@
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\ServiceLocator;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\CustomDefinition;
+use Symfony\Component\DependencyInjection\Tests\Fixtures\ScalarFactory;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\TestServiceSubscriber;
 use Symfony\Component\DependencyInjection\TypedReference;
@@ -149,10 +150,10 @@ public function testDumpCustomContainerClassWithMandatoryArgumentLessConstructor
 
     /**
      * @dataProvider provideInvalidParameters
-     * @expectedException \InvalidArgumentException
      */
     public function testExportParameters($parameters)
     {
+        $this->expectException('InvalidArgumentException');
         $container = new ContainerBuilder(new ParameterBag($parameters));
         $container->compile();
         $dumper = new PhpDumper($container);
@@ -283,11 +284,11 @@ public function testConflictingMethodsWithParent()
 
     /**
      * @dataProvider provideInvalidFactories
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Cannot dump definition
      */
     public function testInvalidFactories($factory)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Cannot dump definition');
         $container = new ContainerBuilder();
         $def = new Definition('stdClass');
         $def->setPublic(true);
@@ -447,12 +448,10 @@ public function testFileEnvProcessor()
         $this->assertStringEqualsFile(__FILE__, $container->getParameter('random'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\EnvParameterException
-     * @expectedExceptionMessage Environment variables "FOO" are never used. Please, check your container's configuration.
-     */
     public function testUnusedEnvParameter()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\EnvParameterException');
+        $this->expectExceptionMessage('Environment variables "FOO" are never used. Please, check your container\'s configuration.');
         $container = new ContainerBuilder();
         $container->getParameter('env(FOO)');
         $container->compile();
@@ -460,12 +459,10 @@ public function testUnusedEnvParameter()
         $dumper->dump();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException
-     * @expectedExceptionMessage Circular reference detected for parameter "env(resolve:DUMMY_ENV_VAR)" ("env(resolve:DUMMY_ENV_VAR)" > "env(resolve:DUMMY_ENV_VAR)").
-     */
     public function testCircularDynamicEnv()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException');
+        $this->expectExceptionMessage('Circular reference detected for parameter "env(resolve:DUMMY_ENV_VAR)" ("env(resolve:DUMMY_ENV_VAR)" > "env(resolve:DUMMY_ENV_VAR)").');
         $container = new ContainerBuilder();
         $container->setParameter('foo', '%bar%');
         $container->setParameter('bar', '%env(resolve:DUMMY_ENV_VAR)%');
@@ -545,12 +542,8 @@ public function testCircularReferenceAllowanceForLazyServices()
         $dumper = new PhpDumper($container);
 
         $message = 'Circular reference detected for service "foo", path: "foo -> bar -> foo". Try running "composer require symfony/proxy-manager-bridge".';
-        if (method_exists($this, 'expectException')) {
-            $this->expectException(ServiceCircularReferenceException::class);
-            $this->expectExceptionMessage($message);
-        } else {
-            $this->setExpectedException(ServiceCircularReferenceException::class, $message);
-        }
+        $this->expectException(ServiceCircularReferenceException::class);
+        $this->expectExceptionMessage($message);
 
         $dumper->dump();
     }
@@ -841,6 +834,13 @@ public function testAlmostCircular($visibility)
         $this->assertEquals((object) ['bar6' => (object) []], $foo6);
 
         $this->assertInstanceOf(\stdClass::class, $container->get('root'));
+
+        $manager3 = $container->get('manager3');
+        $listener3 = $container->get('listener3');
+        $this->assertSame($manager3, $listener3->manager);
+
+        $listener4 = $container->get('listener4');
+        $this->assertInstanceOf('stdClass', $listener4);
     }
 
     public function provideAlmostCircular()
@@ -886,7 +886,7 @@ public function testInlineSelfRef()
             ->setPublic(true)
             ->addArgument($baz);
 
-        $passConfig = $container->getCompiler()->getPassConfig();
+        $container->getCompiler()->getPassConfig();
         $container->compile();
 
         $dumper = new PhpDumper($container);
@@ -978,7 +978,6 @@ public function testAdawsonContainer()
         $container->compile();
 
         $dumper = new PhpDumper($container);
-        $dump = $dumper->dump();
         $this->assertStringEqualsFile(self::$fixturesPath.'/php/services_adawson.php', $dumper->dump());
     }
 
@@ -1115,6 +1114,49 @@ public function testReferenceWithLowerCaseId()
 
         $this->assertEquals((object) ['foo' => (object) []], $container->get('Bar'));
     }
+
+    public function testScalarService()
+    {
+        $container = new ContainerBuilder();
+        $container->register('foo', 'string')
+            ->setPublic(true)
+            ->setFactory([ScalarFactory::class, 'getSomeValue'])
+        ;
+
+        $container->compile();
+
+        $dumper = new PhpDumper($container);
+        eval('?>'.$dumper->dump(['class' => 'Symfony_DI_PhpDumper_Test_Scalar_Service']));
+
+        $container = new \Symfony_DI_PhpDumper_Test_Scalar_Service();
+
+        $this->assertTrue($container->has('foo'));
+        $this->assertSame('some value', $container->get('foo'));
+    }
+
+    public function testAliasCanBeFoundInTheDumpedContainerWhenBothTheAliasAndTheServiceArePublic()
+    {
+        $container = new ContainerBuilder();
+
+        $container->register('foo', 'stdClass')->setPublic(true);
+        $container->setAlias('bar', 'foo')->setPublic(true);
+
+        $container->compile();
+
+        // Bar is found in the compiled container
+        $service_ids = $container->getServiceIds();
+        $this->assertContains('bar', $service_ids);
+
+        $dumper = new PhpDumper($container);
+        $dump = $dumper->dump(['class' => 'Symfony_DI_PhpDumper_AliasesCanBeFoundInTheDumpedContainer']);
+        eval('?>'.$dump);
+
+        $container = new \Symfony_DI_PhpDumper_AliasesCanBeFoundInTheDumpedContainer();
+
+        // Bar should still be found in the compiled container
+        $service_ids = $container->getServiceIds();
+        $this->assertContains('bar', $service_ids);
+    }
 }
 
 class Rot13EnvVarProcessor implements EnvVarProcessorInterface
diff --git a/vendor/symfony/dependency-injection/Tests/EnvVarProcessorTest.php b/vendor/symfony/dependency-injection/Tests/EnvVarProcessorTest.php
index 972350467a0218d869fcd25336b7944d136ccee6..2830d46a7bc93ff2764940d5d1695f88a46a7e54 100644
--- a/vendor/symfony/dependency-injection/Tests/EnvVarProcessorTest.php
+++ b/vendor/symfony/dependency-injection/Tests/EnvVarProcessorTest.php
@@ -98,12 +98,12 @@ public function validInts()
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Non-numeric env var
      * @dataProvider invalidInts
      */
     public function testGetEnvIntInvalid($value)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Non-numeric env var');
         $processor = new EnvVarProcessor(new Container());
 
         $processor->getEnv('int', 'foo', function ($name) use ($value) {
@@ -148,12 +148,12 @@ public function validFloats()
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Non-numeric env var
      * @dataProvider invalidFloats
      */
     public function testGetEnvFloatInvalid($value)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Non-numeric env var');
         $processor = new EnvVarProcessor(new Container());
 
         $processor->getEnv('float', 'foo', function ($name) use ($value) {
@@ -197,12 +197,12 @@ public function validConsts()
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage undefined constant
      * @dataProvider invalidConsts
      */
     public function testGetEnvConstInvalid($value)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('undefined constant');
         $processor = new EnvVarProcessor(new Container());
 
         $processor->getEnv('const', 'foo', function ($name) use ($value) {
@@ -246,12 +246,10 @@ public function testGetEnvJson()
         $this->assertSame([1], $result);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Syntax error
-     */
     public function testGetEnvInvalidJson()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Syntax error');
         $processor = new EnvVarProcessor(new Container());
 
         $processor->getEnv('json', 'foo', function ($name) {
@@ -262,12 +260,12 @@ public function testGetEnvInvalidJson()
     }
 
     /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Invalid JSON env var
      * @dataProvider otherJsonValues
      */
     public function testGetEnvJsonOther($value)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Invalid JSON env var');
         $processor = new EnvVarProcessor(new Container());
 
         $processor->getEnv('json', 'foo', function ($name) use ($value) {
@@ -287,12 +285,10 @@ public function otherJsonValues()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Unsupported env var prefix
-     */
     public function testGetEnvUnknown()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Unsupported env var prefix');
         $processor = new EnvVarProcessor(new Container());
 
         $processor->getEnv('unknown', 'foo', function ($name) {
diff --git a/vendor/symfony/dependency-injection/Tests/Extension/ExtensionTest.php b/vendor/symfony/dependency-injection/Tests/Extension/ExtensionTest.php
index 3c912f2a13678acd04638f6ac64a70f76e752644..9f35b4a4193de7f686dff4f13511135fdbceee23 100644
--- a/vendor/symfony/dependency-injection/Tests/Extension/ExtensionTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Extension/ExtensionTest.php
@@ -34,12 +34,10 @@ public function getResolvedEnabledFixtures()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The config array has no 'enabled' key.
-     */
     public function testIsConfigEnabledOnNonEnableableConfig()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The config array has no \'enabled\' key.');
         $extension = new EnableableExtension();
 
         $extension->isConfigEnabled(new ContainerBuilder(), []);
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir2/Service2.php b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir2/Service2.php
index 44e7cacd2b70c4de056d7552fc9ccc2f88ae462b..ba103fce0803b2661cb74cdc8f05e083c4716610 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir2/Service2.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir2/Service2.php
@@ -4,5 +4,4 @@
 
 class Service2
 {
-
 }
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir3/Service3.php b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir3/Service3.php
deleted file mode 100644
index ee6498c9d50c590ed744fa04b96ab081d29e1ac0..0000000000000000000000000000000000000000
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component1/Dir3/Service3.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\OtherDir\Component1\Dir3;
-
-class Service3
-{
-
-}
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component2/Dir2/Service5.php b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component2/Dir2/Service5.php
index 691b427712e7147accb6221adf31d82fee9ea3d7..d2cff5b954305c116fce2e178e53afdab53ce0ba 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component2/Dir2/Service5.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/OtherDir/Component2/Dir2/Service5.php
@@ -4,5 +4,4 @@
 
 class Service5
 {
-
 }
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadAbstractBar.php b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadAbstractBar.php
deleted file mode 100644
index 0b72234aae7a6a290fa7370549a4e29dee63831e..0000000000000000000000000000000000000000
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadAbstractBar.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub;
-
-abstract class NoLoadAbstractBar
-{
-}
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadBarInterface.php b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadBarInterface.php
deleted file mode 100644
index dffb05352b3c0e1491d67b8eae7338e430b70ebc..0000000000000000000000000000000000000000
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadBarInterface.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub;
-
-interface NoLoadBarInterface
-{
-}
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadBarTrait.php b/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadBarTrait.php
deleted file mode 100644
index 5a961ee7684c320bcf5faf1b300d07fcc8bb8733..0000000000000000000000000000000000000000
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/Prototype/Sub/NoLoadBarTrait.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub;
-
-trait NoLoadBarTrait
-{
-}
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/ScalarFactory.php b/vendor/symfony/dependency-injection/Tests/Fixtures/ScalarFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..15646a8d0c5d7ef40cfdec07dc1616310a5a1ded
--- /dev/null
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/ScalarFactory.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
+
+final class ScalarFactory
+{
+    /**
+     * @return string
+     */
+    public static function getSomeValue()
+    {
+        return 'some value';
+    }
+}
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/StubbedTranslator.php b/vendor/symfony/dependency-injection/Tests/Fixtures/StubbedTranslator.php
index 8e1c2a6ce53461ad8a0214ce43f7c44b23e17410..eed18426a7ff9b7ed7a669550a958487c6dff282 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/StubbedTranslator.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/StubbedTranslator.php
@@ -20,7 +20,6 @@ class StubbedTranslator
 {
     public function __construct(ContainerInterface $container)
     {
-
     }
 
     public function addResource($format, $resource, $locale, $domain = null)
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php b/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php
index 5b3c01c23cd52dde4001a3fdcab6de6ab445af2b..edcd045eaabbbefcd4397b0f6098e1a9510f1716 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container8.php
@@ -9,6 +9,17 @@
     'bar' => 'foo is %%foo bar',
     'escape' => '@escapeme',
     'values' => [true, false, null, 0, 1000.3, 'true', 'false', 'null'],
+    'null string' => 'null',
+    'string of digits' => '123',
+    'string of digits prefixed with minus character' => '-123',
+    'true string' => 'true',
+    'false string' => 'false',
+    'binary number string' => '0b0110',
+    'numeric string' => '-1.2E2',
+    'hexadecimal number string' => '0xFF',
+    'float string' => '10100.1',
+    'positive float string' => '+10100.1',
+    'negative float string' => '-10100.1',
 ]));
 
 return $container;
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container_almost_circular.php b/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container_almost_circular.php
index df136cfa5ddbaa1fe9f42cbd15ff03bf98d8edaa..a1f885399bd5884bd1723317efb5774ddce60d8d 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container_almost_circular.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/containers/container_almost_circular.php
@@ -2,7 +2,6 @@
 
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Definition;
-use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Tests\Fixtures\FooForCircularWithAddCalls;
 
@@ -102,6 +101,35 @@
 $container->register('subscriber2', 'stdClass')->setPublic(false)
     ->addArgument(new Reference('manager2'));
 
+// doctrine-like event system with listener
+
+$container->register('manager3', 'stdClass')
+    ->setLazy(true)
+    ->setPublic(true)
+    ->addArgument(new Reference('connection3'));
+
+$container->register('connection3', 'stdClass')
+    ->setPublic($public)
+    ->setProperty('listener', [new Reference('listener3')]);
+
+$container->register('listener3', 'stdClass')
+    ->setPublic(true)
+    ->setProperty('manager', new Reference('manager3'));
+
+// doctrine-like event system with small differences
+
+$container->register('manager4', 'stdClass')
+    ->setLazy(true)
+    ->addArgument(new Reference('connection4'));
+
+$container->register('connection4', 'stdClass')
+    ->setPublic($public)
+    ->setProperty('listener', [new Reference('listener4')]);
+
+$container->register('listener4', 'stdClass')
+    ->setPublic(true)
+    ->addArgument(new Reference('manager4'));
+
 // private service involved in a loop
 
 $container->register('foo6', 'stdClass')
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/includes/autowiring_classes.php b/vendor/symfony/dependency-injection/Tests/Fixtures/includes/autowiring_classes.php
index 6f93957753a492b7814f1d0ea7d4e7cbaea62bc4..5cf151ef8401fe91432b6a7e614a0bc0f5cc325a 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/includes/autowiring_classes.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/includes/autowiring_classes.php
@@ -116,20 +116,6 @@ public function __construct(CollisionInterface $collision)
     }
 }
 
-class CannotBeAutowiredForwardOrder
-{
-    public function __construct(CollisionA $a, CollisionInterface $b, CollisionB $c)
-    {
-    }
-}
-
-class CannotBeAutowiredReverseOrder
-{
-    public function __construct(CollisionA $a, CollisionB $c, CollisionInterface $b)
-    {
-    }
-}
-
 class Lille
 {
 }
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_constructor_without_arguments.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_constructor_without_arguments.php
index 7495110dd877e0d77fc37681760115cd41d58821..56f59d9ddc2ab815984d246e7fb8bb6df89f96f2 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_constructor_without_arguments.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_constructor_without_arguments.php
@@ -18,7 +18,7 @@
  */
 class ProjectServiceContainer extends \Symfony\Component\DependencyInjection\Tests\Fixtures\Container\ConstructorWithoutArgumentsContainer
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_mandatory_constructor_arguments.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_mandatory_constructor_arguments.php
index eb573f9baecfdd450c283377c79b1243156d5659..9e1abeb447b4e8bb29f50f7089ec0aa14e2d9cf6 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_mandatory_constructor_arguments.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_mandatory_constructor_arguments.php
@@ -18,7 +18,7 @@
  */
 class ProjectServiceContainer extends \Symfony\Component\DependencyInjection\Tests\Fixtures\Container\ConstructorWithMandatoryArgumentsContainer
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_optional_constructor_arguments.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_optional_constructor_arguments.php
index d322f80a0f19bc328974a2a3d57d79fd03403cc3..2fe30f22eff08ea550dc34eba8b3aba26580ab47 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_optional_constructor_arguments.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_with_optional_constructor_arguments.php
@@ -18,7 +18,7 @@
  */
 class ProjectServiceContainer extends \Symfony\Component\DependencyInjection\Tests\Fixtures\Container\ConstructorWithOptionalArgumentsContainer
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_without_constructor.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_without_constructor.php
index 68bc1ef8beb1d013d1e334ca0f7d29673b265e12..c630ad090ffb0e443bfd09b426e7a70840fac2b4 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_without_constructor.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/custom_container_class_without_constructor.php
@@ -18,7 +18,7 @@
  */
 class ProjectServiceContainer extends \Symfony\Component\DependencyInjection\Tests\Fixtures\Container\NoConstructorContainer
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php
index ed085a5ef91a4620d04bfed2f1d9a28988fe9c9f..3c0ced8e9f62c6421f7f5a14281e6de8ad68175c 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1-1.php
@@ -18,7 +18,7 @@
  */
 class Container extends \Symfony\Component\DependencyInjection\Dump\AbstractContainer
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1.php
index 9733ba9c6c82e99003ec158760ad5aeb2888432d..f7d49dd4da954e34387d35ff75aeb6fd05d7e694 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services1.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php
index 1b7443352df9ef8e0edcbdff7eba0a690d51db34..961282993fd32a3ec96249e5136ad3171ac72b46 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services10.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php
index ba564b82f4a5c05261729e686a04a0fdaf063990..0e8f581e8ab7ae3b01fed7a7fd59d87c79e39072 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services12.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services13.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services13.php
index 40ce06decaeffa0af5a7f5f5cf5bc6e5b3fe801c..52f5cf25fda8ec8adfab4155d27b62a8d3f0906c 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services13.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services13.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services19.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services19.php
index 664f4dd907436fa740fcf61c971edc82f17d471f..6f6f6045198c4c8e774a3059ddc475258ac1ed02 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services19.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services19.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services24.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services24.php
index b277ddd1c2d2219bbafe7db8e565622641618cc7..963118e209649a615b903ffbd413ecd5d15f19e5 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services24.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services24.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services26.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services26.php
index 595d12ba608174f761edf154e197a594439e8737..95055207d1a560c7a425830750e2ea69d19c19d0 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services26.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services26.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_EnvParameters extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services33.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services33.php
index d4019a50a7ed50a983092050380bb5f206f1d943..915d0537367e40e637f54b620e1f5f98b0ca5e30 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services33.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services33.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php
index cc78c196acb805fbfc0c79c888540df2fbfff790..e7a0214a10f536f7b75e17ade061b3066002ff1c 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services8.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
@@ -151,6 +151,17 @@ protected function getDefaultParameters()
                 6 => 'false',
                 7 => 'null',
             ],
+            'null string' => 'null',
+            'string of digits' => '123',
+            'string of digits prefixed with minus character' => '-123',
+            'true string' => 'true',
+            'false string' => 'false',
+            'binary number string' => '0b0110',
+            'numeric string' => '-1.2E2',
+            'hexadecimal number string' => '0xFF',
+            'float string' => '10100.1',
+            'positive float string' => '+10100.1',
+            'negative float string' => '-10100.1',
         ];
     }
 }
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php
index 0e09ec624dbe068401c6ef74e5acd73e6cbf90a2..6dd0baabdce4af3ad0a9a6bc86fbdd26e51f9422 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_as_files.txt b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_as_files.txt
index 2dc415ced49717ea50f6474749255bfa1a5e8b91..ab7024fa5dbc6180dcb697674bf113cd740851a3 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_as_files.txt
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_as_files.txt
@@ -277,7 +277,7 @@ class ProjectServiceContainer extends Container
 {
     private $buildParameters;
     private $containerDir;
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct(array $buildParameters = [], $containerDir = __DIR__)
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php
index 02e0680da0ef35ad266e03e0f62300d909bb9ba0..c9df13b2e001a02a48f81f0b277696297b4c2c47 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services9_compiled.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_adawson.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_adawson.php
index 7986897d375ab44bc42e73ba5bde14384085697b..f4364df7fc80bc14d4dcb75c9f7f936128b4245e 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_adawson.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_adawson.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_private.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_private.php
index 5345aa3b308a84f2993c996ac2cc101919b1fb6e..775235db69410aa26e31612179e4445b9a4f5b37 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_private.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_private.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Almost_Circular_Private extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
@@ -39,9 +39,13 @@ public function __construct()
             'level4' => 'getLevel4Service',
             'level5' => 'getLevel5Service',
             'level6' => 'getLevel6Service',
+            'listener3' => 'getListener3Service',
+            'listener4' => 'getListener4Service',
             'logger' => 'getLoggerService',
             'manager' => 'getManagerService',
             'manager2' => 'getManager2Service',
+            'manager3' => 'getManager3Service',
+            'manager4' => 'getManager4Service',
             'multiuse1' => 'getMultiuse1Service',
             'root' => 'getRootService',
             'subscriber' => 'getSubscriberService',
@@ -53,6 +57,7 @@ public function __construct()
             'level4' => true,
             'level5' => true,
             'level6' => true,
+            'manager4' => true,
             'multiuse1' => true,
         ];
 
@@ -69,6 +74,8 @@ public function getRemovedIds()
             'bar6' => true,
             'config' => true,
             'config2' => true,
+            'connection3' => true,
+            'connection4' => true,
             'dispatcher' => true,
             'dispatcher2' => true,
             'foo4' => true,
@@ -81,6 +88,7 @@ public function getRemovedIds()
             'level5' => true,
             'level6' => true,
             'logger2' => true,
+            'manager4' => true,
             'multiuse1' => true,
             'subscriber2' => true,
         ];
@@ -272,6 +280,36 @@ protected function getFoobar4Service()
         return $instance;
     }
 
+    /**
+     * Gets the public 'listener3' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getListener3Service()
+    {
+        $this->services['listener3'] = $instance = new \stdClass();
+
+        $instance->manager = ${($_ = isset($this->services['manager3']) ? $this->services['manager3'] : $this->getManager3Service()) && false ?: '_'};
+
+        return $instance;
+    }
+
+    /**
+     * Gets the public 'listener4' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getListener4Service()
+    {
+        $a = ${($_ = isset($this->services['manager4']) ? $this->services['manager4'] : $this->getManager4Service()) && false ?: '_'};
+
+        if (isset($this->services['listener4'])) {
+            return $this->services['listener4'];
+        }
+
+        return $this->services['listener4'] = new \stdClass($a);
+    }
+
     /**
      * Gets the public 'logger' shared service.
      *
@@ -324,6 +362,24 @@ protected function getManager2Service()
         return $this->services['manager2'] = new \stdClass($a);
     }
 
+    /**
+     * Gets the public 'manager3' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getManager3Service($lazyLoad = true)
+    {
+        $a = ${($_ = isset($this->services['listener3']) ? $this->services['listener3'] : $this->getListener3Service()) && false ?: '_'};
+
+        if (isset($this->services['manager3'])) {
+            return $this->services['manager3'];
+        }
+        $b = new \stdClass();
+        $b->listener = [0 => $a];
+
+        return $this->services['manager3'] = new \stdClass($b);
+    }
+
     /**
      * Gets the public 'root' shared service.
      *
@@ -430,6 +486,22 @@ protected function getLevel6Service()
         return $instance;
     }
 
+    /**
+     * Gets the private 'manager4' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getManager4Service($lazyLoad = true)
+    {
+        $a = new \stdClass();
+
+        $this->services['manager4'] = $instance = new \stdClass($a);
+
+        $a->listener = [0 => ${($_ = isset($this->services['listener4']) ? $this->services['listener4'] : $this->getListener4Service()) && false ?: '_'}];
+
+        return $instance;
+    }
+
     /**
      * Gets the private 'multiuse1' shared service.
      *
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_public.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_public.php
index b569b335fc857e3f08666545d3232c7e9518e3e6..d3bab9128a5ee5937565cc342ae75b1593ed2ff8 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_public.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_almost_circular_public.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Almost_Circular_Public extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
@@ -30,6 +30,8 @@ public function __construct()
             'baz6' => 'getBaz6Service',
             'connection' => 'getConnectionService',
             'connection2' => 'getConnection2Service',
+            'connection3' => 'getConnection3Service',
+            'connection4' => 'getConnection4Service',
             'dispatcher' => 'getDispatcherService',
             'dispatcher2' => 'getDispatcher2Service',
             'foo' => 'getFooService',
@@ -46,9 +48,13 @@ public function __construct()
             'level4' => 'getLevel4Service',
             'level5' => 'getLevel5Service',
             'level6' => 'getLevel6Service',
+            'listener3' => 'getListener3Service',
+            'listener4' => 'getListener4Service',
             'logger' => 'getLoggerService',
             'manager' => 'getManagerService',
             'manager2' => 'getManager2Service',
+            'manager3' => 'getManager3Service',
+            'manager4' => 'getManager4Service',
             'multiuse1' => 'getMultiuse1Service',
             'root' => 'getRootService',
             'subscriber' => 'getSubscriberService',
@@ -60,6 +66,7 @@ public function __construct()
             'level4' => true,
             'level5' => true,
             'level6' => true,
+            'manager4' => true,
             'multiuse1' => true,
         ];
 
@@ -81,6 +88,7 @@ public function getRemovedIds()
             'level5' => true,
             'level6' => true,
             'logger2' => true,
+            'manager4' => true,
             'multiuse1' => true,
             'subscriber2' => true,
         ];
@@ -212,6 +220,34 @@ protected function getConnection2Service()
         return $instance;
     }
 
+    /**
+     * Gets the public 'connection3' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getConnection3Service()
+    {
+        $this->services['connection3'] = $instance = new \stdClass();
+
+        $instance->listener = [0 => ${($_ = isset($this->services['listener3']) ? $this->services['listener3'] : $this->getListener3Service()) && false ?: '_'}];
+
+        return $instance;
+    }
+
+    /**
+     * Gets the public 'connection4' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getConnection4Service()
+    {
+        $this->services['connection4'] = $instance = new \stdClass();
+
+        $instance->listener = [0 => ${($_ = isset($this->services['listener4']) ? $this->services['listener4'] : $this->getListener4Service()) && false ?: '_'}];
+
+        return $instance;
+    }
+
     /**
      * Gets the public 'dispatcher' shared service.
      *
@@ -372,6 +408,36 @@ protected function getFoobar4Service()
         return $instance;
     }
 
+    /**
+     * Gets the public 'listener3' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getListener3Service()
+    {
+        $this->services['listener3'] = $instance = new \stdClass();
+
+        $instance->manager = ${($_ = isset($this->services['manager3']) ? $this->services['manager3'] : $this->getManager3Service()) && false ?: '_'};
+
+        return $instance;
+    }
+
+    /**
+     * Gets the public 'listener4' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getListener4Service()
+    {
+        $a = ${($_ = isset($this->services['manager4']) ? $this->services['manager4'] : $this->getManager4Service()) && false ?: '_'};
+
+        if (isset($this->services['listener4'])) {
+            return $this->services['listener4'];
+        }
+
+        return $this->services['listener4'] = new \stdClass($a);
+    }
+
     /**
      * Gets the public 'logger' shared service.
      *
@@ -424,6 +490,22 @@ protected function getManager2Service()
         return $this->services['manager2'] = new \stdClass($a);
     }
 
+    /**
+     * Gets the public 'manager3' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getManager3Service($lazyLoad = true)
+    {
+        $a = ${($_ = isset($this->services['connection3']) ? $this->services['connection3'] : $this->getConnection3Service()) && false ?: '_'};
+
+        if (isset($this->services['manager3'])) {
+            return $this->services['manager3'];
+        }
+
+        return $this->services['manager3'] = new \stdClass($a);
+    }
+
     /**
      * Gets the public 'root' shared service.
      *
@@ -530,6 +612,22 @@ protected function getLevel6Service()
         return $instance;
     }
 
+    /**
+     * Gets the private 'manager4' shared service.
+     *
+     * @return \stdClass
+     */
+    protected function getManager4Service($lazyLoad = true)
+    {
+        $a = ${($_ = isset($this->services['connection4']) ? $this->services['connection4'] : $this->getConnection4Service()) && false ?: '_'};
+
+        if (isset($this->services['manager4'])) {
+            return $this->services['manager4'];
+        }
+
+        return $this->services['manager4'] = new \stdClass($a);
+    }
+
     /**
      * Gets the private 'multiuse1' shared service.
      *
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_array_params.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_array_params.php
index be59456b0f1d260dd268ce25416a893e4a407147..dd1ca0a61ce9bc120fb59b96d24f2ae32a20cd4e 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_array_params.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_array_params.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_base64_env.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_base64_env.php
index 8582c3e2df847f2df87e934b33a10623c95cf1e9..709a3c4f8eb52c0e5f1364353acc6c17902e35cf 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_base64_env.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_base64_env.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Base64Parameters extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_dedup_lazy_proxy.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_dedup_lazy_proxy.php
index ec3c8028bb8ccd9610f93c5a7ecd0c4bd28f7aed..096b3b3964e08b1960a08bbfa285246a60c77b2f 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_dedup_lazy_proxy.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_dedup_lazy_proxy.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_deep_graph.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_deep_graph.php
index 4158fc6288f7b7c6c4d15322a49f5be0eee54312..0e3eed27fdfa58741951c5de65b7b6975d714c6f 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_deep_graph.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_deep_graph.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Deep_Graph extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_env_in_id.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_env_in_id.php
index ad76566b1af9dbdf743ce6c22a3bc258eab379d2..e0e4827df95275390056f7603b4d0af8ef8f3c62 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_env_in_id.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_env_in_id.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_requires.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_requires.php
index 59582d9eb57504485e4614d07e18a6d97762cb82..84187883645ca02a555ecdd5760a77cc0c46e409 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_requires.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_requires.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_self_ref.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_self_ref.php
index 271aeb668b272e7151e7257c6422b225d741c4ad..906b0cdc70f93d2750f972cb51da9469f83083a1 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_self_ref.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_inline_self_ref.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Inline_Self_Ref extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_legacy_privates.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_legacy_privates.php
index 30dd2c9ba978b3a0259cc6a27e7f0bfe74e7dc72..9a06061738dbcfe0ecb6c9e92e01e6766cf58204 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_legacy_privates.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_legacy_privates.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Legacy_Privates extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_locator.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_locator.php
index 4969b2db09378313e14560d755e2417a2d534ba9..3826d5a6ee9d037cb41bae9babfd5f0d65664ea7 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_locator.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_locator.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_non_shared_lazy.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_non_shared_lazy.php
index b56063a1842a4c95165f414604fceabbc7b509a2..4cea5d2d97e619ed142322ea246192c44e5564af 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_non_shared_lazy.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_non_shared_lazy.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_frozen.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_frozen.php
index da1d716c58a3c72eb8d60db181215307b1a85004..95995dec622ef92121966df4890c323b54c58ffb 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_frozen.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_frozen.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_in_expression.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_in_expression.php
index c7fb579b0721592e31872a3583ac437d9d35d977..56d73c2551c5bbc543cb4d6b0ce49827f7bb664e 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_in_expression.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_private_in_expression.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_rot13_env.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_rot13_env.php
index 8d1465c44ba3a276b1453bf5d4044f1934c8400f..a7ad1f1c66ed1e8fe6e915d0f466d95bbe369452 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_rot13_env.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_rot13_env.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Rot13Parameters extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_subscriber.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_subscriber.php
index dbb51eab328528bd5ccd52878d4435624d9ac73b..ca89e01ccb7267c16c6310fd46d3c68ed309b749 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_subscriber.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_subscriber.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_tsantos.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_tsantos.php
index b14cdebb966c525661f00b4c20763d625cfd3434..b314feff73852d4904525dbc925e10352a5a1dd6 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_tsantos.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_tsantos.php
@@ -16,7 +16,7 @@
  */
 class ProjectServiceContainer extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_uninitialized_ref.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_uninitialized_ref.php
index 7a24f72c590c7d4379b779e0be8b9ff906ad5d69..a338c9d5262bdf147e5cf90b0efa6d61b55155d0 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_uninitialized_ref.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_uninitialized_ref.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Uninitialized_Reference extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_unsupported_characters.php b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_unsupported_characters.php
index a4c841cabe6e04eec32c141072f5578473ff1bee..9e7e817df19b4f9c1f668b7e9cd2d8b3f9643af5 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_unsupported_characters.php
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/php/services_unsupported_characters.php
@@ -16,7 +16,7 @@
  */
 class Symfony_DI_PhpDumper_Test_Unsupported_Characters extends Container
 {
-    private $parameters;
+    private $parameters = [];
     private $targetDirs = [];
 
     public function __construct()
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml b/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml
index d0f9015c5a5473f014b1db884937f94722d4dda9..4b07bbb7da50caaf550f334bc753f1d10bccea98 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/xml/services8.xml
@@ -18,6 +18,17 @@
       <parameter type="string">false</parameter>
       <parameter type="string">null</parameter>
     </parameter>
+    <parameter key="null string" type="string">null</parameter>
+    <parameter key="string of digits" type="string">123</parameter>
+    <parameter key="string of digits prefixed with minus character" type="string">-123</parameter>
+    <parameter key="true string" type="string">true</parameter>
+    <parameter key="false string" type="string">false</parameter>
+    <parameter key="binary number string" type="string">0b0110</parameter>
+    <parameter key="numeric string" type="string">-1.2E2</parameter>
+    <parameter key="hexadecimal number string" type="string">0xFF</parameter>
+    <parameter key="float string" type="string">10100.1</parameter>
+    <parameter key="positive float string" type="string">+10100.1</parameter>
+    <parameter key="negative float string" type="string">-10100.1</parameter>
   </parameters>
   <services>
     <service id="service_container" class="Symfony\Component\DependencyInjection\ContainerInterface" public="true" synthetic="true"/>
diff --git a/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml b/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml
index 4e37bc9315c9b7c41cbeb9dd1424988920c5eaaa..002b1d4bcd3a87946f8d31352cbe12a0fc1aa1a1 100644
--- a/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml
+++ b/vendor/symfony/dependency-injection/Tests/Fixtures/yaml/services8.yml
@@ -4,6 +4,17 @@ parameters:
     bar: 'foo is %%foo bar'
     escape: '@@escapeme'
     values: [true, false, null, 0, 1000.3, 'true', 'false', 'null']
+    null string: 'null'
+    string of digits: '123'
+    string of digits prefixed with minus character: '-123'
+    true string: 'true'
+    false string: 'false'
+    binary number string: '0b0110'
+    numeric string: '-1.2E2'
+    hexadecimal number string: '0xFF'
+    float string: '10100.1'
+    positive float string: '+10100.1'
+    negative float string: '-10100.1'
 
 services:
     service_container:
diff --git a/vendor/symfony/dependency-injection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php b/vendor/symfony/dependency-injection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php
index f93965f46ebfbb55a139c54d2c3539ccfe88e36a..7f757297bc35c684531aaf3020cd517bf951f4f3 100644
--- a/vendor/symfony/dependency-injection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php
+++ b/vendor/symfony/dependency-injection/Tests/LazyProxy/Instantiator/RealServiceInstantiatorTest.php
@@ -16,7 +16,7 @@
 use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\RealServiceInstantiator;
 
 /**
- * Tests for {@see \Symfony\Component\DependencyInjection\Instantiator\RealServiceInstantiator}.
+ * Tests for {@see \Symfony\Component\DependencyInjection\LazyProxy\Instantiator\RealServiceInstantiator}.
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  */
diff --git a/vendor/symfony/dependency-injection/Tests/LazyProxy/PhpDumper/NullDumperTest.php b/vendor/symfony/dependency-injection/Tests/LazyProxy/PhpDumper/NullDumperTest.php
index b1b9b399c37283edd39d734d7b829233c9b2ffa5..5ae14932454d7960a878ab1bdd921e8a32c0ee62 100644
--- a/vendor/symfony/dependency-injection/Tests/LazyProxy/PhpDumper/NullDumperTest.php
+++ b/vendor/symfony/dependency-injection/Tests/LazyProxy/PhpDumper/NullDumperTest.php
@@ -16,7 +16,7 @@
 use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\NullDumper;
 
 /**
- * Tests for {@see \Symfony\Component\DependencyInjection\PhpDumper\NullDumper}.
+ * Tests for {@see \Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\NullDumper}.
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  */
diff --git a/vendor/symfony/dependency-injection/Tests/Loader/DirectoryLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/DirectoryLoaderTest.php
index c7c303b683d996045226e5dd3d93fc38577ca2ed..b4f969a0efa0ace4f3be041942106583add3b3e5 100644
--- a/vendor/symfony/dependency-injection/Tests/Loader/DirectoryLoaderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Loader/DirectoryLoaderTest.php
@@ -58,12 +58,10 @@ public function testImports()
         $this->assertEquals(['ini' => 'ini', 'yaml' => 'yaml'], $this->container->getParameterBag()->all(), '->load() takes a single file that imports a directory');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The file "foo" does not exist (in:
-     */
     public function testExceptionIsRaisedWhenDirectoryDoesNotExist()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The file "foo" does not exist (in:');
         $this->loader->load('foo/');
     }
 
diff --git a/vendor/symfony/dependency-injection/Tests/Loader/FileLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/FileLoaderTest.php
index 065acdf1babcb53d261108f84678bd4e79c70048..ffe58a67ef3bba3bd875a4c0e2d368db6f6b57bf 100644
--- a/vendor/symfony/dependency-injection/Tests/Loader/FileLoaderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Loader/FileLoaderTest.php
@@ -178,18 +178,16 @@ public function testMissingParentClass()
 
         $this->assertTrue($container->has(MissingParent::class));
 
-        $this->assertSame(
-            ['While discovering services from namespace "Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\", an error was thrown when processing the class "Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\MissingParent": "Class Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\MissingClass not found".'],
-            $container->getDefinition(MissingParent::class)->getErrors()
+        $this->assertRegExp(
+            '{Class "?Symfony\\\\Component\\\\DependencyInjection\\\\Tests\\\\Fixtures\\\\Prototype\\\\BadClasses\\\\MissingClass"? not found}',
+            $container->getDefinition(MissingParent::class)->getErrors()[0]
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /Expected to find class "Symfony\\Component\\DependencyInjection\\Tests\\Fixtures\\Prototype\\Bar" in file ".+" while importing services from resource "Prototype\/Sub\/\*", but it was not found\! Check the namespace prefix used with the resource/
-     */
     public function testRegisterClassesWithBadPrefix()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Expected to find class "Symfony\\\Component\\\DependencyInjection\\\Tests\\\Fixtures\\\Prototype\\\Bar" in file ".+" while importing services from resource "Prototype\/Sub\/\*", but it was not found\! Check the namespace prefix used with the resource/');
         $container = new ContainerBuilder();
         $loader = new TestFileLoader($container, new FileLocator(self::$fixturesPath.'/Fixtures'));
 
diff --git a/vendor/symfony/dependency-injection/Tests/Loader/IniFileLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/IniFileLoaderTest.php
index 1d7d3a93ebd0928735f7e2be23ce95ade3130499..6f02b9ff6193cb84881b53b01d7b927ecb5cf15a 100644
--- a/vendor/symfony/dependency-injection/Tests/Loader/IniFileLoaderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Loader/IniFileLoaderTest.php
@@ -95,30 +95,24 @@ public function getTypeConversions()
         ];
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage The file "foo.ini" does not exist (in:
-     */
     public function testExceptionIsRaisedWhenIniFileDoesNotExist()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The file "foo.ini" does not exist (in:');
         $this->loader->load('foo.ini');
     }
 
-    /**
-     * @expectedException        \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The "nonvalid.ini" file is not valid.
-     */
     public function testExceptionIsRaisedWhenIniFileCannotBeParsed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The "nonvalid.ini" file is not valid.');
         @$this->loader->load('nonvalid.ini');
     }
 
-    /**
-     * @expectedException        \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The "almostvalid.ini" file is not valid.
-     */
     public function testExceptionIsRaisedWhenIniFileIsAlmostValid()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The "almostvalid.ini" file is not valid.');
         @$this->loader->load('almostvalid.ini');
     }
 
diff --git a/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php
index 4f7c16890b121a58caffd874f6aeed80eb9f7bda..e1812305e791f9fb060a4657e3d85dd26e64c017 100644
--- a/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Loader/PhpFileLoaderTest.php
@@ -77,12 +77,10 @@ public function provideConfig()
         }
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The service "child_service" cannot have a "parent" and also have "autoconfigure". Try disabling autoconfiguration for the service.
-     */
     public function testAutoConfigureAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The service "child_service" cannot have a "parent" and also have "autoconfigure". Try disabling autoconfiguration for the service.');
         $fixtures = realpath(__DIR__.'/../Fixtures');
         $container = new ContainerBuilder();
         $loader = new PhpFileLoader($container, new FileLocator());
@@ -90,12 +88,10 @@ public function testAutoConfigureAndChildDefinitionNotAllowed()
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid factory "factory:method": the `service:method` notation is not available when using PHP-based DI configuration. Use "[ref('factory'), 'method']" instead.
-     */
     public function testFactoryShortNotationNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid factory "factory:method": the `service:method` notation is not available when using PHP-based DI configuration. Use "[ref(\'factory\'), \'method\']" instead.');
         $fixtures = realpath(__DIR__.'/../Fixtures');
         $container = new ContainerBuilder();
         $loader = new PhpFileLoader($container, new FileLocator());
diff --git a/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
index 03376a641dcc02b83ca18a4901391896aa17c148..2b963968d8411bc3c2d0f89633b24455cb68e8c0 100644
--- a/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Loader/XmlFileLoaderTest.php
@@ -325,22 +325,18 @@ public function testParsesTags()
         }
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     */
     public function testParseTagsWithoutNameThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $container = new ContainerBuilder();
         $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
         $loader->load('tag_without_name.xml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The tag name for service ".+" in .* must be a non-empty string/
-     */
     public function testParseTagWithEmptyNameThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The tag name for service ".+" in .* must be a non-empty string/');
         $container = new ContainerBuilder();
         $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
         $loader->load('tag_with_empty_name.xml');
@@ -442,7 +438,7 @@ public function testExtensions()
 
             $e = $e->getPrevious();
             $this->assertInstanceOf('InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
-            $this->assertContains('The attribute \'bar\' is not allowed', $e->getMessage(), '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
+            $this->assertStringContainsString('The attribute \'bar\' is not allowed', $e->getMessage(), '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
         }
 
         // non-registered extension
@@ -482,7 +478,7 @@ public function testExtensionInPhar()
 
             $e = $e->getPrevious();
             $this->assertInstanceOf('InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
-            $this->assertContains('The attribute \'bar\' is not allowed', $e->getMessage(), '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
+            $this->assertStringContainsString('The attribute \'bar\' is not allowed', $e->getMessage(), '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
         }
     }
 
@@ -730,36 +726,30 @@ public function testInstanceof()
         $this->assertSame(['foo' => [[]], 'bar' => [[]]], $definition->getTags());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The service "child_service" cannot use the "parent" option in the same file where "instanceof" configuration is defined as using both is not supported. Move your child definitions to a separate file.
-     */
     public function testInstanceOfAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The service "child_service" cannot use the "parent" option in the same file where "instanceof" configuration is defined as using both is not supported. Move your child definitions to a separate file.');
         $container = new ContainerBuilder();
         $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
         $loader->load('services_instanceof_with_parent.xml');
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The service "child_service" cannot have a "parent" and also have "autoconfigure". Try setting autoconfigure="false" for the service.
-     */
     public function testAutoConfigureAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The service "child_service" cannot have a "parent" and also have "autoconfigure". Try setting autoconfigure="false" for the service.');
         $container = new ContainerBuilder();
         $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
         $loader->load('services_autoconfigure_with_parent.xml');
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Attribute "autowire" on service "child_service" cannot be inherited from "defaults" when a "parent" is set. Move your child definitions to a separate file or define this attribute explicitly.
-     */
     public function testDefaultsAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Attribute "autowire" on service "child_service" cannot be inherited from "defaults" when a "parent" is set. Move your child definitions to a separate file or define this attribute explicitly.');
         $container = new ContainerBuilder();
         $loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
         $loader->load('services_defaults_with_parent.xml');
@@ -818,7 +808,6 @@ public function testTsantosContainer()
         $container->compile();
 
         $dumper = new PhpDumper($container);
-        $dump = $dumper->dump();
         $this->assertStringEqualsFile(self::$fixturesPath.'/php/services_tsantos.php', $dumper->dump());
     }
 
diff --git a/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php b/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
index 05521bf7846f7a7c274bfde67029a3c9cb50bd3f..cce3921853e5d9adaceb74e3b5ed318db1d8d87f 100644
--- a/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
+++ b/vendor/symfony/dependency-injection/Tests/Loader/YamlFileLoaderTest.php
@@ -42,12 +42,10 @@ public static function setUpBeforeClass()
         require_once self::$fixturesPath.'/includes/ProjectExtension.php';
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The file ".+" does not exist./
-     */
     public function testLoadUnExistFile()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The file ".+" does not exist./');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/ini'));
         $r = new \ReflectionObject($loader);
         $m = $r->getMethod('loadFile');
@@ -56,12 +54,10 @@ public function testLoadUnExistFile()
         $m->invoke($loader, 'foo.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The file ".+" does not contain valid YAML./
-     */
     public function testLoadInvalidYamlFile()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The file ".+" does not contain valid YAML./');
         $path = self::$fixturesPath.'/ini';
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator($path));
         $r = new \ReflectionObject($loader);
@@ -73,10 +69,10 @@ public function testLoadInvalidYamlFile()
 
     /**
      * @dataProvider provideInvalidFiles
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
      */
     public function testLoadInvalidFile($file)
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
 
         $loader->load($file.'.yml');
@@ -301,40 +297,32 @@ public function testLoadYamlOnlyWithKeys()
         $this->assertEquals(['manager' => [['alias' => 'user']]], $definition->getTags());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The tag name for service ".+" in .+ must be a non-empty string/
-     */
     public function testTagWithEmptyNameThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The tag name for service ".+" in .+ must be a non-empty string/');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('tag_name_empty_string.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageREgExp /The tag name for service "\.+" must be a non-empty string/
-     */
     public function testTagWithNonStringNameThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The tag name for service ".+" in .+ must be a non-empty string/');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('tag_name_no_string.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     */
     public function testTypesNotArray()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('bad_types1.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     */
     public function testTypeNotString()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('bad_types2.yml');
     }
@@ -361,6 +349,9 @@ public function testParsesIteratorArgument()
         $lazyDefinition = $container->getDefinition('lazy_context');
 
         $this->assertEquals([new IteratorArgument(['k1' => new Reference('foo.baz'), 'k2' => new Reference('service_container')]), new IteratorArgument([])], $lazyDefinition->getArguments(), '->load() parses lazy arguments');
+
+        $message = 'The "deprecated_service" service is deprecated. You should stop using it, as it will soon be removed.';
+        $this->assertSame($message, $container->getDefinition('deprecated_service')->getDeprecationMessage('deprecated_service'));
     }
 
     public function testAutowire()
@@ -430,12 +421,10 @@ public function testPrototypeWithNamespace()
         $this->assertFalse($container->getDefinition(Prototype\OtherDir\Component2\Dir2\Service5::class)->hasTag('foo'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /A "resource" attribute must be set when the "namespace" attribute is set for service ".+" in .+/
-     */
     public function testPrototypeWithNamespaceAndNoResource()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/A "resource" attribute must be set when the "namespace" attribute is set for service ".+" in .+/');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('services_prototype_namespace_without_resource.yml');
@@ -506,58 +495,48 @@ public function testInstanceof()
         $this->assertSame(['foo' => [[]], 'bar' => [[]]], $definition->getTags());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The service "child_service" cannot use the "parent" option in the same file where "_instanceof" configuration is defined as using both is not supported. Move your child definitions to a separate file.
-     */
     public function testInstanceOfAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The service "child_service" cannot use the "parent" option in the same file where "_instanceof" configuration is defined as using both is not supported. Move your child definitions to a separate file.');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('services_instanceof_with_parent.yml');
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The service "child_service" cannot have a "parent" and also have "autoconfigure". Try setting "autoconfigure: false" for the service.
-     */
     public function testAutoConfigureAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The service "child_service" cannot have a "parent" and also have "autoconfigure". Try setting "autoconfigure: false" for the service.');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('services_autoconfigure_with_parent.yml');
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Attribute "autowire" on service "child_service" cannot be inherited from "_defaults" when a "parent" is set. Move your child definitions to a separate file or define this attribute explicitly.
-     */
     public function testDefaultsAndChildDefinitionNotAllowed()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Attribute "autowire" on service "child_service" cannot be inherited from "_defaults" when a "parent" is set. Move your child definitions to a separate file or define this attribute explicitly.');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('services_defaults_with_parent.yml');
         $container->compile();
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The value of the "decorates" option for the "bar" service must be the id of the service without the "@" prefix (replace "@foo" with "foo").
-     */
     public function testDecoratedServicesWithWrongSyntaxThrowsException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The value of the "decorates" option for the "bar" service must be the id of the service without the "@" prefix (replace "@foo" with "foo").');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('bad_decorates.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /Parameter "tags" must be an array for service "Foo\\Bar" in .+services31_invalid_tags\.yml\. Check your YAML syntax./
-     */
     public function testInvalidTagsWithDefaults()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Parameter "tags" must be an array for service "Foo\\\Bar" in .+services31_invalid_tags\.yml\. Check your YAML syntax./');
         $loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('services31_invalid_tags.yml');
     }
@@ -596,7 +575,7 @@ public function testAnonymousServices()
 
         // Anonymous service in a callable
         $factory = $definition->getFactory();
-        $this->assertInternalType('array', $factory);
+        $this->assertIsArray($factory);
         $this->assertInstanceOf(Reference::class, $factory[0]);
         $this->assertTrue($container->has((string) $factory[0]));
         $this->assertRegExp('/^\d+_Quz~[._A-Za-z0-9]{7}$/', (string) $factory[0]);
@@ -646,23 +625,19 @@ public function testAnonymousServicesInInstanceof()
         $this->assertFalse($container->has('Bar'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /Creating an alias using the tag "!service" is not allowed in ".+anonymous_services_alias\.yml"\./
-     */
     public function testAnonymousServicesWithAliases()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Creating an alias using the tag "!service" is not allowed in ".+anonymous_services_alias\.yml"\./');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('anonymous_services_alias.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /Using an anonymous service in a parameter is not allowed in ".+anonymous_services_in_parameters\.yml"\./
-     */
     public function testAnonymousServicesInParameters()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Using an anonymous service in a parameter is not allowed in ".+anonymous_services_in_parameters\.yml"\./');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('anonymous_services_in_parameters.yml');
@@ -678,23 +653,19 @@ public function testAutoConfigureInstanceof()
         $this->assertFalse($container->getDefinition('override_defaults_settings_to_false')->isAutoconfigured());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /Service "_defaults" key must be an array, "NULL" given in ".+bad_empty_defaults\.yml"\./
-     */
     public function testEmptyDefaultsThrowsClearException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Service "_defaults" key must be an array, "NULL" given in ".+bad_empty_defaults\.yml"\./');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('bad_empty_defaults.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessageRegExp /Service "_instanceof" key must be an array, "NULL" given in ".+bad_empty_instanceof\.yml"\./
-     */
     public function testEmptyInstanceofThrowsClearException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/Service "_instanceof" key must be an array, "NULL" given in ".+bad_empty_instanceof\.yml"\./');
         $container = new ContainerBuilder();
         $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
         $loader->load('bad_empty_instanceof.yml');
@@ -749,4 +720,17 @@ public function testOverriddenDefaultsBindings()
 
         $this->assertSame('overridden', $container->get('bar')->quz);
     }
+
+    /**
+     * @group legacy
+     * @expectedDeprecation The configuration key "factory" is unsupported for the service "foo" which is defined as an alias in %s.
+     * @expectedDeprecation The configuration key "parent" is unsupported for the service "foo" which is defined as an alias in %s.
+     */
+    public function testAliasDefinitionContainsUnsupportedElements()
+    {
+        $container = new ContainerBuilder();
+        $loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
+        $loader->load('legacy_invalid_alias_definition.yml');
+        $this->assertTrue($container->has('foo'));
+    }
 }
diff --git a/vendor/symfony/dependency-injection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php b/vendor/symfony/dependency-injection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php
index e7c88d2bb58ec91162d4d39f75938e9cd1a2b6b4..4fcb2c8405d21f4d9463b12a87977e5ed8f9dc9b 100644
--- a/vendor/symfony/dependency-injection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php
@@ -16,11 +16,9 @@
 
 class EnvPlaceholderParameterBagTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     */
     public function testGetThrowsInvalidArgumentExceptionIfEnvNameContainsNonWordCharacters()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
         $bag = new EnvPlaceholderParameterBag();
         $bag->get('env(%foo%)');
     }
@@ -42,8 +40,8 @@ public function testMergeWillNotDuplicateIdenticalParameters()
         $placeholder = array_values($placeholderForVariable)[0];
 
         $this->assertCount(1, $placeholderForVariable);
-        $this->assertInternalType('string', $placeholder);
-        $this->assertContains($envVariableName, $placeholder);
+        $this->assertIsString($placeholder);
+        $this->assertStringContainsString($envVariableName, $placeholder);
     }
 
     public function testMergeWhereFirstBagIsEmptyWillWork()
@@ -65,8 +63,8 @@ public function testMergeWhereFirstBagIsEmptyWillWork()
         $placeholder = array_values($placeholderForVariable)[0];
 
         $this->assertCount(1, $placeholderForVariable);
-        $this->assertInternalType('string', $placeholder);
-        $this->assertContains($envVariableName, $placeholder);
+        $this->assertIsString($placeholder);
+        $this->assertStringContainsString($envVariableName, $placeholder);
     }
 
     public function testMergeWherePlaceholderOnlyExistsInSecond()
@@ -129,12 +127,10 @@ public function testResolveEnvAllowsNull()
         $this->assertNull($bag->all()['env(NULL_VAR)']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The default value of env parameter "ARRAY_VAR" must be scalar or null, array given.
-     */
     public function testResolveThrowsOnBadDefaultValue()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The default value of env parameter "ARRAY_VAR" must be scalar or null, array given.');
         $bag = new EnvPlaceholderParameterBag();
         $bag->get('env(ARRAY_VAR)');
         $bag->set('env(ARRAY_VAR)', []);
@@ -151,12 +147,10 @@ public function testGetEnvAllowsNull()
         $this->assertNull($bag->all()['env(NULL_VAR)']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The default value of an env() parameter must be scalar or null, but "array" given to "env(ARRAY_VAR)".
-     */
     public function testGetThrowsOnBadDefaultValue()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The default value of an env() parameter must be scalar or null, but "array" given to "env(ARRAY_VAR)".');
         $bag = new EnvPlaceholderParameterBag();
         $bag->set('env(ARRAY_VAR)', []);
         $bag->get('env(ARRAY_VAR)');
diff --git a/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php b/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
index b168e0c20a97604331b5508a9db7782df85579f8..ed89c8e4e42532b9e7d0b418cdddf69107527778 100644
--- a/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ParameterBag/FrozenParameterBagTest.php
@@ -26,38 +26,30 @@ public function testConstructor()
         $this->assertEquals($parameters, $bag->all(), '__construct() takes an array of parameters as its first argument');
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testClear()
     {
+        $this->expectException('LogicException');
         $bag = new FrozenParameterBag([]);
         $bag->clear();
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testSet()
     {
+        $this->expectException('LogicException');
         $bag = new FrozenParameterBag([]);
         $bag->set('foo', 'bar');
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testAdd()
     {
+        $this->expectException('LogicException');
         $bag = new FrozenParameterBag([]);
         $bag->add([]);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRemove()
     {
+        $this->expectException('LogicException');
         $bag = new FrozenParameterBag(['foo' => 'bar']);
         $bag->remove('foo');
     }
diff --git a/vendor/symfony/dependency-injection/Tests/ParameterBag/ParameterBagTest.php b/vendor/symfony/dependency-injection/Tests/ParameterBag/ParameterBagTest.php
index e67e393df77982529dbda0b0c268e6398bda0db1..0a75b445b9e8198258b65e2840a99f1ca185d30c 100644
--- a/vendor/symfony/dependency-injection/Tests/ParameterBag/ParameterBagTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ParameterBag/ParameterBagTest.php
@@ -78,12 +78,8 @@ public function testGetThrowParameterNotFoundException($parameterKey, $exception
             'fiz' => ['bar' => ['boo' => 12]],
         ]);
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException(ParameterNotFoundException::class);
-            $this->expectExceptionMessage($exceptionMessage);
-        } else {
-            $this->setExpectedException(ParameterNotFoundException::class, $exceptionMessage);
-        }
+        $this->expectException(ParameterNotFoundException::class);
+        $this->expectExceptionMessage($exceptionMessage);
 
         $bag->get($parameterKey);
     }
diff --git a/vendor/symfony/dependency-injection/Tests/ServiceLocatorTest.php b/vendor/symfony/dependency-injection/Tests/ServiceLocatorTest.php
index aa9ebab6816fcaeab2873adc1e359e059644c766..52466af9454597dbf7a87d1682c2ee6c5bd2c285 100644
--- a/vendor/symfony/dependency-injection/Tests/ServiceLocatorTest.php
+++ b/vendor/symfony/dependency-injection/Tests/ServiceLocatorTest.php
@@ -58,12 +58,10 @@ public function testGetDoesNotMemoize()
         $this->assertSame(2, $i);
     }
 
-    /**
-     * @expectedException        \Psr\Container\NotFoundExceptionInterface
-     * @expectedExceptionMessage Service "dummy" not found: the container inside "Symfony\Component\DependencyInjection\Tests\ServiceLocatorTest" is a smaller service locator that only knows about the "foo" and "bar" services.
-     */
     public function testGetThrowsOnUndefinedService()
     {
+        $this->expectException('Psr\Container\NotFoundExceptionInterface');
+        $this->expectExceptionMessage('Service "dummy" not found: the container inside "Symfony\Component\DependencyInjection\Tests\ServiceLocatorTest" is a smaller service locator that only knows about the "foo" and "bar" services.');
         $locator = new ServiceLocator([
             'foo' => function () { return 'bar'; },
             'bar' => function () { return 'baz'; },
@@ -72,12 +70,10 @@ public function testGetThrowsOnUndefinedService()
         $locator->get('dummy');
     }
 
-    /**
-     * @expectedException        \Psr\Container\NotFoundExceptionInterface
-     * @expectedExceptionMessage The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.
-     */
     public function testThrowsOnUndefinedInternalService()
     {
+        $this->expectException('Psr\Container\NotFoundExceptionInterface');
+        $this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.');
         $locator = new ServiceLocator([
             'foo' => function () use (&$locator) { return $locator->get('bar'); },
         ]);
@@ -85,12 +81,10 @@ public function testThrowsOnUndefinedInternalService()
         $locator->get('foo');
     }
 
-    /**
-     * @expectedException        \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
-     * @expectedExceptionMessage Circular reference detected for service "bar", path: "bar -> baz -> bar".
-     */
     public function testThrowsOnCircularReference()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException');
+        $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".');
         $locator = new ServiceLocator([
             'foo' => function () use (&$locator) { return $locator->get('bar'); },
             'bar' => function () use (&$locator) { return $locator->get('baz'); },
@@ -100,12 +94,10 @@ public function testThrowsOnCircularReference()
         $locator->get('foo');
     }
 
-    /**
-     * @expectedException        \Psr\Container\NotFoundExceptionInterface
-     * @expectedExceptionMessage Service "foo" not found: even though it exists in the app's container, the container inside "caller" is a smaller service locator that only knows about the "bar" service. Unless you need extra laziness, try using dependency injection instead. Otherwise, you need to declare it using "SomeServiceSubscriber::getSubscribedServices()".
-     */
     public function testThrowsInServiceSubscriber()
     {
+        $this->expectException('Psr\Container\NotFoundExceptionInterface');
+        $this->expectExceptionMessage('Service "foo" not found: even though it exists in the app\'s container, the container inside "caller" is a smaller service locator that only knows about the "bar" service. Unless you need extra laziness, try using dependency injection instead. Otherwise, you need to declare it using "SomeServiceSubscriber::getSubscribedServices()".');
         $container = new Container();
         $container->set('foo', new \stdClass());
         $subscriber = new SomeServiceSubscriber();
@@ -115,12 +107,10 @@ public function testThrowsInServiceSubscriber()
         $subscriber->getFoo();
     }
 
-    /**
-     * @expectedException        \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
-     * @expectedExceptionMessage Service "foo" not found: even though it exists in the app's container, the container inside "foo" is a smaller service locator that is empty... Try using dependency injection instead.
-     */
     public function testGetThrowsServiceNotFoundException()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException');
+        $this->expectExceptionMessage('Service "foo" not found: even though it exists in the app\'s container, the container inside "foo" is a smaller service locator that is empty... Try using dependency injection instead.');
         $container = new Container();
         $container->set('foo', new \stdClass());
 
diff --git a/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php b/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
index aeafd9ec29b44b8af2ee3d9509337a0f52a0baf7..1b33e1cab3f4e5102f947617280629fb3da193b5 100644
--- a/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
+++ b/vendor/symfony/event-dispatcher/ContainerAwareEventDispatcher.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\EventDispatcher;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -42,7 +43,7 @@ public function __construct(ContainerInterface $container)
         $this->container = $container;
 
         $class = \get_class($this);
-        if ($this instanceof \PHPUnit_Framework_MockObject_MockObject || $this instanceof \Prophecy\Doubler\DoubleInterface) {
+        if ($this instanceof \PHPUnit_Framework_MockObject_MockObject || $this instanceof MockObject || $this instanceof \Prophecy\Doubler\DoubleInterface) {
             $class = get_parent_class($class);
         }
         if (__CLASS__ !== $class) {
diff --git a/vendor/symfony/event-dispatcher/EventDispatcher.php b/vendor/symfony/event-dispatcher/EventDispatcher.php
index 968e345b3dcab21e14429727a8b80e988c93ddfc..207790f06b0f9742c553fdd4caf11fd40b5a98db 100644
--- a/vendor/symfony/event-dispatcher/EventDispatcher.php
+++ b/vendor/symfony/event-dispatcher/EventDispatcher.php
@@ -79,7 +79,7 @@ public function getListeners($eventName = null)
     public function getListenerPriority($eventName, $listener)
     {
         if (empty($this->listeners[$eventName])) {
-            return;
+            return null;
         }
 
         if (\is_array($listener) && isset($listener[0]) && $listener[0] instanceof \Closure) {
@@ -97,6 +97,8 @@ public function getListenerPriority($eventName, $listener)
                 }
             }
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php b/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
index b157659dc08462e407950778e959e5dca790eb38..359e6005febce137d88b9adcd6e326b067962861 100644
--- a/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php
@@ -267,7 +267,7 @@ public function testEventReceivesTheDispatcherInstanceAsArgument()
     }
 
     /**
-     * @see https://bugs.php.net/bug.php?id=62976
+     * @see https://bugs.php.net/62976
      *
      * This bug affects:
      *  - The PHP 5.3 branch for versions < 5.3.18
diff --git a/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php b/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
index 801471b47b6e39d7ed95369b3d91074e1191a184..61c047af39c46751e1fe8f77ad844742d6d7d114 100644
--- a/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php
@@ -22,11 +22,10 @@ class RegisterListenersPassTest extends TestCase
     /**
      * Tests that event subscribers not implementing EventSubscriberInterface
      * trigger an exception.
-     *
-     * @expectedException \InvalidArgumentException
      */
     public function testEventSubscriberWithoutInterface()
     {
+        $this->expectException('InvalidArgumentException');
         $builder = new ContainerBuilder();
         $builder->register('event_dispatcher');
         $builder->register('my_event_subscriber', 'stdClass')
@@ -38,10 +37,6 @@ public function testEventSubscriberWithoutInterface()
 
     public function testValidEventSubscriber()
     {
-        $services = [
-            'my_event_subscriber' => [0 => []],
-        ];
-
         $builder = new ContainerBuilder();
         $eventDispatcherDefinition = $builder->register('event_dispatcher');
         $builder->register('my_event_subscriber', 'Symfony\Component\EventDispatcher\Tests\DependencyInjection\SubscriberService')
@@ -63,12 +58,10 @@ public function testValidEventSubscriber()
         $this->assertEquals($expectedCalls, $eventDispatcherDefinition->getMethodCalls());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The service "foo" tagged "kernel.event_listener" must not be abstract.
-     */
     public function testAbstractEventListener()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The service "foo" tagged "kernel.event_listener" must not be abstract.');
         $container = new ContainerBuilder();
         $container->register('foo', 'stdClass')->setAbstract(true)->addTag('kernel.event_listener', []);
         $container->register('event_dispatcher', 'stdClass');
@@ -77,12 +70,10 @@ public function testAbstractEventListener()
         $registerListenersPass->process($container);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The service "foo" tagged "kernel.event_subscriber" must not be abstract.
-     */
     public function testAbstractEventSubscriber()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The service "foo" tagged "kernel.event_subscriber" must not be abstract.');
         $container = new ContainerBuilder();
         $container->register('foo', 'stdClass')->setAbstract(true)->addTag('kernel.event_subscriber', []);
         $container->register('event_dispatcher', 'stdClass');
@@ -128,12 +119,10 @@ public function testHotPathEvents()
         $this->assertTrue($container->getDefinition('foo')->hasTag('container.hot_path'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage You have requested a non-existent parameter "subscriber.class"
-     */
     public function testEventSubscriberUnresolvableClassName()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('You have requested a non-existent parameter "subscriber.class"');
         $container = new ContainerBuilder();
         $container->register('foo', '%subscriber.class%')->addTag('kernel.event_subscriber', []);
         $container->register('event_dispatcher', 'stdClass');
diff --git a/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php b/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
index 461f86161e0670ae54d60aad2de81947dda4cc23..f0f0d71f29a013083cc7da01affc509e0d794e34 100644
--- a/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/GenericEventTest.php
@@ -61,14 +61,14 @@ public function testGetArguments()
     public function testSetArguments()
     {
         $result = $this->event->setArguments(['foo' => 'bar']);
-        $this->assertAttributeSame(['foo' => 'bar'], 'arguments', $this->event);
+        $this->assertSame(['foo' => 'bar'], $this->event->getArguments());
         $this->assertSame($this->event, $result);
     }
 
     public function testSetArgument()
     {
         $result = $this->event->setArgument('foo2', 'bar2');
-        $this->assertAttributeSame(['name' => 'Event', 'foo2' => 'bar2'], 'arguments', $this->event);
+        $this->assertSame(['name' => 'Event', 'foo2' => 'bar2'], $this->event->getArguments());
         $this->assertEquals($this->event, $result);
     }
 
@@ -78,11 +78,9 @@ public function testGetArgument()
         $this->assertEquals('Event', $this->event->getArgument('name'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testGetArgException()
     {
+        $this->expectException('\InvalidArgumentException');
         $this->event->getArgument('nameNotExist');
     }
 
@@ -92,20 +90,20 @@ public function testOffsetGet()
         $this->assertEquals('Event', $this->event['name']);
 
         // test getting invalid arg
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $this->expectException('InvalidArgumentException');
         $this->assertFalse($this->event['nameNotExist']);
     }
 
     public function testOffsetSet()
     {
         $this->event['foo2'] = 'bar2';
-        $this->assertAttributeSame(['name' => 'Event', 'foo2' => 'bar2'], 'arguments', $this->event);
+        $this->assertSame(['name' => 'Event', 'foo2' => 'bar2'], $this->event->getArguments());
     }
 
     public function testOffsetUnset()
     {
         unset($this->event['name']);
-        $this->assertAttributeSame([], 'arguments', $this->event);
+        $this->assertSame([], $this->event->getArguments());
     }
 
     public function testOffsetIsset()
diff --git a/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php b/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
index c52fefe509ae94bae2d3862d0d01e16b987589af..da8502ab93c55d32dc968778531e237561d1adeb 100644
--- a/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
+++ b/vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\EventDispatcher\Tests;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\EventDispatcher\Event;
 use Symfony\Component\EventDispatcher\ImmutableEventDispatcher;
@@ -21,7 +22,7 @@
 class ImmutableEventDispatcherTest extends TestCase
 {
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var MockObject
      */
     private $innerDispatcher;
 
@@ -39,13 +40,14 @@ protected function setUp()
     public function testDispatchDelegates()
     {
         $event = new Event();
+        $resultEvent = new Event();
 
         $this->innerDispatcher->expects($this->once())
             ->method('dispatch')
             ->with('event', $event)
-            ->willReturn('result');
+            ->willReturn($resultEvent);
 
-        $this->assertSame('result', $this->dispatcher->dispatch('event', $event));
+        $this->assertSame($resultEvent, $this->dispatcher->dispatch('event', $event));
     }
 
     public function testGetListenersDelegates()
@@ -53,9 +55,9 @@ public function testGetListenersDelegates()
         $this->innerDispatcher->expects($this->once())
             ->method('getListeners')
             ->with('event')
-            ->willReturn('result');
+            ->willReturn(['result']);
 
-        $this->assertSame('result', $this->dispatcher->getListeners('event'));
+        $this->assertSame(['result'], $this->dispatcher->getListeners('event'));
     }
 
     public function testHasListenersDelegates()
@@ -63,42 +65,34 @@ public function testHasListenersDelegates()
         $this->innerDispatcher->expects($this->once())
             ->method('hasListeners')
             ->with('event')
-            ->willReturn('result');
+            ->willReturn(true);
 
-        $this->assertSame('result', $this->dispatcher->hasListeners('event'));
+        $this->assertTrue($this->dispatcher->hasListeners('event'));
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testAddListenerDisallowed()
     {
+        $this->expectException('\BadMethodCallException');
         $this->dispatcher->addListener('event', function () { return 'foo'; });
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testAddSubscriberDisallowed()
     {
+        $this->expectException('\BadMethodCallException');
         $subscriber = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventSubscriberInterface')->getMock();
 
         $this->dispatcher->addSubscriber($subscriber);
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testRemoveListenerDisallowed()
     {
+        $this->expectException('\BadMethodCallException');
         $this->dispatcher->removeListener('event', function () { return 'foo'; });
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testRemoveSubscriberDisallowed()
     {
+        $this->expectException('\BadMethodCallException');
         $subscriber = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventSubscriberInterface')->getMock();
 
         $this->dispatcher->removeSubscriber($subscriber);
diff --git a/vendor/symfony/http-foundation/AcceptHeaderItem.php b/vendor/symfony/http-foundation/AcceptHeaderItem.php
index f6e896874319ad0204ede74fc86e482c74c696a3..96bb0c4432c56829b2c7dd038e5175fc6259442f 100644
--- a/vendor/symfony/http-foundation/AcceptHeaderItem.php
+++ b/vendor/symfony/http-foundation/AcceptHeaderItem.php
@@ -25,7 +25,6 @@ class AcceptHeaderItem
 
     /**
      * @param string $value
-     * @param array  $attributes
      */
     public function __construct($value, array $attributes = [])
     {
diff --git a/vendor/symfony/http-foundation/BinaryFileResponse.php b/vendor/symfony/http-foundation/BinaryFileResponse.php
index 6c9a995e9a316c7236ad8fb6b479171784dffe77..ea7ac846974bd0ab224b18bfd3a3b5e10f12b424 100644
--- a/vendor/symfony/http-foundation/BinaryFileResponse.php
+++ b/vendor/symfony/http-foundation/BinaryFileResponse.php
@@ -327,12 +327,12 @@ public function setContent($content)
         if (null !== $content) {
             throw new \LogicException('The content cannot be set on a BinaryFileResponse instance.');
         }
+
+        return $this;
     }
 
     /**
      * {@inheritdoc}
-     *
-     * @return false
      */
     public function getContent()
     {
@@ -348,7 +348,7 @@ public static function trustXSendfileTypeHeader()
     }
 
     /**
-     * If this is set to true, the file will be unlinked after the request is send
+     * If this is set to true, the file will be unlinked after the request is sent
      * Note: If the X-Sendfile header is used, the deleteFileAfterSend setting will not be used.
      *
      * @param bool $shouldDelete
diff --git a/vendor/symfony/http-foundation/CHANGELOG.md b/vendor/symfony/http-foundation/CHANGELOG.md
index 7bfde80ff1290703f757ba2bd699bcc0631e0379..c0d890167791779bf7462d4612245069a855fad7 100644
--- a/vendor/symfony/http-foundation/CHANGELOG.md
+++ b/vendor/symfony/http-foundation/CHANGELOG.md
@@ -21,7 +21,7 @@ CHANGELOG
 -----
 
  * the `Request::setTrustedProxies()` method takes a new `$trustedHeaderSet` argument,
-   see http://symfony.com/doc/current/components/http_foundation/trusting_proxies.html for more info,
+   see https://symfony.com/doc/current/deployment/proxies.html for more info,
  * deprecated the `Request::setTrustedHeaderName()` and `Request::getTrustedHeaderName()` methods,
  * added `File\Stream`, to be passed to `BinaryFileResponse` when the size of the served file is unknown,
    disabling `Range` and `Content-Length` handling, switching to chunked encoding instead
diff --git a/vendor/symfony/http-foundation/Cookie.php b/vendor/symfony/http-foundation/Cookie.php
index 83a97087f1d99fbce7127864a6ba5d409bdea054..98a5ef00a88725721897d3297bc726d8cbac458a 100644
--- a/vendor/symfony/http-foundation/Cookie.php
+++ b/vendor/symfony/http-foundation/Cookie.php
@@ -18,6 +18,10 @@
  */
 class Cookie
 {
+    const SAMESITE_NONE = 'none';
+    const SAMESITE_LAX = 'lax';
+    const SAMESITE_STRICT = 'strict';
+
     protected $name;
     protected $value;
     protected $domain;
@@ -25,12 +29,13 @@ class Cookie
     protected $path;
     protected $secure;
     protected $httpOnly;
+
     private $raw;
     private $sameSite;
 
-    const SAMESITE_NONE = 'none';
-    const SAMESITE_LAX = 'lax';
-    const SAMESITE_STRICT = 'strict';
+    private static $reservedCharsList = "=,; \t\r\n\v\f";
+    private static $reservedCharsFrom = ['=', ',', ';', ' ', "\t", "\r", "\n", "\v", "\f"];
+    private static $reservedCharsTo = ['%3D', '%2C', '%3B', '%20', '%09', '%0D', '%0A', '%0B', '%0C'];
 
     /**
      * Creates cookie from raw header string.
@@ -97,7 +102,7 @@ public static function fromString($cookie, $decode = false)
     public function __construct($name, $value = null, $expire = 0, $path = '/', $domain = null, $secure = false, $httpOnly = true, $raw = false, $sameSite = null)
     {
         // from PHP source code
-        if (preg_match("/[=,; \t\r\n\013\014]/", $name)) {
+        if ($raw && false !== strpbrk($name, self::$reservedCharsList)) {
             throw new \InvalidArgumentException(sprintf('The cookie name "%s" contains invalid characters.', $name));
         }
 
@@ -143,7 +148,13 @@ public function __construct($name, $value = null, $expire = 0, $path = '/', $dom
      */
     public function __toString()
     {
-        $str = ($this->isRaw() ? $this->getName() : urlencode($this->getName())).'=';
+        if ($this->isRaw()) {
+            $str = $this->getName();
+        } else {
+            $str = str_replace(self::$reservedCharsFrom, self::$reservedCharsTo, $this->getName());
+        }
+
+        $str .= '=';
 
         if ('' === (string) $this->getValue()) {
             $str .= 'deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; Max-Age=0';
diff --git a/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php b/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php
index 80f4d47f767c0bfee88014874b5b111dbae8debe..f9393df90072d7c333f5d8f8e2220675ce564857 100644
--- a/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php
+++ b/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php
@@ -90,5 +90,7 @@ public function guess($mimeType)
                 return $extension;
             }
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php b/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php
index 34e015ee5c4f17f9b8e5b471cd0523bf1d5ffa59..7045e94df673f6ea8de8213f8ca50e6e357f0cd4 100644
--- a/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php
+++ b/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php
@@ -31,7 +31,7 @@ class FileBinaryMimeTypeGuesser implements MimeTypeGuesserInterface
      *
      * @param string $cmd The command to run to get the mime type of a file
      */
-    public function __construct($cmd = 'file -b --mime %s 2>/dev/null')
+    public function __construct($cmd = 'file -b --mime -- %s 2>/dev/null')
     {
         $this->cmd = $cmd;
     }
@@ -74,24 +74,24 @@ public function guess($path)
         }
 
         if (!self::isSupported()) {
-            return;
+            return null;
         }
 
         ob_start();
 
         // need to use --mime instead of -i. see #6641
-        passthru(sprintf($this->cmd, escapeshellarg($path)), $return);
+        passthru(sprintf($this->cmd, escapeshellarg((0 === strpos($path, '-') ? './' : '').$path)), $return);
         if ($return > 0) {
             ob_end_clean();
 
-            return;
+            return null;
         }
 
         $type = trim(ob_get_clean());
 
-        if (!preg_match('#^([a-z0-9\-]+/[a-z0-9\-\.]+)#i', $type, $match)) {
+        if (!preg_match('#^([a-z0-9\-]+/[a-z0-9\-\+\.]+)#i', $type, $match)) {
             // it's not a type, but an error message
-            return;
+            return null;
         }
 
         return $match[1];
diff --git a/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php b/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php
index bf1ee9f5db6204d26c141e6ae97b4d114dc3a6ca..fc4bc45024b11dc95acee7e149915545174a0070 100644
--- a/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php
+++ b/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php
@@ -26,7 +26,7 @@ class FileinfoMimeTypeGuesser implements MimeTypeGuesserInterface
     /**
      * @param string $magicFile A magic file to use with the finfo instance
      *
-     * @see http://www.php.net/manual/en/function.finfo-open.php
+     * @see https://php.net/finfo-open
      */
     public function __construct($magicFile = null)
     {
@@ -57,11 +57,11 @@ public function guess($path)
         }
 
         if (!self::isSupported()) {
-            return;
+            return null;
         }
 
         if (!$finfo = new \finfo(FILEINFO_MIME_TYPE, $this->magicFile)) {
-            return;
+            return null;
         }
 
         return $finfo->file($path);
diff --git a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php b/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php
index 95d1ee26762a59f5d6a3013e7e1aaa437bb8ead4..e05269fc80333f1a5e26caced85f8762e54b9a69 100644
--- a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php
+++ b/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php
@@ -129,5 +129,7 @@ public function guess($path)
         if (2 === \count($this->guessers) && !FileBinaryMimeTypeGuesser::isSupported() && !FileinfoMimeTypeGuesser::isSupported()) {
             throw new \LogicException('Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?)');
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php b/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php
index 5ac1acb82324f49f97ecb2990187856d1e130885..e46e78eef45803a58a2e90fe919e0f021e402049 100644
--- a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php
+++ b/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php
@@ -26,7 +26,7 @@ interface MimeTypeGuesserInterface
      *
      * @param string $path The path to the file
      *
-     * @return string The mime type or NULL, if none could be guessed
+     * @return string|null The mime type or NULL, if none could be guessed
      *
      * @throws FileNotFoundException If the file does not exist
      * @throws AccessDeniedException If the file could not be read
diff --git a/vendor/symfony/http-foundation/File/UploadedFile.php b/vendor/symfony/http-foundation/File/UploadedFile.php
index a44c664b4c6efdffffb9584b44c3214f93b21216..86153ed49c96f5aeb7ce31fbbc4cc4402a0fb6d1 100644
--- a/vendor/symfony/http-foundation/File/UploadedFile.php
+++ b/vendor/symfony/http-foundation/File/UploadedFile.php
@@ -214,13 +214,26 @@ public function move($directory, $name = null)
      */
     public static function getMaxFilesize()
     {
-        $iniMax = strtolower(ini_get('upload_max_filesize'));
+        $sizePostMax = self::parseFilesize(ini_get('post_max_size'));
+        $sizeUploadMax = self::parseFilesize(ini_get('upload_max_filesize'));
 
-        if ('' === $iniMax) {
-            return PHP_INT_MAX;
+        return min($sizePostMax ?: PHP_INT_MAX, $sizeUploadMax ?: PHP_INT_MAX);
+    }
+
+    /**
+     * Returns the given size from an ini value in bytes.
+     *
+     * @return int The given size in bytes
+     */
+    private static function parseFilesize($size)
+    {
+        if ('' === $size) {
+            return 0;
         }
 
-        $max = ltrim($iniMax, '+');
+        $size = strtolower($size);
+
+        $max = ltrim($size, '+');
         if (0 === strpos($max, '0x')) {
             $max = \intval($max, 16);
         } elseif (0 === strpos($max, '0')) {
@@ -229,7 +242,7 @@ public static function getMaxFilesize()
             $max = (int) $max;
         }
 
-        switch (substr($iniMax, -1)) {
+        switch (substr($size, -1)) {
             case 't': $max *= 1024;
             // no break
             case 'g': $max *= 1024;
diff --git a/vendor/symfony/http-foundation/FileBag.php b/vendor/symfony/http-foundation/FileBag.php
index ca849b3d7baf5e923270f9f9c2923805a92b6544..024fadf203226630aa123f1a14cf70288b26a7fe 100644
--- a/vendor/symfony/http-foundation/FileBag.php
+++ b/vendor/symfony/http-foundation/FileBag.php
@@ -75,8 +75,8 @@ protected function convertFileInformation($file)
             return $file;
         }
 
-        $file = $this->fixPhpFilesArray($file);
         if (\is_array($file)) {
+            $file = $this->fixPhpFilesArray($file);
             $keys = array_keys($file);
             sort($keys);
 
@@ -109,14 +109,12 @@ protected function convertFileInformation($file)
      * It's safe to pass an already converted array, in which case this method
      * just returns the original array unmodified.
      *
+     * @param array $data
+     *
      * @return array
      */
     protected function fixPhpFilesArray($data)
     {
-        if (!\is_array($data)) {
-            return $data;
-        }
-
         $keys = array_keys($data);
         sort($keys);
 
diff --git a/vendor/symfony/http-foundation/HeaderBag.php b/vendor/symfony/http-foundation/HeaderBag.php
index 9798173e649bfe61534fc79f88d9ebd00ba8919a..35bd6ad8fd704ddccac70d6e90b35919bdc75b3a 100644
--- a/vendor/symfony/http-foundation/HeaderBag.php
+++ b/vendor/symfony/http-foundation/HeaderBag.php
@@ -121,7 +121,15 @@ public function get($key, $default = null, $first = true)
         }
 
         if ($first) {
-            return \count($headers[$key]) ? $headers[$key][0] : $default;
+            if (!$headers[$key]) {
+                return $default;
+            }
+
+            if (null === $headers[$key][0]) {
+                return null;
+            }
+
+            return (string) $headers[$key][0];
         }
 
         return $headers[$key];
diff --git a/vendor/symfony/http-foundation/JsonResponse.php b/vendor/symfony/http-foundation/JsonResponse.php
index a9bdac30f89560b83870b73685e9f397b5547cd0..b0e76516759dea812e2554aaefa418cf65139cf3 100644
--- a/vendor/symfony/http-foundation/JsonResponse.php
+++ b/vendor/symfony/http-foundation/JsonResponse.php
@@ -100,7 +100,7 @@ public static function fromJsonString($data = null, $status = 200, $headers = []
     public function setCallback($callback = null)
     {
         if (null !== $callback) {
-            // partially taken from http://www.geekality.net/2011/08/03/valid-javascript-identifier/
+            // partially taken from https://geekality.net/2011/08/03/valid-javascript-identifier/
             // partially taken from https://github.com/willdurand/JsonpCallbackValidator
             //      JsonpCallbackValidator is released under the MIT License. See https://github.com/willdurand/JsonpCallbackValidator/blob/v1.1.0/LICENSE for details.
             //      (c) William Durand <william.durand1@gmail.com>
diff --git a/vendor/symfony/http-foundation/ParameterBag.php b/vendor/symfony/http-foundation/ParameterBag.php
index f05e4a2154ecbc418bc50004ec6a9b4c4b2a87c4..194ba2c6c57ef04077610d6a2e0947702c5ec168 100644
--- a/vendor/symfony/http-foundation/ParameterBag.php
+++ b/vendor/symfony/http-foundation/ParameterBag.php
@@ -191,7 +191,7 @@ public function getBoolean($key, $default = false)
      * @param int    $filter  FILTER_* constant
      * @param mixed  $options Filter options
      *
-     * @see http://php.net/manual/en/function.filter-var.php
+     * @see https://php.net/filter-var
      *
      * @return mixed
      */
diff --git a/vendor/symfony/http-foundation/RedirectResponse.php b/vendor/symfony/http-foundation/RedirectResponse.php
index 51fd869abea25231e37c965e6799836be0c0d536..a19efba3e3d5efacdc279d5ed8806ba1a70fbed4 100644
--- a/vendor/symfony/http-foundation/RedirectResponse.php
+++ b/vendor/symfony/http-foundation/RedirectResponse.php
@@ -30,7 +30,7 @@ class RedirectResponse extends Response
      *
      * @throws \InvalidArgumentException
      *
-     * @see http://tools.ietf.org/html/rfc2616#section-10.3
+     * @see https://tools.ietf.org/html/rfc2616#section-10.3
      */
     public function __construct($url, $status = 302, $headers = [])
     {
@@ -93,7 +93,7 @@ public function setTargetUrl($url)
 <html>
     <head>
         <meta charset="UTF-8" />
-        <meta http-equiv="refresh" content="0;url=%1$s" />
+        <meta http-equiv="refresh" content="0;url=\'%1$s\'" />
 
         <title>Redirecting to %1$s</title>
     </head>
diff --git a/vendor/symfony/http-foundation/Request.php b/vendor/symfony/http-foundation/Request.php
index ea3f460c4692b9d10393f24447b4bc0f9dc85d14..3fc7b71e6ed7946262903e2ecb5d6611f7b55b12 100644
--- a/vendor/symfony/http-foundation/Request.php
+++ b/vendor/symfony/http-foundation/Request.php
@@ -97,49 +97,49 @@ class Request
     /**
      * Custom parameters.
      *
-     * @var \Symfony\Component\HttpFoundation\ParameterBag
+     * @var ParameterBag
      */
     public $attributes;
 
     /**
      * Request body parameters ($_POST).
      *
-     * @var \Symfony\Component\HttpFoundation\ParameterBag
+     * @var ParameterBag
      */
     public $request;
 
     /**
      * Query string parameters ($_GET).
      *
-     * @var \Symfony\Component\HttpFoundation\ParameterBag
+     * @var ParameterBag
      */
     public $query;
 
     /**
      * Server and execution environment parameters ($_SERVER).
      *
-     * @var \Symfony\Component\HttpFoundation\ServerBag
+     * @var ServerBag
      */
     public $server;
 
     /**
      * Uploaded files ($_FILES).
      *
-     * @var \Symfony\Component\HttpFoundation\FileBag
+     * @var FileBag
      */
     public $files;
 
     /**
      * Cookies ($_COOKIE).
      *
-     * @var \Symfony\Component\HttpFoundation\ParameterBag
+     * @var ParameterBag
      */
     public $cookies;
 
     /**
      * Headers (taken from the $_SERVER).
      *
-     * @var \Symfony\Component\HttpFoundation\HeaderBag
+     * @var HeaderBag
      */
     public $headers;
 
@@ -199,7 +199,7 @@ class Request
     protected $format;
 
     /**
-     * @var \Symfony\Component\HttpFoundation\Session\SessionInterface
+     * @var SessionInterface
      */
     protected $session;
 
@@ -528,6 +528,10 @@ public function __toString()
         try {
             $content = $this->getContent();
         } catch (\LogicException $e) {
+            if (\PHP_VERSION_ID >= 70400) {
+                throw $e;
+            }
+
             return trigger_error($e, E_USER_ERROR);
         }
 
@@ -915,7 +919,7 @@ public function getClientIps()
      * @return string|null The client IP address
      *
      * @see getClientIps()
-     * @see http://en.wikipedia.org/wiki/X-Forwarded-For
+     * @see https://wikipedia.org/wiki/X-Forwarded-For
      */
     public function getClientIp()
     {
@@ -1037,8 +1041,8 @@ public function getPort()
             $pos = strrpos($host, ':');
         }
 
-        if (false !== $pos) {
-            return (int) substr($host, $pos + 1);
+        if (false !== $pos && $port = substr($host, $pos + 1)) {
+            return (int) $port;
         }
 
         return 'https' === $this->getScheme() ? 443 : 80;
@@ -1204,7 +1208,7 @@ public function getRelativeUriForPath($path)
         // A reference to the same base directory or an empty subdirectory must be prefixed with "./".
         // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used
         // as the first segment of a relative-path reference, as it would be mistaken for a scheme name
-        // (see http://tools.ietf.org/html/rfc3986#section-4.2).
+        // (see https://tools.ietf.org/html/rfc3986#section-4.2).
         return !isset($path[0]) || '/' === $path[0]
             || false !== ($colonPos = strpos($path, ':')) && ($colonPos < ($slashPos = strpos($path, '/')) || false === $slashPos)
             ? "./$path" : $path;
@@ -1449,6 +1453,8 @@ public function getFormat($mimeType)
                 return $format;
             }
         }
+
+        return null;
     }
 
     /**
@@ -1823,7 +1829,7 @@ public function getAcceptableContentTypes()
      * It works if your JavaScript library sets an X-Requested-With HTTP header.
      * It is known to work with common JavaScript frameworks:
      *
-     * @see http://en.wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
+     * @see https://wikipedia.org/wiki/List_of_Ajax_frameworks#JavaScript
      *
      * @return bool true if the request is an XMLHttpRequest, false otherwise
      */
@@ -1835,9 +1841,9 @@ public function isXmlHttpRequest()
     /*
      * The following methods are derived from code of the Zend Framework (1.10dev - 2010-01-24)
      *
-     * Code subject to the new BSD license (http://framework.zend.com/license/new-bsd).
+     * Code subject to the new BSD license (https://framework.zend.com/license).
      *
-     * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
+     * Copyright (c) 2005-2010 Zend Technologies USA Inc. (https://www.zend.com/)
      */
 
     protected function prepareRequestUri()
diff --git a/vendor/symfony/http-foundation/RequestMatcher.php b/vendor/symfony/http-foundation/RequestMatcher.php
index cadf70c5b4106b54daab2ff74ed00563d39dd293..3f51495797397ff1a9e7f5793526bfd0a85f33b3 100644
--- a/vendor/symfony/http-foundation/RequestMatcher.php
+++ b/vendor/symfony/http-foundation/RequestMatcher.php
@@ -53,7 +53,6 @@ class RequestMatcher implements RequestMatcherInterface
      * @param string|null          $host
      * @param string|string[]|null $methods
      * @param string|string[]|null $ips
-     * @param array                $attributes
      * @param string|string[]|null $schemes
      */
     public function __construct($path = null, $host = null, $methods = null, $ips = null, array $attributes = [], $schemes = null)
diff --git a/vendor/symfony/http-foundation/RequestStack.php b/vendor/symfony/http-foundation/RequestStack.php
index 885d78a50e6e5016daa3186c5ea3191536128b87..244a77d631a8f6c8bb504d85f9bb4f7092be3f34 100644
--- a/vendor/symfony/http-foundation/RequestStack.php
+++ b/vendor/symfony/http-foundation/RequestStack.php
@@ -47,7 +47,7 @@ public function push(Request $request)
     public function pop()
     {
         if (!$this->requests) {
-            return;
+            return null;
         }
 
         return array_pop($this->requests);
@@ -73,7 +73,7 @@ public function getCurrentRequest()
     public function getMasterRequest()
     {
         if (!$this->requests) {
-            return;
+            return null;
         }
 
         return $this->requests[0];
@@ -95,7 +95,7 @@ public function getParentRequest()
         $pos = \count($this->requests) - 2;
 
         if (!isset($this->requests[$pos])) {
-            return;
+            return null;
         }
 
         return $this->requests[$pos];
diff --git a/vendor/symfony/http-foundation/Response.php b/vendor/symfony/http-foundation/Response.php
index 4ab05066f474596703b4f2e7d3f37193bbf99d4b..26e3a3378efa0d75637f69a46d05d1d1c5219a70 100644
--- a/vendor/symfony/http-foundation/Response.php
+++ b/vendor/symfony/http-foundation/Response.php
@@ -88,7 +88,7 @@ class Response
     const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511;                             // RFC6585
 
     /**
-     * @var \Symfony\Component\HttpFoundation\ResponseHeaderBag
+     * @var ResponseHeaderBag
      */
     public $headers;
 
@@ -121,7 +121,7 @@ class Response
      * Status codes translation table.
      *
      * The list of codes is complete according to the
-     * {@link http://www.iana.org/assignments/http-status-codes/ Hypertext Transfer Protocol (HTTP) Status Code Registry}
+     * {@link https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml Hypertext Transfer Protocol (HTTP) Status Code Registry}
      * (last updated 2016-03-01).
      *
      * Unless otherwise noted, the status code is defined in RFC2616.
@@ -342,7 +342,7 @@ public function sendHeaders()
 
         // cookies
         foreach ($this->headers->getCookies() as $cookie) {
-            header('Set-Cookie: '.$cookie->getName().strstr($cookie, '='), false, $this->statusCode);
+            header('Set-Cookie: '.$cookie, false, $this->statusCode);
         }
 
         // status
@@ -407,7 +407,7 @@ public function setContent($content)
     /**
      * Gets the current response content.
      *
-     * @return string Content
+     * @return string|false
      */
     public function getContent()
     {
@@ -790,6 +790,8 @@ public function getMaxAge()
         if (null !== $this->getExpires()) {
             return (int) $this->getExpires()->format('U') - (int) $this->getDate()->format('U');
         }
+
+        return null;
     }
 
     /**
@@ -846,6 +848,8 @@ public function getTtl()
         if (null !== $maxAge = $this->getMaxAge()) {
             return $maxAge - $this->getAge();
         }
+
+        return null;
     }
 
     /**
@@ -1025,7 +1029,7 @@ public function setCache(array $options)
      *
      * @return $this
      *
-     * @see http://tools.ietf.org/html/rfc2616#section-10.3.5
+     * @see https://tools.ietf.org/html/rfc2616#section-10.3.5
      *
      * @final since version 3.3
      */
@@ -1133,7 +1137,7 @@ public function isNotModified(Request $request)
      *
      * @return bool
      *
-     * @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
+     * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
      *
      * @final since version 3.2
      */
diff --git a/vendor/symfony/http-foundation/ServerBag.php b/vendor/symfony/http-foundation/ServerBag.php
index 90da49fae5dbe69874096563bc97e706d7054f4c..f3b64023489ef015627eaaadeeb7323dff3dff1d 100644
--- a/vendor/symfony/http-foundation/ServerBag.php
+++ b/vendor/symfony/http-foundation/ServerBag.php
@@ -46,13 +46,13 @@ public function getHeaders()
             /*
              * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default
              * For this workaround to work, add these lines to your .htaccess file:
-             * RewriteCond %{HTTP:Authorization} ^(.+)$
-             * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+             * RewriteCond %{HTTP:Authorization} .+
+             * RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
              *
              * A sample .htaccess file:
              * RewriteEngine On
-             * RewriteCond %{HTTP:Authorization} ^(.+)$
-             * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+             * RewriteCond %{HTTP:Authorization} .+
+             * RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]
              * RewriteCond %{REQUEST_FILENAME} !-f
              * RewriteRule ^(.*)$ app.php [QSA,L]
              */
@@ -79,7 +79,7 @@ public function getHeaders()
                     /*
                      * XXX: Since there is no PHP_AUTH_BEARER in PHP predefined variables,
                      *      I'll just set $headers['AUTHORIZATION'] here.
-                     *      http://php.net/manual/en/reserved.variables.server.php
+                     *      https://php.net/reserved.variables.server
                      */
                     $headers['AUTHORIZATION'] = $authorizationHeader;
                 }
diff --git a/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php b/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php
index bbf2e39c81059f229dfb8abeab7d71792dd0d2a8..07885e7fbfce229e7f7d52bcfba8a07e60487795 100644
--- a/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php
+++ b/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php
@@ -97,7 +97,7 @@ public function remove($name)
      * @param string $name         Key name
      * @param bool   $writeContext Write context, default false
      *
-     * @return array
+     * @return array|null
      */
     protected function &resolveAttributePath($name, $writeContext = false)
     {
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php
index 1db590b36078396edc319fed9ea0b1bb34ae8907..a399be5fd8ee7d62463dcf613a153bca764e93c3 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php
@@ -15,7 +15,7 @@
  * Memcached based session storage handler based on the Memcached class
  * provided by the PHP memcached extension.
  *
- * @see http://php.net/memcached
+ * @see https://php.net/memcached
  *
  * @author Drak <drak@zikula.org>
  */
@@ -40,9 +40,6 @@ class MemcachedSessionHandler extends AbstractSessionHandler
      *  * prefix: The prefix to use for the memcached keys in order to avoid collision
      *  * expiretime: The time to live in seconds.
      *
-     * @param \Memcached $memcached A \Memcached instance
-     * @param array      $options   An associative array of Memcached options
-     *
      * @throws \InvalidArgumentException When unsupported options are passed
      */
     public function __construct(\Memcached $memcached, array $options = [])
@@ -58,7 +55,7 @@ public function __construct(\Memcached $memcached, array $options = [])
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function close()
     {
@@ -74,7 +71,7 @@ protected function doRead($sessionId)
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function updateTimestamp($sessionId, $data)
     {
@@ -102,7 +99,7 @@ protected function doDestroy($sessionId)
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function gc($maxlifetime)
     {
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
index 3b5ccaa8359526669dfb61023c5db6102bab397a..1dd72406699dfa7c547d73ba445d737b404998df 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php
@@ -17,7 +17,7 @@
  * @author Markus Bachmann <markus.bachmann@bachi.biz>
  *
  * @see https://packagist.org/packages/mongodb/mongodb
- * @see http://php.net/manual/en/set.mongodb.php
+ * @see https://php.net/mongodb
  */
 class MongoDbSessionHandler extends AbstractSessionHandler
 {
@@ -56,7 +56,7 @@ class MongoDbSessionHandler extends AbstractSessionHandler
      *         { "expireAfterSeconds": 0 }
      *     )
      *
-     * More details on: http://docs.mongodb.org/manual/tutorial/expire-data/
+     * More details on: https://docs.mongodb.org/manual/tutorial/expire-data/
      *
      * If you use such an index, you can drop `gc_probability` to 0 since
      * no garbage-collection is required.
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php
index 4e9704bd5858f38066cf001ae91d88450992040f..8b7615ec10e0844490a852440a19106c1ba41b85 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php
@@ -23,7 +23,7 @@ class NativeFileSessionHandler extends NativeSessionHandler
      *                         Default null will leave setting as defined by PHP.
      *                         '/path', 'N;/path', or 'N;octal-mode;/path
      *
-     * @see http://php.net/session.configuration.php#ini.session.save-path for further details.
+     * @see https://php.net/session.configuration#ini.session.save-path for further details.
      *
      * @throws \InvalidArgumentException On invalid $savePath
      * @throws \RuntimeException         When failing to create the save directory
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/NativeSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/NativeSessionHandler.php
index 9be4528aeb436567ca1fd5d30c00ba8b8b0af8a7..5159b1e359a0fde1b72f8fe5ae3ef4411bc915c0 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/NativeSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/NativeSessionHandler.php
@@ -13,7 +13,7 @@
 
 /**
  * @deprecated since version 3.4, to be removed in 4.0. Use \SessionHandler instead.
- * @see http://php.net/sessionhandler
+ * @see https://php.net/sessionhandler
  */
 class NativeSessionHandler extends \SessionHandler
 {
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php
index 8d193155b090f2d596ce937ec3d3040a86f75733..3ba9378ca7aed3d3bc4db94247c1a848338438b7 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php
@@ -67,7 +67,7 @@ protected function doDestroy($sessionId)
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function gc($maxlifetime)
     {
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php
index 9369740eb6dd57f664bfc9ae2c94437339294705..c9d47b6ed7c271b9e18248f6bd00d4db07d00f32 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php
@@ -32,7 +32,7 @@
  * Saving it in a character column could corrupt the data. You can use createTable()
  * to initialize a correctly defined table.
  *
- * @see http://php.net/sessionhandlerinterface
+ * @see https://php.net/sessionhandlerinterface
  *
  * @author Fabien Potencier <fabien@symfony.com>
  * @author Michael Williams <michael.williams@funsational.com>
@@ -218,7 +218,7 @@ public function createTable()
                 // - trailing space removal
                 // - case-insensitivity
                 // - language processing like é == e
-                $sql = "CREATE TABLE $this->table ($this->idCol VARBINARY(128) NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol MEDIUMINT NOT NULL, $this->timeCol INTEGER UNSIGNED NOT NULL) COLLATE utf8_bin, ENGINE = InnoDB";
+                $sql = "CREATE TABLE $this->table ($this->idCol VARBINARY(128) NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol INTEGER UNSIGNED NOT NULL, $this->timeCol INTEGER UNSIGNED NOT NULL) COLLATE utf8_bin, ENGINE = InnoDB";
                 break;
             case 'sqlite':
                 $sql = "CREATE TABLE $this->table ($this->idCol TEXT NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol INTEGER NOT NULL, $this->timeCol INTEGER NOT NULL)";
@@ -286,7 +286,7 @@ public function read($sessionId)
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function gc($maxlifetime)
     {
@@ -538,7 +538,7 @@ private function buildDsnFromUrl($dsnOrUrl)
      * PDO::rollback or PDO::inTransaction for SQLite.
      *
      * Also MySQLs default isolation, REPEATABLE READ, causes deadlock for different sessions
-     * due to http://www.mysqlperformanceblog.com/2013/12/12/one-more-innodb-gap-lock-to-avoid/ .
+     * due to https://percona.com/blog/2013/12/12/one-more-innodb-gap-lock-to-avoid/ .
      * So we change it to READ COMMITTED.
      */
     private function beginTransaction()
@@ -864,7 +864,7 @@ private function getMergeStatement($sessionId, $data, $maxlifetime)
                 break;
             case 'sqlsrv' === $this->driver && version_compare($this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION), '10', '>='):
                 // MERGE is only available since SQL Server 2008 and must be terminated by semicolon
-                // It also requires HOLDLOCK according to http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx
+                // It also requires HOLDLOCK according to https://weblogs.sqlteam.com/dang/2009/01/31/upsert-race-condition-with-merge/
                 $mergeSql = "MERGE INTO $this->table WITH (HOLDLOCK) USING (SELECT 1 AS dummy) AS src ON ($this->idCol = ?) ".
                     "WHEN NOT MATCHED THEN INSERT ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?) ".
                     "WHEN MATCHED THEN UPDATE SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ?;";
@@ -877,7 +877,7 @@ private function getMergeStatement($sessionId, $data, $maxlifetime)
                     "ON CONFLICT ($this->idCol) DO UPDATE SET ($this->dataCol, $this->lifetimeCol, $this->timeCol) = (EXCLUDED.$this->dataCol, EXCLUDED.$this->lifetimeCol, EXCLUDED.$this->timeCol)";
                 break;
             default:
-                // MERGE is not supported with LOBs: http://www.oracle.com/technetwork/articles/fuecks-lobs-095315.html
+                // MERGE is not supported with LOBs: https://oracle.com/technetwork/articles/fuecks-lobs-095315.html
                 return null;
         }
 
diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php
index 83a1f2c063c057443bad6152388f6b810059c5a6..fab8e9a16d8d96a2e477cd52bcccc44e42e21d3d 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php
@@ -94,7 +94,7 @@ public function close()
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function gc($maxlifetime)
     {
diff --git a/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php b/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
index c4dbe7586822681a3598ddc46e9dcb254e5d67cf..4c5873728a19d6c3b49fa15e3172abbaad74ee52 100644
--- a/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
+++ b/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
@@ -54,7 +54,7 @@ class NativeSessionStorage implements SessionStorageInterface
      *
      * List of options for $options array with their defaults.
      *
-     * @see http://php.net/session.configuration for options
+     * @see https://php.net/session.configuration for options
      * but we omit 'session.' from the beginning of the keys for convenience.
      *
      * ("auto_start", is not supported as it tells PHP to start a session before
@@ -100,6 +100,10 @@ class NativeSessionStorage implements SessionStorageInterface
      */
     public function __construct(array $options = [], $handler = null, MetadataBag $metaBag = null)
     {
+        if (!\extension_loaded('session')) {
+            throw new \LogicException('PHP extension "session" is required.');
+        }
+
         $options += [
             'cache_limiter' => '',
             'cache_expire' => 0,
@@ -208,7 +212,7 @@ public function regenerate($destroy = false, $lifetime = null)
         $isRegenerated = session_regenerate_id($destroy);
 
         // The reference to $_SESSION in session bags is lost in PHP7 and we need to re-create it.
-        // @see https://bugs.php.net/bug.php?id=70013
+        // @see https://bugs.php.net/70013
         $this->loadSession();
 
         return $isRegenerated;
@@ -333,7 +337,7 @@ public function isStarted()
      *
      * @param array $options Session ini directives [key => value]
      *
-     * @see http://php.net/session.configuration
+     * @see https://php.net/session.configuration
      */
     public function setOptions(array $options)
     {
@@ -374,10 +378,10 @@ public function setOptions(array $options)
      * constructor, for a template see NativeFileSessionHandler or use handlers in
      * composer package drak/native-session
      *
-     * @see http://php.net/session-set-save-handler
-     * @see http://php.net/sessionhandlerinterface
-     * @see http://php.net/sessionhandler
-     * @see http://github.com/drak/NativeSession
+     * @see https://php.net/session-set-save-handler
+     * @see https://php.net/sessionhandlerinterface
+     * @see https://php.net/sessionhandler
+     * @see https://github.com/zikula/NativeSession
      *
      * @param \SessionHandlerInterface|null $saveHandler
      *
@@ -426,7 +430,7 @@ protected function loadSession(array &$session = null)
 
         foreach ($bags as $bag) {
             $key = $bag->getStorageKey();
-            $session[$key] = isset($session[$key]) ? $session[$key] : [];
+            $session[$key] = isset($session[$key]) && \is_array($session[$key]) ? $session[$key] : [];
             $bag->initialize($session[$key]);
         }
 
diff --git a/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php b/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php
index 662ed5015adecdb293cc112e1d49239d1615097a..8969e609aaf95782deae4c56617650e4eb0b9a68 100644
--- a/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php
+++ b/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php
@@ -24,6 +24,10 @@ class PhpBridgeSessionStorage extends NativeSessionStorage
      */
     public function __construct($handler = null, MetadataBag $metaBag = null)
     {
+        if (!\extension_loaded('session')) {
+            throw new \LogicException('PHP extension "session" is required.');
+        }
+
         $this->setMetadataBag($metaBag);
         $this->setSaveHandler($handler);
     }
diff --git a/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php b/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php
index 09c92483c7575f6b9bf7083c19a75c9ad6d9f58c..0303729e7b387b0b5b60dfa3a077cc54cf850836 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php
@@ -31,7 +31,7 @@ abstract class AbstractProxy
     /**
      * Gets the session.save_handler name.
      *
-     * @return string
+     * @return string|null
      */
     public function getSaveHandlerName()
     {
diff --git a/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php b/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php
index b11cc397a09736760c6511e2a33e12004a545e2c..e40712d93f637144c482d7a3da9aa24a93eb9201 100644
--- a/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php
+++ b/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php
@@ -76,7 +76,7 @@ public function destroy($sessionId)
     }
 
     /**
-     * {@inheritdoc}
+     * @return bool
      */
     public function gc($maxlifetime)
     {
diff --git a/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php b/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php
index 66e8b33dd2bed4a6ed324025a591c81eaa39dbb2..eeb396a2f131c453fbd574023ac4b9639fddc1ff 100644
--- a/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php
+++ b/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php
@@ -77,7 +77,7 @@ public function setName($name);
      * only delete the session data from persistent storage.
      *
      * Care: When regenerating the session ID no locking is involved in PHP's
-     * session design. See https://bugs.php.net/bug.php?id=61470 for a discussion.
+     * session design. See https://bugs.php.net/61470 for a discussion.
      * So you must make sure the regenerated session is saved BEFORE sending the
      * headers with the new ID. Symfony's HttpKernel offers a listener for this.
      * See Symfony\Component\HttpKernel\EventListener\SaveSessionListener.
diff --git a/vendor/symfony/http-foundation/StreamedResponse.php b/vendor/symfony/http-foundation/StreamedResponse.php
index 8bc5fc91a5c18475cee9c3cb190316bbe901737e..b9148ea8726a67ba981d1456fdc0958b318da433 100644
--- a/vendor/symfony/http-foundation/StreamedResponse.php
+++ b/vendor/symfony/http-foundation/StreamedResponse.php
@@ -136,8 +136,6 @@ public function setContent($content)
 
     /**
      * {@inheritdoc}
-     *
-     * @return false
      */
     public function getContent()
     {
diff --git a/vendor/symfony/http-foundation/Tests/BinaryFileResponseTest.php b/vendor/symfony/http-foundation/Tests/BinaryFileResponseTest.php
index 853b4bb3dfe117bc4a56edd310f097c86925a2e8..fcad11defa58b3ee7648f7d619d40ad1d8b04417 100644
--- a/vendor/symfony/http-foundation/Tests/BinaryFileResponseTest.php
+++ b/vendor/symfony/http-foundation/Tests/BinaryFileResponseTest.php
@@ -46,11 +46,9 @@ public function testConstructWithNonAsciiFilename()
         $this->assertSame('fööö.html', $response->getFile()->getFilename());
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testSetContent()
     {
+        $this->expectException('LogicException');
         $response = new BinaryFileResponse(__FILE__);
         $response->setContent('foo');
     }
@@ -109,7 +107,7 @@ public function testRequests($requestRange, $offset, $length, $responseRange)
 
         $this->assertEquals(206, $response->getStatusCode());
         $this->assertEquals($responseRange, $response->headers->get('Content-Range'));
-        $this->assertSame($length, $response->headers->get('Content-Length'));
+        $this->assertSame((string) $length, $response->headers->get('Content-Length'));
     }
 
     /**
@@ -263,7 +261,7 @@ public function testXSendfile($file)
         $this->expectOutputString('');
         $response->sendContent();
 
-        $this->assertContains('README.md', $response->headers->get('X-Sendfile'));
+        $this->assertStringContainsString('README.md', $response->headers->get('X-Sendfile'));
     }
 
     public function provideXSendfileFiles()
diff --git a/vendor/symfony/http-foundation/Tests/CookieTest.php b/vendor/symfony/http-foundation/Tests/CookieTest.php
index aaf2edb385807a2cfeb7b5885cf52155e5f4f14d..169f9178751d409dd9c80674e44138c2e5b0d5b6 100644
--- a/vendor/symfony/http-foundation/Tests/CookieTest.php
+++ b/vendor/symfony/http-foundation/Tests/CookieTest.php
@@ -24,10 +24,9 @@
  */
 class CookieTest extends TestCase
 {
-    public function invalidNames()
+    public function namesWithSpecialCharacters()
     {
         return [
-            [''],
             [',MyName'],
             [';MyName'],
             [' MyName'],
@@ -40,19 +39,31 @@ public function invalidNames()
     }
 
     /**
-     * @dataProvider invalidNames
-     * @expectedException \InvalidArgumentException
+     * @dataProvider namesWithSpecialCharacters
      */
-    public function testInstantiationThrowsExceptionIfCookieNameContainsInvalidCharacters($name)
+    public function testInstantiationThrowsExceptionIfRawCookieNameContainsSpecialCharacters($name)
     {
-        new Cookie($name);
+        $this->expectException('InvalidArgumentException');
+        new Cookie($name, null, 0, null, null, null, false, true);
     }
 
     /**
-     * @expectedException \InvalidArgumentException
+     * @dataProvider namesWithSpecialCharacters
      */
+    public function testInstantiationSucceedNonRawCookieNameContainsSpecialCharacters($name)
+    {
+        $this->assertInstanceOf(Cookie::class, new Cookie($name));
+    }
+
+    public function testInstantiationThrowsExceptionIfCookieNameIsEmpty()
+    {
+        $this->expectException('InvalidArgumentException');
+        new Cookie('');
+    }
+
     public function testInvalidExpiration()
     {
+        $this->expectException('InvalidArgumentException');
         new Cookie('MyCookie', 'foo', 'bar');
     }
 
@@ -121,7 +132,7 @@ public function testGetExpiresTimeWithStringValue()
         $cookie = new Cookie('foo', 'bar', $value);
         $expire = strtotime($value);
 
-        $this->assertEquals($expire, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date', 1);
+        $this->assertEqualsWithDelta($expire, $cookie->getExpiresTime(), 1, '->getExpiresTime() returns the expire date');
     }
 
     public function testGetDomain()
diff --git a/vendor/symfony/http-foundation/Tests/ExpressionRequestMatcherTest.php b/vendor/symfony/http-foundation/Tests/ExpressionRequestMatcherTest.php
index 2afdade67d9ce03103c4b87cb21637a13605360f..8a389329e47ce7c92872689108f1c1d58a63ad36 100644
--- a/vendor/symfony/http-foundation/Tests/ExpressionRequestMatcherTest.php
+++ b/vendor/symfony/http-foundation/Tests/ExpressionRequestMatcherTest.php
@@ -18,11 +18,9 @@
 
 class ExpressionRequestMatcherTest extends TestCase
 {
-    /**
-     * @expectedException \LogicException
-     */
     public function testWhenNoExpressionIsSet()
     {
+        $this->expectException('LogicException');
         $expressionRequestMatcher = new ExpressionRequestMatcher();
         $expressionRequestMatcher->matches(new Request());
     }
diff --git a/vendor/symfony/http-foundation/Tests/File/FileTest.php b/vendor/symfony/http-foundation/Tests/File/FileTest.php
index caf20299270080a86a42c1bfaddbc00664ee10b2..b463aadf8c6d92deaf8bb3808465c9f6ef304858 100644
--- a/vendor/symfony/http-foundation/Tests/File/FileTest.php
+++ b/vendor/symfony/http-foundation/Tests/File/FileTest.php
@@ -64,7 +64,7 @@ public function testGuessExtensionWithReset()
 
     public function testConstructWhenFileNotExists()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
+        $this->expectException('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
 
         new File(__DIR__.'/Fixtures/not_here');
     }
diff --git a/vendor/symfony/http-foundation/Tests/File/Fixtures/-test b/vendor/symfony/http-foundation/Tests/File/Fixtures/-test
new file mode 100644
index 0000000000000000000000000000000000000000..b636f4b8df536b0a85e7cea1a6cf3f0bd3179b96
Binary files /dev/null and b/vendor/symfony/http-foundation/Tests/File/Fixtures/-test differ
diff --git a/vendor/symfony/http-foundation/Tests/File/MimeType/MimeTypeTest.php b/vendor/symfony/http-foundation/Tests/File/MimeType/MimeTypeTest.php
index bb88807ab051915709888fa510988901031822cf..0418726b5b905a4dd9ac46f8c86cdaedd8742107 100644
--- a/vendor/symfony/http-foundation/Tests/File/MimeType/MimeTypeTest.php
+++ b/vendor/symfony/http-foundation/Tests/File/MimeType/MimeTypeTest.php
@@ -20,7 +20,16 @@
  */
 class MimeTypeTest extends TestCase
 {
-    protected $path;
+    public function testGuessWithLeadingDash()
+    {
+        $cwd = getcwd();
+        chdir(__DIR__.'/../Fixtures');
+        try {
+            $this->assertEquals('image/gif', MimeTypeGuesser::getInstance()->guess('-test'));
+        } finally {
+            chdir($cwd);
+        }
+    }
 
     public function testGuessImageWithoutExtension()
     {
@@ -29,7 +38,7 @@ public function testGuessImageWithoutExtension()
 
     public function testGuessImageWithDirectory()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
+        $this->expectException('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
 
         MimeTypeGuesser::getInstance()->guess(__DIR__.'/../Fixtures/directory');
     }
@@ -53,7 +62,7 @@ public function testGuessFileWithUnknownExtension()
 
     public function testGuessWithIncorrectPath()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
+        $this->expectException('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
         MimeTypeGuesser::getInstance()->guess(__DIR__.'/../Fixtures/not_here');
     }
 
@@ -72,7 +81,7 @@ public function testGuessWithNonReadablePath()
         @chmod($path, 0333);
 
         if ('0333' == substr(sprintf('%o', fileperms($path)), -4)) {
-            $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException');
+            $this->expectException('Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException');
             MimeTypeGuesser::getInstance()->guess($path);
         } else {
             $this->markTestSkipped('Can not verify chmod operations, change of file permissions failed');
diff --git a/vendor/symfony/http-foundation/Tests/File/UploadedFileTest.php b/vendor/symfony/http-foundation/Tests/File/UploadedFileTest.php
index 5a37cda351f9ac55db2038ccb9686d55446a196c..2ea924bac2a4d6d99748cd2f9e9a9331ece96d31 100644
--- a/vendor/symfony/http-foundation/Tests/File/UploadedFileTest.php
+++ b/vendor/symfony/http-foundation/Tests/File/UploadedFileTest.php
@@ -25,7 +25,7 @@ protected function setUp()
 
     public function testConstructWhenFileNotExists()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
+        $this->expectException('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
 
         new UploadedFile(
             __DIR__.'/Fixtures/not_here',
@@ -142,11 +142,9 @@ public function testGetClientOriginalExtension()
         $this->assertEquals('gif', $file->getClientOriginalExtension());
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpFoundation\File\Exception\FileException
-     */
     public function testMoveLocalFileIsNotAllowed()
     {
+        $this->expectException('Symfony\Component\HttpFoundation\File\Exception\FileException');
         $file = new UploadedFile(
             __DIR__.'/Fixtures/test.gif',
             'original.gif',
@@ -155,7 +153,7 @@ public function testMoveLocalFileIsNotAllowed()
             UPLOAD_ERR_OK
         );
 
-        $movedFile = $file->move(__DIR__.'/Fixtures/directory');
+        $file->move(__DIR__.'/Fixtures/directory');
     }
 
     public function testMoveLocalFileIsAllowedInTestMode()
@@ -283,4 +281,18 @@ public function testIsInvalidIfNotHttpUpload()
 
         $this->assertFalse($file->isValid());
     }
+
+    public function testGetMaxFilesize()
+    {
+        $size = UploadedFile::getMaxFilesize();
+
+        $this->assertIsInt($size);
+        $this->assertGreaterThan(0, $size);
+
+        if (0 === (int) ini_get('post_max_size') && 0 === (int) ini_get('upload_max_filesize')) {
+            $this->assertSame(PHP_INT_MAX, $size);
+        } else {
+            $this->assertLessThan(PHP_INT_MAX, $size);
+        }
+    }
 }
diff --git a/vendor/symfony/http-foundation/Tests/FileBagTest.php b/vendor/symfony/http-foundation/Tests/FileBagTest.php
index 0b6d660423f8a0128f55574fd6695a2d1c0064b1..a3882bc8651591872af24584f95f6841880e0872 100644
--- a/vendor/symfony/http-foundation/Tests/FileBagTest.php
+++ b/vendor/symfony/http-foundation/Tests/FileBagTest.php
@@ -23,11 +23,9 @@
  */
 class FileBagTest extends TestCase
 {
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testFileMustBeAnArrayOrUploadedFile()
     {
+        $this->expectException('InvalidArgumentException');
         new FileBag(['file' => 'foo']);
     }
 
diff --git a/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.expected b/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.expected
index 14e44a398af6664809b09045f4878e0ce5aab43f..17a9efc669043b9c44d838ecb513b55e666d0452 100644
--- a/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.expected
+++ b/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.expected
@@ -4,7 +4,8 @@ Array
     [0] => Content-Type: text/plain; charset=utf-8
     [1] => Cache-Control: no-cache, private
     [2] => Date: Sat, 12 Nov 1955 20:04:00 GMT
-    [3] => Set-Cookie: ?*():@&+$/%#[]=%3F%2A%28%29%3A%40%26%2B%24%2F%25%23%5B%5D; path=/
+    [3] => Set-Cookie: %3D%2C%3B%20%09%0D%0A%0B%0C=%3D%2C%3B%20%09%0D%0A%0B%0C; path=/
     [4] => Set-Cookie: ?*():@&+$/%#[]=%3F%2A%28%29%3A%40%26%2B%24%2F%25%23%5B%5D; path=/
+    [5] => Set-Cookie: ?*():@&+$/%#[]=%3F%2A%28%29%3A%40%26%2B%24%2F%25%23%5B%5D; path=/
 )
 shutdown
diff --git a/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.php b/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.php
index 05b9af30d58f20412a63f4c28f7bcd601626ee8c..9ffb0dfec82afc9d30fff32b34b25a71d7f8954b 100644
--- a/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.php
+++ b/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/cookie_urlencode.php
@@ -4,9 +4,12 @@
 
 $r = require __DIR__.'/common.inc';
 
-$str = '?*():@&+$/%#[]';
+$str1 = "=,; \t\r\n\v\f";
+$r->headers->setCookie(new Cookie($str1, $str1, 0, '', null, false, false, false, null));
 
-$r->headers->setCookie(new Cookie($str, $str, 0, '', null, false, false));
+$str2 = '?*():@&+$/%#[]';
+
+$r->headers->setCookie(new Cookie($str2, $str2, 0, '', null, false, false, false, null));
 $r->sendHeaders();
 
-setcookie($str, $str, 0, '/');
+setcookie($str2, $str2, 0, '/');
diff --git a/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/invalid_cookie_name.php b/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/invalid_cookie_name.php
index 3fe157184562897bbc26e4d9a6a36d2a5793d54b..3acf86039d93d3d67348574032cf51cb3973192d 100644
--- a/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/invalid_cookie_name.php
+++ b/vendor/symfony/http-foundation/Tests/Fixtures/response-functional/invalid_cookie_name.php
@@ -5,7 +5,7 @@
 $r = require __DIR__.'/common.inc';
 
 try {
-    $r->headers->setCookie(new Cookie('Hello + world', 'hodor'));
+    $r->headers->setCookie(new Cookie('Hello + world', 'hodor', 0, null, null, null, false, true));
 } catch (\InvalidArgumentException $e) {
     echo $e->getMessage();
 }
diff --git a/vendor/symfony/http-foundation/Tests/HeaderBagTest.php b/vendor/symfony/http-foundation/Tests/HeaderBagTest.php
index 6c4915f2e43b9a36fbd1d8ca6723272d11f38ccb..cabe038bdf00b9b92a56d373be88850edacfa611 100644
--- a/vendor/symfony/http-foundation/Tests/HeaderBagTest.php
+++ b/vendor/symfony/http-foundation/Tests/HeaderBagTest.php
@@ -48,13 +48,18 @@ public function testGetDate()
         $this->assertInstanceOf('DateTime', $headerDate);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
+    public function testGetDateNull()
+    {
+        $bag = new HeaderBag(['foo' => null]);
+        $headerDate = $bag->getDate('foo');
+        $this->assertNull($headerDate);
+    }
+
     public function testGetDateException()
     {
+        $this->expectException('RuntimeException');
         $bag = new HeaderBag(['foo' => 'Tue']);
-        $headerDate = $bag->getDate('foo');
+        $bag->getDate('foo');
     }
 
     public function testGetCacheControlHeader()
@@ -98,6 +103,9 @@ public function testGet()
         $bag->set('foo', 'bor', false);
         $this->assertEquals('bar', $bag->get('foo'), '->get return first value');
         $this->assertEquals(['bar', 'bor'], $bag->get('foo', 'nope', false), '->get return all values as array');
+
+        $bag->set('baz', null);
+        $this->assertNull($bag->get('baz', 'nope'), '->get return null although different default value is given');
     }
 
     public function testSetAssociativeArray()
diff --git a/vendor/symfony/http-foundation/Tests/IpUtilsTest.php b/vendor/symfony/http-foundation/Tests/IpUtilsTest.php
index c7f76b5de29267c50661e69d12d24874b2bf181b..d3b262e048526bdeda870a83a82f497f7a7245f0 100644
--- a/vendor/symfony/http-foundation/Tests/IpUtilsTest.php
+++ b/vendor/symfony/http-foundation/Tests/IpUtilsTest.php
@@ -73,11 +73,11 @@ public function getIpv6Data()
     }
 
     /**
-     * @expectedException \RuntimeException
      * @requires extension sockets
      */
     public function testAnIpv6WithOptionDisabledIpv6()
     {
+        $this->expectException('RuntimeException');
         if (\defined('AF_INET6')) {
             $this->markTestSkipped('Only works when PHP is compiled with the option "disable-ipv6".');
         }
diff --git a/vendor/symfony/http-foundation/Tests/JsonResponseTest.php b/vendor/symfony/http-foundation/Tests/JsonResponseTest.php
index ef0346cbe6dae7d36010745ad2ea8adc15a5b4ae..9642dc28d3be3b7856565f7e2db39c43c3714cb5 100644
--- a/vendor/symfony/http-foundation/Tests/JsonResponseTest.php
+++ b/vendor/symfony/http-foundation/Tests/JsonResponseTest.php
@@ -52,8 +52,8 @@ public function testConstructorWithSimpleTypes()
         $this->assertSame('0', $response->getContent());
 
         $response = new JsonResponse(0.1);
-        $this->assertEquals('0.1', $response->getContent());
-        $this->assertInternalType('string', $response->getContent());
+        $this->assertEquals(0.1, $response->getContent());
+        $this->assertIsString($response->getContent());
 
         $response = new JsonResponse(true);
         $this->assertSame('true', $response->getContent());
@@ -141,8 +141,8 @@ public function testStaticCreateWithSimpleTypes()
 
         $response = JsonResponse::create(0.1);
         $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response);
-        $this->assertEquals('0.1', $response->getContent());
-        $this->assertInternalType('string', $response->getContent());
+        $this->assertEquals(0.1, $response->getContent());
+        $this->assertIsString($response->getContent());
 
         $response = JsonResponse::create(true);
         $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response);
@@ -216,29 +216,23 @@ public function testItAcceptsJsonAsString()
         $this->assertSame('{"foo":"bar"}', $response->getContent());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testSetCallbackInvalidIdentifier()
     {
+        $this->expectException('InvalidArgumentException');
         $response = new JsonResponse('foo');
         $response->setCallback('+invalid');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testSetContent()
     {
+        $this->expectException('InvalidArgumentException');
         JsonResponse::create("\xB1\x31");
     }
 
-    /**
-     * @expectedException \Exception
-     * @expectedExceptionMessage This error is expected
-     */
     public function testSetContentJsonSerializeError()
     {
+        $this->expectException('Exception');
+        $this->expectExceptionMessage('This error is expected');
         if (!interface_exists('JsonSerializable', false)) {
             $this->markTestSkipped('JsonSerializable is required.');
         }
diff --git a/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php b/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php
index 5f6a8ac0883f49322be796ef34e725e31aa26fef..2bbf5aa1aea5a0a9e87bc7a341a5de5eeb192fbf 100644
--- a/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php
+++ b/vendor/symfony/http-foundation/Tests/RedirectResponseTest.php
@@ -20,26 +20,19 @@ public function testGenerateMetaRedirect()
     {
         $response = new RedirectResponse('foo.bar');
 
-        $this->assertEquals(1, preg_match(
-            '#<meta http-equiv="refresh" content="\d+;url=foo\.bar" />#',
-            preg_replace(['/\s+/', '/\'/'], [' ', '"'], $response->getContent())
-        ));
+        $this->assertRegExp('#<meta http-equiv="refresh" content="\d+;url=\'foo\.bar\'" />#', preg_replace('/\s+/', ' ', $response->getContent()));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRedirectResponseConstructorNullUrl()
     {
-        $response = new RedirectResponse(null);
+        $this->expectException('InvalidArgumentException');
+        new RedirectResponse(null);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRedirectResponseConstructorWrongStatusCode()
     {
-        $response = new RedirectResponse('foo.bar', 404);
+        $this->expectException('InvalidArgumentException');
+        new RedirectResponse('foo.bar', 404);
     }
 
     public function testGenerateLocationHeader()
@@ -65,11 +58,9 @@ public function testSetTargetUrl()
         $this->assertEquals('baz.beep', $response->getTargetUrl());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testSetTargetUrlNull()
     {
+        $this->expectException('InvalidArgumentException');
         $response = new RedirectResponse('foo.bar');
         $response->setTargetUrl(null);
     }
diff --git a/vendor/symfony/http-foundation/Tests/RequestTest.php b/vendor/symfony/http-foundation/Tests/RequestTest.php
index d266e1f68a4cc03a2ec16445fe2f8f91c8d19648..bf70a5f83c7e4dfc001968f86e1111bf00596d8e 100644
--- a/vendor/symfony/http-foundation/Tests/RequestTest.php
+++ b/vendor/symfony/http-foundation/Tests/RequestTest.php
@@ -886,11 +886,9 @@ public function testGetPort()
         $this->assertEquals(80, $port, 'With only PROTO set and value is not recognized, getPort() defaults to 80.');
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testGetHostWithFakeHttpHostValue()
     {
+        $this->expectException('RuntimeException');
         $request = new Request();
         $request->initialize([], [], [], [], [], ['HTTP_HOST' => 'www.host.com?query=string']);
         $request->getHost();
@@ -1055,11 +1053,11 @@ public function getClientIpsProvider()
     }
 
     /**
-     * @expectedException \Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException
      * @dataProvider getClientIpsWithConflictingHeadersProvider
      */
     public function testGetClientIpsWithConflictingHeaders($httpForwarded, $httpXForwardedFor)
     {
+        $this->expectException('Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException');
         $request = new Request();
 
         $server = [
@@ -1153,7 +1151,7 @@ public function testGetContentReturnsResource()
     {
         $req = new Request();
         $retval = $req->getContent(true);
-        $this->assertInternalType('resource', $retval);
+        $this->assertIsResource($retval);
         $this->assertEquals('', fread($retval, 1));
         $this->assertTrue(feof($retval));
     }
@@ -1163,7 +1161,7 @@ public function testGetContentReturnsResourceWhenContentSetInConstructor()
         $req = new Request([], [], [], [], [], [], 'MyContent');
         $resource = $req->getContent(true);
 
-        $this->assertInternalType('resource', $resource);
+        $this->assertIsResource($resource);
         $this->assertEquals('MyContent', stream_get_contents($resource));
     }
 
@@ -1179,11 +1177,11 @@ public function testContentAsResource()
     }
 
     /**
-     * @expectedException \LogicException
      * @dataProvider getContentCantBeCalledTwiceWithResourcesProvider
      */
     public function testGetContentCantBeCalledTwiceWithResources($first, $second)
     {
+        $this->expectException('LogicException');
         if (\PHP_VERSION_ID >= 50600) {
             $this->markTestSkipped('PHP >= 5.6 allows to open php://input several times.');
         }
@@ -1551,7 +1549,6 @@ public function testGetLanguages()
         $request = new Request();
         $request->headers->set('Accept-language', 'zh, en-us; q=0.8, en; q=0.6');
         $this->assertEquals(['zh', 'en_US', 'en'], $request->getLanguages());
-        $this->assertEquals(['zh', 'en_US', 'en'], $request->getLanguages());
 
         $request = new Request();
         $request->headers->set('Accept-language', 'zh, en-us; q=0.6, en; q=0.8');
@@ -1633,14 +1630,14 @@ public function testToString()
 
         $asString = (string) $request;
 
-        $this->assertContains('Accept-Language: zh, en-us; q=0.8, en; q=0.6', $asString);
-        $this->assertContains('Cookie: Foo=Bar', $asString);
+        $this->assertStringContainsString('Accept-Language: zh, en-us; q=0.8, en; q=0.6', $asString);
+        $this->assertStringContainsString('Cookie: Foo=Bar', $asString);
 
         $request->cookies->set('Another', 'Cookie');
 
         $asString = (string) $request;
 
-        $this->assertContains('Cookie: Foo=Bar; Another=Cookie', $asString);
+        $this->assertStringContainsString('Cookie: Foo=Bar; Another=Cookie', $asString);
     }
 
     public function testIsMethod()
@@ -1968,20 +1965,20 @@ public function testTrustedProxiesForwarded()
 
     /**
      * @group legacy
-     * @expectedException \InvalidArgumentException
      */
     public function testSetTrustedProxiesInvalidHeaderName()
     {
+        $this->expectException('InvalidArgumentException');
         Request::create('http://example.com/');
         Request::setTrustedHeaderName('bogus name', 'X_MY_FOR');
     }
 
     /**
      * @group legacy
-     * @expectedException \InvalidArgumentException
      */
     public function testGetTrustedProxiesInvalidHeaderName()
     {
+        $this->expectException('InvalidArgumentException');
         Request::create('http://example.com/');
         Request::getTrustedHeaderName('bogus name');
     }
@@ -2118,12 +2115,8 @@ public function testHostValidity($host, $isValid, $expectedHost = null, $expecte
                 $this->assertSame($expectedPort, $request->getPort());
             }
         } else {
-            if (method_exists($this, 'expectException')) {
-                $this->expectException(SuspiciousOperationException::class);
-                $this->expectExceptionMessage('Invalid Host');
-            } else {
-                $this->setExpectedException(SuspiciousOperationException::class, 'Invalid Host');
-            }
+            $this->expectException(SuspiciousOperationException::class);
+            $this->expectExceptionMessage('Invalid Host');
 
             $request->getHost();
         }
@@ -2427,6 +2420,18 @@ public function testTrustedPort()
 
         $this->assertSame(443, $request->getPort());
     }
+
+    public function testTrustedPortDoesNotDefaultToZero()
+    {
+        Request::setTrustedProxies(['1.1.1.1'], Request::HEADER_X_FORWARDED_ALL);
+
+        $request = Request::create('/');
+        $request->server->set('REMOTE_ADDR', '1.1.1.1');
+        $request->headers->set('X-Forwarded-Host', 'test.example.com');
+        $request->headers->set('X-Forwarded-Port', '');
+
+        $this->assertSame(80, $request->getPort());
+    }
 }
 
 class RequestContentProxy extends Request
diff --git a/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php b/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php
index 93aacf24d799fb28c82de8a57eb44e5e106be830..d85f6e112fd12e460a00851d1a8911d36ec6fa96 100644
--- a/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php
+++ b/vendor/symfony/http-foundation/Tests/ResponseHeaderBagTest.php
@@ -240,21 +240,17 @@ public function testSetCookieHeader()
         $this->assertEquals([], $bag->getCookies());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testGetCookiesWithInvalidArgument()
     {
+        $this->expectException('InvalidArgumentException');
         $bag = new ResponseHeaderBag();
 
         $bag->getCookies('invalid_argument');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testMakeDispositionInvalidDisposition()
     {
+        $this->expectException('InvalidArgumentException');
         $headers = new ResponseHeaderBag();
 
         $headers->makeDisposition('invalid', 'foo.html');
@@ -298,10 +294,10 @@ public function provideMakeDisposition()
 
     /**
      * @dataProvider provideMakeDispositionFail
-     * @expectedException \InvalidArgumentException
      */
     public function testMakeDispositionFail($disposition, $filename)
     {
+        $this->expectException('InvalidArgumentException');
         $headers = new ResponseHeaderBag();
 
         $headers->makeDisposition($disposition, $filename);
diff --git a/vendor/symfony/http-foundation/Tests/ResponseTest.php b/vendor/symfony/http-foundation/Tests/ResponseTest.php
index fe6bc027ac9267db60b98832e7b62dc7663d086a..b846cdad3c3fe0675b50a0ae54d9494f6f0ef9e4 100644
--- a/vendor/symfony/http-foundation/Tests/ResponseTest.php
+++ b/vendor/symfony/http-foundation/Tests/ResponseTest.php
@@ -369,6 +369,12 @@ public function testExpire()
         $this->assertNull($response->headers->get('Expires'), '->expire() removes the Expires header when the response is fresh');
     }
 
+    public function testNullExpireHeader()
+    {
+        $response = new Response(null, 200, ['Expires' => null]);
+        $this->assertNull($response->getExpires());
+    }
+
     public function testGetTtl()
     {
         $response = new Response();
@@ -532,7 +538,6 @@ public function testPrepareRemovesContentForInformationalResponse()
         $response->prepare($request);
         $this->assertEquals('', $response->getContent());
         $this->assertFalse($response->headers->has('Content-Type'));
-        $this->assertFalse($response->headers->has('Content-Type'));
 
         $response->setContent('content');
         $response->setStatusCode(304);
@@ -582,7 +587,7 @@ public function testSetCache()
             $this->fail('->setCache() throws an InvalidArgumentException if an option is not supported');
         } catch (\Exception $e) {
             $this->assertInstanceOf('InvalidArgumentException', $e, '->setCache() throws an InvalidArgumentException if an option is not supported');
-            $this->assertContains('"wrong option"', $e->getMessage());
+            $this->assertStringContainsString('"wrong option"', $e->getMessage());
         }
 
         $options = ['etag' => '"whatever"'];
@@ -635,7 +640,7 @@ public function testSendContent()
         ob_start();
         $response->sendContent();
         $string = ob_get_clean();
-        $this->assertContains('test response rendering', $string);
+        $this->assertStringContainsString('test response rendering', $string);
     }
 
     public function testSetPublic()
@@ -846,11 +851,11 @@ public function testSetContent($content)
     }
 
     /**
-     * @expectedException \UnexpectedValueException
      * @dataProvider invalidContentProvider
      */
     public function testSetContentInvalid($content)
     {
+        $this->expectException('UnexpectedValueException');
         $response = new Response();
         $response->setContent($content);
     }
@@ -928,11 +933,11 @@ protected function provideResponse()
     }
 
     /**
-     * @see       http://github.com/zendframework/zend-diactoros for the canonical source repository
+     * @see http://github.com/zendframework/zend-diactoros for the canonical source repository
      *
-     * @author    Fábio Pacheco
+     * @author Fábio Pacheco
      * @copyright Copyright (c) 2015-2016 Zend Technologies USA Inc. (http://www.zend.com)
-     * @license   https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
+     * @license https://github.com/zendframework/zend-diactoros/blob/master/LICENSE.md New BSD License
      */
     public function ianaCodesReasonPhrasesProvider()
     {
@@ -1001,14 +1006,3 @@ public function __toString()
 class DefaultResponse extends Response
 {
 }
-
-class ExtendedResponse extends Response
-{
-    public function setLastModified(\DateTime $date = null)
-    {
-    }
-
-    public function getDate()
-    {
-    }
-}
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
index 5ce6a9e5a664199480df363ba200da5f7f0770f3..f0f43d05b4dc91dd19d13e8227b0cbafeb7b8bda 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/MongoDbSessionHandlerTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\HttpFoundation\Tests\Session\Storage\Handler;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler;
 
@@ -22,7 +23,7 @@
 class MongoDbSessionHandlerTest extends TestCase
 {
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var MockObject
      */
     private $mongo;
     private $storage;
@@ -62,19 +63,15 @@ protected function setUp()
         $this->storage = new MongoDbSessionHandler($this->mongo, $this->options);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testConstructorShouldThrowExceptionForInvalidMongo()
     {
+        $this->expectException('InvalidArgumentException');
         new MongoDbSessionHandler(new \stdClass(), $this->options);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testConstructorShouldThrowExceptionForMissingOptions()
     {
+        $this->expectException('InvalidArgumentException');
         new MongoDbSessionHandler($this->mongo, []);
     }
 
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php
index dc827d8ab03c2d8e1743762fff410c8bf11febdc..7de55798a641372e4fa2da0bd1b9ce834eb3ec49 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NativeFileSessionHandlerTest.php
@@ -41,9 +41,9 @@ public function testConstruct()
      */
     public function testConstructSavePath($savePath, $expectedSavePath, $path)
     {
-        $handler = new NativeFileSessionHandler($savePath);
+        new NativeFileSessionHandler($savePath);
         $this->assertEquals($expectedSavePath, ini_get('session.save_path'));
-        $this->assertTrue(is_dir(realpath($path)));
+        $this->assertDirectoryExists(realpath($path));
 
         rmdir($path);
     }
@@ -59,18 +59,16 @@ public function savePathDataProvider()
         ];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testConstructException()
     {
-        $handler = new NativeFileSessionHandler('something;invalid;with;too-many-args');
+        $this->expectException('InvalidArgumentException');
+        new NativeFileSessionHandler('something;invalid;with;too-many-args');
     }
 
     public function testConstructDefault()
     {
         $path = ini_get('session.save_path');
-        $storage = new NativeSessionStorage(['name' => 'TESTING'], new NativeFileSessionHandler());
+        new NativeSessionStorage(['name' => 'TESTING'], new NativeFileSessionHandler());
 
         $this->assertEquals($path, ini_get('session.save_path'));
     }
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php
index 0d246e1aa560b8d32d7c44896bbae4fa56f1d8ad..f793db144c6aceebda2ac7db90618a7913a5c18c 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/NullSessionHandlerTest.php
@@ -28,7 +28,7 @@ class NullSessionHandlerTest extends TestCase
 {
     public function testSaveHandlers()
     {
-        $storage = $this->getStorage();
+        $this->getStorage();
         $this->assertEquals('user', ini_get('session.save_handler'));
     }
 
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php
index f0914eb43d08033268d1061b93e4a1a4cc1a6f4d..e710dca92cf8c7c1f82a2313d5dea14d435300dc 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/Handler/PdoSessionHandlerTest.php
@@ -48,22 +48,18 @@ protected function getMemorySqlitePdo()
         return $pdo;
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testWrongPdoErrMode()
     {
+        $this->expectException('InvalidArgumentException');
         $pdo = $this->getMemorySqlitePdo();
         $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_SILENT);
 
-        $storage = new PdoSessionHandler($pdo);
+        new PdoSessionHandler($pdo);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testInexistentTable()
     {
+        $this->expectException('RuntimeException');
         $storage = new PdoSessionHandler($this->getMemorySqlitePdo(), ['db_table' => 'inexistent_table']);
         $storage->open('', 'sid');
         $storage->read('id');
@@ -71,11 +67,9 @@ public function testInexistentTable()
         $storage->close();
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testCreateTableTwice()
     {
+        $this->expectException('RuntimeException');
         $storage = new PdoSessionHandler($this->getMemorySqlitePdo());
         $storage->createTable();
     }
@@ -330,15 +324,15 @@ public function testGetConnectionConnectsIfNeeded()
     public function testUrlDsn($url, $expectedDsn, $expectedUser = null, $expectedPassword = null)
     {
         $storage = new PdoSessionHandler($url);
-
-        $this->assertAttributeEquals($expectedDsn, 'dsn', $storage);
-
-        if (null !== $expectedUser) {
-            $this->assertAttributeEquals($expectedUser, 'username', $storage);
-        }
-
-        if (null !== $expectedPassword) {
-            $this->assertAttributeEquals($expectedPassword, 'password', $storage);
+        $reflection = new \ReflectionClass(PdoSessionHandler::class);
+
+        foreach (['dsn' => $expectedDsn, 'username' => $expectedUser, 'password' => $expectedPassword] as $property => $expectedValue) {
+            if (!isset($expectedValue)) {
+                continue;
+            }
+            $property = $reflection->getProperty($property);
+            $property->setAccessible(true);
+            $this->assertSame($expectedValue, $property->getValue($storage));
         }
     }
 
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/MockArraySessionStorageTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/MockArraySessionStorageTest.php
index 2e3024ef1b1669a7361c815b22d5af01e409bbbc..7e0d303b98d080076be966c5b11b34c0342c075d 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/MockArraySessionStorageTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/MockArraySessionStorageTest.php
@@ -121,11 +121,9 @@ public function testClearWithNoBagsStartsSession()
         $this->assertTrue($storage->isStarted());
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testUnstartedSave()
     {
+        $this->expectException('RuntimeException');
         $this->storage->save();
     }
 }
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/MockFileSessionStorageTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/MockFileSessionStorageTest.php
index 9e2692dc0ba189d93e130cfe844b5008cc70347e..d6bd1823f4a71761c4f235bd61077992d302fd97 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/MockFileSessionStorageTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/MockFileSessionStorageTest.php
@@ -41,12 +41,12 @@ protected function setUp()
 
     protected function tearDown()
     {
-        $this->sessionDir = null;
-        $this->storage = null;
-        array_map('unlink', glob($this->sessionDir.'/*.session'));
+        array_map('unlink', glob($this->sessionDir.'/*'));
         if (is_dir($this->sessionDir)) {
             rmdir($this->sessionDir);
         }
+        $this->sessionDir = null;
+        $this->storage = null;
     }
 
     public function testStart()
@@ -107,11 +107,9 @@ public function testMultipleInstances()
         $this->assertEquals('bar', $storage2->getBag('attributes')->get('foo'), 'values persist between instances');
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testSaveWithoutStart()
     {
+        $this->expectException('RuntimeException');
         $storage1 = $this->getStorage();
         $storage1->save();
     }
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/NativeSessionStorageTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/NativeSessionStorageTest.php
index 7cc2eb79c8dbdd4c32cf51b3721695d295193faa..9ce8108dacc619408a68dec4f94695ee130207ba 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/NativeSessionStorageTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/NativeSessionStorageTest.php
@@ -72,20 +72,16 @@ public function testBag()
         $this->assertSame($bag, $storage->getBag($bag->getName()));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRegisterBagException()
     {
+        $this->expectException('InvalidArgumentException');
         $storage = $this->getStorage();
         $storage->getBag('non_existing');
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRegisterBagForAStartedSessionThrowsException()
     {
+        $this->expectException('LogicException');
         $storage = $this->getStorage();
         $storage->start();
         $storage->registerBag(new AttributeBag());
@@ -98,7 +94,7 @@ public function testGetId()
 
         $storage->start();
         $id = $storage->getId();
-        $this->assertInternalType('string', $id);
+        $this->assertIsString($id);
         $this->assertNotSame('', $id);
 
         $storage->save();
@@ -149,7 +145,7 @@ public function testDefaultSessionCacheLimiter()
     {
         $this->iniSet('session.cache_limiter', 'nocache');
 
-        $storage = new NativeSessionStorage();
+        new NativeSessionStorage();
         $this->assertEquals('', ini_get('session.cache_limiter'));
     }
 
@@ -157,7 +153,7 @@ public function testExplicitSessionCacheLimiter()
     {
         $this->iniSet('session.cache_limiter', 'nocache');
 
-        $storage = new NativeSessionStorage(['cache_limiter' => 'public']);
+        new NativeSessionStorage(['cache_limiter' => 'public']);
         $this->assertEquals('public', ini_get('session.cache_limiter'));
     }
 
@@ -201,11 +197,9 @@ public function testSessionOptions()
         $this->assertSame('200', ini_get('session.cache_expire'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testSetSaveHandlerException()
     {
+        $this->expectException('InvalidArgumentException');
         $storage = $this->getStorage();
         $storage->setSaveHandler(new \stdClass());
     }
@@ -228,11 +222,9 @@ public function testSetSaveHandler()
         $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testStarted()
     {
+        $this->expectException('RuntimeException');
         $storage = $this->getStorage();
 
         $this->assertFalse($storage->getSaveHandler()->isActive());
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
index cbb291f19fc3f3c6daf9ddbadc46230c02cbc892..ae40f2c29b0cdc44f3337c364f671c039928855d 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/AbstractProxyTest.php
@@ -80,10 +80,10 @@ public function testName()
     /**
      * @runInSeparateProcess
      * @preserveGlobalState disabled
-     * @expectedException \LogicException
      */
     public function testNameException()
     {
+        $this->expectException('LogicException');
         session_start();
         $this->proxy->setName('foo');
     }
@@ -103,10 +103,10 @@ public function testId()
     /**
      * @runInSeparateProcess
      * @preserveGlobalState disabled
-     * @expectedException \LogicException
      */
     public function testIdException()
     {
+        $this->expectException('LogicException');
         session_start();
         $this->proxy->setId('foo');
     }
diff --git a/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php b/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php
index b6e0da99ddd673d19c005c71297ec1ea67d1f256..1457ebd70d1c4d0023ff2addb47656960c3854e0 100644
--- a/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php
+++ b/vendor/symfony/http-foundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php
@@ -25,7 +25,7 @@
 class SessionHandlerProxyTest extends TestCase
 {
     /**
-     * @var \PHPUnit_Framework_MockObject_Matcher
+     * @var \PHPUnit\Framework\MockObject\Matcher
      */
     private $mock;
 
@@ -144,7 +144,8 @@ public function testUpdateTimestamp()
     {
         $mock = $this->getMockBuilder(['SessionHandlerInterface', 'SessionUpdateTimestampHandlerInterface'])->getMock();
         $mock->expects($this->once())
-            ->method('updateTimestamp');
+            ->method('updateTimestamp')
+            ->willReturn(false);
 
         $proxy = new SessionHandlerProxy($mock);
         $proxy->updateTimestamp('id', 'data');
diff --git a/vendor/symfony/http-foundation/Tests/StreamedResponseTest.php b/vendor/symfony/http-foundation/Tests/StreamedResponseTest.php
index 62dfc9bc94a7b2fdbbdb04bbc4f726ed2e201a11..a084e917dcc0e9947c3b7274cbd4816e54121d12 100644
--- a/vendor/symfony/http-foundation/Tests/StreamedResponseTest.php
+++ b/vendor/symfony/http-foundation/Tests/StreamedResponseTest.php
@@ -81,20 +81,16 @@ public function testSendContent()
         $this->assertEquals(1, $called);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testSendContentWithNonCallable()
     {
+        $this->expectException('LogicException');
         $response = new StreamedResponse(null);
         $response->sendContent();
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testSetContent()
     {
+        $this->expectException('LogicException');
         $response = new StreamedResponse(function () { echo 'foo'; });
         $response->setContent('foo');
     }
diff --git a/vendor/symfony/http-kernel/Bundle/Bundle.php b/vendor/symfony/http-kernel/Bundle/Bundle.php
index 62b86ca7fd1e1eb17a3cb987c7f618543538a118..5bbed6bef1bd05699ac61fcc17c096cb03d1cb9b 100644
--- a/vendor/symfony/http-kernel/Bundle/Bundle.php
+++ b/vendor/symfony/http-kernel/Bundle/Bundle.php
@@ -19,8 +19,7 @@
 use Symfony\Component\Finder\Finder;
 
 /**
- * An implementation of BundleInterface that adds a few conventions
- * for DependencyInjection extensions and Console commands.
+ * An implementation of BundleInterface that adds a few conventions for DependencyInjection extensions.
  *
  * @author Fabien Potencier <fabien@symfony.com>
  */
@@ -88,9 +87,7 @@ public function getContainerExtension()
             }
         }
 
-        if ($this->extension) {
-            return $this->extension;
-        }
+        return $this->extension ?: null;
     }
 
     /**
@@ -200,9 +197,7 @@ protected function getContainerExtensionClass()
      */
     protected function createContainerExtension()
     {
-        if (class_exists($class = $this->getContainerExtensionClass())) {
-            return new $class();
-        }
+        return class_exists($class = $this->getContainerExtensionClass()) ? new $class() : null;
     }
 
     private function parseClassName()
diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php b/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php
index 5c512309662d7d57fb32d3490c8f65b01dfc652d..ba97775a90797860e61c4c3990edf6fd76fc05cd 100644
--- a/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php
+++ b/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php
@@ -24,7 +24,6 @@ interface ArgumentResolverInterface
     /**
      * Returns the arguments to pass to the controller.
      *
-     * @param Request  $request
      * @param callable $controller
      *
      * @return array An array of arguments to pass to the controller
diff --git a/vendor/symfony/http-kernel/Controller/ArgumentValueResolverInterface.php b/vendor/symfony/http-kernel/Controller/ArgumentValueResolverInterface.php
index fd7b09ecf2ede87acfeab0b16be4dd84dc04e990..6b14ed5be32dea7d18a569c59ff966bc7a223fc6 100644
--- a/vendor/symfony/http-kernel/Controller/ArgumentValueResolverInterface.php
+++ b/vendor/symfony/http-kernel/Controller/ArgumentValueResolverInterface.php
@@ -24,9 +24,6 @@ interface ArgumentValueResolverInterface
     /**
      * Whether this resolver can resolve the value for the given ArgumentMetadata.
      *
-     * @param Request          $request
-     * @param ArgumentMetadata $argument
-     *
      * @return bool
      */
     public function supports(Request $request, ArgumentMetadata $argument);
@@ -34,9 +31,6 @@ public function supports(Request $request, ArgumentMetadata $argument);
     /**
      * Returns the possible value(s).
      *
-     * @param Request          $request
-     * @param ArgumentMetadata $argument
-     *
      * @return \Generator
      */
     public function resolve(Request $request, ArgumentMetadata $argument);
diff --git a/vendor/symfony/http-kernel/Controller/ControllerResolver.php b/vendor/symfony/http-kernel/Controller/ControllerResolver.php
index e657f6143075f0df061c987b4c65e6a1079d708c..c981642fee4f06cc3e379adc887e2f7ce6d2ac2f 100644
--- a/vendor/symfony/http-kernel/Controller/ControllerResolver.php
+++ b/vendor/symfony/http-kernel/Controller/ControllerResolver.php
@@ -85,10 +85,10 @@ public function getController(Request $request)
             }
         }
 
-        $callable = $this->createController($controller);
-
-        if (!\is_callable($callable)) {
-            throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable. %s', $request->getPathInfo(), $this->getControllerError($callable)));
+        try {
+            $callable = $this->createController($controller);
+        } catch (\InvalidArgumentException $e) {
+            throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable. %s', $request->getPathInfo(), $e->getMessage()));
         }
 
         return $callable;
@@ -116,7 +116,6 @@ public function getArguments(Request $request, $controller)
     }
 
     /**
-     * @param Request                $request
      * @param callable               $controller
      * @param \ReflectionParameter[] $parameters
      *
@@ -166,7 +165,7 @@ protected function doGetArguments(Request $request, $controller, array $paramete
      *
      * @return callable A PHP callable
      *
-     * @throws \InvalidArgumentException
+     * @throws \InvalidArgumentException When the controller cannot be created
      */
     protected function createController($controller)
     {
@@ -180,7 +179,13 @@ protected function createController($controller)
             throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class));
         }
 
-        return [$this->instantiateController($class), $method];
+        $controller = [$this->instantiateController($class), $method];
+
+        if (!\is_callable($controller)) {
+            throw new \InvalidArgumentException($this->getControllerError($controller));
+        }
+
+        return $controller;
     }
 
     /**
diff --git a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php
index 32316a8d519e70d9ca676d985dec51019b4af4c2..520e83b5fe727f17bd32f73d3d18252ea76434a8 100644
--- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php
+++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php
@@ -58,7 +58,7 @@ public function getName()
      *
      * The type is the PHP class in 5.5+ and additionally the basic type in PHP 7.0+.
      *
-     * @return string
+     * @return string|null
      */
     public function getType()
     {
diff --git a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php
index fa48d0cc115740f750b7098d5ff273a1122c2cf9..2548a2a083c396e7b5f588b8497387e45e9213df 100644
--- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php
+++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php
@@ -67,8 +67,6 @@ public function createArgumentMetadata($controller)
     /**
      * Returns whether an argument is variadic.
      *
-     * @param \ReflectionParameter $parameter
-     *
      * @return bool
      */
     private function isVariadic(\ReflectionParameter $parameter)
@@ -79,8 +77,6 @@ private function isVariadic(\ReflectionParameter $parameter)
     /**
      * Determines whether an argument has a default value.
      *
-     * @param \ReflectionParameter $parameter
-     *
      * @return bool
      */
     private function hasDefaultValue(\ReflectionParameter $parameter)
@@ -91,8 +87,6 @@ private function hasDefaultValue(\ReflectionParameter $parameter)
     /**
      * Returns a default value if available.
      *
-     * @param \ReflectionParameter $parameter
-     *
      * @return mixed|null
      */
     private function getDefaultValue(\ReflectionParameter $parameter)
@@ -103,25 +97,23 @@ private function getDefaultValue(\ReflectionParameter $parameter)
     /**
      * Returns an associated type to the given parameter if available.
      *
-     * @param \ReflectionParameter $parameter
-     *
      * @return string|null
      */
     private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbstract $function)
     {
         if ($this->supportsParameterType) {
             if (!$type = $parameter->getType()) {
-                return;
+                return null;
             }
             $name = $type instanceof \ReflectionNamedType ? $type->getName() : $type->__toString();
             if ('array' === $name && !$type->isBuiltin()) {
                 // Special case for HHVM with variadics
-                return;
+                return null;
             }
         } elseif (preg_match('/^(?:[^ ]++ ){4}([a-zA-Z_\x7F-\xFF][^ ]++)/', $parameter, $name)) {
             $name = $name[1];
         } else {
-            return;
+            return null;
         }
         $lcName = strtolower($name);
 
@@ -129,7 +121,7 @@ private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbs
             return $name;
         }
         if (!$function instanceof \ReflectionMethod) {
-            return;
+            return null;
         }
         if ('self' === $lcName) {
             return $function->getDeclaringClass()->name;
@@ -137,5 +129,7 @@ private function getType(\ReflectionParameter $parameter, \ReflectionFunctionAbs
         if ($parent = $function->getDeclaringClass()->getParentClass()) {
             return $parent->name;
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php b/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
index 626c1cc6952716b37409891bfcf1395614bf7d4c..673bf5c5fdab246b3a9b73953946ebde0dd9bce2 100644
--- a/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
@@ -81,8 +81,8 @@ public function collect(Request $request, Response $response, \Exception $except
 
             $this->data['symfony_state'] = $this->determineSymfonyState();
             $this->data['symfony_minor_version'] = sprintf('%s.%s', Kernel::MAJOR_VERSION, Kernel::MINOR_VERSION);
-            $eom = \DateTime::createFromFormat('m/Y', Kernel::END_OF_MAINTENANCE);
-            $eol = \DateTime::createFromFormat('m/Y', Kernel::END_OF_LIFE);
+            $eom = \DateTime::createFromFormat('d/m/Y', '01/'.Kernel::END_OF_MAINTENANCE);
+            $eol = \DateTime::createFromFormat('d/m/Y', '01/'.Kernel::END_OF_LIFE);
             $this->data['symfony_eom'] = $eom->format('F Y');
             $this->data['symfony_eol'] = $eol->format('F Y');
         }
@@ -119,7 +119,7 @@ public function getApplicationVersion()
     /**
      * Gets the token.
      *
-     * @return string The token
+     * @return string|null The token
      */
     public function getToken()
     {
@@ -314,8 +314,8 @@ public function getName()
     private function determineSymfonyState()
     {
         $now = new \DateTime();
-        $eom = \DateTime::createFromFormat('m/Y', Kernel::END_OF_MAINTENANCE)->modify('last day of this month');
-        $eol = \DateTime::createFromFormat('m/Y', Kernel::END_OF_LIFE)->modify('last day of this month');
+        $eom = \DateTime::createFromFormat('d/m/Y', '01/'.Kernel::END_OF_MAINTENANCE)->modify('last day of this month');
+        $eol = \DateTime::createFromFormat('d/m/Y', '01/'.Kernel::END_OF_LIFE)->modify('last day of this month');
 
         if ($now > $eol) {
             $versionState = 'eol';
diff --git a/vendor/symfony/http-kernel/DataCollector/DataCollector.php b/vendor/symfony/http-kernel/DataCollector/DataCollector.php
index 4346e0ec0f8e192fe77237d08ffff3f7c2940bd7..94307cf56cab604264c28fc0dadc73157b0355c3 100644
--- a/vendor/symfony/http-kernel/DataCollector/DataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/DataCollector.php
@@ -28,6 +28,9 @@
  */
 abstract class DataCollector implements DataCollectorInterface, \Serializable
 {
+    /**
+     * @var array|Data
+     */
     protected $data = [];
 
     /**
diff --git a/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php b/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php
index c76e7f45bdf109c8fecb14e9b0d36db56255f44b..f9be5bddfff1f576968527d4669fbcb57e81acbb 100644
--- a/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php
@@ -55,7 +55,7 @@ public function hasException()
     /**
      * Gets the exception.
      *
-     * @return \Exception The exception
+     * @return \Exception|FlattenException
      */
     public function getException()
     {
diff --git a/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php b/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
index a8dda9f671d17ca40eae609f6acbb5141d5d5daa..99a9cf23e839800d2ee373e1ce9b7f107bc00284 100644
--- a/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php
@@ -72,11 +72,6 @@ public function lateCollect()
         }
     }
 
-    /**
-     * Gets the logs.
-     *
-     * @return array An array of logs
-     */
     public function getLogs()
     {
         return isset($this->data['logs']) ? $this->data['logs'] : [];
diff --git a/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php b/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
index 671865aa16b17913ee843d13ade29601e27d0d4b..246c0c7f6f2eed1ad3048ce67179db44d570efe8 100644
--- a/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php
@@ -49,7 +49,6 @@ public function collect(Request $request, Response $response, \Exception $except
             }
         }
 
-        $content = null;
         try {
             $content = $request->getContent();
         } catch (\LogicException $e) {
@@ -59,7 +58,6 @@ public function collect(Request $request, Response $response, \Exception $except
 
         $sessionMetadata = [];
         $sessionAttributes = [];
-        $session = null;
         $flashes = [];
         if ($request->hasSession()) {
             $session = $request->getSession();
diff --git a/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php b/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php
index 7ab14b7cb856a80fbc7201578d81c5eeeb3261ea..cb490c2bb37d0ee9bce3dcf3f7bb66e3cb3fa7ed 100644
--- a/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php
+++ b/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php
@@ -15,10 +15,9 @@
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\KernelInterface;
 use Symfony\Component\Stopwatch\Stopwatch;
+use Symfony\Component\Stopwatch\StopwatchEvent;
 
 /**
- * TimeDataCollector.
- *
  * @author Fabien Potencier <fabien@symfony.com>
  */
 class TimeDataCollector extends DataCollector implements LateDataCollectorInterface
@@ -77,7 +76,7 @@ public function lateCollect()
     /**
      * Sets the request events.
      *
-     * @param array $events The request events
+     * @param StopwatchEvent[] $events The request events
      */
     public function setEvents(array $events)
     {
@@ -91,7 +90,7 @@ public function setEvents(array $events)
     /**
      * Gets the request events.
      *
-     * @return array The request events
+     * @return StopwatchEvent[] The request events
      */
     public function getEvents()
     {
@@ -133,7 +132,7 @@ public function getInitTime()
     /**
      * Gets the request time.
      *
-     * @return int The time
+     * @return float
      */
     public function getStartTime()
     {
diff --git a/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php b/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php
index af65f7ec5725d8a124de0ace2213559ae3920021..e7347d490245c3f25b6f4e71f7b404652c7e6c1d 100644
--- a/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php
+++ b/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php
@@ -102,14 +102,16 @@ private function getFileLinkFormat()
             $request = $this->requestStack->getMasterRequest();
             if ($request instanceof Request) {
                 if ($this->urlFormat instanceof \Closure && !$this->urlFormat = \call_user_func($this->urlFormat)) {
-                    return;
+                    return null;
                 }
 
                 return [
-                    $request->getSchemeAndHttpHost().$request->getBasePath().$this->urlFormat,
+                    $request->getSchemeAndHttpHost().$this->urlFormat,
                     $this->baseDir.\DIRECTORY_SEPARATOR, '',
                 ];
             }
         }
+
+        return null;
     }
 }
diff --git a/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php b/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
index ddf4fa7cecf0546950064de98f12d9dad05aebd9..c265b6010dacf7e3b3a4bfcdfc2c7bcd1c7c93d0 100644
--- a/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
+++ b/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php
@@ -42,6 +42,9 @@ protected function preDispatch($eventName, Event $event)
                 break;
             case KernelEvents::TERMINATE:
                 $token = $event->getResponse()->headers->get('X-Debug-Token');
+                if (null === $token) {
+                    break;
+                }
                 // There is a very special case when using built-in AppCache class as kernel wrapper, in the case
                 // of an ESI request leading to a `stale` response [B]  inside a `fresh` cached response [A].
                 // In this case, `$token` contains the [B] debug token, but the  open `stopwatch` section ID
@@ -66,12 +69,18 @@ protected function postDispatch($eventName, Event $event)
                 break;
             case KernelEvents::RESPONSE:
                 $token = $event->getResponse()->headers->get('X-Debug-Token');
+                if (null === $token) {
+                    break;
+                }
                 $this->stopwatch->stopSection($token);
                 break;
             case KernelEvents::TERMINATE:
                 // In the special case described in the `preDispatch` method above, the `$token` section
                 // does not exist, then closing it throws an exception which must be caught.
                 $token = $event->getResponse()->headers->get('X-Debug-Token');
+                if (null === $token) {
+                    break;
+                }
                 try {
                     $this->stopwatch->stopSection($token);
                 } catch (\LogicException $e) {
diff --git a/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php b/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php
index aee5d6f88f50b7c07d3dd82f4cadc8fd09adf54d..0a6bb4f79a6651ef50d183819039ae8f3475dff1 100644
--- a/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php
@@ -56,6 +56,7 @@ public function onKernelResponse(FilterResponseEvent $event)
 
         if ($session instanceof Session ? $session->getUsageIndex() !== end($this->sessionUsageStack) : $session->isStarted()) {
             $event->getResponse()
+                ->setExpires(new \DateTime())
                 ->setPrivate()
                 ->setMaxAge(0)
                 ->headers->addCacheControlDirective('must-revalidate');
diff --git a/vendor/symfony/http-kernel/EventListener/RouterListener.php b/vendor/symfony/http-kernel/EventListener/RouterListener.php
index 378327b57410917f22a37326f8261e2ffcea8f83..3803105e8572aa65d24b23305aed6c60b8cfdf8f 100644
--- a/vendor/symfony/http-kernel/EventListener/RouterListener.php
+++ b/vendor/symfony/http-kernel/EventListener/RouterListener.php
@@ -89,8 +89,6 @@ private function setCurrentRequest(Request $request = null)
     /**
      * After a sub-request is done, we need to reset the routing context to the parent request so that the URL generator
      * operates on the correct context again.
-     *
-     * @param FinishRequestEvent $event
      */
     public function onKernelFinishRequest(FinishRequestEvent $event)
     {
diff --git a/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php b/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
index 5901200a70f723ea7582686786c23d7eb0c7f51d..5f5cd24801f7fd15b792903c7bb75eb79b3397ef 100644
--- a/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php
@@ -29,7 +29,7 @@
  *    the one above. But by saving the session before long-running things in the terminate event,
  *    we ensure the session is not blocked longer than needed.
  *  * When regenerating the session ID no locking is involved in PHPs session design. See
- *    https://bugs.php.net/bug.php?id=61470 for a discussion. So in this case, the session must
+ *    https://bugs.php.net/61470 for a discussion. So in this case, the session must
  *    be saved anyway before sending the headers with the new session ID. Otherwise session
  *    data could get lost again for concurrent requests with the new ID. One result could be
  *    that you get logged out after just logging in.
diff --git a/vendor/symfony/http-kernel/EventListener/SessionListener.php b/vendor/symfony/http-kernel/EventListener/SessionListener.php
index 39ebfd922fac67befd4d89a18cef153533ea14b2..9e36b7626b88daef26e95a26b130458a6e6b36eb 100644
--- a/vendor/symfony/http-kernel/EventListener/SessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/SessionListener.php
@@ -32,7 +32,7 @@ public function __construct(ContainerInterface $container)
     protected function getSession()
     {
         if (!$this->container->has('session')) {
-            return;
+            return null;
         }
 
         return $this->container->get('session');
diff --git a/vendor/symfony/http-kernel/EventListener/TestSessionListener.php b/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
index 36abb422f4f6dc3321fc307d0029db60659ffee1..e2c6f5c9e875dd750f926236ee0151665af8dcee 100644
--- a/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
+++ b/vendor/symfony/http-kernel/EventListener/TestSessionListener.php
@@ -32,7 +32,7 @@ public function __construct(ContainerInterface $container)
     protected function getSession()
     {
         if (!$this->container->has('session')) {
-            return;
+            return null;
         }
 
         return $this->container->get('session');
diff --git a/vendor/symfony/http-kernel/Fragment/FragmentHandler.php b/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
index f40da0018bc17ca78f7f1b3d75b57fac867f45e0..9629cf706669c5def7a51b60de712ae79dd18a24 100644
--- a/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
+++ b/vendor/symfony/http-kernel/Fragment/FragmentHandler.php
@@ -108,5 +108,7 @@ protected function deliver(Response $response)
         }
 
         $response->sendContent();
+
+        return null;
     }
 }
diff --git a/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
index a0abc058819af5fda1dc03a1e7a55e18e9162342..f94a5c0760368289c00d057a7d70ddcdcaf32b24 100644
--- a/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
+++ b/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php
@@ -19,6 +19,7 @@
 use Twig\Environment;
 use Twig\Error\LoaderError;
 use Twig\Loader\ExistsLoaderInterface;
+use Twig\Loader\SourceContextLoaderInterface;
 
 /**
  * Implements the Hinclude rendering strategy.
@@ -137,22 +138,23 @@ private function templateExists($template)
         }
 
         $loader = $this->templating->getLoader();
-        if ($loader instanceof ExistsLoaderInterface || method_exists($loader, 'exists')) {
-            return $loader->exists($template);
-        }
 
-        try {
-            if (method_exists($loader, 'getSourceContext')) {
-                $loader->getSourceContext($template);
-            } else {
-                $loader->getSource($template);
+        if (1 === Environment::MAJOR_VERSION && !$loader instanceof ExistsLoaderInterface) {
+            try {
+                if ($loader instanceof SourceContextLoaderInterface) {
+                    $loader->getSourceContext($template);
+                } else {
+                    $loader->getSource($template);
+                }
+
+                return true;
+            } catch (LoaderError $e) {
             }
 
-            return true;
-        } catch (LoaderError $e) {
+            return false;
         }
 
-        return false;
+        return $loader->exists($template);
     }
 
     /**
diff --git a/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php b/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php
index 8918a3057056eac08b807ea5eacf31fda483f89f..9b4541793f05fb671843170f569f2a7bf329e22a 100644
--- a/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php
+++ b/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php
@@ -109,6 +109,8 @@ public function handle(HttpCache $cache, $uri, $alt, $ignoreErrors)
                 throw $e;
             }
         }
+
+        return '';
     }
 
     /**
diff --git a/vendor/symfony/http-kernel/HttpCache/Esi.php b/vendor/symfony/http-kernel/HttpCache/Esi.php
index dc62990b408c9f92d73fd02b8211dad895b038c9..96e6ca4bfe617942470dd07a76f8619c5ad99887 100644
--- a/vendor/symfony/http-kernel/HttpCache/Esi.php
+++ b/vendor/symfony/http-kernel/HttpCache/Esi.php
@@ -111,5 +111,7 @@ public function process(Request $request, Response $response)
 
         // remove ESI/1.0 from the Surrogate-Control header
         $this->removeFromControl($response);
+
+        return $response;
     }
 }
diff --git a/vendor/symfony/http-kernel/HttpCache/HttpCache.php b/vendor/symfony/http-kernel/HttpCache/HttpCache.php
index daaa928fa38ffc42ccba2d0174f13f9a5dc4d4e2..dbe028065948dcc55b7fd5aae2185f16a35fd67d 100644
--- a/vendor/symfony/http-kernel/HttpCache/HttpCache.php
+++ b/vendor/symfony/http-kernel/HttpCache/HttpCache.php
@@ -352,7 +352,9 @@ protected function validate(Request $request, Response $entry, $catch = false)
         }
 
         // add our cached last-modified validator
-        $subRequest->headers->set('if_modified_since', $entry->headers->get('Last-Modified'));
+        if ($entry->headers->has('Last-Modified')) {
+            $subRequest->headers->set('if_modified_since', $entry->headers->get('Last-Modified'));
+        }
 
         // Add our cached etag validator to the environment.
         // We keep the etags from the client to handle the case when the client
@@ -432,9 +434,8 @@ protected function fetch(Request $request, $catch = false)
      * All backend requests (cache passes, fetches, cache validations)
      * run through this method.
      *
-     * @param Request  $request A Request instance
-     * @param bool     $catch   Whether to catch exceptions or not
-     * @param Response $entry   A Response instance (the stale entry if present, null otherwise)
+     * @param bool          $catch Whether to catch exceptions or not
+     * @param Response|null $entry A Response instance (the stale entry if present, null otherwise)
      *
      * @return Response A Response instance
      */
@@ -646,8 +647,6 @@ private function record(Request $request, $event)
     /**
      * Calculates the key we use in the "trace" array for a given request.
      *
-     * @param Request $request
-     *
      * @return string
      */
     private function getTraceKey(Request $request)
@@ -664,8 +663,6 @@ private function getTraceKey(Request $request)
      * Checks whether the given (cached) response may be served as "stale" when a revalidation
      * is currently in progress.
      *
-     * @param Response $entry
-     *
      * @return bool true when the stale response may be served, false otherwise
      */
     private function mayServeStaleWhileRevalidate(Response $entry)
diff --git a/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php b/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php
index 25c071c335a02d4d24203652a701d4f37e6fca57..3bdf0f5199891b2cd93031199a39993f50892a45 100644
--- a/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php
+++ b/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php
@@ -130,7 +130,6 @@ public function update(Response $response)
         $response->headers->set('Cache-Control', implode(', ', array_keys($flags)));
 
         $maxAge = null;
-        $sMaxage = null;
 
         if (is_numeric($this->ageDirectives['max-age'])) {
             $maxAge = $this->ageDirectives['max-age'] + $this->age;
diff --git a/vendor/symfony/http-kernel/HttpCache/Ssi.php b/vendor/symfony/http-kernel/HttpCache/Ssi.php
index eaaa230b50ee9de21241ad19749e314612f40da9..40aac64f2a1324e05df009b4776de8191dc2100b 100644
--- a/vendor/symfony/http-kernel/HttpCache/Ssi.php
+++ b/vendor/symfony/http-kernel/HttpCache/Ssi.php
@@ -94,5 +94,7 @@ public function process(Request $request, Response $response)
 
         // remove SSI/1.0 from the Surrogate-Control header
         $this->removeFromControl($response);
+
+        return $response;
     }
 }
diff --git a/vendor/symfony/http-kernel/HttpCache/Store.php b/vendor/symfony/http-kernel/HttpCache/Store.php
index ffd4f01aea59f8003c641fd6e2b1d6c56cad3b36..c831ba2ac3ffbc69031f203680a228d94768a6a4 100644
--- a/vendor/symfony/http-kernel/HttpCache/Store.php
+++ b/vendor/symfony/http-kernel/HttpCache/Store.php
@@ -134,7 +134,7 @@ public function lookup(Request $request)
         $key = $this->getCacheKey($request);
 
         if (!$entries = $this->getMetadata($key)) {
-            return;
+            return null;
         }
 
         // find a cached entry that matches the request.
@@ -148,7 +148,7 @@ public function lookup(Request $request)
         }
 
         if (null === $match) {
-            return;
+            return null;
         }
 
         $headers = $match[1];
@@ -159,6 +159,7 @@ public function lookup(Request $request)
         // TODO the metaStore referenced an entity that doesn't exist in
         // the entityStore. We definitely want to return nil but we should
         // also purge the entry from the meta-store when this is detected.
+        return null;
     }
 
     /**
@@ -180,7 +181,7 @@ public function write(Request $request, Response $response)
         if (!$response->headers->has('X-Content-Digest')) {
             $digest = $this->generateContentDigest($response);
 
-            if (false === $this->save($digest, $response->getContent())) {
+            if (!$this->save($digest, $response->getContent())) {
                 throw new \RuntimeException('Unable to store the entity.');
             }
 
@@ -209,7 +210,7 @@ public function write(Request $request, Response $response)
 
         array_unshift($entries, [$storedEnv, $headers]);
 
-        if (false === $this->save($key, serialize($entries))) {
+        if (!$this->save($key, serialize($entries))) {
             throw new \RuntimeException('Unable to store the metadata.');
         }
 
@@ -248,7 +249,7 @@ public function invalidate(Request $request)
             }
         }
 
-        if ($modified && false === $this->save($key, serialize($entries))) {
+        if ($modified && !$this->save($key, serialize($entries))) {
             throw new \RuntimeException('Unable to store the metadata.');
         }
     }
@@ -349,13 +350,13 @@ private function doPurge($url)
      *
      * @param string $key The store key
      *
-     * @return string The data associated with the key
+     * @return string|null The data associated with the key
      */
     private function load($key)
     {
         $path = $this->getPath($key);
 
-        return file_exists($path) ? file_get_contents($path) : false;
+        return file_exists($path) && false !== ($contents = file_get_contents($path)) ? $contents : null;
     }
 
     /**
@@ -408,6 +409,8 @@ private function save($key, $data)
         }
 
         @chmod($path, 0666 & ~umask());
+
+        return true;
     }
 
     public function getPath($key)
diff --git a/vendor/symfony/http-kernel/HttpKernel.php b/vendor/symfony/http-kernel/HttpKernel.php
index 1e19923eb7e7a31aa624914dd0f347878be0ef9b..9769d5e802b2d95e1abb39d60837afd955c0d1ad 100644
--- a/vendor/symfony/http-kernel/HttpKernel.php
+++ b/vendor/symfony/http-kernel/HttpKernel.php
@@ -62,7 +62,7 @@ public function __construct(EventDispatcherInterface $dispatcher, ControllerReso
      */
     public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
     {
-        $request->headers->set('X-Php-Ob-Level', ob_get_level());
+        $request->headers->set('X-Php-Ob-Level', (string) ob_get_level());
 
         try {
             return $this->handleRaw($request, $type);
@@ -202,8 +202,7 @@ private function filterResponse(Response $response, Request $request, $type)
      * operations such as {@link RequestStack::getParentRequest()} can lead to
      * weird results.
      *
-     * @param Request $request
-     * @param int     $type
+     * @param int $type
      */
     private function finishRequest(Request $request, $type)
     {
diff --git a/vendor/symfony/http-kernel/Kernel.php b/vendor/symfony/http-kernel/Kernel.php
index 21d03f4ba5867ce6a247467f460304ad77fdd5c4..434174d5b8635a8ca9780d05e1ad0f5e84ed7f0a 100644
--- a/vendor/symfony/http-kernel/Kernel.php
+++ b/vendor/symfony/http-kernel/Kernel.php
@@ -67,11 +67,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
     private $requestStackSize = 0;
     private $resetServices = false;
 
-    const VERSION = '3.4.29';
-    const VERSION_ID = 30429;
+    const VERSION = '3.4.36';
+    const VERSION_ID = 30436;
     const MAJOR_VERSION = 3;
     const MINOR_VERSION = 4;
-    const RELEASE_VERSION = 29;
+    const RELEASE_VERSION = 36;
     const EXTRA_VERSION = '';
 
     const END_OF_MAINTENANCE = '11/2020';
@@ -206,7 +206,7 @@ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQ
     /**
      * Gets a HTTP kernel from the container.
      *
-     * @return HttpKernel
+     * @return HttpKernelInterface
      */
     protected function getHttpKernel()
     {
@@ -354,7 +354,12 @@ public function getProjectDir()
     {
         if (null === $this->projectDir) {
             $r = new \ReflectionObject($this);
-            $dir = $rootDir = \dirname($r->getFileName());
+
+            if (!file_exists($dir = $r->getFileName())) {
+                throw new \LogicException(sprintf('Cannot auto-detect project dir for kernel of class "%s".', $r->name));
+            }
+
+            $dir = $rootDir = \dirname($dir);
             while (!file_exists($dir.'/composer.json')) {
                 if ($dir === \dirname($dir)) {
                     return $this->projectDir = $rootDir;
@@ -425,7 +430,7 @@ public function setAnnotatedClassCache(array $annotatedClasses)
      */
     public function getStartTime()
     {
-        return $this->debug ? $this->startTime : -INF;
+        return $this->debug && null !== $this->startTime ? $this->startTime : -INF;
     }
 
     /**
@@ -597,10 +602,9 @@ protected function initializeContainer()
             return;
         }
 
-        if ($this->debug) {
+        if ($collectDeprecations = $this->debug && !\defined('PHPUNIT_COMPOSER_INSTALL')) {
             $collectedLogs = [];
-            $previousHandler = \defined('PHPUNIT_COMPOSER_INSTALL');
-            $previousHandler = $previousHandler ?: set_error_handler(function ($type, $message, $file, $line) use (&$collectedLogs, &$previousHandler) {
+            $previousHandler = set_error_handler(function ($type, $message, $file, $line) use (&$collectedLogs, &$previousHandler) {
                 if (E_USER_DEPRECATED !== $type && E_DEPRECATED !== $type) {
                     return $previousHandler ? $previousHandler($type, $message, $file, $line) : false;
                 }
@@ -608,7 +612,7 @@ protected function initializeContainer()
                 if (isset($collectedLogs[$message])) {
                     ++$collectedLogs[$message]['count'];
 
-                    return;
+                    return null;
                 }
 
                 $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 3);
@@ -628,6 +632,8 @@ protected function initializeContainer()
                     'trace' => $backtrace,
                     'count' => 1,
                 ];
+
+                return null;
             });
         }
 
@@ -636,7 +642,7 @@ protected function initializeContainer()
             $container = $this->buildContainer();
             $container->compile();
         } finally {
-            if ($this->debug && true !== $previousHandler) {
+            if ($collectDeprecations) {
                 restore_error_handler();
 
                 file_put_contents($cacheDir.'/'.$class.'Deprecations.log', serialize(array_values($collectedLogs)));
@@ -667,7 +673,7 @@ protected function initializeContainer()
             static $legacyContainers = [];
             $oldContainerDir = \dirname($oldContainer->getFileName());
             $legacyContainers[$oldContainerDir.'.legacy'] = true;
-            foreach (glob(\dirname($oldContainerDir).\DIRECTORY_SEPARATOR.'*.legacy') as $legacyContainer) {
+            foreach (glob(\dirname($oldContainerDir).\DIRECTORY_SEPARATOR.'*.legacy', GLOB_NOSORT) as $legacyContainer) {
                 if (!isset($legacyContainers[$legacyContainer]) && @unlink($legacyContainer)) {
                     (new Filesystem())->remove(substr($legacyContainer, 0, -7));
                 }
@@ -862,7 +868,7 @@ protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container
             $fs->dumpFile($dir.$file, $code);
             @chmod($dir.$file, 0666 & ~umask());
         }
-        $legacyFile = \dirname($dir.$file).'.legacy';
+        $legacyFile = \dirname($dir.key($content)).'.legacy';
         if (file_exists($legacyFile)) {
             @unlink($legacyFile);
         }
diff --git a/vendor/symfony/http-kernel/KernelInterface.php b/vendor/symfony/http-kernel/KernelInterface.php
index d624d1219d0f71599634e4020296ad208982d9b9..2445bbb43a4caf77402ec0d7b1e1a671197988e3 100644
--- a/vendor/symfony/http-kernel/KernelInterface.php
+++ b/vendor/symfony/http-kernel/KernelInterface.php
@@ -138,7 +138,7 @@ public function getContainer();
     /**
      * Gets the request start time (not available if debug is disabled).
      *
-     * @return int The request start timestamp
+     * @return float The request start timestamp
      */
     public function getStartTime();
 
diff --git a/vendor/symfony/http-kernel/Log/Logger.php b/vendor/symfony/http-kernel/Log/Logger.php
index e174587d15b839116935a2b963faf7f7c4aa4154..50cbcd428f933b0159ae913bdaecae1bee83435c 100644
--- a/vendor/symfony/http-kernel/Log/Logger.php
+++ b/vendor/symfony/http-kernel/Log/Logger.php
@@ -83,7 +83,6 @@ public function log($level, $message, array $context = [])
     /**
      * @param string $level
      * @param string $message
-     * @param array  $context
      *
      * @return string
      */
diff --git a/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php b/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
index 810e2fe6f2f8ddf9638bdcb92d4158b29508c727..8589b96f5778288105196f16d576a89c2417690a 100644
--- a/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
+++ b/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php
@@ -118,7 +118,7 @@ public function purge()
     public function read($token)
     {
         if (!$token || !file_exists($file = $this->getFilename($token))) {
-            return;
+            return null;
         }
 
         return $this->createProfileFromData($token, unserialize(file_get_contents($file)));
@@ -229,7 +229,7 @@ protected function readLineFromFile($file)
         $position = ftell($file);
 
         if (0 === $position) {
-            return;
+            return null;
         }
 
         while (true) {
diff --git a/vendor/symfony/http-kernel/Profiler/Profile.php b/vendor/symfony/http-kernel/Profiler/Profile.php
index c4490bc7a692978b455381613068e10a9fc02eed..3665545d234d5575655913076a41c4002901fee1 100644
--- a/vendor/symfony/http-kernel/Profiler/Profile.php
+++ b/vendor/symfony/http-kernel/Profiler/Profile.php
@@ -102,7 +102,7 @@ public function getParentToken()
     /**
      * Returns the IP.
      *
-     * @return string The IP
+     * @return string|null The IP
      */
     public function getIp()
     {
@@ -122,7 +122,7 @@ public function setIp($ip)
     /**
      * Returns the request method.
      *
-     * @return string The request method
+     * @return string|null The request method
      */
     public function getMethod()
     {
@@ -137,13 +137,16 @@ public function setMethod($method)
     /**
      * Returns the URL.
      *
-     * @return string The URL
+     * @return string|null The URL
      */
     public function getUrl()
     {
         return $this->url;
     }
 
+    /**
+     * @param string $url
+     */
     public function setUrl($url)
     {
         $this->url = $url;
@@ -180,7 +183,7 @@ public function setStatusCode($statusCode)
     }
 
     /**
-     * @return int
+     * @return int|null
      */
     public function getStatusCode()
     {
diff --git a/vendor/symfony/http-kernel/Profiler/Profiler.php b/vendor/symfony/http-kernel/Profiler/Profiler.php
index edf6cb833017d6b7ca38cc69c0645a3dba9169f9..c510afa3e0a6a45a3d4aaff4b748367c266b3689 100644
--- a/vendor/symfony/http-kernel/Profiler/Profiler.php
+++ b/vendor/symfony/http-kernel/Profiler/Profiler.php
@@ -65,12 +65,12 @@ public function enable()
     /**
      * Loads the Profile for the given Response.
      *
-     * @return Profile|false A Profile instance
+     * @return Profile|null A Profile instance
      */
     public function loadProfileFromResponse(Response $response)
     {
         if (!$token = $response->headers->get('X-Debug-Token')) {
-            return false;
+            return null;
         }
 
         return $this->loadProfile($token);
@@ -81,7 +81,7 @@ public function loadProfileFromResponse(Response $response)
      *
      * @param string $token A token
      *
-     * @return Profile A Profile instance
+     * @return Profile|null A Profile instance
      */
     public function loadProfile($token)
     {
@@ -130,7 +130,7 @@ public function purge()
      *
      * @return array An array of tokens
      *
-     * @see http://php.net/manual/en/datetime.formats.php for the supported date/time formats
+     * @see https://php.net/datetime.formats for the supported date/time formats
      */
     public function find($ip, $url, $limit, $method, $start, $end, $statusCode = null)
     {
@@ -145,7 +145,7 @@ public function find($ip, $url, $limit, $method, $start, $end, $statusCode = nul
     public function collect(Request $request, Response $response, \Exception $exception = null)
     {
         if (false === $this->enabled) {
-            return;
+            return null;
         }
 
         $profile = new Profile(substr(hash('sha256', uniqid(mt_rand(), true)), 0, 6));
@@ -248,16 +248,19 @@ public function get($name)
         return $this->collectors[$name];
     }
 
+    /**
+     * @return int|null
+     */
     private function getTimestamp($value)
     {
         if (null === $value || '' == $value) {
-            return;
+            return null;
         }
 
         try {
             $value = new \DateTime(is_numeric($value) ? '@'.$value : $value);
         } catch (\Exception $e) {
-            return;
+            return null;
         }
 
         return $value->getTimestamp();
diff --git a/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php b/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
index 544fb1fef6ec69349f8a8d6315f409399bb7739b..04cba51e2d63a616aa7232bee79afc582d10d0cc 100644
--- a/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
+++ b/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php
@@ -39,7 +39,7 @@ public function find($ip, $url, $limit, $method, $start = null, $end = null);
      *
      * @param string $token A token
      *
-     * @return Profile The profile associated with token
+     * @return Profile|null The profile associated with token
      */
     public function read($token);
 
diff --git a/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php b/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
index 3408d7acd6c0d38f1301eeb6d310c9db86be40a0..6803579c61a4a19877f3d23005826758d4f851ca 100644
--- a/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
+++ b/vendor/symfony/http-kernel/Tests/Bundle/BundleTest.php
@@ -50,11 +50,12 @@ public function testRegisterCommands()
     }
 
     /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface
+     * @group legacy
      */
     public function testGetContainerExtensionWithInvalidClass()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface');
         $bundle = new ExtensionNotValidBundle();
         $bundle->getContainerExtension();
     }
diff --git a/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php b/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php
index 297ede6a3602856539d303cb37dd1b649ee744f8..2fbce41d1c08f7e98636eef3e24f488723a0f5b6 100644
--- a/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php
+++ b/vendor/symfony/http-kernel/Tests/CacheClearer/Psr6CacheClearerTest.php
@@ -37,12 +37,10 @@ public function testClearPool()
         (new Psr6CacheClearer(['pool' => $pool]))->clearPool('pool');
     }
 
-    /**
-     * @expectedException        \InvalidArgumentException
-     * @expectedExceptionMessage Cache pool not found: unknown
-     */
     public function testClearPoolThrowsExceptionOnUnreferencedPool()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('Cache pool not found: unknown');
         (new Psr6CacheClearer())->clearPool('unknown');
     }
 
diff --git a/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php b/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
index 4d34e7bfc90ed2e0b6074374be0c14532a14ecd9..400e484574066361e6f6b10ba34cc1a762eef45a 100644
--- a/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
+++ b/vendor/symfony/http-kernel/Tests/CacheWarmer/CacheWarmerTest.php
@@ -36,11 +36,9 @@ public function testWriteCacheFileCreatesTheFile()
         $this->assertFileExists(self::$cacheFile);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testWriteNonWritableCacheFileThrowsARuntimeException()
     {
+        $this->expectException('RuntimeException');
         $nonWritableFile = '/this/file/is/very/probably/not/writable';
         $warmer = new TestCacheWarmer($nonWritableFile);
         $warmer->warmUp(\dirname($nonWritableFile));
diff --git a/vendor/symfony/http-kernel/Tests/ClientTest.php b/vendor/symfony/http-kernel/Tests/ClientTest.php
index 86a51ce7651a27ed9f787445e61629b4af8ad4a7..b141c16d64601b0c0f786e4b59b50c24bf375565 100644
--- a/vendor/symfony/http-kernel/Tests/ClientTest.php
+++ b/vendor/symfony/http-kernel/Tests/ClientTest.php
@@ -39,8 +39,8 @@ public function testDoRequest()
         $this->assertEquals('Request: /', $client->getResponse()->getContent(), '->doRequest() uses the request handler to make the request');
         $this->assertEquals('www.example.com', $client->getRequest()->getHost(), '->doRequest() uses the request handler to make the request');
 
-        $client->request('GET', 'http://www.example.com/?parameter=http://google.com');
-        $this->assertEquals('http://www.example.com/?parameter='.urlencode('http://google.com'), $client->getRequest()->getUri(), '->doRequest() uses the request handler to make the request');
+        $client->request('GET', 'http://www.example.com/?parameter=http://example.com');
+        $this->assertEquals('http://www.example.com/?parameter='.urlencode('http://example.com'), $client->getRequest()->getUri(), '->doRequest() uses the request handler to make the request');
     }
 
     public function testGetScript()
diff --git a/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php b/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php
index b20b12ab59ed6108b3c72407122c25344638fca7..72b38c672ada995f08ca046c0da25fcd97921359 100644
--- a/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php
+++ b/vendor/symfony/http-kernel/Tests/Config/FileLocatorTest.php
@@ -30,7 +30,7 @@ public function testLocate()
         $kernel
             ->expects($this->never())
             ->method('locateResource');
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('LogicException');
+        $this->expectException('LogicException');
         $locator->locate('/some/path');
     }
 
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
index 8c900fb92c2282d7b4970da926dc47f7d4d98666..a964aaeb5828b2147da336e49aea50eaf3acf5aa 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ArgumentResolverTest.php
@@ -167,10 +167,10 @@ public function testGetVariadicArguments()
 
     /**
      * @requires PHP 5.6
-     * @expectedException \InvalidArgumentException
      */
     public function testGetVariadicArgumentsWithoutArrayInRequest()
     {
+        $this->expectException('InvalidArgumentException');
         $request = Request::create('/');
         $request->attributes->set('foo', 'foo');
         $request->attributes->set('bar', 'foo');
@@ -181,10 +181,10 @@ public function testGetVariadicArgumentsWithoutArrayInRequest()
 
     /**
      * @requires PHP 5.6
-     * @expectedException \InvalidArgumentException
      */
     public function testGetArgumentWithoutArray()
     {
+        $this->expectException('InvalidArgumentException');
         $factory = new ArgumentMetadataFactory();
         $valueResolver = $this->getMockBuilder(ArgumentValueResolverInterface::class)->getMock();
         $resolver = new ArgumentResolver($factory, [$valueResolver]);
@@ -199,11 +199,9 @@ public function testGetArgumentWithoutArray()
         $resolver->getArguments($request, $controller);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testIfExceptionIsThrownWhenMissingAnArgument()
     {
+        $this->expectException('RuntimeException');
         $request = Request::create('/');
         $controller = [$this, 'controllerWithFoo'];
 
@@ -266,11 +264,9 @@ public function testGetSessionArgumentsWithInterface()
         $this->assertEquals([$session], self::$resolver->getArguments($request, $controller));
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testGetSessionMissMatchWithInterface()
     {
+        $this->expectException('RuntimeException');
         $session = $this->getMockBuilder(SessionInterface::class)->getMock();
         $request = Request::create('/');
         $request->setSession($session);
@@ -279,11 +275,9 @@ public function testGetSessionMissMatchWithInterface()
         self::$resolver->getArguments($request, $controller);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testGetSessionMissMatchWithImplementation()
     {
+        $this->expectException('RuntimeException');
         $session = new Session(new MockArraySessionStorage());
         $request = Request::create('/');
         $request->setSession($session);
@@ -292,11 +286,9 @@ public function testGetSessionMissMatchWithImplementation()
         self::$resolver->getArguments($request, $controller);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testGetSessionMissMatchOnNull()
     {
+        $this->expectException('RuntimeException');
         $request = Request::create('/');
         $controller = [$this, 'controllerWithExtendingSession'];
 
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
index 098b89f9e1255c979772559ba0b6f7e80314fd32..1f8ddb83143f4abf85799ba6ae0a9eb29735637a 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ContainerControllerResolverTest.php
@@ -112,12 +112,10 @@ public function testNonInstantiableController()
         $this->assertSame([NonInstantiableController::class, 'action'], $controller);
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Controller "Symfony\Component\HttpKernel\Tests\Controller\ImpossibleConstructController" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
-     */
     public function testNonConstructController()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Controller "Symfony\Component\HttpKernel\Tests\Controller\ImpossibleConstructController" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?');
         $container = $this->getMockBuilder(Container::class)->getMock();
         $container->expects($this->at(0))
             ->method('has')
@@ -179,12 +177,10 @@ public function testNonInstantiableControllerWithCorrespondingService()
         $this->assertSame([$service, 'action'], $controller);
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Controller "app.my_controller" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?
-     */
     public function testExceptionWhenUsingRemovedControllerService()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Controller "app.my_controller" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?');
         $container = $this->getMockBuilder(Container::class)->getMock();
         $container->expects($this->at(0))
             ->method('has')
@@ -205,12 +201,10 @@ public function testExceptionWhenUsingRemovedControllerService()
         $resolver->getController($request);
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Controller "app.my_controller" cannot be called without a method name. Did you forget an "__invoke" method?
-     */
     public function testExceptionWhenUsingControllerWithoutAnInvokeMethod()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Controller "app.my_controller" cannot be called without a method name. Did you forget an "__invoke" method?');
         $container = $this->getMockBuilder(Container::class)->getMock();
         $container->expects($this->once())
             ->method('has')
@@ -237,12 +231,8 @@ public function testGetControllerOnNonUndefinedFunction($controller, $exceptionN
     {
         // All this logic needs to be duplicated, since calling parent::testGetControllerOnNonUndefinedFunction will override the expected excetion and not use the regex
         $resolver = $this->createControllerResolver();
-        if (method_exists($this, 'expectException')) {
-            $this->expectException($exceptionName);
-            $this->expectExceptionMessageRegExp($exceptionMessage);
-        } else {
-            $this->setExpectedExceptionRegExp($exceptionName, $exceptionMessage);
-        }
+        $this->expectException($exceptionName);
+        $this->expectExceptionMessageRegExp($exceptionMessage);
 
         $request = Request::create('/');
         $request->attributes->set('_controller', $controller);
diff --git a/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php b/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
index 6a28eab26bb528ae411d88a9cdb88091e32f77a8..e34427a32e5c4555c69bc392156c5b17d5e7bc15 100644
--- a/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
+++ b/vendor/symfony/http-kernel/Tests/Controller/ControllerResolverTest.php
@@ -90,11 +90,9 @@ public function testGetControllerWithClassAndInvokeMethod()
         $this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testGetControllerOnObjectWithoutInvokeMethod()
     {
+        $this->expectException('InvalidArgumentException');
         $resolver = $this->createControllerResolver();
 
         $request = Request::create('/');
@@ -118,12 +116,8 @@ public function testGetControllerWithFunction()
     public function testGetControllerOnNonUndefinedFunction($controller, $exceptionName = null, $exceptionMessage = null)
     {
         $resolver = $this->createControllerResolver();
-        if (method_exists($this, 'expectException')) {
-            $this->expectException($exceptionName);
-            $this->expectExceptionMessage($exceptionMessage);
-        } else {
-            $this->setExpectedException($exceptionName, $exceptionMessage);
-        }
+        $this->expectException($exceptionName);
+        $this->expectExceptionMessage($exceptionMessage);
 
         $request = Request::create('/');
         $request->attributes->set('_controller', $controller);
@@ -234,11 +228,11 @@ public function testCreateControllerCanReturnAnyCallable()
     }
 
     /**
-     * @expectedException \RuntimeException
      * @group legacy
      */
     public function testIfExceptionIsThrownWhenMissingAnArgument()
     {
+        $this->expectException('RuntimeException');
         $resolver = new ControllerResolver();
         $request = Request::create('/');
 
diff --git a/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataTest.php b/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataTest.php
index 05351445e00aa062ff23be32bcb0fc082c8a4054..5ce4b1f76be06a3d277dc0a7bbf01dad4417cff9 100644
--- a/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataTest.php
+++ b/vendor/symfony/http-kernel/Tests/ControllerMetadata/ArgumentMetadataTest.php
@@ -32,11 +32,9 @@ public function testDefaultValueAvailable()
         $this->assertSame('default value', $argument->getDefaultValue());
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testDefaultValueUnavailable()
     {
+        $this->expectException('LogicException');
         $argument = new ArgumentMetadata('foo', 'string', false, false, null, false);
 
         $this->assertFalse($argument->isNullable());
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
index ace4628e09f937f06bd199b0e5d598bf647adf90..8b7fbe2a19ea6d5a5bfdcb0ed731cabd3d21b248 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/LoggerDataCollectorTest.php
@@ -23,7 +23,7 @@ public function testCollectWithUnexpectedFormat()
             ->getMockBuilder('Symfony\Component\HttpKernel\Log\DebugLoggerInterface')
             ->setMethods(['countErrors', 'getLogs', 'clear'])
             ->getMock();
-        $logger->expects($this->once())->method('countErrors')->willReturn('foo');
+        $logger->expects($this->once())->method('countErrors')->willReturn(123);
         $logger->expects($this->exactly(2))->method('getLogs')->willReturn([]);
 
         $c = new LoggerDataCollector($logger, __DIR__.'/');
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/MemoryDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/MemoryDataCollectorTest.php
index c434ed1e1162bb773a6a779dd61ccc5a8660560d..63dd62ce7039224ea82e670a3bbe3edb8de87639 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/MemoryDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/MemoryDataCollectorTest.php
@@ -23,8 +23,8 @@ public function testCollect()
         $collector = new MemoryDataCollector();
         $collector->collect(new Request(), new Response());
 
-        $this->assertInternalType('integer', $collector->getMemory());
-        $this->assertInternalType('integer', $collector->getMemoryLimit());
+        $this->assertIsInt($collector->getMemory());
+        $this->assertIsInt($collector->getMemoryLimit());
         $this->assertSame('memory', $collector->getName());
     }
 
diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/TimeDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/TimeDataCollectorTest.php
index e044e5e1add53ec2d072259e671d720cef30ed42..9de9eb599ad619ee451c80afd8a2ec0b835ff014 100644
--- a/vendor/symfony/http-kernel/Tests/DataCollector/TimeDataCollectorTest.php
+++ b/vendor/symfony/http-kernel/Tests/DataCollector/TimeDataCollectorTest.php
@@ -44,7 +44,7 @@ public function testCollect()
         $this->assertEquals(0, $c->getStartTime());
 
         $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\KernelInterface')->getMock();
-        $kernel->expects($this->once())->method('getStartTime')->willReturn(123456);
+        $kernel->expects($this->once())->method('getStartTime')->willReturn(123456.0);
 
         $c = new TimeDataCollector($kernel);
         $request = new Request();
diff --git a/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php b/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php
index 60ad1b89c4dfb3e9cd96cf5d99bbcdcd1af16805..30c5ab5aaa50b628c7c88ddd559214510a47925c 100644
--- a/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php
+++ b/vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php
@@ -25,7 +25,7 @@ class TraceableEventDispatcherTest extends TestCase
     public function testStopwatchSections()
     {
         $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch = new Stopwatch());
-        $kernel = $this->getHttpKernel($dispatcher, function () { return new Response(); });
+        $kernel = $this->getHttpKernel($dispatcher, function () { return new Response('', 200, ['X-Debug-Token' => '292e1e']); });
         $request = Request::create('/');
         $response = $kernel->handle($request);
         $kernel->terminate($request, $response);
@@ -61,15 +61,13 @@ public function testStopwatchCheckControllerOnRequestEvent()
     public function testStopwatchStopControllerOnRequestEvent()
     {
         $stopwatch = $this->getMockBuilder('Symfony\Component\Stopwatch\Stopwatch')
-            ->setMethods(['isStarted', 'stop', 'stopSection'])
+            ->setMethods(['isStarted', 'stop'])
             ->getMock();
         $stopwatch->expects($this->once())
             ->method('isStarted')
             ->willReturn(true);
         $stopwatch->expects($this->once())
             ->method('stop');
-        $stopwatch->expects($this->once())
-            ->method('stopSection');
 
         $dispatcher = new TraceableEventDispatcher(new EventDispatcher(), $stopwatch);
 
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
index 087c66659633c3d1540e1651459dbc342f635506..1d521368e1dfa36017420c94db20d0a17efade2e 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/FragmentRendererPassTest.php
@@ -25,11 +25,10 @@ class FragmentRendererPassTest extends TestCase
     /**
      * Tests that content rendering not implementing FragmentRendererInterface
      * triggers an exception.
-     *
-     * @expectedException \InvalidArgumentException
      */
     public function testContentRendererWithoutInterface()
     {
+        $this->expectException('InvalidArgumentException');
         $builder = new ContainerBuilder();
         $fragmentHandlerDefinition = $builder->register('fragment.handler');
         $builder->register('my_content_renderer', 'Symfony\Component\DependencyInjection\Definition')
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
index 6d0da5fcf868c4403e3be0d14cd98f177cd10461..ef4c8b2172f67c31d653232e61d58ef835a76b3d 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
@@ -25,12 +25,10 @@
 
 class RegisterControllerArgumentLocatorsPassTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Class "Symfony\Component\HttpKernel\Tests\DependencyInjection\NotFound" used for service "foo" cannot be found.
-     */
     public function testInvalidClass()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Class "Symfony\Component\HttpKernel\Tests\DependencyInjection\NotFound" used for service "foo" cannot be found.');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -42,12 +40,10 @@ public function testInvalidClass()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Missing "action" attribute on tag "controller.service_arguments" {"argument":"bar"} for service "foo".
-     */
     public function testNoAction()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Missing "action" attribute on tag "controller.service_arguments" {"argument":"bar"} for service "foo".');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -59,12 +55,10 @@ public function testNoAction()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Missing "argument" attribute on tag "controller.service_arguments" {"action":"fooAction"} for service "foo".
-     */
     public function testNoArgument()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Missing "argument" attribute on tag "controller.service_arguments" {"action":"fooAction"} for service "foo".');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -76,12 +70,10 @@ public function testNoArgument()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Missing "id" attribute on tag "controller.service_arguments" {"action":"fooAction","argument":"bar"} for service "foo".
-     */
     public function testNoService()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Missing "id" attribute on tag "controller.service_arguments" {"action":"fooAction","argument":"bar"} for service "foo".');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -93,12 +85,10 @@ public function testNoService()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid "action" attribute on tag "controller.service_arguments" for service "foo": no public "barAction()" method found on class "Symfony\Component\HttpKernel\Tests\DependencyInjection\RegisterTestController".
-     */
     public function testInvalidMethod()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid "action" attribute on tag "controller.service_arguments" for service "foo": no public "barAction()" method found on class "Symfony\Component\HttpKernel\Tests\DependencyInjection\RegisterTestController".');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -110,12 +100,10 @@ public function testInvalidMethod()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Invalid "controller.service_arguments" tag for service "foo": method "fooAction()" has no "baz" argument on class "Symfony\Component\HttpKernel\Tests\DependencyInjection\RegisterTestController".
-     */
     public function testInvalidArgument()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Invalid "controller.service_arguments" tag for service "foo": method "fooAction()" has no "baz" argument on class "Symfony\Component\HttpKernel\Tests\DependencyInjection\RegisterTestController".');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -207,12 +195,10 @@ public function testSkipSetContainer()
         $this->assertSame(['foo:fooAction'], array_keys($locator));
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Cannot determine controller argument for "Symfony\Component\HttpKernel\Tests\DependencyInjection\NonExistentClassController::fooAction()": the $nonExistent argument is type-hinted with the non-existent class or interface: "Symfony\Component\HttpKernel\Tests\DependencyInjection\NonExistentClass". Did you forget to add a use statement?
-     */
     public function testExceptionOnNonExistentTypeHint()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Cannot determine controller argument for "Symfony\Component\HttpKernel\Tests\DependencyInjection\NonExistentClassController::fooAction()": the $nonExistent argument is type-hinted with the non-existent class or interface: "Symfony\Component\HttpKernel\Tests\DependencyInjection\NonExistentClass". Did you forget to add a use statement?');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -223,12 +209,10 @@ public function testExceptionOnNonExistentTypeHint()
         $pass->process($container);
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Cannot determine controller argument for "Symfony\Component\HttpKernel\Tests\DependencyInjection\NonExistentClassDifferentNamespaceController::fooAction()": the $nonExistent argument is type-hinted with the non-existent class or interface: "Acme\NonExistentClass".
-     */
     public function testExceptionOnNonExistentTypeHintDifferentNamespace()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Cannot determine controller argument for "Symfony\Component\HttpKernel\Tests\DependencyInjection\NonExistentClassDifferentNamespaceController::fooAction()": the $nonExistent argument is type-hinted with the non-existent class or interface: "Acme\NonExistentClass".');
         $container = new ContainerBuilder();
         $container->register('argument_resolver.service')->addArgument([]);
 
@@ -272,7 +256,7 @@ public function testArgumentWithNoTypeHintIsOk()
     public function testControllersAreMadePublic()
     {
         $container = new ContainerBuilder();
-        $resolver = $container->register('argument_resolver.service')->addArgument([]);
+        $container->register('argument_resolver.service')->addArgument([]);
 
         $container->register('foo', ArgumentWithoutTypeController::class)
             ->setPublic(false)
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
index 713ab5441abaa0030d287adaf38272f9afdb8663..84d73515603efecd7f641a9c0579a8be28e172e6 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPassTest.php
@@ -26,7 +26,7 @@ public function testProcess()
         $resolver = $container->register('argument_resolver.service')->addArgument([]);
 
         $container->register('stdClass', 'stdClass');
-        $container->register(parent::class, 'stdClass');
+        $container->register(TestCase::class, 'stdClass');
         $container->register('c1', RemoveTestController1::class)->addTag('controller.service_arguments');
         $container->register('c2', RemoveTestController2::class)->addTag('controller.service_arguments')
             ->addMethodCall('setTestCase', [new Reference('c1')]);
diff --git a/vendor/symfony/http-kernel/Tests/DependencyInjection/ResettableServicePassTest.php b/vendor/symfony/http-kernel/Tests/DependencyInjection/ResettableServicePassTest.php
index 9b23ad003d758100cc55f86750b278eeb6ca5963..d3c6869320910595da0608d43a78eae38788d39c 100644
--- a/vendor/symfony/http-kernel/Tests/DependencyInjection/ResettableServicePassTest.php
+++ b/vendor/symfony/http-kernel/Tests/DependencyInjection/ResettableServicePassTest.php
@@ -48,12 +48,10 @@ public function testCompilerPass()
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage Tag kernel.reset requires the "method" attribute to be set.
-     */
     public function testMissingMethod()
     {
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('Tag kernel.reset requires the "method" attribute to be set.');
         $container = new ContainerBuilder();
         $container->register(ResettableService::class)
             ->addTag('kernel.reset');
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
index 6408b1b21c7e0f0e41aba37c8da661377a55f086..0fb32eece8ceab21535d14ea025ba65672aa167a 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/FragmentListenerTest.php
@@ -50,11 +50,9 @@ public function testOnlyTriggeredIfControllerWasNotDefinedYet()
         $this->assertEquals($expected, $request->attributes->all());
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
-     */
     public function testAccessDeniedWithNonSafeMethods()
     {
+        $this->expectException('Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException');
         $request = Request::create('http://example.com/_fragment', 'POST');
 
         $listener = new FragmentListener(new UriSigner('foo'));
@@ -63,11 +61,9 @@ public function testAccessDeniedWithNonSafeMethods()
         $listener->onKernelRequest($event);
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
-     */
     public function testAccessDeniedWithWrongSignature()
     {
+        $this->expectException('Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException');
         $request = Request::create('http://example.com/_fragment', 'GET', [], [], [], ['REMOTE_ADDR' => '10.0.0.1']);
 
         $listener = new FragmentListener(new UriSigner('foo'));
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
index 33f6ab9594a96925dec0df42178cb192976b4268..dbe033d1619305252b24cdf7d973ddbfda02c623 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/RouterListenerTest.php
@@ -84,11 +84,9 @@ private function createGetResponseEventForUri($uri)
         return new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testInvalidMatcher()
     {
+        $this->expectException('InvalidArgumentException');
         new RouterListener(new \stdClass(), $this->requestStack);
     }
 
@@ -206,14 +204,12 @@ public function testNoRoutingConfigurationResponse()
         $request = Request::create('http://localhost/');
         $response = $kernel->handle($request);
         $this->assertSame(404, $response->getStatusCode());
-        $this->assertContains('Welcome', $response->getContent());
+        $this->assertStringContainsString('Welcome', $response->getContent());
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
-     */
     public function testRequestWithBadHost()
     {
+        $this->expectException('Symfony\Component\HttpKernel\Exception\BadRequestHttpException');
         $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
         $request = Request::create('http://bad host %22/');
         $event = new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST);
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php
index f0bac60505bc66f4ce130155c16e379628966a02..e8ab0deed490bba80f9636e26defa3e77829a0ee 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/SessionListenerTest.php
@@ -75,6 +75,9 @@ public function testResponseIsPrivate()
         $this->assertTrue($response->headers->hasCacheControlDirective('private'));
         $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate'));
         $this->assertSame('0', $response->headers->getCacheControlDirective('max-age'));
+
+        $this->assertTrue($response->headers->has('Expires'));
+        $this->assertLessThanOrEqual((new \DateTime('now', new \DateTimeZone('UTC'))), (new \DateTime($response->headers->get('Expires'))));
     }
 
     public function testSurrogateMasterRequestIsPublic()
@@ -104,10 +107,15 @@ public function testSurrogateMasterRequestIsPublic()
         $this->assertFalse($response->headers->hasCacheControlDirective('must-revalidate'));
         $this->assertSame('30', $response->headers->getCacheControlDirective('max-age'));
 
+        $this->assertFalse($response->headers->has('Expires'));
+
         $listener->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response));
 
         $this->assertTrue($response->headers->hasCacheControlDirective('private'));
         $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate'));
         $this->assertSame('0', $response->headers->getCacheControlDirective('max-age'));
+
+        $this->assertTrue($response->headers->has('Expires'));
+        $this->assertLessThanOrEqual((new \DateTime('now', new \DateTimeZone('UTC'))), (new \DateTime($response->headers->get('Expires'))));
     }
 }
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/ValidateRequestListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/ValidateRequestListenerTest.php
index fb7a4379bfa49ca410c67e506e81720cee5a6f38..7d63cb45f06e0214d4343e5862dd72f348a63298 100644
--- a/vendor/symfony/http-kernel/Tests/EventListener/ValidateRequestListenerTest.php
+++ b/vendor/symfony/http-kernel/Tests/EventListener/ValidateRequestListenerTest.php
@@ -26,11 +26,9 @@ protected function tearDown()
         Request::setTrustedProxies([], -1);
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException
-     */
     public function testListenerThrowsWhenMasterRequestHasInconsistentClientIps()
     {
+        $this->expectException('Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException');
         $dispatcher = new EventDispatcher();
         $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
 
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php b/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php
deleted file mode 100644
index b43bc665a843ed52d1ef290863bea8b688251d7e..0000000000000000000000000000000000000000
--- a/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/DependencyInjection/ExtensionLoadedExtension.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionLoadedBundle\DependencyInjection;
-
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Extension\Extension;
-
-class ExtensionLoadedExtension extends Extension
-{
-    public function load(array $configs, ContainerBuilder $container)
-    {
-    }
-}
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php b/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php
deleted file mode 100644
index 3af81cb07396dc00669251e7ec6890d9cc124b60..0000000000000000000000000000000000000000
--- a/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionLoadedBundle/ExtensionLoadedBundle.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionLoadedBundle;
-
-use Symfony\Component\HttpKernel\Bundle\Bundle;
-
-class ExtensionLoadedBundle extends Bundle
-{
-}
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php b/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php
deleted file mode 100644
index 977976b75f88b04d62aa4f9e8aa4e3391c5e9c3d..0000000000000000000000000000000000000000
--- a/vendor/symfony/http-kernel/Tests/Fixtures/ExtensionPresentBundle/Command/BarCommand.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Symfony\Component\HttpKernel\Tests\Fixtures\ExtensionPresentBundle\Command;
-
-use Symfony\Component\Console\Command\Command;
-
-/**
- * This command has a required parameter on the constructor and will be ignored by the default Bundle implementation.
- *
- * @see Bundle::registerCommands()
- */
-class BarCommand extends Command
-{
-    public function __construct($example, $name = 'bar')
-    {
-    }
-}
diff --git a/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php b/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
index 88c34b023136a9ed97e46ad92ecbd3dd4ff24972..8c3571281535ec7c6adbc9c699caa5cbaed6104c 100644
--- a/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fixtures/KernelForTest.php
@@ -34,4 +34,9 @@ public function isBooted()
     {
         return $this->booted;
     }
+
+    public function getProjectDir()
+    {
+        return __DIR__;
+    }
 }
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
index 52d8551965a0d01d7d77b8c9cbe8108a60874b79..d8ba8aed8ab5d580fe744c8d97a67f9f7bc1bc46 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
@@ -77,11 +77,9 @@ public function testRenderControllerReference()
         );
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRenderControllerReferenceWithoutSignerThrowsException()
     {
+        $this->expectException('LogicException');
         $strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy());
 
         $request = Request::create('/');
@@ -91,11 +89,9 @@ public function testRenderControllerReferenceWithoutSignerThrowsException()
         $strategy->render(new ControllerReference('main_controller'), $request);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRenderAltControllerReferenceWithoutSignerThrowsException()
     {
+        $this->expectException('LogicException');
         $strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy());
 
         $request = Request::create('/');
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php b/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
index 06ce785ea60942565696316d7ac7e0b233ce608e..6da4e73e3fa44467553bf448aee36d82c5bfaff7 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
@@ -36,31 +36,25 @@ protected function setUp()
         ;
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRenderWhenRendererDoesNotExist()
     {
+        $this->expectException('InvalidArgumentException');
         $handler = new FragmentHandler($this->requestStack);
         $handler->render('/', 'foo');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRenderWithUnknownRenderer()
     {
+        $this->expectException('InvalidArgumentException');
         $handler = $this->getHandler($this->returnValue(new Response('foo')));
 
         $handler->render('/', 'bar');
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Error when rendering "http://localhost/" (Status code is 404).
-     */
     public function testDeliverWithUnsuccessfulResponse()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('Error when rendering "http://localhost/" (Status code is 404).');
         $handler = $this->getHandler($this->returnValue(new Response('foo', 404)));
 
         $handler->render('/', 'foo');
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
index 6125d95ff4ca8b61a6ec465ffa7baba833abb01f..43248f8e9c10bee24ddcd0b8ad420799ecddfa08 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
@@ -19,11 +19,9 @@
 
 class HIncludeFragmentRendererTest extends TestCase
 {
-    /**
-     * @expectedException \LogicException
-     */
     public function testRenderExceptionWhenControllerAndNoSigner()
     {
+        $this->expectException('LogicException');
         $strategy = new HIncludeFragmentRenderer();
         $strategy->render(new ControllerReference('main_controller', [], []), Request::create('/'));
     }
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
index b2a2dcaef63059a6d4ccebea64e7e018202445b5..0dfe8425fe90eba8b6903d5e899ef3de87ce1962 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
@@ -111,11 +111,9 @@ public function testRenderWithTrustedHeaderDisabled()
         Request::setTrustedProxies([], -1);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testRenderExceptionNoIgnoreErrors()
     {
+        $this->expectException('RuntimeException');
         $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
         $dispatcher->expects($this->never())->method('dispatch');
 
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
index c03e8c4a92334c1bef1df3b1e879f1deebe2372f..151adb0e97cb4665347c6f265930beab24650966 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
@@ -56,11 +56,11 @@ public function testGenerateFragmentUriWithARequest()
     }
 
     /**
-     * @expectedException \LogicException
-     * @dataProvider      getGenerateFragmentUriDataWithNonScalar
+     * @dataProvider getGenerateFragmentUriDataWithNonScalar
      */
     public function testGenerateFragmentUriWithNonScalar($controller)
     {
+        $this->expectException('LogicException');
         $this->callGenerateFragmentUriMethod($controller, Request::create('/'));
     }
 
diff --git a/vendor/symfony/http-kernel/Tests/Fragment/SsiFragmentRendererTest.php b/vendor/symfony/http-kernel/Tests/Fragment/SsiFragmentRendererTest.php
index b2181725edfd65b5f59d178f89db9cb8e1777634..df30e6772722648aedd128e1cbf661bb6329f4f3 100644
--- a/vendor/symfony/http-kernel/Tests/Fragment/SsiFragmentRendererTest.php
+++ b/vendor/symfony/http-kernel/Tests/Fragment/SsiFragmentRendererTest.php
@@ -56,11 +56,9 @@ public function testRenderControllerReference()
         );
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRenderControllerReferenceWithoutSignerThrowsException()
     {
+        $this->expectException('LogicException');
         $strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy());
 
         $request = Request::create('/');
@@ -70,11 +68,9 @@ public function testRenderControllerReferenceWithoutSignerThrowsException()
         $strategy->render(new ControllerReference('main_controller'), $request);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRenderAltControllerReferenceWithoutSignerThrowsException()
     {
+        $this->expectException('LogicException');
         $strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy());
 
         $request = Request::create('/');
diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
index 1fc8da8e24530939ca30cf83116c452fac8c67d5..2aca5459ce41b5183d1a7aa51ac0b8b6164e4088 100644
--- a/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpCache/EsiTest.php
@@ -88,7 +88,7 @@ public function testProcessDoesNothingIfContentTypeIsNotHtml()
         $request = Request::create('/');
         $response = new Response();
         $response->headers->set('Content-Type', 'text/plain');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertFalse($response->headers->has('x-body-eval'));
     }
@@ -99,7 +99,7 @@ public function testMultilineEsiRemoveTagsAreRemoved()
 
         $request = Request::create('/');
         $response = new Response('<esi:remove> <a href="http://www.example.com">www.example.com</a> </esi:remove> Keep this'."<esi:remove>\n <a>www.example.com</a> </esi:remove> And this");
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals(' Keep this And this', $response->getContent());
     }
@@ -110,7 +110,7 @@ public function testCommentTagsAreRemoved()
 
         $request = Request::create('/');
         $response = new Response('<esi:comment text="some comment &gt;" /> Keep this');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals(' Keep this', $response->getContent());
     }
@@ -121,23 +121,23 @@ public function testProcess()
 
         $request = Request::create('/');
         $response = new Response('foo <esi:comment text="some comment" /><esi:include src="..." alt="alt" onerror="continue" />');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals('foo <?php echo $this->surrogate->handle($this, \'...\', \'alt\', true) ?>'."\n", $response->getContent());
         $this->assertEquals('ESI', $response->headers->get('x-body-eval'));
 
         $response = new Response('foo <esi:comment text="some comment" /><esi:include src="foo\'" alt="bar\'" onerror="continue" />');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals('foo <?php echo $this->surrogate->handle($this, \'foo\\\'\', \'bar\\\'\', true) ?>'."\n", $response->getContent());
 
         $response = new Response('foo <esi:include src="..." />');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals('foo <?php echo $this->surrogate->handle($this, \'...\', \'\', false) ?>'."\n", $response->getContent());
 
         $response = new Response('foo <esi:include src="..."></esi:include>');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals('foo <?php echo $this->surrogate->handle($this, \'...\', \'\', false) ?>'."\n", $response->getContent());
     }
@@ -148,21 +148,19 @@ public function testProcessEscapesPhpTags()
 
         $request = Request::create('/');
         $response = new Response('<?php <? <% <script language=php>');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
 
         $this->assertEquals('<?php echo "<?"; ?>php <?php echo "<?"; ?> <?php echo "<%"; ?> <?php echo "<s"; ?>cript language=php>', $response->getContent());
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testProcessWhenNoSrcInAnEsi()
     {
+        $this->expectException('RuntimeException');
         $esi = new Esi();
 
         $request = Request::create('/');
         $response = new Response('foo <esi:include />');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
     }
 
     public function testProcessRemoveSurrogateControlHeader()
@@ -172,16 +170,16 @@ public function testProcessRemoveSurrogateControlHeader()
         $request = Request::create('/');
         $response = new Response('foo <esi:include src="..." />');
         $response->headers->set('Surrogate-Control', 'content="ESI/1.0"');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
         $this->assertEquals('ESI', $response->headers->get('x-body-eval'));
 
         $response->headers->set('Surrogate-Control', 'no-store, content="ESI/1.0"');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
         $this->assertEquals('ESI', $response->headers->get('x-body-eval'));
         $this->assertEquals('no-store', $response->headers->get('surrogate-control'));
 
         $response->headers->set('Surrogate-Control', 'content="ESI/1.0", no-store');
-        $esi->process($request, $response);
+        $this->assertSame($response, $esi->process($request, $response));
         $this->assertEquals('ESI', $response->headers->get('x-body-eval'));
         $this->assertEquals('no-store', $response->headers->get('surrogate-control'));
     }
@@ -193,11 +191,9 @@ public function testHandle()
         $this->assertEquals('foo', $esi->handle($cache, '/', '/alt', true));
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testHandleWhenResponseIsNot200()
     {
+        $this->expectException('RuntimeException');
         $esi = new Esi();
         $response = new Response('foo');
         $response->setStatusCode(404);
diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php
index 7b3cac78c734bc1867a7335171b798fd36ffcfc1..93d92eb11e7e3d19c3baec63a94e2c0d2f4c1677 100644
--- a/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpCache/HttpCacheTest.php
@@ -660,7 +660,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('miss');
         $this->assertTraceContains('store');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
 
         $this->request('GET', '/');
         $this->assertHttpKernelIsNotCalled();
@@ -668,7 +668,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('fresh');
         $this->assertTraceNotContains('store');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
 
         // expires the cache
         $values = $this->getMetaStorageValues();
@@ -688,7 +688,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('invalid');
         $this->assertTraceContains('store');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
 
         $this->setNextResponse();
 
@@ -698,7 +698,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('fresh');
         $this->assertTraceNotContains('store');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
     }
 
     public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAfterTtlWasExpiredWithStatus304()
@@ -711,7 +711,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('miss');
         $this->assertTraceContains('store');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
 
         $this->request('GET', '/');
         $this->assertHttpKernelIsNotCalled();
@@ -739,7 +739,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('store');
         $this->assertTraceNotContains('miss');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
 
         $this->request('GET', '/');
         $this->assertHttpKernelIsNotCalled();
@@ -747,7 +747,7 @@ public function testAssignsDefaultTtlWhenResponseHasNoFreshnessInformationAndAft
         $this->assertTraceContains('fresh');
         $this->assertTraceNotContains('store');
         $this->assertEquals('Hello World', $this->response->getContent());
-        $this->assertRegExp('/s-maxage=2/', $this->response->headers->get('Cache-Control'));
+        $this->assertRegExp('/s-maxage=(2|3)/', $this->response->headers->get('Cache-Control'));
     }
 
     public function testDoesNotAssignDefaultTtlWhenResponseHasMustRevalidateDirective()
@@ -859,6 +859,7 @@ public function testValidatesCachedResponsesUseSameHttpMethod()
     public function testValidatesCachedResponsesWithETagAndNoFreshnessInformation()
     {
         $this->setNextResponse(200, [], 'Hello World', function ($request, $response) {
+            $this->assertFalse($request->headers->has('If-Modified-Since'));
             $response->headers->set('Cache-Control', 'public');
             $response->headers->set('ETag', '"12345"');
             if ($response->getETag() == $request->headers->get('IF_NONE_MATCH')) {
diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
index 79ed48cd00f7dcb0e5690461b6d813a219fc730f..f50005540bd3133bc4b8f0aa346c739aa17cba9d 100644
--- a/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpCache/SsiTest.php
@@ -120,11 +120,9 @@ public function testProcessEscapesPhpTags()
         $this->assertEquals('<?php echo "<?"; ?>php <?php echo "<?"; ?> <?php echo "<%"; ?> <?php echo "<s"; ?>cript language=php>', $response->getContent());
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testProcessWhenNoSrcInAnSsi()
     {
+        $this->expectException('RuntimeException');
         $ssi = new Ssi();
 
         $request = Request::create('/');
@@ -160,11 +158,9 @@ public function testHandle()
         $this->assertEquals('foo', $ssi->handle($cache, '/', '/alt', true));
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testHandleWhenResponseIsNot200()
     {
+        $this->expectException('RuntimeException');
         $ssi = new Ssi();
         $response = new Response('foo');
         $response->setStatusCode(404);
diff --git a/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php b/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php
index fc47ff2c88c5687d3667ee8b50e7aa19e5e6ca67..77cb34cfa5556dd5a32b000c4d52ab6258066847 100644
--- a/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpCache/StoreTest.php
@@ -52,7 +52,7 @@ public function testReadsAnEmptyArrayWithReadWhenNothingCachedAtKey()
 
     public function testUnlockFileThatDoesExist()
     {
-        $cacheKey = $this->storeSimpleEntry();
+        $this->storeSimpleEntry();
         $this->store->lock($this->request);
 
         $this->assertTrue($this->store->unlock($this->request));
@@ -92,7 +92,7 @@ public function testSetsTheXContentDigestResponseHeaderBeforeStoring()
     {
         $cacheKey = $this->storeSimpleEntry();
         $entries = $this->getStoreMetadata($cacheKey);
-        list($req, $res) = $entries[0];
+        list(, $res) = $entries[0];
 
         $this->assertEquals('en9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', $res['x-content-digest'][0]);
     }
@@ -208,7 +208,7 @@ public function testOverwritesNonVaryingResponseWithStore()
     {
         $req1 = Request::create('/test', 'get', [], [], [], ['HTTP_FOO' => 'Foo', 'HTTP_BAR' => 'Bar']);
         $res1 = new Response('test 1', 200, ['Vary' => 'Foo Bar']);
-        $key = $this->store->write($req1, $res1);
+        $this->store->write($req1, $res1);
         $this->assertEquals($this->getStorePath('en'.hash('sha256', 'test 1')), $this->store->lookup($req1)->getContent());
 
         $req2 = Request::create('/test', 'get', [], [], [], ['HTTP_FOO' => 'Bling', 'HTTP_BAR' => 'Bam']);
@@ -229,7 +229,7 @@ public function testLocking()
         $req = Request::create('/test', 'get', [], [], [], ['HTTP_FOO' => 'Foo', 'HTTP_BAR' => 'Bar']);
         $this->assertTrue($this->store->lock($req));
 
-        $path = $this->store->lock($req);
+        $this->store->lock($req);
         $this->assertTrue($this->store->isLocked($req));
 
         $this->store->unlock($req);
diff --git a/vendor/symfony/http-kernel/Tests/HttpKernelTest.php b/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
index 01e32898e297163997c3ec81b2b5fc925a7bf558..af81f021ede0c9906a40bcb77c4e2707ffb80ec4 100644
--- a/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
+++ b/vendor/symfony/http-kernel/Tests/HttpKernelTest.php
@@ -30,21 +30,17 @@
 
 class HttpKernelTest extends TestCase
 {
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testHandleWhenControllerThrowsAnExceptionAndCatchIsTrue()
     {
+        $this->expectException('RuntimeException');
         $kernel = $this->getHttpKernel(new EventDispatcher(), function () { throw new \RuntimeException(); });
 
         $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, true);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testHandleWhenControllerThrowsAnExceptionAndCatchIsFalseAndNoListenerIsRegistered()
     {
+        $this->expectException('RuntimeException');
         $kernel = $this->getHttpKernel(new EventDispatcher(), function () { throw new \RuntimeException(); });
 
         $kernel->handle(new Request(), HttpKernelInterface::MASTER_REQUEST, false);
@@ -177,11 +173,9 @@ public function testHandleWhenAListenerReturnsAResponse()
         $this->assertEquals('hello', $kernel->handle(new Request())->getContent());
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
-     */
     public function testHandleWhenNoControllerIsFound()
     {
+        $this->expectException('Symfony\Component\HttpKernel\Exception\NotFoundHttpException');
         $dispatcher = new EventDispatcher();
         $kernel = $this->getHttpKernel($dispatcher, false);
 
@@ -229,11 +223,9 @@ public function testHandleWhenTheControllerIsAStaticArray()
         $this->assertResponseEquals(new Response('foo'), $kernel->handle(new Request()));
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testHandleWhenTheControllerDoesNotReturnAResponse()
     {
+        $this->expectException('LogicException');
         $dispatcher = new EventDispatcher();
         $kernel = $this->getHttpKernel($dispatcher, function () { return 'foo'; });
 
@@ -331,11 +323,9 @@ public function testVerifyRequestStackPushPopDuringHandle()
         $kernel->handle($request, HttpKernelInterface::MASTER_REQUEST);
     }
 
-    /**
-     * @expectedException \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
-     */
     public function testInconsistentClientIpsOnMasterRequests()
     {
+        $this->expectException('Symfony\Component\HttpKernel\Exception\BadRequestHttpException');
         $request = new Request();
         $request->setTrustedProxies(['1.1.1.1'], Request::HEADER_X_FORWARDED_FOR | Request::HEADER_FORWARDED);
         $request->server->set('REMOTE_ADDR', '1.1.1.1');
diff --git a/vendor/symfony/http-kernel/Tests/KernelTest.php b/vendor/symfony/http-kernel/Tests/KernelTest.php
index 04d74ae0a319954dd055737c2a2af930e7923b3f..e4e2e0727b19fb40e50b8ccb33149f3cd3a5641e 100644
--- a/vendor/symfony/http-kernel/Tests/KernelTest.php
+++ b/vendor/symfony/http-kernel/Tests/KernelTest.php
@@ -118,7 +118,7 @@ public function testBootSetsTheContainerToTheBundles()
     public function testBootSetsTheBootedFlagToTrue()
     {
         // use test kernel to access isBooted()
-        $kernel = $this->getKernelForTest(['initializeBundles', 'initializeContainer']);
+        $kernel = $this->getKernel(['initializeBundles', 'initializeContainer']);
         $kernel->boot();
 
         $this->assertTrue($kernel->isBooted());
@@ -388,35 +388,27 @@ public function testSerialize()
         $this->assertEquals($expected, $kernel->serialize());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testLocateResourceThrowsExceptionWhenNameIsNotValid()
     {
+        $this->expectException('InvalidArgumentException');
         $this->getKernel()->locateResource('Foo');
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testLocateResourceThrowsExceptionWhenNameIsUnsafe()
     {
+        $this->expectException('RuntimeException');
         $this->getKernel()->locateResource('@FooBundle/../bar');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testLocateResourceThrowsExceptionWhenBundleDoesNotExist()
     {
+        $this->expectException('InvalidArgumentException');
         $this->getKernel()->locateResource('@FooBundle/config/routing.xml');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testLocateResourceThrowsExceptionWhenResourceDoesNotExist()
     {
+        $this->expectException('InvalidArgumentException');
         $kernel = $this->getKernel(['getBundle']);
         $kernel
             ->expects($this->once())
@@ -672,11 +664,11 @@ public function testInitializeBundlesSupportInheritanceCascade()
 
     /**
      * @group legacy
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Bundle "ChildCBundle" extends bundle "FooBar", which is not registered.
      */
     public function testInitializeBundlesThrowsExceptionWhenAParentDoesNotExists()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Bundle "ChildCBundle" extends bundle "FooBar", which is not registered.');
         $child = $this->getBundle(null, 'FooBar', 'ChildCBundle');
         $kernel = $this->getKernel([], [$child]);
         $kernel->boot();
@@ -708,11 +700,11 @@ public function testInitializeBundlesSupportsArbitraryBundleRegistrationOrder()
 
     /**
      * @group legacy
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Bundle "ParentCBundle" is directly extended by two bundles "ChildC2Bundle" and "ChildC1Bundle".
      */
     public function testInitializeBundlesThrowsExceptionWhenABundleIsDirectlyExtendedByTwoBundles()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Bundle "ParentCBundle" is directly extended by two bundles "ChildC2Bundle" and "ChildC1Bundle".');
         $parent = $this->getBundle(null, null, 'ParentCBundle');
         $child1 = $this->getBundle(null, 'ParentCBundle', 'ChildC1Bundle');
         $child2 = $this->getBundle(null, 'ParentCBundle', 'ChildC2Bundle');
@@ -723,13 +715,13 @@ public function testInitializeBundlesThrowsExceptionWhenABundleIsDirectlyExtende
 
     /**
      * @group legacy
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Trying to register two bundles with the same name "DuplicateName"
      */
     public function testInitializeBundleThrowsExceptionWhenRegisteringTwoBundlesWithTheSameName()
     {
-        $fooBundle = $this->getBundle(null, null, 'FooBundle', 'DuplicateName');
-        $barBundle = $this->getBundle(null, null, 'BarBundle', 'DuplicateName');
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Trying to register two bundles with the same name "DuplicateName"');
+        $fooBundle = $this->getBundle(__DIR__.'/Fixtures/FooBundle', null, 'FooBundle', 'DuplicateName');
+        $barBundle = $this->getBundle(__DIR__.'/Fixtures/BarBundle', null, 'BarBundle', 'DuplicateName');
 
         $kernel = $this->getKernel([], [$fooBundle, $barBundle]);
         $kernel->boot();
@@ -737,11 +729,11 @@ public function testInitializeBundleThrowsExceptionWhenRegisteringTwoBundlesWith
 
     /**
      * @group legacy
-     * @expectedException \LogicException
-     * @expectedExceptionMessage Bundle "CircularRefBundle" can not extend itself.
      */
     public function testInitializeBundleThrowsExceptionWhenABundleExtendsItself()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('Bundle "CircularRefBundle" can not extend itself.');
         $circularRef = $this->getBundle(null, 'CircularRefBundle', 'CircularRefBundle');
 
         $kernel = $this->getKernel([], [$circularRef]);
@@ -906,7 +898,7 @@ public function testServicesResetter()
      */
     public function testKernelStartTimeIsResetWhileBootingAlreadyBootedKernel()
     {
-        $kernel = $this->getKernelForTest(['initializeBundles'], true);
+        $kernel = $this->getKernel(['initializeBundles'], [], true);
         $kernel->boot();
         $preReBoot = $kernel->getStartTime();
 
@@ -964,15 +956,15 @@ protected function getBundle($dir = null, $parent = null, $className = null, $bu
      *
      * @return Kernel
      */
-    protected function getKernel(array $methods = [], array $bundles = [])
+    protected function getKernel(array $methods = [], array $bundles = [], $debug = false)
     {
         $methods[] = 'registerBundles';
 
         $kernel = $this
-            ->getMockBuilder('Symfony\Component\HttpKernel\Kernel')
+            ->getMockBuilder(KernelForTest::class)
             ->setMethods($methods)
-            ->setConstructorArgs(['test', false])
-            ->getMockForAbstractClass()
+            ->setConstructorArgs(['test', $debug])
+            ->getMock()
         ;
         $kernel->expects($this->any())
             ->method('registerBundles')
@@ -987,10 +979,11 @@ protected function getKernel(array $methods = [], array $bundles = [])
 
     protected function getKernelForTest(array $methods = [], $debug = false)
     {
-        $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTest')
+        $kernel = $this->getMockBuilder(KernelForTest::class)
             ->setConstructorArgs(['test', $debug])
             ->setMethods($methods)
-            ->getMock();
+            ->getMock()
+        ;
         $p = new \ReflectionProperty($kernel, 'rootDir');
         $p->setAccessible(true);
         $p->setValue($kernel, __DIR__.'/Fixtures');
@@ -1011,6 +1004,11 @@ public function terminate()
     public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
     {
     }
+
+    public function getProjectDir()
+    {
+        return __DIR__.'/Fixtures';
+    }
 }
 
 class CustomProjectDirKernel extends Kernel
diff --git a/vendor/symfony/http-kernel/Tests/Log/LoggerTest.php b/vendor/symfony/http-kernel/Tests/Log/LoggerTest.php
index 3a5a8ade54156341577479d7abb7b169400627b9..7439ae1376deb897c68d0a7467cfd6979aae2af2 100644
--- a/vendor/symfony/http-kernel/Tests/Log/LoggerTest.php
+++ b/vendor/symfony/http-kernel/Tests/Log/LoggerTest.php
@@ -107,27 +107,21 @@ public function testLogLevelDisabled()
         $this->assertSame([], $this->getLogs());
     }
 
-    /**
-     * @expectedException \Psr\Log\InvalidArgumentException
-     */
     public function testThrowsOnInvalidLevel()
     {
+        $this->expectException('Psr\Log\InvalidArgumentException');
         $this->logger->log('invalid level', 'Foo');
     }
 
-    /**
-     * @expectedException \Psr\Log\InvalidArgumentException
-     */
     public function testThrowsOnInvalidMinLevel()
     {
+        $this->expectException('Psr\Log\InvalidArgumentException');
         new Logger('invalid');
     }
 
-    /**
-     * @expectedException \Psr\Log\InvalidArgumentException
-     */
     public function testInvalidOutput()
     {
+        $this->expectException('Psr\Log\InvalidArgumentException');
         new Logger(LogLevel::DEBUG, '/');
     }
 
@@ -145,7 +139,7 @@ public function testObjectCastToString()
         if (method_exists($this, 'createPartialMock')) {
             $dummy = $this->createPartialMock(DummyTest::class, ['__toString']);
         } else {
-            $dummy = $this->getMock(DummyTest::class, ['__toString']);
+            $dummy = $this->createPartialMock(DummyTest::class, ['__toString']);
         }
         $dummy->expects($this->atLeastOnce())
             ->method('__toString')
diff --git a/vendor/symfony/http-kernel/Tests/Logger.php b/vendor/symfony/http-kernel/Tests/Logger.php
index 8ae756132cc4d52f3b88fc6cd599794334271e05..47529a2d34854964d7747d3b5e669873b6a6a2ce 100644
--- a/vendor/symfony/http-kernel/Tests/Logger.php
+++ b/vendor/symfony/http-kernel/Tests/Logger.php
@@ -22,6 +22,9 @@ public function __construct()
         $this->clear();
     }
 
+    /**
+     * @return array
+     */
     public function getLogs($level = false)
     {
         return false === $level ? $this->logs : $this->logs[$level];
diff --git a/vendor/symfony/http-kernel/Tests/UriSignerTest.php b/vendor/symfony/http-kernel/Tests/UriSignerTest.php
index 9b7fe08a999097317497d06c06001337975d5aa5..b2eb59206ba03cc5757c45ef8fa331eba3b24461 100644
--- a/vendor/symfony/http-kernel/Tests/UriSignerTest.php
+++ b/vendor/symfony/http-kernel/Tests/UriSignerTest.php
@@ -20,9 +20,9 @@ public function testSign()
     {
         $signer = new UriSigner('foobar');
 
-        $this->assertContains('?_hash=', $signer->sign('http://example.com/foo'));
-        $this->assertContains('?_hash=', $signer->sign('http://example.com/foo?foo=bar'));
-        $this->assertContains('&foo=', $signer->sign('http://example.com/foo?foo=bar'));
+        $this->assertStringContainsString('?_hash=', $signer->sign('http://example.com/foo'));
+        $this->assertStringContainsString('?_hash=', $signer->sign('http://example.com/foo?foo=bar'));
+        $this->assertStringContainsString('&foo=', $signer->sign('http://example.com/foo?foo=bar'));
     }
 
     public function testCheck()
diff --git a/vendor/symfony/http-kernel/UriSigner.php b/vendor/symfony/http-kernel/UriSigner.php
index 481270da519e159ea598ad0e86f17f73eb3ae20f..ffe31a212157baa1c0e8c21211faa1c4c2a094de 100644
--- a/vendor/symfony/http-kernel/UriSigner.php
+++ b/vendor/symfony/http-kernel/UriSigner.php
@@ -79,7 +79,7 @@ public function check($uri)
         $hash = $params[$this->parameter];
         unset($params[$this->parameter]);
 
-        return $this->computeHash($this->buildUrl($url, $params)) === $hash;
+        return hash_equals($this->computeHash($this->buildUrl($url, $params)), $hash);
     }
 
     private function computeHash($uri)
diff --git a/vendor/symfony/http-kernel/composer.json b/vendor/symfony/http-kernel/composer.json
index f47f1162d1cdc3a7afa88d13cf28cdc2a1f63994..7f471c680ed40293a06b8558ae3215cca03fd3c1 100644
--- a/vendor/symfony/http-kernel/composer.json
+++ b/vendor/symfony/http-kernel/composer.json
@@ -21,6 +21,7 @@
         "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
         "symfony/debug": "^3.3.3|~4.0",
         "symfony/polyfill-ctype": "~1.8",
+        "symfony/polyfill-php56": "~1.8",
         "psr/log": "~1.0"
     },
     "require-dev": {
diff --git a/vendor/symfony/polyfill-iconv/composer.json b/vendor/symfony/polyfill-iconv/composer.json
index 6a3c1e0c438ee2572cad99336238e11e233c6938..0161be6c207cb9286881a5242890d3188464db7f 100644
--- a/vendor/symfony/polyfill-iconv/composer.json
+++ b/vendor/symfony/polyfill-iconv/composer.json
@@ -28,7 +28,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "1.11-dev"
+            "dev-master": "1.13-dev"
         }
     }
 }
diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php
index a5e4a8fde4bdee4cd0036a1bf85490c6fdb9d789..bf882ba26336d887b9634274a3e3bf93b307ad7d 100644
--- a/vendor/symfony/polyfill-mbstring/Mbstring.php
+++ b/vendor/symfony/polyfill-mbstring/Mbstring.php
@@ -35,6 +35,7 @@
  * - mb_strlen               - Get string length
  * - mb_strpos               - Find position of first occurrence of string in a string
  * - mb_strrpos              - Find position of last occurrence of a string in a string
+ * - mb_str_split            - Convert a string to an array
  * - mb_strtolower           - Make a string lowercase
  * - mb_strtoupper           - Make a string uppercase
  * - mb_substitute_character - Set/Get substitution character
@@ -511,7 +512,9 @@ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = n
             $offset = 0;
         } elseif ($offset = (int) $offset) {
             if ($offset < 0) {
-                $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
+                if (0 > $offset += self::mb_strlen($needle)) {
+                    $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
+                }
                 $offset = 0;
             } else {
                 $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
@@ -523,6 +526,38 @@ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = n
         return false !== $pos ? $offset + $pos : false;
     }
 
+    public static function mb_str_split($string, $split_length = 1, $encoding = null)
+    {
+        if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
+            trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
+
+            return null;
+        }
+
+        if (1 > $split_length = (int) $split_length) {
+            trigger_error('The length of each segment must be greater than zero', E_USER_WARNING);
+
+            return false;
+        }
+
+        if (null === $encoding) {
+            $encoding = mb_internal_encoding();
+        }
+
+        if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
+            return preg_split("/(.{{$split_length}})/u", $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+        }
+
+        $result = array();
+        $length = mb_strlen($string, $encoding);
+
+        for ($i = 0; $i < $length; $i += $split_length) {
+            $result[] = mb_substr($string, $i, $split_length, $encoding);
+        }
+
+        return $result;
+    }
+
     public static function mb_strtolower($s, $encoding = null)
     {
         return self::mb_convert_case($s, MB_CASE_LOWER, $encoding);
@@ -546,7 +581,7 @@ public static function mb_substr($s, $start, $length = null, $encoding = null)
     {
         $encoding = self::getEncoding($encoding);
         if ('CP850' === $encoding || 'ASCII' === $encoding) {
-            return substr($s, $start, null === $length ? 2147483647 : $length);
+            return (string) substr($s, $start, null === $length ? 2147483647 : $length);
         }
 
         if ($start < 0) {
@@ -786,11 +821,16 @@ private static function getEncoding($encoding)
             return self::$internalEncoding;
         }
 
+        if ('UTF-8' === $encoding) {
+            return 'UTF-8';
+        }
+
         $encoding = strtoupper($encoding);
 
         if ('8BIT' === $encoding || 'BINARY' === $encoding) {
             return 'CP850';
         }
+
         if ('UTF8' === $encoding) {
             return 'UTF-8';
         }
diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php
index 2fdcc5a6f69ceb58f3e948cac4d99bb20edb4fbf..204a41ba271e343369ecf9a63d617aae7f5271bc 100644
--- a/vendor/symfony/polyfill-mbstring/bootstrap.php
+++ b/vendor/symfony/polyfill-mbstring/bootstrap.php
@@ -56,3 +56,7 @@ function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); }
     function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); }
     function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); }
 }
+
+if (!function_exists('mb_str_split')) {
+    function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); }
+}
diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json
index 0bce08782ea6c655bcbbcd27ea58fe92f9249197..c968074339ecdf2d8b4f1846107e7f106252b74c 100644
--- a/vendor/symfony/polyfill-mbstring/composer.json
+++ b/vendor/symfony/polyfill-mbstring/composer.json
@@ -28,7 +28,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "1.11-dev"
+            "dev-master": "1.13-dev"
         }
     }
 }
diff --git a/vendor/symfony/polyfill-php56/LICENSE b/vendor/symfony/polyfill-php56/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..4cd8bdd3007da4d62985ec9e5ca81a1e18ae34d1
--- /dev/null
+++ b/vendor/symfony/polyfill-php56/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/symfony/polyfill-php56/Php56.php b/vendor/symfony/polyfill-php56/Php56.php
new file mode 100644
index 0000000000000000000000000000000000000000..dbbc0e13ad317fc1d4dcee91741f2a1c82dea532
--- /dev/null
+++ b/vendor/symfony/polyfill-php56/Php56.php
@@ -0,0 +1,138 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php56;
+
+use Symfony\Polyfill\Util\Binary;
+
+/**
+ * @internal
+ */
+final class Php56
+{
+    const LDAP_ESCAPE_FILTER = 1;
+    const LDAP_ESCAPE_DN = 2;
+
+    public static function hash_equals($knownString, $userInput)
+    {
+        if (!\is_string($knownString)) {
+            trigger_error('Expected known_string to be a string, '.\gettype($knownString).' given', E_USER_WARNING);
+
+            return false;
+        }
+
+        if (!\is_string($userInput)) {
+            trigger_error('Expected user_input to be a string, '.\gettype($userInput).' given', E_USER_WARNING);
+
+            return false;
+        }
+
+        $knownLen = Binary::strlen($knownString);
+        $userLen = Binary::strlen($userInput);
+
+        if ($knownLen !== $userLen) {
+            return false;
+        }
+
+        $result = 0;
+
+        for ($i = 0; $i < $knownLen; ++$i) {
+            $result |= \ord($knownString[$i]) ^ \ord($userInput[$i]);
+        }
+
+        return 0 === $result;
+    }
+
+    /**
+     * Stub implementation of the {@link ldap_escape()} function of the ldap
+     * extension.
+     *
+     * Escape strings for safe use in LDAP filters and DNs.
+     *
+     * @author Chris Wright <ldapi@daverandom.com>
+     *
+     * @param string $subject
+     * @param string $ignore
+     * @param int    $flags
+     *
+     * @return string
+     *
+     * @see http://stackoverflow.com/a/8561604
+     */
+    public static function ldap_escape($subject, $ignore = '', $flags = 0)
+    {
+        static $charMaps = null;
+
+        if (null === $charMaps) {
+            $charMaps = array(
+                self::LDAP_ESCAPE_FILTER => array('\\', '*', '(', ')', "\x00"),
+                self::LDAP_ESCAPE_DN => array('\\', ',', '=', '+', '<', '>', ';', '"', '#', "\r"),
+            );
+
+            $charMaps[0] = array();
+
+            for ($i = 0; $i < 256; ++$i) {
+                $charMaps[0][\chr($i)] = sprintf('\\%02x', $i);
+            }
+
+            for ($i = 0, $l = \count($charMaps[self::LDAP_ESCAPE_FILTER]); $i < $l; ++$i) {
+                $chr = $charMaps[self::LDAP_ESCAPE_FILTER][$i];
+                unset($charMaps[self::LDAP_ESCAPE_FILTER][$i]);
+                $charMaps[self::LDAP_ESCAPE_FILTER][$chr] = $charMaps[0][$chr];
+            }
+
+            for ($i = 0, $l = \count($charMaps[self::LDAP_ESCAPE_DN]); $i < $l; ++$i) {
+                $chr = $charMaps[self::LDAP_ESCAPE_DN][$i];
+                unset($charMaps[self::LDAP_ESCAPE_DN][$i]);
+                $charMaps[self::LDAP_ESCAPE_DN][$chr] = $charMaps[0][$chr];
+            }
+        }
+
+        // Create the base char map to escape
+        $flags = (int) $flags;
+        $charMap = array();
+
+        if ($flags & self::LDAP_ESCAPE_FILTER) {
+            $charMap += $charMaps[self::LDAP_ESCAPE_FILTER];
+        }
+
+        if ($flags & self::LDAP_ESCAPE_DN) {
+            $charMap += $charMaps[self::LDAP_ESCAPE_DN];
+        }
+
+        if (!$charMap) {
+            $charMap = $charMaps[0];
+        }
+
+        // Remove any chars to ignore from the list
+        $ignore = (string) $ignore;
+
+        for ($i = 0, $l = \strlen($ignore); $i < $l; ++$i) {
+            unset($charMap[$ignore[$i]]);
+        }
+
+        // Do the main replacement
+        $result = strtr($subject, $charMap);
+
+        // Encode leading/trailing spaces if self::LDAP_ESCAPE_DN is passed
+        if ($flags & self::LDAP_ESCAPE_DN) {
+            if (' ' === $result[0]) {
+                $result = '\\20'.substr($result, 1);
+            }
+
+            if (' ' === $result[\strlen($result) - 1]) {
+                $result = substr($result, 0, -1).'\\20';
+            }
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/symfony/polyfill-php56/README.md b/vendor/symfony/polyfill-php56/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..307ce5bc5cec1cc39444bf6a70983aed4ebc5644
--- /dev/null
+++ b/vendor/symfony/polyfill-php56/README.md
@@ -0,0 +1,15 @@
+Symfony Polyfill / Php56
+========================
+
+This component provides functions unavailable in releases prior to PHP 5.6:
+
+- [`hash_equals`](http://php.net/hash_equals)  (part of [hash](http://php.net/hash) extension)
+- [`ldap_escape`](http://php.net/ldap_escape) (part of [ldap](http://php.net/ldap) extension)
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/vendor/symfony/polyfill-php56/bootstrap.php b/vendor/symfony/polyfill-php56/bootstrap.php
new file mode 100644
index 0000000000000000000000000000000000000000..587c2a81c5255b0c6208e70bb0372ec0852260c6
--- /dev/null
+++ b/vendor/symfony/polyfill-php56/bootstrap.php
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Php56 as p;
+
+if (PHP_VERSION_ID < 50600) {
+    if (!function_exists('hash_equals')) {
+        function hash_equals($knownString, $userInput) { return p\Php56::hash_equals($knownString, $userInput); }
+    }
+    if (extension_loaded('ldap') && !function_exists('ldap_escape')) {
+        define('LDAP_ESCAPE_FILTER', 1);
+        define('LDAP_ESCAPE_DN', 2);
+
+        function ldap_escape($subject, $ignore = '', $flags = 0) { return p\Php56::ldap_escape($subject, $ignore, $flags); }
+    }
+
+    if (50509 === PHP_VERSION_ID && 4 === PHP_INT_SIZE) {
+        // Missing functions in PHP 5.5.9 - affects 32 bit builds of Ubuntu 14.04LTS
+        // See https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1315888
+        if (!function_exists('gzopen') && function_exists('gzopen64')) {
+            function gzopen($filename, $mode, $use_include_path = 0) { return gzopen64($filename, $mode, $use_include_path); }
+        }
+        if (!function_exists('gzseek') && function_exists('gzseek64')) {
+            function gzseek($zp, $offset, $whence = SEEK_SET) { return gzseek64($zp, $offset, $whence); }
+        }
+        if (!function_exists('gztell') && function_exists('gztell64')) {
+            function gztell($zp) { return gztell64($zp); }
+        }
+    }
+}
diff --git a/vendor/symfony/polyfill-php56/composer.json b/vendor/symfony/polyfill-php56/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..cabee7b84d757e305e662a4a805d81f271c36e9d
--- /dev/null
+++ b/vendor/symfony/polyfill-php56/composer.json
@@ -0,0 +1,32 @@
+{
+    "name": "symfony/polyfill-php56",
+    "type": "library",
+    "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+    "keywords": ["polyfill", "shim", "compatibility", "portable"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.3",
+        "symfony/polyfill-util": "~1.0"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Php56\\": "" },
+        "files": [ "bootstrap.php" ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.13-dev"
+        }
+    }
+}
diff --git a/vendor/symfony/polyfill-php70/composer.json b/vendor/symfony/polyfill-php70/composer.json
index 923f3095735202bbfbb486464f959b2e253a3143..8380395c21018257e606974285a0e19068e71ac7 100644
--- a/vendor/symfony/polyfill-php70/composer.json
+++ b/vendor/symfony/polyfill-php70/composer.json
@@ -27,7 +27,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "1.11-dev"
+            "dev-master": "1.13-dev"
         }
     }
 }
diff --git a/vendor/symfony/validator/Tests/Fixtures/InvalidConstraintValidator.php b/vendor/symfony/polyfill-util/Binary.php
similarity index 55%
rename from vendor/symfony/validator/Tests/Fixtures/InvalidConstraintValidator.php
rename to vendor/symfony/polyfill-util/Binary.php
index bd9a5cf6c32dce5147afb3bcee1a8a380be6bdbe..23ff974734f2e34095f461986e617daccba0fcb7 100644
--- a/vendor/symfony/validator/Tests/Fixtures/InvalidConstraintValidator.php
+++ b/vendor/symfony/polyfill-util/Binary.php
@@ -9,8 +9,14 @@
  * file that was distributed with this source code.
  */
 
-namespace Symfony\Component\Validator\Tests\Fixtures;
+namespace Symfony\Polyfill\Util;
 
-class InvalidConstraintValidator
-{
+if (\extension_loaded('mbstring')) {
+    class Binary extends BinaryOnFuncOverload
+    {
+    }
+} else {
+    class Binary extends BinaryNoFuncOverload
+    {
+    }
 }
diff --git a/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php b/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php
new file mode 100644
index 0000000000000000000000000000000000000000..800ad75d059822db49429b7b307b111e249a9685
--- /dev/null
+++ b/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @internal
+ */
+class BinaryNoFuncOverload
+{
+    public static function strlen($s)
+    {
+        return \strlen($s);
+    }
+
+    public static function strpos($haystack, $needle, $offset = 0)
+    {
+        return strpos($haystack, $needle, $offset);
+    }
+
+    public static function strrpos($haystack, $needle, $offset = 0)
+    {
+        return strrpos($haystack, $needle, $offset);
+    }
+
+    public static function substr($string, $start, $length = PHP_INT_MAX)
+    {
+        return substr($string, $start, $length);
+    }
+
+    public static function stripos($s, $needle, $offset = 0)
+    {
+        return stripos($s, $needle, $offset);
+    }
+
+    public static function stristr($s, $needle, $part = false)
+    {
+        return stristr($s, $needle, $part);
+    }
+
+    public static function strrchr($s, $needle, $part = false)
+    {
+        return strrchr($s, $needle, $part);
+    }
+
+    public static function strripos($s, $needle, $offset = 0)
+    {
+        return strripos($s, $needle, $offset);
+    }
+
+    public static function strstr($s, $needle, $part = false)
+    {
+        return strstr($s, $needle, $part);
+    }
+}
diff --git a/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php b/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php
new file mode 100644
index 0000000000000000000000000000000000000000..e1b886eaca34879d62fc1291ba954bbc17216d49
--- /dev/null
+++ b/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php
@@ -0,0 +1,67 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+/**
+ * Binary safe version of string functions overloaded when MB_OVERLOAD_STRING is enabled.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @internal
+ */
+class BinaryOnFuncOverload
+{
+    public static function strlen($s)
+    {
+        return mb_strlen($s, '8bit');
+    }
+
+    public static function strpos($haystack, $needle, $offset = 0)
+    {
+        return mb_strpos($haystack, $needle, $offset, '8bit');
+    }
+
+    public static function strrpos($haystack, $needle, $offset = 0)
+    {
+        return mb_strrpos($haystack, $needle, $offset, '8bit');
+    }
+
+    public static function substr($string, $start, $length = 2147483647)
+    {
+        return mb_substr($string, $start, $length, '8bit');
+    }
+
+    public static function stripos($s, $needle, $offset = 0)
+    {
+        return mb_stripos($s, $needle, $offset, '8bit');
+    }
+
+    public static function stristr($s, $needle, $part = false)
+    {
+        return mb_stristr($s, $needle, $part, '8bit');
+    }
+
+    public static function strrchr($s, $needle, $part = false)
+    {
+        return mb_strrchr($s, $needle, $part, '8bit');
+    }
+
+    public static function strripos($s, $needle, $offset = 0)
+    {
+        return mb_strripos($s, $needle, $offset, '8bit');
+    }
+
+    public static function strstr($s, $needle, $part = false)
+    {
+        return mb_strstr($s, $needle, $part, '8bit');
+    }
+}
diff --git a/vendor/symfony/polyfill-util/LICENSE b/vendor/symfony/polyfill-util/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..4cd8bdd3007da4d62985ec9e5ca81a1e18ae34d1
--- /dev/null
+++ b/vendor/symfony/polyfill-util/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/symfony/polyfill-util/README.md b/vendor/symfony/polyfill-util/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1c655fce376c8a5532c763b44c85120817d7bba2
--- /dev/null
+++ b/vendor/symfony/polyfill-util/README.md
@@ -0,0 +1,13 @@
+Symfony Polyfill / Util
+=======================
+
+This component provides binary-safe string functions, using the
+[mbstring](https://php.net/mbstring) extension when available.
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff --git a/vendor/symfony/polyfill-util/TestListener.php b/vendor/symfony/polyfill-util/TestListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b17d45ccaadae99eb9527510591e7d3ec947510
--- /dev/null
+++ b/vendor/symfony/polyfill-util/TestListener.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+if (class_exists('PHPUnit_Runner_Version') && version_compare(\PHPUnit_Runner_Version::id(), '6.0.0', '<')) {
+    class_alias('Symfony\Polyfill\Util\TestListenerForV5', 'Symfony\Polyfill\Util\TestListener');
+// Using an early return instead of a else does not work when using the PHPUnit phar due to some weird PHP behavior (the class
+// gets defined without executing the code before it and so the definition is not properly conditional)
+} elseif (version_compare(\PHPUnit\Runner\Version::id(), '7.0.0', '<')) {
+    class_alias('Symfony\Polyfill\Util\TestListenerForV6', 'Symfony\Polyfill\Util\TestListener');
+} else {
+    class_alias('Symfony\Polyfill\Util\TestListenerForV7', 'Symfony\Polyfill\Util\TestListener');
+}
+
+if (false) {
+    class TestListener
+    {
+    }
+}
diff --git a/vendor/symfony/polyfill-util/TestListenerForV5.php b/vendor/symfony/polyfill-util/TestListenerForV5.php
new file mode 100644
index 0000000000000000000000000000000000000000..501053dddfe7201f35aa13936e0a900fe6cf3215
--- /dev/null
+++ b/vendor/symfony/polyfill-util/TestListenerForV5.php
@@ -0,0 +1,89 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class TestListenerForV5 extends \PHPUnit_Framework_TestSuite implements \PHPUnit_Framework_TestListener
+{
+    private $suite;
+    private $trait;
+
+    public function __construct(\PHPUnit_Framework_TestSuite $suite = null)
+    {
+        if ($suite) {
+            $this->suite = $suite;
+            $this->setName($suite->getName().' with polyfills enabled');
+            $this->addTest($suite);
+        }
+        $this->trait = new TestListenerTrait();
+    }
+
+    public function startTestSuite(\PHPUnit_Framework_TestSuite $suite)
+    {
+        $this->trait->startTestSuite($suite);
+    }
+
+    public function addError(\PHPUnit_Framework_Test $test, \Exception $e, $time)
+    {
+        $this->trait->addError($test, $e, $time);
+    }
+
+    public function addWarning(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_Warning $e, $time)
+    {
+    }
+
+    public function addFailure(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_AssertionFailedError $e, $time)
+    {
+        $this->trait->addError($test, $e, $time);
+    }
+
+    public function addIncompleteTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
+    {
+    }
+
+    public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
+    {
+    }
+
+    public function addSkippedTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
+    {
+    }
+
+    public function endTestSuite(\PHPUnit_Framework_TestSuite $suite)
+    {
+    }
+
+    public function startTest(\PHPUnit_Framework_Test $test)
+    {
+    }
+
+    public function endTest(\PHPUnit_Framework_Test $test, $time)
+    {
+    }
+
+    public static function warning($message)
+    {
+        return parent::warning($message);
+    }
+
+    protected function setUp()
+    {
+        TestListenerTrait::$enabledPolyfills = $this->suite->getName();
+    }
+
+    protected function tearDown()
+    {
+        TestListenerTrait::$enabledPolyfills = false;
+    }
+}
diff --git a/vendor/symfony/polyfill-util/TestListenerForV6.php b/vendor/symfony/polyfill-util/TestListenerForV6.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9e87cbef758611ddf0f672934aeb9690efe2da1
--- /dev/null
+++ b/vendor/symfony/polyfill-util/TestListenerForV6.php
@@ -0,0 +1,95 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+use PHPUnit\Framework\AssertionFailedError;
+use PHPUnit\Framework\Test;
+use PHPUnit\Framework\TestListener as TestListenerInterface;
+use PHPUnit\Framework\TestSuite;
+use PHPUnit\Framework\Warning;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class TestListenerForV6 extends TestSuite implements TestListenerInterface
+{
+    private $suite;
+    private $trait;
+
+    public function __construct(TestSuite $suite = null)
+    {
+        if ($suite) {
+            $this->suite = $suite;
+            $this->setName($suite->getName().' with polyfills enabled');
+            $this->addTest($suite);
+        }
+        $this->trait = new TestListenerTrait();
+    }
+
+    public function startTestSuite(TestSuite $suite)
+    {
+        $this->trait->startTestSuite($suite);
+    }
+
+    public function addError(Test $test, \Exception $e, $time)
+    {
+        $this->trait->addError($test, $e, $time);
+    }
+
+    public function addWarning(Test $test, Warning $e, $time)
+    {
+    }
+
+    public function addFailure(Test $test, AssertionFailedError $e, $time)
+    {
+        $this->trait->addError($test, $e, $time);
+    }
+
+    public function addIncompleteTest(Test $test, \Exception $e, $time)
+    {
+    }
+
+    public function addRiskyTest(Test $test, \Exception $e, $time)
+    {
+    }
+
+    public function addSkippedTest(Test $test, \Exception $e, $time)
+    {
+    }
+
+    public function endTestSuite(TestSuite $suite)
+    {
+    }
+
+    public function startTest(Test $test)
+    {
+    }
+
+    public function endTest(Test $test, $time)
+    {
+    }
+
+    public static function warning($message)
+    {
+        return parent::warning($message);
+    }
+
+    protected function setUp()
+    {
+        TestListenerTrait::$enabledPolyfills = $this->suite->getName();
+    }
+
+    protected function tearDown()
+    {
+        TestListenerTrait::$enabledPolyfills = false;
+    }
+}
diff --git a/vendor/symfony/polyfill-util/TestListenerForV7.php b/vendor/symfony/polyfill-util/TestListenerForV7.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5c3759b22e2b048c3eeb6b59267bcafe6a29ce1
--- /dev/null
+++ b/vendor/symfony/polyfill-util/TestListenerForV7.php
@@ -0,0 +1,96 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+use PHPUnit\Framework\AssertionFailedError;
+use PHPUnit\Framework\Test;
+use PHPUnit\Framework\TestListener as TestListenerInterface;
+use PHPUnit\Framework\TestSuite;
+use PHPUnit\Framework\Warning;
+use PHPUnit\Framework\WarningTestCase;
+
+/**
+ * @author Ion Bazan <ion.bazan@gmail.com>
+ */
+class TestListenerForV7 extends TestSuite implements TestListenerInterface
+{
+    private $suite;
+    private $trait;
+
+    public function __construct(TestSuite $suite = null)
+    {
+        if ($suite) {
+            $this->suite = $suite;
+            $this->setName($suite->getName().' with polyfills enabled');
+            $this->addTest($suite);
+        }
+        $this->trait = new TestListenerTrait();
+    }
+
+    public function startTestSuite(TestSuite $suite): void
+    {
+        $this->trait->startTestSuite($suite);
+    }
+
+    public function addError(Test $test, \Throwable $t, float $time): void
+    {
+        $this->trait->addError($test, $t, $time);
+    }
+
+    public function addWarning(Test $test, Warning $e, float $time): void
+    {
+    }
+
+    public function addFailure(Test $test, AssertionFailedError $e, float $time): void
+    {
+        $this->trait->addError($test, $e, $time);
+    }
+
+    public function addIncompleteTest(Test $test, \Throwable $t, float $time): void
+    {
+    }
+
+    public function addRiskyTest(Test $test, \Throwable $t, float $time): void
+    {
+    }
+
+    public function addSkippedTest(Test $test, \Throwable $t, float $time): void
+    {
+    }
+
+    public function endTestSuite(TestSuite $suite): void
+    {
+    }
+
+    public function startTest(Test $test): void
+    {
+    }
+
+    public function endTest(Test $test, float $time): void
+    {
+    }
+
+    public static function warning($message): WarningTestCase
+    {
+        return new WarningTestCase($message);
+    }
+
+    protected function setUp(): void
+    {
+        TestListenerTrait::$enabledPolyfills = $this->suite->getName();
+    }
+
+    protected function tearDown(): void
+    {
+        TestListenerTrait::$enabledPolyfills = false;
+    }
+}
diff --git a/vendor/symfony/polyfill-util/TestListenerTrait.php b/vendor/symfony/polyfill-util/TestListenerTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8047a0cccab8de548780fe83c9f3e875f4e1129
--- /dev/null
+++ b/vendor/symfony/polyfill-util/TestListenerTrait.php
@@ -0,0 +1,125 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Util;
+
+/**
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+class TestListenerTrait
+{
+    public static $enabledPolyfills;
+
+    public function startTestSuite($mainSuite)
+    {
+        if (null !== self::$enabledPolyfills) {
+            return;
+        }
+        self::$enabledPolyfills = false;
+        $SkippedTestError = class_exists('PHPUnit\Framework\SkippedTestError') ? 'PHPUnit\Framework\SkippedTestError' : 'PHPUnit_Framework_SkippedTestError';
+
+        foreach ($mainSuite->tests() as $suite) {
+            $testClass = $suite->getName();
+            if (!$tests = $suite->tests()) {
+                continue;
+            }
+            if (!preg_match('/^(.+)\\\\Tests(\\\\.*)Test$/', $testClass, $m)) {
+                $mainSuite->addTest(TestListener::warning('Unknown naming convention for '.$testClass));
+                continue;
+            }
+            if (!class_exists($m[1].$m[2])) {
+                continue;
+            }
+            $testedClass = new \ReflectionClass($m[1].$m[2]);
+            $bootstrap = new \SplFileObject(\dirname($testedClass->getFileName()).'/bootstrap.php');
+            $warnings = array();
+            $defLine = null;
+
+            foreach (new \RegexIterator($bootstrap, '/define\(\'/') as $defLine) {
+                preg_match('/define\(\'(?P<name>.+)\'/', $defLine, $matches);
+                if (\defined($matches['name'])) {
+                    continue;
+                }
+
+                try {
+                    eval($defLine);
+                } catch (\PHPUnit_Framework_Exception $ex){
+                    $warnings[] = TestListener::warning($ex->getMessage());
+                } catch (\PHPUnit\Framework\Exception $ex) {
+                    $warnings[] = TestListener::warning($ex->getMessage());
+                }
+            }
+
+            $bootstrap->rewind();
+
+            foreach (new \RegexIterator($bootstrap, '/return p\\\\'.$testedClass->getShortName().'::/') as $defLine) {
+                if (!preg_match('/^\s*function (?P<name>[^\(]++)(?P<signature>\(.*\)) \{ (?<return>return p\\\\'.$testedClass->getShortName().'::[^\(]++)(?P<args>\([^\)]*+\)); \}$/', $defLine, $f)) {
+                    $warnings[] = TestListener::warning('Invalid line in bootstrap.php: '.trim($defLine));
+                    continue;
+                }
+                $testNamespace = substr($testClass, 0, strrpos($testClass, '\\'));
+                if (\function_exists($testNamespace.'\\'.$f['name'])) {
+                    continue;
+                }
+
+                try {
+                    $r = new \ReflectionFunction($f['name']);
+                    if ($r->isUserDefined()) {
+                        throw new \ReflectionException();
+                    }
+                    if ('idn_to_ascii' === $f['name'] || 'idn_to_utf8' === $f['name']) {
+                        $defLine = sprintf('return INTL_IDNA_VARIANT_2003 === $variant ? \\%s($domain, $options, $variant) : \\%1$s%s', $f['name'], $f['args']);
+                    } elseif (false !== strpos($f['signature'], '&') && 'idn_to_ascii' !== $f['name'] && 'idn_to_utf8' !== $f['name']) {
+                        $defLine = sprintf('return \\%s%s', $f['name'], $f['args']);
+                    } else {
+                        $defLine = sprintf("return \\call_user_func_array('%s', \\func_get_args())", $f['name']);
+                    }
+                } catch (\ReflectionException $e) {
+                    $defLine = sprintf("throw new \\{$SkippedTestError}('Internal function not found: %s')", $f['name']);
+                }
+
+                eval(<<<EOPHP
+namespace {$testNamespace};
+
+use Symfony\Polyfill\Util\TestListenerTrait;
+use {$testedClass->getNamespaceName()} as p;
+
+function {$f['name']}{$f['signature']}
+{
+    if ('{$testClass}' === TestListenerTrait::\$enabledPolyfills) {
+        {$f['return']}{$f['args']};
+    }
+
+    {$defLine};
+}
+EOPHP
+                );
+            }
+            if (!$warnings && null === $defLine) {
+                $warnings[] = new $SkippedTestError('No Polyfills found in bootstrap.php for '.$testClass);
+            } else {
+                $mainSuite->addTest(new TestListener($suite));
+            }
+        }
+        foreach ($warnings as $w) {
+            $mainSuite->addTest($w);
+        }
+    }
+
+    public function addError($test, \Exception $e, $time)
+    {
+        if (false !== self::$enabledPolyfills) {
+            $r = new \ReflectionProperty('Exception', 'message');
+            $r->setAccessible(true);
+            $r->setValue($e, 'Polyfills enabled, '.$r->getValue($e));
+        }
+    }
+}
diff --git a/vendor/symfony/polyfill-util/composer.json b/vendor/symfony/polyfill-util/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..47c788346103d8e54697746c71fccc3ab5f4dd27
--- /dev/null
+++ b/vendor/symfony/polyfill-util/composer.json
@@ -0,0 +1,30 @@
+{
+    "name": "symfony/polyfill-util",
+    "type": "library",
+    "description": "Symfony utilities for portability of PHP codes",
+    "keywords": ["polyfill", "shim", "compat", "compatibility"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.3"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Util\\": "" }
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.13-dev"
+        }
+    }
+}
diff --git a/vendor/symfony/process/Pipes/AbstractPipes.php b/vendor/symfony/process/Pipes/AbstractPipes.php
index 23886b616387f62562550c8287a5a0ea3a50721f..9dd415d5c9a9a6e4b8574035a86533acbe4b05f1 100644
--- a/vendor/symfony/process/Pipes/AbstractPipes.php
+++ b/vendor/symfony/process/Pipes/AbstractPipes.php
@@ -88,12 +88,14 @@ protected function unblock()
     /**
      * Writes input to stdin.
      *
+     * @return array|null
+     *
      * @throws InvalidArgumentException When an input iterator yields a non supported value
      */
     protected function write()
     {
         if (!isset($this->pipes[0])) {
-            return;
+            return null;
         }
         $input = $this->input;
 
@@ -122,7 +124,7 @@ protected function write()
 
         // let's have a look if something changed in streams
         if (false === @stream_select($r, $w, $e, 0, 0)) {
-            return;
+            return null;
         }
 
         foreach ($w as $stdin) {
@@ -166,6 +168,8 @@ protected function write()
         } elseif (!$w) {
             return [$this->pipes[0]];
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/process/Pipes/WindowsPipes.php b/vendor/symfony/process/Pipes/WindowsPipes.php
index 1619e632f134a073233aa3043166b4562d387b70..e8e6f139e55b3ad89889a5ce19afb50a05c1fe98 100644
--- a/vendor/symfony/process/Pipes/WindowsPipes.php
+++ b/vendor/symfony/process/Pipes/WindowsPipes.php
@@ -17,8 +17,8 @@
 /**
  * WindowsPipes implementation uses temporary files as handles.
  *
- * @see https://bugs.php.net/bug.php?id=51800
- * @see https://bugs.php.net/bug.php?id=65650
+ * @see https://bugs.php.net/51800
+ * @see https://bugs.php.net/65650
  *
  * @author Romain Neutron <imprec@gmail.com>
  *
@@ -43,7 +43,7 @@ public function __construct($input, $haveReadSupport)
             // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
             // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
             //
-            // @see https://bugs.php.net/bug.php?id=51800
+            // @see https://bugs.php.net/51800
             $pipes = [
                 Process::STDOUT => Process::OUT,
                 Process::STDERR => Process::ERR,
@@ -105,8 +105,8 @@ public function getDescriptors()
             ];
         }
 
-        // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
-        // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
+        // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/51800)
+        // We're not using file handles as it can produce corrupted output https://bugs.php.net/65650
         // So we redirect output within the commandline and pass the nul device to the process
         return [
             ['pipe', 'r'],
diff --git a/vendor/symfony/process/Process.php b/vendor/symfony/process/Process.php
index 68cc6c65ae5a9f87c6f99a2a1cf7c87209629dd8..c0c1fdaf69c1a2d5a1296de4e70fe5e4e93ee4f2 100644
--- a/vendor/symfony/process/Process.php
+++ b/vendor/symfony/process/Process.php
@@ -71,7 +71,7 @@ class Process implements \IteratorAggregate
     private $status = self::STATUS_READY;
     private $incrementalOutputOffset = 0;
     private $incrementalErrorOutputOffset = 0;
-    private $tty;
+    private $tty = false;
     private $pty;
     private $inheritEnv = false;
 
@@ -152,8 +152,8 @@ public function __construct($commandline, $cwd = null, array $env = null, $input
 
         // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started
         // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
-        // @see : https://bugs.php.net/bug.php?id=51800
-        // @see : https://bugs.php.net/bug.php?id=50524
+        // @see : https://bugs.php.net/51800
+        // @see : https://bugs.php.net/50524
         if (null === $this->cwd && (\defined('ZEND_THREAD_SAFE') || '\\' === \DIRECTORY_SEPARATOR)) {
             $this->cwd = getcwd();
         }
@@ -194,7 +194,6 @@ public function __clone()
      *
      * @param callable|null $callback A PHP callback to run whenever there is some
      *                                output available on STDOUT or STDERR
-     * @param array         $env      An array of additional env vars to set when running the process
      *
      * @return int The exit status code
      *
@@ -218,10 +217,7 @@ public function run($callback = null/*, array $env = []*/)
      * This is identical to run() except that an exception is thrown if the process
      * exits with a non-zero exit code.
      *
-     * @param callable|null $callback
-     * @param array         $env      An array of additional env vars to set when running the process
-     *
-     * @return self
+     * @return $this
      *
      * @throws RuntimeException       if PHP was compiled with --enable-sigchild and the enhanced sigchild compatibility mode is not enabled
      * @throws ProcessFailedException if the process didn't terminate successfully
@@ -256,7 +252,6 @@ public function mustRun(callable $callback = null/*, array $env = []*/)
      *
      * @param callable|null $callback A PHP callback to run whenever there is some
      *                                output available on STDOUT or STDERR
-     * @param array         $env      An array of additional env vars to set when running the process
      *
      * @throws RuntimeException When process can't be launched
      * @throws RuntimeException When process is already running
@@ -367,9 +362,8 @@ public function start(callable $callback = null/*, array $env = [*/)
      *
      * @param callable|null $callback A PHP callback to run whenever there is some
      *                                output available on STDOUT or STDERR
-     * @param array         $env      An array of additional env vars to set when running the process
      *
-     * @return $this
+     * @return static
      *
      * @throws RuntimeException When process can't be launched
      * @throws RuntimeException When process is already running
@@ -451,7 +445,7 @@ public function getPid()
     /**
      * Sends a POSIX signal to the process.
      *
-     * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
+     * @param int $signal A valid POSIX signal (see https://php.net/pcntl.constants)
      *
      * @return $this
      *
@@ -722,7 +716,7 @@ public function getExitCode()
     public function getExitCodeText()
     {
         if (null === $exitcode = $this->getExitCode()) {
-            return;
+            return null;
         }
 
         return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error';
@@ -870,7 +864,7 @@ public function getStatus()
      * @param int|float $timeout The timeout in seconds
      * @param int       $signal  A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL (9)
      *
-     * @return int The exit-code of the process
+     * @return int|null The exit-code of the process or null if it's not running
      */
     public function stop($timeout = 10, $signal = null)
     {
@@ -948,7 +942,7 @@ public function getCommandLine()
      *
      * @param string|array $commandline The command to execute
      *
-     * @return self The current Process instance
+     * @return $this
      */
     public function setCommandLine($commandline)
     {
@@ -978,13 +972,13 @@ public function getIdleTimeout()
     }
 
     /**
-     * Sets the process timeout (max. runtime).
+     * Sets the process timeout (max. runtime) in seconds.
      *
      * To disable the timeout, set this value to null.
      *
      * @param int|float|null $timeout The timeout in seconds
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @throws InvalidArgumentException if the timeout is negative
      */
@@ -1002,7 +996,7 @@ public function setTimeout($timeout)
      *
      * @param int|float|null $timeout The timeout in seconds
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @throws LogicException           if the output is disabled
      * @throws InvalidArgumentException if the timeout is negative
@@ -1023,7 +1017,7 @@ public function setIdleTimeout($timeout)
      *
      * @param bool $tty True to enabled and false to disable
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @throws RuntimeException In case the TTY mode is not supported
      */
@@ -1064,7 +1058,7 @@ public function isTty()
      *
      * @param bool $bool
      *
-     * @return self
+     * @return $this
      */
     public function setPty($bool)
     {
@@ -1104,7 +1098,7 @@ public function getWorkingDirectory()
      *
      * @param string $cwd The new working directory
      *
-     * @return self The current Process instance
+     * @return $this
      */
     public function setWorkingDirectory($cwd)
     {
@@ -1136,7 +1130,7 @@ public function getEnv()
      *
      * @param array $env The new environment variables
      *
-     * @return self The current Process instance
+     * @return $this
      */
     public function setEnv(array $env)
     {
@@ -1167,7 +1161,7 @@ public function getInput()
      *
      * @param string|int|float|bool|resource|\Traversable|null $input The content
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @throws LogicException In case the process is running
      */
@@ -1201,7 +1195,7 @@ public function getOptions()
      *
      * @param array $options The new options
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @deprecated since version 3.3, to be removed in 4.0.
      */
@@ -1235,7 +1229,7 @@ public function getEnhanceWindowsCompatibility()
      *
      * @param bool $enhance
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @deprecated since version 3.3, to be removed in 4.0. Enhanced Windows compatibility will always be enabled.
      */
@@ -1271,7 +1265,7 @@ public function getEnhanceSigchildCompatibility()
      *
      * @param bool $enhance
      *
-     * @return self The current Process instance
+     * @return $this
      *
      * @deprecated since version 3.3, to be removed in 4.0.
      */
@@ -1289,7 +1283,7 @@ public function setEnhanceSigchildCompatibility($enhance)
      *
      * @param bool $inheritEnv
      *
-     * @return self The current Process instance
+     * @return $this
      */
     public function inheritEnvironmentVariables($inheritEnv = true)
     {
@@ -1578,7 +1572,7 @@ private function resetProcessData()
     /**
      * Sends a POSIX signal to the process.
      *
-     * @param int  $signal         A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
+     * @param int  $signal         A valid POSIX signal (see https://php.net/pcntl.constants)
      * @param bool $throwException Whether to throw exception in case signal failed
      *
      * @return bool True if the signal was sent successfully, false otherwise
diff --git a/vendor/symfony/process/ProcessUtils.php b/vendor/symfony/process/ProcessUtils.php
index c06aa247aad9d36d6922c0f99781c18736e157bf..00acde0a196e0dbaf2302395a69bbfa528e300a9 100644
--- a/vendor/symfony/process/ProcessUtils.php
+++ b/vendor/symfony/process/ProcessUtils.php
@@ -44,8 +44,8 @@ public static function escapeArgument($argument)
 
         //Fix for PHP bug #43784 escapeshellarg removes % from given string
         //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows
-        //@see https://bugs.php.net/bug.php?id=43784
-        //@see https://bugs.php.net/bug.php?id=49446
+        //@see https://bugs.php.net/43784
+        //@see https://bugs.php.net/49446
         if ('\\' === \DIRECTORY_SEPARATOR) {
             if ('' === $argument) {
                 return escapeshellarg($argument);
diff --git a/vendor/symfony/process/Tests/ExecutableFinderTest.php b/vendor/symfony/process/Tests/ExecutableFinderTest.php
index a437f2bb6f771b8acf09e5a7c4b7f47b9d36fc4c..2942695af37e4a2a2e07ded5d10cc706a3c8b063 100644
--- a/vendor/symfony/process/Tests/ExecutableFinderTest.php
+++ b/vendor/symfony/process/Tests/ExecutableFinderTest.php
@@ -132,9 +132,6 @@ public function testFindProcessInOpenBasedir()
         $this->assertSamePath(PHP_BINARY, $result);
     }
 
-    /**
-     * @requires PHP 5.4
-     */
     public function testFindBatchExecutableOnWindows()
     {
         if (ini_get('open_basedir')) {
diff --git a/vendor/symfony/process/Tests/PhpProcessTest.php b/vendor/symfony/process/Tests/PhpProcessTest.php
index b0f0a57acefaa150d3a218f498d9dd5bffaeb446..d34e84222c35c8db3eb5acf7bbe5a6431c696fac 100644
--- a/vendor/symfony/process/Tests/PhpProcessTest.php
+++ b/vendor/symfony/process/Tests/PhpProcessTest.php
@@ -38,10 +38,10 @@ public function testCommandLine()
         $commandLine = $process->getCommandLine();
 
         $process->start();
-        $this->assertContains($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after start');
+        $this->assertStringContainsString($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after start');
 
         $process->wait();
-        $this->assertContains($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after wait');
+        $this->assertStringContainsString($commandLine, $process->getCommandLine(), '::getCommandLine() returns the command line of PHP after wait');
 
         $this->assertSame(PHP_VERSION.\PHP_SAPI, $process->getOutput());
     }
diff --git a/vendor/symfony/process/Tests/ProcessBuilderTest.php b/vendor/symfony/process/Tests/ProcessBuilderTest.php
index 349b197a415b660acc9439f9cd1a25757336700d..7ab74402ac688b75957f28331be67ff7d48c18b3 100644
--- a/vendor/symfony/process/Tests/ProcessBuilderTest.php
+++ b/vendor/symfony/process/Tests/ProcessBuilderTest.php
@@ -52,11 +52,9 @@ public function testAddEnvironmentVariables()
         $this->assertSame($env, $proc->getEnv());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     */
     public function testNegativeTimeoutFromSetter()
     {
+        $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
         $pb = new ProcessBuilder();
         $pb->setTimeout(-1);
     }
@@ -81,7 +79,7 @@ public function testShouldSetArguments()
 
         $proc = $pb->getProcess();
 
-        $this->assertContains('second', $proc->getCommandLine());
+        $this->assertStringContainsString('second', $proc->getCommandLine());
     }
 
     public function testPrefixIsPrependedToAllGeneratedProcess()
@@ -149,11 +147,9 @@ public function testShouldEscapeArgumentsAndPrefix()
         }
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     */
     public function testShouldThrowALogicExceptionIfNoPrefixAndNoArgument()
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
         ProcessBuilder::create()->getProcess();
     }
 
@@ -201,12 +197,10 @@ public function testShouldReturnProcessWithEnabledOutput()
         $this->assertFalse($process->isOutputDisabled());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings, Traversable objects or stream resources.
-     */
     public function testInvalidInput()
     {
+        $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Symfony\Component\Process\ProcessBuilder::setInput only accepts strings, Traversable objects or stream resources.');
         $builder = ProcessBuilder::create();
         $builder->setInput([]);
     }
diff --git a/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php b/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php
index ff0ea508e50f07105c637dbdbc549c50e9b5160e..18e35512498f9344050b595637b7a303720b8635 100644
--- a/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php
+++ b/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php
@@ -29,12 +29,8 @@ public function testProcessFailedExceptionThrowsException()
             ->method('isSuccessful')
             ->willReturn(true);
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException(\InvalidArgumentException::class);
-            $this->expectExceptionMessage('Expected a failed process, but the given process was successful.');
-        } else {
-            $this->setExpectedException(\InvalidArgumentException::class, 'Expected a failed process, but the given process was successful.');
-        }
+        $this->expectException(\InvalidArgumentException::class);
+        $this->expectExceptionMessage('Expected a failed process, but the given process was successful.');
 
         new ProcessFailedException($process);
     }
diff --git a/vendor/symfony/process/Tests/ProcessTest.php b/vendor/symfony/process/Tests/ProcessTest.php
index 18fef4ff5ff177119e9f11eb2bf8709848e0b996..9a7c515e8a5ecf45a5f47132673aef83c9d470dd 100644
--- a/vendor/symfony/process/Tests/ProcessTest.php
+++ b/vendor/symfony/process/Tests/ProcessTest.php
@@ -79,19 +79,15 @@ public function testThatProcessDoesNotThrowWarningDuringRun()
         $this->assertEquals(E_USER_NOTICE, $actualError['type']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     */
     public function testNegativeTimeoutFromConstructor()
     {
+        $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
         $this->getProcess('', null, null, null, -1);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     */
     public function testNegativeTimeoutFromSetter()
     {
+        $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
         $p = $this->getProcess('');
         $p->setTimeout(-1);
     }
@@ -244,12 +240,10 @@ public function testLiveStreamAsInput()
         $this->assertSame('hello', $p->getOutput());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     * @expectedExceptionMessage Input can not be set while the process is running.
-     */
     public function testSetInputWhileRunningThrowsAnException()
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage('Input can not be set while the process is running.');
         $process = $this->getProcessForCode('sleep(30);');
         $process->start();
         try {
@@ -265,11 +259,11 @@ public function testSetInputWhileRunningThrowsAnException()
 
     /**
      * @dataProvider provideInvalidInputValues
-     * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings, Traversable objects or stream resources.
      */
     public function testInvalidInput($value)
     {
+        $this->expectException('Symfony\Component\Process\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Symfony\Component\Process\Process::setInput only accepts strings, Traversable objects or stream resources.');
         $process = $this->getProcess('foo');
         $process->setInput($value);
     }
@@ -476,12 +470,10 @@ public function testTTYCommandExitCode()
         $this->assertTrue($process->isSuccessful());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage TTY mode is not supported on Windows platform.
-     */
     public function testTTYInWindowsEnvironment()
     {
+        $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
+        $this->expectExceptionMessage('TTY mode is not supported on Windows platform.');
         if ('\\' !== \DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('This test is for Windows platform only');
         }
@@ -531,11 +523,9 @@ public function testSuccessfulMustRunHasCorrectExitCode()
         $this->assertEquals(0, $process->getExitCode());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\ProcessFailedException
-     */
     public function testMustRunThrowsException()
     {
+        $this->expectException('Symfony\Component\Process\Exception\ProcessFailedException');
         $this->skipIfNotEnhancedSigchild();
 
         $process = $this->getProcess('exit 1');
@@ -704,12 +694,10 @@ public function testProcessIsSignaledIfStopped()
         $this->assertEquals(15, $process->getTermSignal()); // SIGTERM
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage The process has been signaled
-     */
     public function testProcessThrowsExceptionWhenExternallySignaled()
     {
+        $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
+        $this->expectExceptionMessage('The process has been signaled');
         if (!\function_exists('posix_kill')) {
             $this->markTestSkipped('Function posix_kill is required.');
         }
@@ -733,19 +721,17 @@ public function testRestart()
         // Ensure that both processed finished and the output is numeric
         $this->assertFalse($process1->isRunning());
         $this->assertFalse($process2->isRunning());
-        $this->assertInternalType('numeric', $process1->getOutput());
-        $this->assertInternalType('numeric', $process2->getOutput());
+        $this->assertIsNumeric($process1->getOutput());
+        $this->assertIsNumeric($process2->getOutput());
 
         // Ensure that restart returned a new process by check that the output is different
         $this->assertNotEquals($process1->getOutput(), $process2->getOutput());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\ProcessTimedOutException
-     * @expectedExceptionMessage exceeded the timeout of 0.1 seconds.
-     */
     public function testRunProcessWithTimeout()
     {
+        $this->expectException('Symfony\Component\Process\Exception\ProcessTimedOutException');
+        $this->expectExceptionMessage('exceeded the timeout of 0.1 seconds.');
         $process = $this->getProcessForCode('sleep(30);');
         $process->setTimeout(0.1);
         $start = microtime(true);
@@ -760,12 +746,10 @@ public function testRunProcessWithTimeout()
         throw $e;
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\ProcessTimedOutException
-     * @expectedExceptionMessage exceeded the timeout of 0.1 seconds.
-     */
     public function testIterateOverProcessWithTimeout()
     {
+        $this->expectException('Symfony\Component\Process\Exception\ProcessTimedOutException');
+        $this->expectExceptionMessage('exceeded the timeout of 0.1 seconds.');
         $process = $this->getProcessForCode('sleep(30);');
         $process->setTimeout(0.1);
         $start = microtime(true);
@@ -794,12 +778,10 @@ public function testCheckTimeoutOnTerminatedProcess()
         $this->assertNull($process->checkTimeout());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\ProcessTimedOutException
-     * @expectedExceptionMessage exceeded the timeout of 0.1 seconds.
-     */
     public function testCheckTimeoutOnStartedProcess()
     {
+        $this->expectException('Symfony\Component\Process\Exception\ProcessTimedOutException');
+        $this->expectExceptionMessage('exceeded the timeout of 0.1 seconds.');
         $process = $this->getProcessForCode('sleep(33);');
         $process->setTimeout(0.1);
 
@@ -859,12 +841,10 @@ public function testIdleTimeoutNotExceededWhenOutputIsSent()
         }
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\ProcessTimedOutException
-     * @expectedExceptionMessage exceeded the timeout of 0.1 seconds.
-     */
     public function testStartAfterATimeout()
     {
+        $this->expectException('Symfony\Component\Process\Exception\ProcessTimedOutException');
+        $this->expectExceptionMessage('exceeded the timeout of 0.1 seconds.');
         $process = $this->getProcessForCode('sleep(35);');
         $process->setTimeout(0.1);
 
@@ -940,12 +920,10 @@ public function testExitCodeIsAvailableAfterSignal()
         $this->assertEquals(137, $process->getExitCode());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     * @expectedExceptionMessage Can not send signal on a non running process.
-     */
     public function testSignalProcessNotRunning()
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage('Can not send signal on a non running process.');
         $process = $this->getProcess('foo');
         $process->signal(1); // SIGHUP
     }
@@ -957,12 +935,8 @@ public function testMethodsThatNeedARunningProcess($method)
     {
         $process = $this->getProcess('foo');
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('Symfony\Component\Process\Exception\LogicException');
-            $this->expectExceptionMessage(sprintf('Process must be started before calling %s.', $method));
-        } else {
-            $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method));
-        }
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage(sprintf('Process must be started before calling %s.', $method));
 
         $process->{$method}();
     }
@@ -980,11 +954,11 @@ public function provideMethodsThatNeedARunningProcess()
 
     /**
      * @dataProvider provideMethodsThatNeedATerminatedProcess
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     * @expectedExceptionMessage Process must be terminated before calling
      */
     public function testMethodsThatNeedATerminatedProcess($method)
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage('Process must be terminated before calling');
         $process = $this->getProcessForCode('sleep(37);');
         $process->start();
         try {
@@ -1010,10 +984,10 @@ public function provideMethodsThatNeedATerminatedProcess()
 
     /**
      * @dataProvider provideWrongSignal
-     * @expectedException \Symfony\Component\Process\Exception\RuntimeException
      */
     public function testWrongSignal($signal)
     {
+        $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
         if ('\\' === \DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('POSIX signals do not work on Windows');
         }
@@ -1048,23 +1022,19 @@ public function testDisableOutputDisablesTheOutput()
         $this->assertFalse($p->isOutputDisabled());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage Disabling output while the process is running is not possible.
-     */
     public function testDisableOutputWhileRunningThrowsException()
     {
+        $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
+        $this->expectExceptionMessage('Disabling output while the process is running is not possible.');
         $p = $this->getProcessForCode('sleep(39);');
         $p->start();
         $p->disableOutput();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\RuntimeException
-     * @expectedExceptionMessage Enabling output while the process is running is not possible.
-     */
     public function testEnableOutputWhileRunningThrowsException()
     {
+        $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
+        $this->expectExceptionMessage('Enabling output while the process is running is not possible.');
         $p = $this->getProcessForCode('sleep(40);');
         $p->disableOutput();
         $p->start();
@@ -1081,23 +1051,19 @@ public function testEnableOrDisableOutputAfterRunDoesNotThrowException()
         $this->assertTrue($p->isOutputDisabled());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     * @expectedExceptionMessage Output can not be disabled while an idle timeout is set.
-     */
     public function testDisableOutputWhileIdleTimeoutIsSet()
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage('Output can not be disabled while an idle timeout is set.');
         $process = $this->getProcess('foo');
         $process->setIdleTimeout(1);
         $process->disableOutput();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     * @expectedExceptionMessage timeout can not be set while the output is disabled.
-     */
     public function testSetIdleTimeoutWhileOutputIsDisabled()
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage('timeout can not be set while the output is disabled.');
         $process = $this->getProcess('foo');
         $process->disableOutput();
         $process->setIdleTimeout(1);
@@ -1112,11 +1078,11 @@ public function testSetNullIdleTimeoutWhileOutputIsDisabled()
 
     /**
      * @dataProvider provideOutputFetchingMethods
-     * @expectedException \Symfony\Component\Process\Exception\LogicException
-     * @expectedExceptionMessage Output has been disabled.
      */
     public function testGetOutputWhileDisabled($fetchMethod)
     {
+        $this->expectException('Symfony\Component\Process\Exception\LogicException');
+        $this->expectExceptionMessage('Output has been disabled.');
         $p = $this->getProcessForCode('sleep(41);');
         $p->disableOutput();
         $p->start();
@@ -1178,7 +1144,7 @@ public function pipesCodeProvider()
         ];
 
         if ('\\' === \DIRECTORY_SEPARATOR) {
-            // Avoid XL buffers on Windows because of https://bugs.php.net/bug.php?id=65650
+            // Avoid XL buffers on Windows because of https://bugs.php.net/65650
             $sizes = [1, 2, 4, 8];
         } else {
             $sizes = [1, 16, 64, 1024, 4096];
@@ -1265,6 +1231,8 @@ public function testInputStreamWithCallable()
 
                 return $stream;
             }
+
+            return null;
         };
 
         $input = new InputStream();
@@ -1563,10 +1531,8 @@ public function testWaitStoppedDeadProcess()
     /**
      * @param string      $commandline
      * @param string|null $cwd
-     * @param array|null  $env
      * @param string|null $input
      * @param int         $timeout
-     * @param array       $options
      *
      * @return Process
      */
@@ -1611,12 +1577,8 @@ private function skipIfNotEnhancedSigchild($expectException = true)
             if (!$expectException) {
                 $this->markTestSkipped('PHP is compiled with --enable-sigchild.');
             } elseif (self::$notEnhancedSigchild) {
-                if (method_exists($this, 'expectException')) {
-                    $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
-                    $this->expectExceptionMessage('This PHP has been compiled with --enable-sigchild.');
-                } else {
-                    $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild.');
-                }
+                $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
+                $this->expectExceptionMessage('This PHP has been compiled with --enable-sigchild.');
             }
         }
     }
diff --git a/vendor/symfony/routing/Generator/UrlGenerator.php b/vendor/symfony/routing/Generator/UrlGenerator.php
index 3a826d86f60a9bb0223f64af9c698da92bafbd1c..42c6349227556d7f831fb4bab90864aeeac8e52c 100644
--- a/vendor/symfony/routing/Generator/UrlGenerator.php
+++ b/vendor/symfony/routing/Generator/UrlGenerator.php
@@ -123,6 +123,8 @@ public function generate($name, $parameters = [], $referenceType = self::ABSOLUT
      * @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route
      * @throws InvalidParameterException           When a parameter value for a placeholder is not correct because
      *                                             it does not match the requirement
+     *
+     * @return string|null
      */
     protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, array $requiredSchemes = [])
     {
@@ -150,7 +152,7 @@ protected function doGenerate($variables, $defaults, $requirements, $tokens, $pa
                             $this->logger->error($message, ['parameter' => $token[3], 'route' => $name, 'expected' => $token[2], 'given' => $mergedParams[$token[3]]]);
                         }
 
-                        return;
+                        return null;
                     }
 
                     $url = $token[1].$mergedParams[$token[3]].$url;
@@ -205,7 +207,7 @@ protected function doGenerate($variables, $defaults, $requirements, $tokens, $pa
                             $this->logger->error($message, ['parameter' => $token[3], 'route' => $name, 'expected' => $token[2], 'given' => $mergedParams[$token[3]]]);
                         }
 
-                        return;
+                        return null;
                     }
 
                     $routeHost = $token[1].$mergedParams[$token[3]].$routeHost;
diff --git a/vendor/symfony/routing/Loader/AnnotationClassLoader.php b/vendor/symfony/routing/Loader/AnnotationClassLoader.php
index 6b8a50efb731757b255781c52dd604e3919b1da4..2a715e35d771092f1c2eedc35ca950424c814317 100644
--- a/vendor/symfony/routing/Loader/AnnotationClassLoader.php
+++ b/vendor/symfony/routing/Loader/AnnotationClassLoader.php
@@ -15,6 +15,7 @@
 use Symfony\Component\Config\Loader\LoaderInterface;
 use Symfony\Component\Config\Loader\LoaderResolverInterface;
 use Symfony\Component\Config\Resource\FileResource;
+use Symfony\Component\Routing\Annotation\Route as RouteAnnotation;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
 
@@ -32,7 +33,6 @@
  * recognizes several parameters: requirements, options, defaults, schemes,
  * methods, host, and name. The name parameter is mandatory.
  * Here is an example of how you should be able to use it:
- *
  *     /**
  *      * @Route("/Blog")
  *      * /
@@ -44,7 +44,6 @@
  *         public function index()
  *         {
  *         }
- *
  *         /**
  *          * @Route("/{id}", name="blog_post", requirements = {"id" = "\d+"})
  *          * /
@@ -131,6 +130,10 @@ public function load($class, $type = null)
         return $collection;
     }
 
+    /**
+     * @param RouteAnnotation $annot   or an object that exposes a similar interface
+     * @param array           $globals
+     */
     protected function addRoute(RouteCollection $collection, $annot, $globals, \ReflectionClass $class, \ReflectionMethod $method)
     {
         $name = $annot->getName();
@@ -192,9 +195,6 @@ public function getResolver()
     /**
      * Gets the default route name for a class method.
      *
-     * @param \ReflectionClass  $class
-     * @param \ReflectionMethod $method
-     *
      * @return string
      */
     protected function getDefaultRouteName(\ReflectionClass $class, \ReflectionMethod $method)
diff --git a/vendor/symfony/routing/Loader/AnnotationFileLoader.php b/vendor/symfony/routing/Loader/AnnotationFileLoader.php
index b155510ed564c26627a499fc74c0e5feacebcfcf..d8c10197d2057e84df6e340dcc167a97c2bc8f56 100644
--- a/vendor/symfony/routing/Loader/AnnotationFileLoader.php
+++ b/vendor/symfony/routing/Loader/AnnotationFileLoader.php
@@ -46,7 +46,7 @@ public function __construct(FileLocatorInterface $locator, AnnotationClassLoader
      * @param string      $file A PHP file path
      * @param string|null $type The resource type
      *
-     * @return RouteCollection A RouteCollection instance
+     * @return RouteCollection|null A RouteCollection instance
      *
      * @throws \InvalidArgumentException When the file does not exist or its routes cannot be parsed
      */
@@ -58,7 +58,7 @@ public function load($file, $type = null)
         if ($class = $this->findClass($path)) {
             $refl = new \ReflectionClass($class);
             if ($refl->isAbstract()) {
-                return;
+                return null;
             }
 
             $collection->addResource(new FileResource($path));
diff --git a/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php b/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php
index 7614caea3dc40e105c60d38a86f88f73818a185e..d0cc02d1c3fba3743d01294ab9bd53ab534c517b 100644
--- a/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php
+++ b/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php
@@ -39,7 +39,8 @@ public function __construct(RouteCollection $collection, PhpFileLoader $loader,
     final public function import($resource, $type = null, $ignoreErrors = false)
     {
         $this->loader->setCurrentDir(\dirname($this->path));
-        $imported = $this->loader->import($resource, $type, $ignoreErrors, $this->file);
+        $imported = $this->loader->import($resource, $type, $ignoreErrors, $this->file) ?: [];
+
         if (!\is_array($imported)) {
             return new ImportConfigurator($this->collection, $imported);
         }
diff --git a/vendor/symfony/routing/Loader/PhpFileLoader.php b/vendor/symfony/routing/Loader/PhpFileLoader.php
index d81e7e82e7dbc507eeba5bd2367e27da3277dcf1..d9ba59d51e03bc363e0293ed2c788078209b250e 100644
--- a/vendor/symfony/routing/Loader/PhpFileLoader.php
+++ b/vendor/symfony/routing/Loader/PhpFileLoader.php
@@ -40,7 +40,7 @@ public function load($file, $type = null)
 
         // the closure forbids access to the private scope in the included file
         $loader = $this;
-        $load = \Closure::bind(function ($file) use ($loader) {
+        $load = \Closure::bind(static function ($file) use ($loader) {
             return include $file;
         }, null, ProtectedPhpFileLoader::class);
 
diff --git a/vendor/symfony/routing/Loader/XmlFileLoader.php b/vendor/symfony/routing/Loader/XmlFileLoader.php
index 444a08a77685be2906020d21e875bfbd1ae99a5c..29dfdb1665b564982a3066841100d0b02f6684a8 100644
--- a/vendor/symfony/routing/Loader/XmlFileLoader.php
+++ b/vendor/symfony/routing/Loader/XmlFileLoader.php
@@ -146,7 +146,8 @@ protected function parseImport(RouteCollection $collection, \DOMElement $node, $
 
         $this->setCurrentDir(\dirname($path));
 
-        $imported = $this->import($resource, ('' !== $type ? $type : null), false, $file);
+        /** @var RouteCollection[] $imported */
+        $imported = $this->import($resource, ('' !== $type ? $type : null), false, $file) ?: [];
 
         if (!\is_array($imported)) {
             $imported = [$imported];
@@ -261,7 +262,7 @@ private function parseConfigs(\DOMElement $node, $path)
     private function parseDefaultsConfig(\DOMElement $element, $path)
     {
         if ($this->isElementValueNull($element)) {
-            return;
+            return null;
         }
 
         // Check for existing element nodes in the default element. There can
@@ -298,7 +299,7 @@ private function parseDefaultsConfig(\DOMElement $element, $path)
     private function parseDefaultNode(\DOMElement $node, $path)
     {
         if ($this->isElementValueNull($node)) {
-            return;
+            return null;
         }
 
         switch ($node->localName) {
diff --git a/vendor/symfony/routing/Loader/YamlFileLoader.php b/vendor/symfony/routing/Loader/YamlFileLoader.php
index bc21e9cb4db7c98ff0e2bf4e895c75e3d0e4c67a..568827695bbeaeb769e6d6b8a742f7e9e17b80b6 100644
--- a/vendor/symfony/routing/Loader/YamlFileLoader.php
+++ b/vendor/symfony/routing/Loader/YamlFileLoader.php
@@ -158,7 +158,7 @@ protected function parseImport(RouteCollection $collection, array $config, $path
 
         $this->setCurrentDir(\dirname($path));
 
-        $imported = $this->import($config['resource'], $type, false, $file);
+        $imported = $this->import($config['resource'], $type, false, $file) ?: [];
 
         if (!\is_array($imported)) {
             $imported = [$imported];
diff --git a/vendor/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php b/vendor/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php
index 15c47051f5b60c7f50d57a62238ebd2bf41b1618..c8497c36fa558358bb9ce6c923b80d9e803c56a4 100644
--- a/vendor/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php
+++ b/vendor/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php
@@ -114,7 +114,7 @@ private function groupWithItem($item, $prefix, $route)
         $commonPrefix = $this->detectCommonPrefix($prefix, $itemPrefix);
 
         if (!$commonPrefix) {
-            return;
+            return null;
         }
 
         $child = new self($commonPrefix);
diff --git a/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php b/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php
index 3c3c4bfcf919e3a8af5cad3e696f045a264710b8..0d7087465af896bf72310bf75727e1ecd0f438ce 100644
--- a/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php
+++ b/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php
@@ -52,10 +52,41 @@ public function getTracesForRequest(Request $request)
 
     protected function matchCollection($pathinfo, RouteCollection $routes)
     {
+        // HEAD and GET are equivalent as per RFC
+        if ('HEAD' === $method = $this->context->getMethod()) {
+            $method = 'GET';
+        }
+        $supportsTrailingSlash = '/' !== $pathinfo && '' !== $pathinfo && $this instanceof RedirectableUrlMatcherInterface;
+
         foreach ($routes as $name => $route) {
             $compiledRoute = $route->compile();
+            $staticPrefix = $compiledRoute->getStaticPrefix();
+            $requiredMethods = $route->getMethods();
+
+            // check the static prefix of the URL first. Only use the more expensive preg_match when it matches
+            if ('' === $staticPrefix || 0 === strpos($pathinfo, $staticPrefix)) {
+                // no-op
+            } elseif (!$supportsTrailingSlash || ($requiredMethods && !\in_array('GET', $requiredMethods)) || 'GET' !== $method) {
+                $this->addTrace(sprintf('Path "%s" does not match', $route->getPath()), self::ROUTE_DOES_NOT_MATCH, $name, $route);
+                continue;
+            } elseif ('/' === substr($staticPrefix, -1) && substr($staticPrefix, 0, -1) === $pathinfo) {
+                $this->addTrace('Route matches!', self::ROUTE_MATCHES, $name, $route);
 
-            if (!preg_match($compiledRoute->getRegex(), $pathinfo, $matches)) {
+                return $this->allow = [];
+            } else {
+                $this->addTrace(sprintf('Path "%s" does not match', $route->getPath()), self::ROUTE_DOES_NOT_MATCH, $name, $route);
+                continue;
+            }
+            $regex = $compiledRoute->getRegex();
+
+            if ($supportsTrailingSlash && $pos = strpos($regex, '/$')) {
+                $regex = substr($regex, 0, $pos).'/?$'.substr($regex, $pos + 2);
+                $hasTrailingSlash = true;
+            } else {
+                $hasTrailingSlash = false;
+            }
+
+            if (!preg_match($regex, $pathinfo, $matches)) {
                 // does it match without any requirements?
                 $r = new Route($route->getPath(), $route->getDefaults(), [], $route->getOptions());
                 $cr = $r->compile();
@@ -79,54 +110,52 @@ protected function matchCollection($pathinfo, RouteCollection $routes)
                 continue;
             }
 
-            // check host requirement
+            if ($hasTrailingSlash && '/' !== substr($pathinfo, -1)) {
+                if ((!$requiredMethods || \in_array('GET', $requiredMethods)) && 'GET' === $method) {
+                    $this->addTrace('Route matches!', self::ROUTE_MATCHES, $name, $route);
+
+                    return $this->allow = [];
+                }
+                $this->addTrace(sprintf('Method "%s" does not match any of the required methods (%s)', $this->context->getMethod(), implode(', ', $requiredMethods)), self::ROUTE_ALMOST_MATCHES, $name, $route);
+                continue;
+            }
+
             $hostMatches = [];
             if ($compiledRoute->getHostRegex() && !preg_match($compiledRoute->getHostRegex(), $this->context->getHost(), $hostMatches)) {
                 $this->addTrace(sprintf('Host "%s" does not match the requirement ("%s")', $this->context->getHost(), $route->getHost()), self::ROUTE_ALMOST_MATCHES, $name, $route);
-
                 continue;
             }
 
-            // check HTTP method requirement
-            if ($requiredMethods = $route->getMethods()) {
-                // HEAD and GET are equivalent as per RFC
-                if ('HEAD' === $method = $this->context->getMethod()) {
-                    $method = 'GET';
-                }
+            $status = $this->handleRouteRequirements($pathinfo, $name, $route);
 
-                if (!\in_array($method, $requiredMethods)) {
-                    $this->allow = array_merge($this->allow, $requiredMethods);
-
-                    $this->addTrace(sprintf('Method "%s" does not match any of the required methods (%s)', $this->context->getMethod(), implode(', ', $requiredMethods)), self::ROUTE_ALMOST_MATCHES, $name, $route);
-
-                    continue;
+            if (self::REQUIREMENT_MISMATCH === $status[0]) {
+                if ($route->getCondition()) {
+                    $this->addTrace(sprintf('Condition "%s" does not evaluate to "true"', $route->getCondition()), self::ROUTE_ALMOST_MATCHES, $name, $route);
+                } else {
+                    $this->addTrace(sprintf('Scheme "%s" does not match any of the required schemes (%s); the user will be redirected to first required scheme', $this->getContext()->getScheme(), implode(', ', $route->getSchemes())), self::ROUTE_ALMOST_MATCHES, $name, $route);
                 }
-            }
-
-            // check condition
-            if ($condition = $route->getCondition()) {
-                if (!$this->getExpressionLanguage()->evaluate($condition, ['context' => $this->context, 'request' => $this->request ?: $this->createRequest($pathinfo)])) {
-                    $this->addTrace(sprintf('Condition "%s" does not evaluate to "true"', $condition), self::ROUTE_ALMOST_MATCHES, $name, $route);
 
-                    continue;
-                }
+                continue;
             }
 
-            // check HTTP scheme requirement
-            if ($requiredSchemes = $route->getSchemes()) {
-                $scheme = $this->context->getScheme();
-
-                if (!$route->hasScheme($scheme)) {
-                    $this->addTrace(sprintf('Scheme "%s" does not match any of the required schemes (%s); the user will be redirected to first required scheme', $scheme, implode(', ', $requiredSchemes)), self::ROUTE_ALMOST_MATCHES, $name, $route);
+            // check HTTP method requirement
+            if ($requiredMethods) {
+                if (!\in_array($method, $requiredMethods)) {
+                    if (self::REQUIREMENT_MATCH === $status[0]) {
+                        $this->allow = array_merge($this->allow, $requiredMethods);
+                    }
+                    $this->addTrace(sprintf('Method "%s" does not match any of the required methods (%s)', $this->context->getMethod(), implode(', ', $requiredMethods)), self::ROUTE_ALMOST_MATCHES, $name, $route);
 
-                    return true;
+                    continue;
                 }
             }
 
             $this->addTrace('Route matches!', self::ROUTE_MATCHES, $name, $route);
 
-            return true;
+            return $this->getAttributes($route, $name, array_replace($matches, $hostMatches, isset($status[1]) ? $status[1] : []));
         }
+
+        return [];
     }
 
     private function addTrace($log, $level = self::ROUTE_DOES_NOT_MATCH, $name = null, $route = null)
diff --git a/vendor/symfony/routing/Matcher/UrlMatcher.php b/vendor/symfony/routing/Matcher/UrlMatcher.php
index 663ebcbefaaecfbee96232b951019d5d41620984..b8599b23ad759d27a7db8db287741c86241e0121 100644
--- a/vendor/symfony/routing/Matcher/UrlMatcher.php
+++ b/vendor/symfony/routing/Matcher/UrlMatcher.php
@@ -80,9 +80,7 @@ public function match($pathinfo)
             throw new NoConfigurationException();
         }
 
-        throw 0 < \count($this->allow)
-            ? new MethodNotAllowedException(array_unique($this->allow))
-            : new ResourceNotFoundException(sprintf('No routes found for "%s".', $pathinfo));
+        throw 0 < \count($this->allow) ? new MethodNotAllowedException(array_unique($this->allow)) : new ResourceNotFoundException(sprintf('No routes found for "%s".', $pathinfo));
     }
 
     /**
diff --git a/vendor/symfony/routing/RequestContext.php b/vendor/symfony/routing/RequestContext.php
index 8ebad8e2538db9804ea4e872f8ccaf12ffcda6fa..ed50cd70d835a8454b5f89e9cd907e2fc159f8be 100644
--- a/vendor/symfony/routing/RequestContext.php
+++ b/vendor/symfony/routing/RequestContext.php
@@ -67,8 +67,8 @@ public function fromRequest(Request $request)
         $this->setMethod($request->getMethod());
         $this->setHost($request->getHost());
         $this->setScheme($request->getScheme());
-        $this->setHttpPort($request->isSecure() ? $this->httpPort : $request->getPort());
-        $this->setHttpsPort($request->isSecure() ? $request->getPort() : $this->httpsPort);
+        $this->setHttpPort($request->isSecure() || null === $request->getPort() ? $this->httpPort : $request->getPort());
+        $this->setHttpsPort($request->isSecure() && null !== $request->getPort() ? $request->getPort() : $this->httpsPort);
         $this->setQueryString($request->server->get('QUERY_STRING', ''));
 
         return $this;
diff --git a/vendor/symfony/routing/RouteCollectionBuilder.php b/vendor/symfony/routing/RouteCollectionBuilder.php
index 800e448cf3b46c798af5a1f37be24cc57e8a69e3..45f9e3d3912d9ce212963a410abf74ef1ef1ad6e 100644
--- a/vendor/symfony/routing/RouteCollectionBuilder.php
+++ b/vendor/symfony/routing/RouteCollectionBuilder.php
@@ -127,7 +127,6 @@ public function mount($prefix, self $builder)
     /**
      * Adds a Route object to the builder.
      *
-     * @param Route       $route
      * @param string|null $name
      *
      * @return $this
diff --git a/vendor/symfony/routing/Router.php b/vendor/symfony/routing/Router.php
index 27c32e14ae8c6016b56292ff55ffe09e3aa18270..a85fa6d765a7fd544a06b1e3164e600af0955df8 100644
--- a/vendor/symfony/routing/Router.php
+++ b/vendor/symfony/routing/Router.php
@@ -263,9 +263,9 @@ public function matchRequest(Request $request)
     }
 
     /**
-     * Gets the UrlMatcher instance associated with this Router.
+     * Gets the UrlMatcher or RequestMatcher instance associated with this Router.
      *
-     * @return UrlMatcherInterface A UrlMatcherInterface instance
+     * @return UrlMatcherInterface|RequestMatcherInterface
      */
     public function getMatcher()
     {
diff --git a/vendor/symfony/routing/RouterInterface.php b/vendor/symfony/routing/RouterInterface.php
index a10ae34e07451b6a16949e030922c8ff005cd741..8a3e33dc22436b1810742853d907f8b821f29fb4 100644
--- a/vendor/symfony/routing/RouterInterface.php
+++ b/vendor/symfony/routing/RouterInterface.php
@@ -26,6 +26,9 @@ interface RouterInterface extends UrlMatcherInterface, UrlGeneratorInterface
     /**
      * Gets the RouteCollection instance associated with this Router.
      *
+     * WARNING: This method should never be used at runtime as it is SLOW.
+     *          You might use it in a cache warmer though.
+     *
      * @return RouteCollection A RouteCollection instance
      */
     public function getRouteCollection();
diff --git a/vendor/symfony/routing/Tests/Annotation/RouteTest.php b/vendor/symfony/routing/Tests/Annotation/RouteTest.php
index 2cbfd7390784116f59b385163ab9b624c3d54fe0..b698be8f667dc2f64f564bdacf5db53b678fb2d5 100644
--- a/vendor/symfony/routing/Tests/Annotation/RouteTest.php
+++ b/vendor/symfony/routing/Tests/Annotation/RouteTest.php
@@ -16,12 +16,10 @@
 
 class RouteTest extends TestCase
 {
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testInvalidRouteParameter()
     {
-        $route = new Route(['foo' => 'bar']);
+        $this->expectException('BadMethodCallException');
+        new Route(['foo' => 'bar']);
     }
 
     /**
diff --git a/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/FooTrait.php b/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/FooTrait.php
index ee8f4b071a368c8752ce1618d3b30f6f8fe309df..c06fb43f6887e726cf642eeaedaee50ae58c78cb 100644
--- a/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/FooTrait.php
+++ b/vendor/symfony/routing/Tests/Fixtures/AnnotatedClasses/FooTrait.php
@@ -6,7 +6,7 @@ trait FooTrait
 {
     public function doBar()
     {
-        $baz = self::class;
+        self::class;
         if (true) {
         }
     }
diff --git a/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php b/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
index a6a47b4ba2fd0870567fe22183f580ccdc815c34..4e725fa8bb51052fb03b72014bf4e27aa529cb01 100644
--- a/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
+++ b/vendor/symfony/routing/Tests/Generator/Dumper/PhpGeneratorDumperTest.php
@@ -115,11 +115,9 @@ public function testDumpWithTooManyRoutes()
         $this->assertEquals('/app.php/testing2', $relativeUrlWithoutParameter);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testDumpWithoutRoutes()
     {
+        $this->expectException('InvalidArgumentException');
         file_put_contents($this->testTmpFilepath, $this->generatorDumper->dump(['class' => 'WithoutRoutesUrlGenerator']));
         include $this->testTmpFilepath;
 
@@ -128,18 +126,16 @@ public function testDumpWithoutRoutes()
         $projectUrlGenerator->generate('Test', []);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\RouteNotFoundException
-     */
     public function testGenerateNonExistingRoute()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\RouteNotFoundException');
         $this->routeCollection->add('Test', new Route('/test'));
 
         file_put_contents($this->testTmpFilepath, $this->generatorDumper->dump(['class' => 'NonExistingRoutesUrlGenerator']));
         include $this->testTmpFilepath;
 
         $projectUrlGenerator = new \NonExistingRoutesUrlGenerator(new RequestContext());
-        $url = $projectUrlGenerator->generate('NonExisting', []);
+        $projectUrlGenerator->generate('NonExisting', []);
     }
 
     public function testDumpForRouteWithDefaults()
diff --git a/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php b/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
index a4d754cb14a6ce2151b7cc0e1900f3413df94955..de7c4f5ed964bf677fd00df92d6b0f4878c2e127 100644
--- a/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
+++ b/vendor/symfony/routing/Tests/Generator/UrlGeneratorTest.php
@@ -76,11 +76,9 @@ public function testRelativeUrlWithNullParameter()
         $this->assertEquals('/app.php/testing', $url);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testRelativeUrlWithNullParameterButNotOptional()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/testing/{foo}/bar', ['foo' => null]));
         // This must raise an exception because the default requirement for "foo" is "[^/]+" which is not met with these params.
         // Generating path "/testing//bar" would be wrong as matching this route would fail.
@@ -162,38 +160,30 @@ public function testGlobalParameterHasHigherPriorityThanDefault()
         $this->assertSame('/app.php/de', $url);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\RouteNotFoundException
-     */
     public function testGenerateWithoutRoutes()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\RouteNotFoundException');
         $routes = $this->getRoutes('foo', new Route('/testing/{foo}'));
         $this->getGenerator($routes)->generate('test', [], UrlGeneratorInterface::ABSOLUTE_URL);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\MissingMandatoryParametersException
-     */
     public function testGenerateForRouteWithoutMandatoryParameter()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\MissingMandatoryParametersException');
         $routes = $this->getRoutes('test', new Route('/testing/{foo}'));
         $this->getGenerator($routes)->generate('test', [], UrlGeneratorInterface::ABSOLUTE_URL);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testGenerateForRouteWithInvalidOptionalParameter()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/testing/{foo}', ['foo' => '1'], ['foo' => 'd+']));
         $this->getGenerator($routes)->generate('test', ['foo' => 'bar'], UrlGeneratorInterface::ABSOLUTE_URL);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testGenerateForRouteWithInvalidParameter()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/testing/{foo}', [], ['foo' => '1|2']));
         $this->getGenerator($routes)->generate('test', ['foo' => '0'], UrlGeneratorInterface::ABSOLUTE_URL);
     }
@@ -225,29 +215,23 @@ public function testGenerateForRouteWithInvalidParameterButDisabledRequirementsC
         $this->assertSame('/app.php/testing/bar', $generator->generate('test', ['foo' => 'bar']));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testGenerateForRouteWithInvalidMandatoryParameter()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/testing/{foo}', [], ['foo' => 'd+']));
         $this->getGenerator($routes)->generate('test', ['foo' => 'bar'], UrlGeneratorInterface::ABSOLUTE_URL);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testGenerateForRouteWithInvalidUtf8Parameter()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/testing/{foo}', [], ['foo' => '\pL+'], ['utf8' => true]));
         $this->getGenerator($routes)->generate('test', ['foo' => 'abc123'], UrlGeneratorInterface::ABSOLUTE_URL);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testRequiredParamAndEmptyPassed()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/{slug}', [], ['slug' => '.+']));
         $this->getGenerator($routes)->generate('test', ['slug' => '']);
     }
@@ -368,7 +352,7 @@ public function testAdjacentVariables()
 
         // The default requirement for 'x' should not allow the separator '.' in this case because it would otherwise match everything
         // and following optional variables like _format could never match.
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Routing\Exception\InvalidParameterException');
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $generator->generate('test', ['x' => 'do.t', 'y' => '123', 'z' => 'bar', '_format' => 'xml']);
     }
 
@@ -397,20 +381,16 @@ public function testDefaultRequirementOfVariable()
         $this->assertSame('/app.php/index.mobile.html', $generator->generate('test', ['page' => 'index', '_format' => 'mobile.html']));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testDefaultRequirementOfVariableDisallowsSlash()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/{page}.{_format}'));
         $this->getGenerator($routes)->generate('test', ['page' => 'index', '_format' => 'sl/ash']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testDefaultRequirementOfVariableDisallowsNextSeparator()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/{page}.{_format}'));
         $this->getGenerator($routes)->generate('test', ['page' => 'do.t', '_format' => 'html']);
     }
@@ -436,29 +416,23 @@ public function testWithHostSameAsContextAndAbsolute()
         $this->assertEquals('http://fr.example.com/app.php/Fabien', $this->getGenerator($routes, ['host' => 'fr.example.com'])->generate('test', ['name' => 'Fabien', 'locale' => 'fr'], UrlGeneratorInterface::ABSOLUTE_URL));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testUrlWithInvalidParameterInHost()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/', [], ['foo' => 'bar'], [], '{foo}.example.com'));
         $this->getGenerator($routes)->generate('test', ['foo' => 'baz'], UrlGeneratorInterface::ABSOLUTE_PATH);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testUrlWithInvalidParameterInHostWhenParamHasADefaultValue()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/', ['foo' => 'bar'], ['foo' => 'bar'], [], '{foo}.example.com'));
         $this->getGenerator($routes)->generate('test', ['foo' => 'baz'], UrlGeneratorInterface::ABSOLUTE_PATH);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\InvalidParameterException
-     */
     public function testUrlWithInvalidParameterEqualsDefaultValueInHost()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\InvalidParameterException');
         $routes = $this->getRoutes('test', new Route('/', ['foo' => 'baz'], ['foo' => 'bar'], [], '{foo}.example.com'));
         $this->getGenerator($routes)->generate('test', ['foo' => 'baz'], UrlGeneratorInterface::ABSOLUTE_PATH);
     }
diff --git a/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php b/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php
index 7726dc6fa89f1a192661daeb55a316f3842e6bfe..b13f23cf40615fd21dcbc3ea4f4fedca5fdae5c6 100644
--- a/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php
+++ b/vendor/symfony/routing/Tests/Loader/AnnotationClassLoaderTest.php
@@ -26,19 +26,15 @@ protected function setUp()
         $this->loader = $this->getClassLoader($this->reader);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testLoadMissingClass()
     {
+        $this->expectException('InvalidArgumentException');
         $this->loader->load('MissingClass');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testLoadAbstractClass()
     {
+        $this->expectException('InvalidArgumentException');
         $this->loader->load('Symfony\Component\Routing\Tests\Fixtures\AnnotatedClasses\AbstractClass');
     }
 
diff --git a/vendor/symfony/routing/Tests/Loader/AnnotationFileLoaderTest.php b/vendor/symfony/routing/Tests/Loader/AnnotationFileLoaderTest.php
index 066b7c45f54e30b7a55e3110b253a8864eae8e06..0b1175f605eecfafbf90a8a75a34679e7b5e6966 100644
--- a/vendor/symfony/routing/Tests/Loader/AnnotationFileLoaderTest.php
+++ b/vendor/symfony/routing/Tests/Loader/AnnotationFileLoaderTest.php
@@ -35,9 +35,6 @@ public function testLoad()
         $this->loader->load(__DIR__.'/../Fixtures/AnnotatedClasses/FooClass.php');
     }
 
-    /**
-     * @requires PHP 5.4
-     */
     public function testLoadTraitWithClassConstant()
     {
         $this->reader->expects($this->never())->method('getClassAnnotation');
@@ -45,12 +42,10 @@ public function testLoadTraitWithClassConstant()
         $this->loader->load(__DIR__.'/../Fixtures/AnnotatedClasses/FooTrait.php');
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Did you forgot to add the "<?php" start tag at the beginning of the file?
-     */
     public function testLoadFileWithoutStartTag()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('Did you forgot to add the "<?php" start tag at the beginning of the file?');
         $this->loader->load(__DIR__.'/../Fixtures/OtherAnnotatedClasses/NoStartTagClass.php');
     }
 
diff --git a/vendor/symfony/routing/Tests/Loader/ObjectRouteLoaderTest.php b/vendor/symfony/routing/Tests/Loader/ObjectRouteLoaderTest.php
index 774e1a1fe57525580e9ec049444c7ba21d0bfc02..64187744eb2229bd4b05c1eef991498c98514a1a 100644
--- a/vendor/symfony/routing/Tests/Loader/ObjectRouteLoaderTest.php
+++ b/vendor/symfony/routing/Tests/Loader/ObjectRouteLoaderTest.php
@@ -41,11 +41,11 @@ public function testLoadCallsServiceAndReturnsCollection()
     }
 
     /**
-     * @expectedException \InvalidArgumentException
      * @dataProvider getBadResourceStrings
      */
     public function testExceptionWithoutSyntax($resourceString)
     {
+        $this->expectException('InvalidArgumentException');
         $loader = new ObjectRouteLoaderForTest();
         $loader->load($resourceString);
     }
@@ -59,31 +59,25 @@ public function getBadResourceStrings()
         ];
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testExceptionOnNoObjectReturned()
     {
+        $this->expectException('LogicException');
         $loader = new ObjectRouteLoaderForTest();
         $loader->loaderMap = ['my_service' => 'NOT_AN_OBJECT'];
         $loader->load('my_service:method');
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testExceptionOnBadMethod()
     {
+        $this->expectException('BadMethodCallException');
         $loader = new ObjectRouteLoaderForTest();
         $loader->loaderMap = ['my_service' => new \stdClass()];
         $loader->load('my_service:method');
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testExceptionOnMethodNotReturningCollection()
     {
+        $this->expectException('LogicException');
         $service = $this->getMockBuilder('stdClass')
             ->setMethods(['loadRoutes'])
             ->getMock();
diff --git a/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php b/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
index 9a061b295afbe8232f7e885aaef50fbd03af8f7a..128bb54fb0315bb601bfd5f6f92a9ecc1c02cf00 100644
--- a/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
+++ b/vendor/symfony/routing/Tests/Loader/XmlFileLoaderTest.php
@@ -104,21 +104,21 @@ public function testUtf8Route()
     }
 
     /**
-     * @expectedException \InvalidArgumentException
      * @dataProvider getPathsToInvalidFiles
      */
     public function testLoadThrowsExceptionWithInvalidFile($filePath)
     {
+        $this->expectException('InvalidArgumentException');
         $loader = new XmlFileLoader(new FileLocator([__DIR__.'/../Fixtures']));
         $loader->load($filePath);
     }
 
     /**
-     * @expectedException \InvalidArgumentException
      * @dataProvider getPathsToInvalidFiles
      */
     public function testLoadThrowsExceptionWithInvalidFileEvenWithoutSchemaValidation($filePath)
     {
+        $this->expectException('InvalidArgumentException');
         $loader = new CustomXmlFileLoader(new FileLocator([__DIR__.'/../Fixtures']));
         $loader->load($filePath);
     }
@@ -128,12 +128,10 @@ public function getPathsToInvalidFiles()
         return [['nonvalidnode.xml'], ['nonvalidroute.xml'], ['nonvalid.xml'], ['missing_id.xml'], ['missing_path.xml']];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Document types are not allowed.
-     */
     public function testDocTypeIsNotAllowed()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('Document types are not allowed.');
         $loader = new XmlFileLoader(new FileLocator([__DIR__.'/../Fixtures']));
         $loader->load('withdoctype.xml');
     }
@@ -338,12 +336,10 @@ public function testLoadRouteWithControllerSetInDefaults()
         $this->assertSame('AppBundle:Blog:list', $route->getDefault('_controller'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The routing file "[^"]*" must not specify both the "controller" attribute and the defaults key "_controller" for "app_blog"/
-     */
     public function testOverrideControllerInDefaults()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The routing file "[^"]*" must not specify both the "controller" attribute and the defaults key "_controller" for "app_blog"/');
         $loader = new XmlFileLoader(new FileLocator([__DIR__.'/../Fixtures/controller']));
         $loader->load('override_defaults.xml');
     }
@@ -372,12 +368,10 @@ public function provideFilesImportingRoutesWithControllers()
         yield ['import__controller.xml'];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The routing file "[^"]*" must not specify both the "controller" attribute and the defaults key "_controller" for the "import" tag/
-     */
     public function testImportWithOverriddenController()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The routing file "[^"]*" must not specify both the "controller" attribute and the defaults key "_controller" for the "import" tag/');
         $loader = new XmlFileLoader(new FileLocator([__DIR__.'/../Fixtures/controller']));
         $loader->load('import_override_defaults.xml');
     }
diff --git a/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php b/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
index 4944e5b63651039cfdff546b53faf516b8fcd8f1..2e3261a1ca676a293437d050a76a5c18794ec601 100644
--- a/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
+++ b/vendor/symfony/routing/Tests/Loader/YamlFileLoaderTest.php
@@ -41,11 +41,11 @@ public function testLoadDoesNothingIfEmpty()
     }
 
     /**
-     * @expectedException \InvalidArgumentException
      * @dataProvider getPathsToInvalidFiles
      */
     public function testLoadThrowsExceptionWithInvalidFile($filePath)
     {
+        $this->expectException('InvalidArgumentException');
         $loader = new YamlFileLoader(new FileLocator([__DIR__.'/../Fixtures']));
         $loader->load($filePath);
     }
@@ -139,12 +139,10 @@ public function testLoadRouteWithControllerSetInDefaults()
         $this->assertSame('AppBundle:Blog:list', $route->getDefault('_controller'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The routing file "[^"]*" must not specify both the "controller" key and the defaults key "_controller" for "app_blog"/
-     */
     public function testOverrideControllerInDefaults()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The routing file "[^"]*" must not specify both the "controller" key and the defaults key "_controller" for "app_blog"/');
         $loader = new YamlFileLoader(new FileLocator([__DIR__.'/../Fixtures/controller']));
         $loader->load('override_defaults.yml');
     }
@@ -173,12 +171,10 @@ public function provideFilesImportingRoutesWithControllers()
         yield ['import__controller.yml'];
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessageRegExp /The routing file "[^"]*" must not specify both the "controller" key and the defaults key "_controller" for "_static"/
-     */
     public function testImportWithOverriddenController()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessageRegExp('/The routing file "[^"]*" must not specify both the "controller" key and the defaults key "_controller" for "_static"/');
         $loader = new YamlFileLoader(new FileLocator([__DIR__.'/../Fixtures/controller']));
         $loader->load('import_override_defaults.yml');
     }
diff --git a/vendor/symfony/routing/Tests/Matcher/DumpedUrlMatcherTest.php b/vendor/symfony/routing/Tests/Matcher/DumpedUrlMatcherTest.php
index 34946f3f2b26c27e0f03857581ec75a1bd0342b5..873b45a5a4eacd80d5960fd0089098db7fde0473 100644
--- a/vendor/symfony/routing/Tests/Matcher/DumpedUrlMatcherTest.php
+++ b/vendor/symfony/routing/Tests/Matcher/DumpedUrlMatcherTest.php
@@ -17,21 +17,17 @@
 
 class DumpedUrlMatcherTest extends UrlMatcherTest
 {
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage The "schemes" requirement is only supported for URL matchers that implement RedirectableUrlMatcherInterface.
-     */
     public function testSchemeRequirement()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('The "schemes" requirement is only supported for URL matchers that implement RedirectableUrlMatcherInterface.');
         parent::testSchemeRequirement();
     }
 
-    /**
-     * @expectedException \LogicException
-     * @expectedExceptionMessage The "schemes" requirement is only supported for URL matchers that implement RedirectableUrlMatcherInterface.
-     */
     public function testSchemeAndMethodMismatch()
     {
+        $this->expectException('LogicException');
+        $this->expectExceptionMessage('The "schemes" requirement is only supported for URL matchers that implement RedirectableUrlMatcherInterface.');
         parent::testSchemeRequirement();
     }
 
diff --git a/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php b/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
index 2816567c1eea8ffae71efa162324c8236f041040..7286010158a682734bc25a882048eedf545057ef 100644
--- a/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
+++ b/vendor/symfony/routing/Tests/Matcher/Dumper/PhpMatcherDumperTest.php
@@ -46,11 +46,9 @@ protected function tearDown()
         @unlink($this->dumpPath);
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testDumpWhenSchemeIsUsedWithoutAProperDumper()
     {
+        $this->expectException('LogicException');
         $collection = new RouteCollection();
         $collection->add('secure', new Route(
             '/secure',
diff --git a/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php b/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php
index b14fe98d4d4d5ca78f5aacf466a30624394f86e2..66b199ab062348df822531b2aa46c6067a4edca9 100644
--- a/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php
+++ b/vendor/symfony/routing/Tests/Matcher/RedirectableUrlMatcherTest.php
@@ -27,11 +27,9 @@ public function testMissingTrailingSlash()
         $matcher->match('/foo');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testRedirectWhenNoSlashForNonSafeMethod()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('foo', new Route('/foo/'));
 
diff --git a/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php b/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php
index 04ddf845f0d7e00fe86915ae57ce16550e001725..b31f99e0c4964b84196888198beedd8f3ca74ef8 100644
--- a/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php
+++ b/vendor/symfony/routing/Tests/Matcher/TraceableUrlMatcherTest.php
@@ -11,14 +11,13 @@
 
 namespace Symfony\Component\Routing\Tests\Matcher;
 
-use PHPUnit\Framework\TestCase;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Matcher\TraceableUrlMatcher;
 use Symfony\Component\Routing\RequestContext;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
 
-class TraceableUrlMatcherTest extends TestCase
+class TraceableUrlMatcherTest extends UrlMatcherTest
 {
     public function test()
     {
@@ -119,4 +118,9 @@ public function testRoutesWithConditions()
         $traces = $matcher->getTracesForRequest($matchingRequest);
         $this->assertEquals('Route matches!', $traces[0]['log']);
     }
+
+    protected function getUrlMatcher(RouteCollection $routes, RequestContext $context = null)
+    {
+        return new TraceableUrlMatcher($routes, $context ?: new RequestContext());
+    }
 }
diff --git a/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php b/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php
index 61f9be335847104b4047dad8770edda0154e8467..8a9731f98ae5c7cad3ffb8dfd756734d7250ec8f 100644
--- a/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php
+++ b/vendor/symfony/routing/Tests/Matcher/UrlMatcherTest.php
@@ -27,7 +27,7 @@ public function testNoMethodSoAllowed()
         $coll->add('foo', new Route('/foo'));
 
         $matcher = $this->getUrlMatcher($coll);
-        $this->assertInternalType('array', $matcher->match('/foo'));
+        $this->assertIsArray($matcher->match('/foo'));
     }
 
     public function testMethodNotAllowed()
@@ -66,7 +66,7 @@ public function testHeadAllowedWhenRequirementContainsGet()
         $coll->add('foo', new Route('/foo', [], [], [], '', [], ['get']));
 
         $matcher = $this->getUrlMatcher($coll, new RequestContext('', 'head'));
-        $this->assertInternalType('array', $matcher->match('/foo'));
+        $this->assertIsArray($matcher->match('/foo'));
     }
 
     public function testMethodNotAllowedAggregatesAllowedMethods()
@@ -108,7 +108,7 @@ public function testMatch()
         $collection = new RouteCollection();
         $collection->add('foo', new Route('/foo', [], [], [], '', [], ['get', 'head']));
         $matcher = $this->getUrlMatcher($collection);
-        $this->assertInternalType('array', $matcher->match('/foo'));
+        $this->assertIsArray($matcher->match('/foo'));
 
         // route does not match with POST method context
         $matcher = $this->getUrlMatcher($collection, new RequestContext('', 'post'));
@@ -120,9 +120,9 @@ public function testMatch()
 
         // route does match with GET or HEAD method context
         $matcher = $this->getUrlMatcher($collection);
-        $this->assertInternalType('array', $matcher->match('/foo'));
+        $this->assertIsArray($matcher->match('/foo'));
         $matcher = $this->getUrlMatcher($collection, new RequestContext('', 'head'));
-        $this->assertInternalType('array', $matcher->match('/foo'));
+        $this->assertIsArray($matcher->match('/foo'));
 
         // route with an optional variable as the first segment
         $collection = new RouteCollection();
@@ -177,11 +177,9 @@ public function testMatchSpecialRouteName()
         $this->assertEquals(['_route' => '$péß^a|'], $matcher->match('/bar'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testTrailingEncodedNewlineIsNotOverlooked()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $collection = new RouteCollection();
         $collection->add('foo', new Route('/foo'));
 
@@ -222,7 +220,7 @@ public function testMatchOverriddenRoute()
         $matcher = $this->getUrlMatcher($collection);
 
         $this->assertEquals(['_route' => 'foo'], $matcher->match('/foo1'));
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Routing\Exception\ResourceNotFoundException');
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $this->assertEquals([], $matcher->match('/foo'));
     }
 
@@ -279,7 +277,7 @@ public function testAdjacentVariables()
         // z and _format are optional.
         $this->assertEquals(['w' => 'wwwww', 'x' => 'x', 'y' => 'y', 'z' => 'default-z', '_format' => 'html', '_route' => 'test'], $matcher->match('/wwwwwxy'));
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Routing\Exception\ResourceNotFoundException');
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $matcher->match('/wxy.html');
     }
 
@@ -294,7 +292,7 @@ public function testOptionalVariableWithNoRealSeparator()
 
         // Usually the character in front of an optional parameter can be left out, e.g. with pattern '/get/{what}' just '/get' would match.
         // But here the 't' in 'get' is not a separating character, so it makes no sense to match without it.
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Routing\Exception\ResourceNotFoundException');
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $matcher->match('/ge');
     }
 
@@ -316,11 +314,9 @@ public function testDefaultRequirementOfVariable()
         $this->assertEquals(['page' => 'index', '_format' => 'mobile.html', '_route' => 'test'], $matcher->match('/index.mobile.html'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testDefaultRequirementOfVariableDisallowsSlash()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('test', new Route('/{page}.{_format}'));
         $matcher = $this->getUrlMatcher($coll);
@@ -328,11 +324,9 @@ public function testDefaultRequirementOfVariableDisallowsSlash()
         $matcher->match('/index.sl/ash');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testDefaultRequirementOfVariableDisallowsNextSeparator()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('test', new Route('/{page}.{_format}', [], ['_format' => 'html|xml']));
         $matcher = $this->getUrlMatcher($coll);
@@ -340,22 +334,18 @@ public function testDefaultRequirementOfVariableDisallowsNextSeparator()
         $matcher->match('/do.t.html');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testSchemeRequirement()
     {
+        $this->getExpectedException() ?: $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('foo', new Route('/foo', [], [], [], '', ['https']));
         $matcher = $this->getUrlMatcher($coll);
         $matcher->match('/foo');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testCondition()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $route = new Route('/foo');
         $route->setCondition('context.getMethod() == "POST"');
@@ -422,11 +412,9 @@ public function testWithHostOnRouteCollection()
         $this->assertEquals(['foo' => 'bar', '_route' => 'bar', 'locale' => 'en'], $matcher->match('/bar/bar'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testWithOutHostHostDoesNotMatch()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('foo', new Route('/foo/{foo}', [], [], [], '{locale}.example.com'));
 
@@ -434,11 +422,9 @@ public function testWithOutHostHostDoesNotMatch()
         $matcher->match('/foo/bar');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testPathIsCaseSensitive()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('foo', new Route('/locale', [], ['locale' => 'EN|FR|DE']));
 
@@ -455,11 +441,9 @@ public function testHostIsCaseInsensitive()
         $this->assertEquals(['_route' => 'foo', 'locale' => 'en'], $matcher->match('/'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\NoConfigurationException
-     */
     public function testNoConfiguration()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\NoConfigurationException');
         $coll = new RouteCollection();
 
         $matcher = $this->getUrlMatcher($coll);
@@ -490,11 +474,9 @@ public function testNestedCollections()
         $this->assertEquals(['_route' => 'buz'], $matcher->match('/prefix/buz'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
-     */
     public function testSchemeAndMethodMismatch()
     {
+        $this->expectException('Symfony\Component\Routing\Exception\ResourceNotFoundException');
         $coll = new RouteCollection();
         $coll->add('foo', new Route('/', [], [], [], null, ['https'], ['POST']));
 
diff --git a/vendor/symfony/routing/Tests/RouteCollectionBuilderTest.php b/vendor/symfony/routing/Tests/RouteCollectionBuilderTest.php
index 11d9453e09093d9763dc55a5e3842e11ab5e5ccd..f5042749e2ebb9255031cd88dd25c1516f2d4f7e 100644
--- a/vendor/symfony/routing/Tests/RouteCollectionBuilderTest.php
+++ b/vendor/symfony/routing/Tests/RouteCollectionBuilderTest.php
@@ -75,11 +75,9 @@ public function testImportAddResources()
         $this->assertCount(1, $routeCollection->getResources());
     }
 
-    /**
-     * @expectedException \BadMethodCallException
-     */
     public function testImportWithoutLoaderThrowsException()
     {
+        $this->expectException('BadMethodCallException');
         $collectionBuilder = new RouteCollectionBuilder();
         $collectionBuilder->import('routing.yml');
     }
diff --git a/vendor/symfony/routing/Tests/RouteCompilerTest.php b/vendor/symfony/routing/Tests/RouteCompilerTest.php
index d9783147b8de70b1ce6e29d19684038af0145f3f..b398b2f35e90f881263be0ba822673ee65f37313 100644
--- a/vendor/symfony/routing/Tests/RouteCompilerTest.php
+++ b/vendor/symfony/routing/Tests/RouteCompilerTest.php
@@ -243,52 +243,44 @@ public function provideCompileImplicitUtf8Data()
         ];
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRouteWithSameVariableTwice()
     {
+        $this->expectException('LogicException');
         $route = new Route('/{name}/{name}');
 
-        $compiled = $route->compile();
+        $route->compile();
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRouteCharsetMismatch()
     {
+        $this->expectException('LogicException');
         $route = new Route("/\xE9/{bar}", [], ['bar' => '.'], ['utf8' => true]);
 
-        $compiled = $route->compile();
+        $route->compile();
     }
 
-    /**
-     * @expectedException \LogicException
-     */
     public function testRequirementCharsetMismatch()
     {
+        $this->expectException('LogicException');
         $route = new Route('/foo/{bar}', [], ['bar' => "\xE9"], ['utf8' => true]);
 
-        $compiled = $route->compile();
+        $route->compile();
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRouteWithFragmentAsPathParameter()
     {
+        $this->expectException('InvalidArgumentException');
         $route = new Route('/{_fragment}');
 
-        $compiled = $route->compile();
+        $route->compile();
     }
 
     /**
      * @dataProvider getVariableNamesStartingWithADigit
-     * @expectedException \DomainException
      */
     public function testRouteWithVariableNameStartingWithADigit($name)
     {
+        $this->expectException('DomainException');
         $route = new Route('/{'.$name.'}');
         $route->compile();
     }
@@ -373,11 +365,9 @@ public function provideCompileWithHostData()
         ];
     }
 
-    /**
-     * @expectedException \DomainException
-     */
     public function testRouteWithTooLongVariableName()
     {
+        $this->expectException('DomainException');
         $route = new Route(sprintf('/{%s}', str_repeat('a', RouteCompiler::VARIABLE_MAXIMUM_LENGTH + 1)));
         $route->compile();
     }
diff --git a/vendor/symfony/routing/Tests/RouteTest.php b/vendor/symfony/routing/Tests/RouteTest.php
index 179f4880d0d889a195c0738401385eec56049522..53ae859df61100a9346be1957e61d1f547b6ceac 100644
--- a/vendor/symfony/routing/Tests/RouteTest.php
+++ b/vendor/symfony/routing/Tests/RouteTest.php
@@ -124,10 +124,10 @@ public function testRequirement()
 
     /**
      * @dataProvider getInvalidRequirements
-     * @expectedException \InvalidArgumentException
      */
     public function testSetInvalidRequirement($req)
     {
+        $this->expectException('InvalidArgumentException');
         $route = new Route('/{foo}');
         $route->setRequirement('foo', $req);
     }
diff --git a/vendor/symfony/routing/Tests/RouterTest.php b/vendor/symfony/routing/Tests/RouterTest.php
index 0f46e5317b68cc93d140e085179d45a433e4f44b..fc5e633b0b920a700de73e24c6a115fea44d52ed 100644
--- a/vendor/symfony/routing/Tests/RouterTest.php
+++ b/vendor/symfony/routing/Tests/RouterTest.php
@@ -41,12 +41,10 @@ public function testSetOptionsWithSupportedOptions()
         $this->assertSame('ResourceType', $this->router->getOption('resource_type'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The Router does not support the following options: "option_foo", "option_bar"
-     */
     public function testSetOptionsWithUnsupportedOptions()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The Router does not support the following options: "option_foo", "option_bar"');
         $this->router->setOptions([
             'cache_dir' => './cache',
             'option_foo' => true,
@@ -62,21 +60,17 @@ public function testSetOptionWithSupportedOption()
         $this->assertSame('./cache', $this->router->getOption('cache_dir'));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The Router does not support the "option_foo" option
-     */
     public function testSetOptionWithUnsupportedOption()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The Router does not support the "option_foo" option');
         $this->router->setOption('option_foo', true);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The Router does not support the "option_foo" option
-     */
     public function testGetOptionWithUnsupportedOption()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The Router does not support the "option_foo" option');
         $this->router->getOption('option_foo', true);
     }
 
diff --git a/vendor/symfony/serializer/CHANGELOG.md b/vendor/symfony/serializer/CHANGELOG.md
index 450640d1602277ba103fab4124095c08f978c43d..3b8b99f108dc68d1f543fc1c50ca67d33247bc9c 100644
--- a/vendor/symfony/serializer/CHANGELOG.md
+++ b/vendor/symfony/serializer/CHANGELOG.md
@@ -9,7 +9,7 @@ CHANGELOG
  * added support for serializing `DateInterval` objects
  * added getter for extra attributes in `ExtraAttributesException`
  * improved `CsvEncoder` to handle variable nested structures
- * CSV headers can be passed to the `CsvEncoder` via the `csv_headers` serialization context variable 
+ * CSV headers can be passed to the `CsvEncoder` via the `csv_headers` serialization context variable
  * added `$context` when checking for encoding, decoding and normalizing in `Serializer`
 
 3.3.0
@@ -70,7 +70,7 @@ CHANGELOG
 
  * added `$context` support for XMLEncoder.
  * [DEPRECATION] JsonEncode and JsonDecode where modified to throw
-   an exception if error found. No need for get*Error() functions
+   an exception if error found. No need for `get*Error()` functions
 
 2.3.0
 -----
diff --git a/vendor/symfony/serializer/Encoder/ChainDecoder.php b/vendor/symfony/serializer/Encoder/ChainDecoder.php
index 1c76fe4bba0a5d2a39bf3e0f65224ec5a180dd28..c51188140bcfd79fec7579c6a919ec49dfd4de3b 100644
--- a/vendor/symfony/serializer/Encoder/ChainDecoder.php
+++ b/vendor/symfony/serializer/Encoder/ChainDecoder.php
@@ -60,7 +60,6 @@ public function supportsDecoding($format/*, array $context = []*/)
      * Gets the decoder supporting the format.
      *
      * @param string $format
-     * @param array  $context
      *
      * @return DecoderInterface
      *
diff --git a/vendor/symfony/serializer/Encoder/ChainEncoder.php b/vendor/symfony/serializer/Encoder/ChainEncoder.php
index a0a718356c857c18096b11bf7d3c9cb058d10361..8b24e27a78fa23db326c66bfbf58626f791af2f0 100644
--- a/vendor/symfony/serializer/Encoder/ChainEncoder.php
+++ b/vendor/symfony/serializer/Encoder/ChainEncoder.php
@@ -60,7 +60,6 @@ public function supportsEncoding($format/*, array $context = []*/)
      * Checks whether the normalization is needed for the given format.
      *
      * @param string $format
-     * @param array  $context
      *
      * @return bool
      */
@@ -84,7 +83,6 @@ public function needsNormalization($format/*, array $context = []*/)
      * Gets the encoder supporting the format.
      *
      * @param string $format
-     * @param array  $context
      *
      * @return EncoderInterface
      *
diff --git a/vendor/symfony/serializer/Encoder/CsvEncoder.php b/vendor/symfony/serializer/Encoder/CsvEncoder.php
index 2552e300941ce35e98fe1559bb1de823371aa917..239144d80f540b92fbc5ca54ef451f42f090891f 100644
--- a/vendor/symfony/serializer/Encoder/CsvEncoder.php
+++ b/vendor/symfony/serializer/Encoder/CsvEncoder.php
@@ -39,8 +39,12 @@ class CsvEncoder implements EncoderInterface, DecoderInterface
      * @param string $escapeChar
      * @param string $keySeparator
      */
-    public function __construct($delimiter = ',', $enclosure = '"', $escapeChar = '\\', $keySeparator = '.')
+    public function __construct($delimiter = ',', $enclosure = '"', $escapeChar = '', $keySeparator = '.')
     {
+        if ('' === $escapeChar && \PHP_VERSION_ID < 70400) {
+            $escapeChar = '\\';
+        }
+
         $this->delimiter = $delimiter;
         $this->enclosure = $enclosure;
         $this->escapeChar = $escapeChar;
@@ -178,8 +182,6 @@ public function supportsDecoding($format)
     /**
      * Flattens an array and generates keys including the path.
      *
-     * @param array  $array
-     * @param array  $result
      * @param string $keySeparator
      * @param string $parentKey
      */
diff --git a/vendor/symfony/serializer/Encoder/JsonDecode.php b/vendor/symfony/serializer/Encoder/JsonDecode.php
index a55f1232e7e98efb1c2f1270f462311b8ca5e9f7..e4f6795a6a4f22c6db19425be26fdd3a862b411a 100644
--- a/vendor/symfony/serializer/Encoder/JsonDecode.php
+++ b/vendor/symfony/serializer/Encoder/JsonDecode.php
@@ -62,7 +62,7 @@ public function __construct($associative = false, $depth = 512)
      *
      * @throws NotEncodableValueException
      *
-     * @see http://php.net/json_decode json_decode
+     * @see https://php.net/json_decode
      */
     public function decode($data, $format, array $context = [])
     {
diff --git a/vendor/symfony/serializer/Encoder/JsonEncode.php b/vendor/symfony/serializer/Encoder/JsonEncode.php
index 76e532c4b7a3455259a92923e28a43fbb7a4ed7e..71f69503940de14534b76aa39a1cae3cdf64db06 100644
--- a/vendor/symfony/serializer/Encoder/JsonEncode.php
+++ b/vendor/symfony/serializer/Encoder/JsonEncode.php
@@ -35,14 +35,19 @@ public function __construct($bitmask = 0)
     public function encode($data, $format, array $context = [])
     {
         $context = $this->resolveContext($context);
+        $options = $context['json_encode_options'];
 
-        $encodedJson = json_encode($data, $context['json_encode_options']);
+        try {
+            $encodedJson = json_encode($data, $options);
+        } catch (\JsonException $e) {
+            throw new NotEncodableValueException($e->getMessage(), 0, $e);
+        }
 
-        if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $context['json_encode_options'])) {
+        if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $options)) {
             return $encodedJson;
         }
 
-        if (JSON_ERROR_NONE !== json_last_error() && (false === $encodedJson || !($context['json_encode_options'] & JSON_PARTIAL_OUTPUT_ON_ERROR))) {
+        if (JSON_ERROR_NONE !== json_last_error() && (false === $encodedJson || !($options & JSON_PARTIAL_OUTPUT_ON_ERROR))) {
             throw new NotEncodableValueException(json_last_error_msg());
         }
 
diff --git a/vendor/symfony/serializer/Encoder/XmlEncoder.php b/vendor/symfony/serializer/Encoder/XmlEncoder.php
index f0a4afb191b3a0d88b56db47083494b5bb3e5293..c1e11091304791d181aa366e8e9a9d4ba384ace6 100644
--- a/vendor/symfony/serializer/Encoder/XmlEncoder.php
+++ b/vendor/symfony/serializer/Encoder/XmlEncoder.php
@@ -177,8 +177,7 @@ public function getRootNodeName()
     }
 
     /**
-     * @param \DOMNode $node
-     * @param string   $val
+     * @param string $val
      *
      * @return bool
      */
@@ -196,8 +195,7 @@ final protected function appendXMLString(\DOMNode $node, $val)
     }
 
     /**
-     * @param \DOMNode $node
-     * @param string   $val
+     * @param string $val
      *
      * @return bool
      */
@@ -210,8 +208,7 @@ final protected function appendText(\DOMNode $node, $val)
     }
 
     /**
-     * @param \DOMNode $node
-     * @param string   $val
+     * @param string $val
      *
      * @return bool
      */
@@ -224,7 +221,6 @@ final protected function appendCData(\DOMNode $node, $val)
     }
 
     /**
-     * @param \DOMNode             $node
      * @param \DOMDocumentFragment $fragment
      *
      * @return bool
@@ -303,7 +299,7 @@ private function parseXmlAttributes(\DOMNode $node, array $context = [])
         $typeCastAttributes = $this->resolveXmlTypeCastAttributes($context);
 
         foreach ($node->attributes as $attr) {
-            if (!is_numeric($attr->nodeValue) || !$typeCastAttributes) {
+            if (!is_numeric($attr->nodeValue) || !$typeCastAttributes || (isset($attr->nodeValue[1]) && '0' === $attr->nodeValue[0])) {
                 $data['@'.$attr->nodeName] = $attr->nodeValue;
 
                 continue;
@@ -368,7 +364,6 @@ private function parseXmlValue(\DOMNode $node, array $context = [])
     /**
      * Parse the data and convert it to DOMElements.
      *
-     * @param \DOMNode     $parentNode
      * @param array|object $data
      * @param string|null  $xmlRootNodeName
      *
@@ -431,13 +426,12 @@ private function buildXml(\DOMNode $parentNode, $data, $xmlRootNodeName = null)
             return $this->appendNode($parentNode, $data, 'data');
         }
 
-        throw new NotEncodableValueException(sprintf('An unexpected value could not be serialized: %s', var_export($data, true)));
+        throw new NotEncodableValueException(sprintf('An unexpected value could not be serialized: %s', !\is_resource($data) ? var_export($data, true) : sprintf('%s resource', get_resource_type($data))));
     }
 
     /**
      * Selects the type of node to create and appends it to the parent.
      *
-     * @param \DOMNode     $parentNode
      * @param array|object $data
      * @param string       $nodeName
      * @param string       $key
@@ -474,8 +468,7 @@ private function needsCdataWrapping($val)
     /**
      * Tests the value being passed and decide what sort of element to create.
      *
-     * @param \DOMNode $node
-     * @param mixed    $val
+     * @param mixed $val
      *
      * @return bool
      *
@@ -523,8 +516,6 @@ private function resolveXmlRootName(array $context = [])
     /**
      * Get XML option for type casting attributes Defaults to true.
      *
-     * @param array $context
-     *
      * @return bool
      */
     private function resolveXmlTypeCastAttributes(array $context = [])
diff --git a/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php b/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php
index 6bb647ebeea8d44d6f23d138fe144f069f8443ea..5c58476383427dc204a84ce9252e054db658890d 100644
--- a/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php
+++ b/vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php
@@ -25,11 +25,11 @@ trait ClassResolverTrait
     /**
      * Gets a class name for a given class or instance.
      *
-     * @param mixed $value
+     * @param object|string $value
      *
      * @return string
      *
-     * @throws InvalidArgumentException If the class does not exists
+     * @throws InvalidArgumentException If the class does not exist
      */
     private function getClass($value)
     {
diff --git a/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php b/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
index b6aea185e789bd430371c8c9250071516d950d62..bf9afb701e45b0813c1562c6b46ddf57bb63b4e9 100644
--- a/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
@@ -96,8 +96,6 @@ public function setCircularReferenceLimit($circularReferenceLimit)
     /**
      * Set circular reference handler.
      *
-     * @param callable $circularReferenceHandler
-     *
      * @return self
      */
     public function setCircularReferenceHandler(callable $circularReferenceHandler)
@@ -194,7 +192,6 @@ protected function handleCircularReference($object)
      * Gets attributes to normalize using groups.
      *
      * @param string|object $classOrObject
-     * @param array         $context
      * @param bool          $attributesAsString If false, return an array of {@link AttributeMetadataInterface}
      *
      * @throws LogicException if the 'allow_extra_attributes' context variable is false and no class metadata factory is provided
@@ -239,7 +236,6 @@ protected function getAllowedAttributes($classOrObject, array $context, $attribu
      * @param object|string $classOrObject
      * @param string        $attribute
      * @param string|null   $format
-     * @param array         $context
      *
      * @return bool
      */
@@ -278,11 +274,8 @@ protected function prepareForDenormalization($data)
      * Returns the method to use to construct an object. This method must be either
      * the object constructor or static.
      *
-     * @param array            $data
-     * @param string           $class
-     * @param array            $context
-     * @param \ReflectionClass $reflectionClass
-     * @param array|bool       $allowedAttributes
+     * @param string     $class
+     * @param array|bool $allowedAttributes
      *
      * @return \ReflectionMethod|null
      */
@@ -299,12 +292,8 @@ protected function getConstructor(array &$data, $class, array &$context, \Reflec
      * is removed from the context before being returned to avoid side effects
      * when recursively normalizing an object graph.
      *
-     * @param array            $data
-     * @param string           $class
-     * @param array            $context
-     * @param \ReflectionClass $reflectionClass
-     * @param array|bool       $allowedAttributes
-     * @param string|null      $format
+     * @param string     $class
+     * @param array|bool $allowedAttributes
      *
      * @return object
      *
@@ -413,9 +402,7 @@ protected function denormalizeParameter(\ReflectionClass $class, \ReflectionPara
     }
 
     /**
-     * @param array       $parentContext
-     * @param string      $attribute     Attribute name
-     * @param string|null $format
+     * @param string $attribute Attribute name
      *
      * @return array
      *
diff --git a/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php b/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php
index 7201e5c095751e0e6b8a7e5b07b87cee160a7fd6..6cb6ec50133ac790a077cf29bfb875b33a673760 100644
--- a/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php
@@ -105,7 +105,6 @@ public function normalize($object, $format = null, array $context = [])
      *
      * @param object      $object
      * @param string|null $format
-     * @param array       $context
      *
      * @return string[]
      */
@@ -142,7 +141,6 @@ protected function getAttributes($object, $format = null, array $context)
      *
      * @param object      $object
      * @param string|null $format
-     * @param array       $context
      *
      * @return string[]
      */
@@ -154,7 +152,6 @@ abstract protected function extractAttributes($object, $format = null, array $co
      * @param object      $object
      * @param string      $attribute
      * @param string|null $format
-     * @param array       $context
      *
      * @return mixed
      */
@@ -171,25 +168,25 @@ public function supportsDenormalization($data, $type, $format = null)
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         if (!isset($context['cache_key'])) {
             $context['cache_key'] = $this->getCacheKey($format, $context);
         }
 
-        $allowedAttributes = $this->getAllowedAttributes($class, $context, true);
+        $allowedAttributes = $this->getAllowedAttributes($type, $context, true);
         $normalizedData = $this->prepareForDenormalization($data);
         $extraAttributes = [];
 
-        $reflectionClass = new \ReflectionClass($class);
-        $object = $this->instantiateObject($normalizedData, $class, $context, $reflectionClass, $allowedAttributes, $format);
+        $reflectionClass = new \ReflectionClass($type);
+        $object = $this->instantiateObject($normalizedData, $type, $context, $reflectionClass, $allowedAttributes, $format);
 
         foreach ($normalizedData as $attribute => $value) {
             if ($this->nameConverter) {
                 $attribute = $this->nameConverter->denormalize($attribute);
             }
 
-            if ((false !== $allowedAttributes && !\in_array($attribute, $allowedAttributes)) || !$this->isAllowedAttribute($class, $attribute, $format, $context)) {
+            if ((false !== $allowedAttributes && !\in_array($attribute, $allowedAttributes)) || !$this->isAllowedAttribute($type, $attribute, $format, $context)) {
                 if (isset($context[self::ALLOW_EXTRA_ATTRIBUTES]) && !$context[self::ALLOW_EXTRA_ATTRIBUTES]) {
                     $extraAttributes[] = $attribute;
                 }
@@ -197,7 +194,7 @@ public function denormalize($data, $class, $format = null, array $context = [])
                 continue;
             }
 
-            $value = $this->validateAndDenormalize($class, $attribute, $value, $format, $context);
+            $value = $this->validateAndDenormalize($type, $attribute, $value, $format, $context);
             try {
                 $this->setAttributeValue($object, $attribute, $value, $format, $context);
             } catch (InvalidArgumentException $e) {
@@ -219,7 +216,6 @@ public function denormalize($data, $class, $format = null, array $context = [])
      * @param string      $attribute
      * @param mixed       $value
      * @param string|null $format
-     * @param array       $context
      */
     abstract protected function setAttributeValue($object, $attribute, $value, $format = null, array $context = []);
 
@@ -230,7 +226,6 @@ abstract protected function setAttributeValue($object, $attribute, $value, $form
      * @param string      $attribute
      * @param mixed       $data
      * @param string|null $format
-     * @param array       $context
      *
      * @return mixed
      *
@@ -246,19 +241,21 @@ private function validateAndDenormalize($currentClass, $attribute, $data, $forma
         $expectedTypes = [];
         foreach ($types as $type) {
             if (null === $data && $type->isNullable()) {
-                return;
+                return null;
             }
 
-            if ($type->isCollection() && null !== ($collectionValueType = $type->getCollectionValueType()) && Type::BUILTIN_TYPE_OBJECT === $collectionValueType->getBuiltinType()) {
+            $collectionValueType = $type->isCollection() ? $type->getCollectionValueType() : null;
+
+            // Fix a collection that contains the only one element
+            // This is special to xml format only
+            if ('xml' === $format && null !== $collectionValueType && (!\is_array($data) || !\is_int(key($data)))) {
+                $data = [$data];
+            }
+
+            if (null !== $collectionValueType && Type::BUILTIN_TYPE_OBJECT === $collectionValueType->getBuiltinType()) {
                 $builtinType = Type::BUILTIN_TYPE_OBJECT;
                 $class = $collectionValueType->getClassName().'[]';
 
-                // Fix a collection that contains the only one element
-                // This is special to xml format only
-                if ('xml' === $format && !\is_int(key($data))) {
-                    $data = [$data];
-                }
-
                 if (null !== $collectionKeyType = $type->getCollectionKeyType()) {
                     $context['key_type'] = $collectionKeyType;
                 }
@@ -339,7 +336,6 @@ private function updateData(array $data, $attribute, $attributeValue)
      * @param AttributeMetadataInterface[] $attributesMetadata
      * @param string                       $class
      * @param string                       $attribute
-     * @param array                        $context
      *
      * @return bool
      */
@@ -399,7 +395,6 @@ protected function createChildContext(array $parentContext, $attribute/*, string
      * The key must be different for every option in the context that could change which attributes should be handled.
      *
      * @param string|null $format
-     * @param array       $context
      *
      * @return bool|string
      */
diff --git a/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php b/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php
index af80d00ba0f804a8983406a368d24e3149ea9f5e..93d6fc009b3356e5a15d0066fee138dfcc83e254 100644
--- a/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php
@@ -36,7 +36,7 @@ class ArrayDenormalizer implements DenormalizerInterface, SerializerAwareInterfa
      *
      * @throws NotNormalizableValueException
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         if (null === $this->serializer) {
             throw new BadMethodCallException('Please set a serializer before calling denormalize()!');
@@ -44,12 +44,12 @@ public function denormalize($data, $class, $format = null, array $context = [])
         if (!\is_array($data)) {
             throw new InvalidArgumentException('Data expected to be an array, '.\gettype($data).' given.');
         }
-        if ('[]' !== substr($class, -2)) {
-            throw new InvalidArgumentException('Unsupported class: '.$class);
+        if ('[]' !== substr($type, -2)) {
+            throw new InvalidArgumentException('Unsupported class: '.$type);
         }
 
         $serializer = $this->serializer;
-        $class = substr($class, 0, -2);
+        $type = substr($type, 0, -2);
 
         $builtinType = isset($context['key_type']) ? $context['key_type']->getBuiltinType() : null;
         foreach ($data as $key => $value) {
@@ -57,7 +57,7 @@ public function denormalize($data, $class, $format = null, array $context = [])
                 throw new NotNormalizableValueException(sprintf('The type of the key "%s" must be "%s" ("%s" given).', $key, $builtinType, \gettype($key)));
             }
 
-            $data[$key] = $serializer->denormalize($value, $class, $format, $context);
+            $data[$key] = $serializer->denormalize($value, $type, $format, $context);
         }
 
         return $data;
diff --git a/vendor/symfony/serializer/Normalizer/CustomNormalizer.php b/vendor/symfony/serializer/Normalizer/CustomNormalizer.php
index 969dcf5fc923904530a4881e83efc1751952d5ad..a8621cae8281d577584f0727073fc25bc3e57169 100644
--- a/vendor/symfony/serializer/Normalizer/CustomNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/CustomNormalizer.php
@@ -35,9 +35,9 @@ public function normalize($object, $format = null, array $context = [])
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
-        $object = $this->extractObjectToPopulate($class, $context) ?: new $class();
+        $object = $this->extractObjectToPopulate($type, $context) ?: new $type();
         $object->denormalize($this->serializer, $data, $format, $context);
 
         return $object;
diff --git a/vendor/symfony/serializer/Normalizer/DataUriNormalizer.php b/vendor/symfony/serializer/Normalizer/DataUriNormalizer.php
index 185b44be4eeaa2d7dbe55243abfd695fb1138dba..99ca3487abb1cbbf115119e5cb5106d241a2f9de 100644
--- a/vendor/symfony/serializer/Normalizer/DataUriNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/DataUriNormalizer.php
@@ -89,14 +89,14 @@ public function supportsNormalization($data, $format = null)
      * @throws InvalidArgumentException
      * @throws NotNormalizableValueException
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         if (!preg_match('/^data:([a-z0-9][a-z0-9\!\#\$\&\-\^\_\+\.]{0,126}\/[a-z0-9][a-z0-9\!\#\$\&\-\^\_\+\.]{0,126}(;[a-z0-9\-]+\=[a-z0-9\-]+)?)?(;base64)?,[a-z0-9\!\$\&\\\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i', $data)) {
             throw new NotNormalizableValueException('The provided "data:" URI is not valid.');
         }
 
         try {
-            switch ($class) {
+            switch ($type) {
                 case 'Symfony\Component\HttpFoundation\File\File':
                     return new File($data, false);
 
@@ -108,7 +108,7 @@ public function denormalize($data, $class, $format = null, array $context = [])
             throw new NotNormalizableValueException($exception->getMessage(), $exception->getCode(), $exception);
         }
 
-        throw new InvalidArgumentException(sprintf('The class parameter "%s" is not supported. It must be one of "SplFileInfo", "SplFileObject" or "Symfony\Component\HttpFoundation\File\File".', $class));
+        throw new InvalidArgumentException(sprintf('The class parameter "%s" is not supported. It must be one of "SplFileInfo", "SplFileObject" or "Symfony\Component\HttpFoundation\File\File".', $type));
     }
 
     /**
@@ -122,8 +122,6 @@ public function supportsDenormalization($data, $type, $format = null)
     /**
      * Gets the mime type of the object. Defaults to application/octet-stream.
      *
-     * @param \SplFileInfo $object
-     *
      * @return string
      */
     private function getMimeType(\SplFileInfo $object)
@@ -142,8 +140,6 @@ private function getMimeType(\SplFileInfo $object)
     /**
      * Returns the \SplFileObject instance associated with the given \SplFileInfo instance.
      *
-     * @param \SplFileInfo $object
-     *
      * @return \SplFileObject
      */
     private function extractSplFileObject(\SplFileInfo $object)
diff --git a/vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php b/vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php
index 56527a8eb4ecfc02b84e04e6e852858c9fa9491c..83d9312b013778e44d37fe56ea241450ff10d2c8 100644
--- a/vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php
@@ -29,7 +29,7 @@ class DateIntervalNormalizer implements NormalizerInterface, DenormalizerInterfa
     /**
      * @param string $format
      */
-    public function __construct($format = 'P%yY%mM%dDT%hH%iM%sS')
+    public function __construct($format = '%rP%yY%mM%dDT%hH%iM%sS')
     {
         $this->format = $format;
     }
@@ -64,7 +64,7 @@ public function supportsNormalization($data, $format = null)
      * @throws InvalidArgumentException
      * @throws UnexpectedValueException
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         if (!\is_string($data)) {
             throw new InvalidArgumentException(sprintf('Data expected to be a string, %s given.', \gettype($data)));
@@ -76,12 +76,34 @@ public function denormalize($data, $class, $format = null, array $context = [])
 
         $dateIntervalFormat = isset($context[self::FORMAT_KEY]) ? $context[self::FORMAT_KEY] : $this->format;
 
-        $valuePattern = '/^'.preg_replace('/%([yYmMdDhHiIsSwW])(\w)/', '(?P<$1>\d+)$2', $dateIntervalFormat).'$/';
+        $signPattern = '';
+        switch (substr($dateIntervalFormat, 0, 2)) {
+            case '%R':
+                $signPattern = '[-+]';
+                $dateIntervalFormat = substr($dateIntervalFormat, 2);
+                break;
+            case '%r':
+                $signPattern = '-?';
+                $dateIntervalFormat = substr($dateIntervalFormat, 2);
+                break;
+        }
+        $valuePattern = '/^'.$signPattern.preg_replace('/%([yYmMdDhHiIsSwW])(\w)/', '(?P<$1>\d+)$2', $dateIntervalFormat).'$/';
         if (!preg_match($valuePattern, $data)) {
             throw new UnexpectedValueException(sprintf('Value "%s" contains intervals not accepted by format "%s".', $data, $dateIntervalFormat));
         }
 
         try {
+            if ('-' === $data[0]) {
+                $interval = new \DateInterval(substr($data, 1));
+                $interval->invert = 1;
+
+                return $interval;
+            }
+
+            if ('+' === $data[0]) {
+                return new \DateInterval(substr($data, 1));
+            }
+
             return new \DateInterval($data);
         } catch (\Exception $e) {
             throw new UnexpectedValueException($e->getMessage(), $e->getCode(), $e);
@@ -98,6 +120,6 @@ public function supportsDenormalization($data, $type, $format = null)
 
     private function isISO8601($string)
     {
-        return preg_match('/^P(?=\w*(?:\d|%\w))(?:\d+Y|%[yY]Y)?(?:\d+M|%[mM]M)?(?:(?:\d+D|%[dD]D)|(?:\d+W|%[wW]W))?(?:T(?:\d+H|[hH]H)?(?:\d+M|[iI]M)?(?:\d+S|[sS]S)?)?$/', $string);
+        return preg_match('/^[\-+]?P(?=\w*(?:\d|%\w))(?:\d+Y|%[yY]Y)?(?:\d+M|%[mM]M)?(?:(?:\d+D|%[dD]D)|(?:\d+W|%[wW]W))?(?:T(?:\d+H|[hH]H)?(?:\d+M|[iI]M)?(?:\d+S|[sS]S)?)?$/', $string);
     }
 }
diff --git a/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php b/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php
index a36549c3b225ce16b78e48ee3a21f9953c3a7adf..39c31f00f1590fd7f0085130f96976b744c5982d 100644
--- a/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php
@@ -35,8 +35,7 @@ class DateTimeNormalizer implements NormalizerInterface, DenormalizerInterface
     ];
 
     /**
-     * @param string             $format
-     * @param \DateTimeZone|null $timezone
+     * @param string $format
      */
     public function __construct($format = \DateTime::RFC3339, \DateTimeZone $timezone = null)
     {
@@ -79,7 +78,7 @@ public function supportsNormalization($data, $format = null)
      *
      * @throws NotNormalizableValueException
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         $dateTimeFormat = isset($context[self::FORMAT_KEY]) ? $context[self::FORMAT_KEY] : null;
         $timezone = $this->getTimezone($context);
@@ -90,17 +89,17 @@ public function denormalize($data, $class, $format = null, array $context = [])
 
         if (null !== $dateTimeFormat) {
             if (null === $timezone && \PHP_VERSION_ID < 70000) {
-                // https://bugs.php.net/bug.php?id=68669
-                $object = \DateTime::class === $class ? \DateTime::createFromFormat($dateTimeFormat, $data) : \DateTimeImmutable::createFromFormat($dateTimeFormat, $data);
+                // https://bugs.php.net/68669
+                $object = \DateTime::class === $type ? \DateTime::createFromFormat($dateTimeFormat, $data) : \DateTimeImmutable::createFromFormat($dateTimeFormat, $data);
             } else {
-                $object = \DateTime::class === $class ? \DateTime::createFromFormat($dateTimeFormat, $data, $timezone) : \DateTimeImmutable::createFromFormat($dateTimeFormat, $data, $timezone);
+                $object = \DateTime::class === $type ? \DateTime::createFromFormat($dateTimeFormat, $data, $timezone) : \DateTimeImmutable::createFromFormat($dateTimeFormat, $data, $timezone);
             }
 
             if (false !== $object) {
                 return $object;
             }
 
-            $dateTimeErrors = \DateTime::class === $class ? \DateTime::getLastErrors() : \DateTimeImmutable::getLastErrors();
+            $dateTimeErrors = \DateTime::class === $type ? \DateTime::getLastErrors() : \DateTimeImmutable::getLastErrors();
 
             throw new NotNormalizableValueException(sprintf(
                 'Parsing datetime string "%s" using format "%s" resulted in %d errors:'."\n".'%s',
@@ -112,7 +111,7 @@ public function denormalize($data, $class, $format = null, array $context = [])
         }
 
         try {
-            return \DateTime::class === $class ? new \DateTime($data, $timezone) : new \DateTimeImmutable($data, $timezone);
+            return \DateTime::class === $type ? new \DateTime($data, $timezone) : new \DateTimeImmutable($data, $timezone);
         } catch (\Exception $e) {
             throw new NotNormalizableValueException($e->getMessage(), $e->getCode(), $e);
         }
diff --git a/vendor/symfony/serializer/Normalizer/DenormalizableInterface.php b/vendor/symfony/serializer/Normalizer/DenormalizableInterface.php
index 31e27a85cb024ebdbb4c049c4f8389aa53f46e1d..3e7021b13087697e7a45c03e46a0e858b0764fca 100644
--- a/vendor/symfony/serializer/Normalizer/DenormalizableInterface.php
+++ b/vendor/symfony/serializer/Normalizer/DenormalizableInterface.php
@@ -34,7 +34,7 @@ interface DenormalizableInterface
      *                                                  differently based on different input formats
      * @param array                       $context      Options for denormalizing
      *
-     * @return object
+     * @return object|object[]
      */
     public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = []);
 }
diff --git a/vendor/symfony/serializer/Normalizer/DenormalizerAwareInterface.php b/vendor/symfony/serializer/Normalizer/DenormalizerAwareInterface.php
index 4a6a4e26e92da01e387e9a7661d4277094be71d4..87bfb842290e6e107ab9247aab969a62ea97f1f1 100644
--- a/vendor/symfony/serializer/Normalizer/DenormalizerAwareInterface.php
+++ b/vendor/symfony/serializer/Normalizer/DenormalizerAwareInterface.php
@@ -20,8 +20,6 @@ interface DenormalizerAwareInterface
 {
     /**
      * Sets the owning Denormalizer object.
-     *
-     * @param DenormalizerInterface $denormalizer
      */
     public function setDenormalizer(DenormalizerInterface $denormalizer);
 }
diff --git a/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php b/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php
index 7a12d20f1132eb6917483bc7abbe1dcb764e3532..8e48788828cd959f71488504e4ad1a00e67e8ecf 100644
--- a/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php
+++ b/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php
@@ -30,11 +30,11 @@ interface DenormalizerInterface
      * Denormalizes data back into an object of the given class.
      *
      * @param mixed  $data    Data to restore
-     * @param string $class   The expected class to instantiate
+     * @param string $type    The expected class to instantiate
      * @param string $format  Format the given data was extracted from
      * @param array  $context Options available to the denormalizer
      *
-     * @return object
+     * @return object|array
      *
      * @throws BadMethodCallException   Occurs when the normalizer is not called in an expected context
      * @throws InvalidArgumentException Occurs when the arguments are not coherent or not supported
@@ -44,7 +44,7 @@ interface DenormalizerInterface
      * @throws RuntimeException         Occurs if the class cannot be instantiated
      * @throws ExceptionInterface       Occurs for all the other cases of errors
      */
-    public function denormalize($data, $class, $format = null, array $context = []);
+    public function denormalize($data, $type, $format = null, array $context = []);
 
     /**
      * Checks whether the given class is supported for denormalization by this normalizer.
diff --git a/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php b/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
index 7742da7bc08284835df97dff1f36a18f7d425cc0..07c5a318afd99874a30d99673adcce6204461452 100644
--- a/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
@@ -138,6 +138,8 @@ protected function getAttributeValue($object, $attribute, $format = null, array
         if (\is_callable([$object, $haser])) {
             return $object->$haser();
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/serializer/Normalizer/JsonSerializableNormalizer.php b/vendor/symfony/serializer/Normalizer/JsonSerializableNormalizer.php
index b4e53e51358aa111052b783f47a17ba52efbfdac..f4080e524c0d8e90a93f19ad0c04af7f35d96fe2 100644
--- a/vendor/symfony/serializer/Normalizer/JsonSerializableNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/JsonSerializableNormalizer.php
@@ -60,7 +60,7 @@ public function supportsDenormalization($data, $type, $format = null)
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         throw new LogicException(sprintf('Cannot denormalize with "%s".', \JsonSerializable::class));
     }
diff --git a/vendor/symfony/serializer/Normalizer/NormalizerAwareInterface.php b/vendor/symfony/serializer/Normalizer/NormalizerAwareInterface.php
index 55015fe6658b349fd48e9b39ca5921901d9bd03c..be380912b1ca4d02930f1a1670df3b26c1906e9e 100644
--- a/vendor/symfony/serializer/Normalizer/NormalizerAwareInterface.php
+++ b/vendor/symfony/serializer/Normalizer/NormalizerAwareInterface.php
@@ -20,8 +20,6 @@ interface NormalizerAwareInterface
 {
     /**
      * Sets the owning Normalizer object.
-     *
-     * @param NormalizerInterface $normalizer
      */
     public function setNormalizer(NormalizerInterface $normalizer);
 }
diff --git a/vendor/symfony/serializer/Normalizer/NormalizerInterface.php b/vendor/symfony/serializer/Normalizer/NormalizerInterface.php
index 02a211858492324796f5f94d4201dc05e7a3a0ae..4e0fbfb7a6b1423b34c83e46eba333c7203ace77 100644
--- a/vendor/symfony/serializer/Normalizer/NormalizerInterface.php
+++ b/vendor/symfony/serializer/Normalizer/NormalizerInterface.php
@@ -30,9 +30,9 @@ interface NormalizerInterface
      * @param string $format  Format the normalization result will be encoded as
      * @param array  $context Context options for the normalizer
      *
-     * @return array|string|int|float|bool
+     * @return array|string|int|float|bool|null
      *
-     * @throws InvalidArgumentException   Occurs when the object given is not an attempted type for the normalizer
+     * @throws InvalidArgumentException   Occurs when the object given is not a supported type for the normalizer
      * @throws CircularReferenceException Occurs when the normalizer detects a circular reference when no circular
      *                                    reference handler can fix it
      * @throws LogicException             Occurs when the normalizer is not called in an expected context
diff --git a/vendor/symfony/serializer/Normalizer/ObjectToPopulateTrait.php b/vendor/symfony/serializer/Normalizer/ObjectToPopulateTrait.php
index 7150a6e6ee383426e6542460cb38d9dfa592d63b..3560acbfce08d14bf04333157d36fdb427677b8b 100644
--- a/vendor/symfony/serializer/Normalizer/ObjectToPopulateTrait.php
+++ b/vendor/symfony/serializer/Normalizer/ObjectToPopulateTrait.php
@@ -17,10 +17,9 @@ trait ObjectToPopulateTrait
      * Extract the `object_to_populate` field from the context if it exists
      * and is an instance of the provided $class.
      *
-     * @param string $class The class the object should be
-     * @param $context The denormalization context
-     * @param string $key They in which to look for the object to populate.
-     *                    Keeps backwards compatibility with `AbstractNormalizer`.
+     * @param string      $class The class the object should be
+     * @param string|null $key   They in which to look for the object to populate.
+     *                           Keeps backwards compatibility with `AbstractNormalizer`.
      *
      * @return object|null an object if things check out, null otherwise
      */
diff --git a/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php b/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php
index 84047e82c6483438ac3f934ede4df7471f5cffde..46faa1e7e9dfdfdfa30fd72ec7603f45a61a4ddf 100644
--- a/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php
+++ b/vendor/symfony/serializer/Normalizer/PropertyNormalizer.php
@@ -121,7 +121,7 @@ protected function getAttributeValue($object, $attribute, $format = null, array
         try {
             $reflectionProperty = $this->getReflectionProperty($object, $attribute);
         } catch (\ReflectionException $reflectionException) {
-            return;
+            return null;
         }
 
         // Override visibility
diff --git a/vendor/symfony/serializer/Serializer.php b/vendor/symfony/serializer/Serializer.php
index f63cf67bdf7edd3cd2b72b83a947719b66d77b79..a29a1482ddef85ed2b6d6355d0bde68249ef66f2 100644
--- a/vendor/symfony/serializer/Serializer.php
+++ b/vendor/symfony/serializer/Serializer.php
@@ -164,7 +164,7 @@ public function normalize($data, $format = null, array $context = [])
             throw new NotNormalizableValueException(sprintf('Could not normalize object of type %s, no supporting normalizer found.', \get_class($data)));
         }
 
-        throw new NotNormalizableValueException(sprintf('An unexpected value could not be normalized: %s', var_export($data, true)));
+        throw new NotNormalizableValueException(sprintf('An unexpected value could not be normalized: %s', !\is_resource($data) ? var_export($data, true) : sprintf('%s resource', get_resource_type($data))));
     }
 
     /**
@@ -243,6 +243,8 @@ private function getNormalizer($data, $format, array $context)
                 return $normalizer;
             }
         }
+
+        return null;
     }
 
     /**
@@ -262,6 +264,8 @@ private function getDenormalizer($data, $class, $format, array $context)
                 return $normalizer;
             }
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/serializer/SerializerInterface.php b/vendor/symfony/serializer/SerializerInterface.php
index 7a03ef943a20ce13fd9ea14762aba71c9cefe82f..aa00f2222b847c173997b3c3b77553e7ee49f671 100644
--- a/vendor/symfony/serializer/SerializerInterface.php
+++ b/vendor/symfony/serializer/SerializerInterface.php
@@ -35,9 +35,8 @@ public function serialize($data, $format, array $context = []);
      * @param mixed  $data
      * @param string $type
      * @param string $format
-     * @param array  $context
      *
-     * @return object
+     * @return object|array
      */
     public function deserialize($data, $type, $format, array $context = []);
 }
diff --git a/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php b/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
index 9b54221d7630ded8e692d0ee27c6c410ca3f8851..3fad6d82f83c97c33ddd457356821a04e2ef400e 100644
--- a/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
+++ b/vendor/symfony/serializer/Tests/Annotation/GroupsTest.php
@@ -19,27 +19,21 @@
  */
 class GroupsTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     */
     public function testEmptyGroupsParameter()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
         new Groups(['value' => []]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     */
     public function testNotAnArrayGroupsParameter()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
         new Groups(['value' => 12]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     */
     public function testInvalidGroupsParameter()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
         new Groups(['value' => ['a', 1, new \stdClass()]]);
     }
 
diff --git a/vendor/symfony/serializer/Tests/Annotation/MaxDepthTest.php b/vendor/symfony/serializer/Tests/Annotation/MaxDepthTest.php
index 16f10e143459b29f2885149bbb7880ed18e7061f..2c421576d14b3dde5766177cc2554f6aba621f3f 100644
--- a/vendor/symfony/serializer/Tests/Annotation/MaxDepthTest.php
+++ b/vendor/symfony/serializer/Tests/Annotation/MaxDepthTest.php
@@ -19,12 +19,10 @@
  */
 class MaxDepthTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Parameter of annotation "Symfony\Component\Serializer\Annotation\MaxDepth" should be set.
-     */
     public function testNotSetMaxDepthParameter()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Parameter of annotation "Symfony\Component\Serializer\Annotation\MaxDepth" should be set.');
         new MaxDepth([]);
     }
 
@@ -40,12 +38,11 @@ public function provideInvalidValues()
 
     /**
      * @dataProvider provideInvalidValues
-     *
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Parameter of annotation "Symfony\Component\Serializer\Annotation\MaxDepth" must be a positive integer.
      */
     public function testNotAnIntMaxDepthParameter($value)
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('Parameter of annotation "Symfony\Component\Serializer\Annotation\MaxDepth" must be a positive integer.');
         new MaxDepth(['value' => $value]);
     }
 
diff --git a/vendor/symfony/serializer/Tests/DependencyInjection/SerializerPassTest.php b/vendor/symfony/serializer/Tests/DependencyInjection/SerializerPassTest.php
index 5c3fedfe895a7c8dabe35a6fa862c44cab14e195..65d7a65f5acdb7ef84473c4420fc0722a4aabbe9 100644
--- a/vendor/symfony/serializer/Tests/DependencyInjection/SerializerPassTest.php
+++ b/vendor/symfony/serializer/Tests/DependencyInjection/SerializerPassTest.php
@@ -23,12 +23,10 @@
  */
 class SerializerPassTest extends TestCase
 {
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage You must tag at least one service as "serializer.normalizer" to use the "serializer" service
-     */
     public function testThrowExceptionWhenNoNormalizers()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('You must tag at least one service as "serializer.normalizer" to use the "serializer" service');
         $container = new ContainerBuilder();
         $container->register('serializer');
 
@@ -36,12 +34,10 @@ public function testThrowExceptionWhenNoNormalizers()
         $serializerPass->process($container);
     }
 
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage You must tag at least one service as "serializer.encoder" to use the "serializer" service
-     */
     public function testThrowExceptionWhenNoEncoders()
     {
+        $this->expectException('RuntimeException');
+        $this->expectExceptionMessage('You must tag at least one service as "serializer.encoder" to use the "serializer" service');
         $container = new ContainerBuilder();
         $container->register('serializer')
             ->addArgument([])
diff --git a/vendor/symfony/serializer/Tests/Encoder/ChainDecoderTest.php b/vendor/symfony/serializer/Tests/Encoder/ChainDecoderTest.php
index 22b86758a590a0d85edf1c1030623df87ce27ad5..5bdbd282ef3a2b1de8bbed4613885192f5386d55 100644
--- a/vendor/symfony/serializer/Tests/Encoder/ChainDecoderTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/ChainDecoderTest.php
@@ -70,11 +70,9 @@ public function testDecode()
         $this->chainDecoder->decode('string_to_decode', self::FORMAT_2);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\RuntimeException
-     */
     public function testDecodeUnsupportedFormat()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\RuntimeException');
         $this->chainDecoder->decode('string_to_decode', self::FORMAT_3);
     }
 }
diff --git a/vendor/symfony/serializer/Tests/Encoder/ChainEncoderTest.php b/vendor/symfony/serializer/Tests/Encoder/ChainEncoderTest.php
index d9b6251ed93c38dfca50888fb21c09c9cebd08a4..14a3c687fccfd5524774def8313fc87ccc03622d 100644
--- a/vendor/symfony/serializer/Tests/Encoder/ChainEncoderTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/ChainEncoderTest.php
@@ -72,11 +72,9 @@ public function testEncode()
         $this->chainEncoder->encode(['foo' => 123], self::FORMAT_2);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\RuntimeException
-     */
     public function testEncodeUnsupportedFormat()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\RuntimeException');
         $this->chainEncoder->encode(['foo' => 123], self::FORMAT_3);
     }
 
@@ -86,23 +84,6 @@ public function testNeedsNormalizationBasic()
         $this->assertTrue($this->chainEncoder->needsNormalization(self::FORMAT_2));
     }
 
-    /**
-     * @dataProvider booleanProvider
-     */
-    public function testNeedsNormalizationChainNormalizationAware($bool)
-    {
-        $chainEncoder = $this
-            ->getMockBuilder('Symfony\Component\Serializer\Tests\Encoder\ChainNormalizationAwareEncoder')
-            ->getMock();
-
-        $chainEncoder->method('supportsEncoding')->willReturn(true);
-        $chainEncoder->method('needsNormalization')->willReturn($bool);
-
-        $sut = new ChainEncoder([$chainEncoder]);
-
-        $this->assertEquals($bool, $sut->needsNormalization(self::FORMAT_1));
-    }
-
     public function testNeedsNormalizationNormalizationAware()
     {
         $encoder = new NormalizationAwareEncoder();
@@ -110,18 +91,6 @@ public function testNeedsNormalizationNormalizationAware()
 
         $this->assertFalse($sut->needsNormalization(self::FORMAT_1));
     }
-
-    public function booleanProvider()
-    {
-        return [
-            [true],
-            [false],
-        ];
-    }
-}
-
-class ChainNormalizationAwareEncoder extends ChainEncoder implements NormalizationAwareInterface
-{
 }
 
 class NormalizationAwareEncoder implements EncoderInterface, NormalizationAwareInterface
diff --git a/vendor/symfony/serializer/Tests/Encoder/CsvEncoderTest.php b/vendor/symfony/serializer/Tests/Encoder/CsvEncoderTest.php
index 7b5131cb533a6fc7b88ef3026caac97b51684553..4faf42d2ec1fa7d83e00cc22ce817be3e47dc9c6 100644
--- a/vendor/symfony/serializer/Tests/Encoder/CsvEncoderTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/CsvEncoderTest.php
@@ -36,15 +36,51 @@ public function testTrueFalseValues()
             'int' => 2,
             'false' => false,
             'true' => true,
+            'int_one' => 1,
+            'string_one' => '1',
         ];
 
         // Check that true and false are appropriately handled
-        $this->assertEquals(<<<'CSV'
-string,int,false,true
-foo,2,0,1
+        $this->assertSame($csv = <<<'CSV'
+string,int,false,true,int_one,string_one
+foo,2,0,1,1,1
+
+CSV
+        , $this->encoder->encode($data, 'csv'));
+
+        $this->assertSame([
+            'string' => 'foo',
+            'int' => '2',
+            'false' => '0',
+            'true' => '1',
+            'int_one' => '1',
+            'string_one' => '1',
+        ], $this->encoder->decode($csv, 'csv'));
+    }
+
+    /**
+     * @requires PHP 7.4
+     */
+    public function testDoubleQuotesAndSlashes()
+    {
+        $this->assertSame($csv = <<<'CSV'
+0,1,2,3,4,5
+,"""","foo""","\""",\,foo\
 
 CSV
-    , $this->encoder->encode($data, 'csv'));
+        , $this->encoder->encode($data = ['', '"', 'foo"', '\\"', '\\', 'foo\\'], 'csv'));
+
+        $this->assertSame($data, $this->encoder->decode($csv, 'csv'));
+    }
+
+    /**
+     * @requires PHP 7.4
+     */
+    public function testSingleSlash()
+    {
+        $this->assertSame($csv = "0\n\\\n", $this->encoder->encode($data = ['\\'], 'csv'));
+        $this->assertSame($data, $this->encoder->decode($csv, 'csv'));
+        $this->assertSame($data, $this->encoder->decode(trim($csv), 'csv'));
     }
 
     public function testSupportEncoding()
diff --git a/vendor/symfony/serializer/Tests/Encoder/JsonDecodeTest.php b/vendor/symfony/serializer/Tests/Encoder/JsonDecodeTest.php
index 76a1b6324631cca5dfdf45269bbb267fdff7ec9c..649fb2ec0db2d74f824aeb9e8bedf57ae3247c1a 100644
--- a/vendor/symfony/serializer/Tests/Encoder/JsonDecodeTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/JsonDecodeTest.php
@@ -58,10 +58,10 @@ public function decodeProvider()
     /**
      * @requires function json_last_error_msg
      * @dataProvider decodeProviderException
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
      */
     public function testDecodeWithException($value)
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->decode->decode($value, JsonEncoder::FORMAT);
     }
 
diff --git a/vendor/symfony/serializer/Tests/Encoder/JsonEncodeTest.php b/vendor/symfony/serializer/Tests/Encoder/JsonEncodeTest.php
index 42a460e520400cd6515e35f04dac3cadd0551219..1a3d7c8675598b6b67ee89ff907dfd572e04f0cb 100644
--- a/vendor/symfony/serializer/Tests/Encoder/JsonEncodeTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/JsonEncodeTest.php
@@ -51,10 +51,10 @@ public function encodeProvider()
 
     /**
      * @requires function json_last_error_msg
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
      */
     public function testEncodeWithError()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->encode->encode("\xB1\x31", JsonEncoder::FORMAT);
     }
 }
diff --git a/vendor/symfony/serializer/Tests/Encoder/JsonEncoderTest.php b/vendor/symfony/serializer/Tests/Encoder/JsonEncoderTest.php
index 439fbda1638a3e9d4708d28fadbd92c4f897a3fe..191e8dc35d3ef8cb9126bd3fce0c5ec530382628 100644
--- a/vendor/symfony/serializer/Tests/Encoder/JsonEncoderTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/JsonEncoderTest.php
@@ -65,11 +65,9 @@ public function testOptions()
         $this->assertEquals($expected, $this->serializer->serialize($arr, 'json'), 'Context should not be persistent');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testEncodeNotUtf8WithoutPartialOnError()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $arr = [
             'utf8' => 'Hello World!',
             'notUtf8' => "\xb0\xd0\xb5\xd0",
diff --git a/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php b/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php
index 7a6a7d3fbca19c27983cfbe59447f4ad11db26ea..f1a8b6ab480e02aa2db263a127d84eda28d1a258 100644
--- a/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php
+++ b/vendor/symfony/serializer/Tests/Encoder/XmlEncoderTest.php
@@ -11,8 +11,10 @@
 
 namespace Symfony\Component\Serializer\Tests\Encoder;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Serializer\Encoder\XmlEncoder;
+use Symfony\Component\Serializer\Exception\NotEncodableValueException;
 use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
 use Symfony\Component\Serializer\Serializer;
@@ -59,12 +61,10 @@ public function testSetRootNodeName()
         $this->assertEquals($expected, $this->encoder->encode($obj, 'xml'));
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage Document types are not allowed.
-     */
     public function testDocTypeIsNotAllowed()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('Document types are not allowed.');
         $this->encoder->decode('<?xml version="1.0"?><!DOCTYPE foo><foo></foo>', 'foo');
     }
 
@@ -306,6 +306,17 @@ public function testNoTypeCastAttribute()
         $this->assertSame($expected, $data);
     }
 
+    public function testDoesNotTypeCastStringsStartingWith0()
+    {
+        $source = <<<XML
+<?xml version="1.0"?>
+<document a="018"></document>
+XML;
+
+        $data = $this->encoder->decode($source, 'xml');
+        $this->assertSame('018', $data['@a']);
+    }
+
     public function testEncode()
     {
         $source = $this->getXmlSource();
@@ -548,30 +559,22 @@ public function testDecodeWithoutItemHash()
         $this->assertEquals($expected, $this->encoder->decode($xml, 'xml'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDecodeInvalidXml()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->encoder->decode('<?xml version="1.0"?><invalid><xml>', 'xml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testPreventsComplexExternalEntities()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->encoder->decode('<?xml version="1.0"?><!DOCTYPE scan[<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=XmlEncoderTest.php">]><scan>&test;</scan>', 'xml');
     }
 
     public function testDecodeEmptyXml()
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
-            $this->expectExceptionMessage('Invalid XML data, it can not be empty.');
-        } else {
-            $this->setExpectedException('Symfony\Component\Serializer\Exception\UnexpectedValueException', 'Invalid XML data, it can not be empty.');
-        }
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('Invalid XML data, it can not be empty.');
         $this->encoder->decode(' ', 'xml');
     }
 
@@ -677,6 +680,14 @@ public function testEncodeXmlWithDateTimeObjectField()
         $this->assertEquals($this->createXmlWithDateTimeField(), $actualXml);
     }
 
+    public function testNotEncodableValueExceptionMessageForAResource()
+    {
+        $this->expectException(NotEncodableValueException::class);
+        $this->expectExceptionMessage('An unexpected value could not be serialized: stream resource');
+
+        (new XmlEncoder())->encode(tmpfile(), 'xml');
+    }
+
     /**
      * @return XmlEncoder
      */
@@ -690,7 +701,7 @@ private function createXmlEncoderWithDateTimeNormalizer()
     }
 
     /**
-     * @return \PHPUnit_Framework_MockObject_MockObject|NormalizerInterface
+     * @return MockObject|NormalizerInterface
      */
     private function createMockDateTimeNormalizer()
     {
diff --git a/vendor/symfony/serializer/Tests/Fixtures/AbstractNormalizerDummy.php b/vendor/symfony/serializer/Tests/Fixtures/AbstractNormalizerDummy.php
index f576a241a487876af890008c6e682356aba88cfd..94a5e895c6c418ba501117a2a7db38c22f028c12 100644
--- a/vendor/symfony/serializer/Tests/Fixtures/AbstractNormalizerDummy.php
+++ b/vendor/symfony/serializer/Tests/Fixtures/AbstractNormalizerDummy.php
@@ -46,7 +46,7 @@ public function supportsNormalization($data, $format = null)
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
     }
 
diff --git a/vendor/symfony/serializer/Tests/Mapping/Factory/CacheMetadataFactoryTest.php b/vendor/symfony/serializer/Tests/Mapping/Factory/CacheMetadataFactoryTest.php
index 067f16acf9c3647676b2d53bbbe4fc96c344889a..723dc9b0494f29398f679e93ab74e958937c933b 100644
--- a/vendor/symfony/serializer/Tests/Mapping/Factory/CacheMetadataFactoryTest.php
+++ b/vendor/symfony/serializer/Tests/Mapping/Factory/CacheMetadataFactoryTest.php
@@ -55,11 +55,9 @@ public function testHasMetadataFor()
         $this->assertTrue($factory->hasMetadataFor(Dummy::class));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     */
     public function testInvalidClassThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
         $decorated = $this->getMockBuilder(ClassMetadataFactoryInterface::class)->getMock();
         $factory = new CacheClassMetadataFactory($decorated, new ArrayAdapter());
 
diff --git a/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php b/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php
index 1bf5586baffa7dc4305f23ce143279d0c2e85eb8..9eb29f25094fe0f581525ad96289e6d1f5ef908d 100644
--- a/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php
+++ b/vendor/symfony/serializer/Tests/Mapping/Loader/YamlFileLoaderTest.php
@@ -52,11 +52,9 @@ public function testLoadClassMetadataReturnsFalseWhenEmpty()
         $this->assertFalse($loader->loadClassMetadata($this->metadata));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\MappingException
-     */
     public function testLoadClassMetadataReturnsThrowsInvalidMapping()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\MappingException');
         $loader = new YamlFileLoader(__DIR__.'/../../Fixtures/invalid-mapping.yml');
         $loader->loadClassMetadata($this->metadata);
     }
diff --git a/vendor/symfony/serializer/Tests/Normalizer/AbstractNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/AbstractNormalizerTest.php
index cce383075a6fe34ff600a673223144c75d67dac8..b9af165a5eac4b16e91c6ec440fabe41fd57eb4f 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/AbstractNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/AbstractNormalizerTest.php
@@ -2,6 +2,7 @@
 
 namespace Symfony\Component\Serializer\Tests\Normalizer;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Serializer\Mapping\AttributeMetadata;
 use Symfony\Component\Serializer\Mapping\ClassMetadata;
@@ -31,7 +32,7 @@ class AbstractNormalizerTest extends TestCase
     private $normalizer;
 
     /**
-     * @var ClassMetadataFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var ClassMetadataFactoryInterface|MockObject
      */
     private $classMetadata;
 
diff --git a/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php
index 6155cc3ea0f3e40315fe2bddae301e5e0688a582..4895526c45c0a3f06905a38a08421a799800342d 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php
@@ -47,12 +47,10 @@ public function testInstantiateObjectDenormalizer()
         $this->assertInstanceOf(__NAMESPACE__.'\Dummy', $normalizer->instantiateObject($data, $class, $context, new \ReflectionClass($class), []));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\ExtraAttributesException
-     * @expectedExceptionMessage Extra attributes are not allowed ("fooFoo", "fooBar" are unknown).
-     */
     public function testDenormalizeWithExtraAttributes()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\ExtraAttributesException');
+        $this->expectExceptionMessage('Extra attributes are not allowed ("fooFoo", "fooBar" are unknown).');
         $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
         $normalizer = new AbstractObjectNormalizerDummy($factory);
         $normalizer->denormalize(
@@ -63,12 +61,10 @@ public function testDenormalizeWithExtraAttributes()
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\ExtraAttributesException
-     * @expectedExceptionMessage Extra attributes are not allowed ("fooFoo", "fooBar" are unknown).
-     */
     public function testDenormalizeWithExtraAttributesAndNoGroupsWithMetadataFactory()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\ExtraAttributesException');
+        $this->expectExceptionMessage('Extra attributes are not allowed ("fooFoo", "fooBar" are unknown).');
         $normalizer = new AbstractObjectNormalizerWithMetadata();
         $normalizer->denormalize(
             ['fooFoo' => 'foo', 'fooBar' => 'bar', 'bar' => 'bar'],
@@ -93,7 +89,7 @@ public function testDenormalizeCollectionDecodedFromXmlWithOneChild()
         );
 
         $this->assertInstanceOf(DummyCollection::class, $dummyCollection);
-        $this->assertInternalType('array', $dummyCollection->children);
+        $this->assertIsArray($dummyCollection->children);
         $this->assertCount(1, $dummyCollection->children);
         $this->assertInstanceOf(DummyChild::class, $dummyCollection->children[0]);
     }
@@ -114,7 +110,7 @@ public function testDenormalizeCollectionDecodedFromXmlWithTwoChildren()
         );
 
         $this->assertInstanceOf(DummyCollection::class, $dummyCollection);
-        $this->assertInternalType('array', $dummyCollection->children);
+        $this->assertIsArray($dummyCollection->children);
         $this->assertCount(2, $dummyCollection->children);
         $this->assertInstanceOf(DummyChild::class, $dummyCollection->children[0]);
         $this->assertInstanceOf(DummyChild::class, $dummyCollection->children[1]);
@@ -125,16 +121,54 @@ private function getDenormalizerForDummyCollection()
         $extractor = $this->getMockBuilder(PhpDocExtractor::class)->getMock();
         $extractor->method('getTypes')
             ->will($this->onConsecutiveCalls(
-                [
-                    new Type(
-                        'array',
-                        false,
-                        null,
-                        true,
-                        new Type('int'),
-                        new Type('object', false, DummyChild::class)
-                    ),
-                ],
+                [new Type('array', false, null, true, new Type('int'), new Type('object', false, DummyChild::class))],
+                null
+            ));
+
+        $denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor);
+        $arrayDenormalizer = new ArrayDenormalizerDummy();
+        $serializer = new SerializerCollectionDummy([$arrayDenormalizer, $denormalizer]);
+        $arrayDenormalizer->setSerializer($serializer);
+        $denormalizer->setSerializer($serializer);
+
+        return $denormalizer;
+    }
+
+    public function testDenormalizeStringCollectionDecodedFromXmlWithOneChild()
+    {
+        $denormalizer = $this->getDenormalizerForStringCollection();
+
+        // if an xml-node can have children which should be deserialized as string[]
+        // and only one child exists
+        $stringCollection = $denormalizer->denormalize(['children' => 'foo'], StringCollection::class, 'xml');
+
+        $this->assertInstanceOf(StringCollection::class, $stringCollection);
+        $this->assertIsArray($stringCollection->children);
+        $this->assertCount(1, $stringCollection->children);
+        $this->assertEquals('foo', $stringCollection->children[0]);
+    }
+
+    public function testDenormalizeStringCollectionDecodedFromXmlWithTwoChildren()
+    {
+        $denormalizer = $this->getDenormalizerForStringCollection();
+
+        // if an xml-node can have children which should be deserialized as string[]
+        // and only one child exists
+        $stringCollection = $denormalizer->denormalize(['children' => ['foo', 'bar']], StringCollection::class, 'xml');
+
+        $this->assertInstanceOf(StringCollection::class, $stringCollection);
+        $this->assertIsArray($stringCollection->children);
+        $this->assertCount(2, $stringCollection->children);
+        $this->assertEquals('foo', $stringCollection->children[0]);
+        $this->assertEquals('bar', $stringCollection->children[1]);
+    }
+
+    private function getDenormalizerForStringCollection()
+    {
+        $extractor = $this->getMockBuilder(PhpDocExtractor::class)->getMock();
+        $extractor->method('getTypes')
+            ->will($this->onConsecutiveCalls(
+                [new Type('array', false, null, true, new Type('int'), new Type('string'))],
                 null
             ));
 
@@ -149,12 +183,11 @@ private function getDenormalizerForDummyCollection()
 
     /**
      * Test that additional attributes throw an exception if no metadata factory is specified.
-     *
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     * @expectedExceptionMessage A class metadata factory must be provided in the constructor when setting "allow_extra_attributes" to false.
      */
     public function testExtraAttributesException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\LogicException');
+        $this->expectExceptionMessage('A class metadata factory must be provided in the constructor when setting "allow_extra_attributes" to false.');
         $normalizer = new ObjectNormalizer();
 
         $normalizer->denormalize([], \stdClass::class, 'xml', [
@@ -217,6 +250,12 @@ protected function setAttributeValue($object, $attribute, $value, $format = null
     }
 }
 
+class StringCollection
+{
+    /** @var string[] */
+    public $children;
+}
+
 class DummyCollection
 {
     /** @var DummyChild[] */
@@ -255,6 +294,8 @@ public function denormalize($data, $type, $format = null, array $context = [])
                 return $normalizer->denormalize($data, $type, $format, $context);
             }
         }
+
+        return null;
     }
 
     public function supportsDenormalization($data, $type, $format = null)
@@ -309,13 +350,13 @@ class ArrayDenormalizerDummy implements DenormalizerInterface, SerializerAwareIn
      *
      * @throws NotNormalizableValueException
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
         $serializer = $this->serializer;
-        $class = substr($class, 0, -2);
+        $type = substr($type, 0, -2);
 
         foreach ($data as $key => $value) {
-            $data[$key] = $serializer->denormalize($value, $class, $format, $context);
+            $data[$key] = $serializer->denormalize($value, $type, $format, $context);
         }
 
         return $data;
diff --git a/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php
index 132f3c0806350edfab0a4c02b8de0256c7f4f504..27bd361d3acb34302b83f5fb7648b30dce064186 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/ArrayDenormalizerTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Serializer\Tests\Normalizer;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
 use Symfony\Component\Serializer\SerializerInterface;
@@ -23,7 +24,7 @@ class ArrayDenormalizerTest extends TestCase
     private $denormalizer;
 
     /**
-     * @var SerializerInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var SerializerInterface|MockObject
      */
     private $serializer;
 
diff --git a/vendor/symfony/serializer/Tests/Normalizer/DataUriNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/DataUriNormalizerTest.php
index e1f714b55c1e9c40e4d3b086ee43c537d19f64a8..290428980cf88151b067b781b5cb3f25db2bd8a6 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/DataUriNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/DataUriNormalizerTest.php
@@ -111,21 +111,19 @@ public function testDenormalizeHttpFoundationFile()
         $this->assertSame(file_get_contents(self::TEST_GIF_DATA), $this->getContent($file->openFile()));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage The provided "data:" URI is not valid.
-     */
     public function testGiveNotAccessToLocalFiles()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('The provided "data:" URI is not valid.');
         $this->normalizer->denormalize('/etc/shadow', 'SplFileObject');
     }
 
     /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
      * @dataProvider invalidUriProvider
      */
     public function testInvalidData($uri)
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->normalizer->denormalize($uri, 'SplFileObject');
     }
 
diff --git a/vendor/symfony/serializer/Tests/Normalizer/DateIntervalNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/DateIntervalNormalizerTest.php
index b092c779a8cf8419fbb89ca12493adfabc53509d..ba78325248e001e765d1ee4b8f2336ee61b8e164 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/DateIntervalNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/DateIntervalNormalizerTest.php
@@ -29,6 +29,11 @@ public function dataProviderISO()
             ['P%yY%mM%dDT%hH%iM', 'P10Y2M3DT16H5M', 'P10Y2M3DT16H5M'],
             ['P%yY%mM%dDT%hH', 'P10Y2M3DT16H', 'P10Y2M3DT16H'],
             ['P%yY%mM%dD', 'P10Y2M3D', 'P10Y2M3DT0H'],
+            ['%RP%yY%mM%dD', '-P10Y2M3D', '-P10Y2M3DT0H'],
+            ['%RP%yY%mM%dD', '+P10Y2M3D', '+P10Y2M3DT0H'],
+            ['%RP%yY%mM%dD', '+P10Y2M3D', 'P10Y2M3DT0H'],
+            ['%rP%yY%mM%dD', '-P10Y2M3D', '-P10Y2M3DT0H'],
+            ['%rP%yY%mM%dD', 'P10Y2M3D', 'P10Y2M3DT0H'],
         ];
 
         return $data;
@@ -50,7 +55,7 @@ public function testNormalize()
      */
     public function testNormalizeUsingFormatPassedInContext($format, $output, $input)
     {
-        $this->assertEquals($output, $this->normalizer->normalize(new \DateInterval($input), null, [DateIntervalNormalizer::FORMAT_KEY => $format]));
+        $this->assertEquals($output, $this->normalizer->normalize($this->getInterval($input), null, [DateIntervalNormalizer::FORMAT_KEY => $format]));
     }
 
     /**
@@ -58,15 +63,13 @@ public function testNormalizeUsingFormatPassedInContext($format, $output, $input
      */
     public function testNormalizeUsingFormatPassedInConstructor($format, $output, $input)
     {
-        $this->assertEquals($output, (new DateIntervalNormalizer($format))->normalize(new \DateInterval($input)));
+        $this->assertEquals($output, (new DateIntervalNormalizer($format))->normalize($this->getInterval($input)));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The object must be an instance of "\DateInterval".
-     */
     public function testNormalizeInvalidObjectThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The object must be an instance of "\DateInterval".');
         $this->normalizer->normalize(new \stdClass());
     }
 
@@ -86,7 +89,7 @@ public function testDenormalize()
      */
     public function testDenormalizeUsingFormatPassedInContext($format, $input, $output)
     {
-        $this->assertDateIntervalEquals(new \DateInterval($output), $this->normalizer->denormalize($input, \DateInterval::class, null, [DateIntervalNormalizer::FORMAT_KEY => $format]));
+        $this->assertDateIntervalEquals($this->getInterval($output), $this->normalizer->denormalize($input, \DateInterval::class, null, [DateIntervalNormalizer::FORMAT_KEY => $format]));
     }
 
     /**
@@ -94,39 +97,31 @@ public function testDenormalizeUsingFormatPassedInContext($format, $input, $outp
      */
     public function testDenormalizeUsingFormatPassedInConstructor($format, $input, $output)
     {
-        $this->assertDateIntervalEquals(new \DateInterval($output), (new DateIntervalNormalizer($format))->denormalize($input, \DateInterval::class));
+        $this->assertDateIntervalEquals($this->getInterval($output), (new DateIntervalNormalizer($format))->denormalize($input, \DateInterval::class));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     */
     public function testDenormalizeExpectsString()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
         $this->normalizer->denormalize(1234, \DateInterval::class);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage Expected a valid ISO 8601 interval string.
-     */
     public function testDenormalizeNonISO8601IntervalStringThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('Expected a valid ISO 8601 interval string.');
         $this->normalizer->denormalize('10 years 2 months 3 days', \DateInterval::class, null);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDenormalizeInvalidDataThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->normalizer->denormalize('invalid interval', \DateInterval::class);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDenormalizeFormatMismatchThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->normalizer->denormalize('P00Y00M00DT00H00M00S', \DateInterval::class, null, [DateIntervalNormalizer::FORMAT_KEY => 'P%yY%mM%dD']);
     }
 
@@ -134,4 +129,20 @@ private function assertDateIntervalEquals(\DateInterval $expected, \DateInterval
     {
         $this->assertEquals($expected->format('%RP%yY%mM%dDT%hH%iM%sS'), $actual->format('%RP%yY%mM%dDT%hH%iM%sS'));
     }
+
+    private function getInterval($data)
+    {
+        if ('-' === $data[0]) {
+            $interval = new \DateInterval(substr($data, 1));
+            $interval->invert = 1;
+
+            return $interval;
+        }
+
+        if ('+' === $data[0]) {
+            return new \DateInterval(substr($data, 1));
+        }
+
+        return new \DateInterval($data);
+    }
 }
diff --git a/vendor/symfony/serializer/Tests/Normalizer/DateTimeNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/DateTimeNormalizerTest.php
index 5ff41c80337a51b27161442ae5181c2a9689d04e..14b043b64b5a212bd471d46487f23e69b3041c3a 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/DateTimeNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/DateTimeNormalizerTest.php
@@ -154,12 +154,10 @@ public function normalizeUsingTimeZonePassedInContextAndExpectedFormatWithMicros
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The object must implement the "\DateTimeInterface".
-     */
     public function testNormalizeInvalidObjectThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The object must implement the "\DateTimeInterface".');
         $this->normalizer->normalize(new \stdClass());
     }
 
@@ -235,37 +233,29 @@ public function denormalizeUsingTimezonePassedInContextProvider()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDenormalizeInvalidDataThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->normalizer->denormalize('invalid date', \DateTimeInterface::class);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage The data is either an empty string or null, you should pass a string that can be parsed with the passed format or a valid DateTime string.
-     */
     public function testDenormalizeNullThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('The data is either an empty string or null, you should pass a string that can be parsed with the passed format or a valid DateTime string.');
         $this->normalizer->denormalize(null, \DateTimeInterface::class);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage The data is either an empty string or null, you should pass a string that can be parsed with the passed format or a valid DateTime string.
-     */
     public function testDenormalizeEmptyStringThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('The data is either an empty string or null, you should pass a string that can be parsed with the passed format or a valid DateTime string.');
         $this->normalizer->denormalize('', \DateTimeInterface::class);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDenormalizeFormatMismatchThrowsException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->normalizer->denormalize('2016-01-01T00:00:00+00:00', \DateTimeInterface::class, null, [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d|']);
     }
 }
diff --git a/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
index d92fad3f8097835cad767bff5b5ad91fb43215c9..13a244e72eb1cb3e1fa23bd6bb6fa003f82a2c9b 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php
@@ -319,11 +319,9 @@ public function testCallbacks($callbacks, $value, $result, $message)
         );
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testUncallableCallbacks()
     {
+        $this->expectException('InvalidArgumentException');
         $this->normalizer->setCallbacks(['bar' => null]);
 
         $obj = new GetConstructorDummy('baz', 'quux', true);
@@ -406,12 +404,10 @@ public function provideCallbacks()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     * @expectedExceptionMessage Cannot normalize attribute "object" because the injected serializer is not a normalizer
-     */
     public function testUnableToNormalizeObjectAttribute()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\LogicException');
+        $this->expectExceptionMessage('Cannot normalize attribute "object" because the injected serializer is not a normalizer');
         $serializer = $this->getMockBuilder('Symfony\Component\Serializer\SerializerInterface')->getMock();
         $this->normalizer->setSerializer($serializer);
 
@@ -422,11 +418,9 @@ public function testUnableToNormalizeObjectAttribute()
         $this->normalizer->normalize($obj, 'any');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
-     */
     public function testUnableToNormalizeCircularReference()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\CircularReferenceException');
         $serializer = new Serializer([$this->normalizer]);
         $this->normalizer->setSerializer($serializer);
         $this->normalizer->setCircularReferenceLimit(2);
@@ -756,43 +750,6 @@ public function otherMethod()
     }
 }
 
-class GetCamelizedDummy
-{
-    private $kevinDunglas;
-    private $fooBar;
-    private $bar_foo;
-
-    public function __construct($kevinDunglas = null)
-    {
-        $this->kevinDunglas = $kevinDunglas;
-    }
-
-    public function getKevinDunglas()
-    {
-        return $this->kevinDunglas;
-    }
-
-    public function setFooBar($fooBar)
-    {
-        $this->fooBar = $fooBar;
-    }
-
-    public function getFooBar()
-    {
-        return $this->fooBar;
-    }
-
-    public function setBar_foo($bar_foo)
-    {
-        $this->bar_foo = $bar_foo;
-    }
-
-    public function getBar_foo()
-    {
-        return $this->bar_foo;
-    }
-}
-
 class ObjectConstructorArgsWithPrivateMutatorDummy
 {
     private $foo;
diff --git a/vendor/symfony/serializer/Tests/Normalizer/JsonSerializableNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/JsonSerializableNormalizerTest.php
index 4d9a53eeb9374f9f2d70d1e539e18cbbf0b1c5cb..a46a4cf995f1e23b22de92352ec6c9aba71f0c19 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/JsonSerializableNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/JsonSerializableNormalizerTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Serializer\Tests\Normalizer;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
 use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
@@ -28,7 +29,7 @@ class JsonSerializableNormalizerTest extends TestCase
     private $normalizer;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|SerializerInterface
+     * @var MockObject|SerializerInterface
      */
     private $serializer;
 
@@ -51,7 +52,7 @@ public function testNormalize()
             ->expects($this->once())
             ->method('normalize')
             ->willReturnCallback(function ($data) {
-                $this->assertArraySubset(['foo' => 'a', 'bar' => 'b', 'baz' => 'c'], $data);
+                $this->assertSame(['foo' => 'a', 'bar' => 'b', 'baz' => 'c'], array_diff_key($data, ['qux' => '']));
 
                 return 'string_object';
             })
@@ -60,11 +61,9 @@ public function testNormalize()
         $this->assertEquals('string_object', $this->normalizer->normalize(new JsonSerializableDummy()));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
-     */
     public function testCircularNormalize()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\CircularReferenceException');
         $this->normalizer->setCircularReferenceLimit(1);
 
         $this->serializer
@@ -80,12 +79,10 @@ public function testCircularNormalize()
         $this->assertEquals('string_object', $this->normalizer->normalize(new JsonSerializableDummy()));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\InvalidArgumentException
-     * @expectedExceptionMessage The object must implement "JsonSerializable".
-     */
     public function testInvalidDataThrowException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\InvalidArgumentException');
+        $this->expectExceptionMessage('The object must implement "JsonSerializable".');
         $this->normalizer->normalize(new \stdClass());
     }
 }
diff --git a/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
index fe9d0b85460964d12832b8a4a23e0db329441486..765db4c82bbae96aa1a08add3fc51dff3f19750c 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/ObjectNormalizerTest.php
@@ -182,12 +182,10 @@ public function testConstructorWithObjectTypeHintDenormalize()
         $this->assertEquals('rab', $obj->getInner()->bar);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\RuntimeException
-     * @expectedExceptionMessage Could not determine the class of the parameter "unknown".
-     */
     public function testConstructorWithUnknownObjectTypeHintDenormalize()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\RuntimeException');
+        $this->expectExceptionMessage('Could not determine the class of the parameter "unknown".');
         $data = [
             'id' => 10,
             'unknown' => [
@@ -355,11 +353,9 @@ public function testCallbacks($callbacks, $value, $result, $message)
         );
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testUncallableCallbacks()
     {
+        $this->expectException('InvalidArgumentException');
         $this->normalizer->setCallbacks(['bar' => null]);
 
         $obj = new ObjectConstructorDummy('baz', 'quux', true);
@@ -466,12 +462,10 @@ public function provideCallbacks()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     * @expectedExceptionMessage Cannot normalize attribute "object" because the injected serializer is not a normalizer
-     */
     public function testUnableToNormalizeObjectAttribute()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\LogicException');
+        $this->expectExceptionMessage('Cannot normalize attribute "object" because the injected serializer is not a normalizer');
         $serializer = $this->getMockBuilder('Symfony\Component\Serializer\SerializerInterface')->getMock();
         $this->normalizer->setSerializer($serializer);
 
@@ -482,11 +476,9 @@ public function testUnableToNormalizeObjectAttribute()
         $this->normalizer->normalize($obj, 'any');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
-     */
     public function testUnableToNormalizeCircularReference()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\CircularReferenceException');
         $serializer = new Serializer([$this->normalizer]);
         $this->normalizer->setSerializer($serializer);
         $this->normalizer->setCircularReferenceLimit(2);
@@ -600,11 +592,9 @@ public function testMaxDepth()
         $this->assertEquals($expected, $result);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testThrowUnexpectedValueException()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $this->normalizer->denormalize(['foo' => 'bar'], ObjectTypeHinted::class);
     }
 
@@ -637,24 +627,20 @@ public function testAcceptJsonNumber()
         $this->assertSame(10.0, $serializer->denormalize(['number' => 10], JsonNumber::class, 'jsonld')->number);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage The type of the "date" attribute for class "Symfony\Component\Serializer\Tests\Normalizer\ObjectOuter" must be one of "DateTimeInterface" ("string" given).
-     */
     public function testRejectInvalidType()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('The type of the "date" attribute for class "Symfony\Component\Serializer\Tests\Normalizer\ObjectOuter" must be one of "DateTimeInterface" ("string" given).');
         $normalizer = new ObjectNormalizer(null, null, null, new ReflectionExtractor());
         $serializer = new Serializer([$normalizer]);
 
         $serializer->denormalize(['date' => 'foo'], ObjectOuter::class);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     * @expectedExceptionMessage The type of the key "a" must be "int" ("string" given).
-     */
     public function testRejectInvalidKey()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
+        $this->expectExceptionMessage('The type of the key "a" must be "int" ("string" given).');
         $extractor = new PropertyInfoExtractor([], [new PhpDocExtractor(), new ReflectionExtractor()]);
         $normalizer = new ObjectNormalizer(null, null, null, $extractor);
         $serializer = new Serializer([new ArrayDenormalizer(), new DateTimeNormalizer(), $normalizer]);
diff --git a/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php b/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
index f8d1eb8db8d7fe518bc559a82a094395d83eb55a..4b138fca7ba9840a0b391f9d4d3a5058059bc35a 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/PropertyNormalizerTest.php
@@ -132,11 +132,9 @@ public function testCallbacks($callbacks, $value, $result, $message)
         );
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testUncallableCallbacks()
     {
+        $this->expectException('InvalidArgumentException');
         $this->normalizer->setCallbacks(['bar' => null]);
 
         $obj = new PropertyConstructorDummy('baz', 'quux');
@@ -320,11 +318,9 @@ public function provideCallbacks()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\CircularReferenceException
-     */
     public function testUnableToNormalizeCircularReference()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\CircularReferenceException');
         $serializer = new Serializer([$this->normalizer]);
         $this->normalizer->setSerializer($serializer);
         $this->normalizer->setCircularReferenceLimit(2);
@@ -379,12 +375,10 @@ public function testDenormalizeShouldIgnoreStaticProperty()
         $this->assertEquals('out_of_scope', PropertyDummy::$outOfScope);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     * @expectedExceptionMessage Cannot normalize attribute "bar" because the injected serializer is not a normalizer
-     */
     public function testUnableToNormalizeObjectAttribute()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\LogicException');
+        $this->expectExceptionMessage('Cannot normalize attribute "bar" because the injected serializer is not a normalizer');
         $serializer = $this->getMockBuilder('Symfony\Component\Serializer\SerializerInterface')->getMock();
         $this->normalizer->setSerializer($serializer);
 
@@ -497,18 +491,6 @@ public function getBar()
     }
 }
 
-class PropertyCamelizedDummy
-{
-    private $kevinDunglas;
-    public $fooBar;
-    public $bar_foo;
-
-    public function __construct($kevinDunglas = null)
-    {
-        $this->kevinDunglas = $kevinDunglas;
-    }
-}
-
 class StaticPropertyDummy
 {
     private static $property = 'value';
diff --git a/vendor/symfony/serializer/Tests/Normalizer/TestDenormalizer.php b/vendor/symfony/serializer/Tests/Normalizer/TestDenormalizer.php
index 036d2bb84cd5def43d7273030d10cdf89aba46a1..eefef12d45188689573aebd86648582dccc2c88f 100644
--- a/vendor/symfony/serializer/Tests/Normalizer/TestDenormalizer.php
+++ b/vendor/symfony/serializer/Tests/Normalizer/TestDenormalizer.php
@@ -23,7 +23,7 @@ class TestDenormalizer implements DenormalizerInterface
     /**
      * {@inheritdoc}
      */
-    public function denormalize($data, $class, $format = null, array $context = [])
+    public function denormalize($data, $type, $format = null, array $context = [])
     {
     }
 
diff --git a/vendor/symfony/serializer/Tests/SerializerTest.php b/vendor/symfony/serializer/Tests/SerializerTest.php
index 405317d5fb26a346ff4ab7ff850a364630b09f97..5652768fcab4f439aebaa4fea4b87db7cd0b6d07 100644
--- a/vendor/symfony/serializer/Tests/SerializerTest.php
+++ b/vendor/symfony/serializer/Tests/SerializerTest.php
@@ -13,6 +13,7 @@
 
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Serializer\Encoder\JsonEncoder;
+use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
 use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
 use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
 use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
@@ -41,11 +42,9 @@ public function testInterface()
         $this->assertInstanceOf('Symfony\Component\Serializer\Encoder\DecoderInterface', $serializer);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testNormalizeNoMatch()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([$this->getMockBuilder('Symfony\Component\Serializer\Normalizer\CustomNormalizer')->getMock()]);
         $serializer->normalize(new \stdClass(), 'xml');
     }
@@ -64,29 +63,23 @@ public function testNormalizeGivesPriorityToInterfaceOverTraversable()
         $this->assertEquals('{"foo":"normalizedFoo","bar":"normalizedBar"}', $result);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testNormalizeOnDenormalizer()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([new TestDenormalizer()], []);
         $this->assertTrue($serializer->normalize(new \stdClass(), 'json'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDenormalizeNoMatch()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([$this->getMockBuilder('Symfony\Component\Serializer\Normalizer\CustomNormalizer')->getMock()]);
         $serializer->denormalize('foo', 'stdClass');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDenormalizeOnNormalizer()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([new TestNormalizer()], []);
         $data = ['title' => 'foo', 'numbers' => [5, 3]];
         $this->assertTrue($serializer->denormalize(json_encode($data), 'stdClass', 'json'));
@@ -168,21 +161,17 @@ public function testSerializeArrayOfScalars()
         $this->assertEquals(json_encode($data), $result);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testSerializeNoEncoder()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([], []);
         $data = ['title' => 'foo', 'numbers' => [5, 3]];
         $serializer->serialize($data, 'json');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     */
     public function testSerializeNoNormalizer()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\LogicException');
         $serializer = new Serializer([], ['json' => new JsonEncoder()]);
         $data = ['title' => 'foo', 'numbers' => [5, 3]];
         $serializer->serialize(Model::fromArray($data), 'json');
@@ -206,31 +195,25 @@ public function testDeserializeUseCache()
         $this->assertEquals($data, $result->toArray());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\LogicException
-     */
     public function testDeserializeNoNormalizer()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\LogicException');
         $serializer = new Serializer([], ['json' => new JsonEncoder()]);
         $data = ['title' => 'foo', 'numbers' => [5, 3]];
         $serializer->deserialize(json_encode($data), '\Symfony\Component\Serializer\Tests\Model', 'json');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDeserializeWrongNormalizer()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([new CustomNormalizer()], ['json' => new JsonEncoder()]);
         $data = ['title' => 'foo', 'numbers' => [5, 3]];
         $serializer->deserialize(json_encode($data), '\Symfony\Component\Serializer\Tests\Model', 'json');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException
-     */
     public function testDeserializeNoEncoder()
     {
+        $this->expectException('Symfony\Component\Serializer\Exception\UnexpectedValueException');
         $serializer = new Serializer([], []);
         $data = ['title' => 'foo', 'numbers' => [5, 3]];
         $serializer->deserialize(json_encode($data), '\Symfony\Component\Serializer\Tests\Model', 'json');
@@ -346,6 +329,14 @@ public function testDeserializeObjectConstructorWithObjectTypeHint()
 
         $this->assertEquals(new Foo(new Bar('baz')), $serializer->deserialize($jsonData, Foo::class, 'json'));
     }
+
+    public function testNotNormalizableValueExceptionMessageForAResource()
+    {
+        $this->expectException(NotNormalizableValueException::class);
+        $this->expectExceptionMessage('An unexpected value could not be normalized: stream resource');
+
+        (new Serializer())->normalize(tmpfile());
+    }
 }
 
 class Model
diff --git a/vendor/symfony/translation/Command/XliffLintCommand.php b/vendor/symfony/translation/Command/XliffLintCommand.php
index 89a4e50e21fa32991a61f337ba58da506d112c7e..922e026c483c891e7344a15f198ad45e4fa99f15 100644
--- a/vendor/symfony/translation/Command/XliffLintCommand.php
+++ b/vendor/symfony/translation/Command/XliffLintCommand.php
@@ -201,10 +201,13 @@ private function getFiles($fileOrDirectory)
         }
     }
 
+    /**
+     * @return string|null
+     */
     private function getStdin()
     {
         if (0 !== ftell(STDIN)) {
-            return;
+            return null;
         }
 
         $inputs = '';
diff --git a/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/vendor/symfony/translation/DataCollector/TranslationDataCollector.php
index 7aabcb24d5591837eb6ff56443f3cfee409dfda5..fc713463a0bc36f9870df6b8047aa6efb62a6fc6 100644
--- a/vendor/symfony/translation/DataCollector/TranslationDataCollector.php
+++ b/vendor/symfony/translation/DataCollector/TranslationDataCollector.php
@@ -61,7 +61,7 @@ public function reset()
     }
 
     /**
-     * @return array
+     * @return array|Data
      */
     public function getMessages()
     {
diff --git a/vendor/symfony/translation/DataCollectorTranslator.php b/vendor/symfony/translation/DataCollectorTranslator.php
index 7eaf928e7ff930d5a4a0e5d59504e595d57708bd..e70e5f5e14e17396259649156ba2f3547a304e2e 100644
--- a/vendor/symfony/translation/DataCollectorTranslator.php
+++ b/vendor/symfony/translation/DataCollectorTranslator.php
@@ -145,6 +145,7 @@ private function collectMessage($locale, $domain, $id, $translation, $parameters
         $id = (string) $id;
         $catalogue = $this->translator->getCatalogue($locale);
         $locale = $catalogue->getLocale();
+        $fallbackLocale = null;
         if ($catalogue->defines($id, $domain)) {
             $state = self::MESSAGE_DEFINED;
         } elseif ($catalogue->has($id, $domain)) {
@@ -153,10 +154,9 @@ private function collectMessage($locale, $domain, $id, $translation, $parameters
             $fallbackCatalogue = $catalogue->getFallbackCatalogue();
             while ($fallbackCatalogue) {
                 if ($fallbackCatalogue->defines($id, $domain)) {
-                    $locale = $fallbackCatalogue->getLocale();
+                    $fallbackLocale = $fallbackCatalogue->getLocale();
                     break;
                 }
-
                 $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
             }
         } else {
@@ -165,6 +165,7 @@ private function collectMessage($locale, $domain, $id, $translation, $parameters
 
         $this->messages[] = [
             'locale' => $locale,
+            'fallbackLocale' => $fallbackLocale,
             'domain' => $domain,
             'id' => $id,
             'translation' => $translation,
diff --git a/vendor/symfony/translation/Dumper/FileDumper.php b/vendor/symfony/translation/Dumper/FileDumper.php
index 102f9285842f89eb970e495536930b06c18a5365..62a6caa4d0a8b422422558d1e8d0bc942fd6351e 100644
--- a/vendor/symfony/translation/Dumper/FileDumper.php
+++ b/vendor/symfony/translation/Dumper/FileDumper.php
@@ -92,9 +92,7 @@ public function dump(MessageCatalogue $messages, $options = [])
     /**
      * Transforms a domain of a message catalogue to its string representation.
      *
-     * @param MessageCatalogue $messages
-     * @param string           $domain
-     * @param array            $options
+     * @param string $domain
      *
      * @return string representation
      */
diff --git a/vendor/symfony/translation/Dumper/IcuResFileDumper.php b/vendor/symfony/translation/Dumper/IcuResFileDumper.php
index 48d0befdf9412f8739d0faaace9bd608488ff29d..9047a3b76052365cd625e64cf74ad22512633690 100644
--- a/vendor/symfony/translation/Dumper/IcuResFileDumper.php
+++ b/vendor/symfony/translation/Dumper/IcuResFileDumper.php
@@ -86,9 +86,7 @@ private function writePadding($data)
     {
         $padding = \strlen($data) % 4;
 
-        if ($padding) {
-            return str_repeat("\xAA", 4 - $padding);
-        }
+        return $padding ? str_repeat("\xAA", 4 - $padding) : null;
     }
 
     private function getPosition($data)
diff --git a/vendor/symfony/translation/Dumper/XliffFileDumper.php b/vendor/symfony/translation/Dumper/XliffFileDumper.php
index cd867b0967908ece7d6592786f7d976757edd217..f933be8b258df062b11c3959adf71c11d48864b7 100644
--- a/vendor/symfony/translation/Dumper/XliffFileDumper.php
+++ b/vendor/symfony/translation/Dumper/XliffFileDumper.php
@@ -41,7 +41,7 @@ public function formatCatalogue(MessageCatalogue $messages, $domain, array $opti
             return $this->dumpXliff1($defaultLocale, $messages, $domain, $options);
         }
         if ('2.0' === $xliffVersion) {
-            return $this->dumpXliff2($defaultLocale, $messages, $domain, $options);
+            return $this->dumpXliff2($defaultLocale, $messages, $domain);
         }
 
         throw new InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion));
@@ -129,7 +129,7 @@ private function dumpXliff1($defaultLocale, MessageCatalogue $messages, $domain,
         return $dom->saveXML();
     }
 
-    private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain, array $options = [])
+    private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain)
     {
         $dom = new \DOMDocument('1.0', 'utf-8');
         $dom->formatOutput = true;
diff --git a/vendor/symfony/translation/Extractor/AbstractFileExtractor.php b/vendor/symfony/translation/Extractor/AbstractFileExtractor.php
index 08a27fb07c980f7dc7b1f617ea9e266704788719..2da1fff6e6249516f1b38d9e7175914d1e15009b 100644
--- a/vendor/symfony/translation/Extractor/AbstractFileExtractor.php
+++ b/vendor/symfony/translation/Extractor/AbstractFileExtractor.php
@@ -21,9 +21,9 @@
 abstract class AbstractFileExtractor
 {
     /**
-     * @param string|array $resource Files, a file or a directory
+     * @param string|iterable $resource Files, a file or a directory
      *
-     * @return array
+     * @return iterable
      */
     protected function extractFiles($resource)
     {
@@ -79,7 +79,7 @@ abstract protected function canBeExtracted($file);
     /**
      * @param string|array $resource Files, a file or a directory
      *
-     * @return array files to be extracted
+     * @return iterable files to be extracted
      */
     abstract protected function extractFromDirectory($resource);
 }
diff --git a/vendor/symfony/translation/Extractor/PhpExtractor.php b/vendor/symfony/translation/Extractor/PhpExtractor.php
index 8ded66d20a34b2eca4c53f5b1335e5fc299a600d..ec2445d95190103f29cdc5f6c6253a5403d7ecb8 100644
--- a/vendor/symfony/translation/Extractor/PhpExtractor.php
+++ b/vendor/symfony/translation/Extractor/PhpExtractor.php
@@ -103,7 +103,7 @@ public function setPrefix($prefix)
      *
      * @param mixed $token
      *
-     * @return string
+     * @return string|null
      */
     protected function normalizeToken($token)
     {
@@ -198,8 +198,7 @@ private function getValue(\Iterator $tokenIterator)
     /**
      * Extracts trans message from PHP tokens.
      *
-     * @param array            $tokens
-     * @param MessageCatalogue $catalog
+     * @param array $tokens
      */
     protected function parseTokens($tokens, MessageCatalogue $catalog)
     {
@@ -258,9 +257,7 @@ protected function canBeExtracted($file)
     }
 
     /**
-     * @param string|array $directory
-     *
-     * @return array
+     * {@inheritdoc}
      */
     protected function extractFromDirectory($directory)
     {
diff --git a/vendor/symfony/translation/Loader/CsvFileLoader.php b/vendor/symfony/translation/Loader/CsvFileLoader.php
index 18cc83ed686c6b217ffb9170b28689ecc6883e66..db17bd563111ab84f36e4cab37a87011c9f5e15c 100644
--- a/vendor/symfony/translation/Loader/CsvFileLoader.php
+++ b/vendor/symfony/translation/Loader/CsvFileLoader.php
@@ -41,6 +41,10 @@ protected function loadResource($resource)
         $file->setCsvControl($this->delimiter, $this->enclosure, $this->escape);
 
         foreach ($file as $data) {
+            if (false === $data) {
+                continue;
+            }
+
             if ('#' !== substr($data[0], 0, 1) && isset($data[1]) && 2 === \count($data)) {
                 $messages[$data[0]] = $data[1];
             }
diff --git a/vendor/symfony/translation/Loader/MoFileLoader.php b/vendor/symfony/translation/Loader/MoFileLoader.php
index 74d2b2f4411df3e34c0f029b051f3d6a06d522e8..4b249df024ec8d88d86a009fce0ad07ba5267930 100644
--- a/vendor/symfony/translation/Loader/MoFileLoader.php
+++ b/vendor/symfony/translation/Loader/MoFileLoader.php
@@ -111,17 +111,12 @@ protected function loadResource($resource)
             $ids = ['singular' => $singularId, 'plural' => $pluralId];
             $item = compact('ids', 'translated');
 
-            if (\is_array($item['translated'])) {
-                $messages[$item['ids']['singular']] = stripcslashes($item['translated'][0]);
+            if (!empty($item['ids']['singular'])) {
+                $id = $item['ids']['singular'];
                 if (isset($item['ids']['plural'])) {
-                    $plurals = [];
-                    foreach ($item['translated'] as $plural => $translated) {
-                        $plurals[] = sprintf('{%d} %s', $plural, $translated);
-                    }
-                    $messages[$item['ids']['plural']] = stripcslashes(implode('|', $plurals));
+                    $id .= '|'.$item['ids']['plural'];
                 }
-            } elseif (!empty($item['ids']['singular'])) {
-                $messages[$item['ids']['singular']] = stripcslashes($item['translated']);
+                $messages[$id] = stripcslashes(implode('|', (array) $item['translated']));
             }
         }
 
diff --git a/vendor/symfony/translation/Loader/PoFileLoader.php b/vendor/symfony/translation/Loader/PoFileLoader.php
index 1412a786a79b7da7696de1b900da14f6f57dfc32..5e460fbfb84ffe187da3e26168ee55ba751324b0 100644
--- a/vendor/symfony/translation/Loader/PoFileLoader.php
+++ b/vendor/symfony/translation/Loader/PoFileLoader.php
@@ -12,7 +12,7 @@
 namespace Symfony\Component\Translation\Loader;
 
 /**
- * @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)
+ * @copyright Copyright (c) 2010, Union of RAD https://github.com/UnionOfRAD/lithium
  * @copyright Copyright (c) 2012, Clemens Tolboom
  */
 class PoFileLoader extends FileLoader
@@ -20,7 +20,7 @@ class PoFileLoader extends FileLoader
     /**
      * Parses portable object (PO) format.
      *
-     * From http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files
+     * From https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files
      * we should be able to parse files having:
      *
      * white-space
@@ -126,23 +126,24 @@ protected function loadResource($resource)
      */
     private function addMessage(array &$messages, array $item)
     {
-        if (\is_array($item['translated'])) {
-            $messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated'][0]);
+        if (!empty($item['ids']['singular'])) {
+            $id = stripcslashes($item['ids']['singular']);
             if (isset($item['ids']['plural'])) {
-                $plurals = $item['translated'];
-                // PO are by definition indexed so sort by index.
-                ksort($plurals);
-                // Make sure every index is filled.
-                end($plurals);
-                $count = key($plurals);
-                // Fill missing spots with '-'.
-                $empties = array_fill(0, $count + 1, '-');
-                $plurals += $empties;
-                ksort($plurals);
-                $messages[stripcslashes($item['ids']['plural'])] = stripcslashes(implode('|', $plurals));
+                $id .= '|'.stripcslashes($item['ids']['plural']);
             }
-        } elseif (!empty($item['ids']['singular'])) {
-            $messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated']);
+
+            $translated = (array) $item['translated'];
+            // PO are by definition indexed so sort by index.
+            ksort($translated);
+            // Make sure every index is filled.
+            end($translated);
+            $count = key($translated);
+            // Fill missing spots with '-'.
+            $empties = array_fill(0, $count + 1, '-');
+            $translated += $empties;
+            ksort($translated);
+
+            $messages[$id] = stripcslashes(implode('|', $translated));
         }
     }
 }
diff --git a/vendor/symfony/translation/Loader/XliffFileLoader.php b/vendor/symfony/translation/Loader/XliffFileLoader.php
index e6750826237dcab2a9c4248ed63e456891f149ee..9d7a83ab84c371105837d32e351f3c2ddf7d11dd 100644
--- a/vendor/symfony/translation/Loader/XliffFileLoader.php
+++ b/vendor/symfony/translation/Loader/XliffFileLoader.php
@@ -116,9 +116,7 @@ private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, $
     }
 
     /**
-     * @param \DOMDocument     $dom
-     * @param MessageCatalogue $catalogue
-     * @param string           $domain
+     * @param string $domain
      */
     private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, $domain)
     {
@@ -182,9 +180,8 @@ private function utf8ToCharset($content, $encoding = null)
     /**
      * Validates and parses the given file into a DOMDocument.
      *
-     * @param string       $file
-     * @param \DOMDocument $dom
-     * @param string       $schema source of the schema
+     * @param string $file
+     * @param string $schema source of the schema
      *
      * @throws InvalidResourceException
      */
@@ -284,8 +281,6 @@ private function getXmlErrors($internalErrors)
      * Gets xliff file version based on the root "version" attribute.
      * Defaults to 1.2 for backwards compatibility.
      *
-     * @param \DOMDocument $dom
-     *
      * @throws InvalidArgumentException
      *
      * @return string
@@ -314,8 +309,7 @@ private function getVersionNumber(\DOMDocument $dom)
     }
 
     /**
-     * @param \SimpleXMLElement|null $noteElement
-     * @param string|null            $encoding
+     * @param string|null $encoding
      *
      * @return array
      */
diff --git a/vendor/symfony/translation/Loader/YamlFileLoader.php b/vendor/symfony/translation/Loader/YamlFileLoader.php
index 771e6e7b7b29bd4303fc2ce7a1fb945025635764..8d9aa6f72ae5c2e69dd2a8febeadc300d1c261cf 100644
--- a/vendor/symfony/translation/Loader/YamlFileLoader.php
+++ b/vendor/symfony/translation/Loader/YamlFileLoader.php
@@ -52,6 +52,10 @@ protected function loadResource($resource)
             restore_error_handler();
         }
 
-        return $messages;
+        if (null !== $messages && !\is_array($messages)) {
+            throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource));
+        }
+
+        return $messages ?: [];
     }
 }
diff --git a/vendor/symfony/translation/LoggingTranslator.php b/vendor/symfony/translation/LoggingTranslator.php
index 306776e007d3b2a44732b4e753e57eab50717947..942736ea7fdfe45f980efd700176ad280c7b05af 100644
--- a/vendor/symfony/translation/LoggingTranslator.php
+++ b/vendor/symfony/translation/LoggingTranslator.php
@@ -28,7 +28,6 @@ class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface
 
     /**
      * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
-     * @param LoggerInterface     $logger
      */
     public function __construct(TranslatorInterface $translator, LoggerInterface $logger)
     {
diff --git a/vendor/symfony/translation/MessageCatalogue.php b/vendor/symfony/translation/MessageCatalogue.php
index 73fdcfdc829f42183e285e81c898eb0ab14edac2..9b59c87d2f919faa5c655ff0105c8b78b0671a61 100644
--- a/vendor/symfony/translation/MessageCatalogue.php
+++ b/vendor/symfony/translation/MessageCatalogue.php
@@ -231,6 +231,8 @@ public function getMetadata($key = '', $domain = 'messages')
                 return $this->metadata[$domain][$key];
             }
         }
+
+        return null;
     }
 
     /**
diff --git a/vendor/symfony/translation/Reader/TranslationReader.php b/vendor/symfony/translation/Reader/TranslationReader.php
index e4554f39b4ee5641972f84d10deecb55fb4c6136..2b9834521921f925d28f69772f93936d5d0ae778 100644
--- a/vendor/symfony/translation/Reader/TranslationReader.php
+++ b/vendor/symfony/translation/Reader/TranslationReader.php
@@ -32,8 +32,7 @@ class TranslationReader implements TranslationReaderInterface
     /**
      * Adds a loader to the translation extractor.
      *
-     * @param string          $format The format of the loader
-     * @param LoaderInterface $loader
+     * @param string $format The format of the loader
      */
     public function addLoader($format, LoaderInterface $loader)
     {
diff --git a/vendor/symfony/translation/Reader/TranslationReaderInterface.php b/vendor/symfony/translation/Reader/TranslationReaderInterface.php
index 0aa55c6d367dcc923c8e3248d010f45b655ab7b4..0b2ad332a94ef58c47d5f5be0f7d93183831638d 100644
--- a/vendor/symfony/translation/Reader/TranslationReaderInterface.php
+++ b/vendor/symfony/translation/Reader/TranslationReaderInterface.php
@@ -23,8 +23,7 @@ interface TranslationReaderInterface
     /**
      * Reads translation messages from a directory to the catalogue.
      *
-     * @param string           $directory
-     * @param MessageCatalogue $catalogue
+     * @param string $directory
      */
     public function read($directory, MessageCatalogue $catalogue);
 }
diff --git a/vendor/symfony/translation/Resources/bin/translation-status.php b/vendor/symfony/translation/Resources/bin/translation-status.php
index 96ccc105741b7ba00a16908b653781292bdc0ee0..44918c92ec5276ddb1f45651cf475db38bd3a940 100644
--- a/vendor/symfony/translation/Resources/bin/translation-status.php
+++ b/vendor/symfony/translation/Resources/bin/translation-status.php
@@ -89,7 +89,8 @@ function findTranslationFiles($originalFilePath, $localeToAnalyze)
     $originalFileName = basename($originalFilePath);
     $translationFileNamePattern = str_replace('.en.', '.*.', $originalFileName);
 
-    $translationFiles = glob($translationsDir.'/'.$translationFileNamePattern);
+    $translationFiles = glob($translationsDir.'/'.$translationFileNamePattern, GLOB_NOSORT);
+    sort($translationFiles);
     foreach ($translationFiles as $filePath) {
         $locale = extractLocaleFromFilePath($filePath);
 
@@ -167,8 +168,9 @@ function printTable($translations, $verboseOutput)
     $longestLocaleNameLength = max(array_map('strlen', array_keys($translations)));
 
     foreach ($translations as $locale => $translation) {
-        $isTranslationCompleted = $translation['translated'] === $translation['total'];
-        if ($isTranslationCompleted) {
+        if ($translation['translated'] > $translation['total']) {
+            textColorRed();
+        } elseif ($translation['translated'] === $translation['total']) {
             textColorGreen();
         }
 
@@ -194,6 +196,11 @@ function textColorGreen()
     echo "\033[32m";
 }
 
+function textColorRed()
+{
+    echo "\033[31m";
+}
+
 function textColorNormal()
 {
     echo "\033[0m";
diff --git a/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php b/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php
index e39ef39ec51fcc3c94146542b7a7757b312c03f7..f82b18fdd73c76c5b176493bf22844d09745b6fc 100644
--- a/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php
+++ b/vendor/symfony/translation/Tests/Catalogue/AbstractOperationTest.php
@@ -41,7 +41,7 @@ public function testGetMergedDomains()
 
     public function testGetMessagesFromUnknownDomain()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('InvalidArgumentException');
+        $this->expectException('InvalidArgumentException');
         $this->createOperation(
             new MessageCatalogue('en'),
             new MessageCatalogue('en')
diff --git a/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php b/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php
index 059d074648722a5cefd64b3f0de06c22334af2a7..5cb7c31a40183f0bc4c7b18cd6aebeb6c153999b 100644
--- a/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php
+++ b/vendor/symfony/translation/Tests/DataCollectorTranslatorTest.php
@@ -34,6 +34,7 @@ public function testCollectMessages()
             'id' => 'foo',
             'translation' => 'foo (en)',
             'locale' => 'en',
+            'fallbackLocale' => null,
             'domain' => 'messages',
             'state' => DataCollectorTranslator::MESSAGE_DEFINED,
             'parameters' => [],
@@ -42,7 +43,8 @@ public function testCollectMessages()
         $expectedMessages[] = [
             'id' => 'bar',
             'translation' => 'bar (fr)',
-            'locale' => 'fr',
+            'locale' => 'en',
+            'fallbackLocale' => 'fr',
             'domain' => 'messages',
             'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
             'parameters' => [],
@@ -52,6 +54,7 @@ public function testCollectMessages()
             'id' => 'choice',
             'translation' => 'choice',
             'locale' => 'en',
+            'fallbackLocale' => null,
             'domain' => 'messages',
             'state' => DataCollectorTranslator::MESSAGE_MISSING,
             'parameters' => [],
@@ -60,7 +63,8 @@ public function testCollectMessages()
         $expectedMessages[] = [
             'id' => 'bar_ru',
             'translation' => 'bar (ru)',
-            'locale' => 'ru',
+            'locale' => 'en',
+            'fallbackLocale' => 'ru',
             'domain' => 'messages',
             'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
             'parameters' => [],
@@ -69,7 +73,8 @@ public function testCollectMessages()
         $expectedMessages[] = [
             'id' => 'bar_ru',
             'translation' => 'bar (ru)',
-            'locale' => 'ru',
+            'locale' => 'en',
+            'fallbackLocale' => 'ru',
             'domain' => 'messages',
             'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
             'parameters' => ['foo' => 'bar'],
diff --git a/vendor/symfony/translation/Tests/DependencyInjection/TranslationExtractorPassTest.php b/vendor/symfony/translation/Tests/DependencyInjection/TranslationExtractorPassTest.php
index a638498b6bdefa42c80dc612d16e5fc61defd2ac..113536bca89a156724adf9ff76229cddae6d6dcd 100644
--- a/vendor/symfony/translation/Tests/DependencyInjection/TranslationExtractorPassTest.php
+++ b/vendor/symfony/translation/Tests/DependencyInjection/TranslationExtractorPassTest.php
@@ -46,20 +46,15 @@ public function testProcessNoDefinitionFound()
         $this->assertCount($aliasesBefore, $container->getAliases());
     }
 
-    /**
-     * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
-     * @expectedExceptionMessage The alias for the tag "translation.extractor" of service "foo.id" must be set.
-     */
     public function testProcessMissingAlias()
     {
-        $definition = $this->getMockBuilder('Symfony\Component\DependencyInjection\Definition')->disableOriginalConstructor()->getMock();
+        $this->expectException('Symfony\Component\DependencyInjection\Exception\RuntimeException');
+        $this->expectExceptionMessage('The alias for the tag "translation.extractor" of service "foo.id" must be set.');
         $container = new ContainerBuilder();
         $container->register('translation.extractor');
         $container->register('foo.id')
             ->addTag('translation.extractor', []);
 
-        $definition->expects($this->never())->method('addMethodCall');
-
         $translationDumperPass = new TranslationExtractorPass();
         $translationDumperPass->process($container);
     }
diff --git a/vendor/symfony/translation/Tests/IdentityTranslatorTest.php b/vendor/symfony/translation/Tests/IdentityTranslatorTest.php
index c3d7b1f7d128d92b06af0fdf115462033edc3640..a5c63df988477187a41337a947688da64a297385 100644
--- a/vendor/symfony/translation/Tests/IdentityTranslatorTest.php
+++ b/vendor/symfony/translation/Tests/IdentityTranslatorTest.php
@@ -17,6 +17,22 @@
 
 class IdentityTranslatorTest extends TestCase
 {
+    private $defaultLocale;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->defaultLocale = \Locale::getDefault();
+    }
+
+    protected function tearDown()
+    {
+        parent::tearDown();
+
+        \Locale::setDefault($this->defaultLocale);
+    }
+
     /**
      * @dataProvider getTransTests
      */
diff --git a/vendor/symfony/translation/Tests/IntervalTest.php b/vendor/symfony/translation/Tests/IntervalTest.php
index 8da3bb151722a7af61f5528d124478a81b16d1aa..e49a30bf1148da476512b5f02f79cd98ca617b54 100644
--- a/vendor/symfony/translation/Tests/IntervalTest.php
+++ b/vendor/symfony/translation/Tests/IntervalTest.php
@@ -24,11 +24,9 @@ public function testTest($expected, $number, $interval)
         $this->assertEquals($expected, Interval::test($number, $interval));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
-     */
     public function testTestException()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         Interval::test(1, 'foobar');
     }
 
diff --git a/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php
index 4fd5752db222b7bb285e4381d60be6c8ce3083af..9537e1f1c473b428b5b016b796c94d84e1eaed90 100644
--- a/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/CsvFileLoaderTest.php
@@ -39,21 +39,17 @@ public function testLoadDoesNothingIfEmpty()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new CsvFileLoader();
         $resource = __DIR__.'/../fixtures/not-exists.csv';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadNonLocalResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new CsvFileLoader();
         $resource = 'http://example.com/resources.csv';
         $loader->load($resource, 'en', 'domain1');
diff --git a/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php
index 601680af8afd174239f3927fb07ac816f037d685..77db041f5d20c5f41cac701bad4e2ee5e170c1a6 100644
--- a/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/IcuDatFileLoaderTest.php
@@ -19,11 +19,9 @@
  */
 class IcuDatFileLoaderTest extends LocalizedTestCase
 {
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadInvalidResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new IcuDatFileLoader();
         $loader->load(__DIR__.'/../fixtures/resourcebundle/corrupted/resources', 'es', 'domain2');
     }
@@ -53,11 +51,9 @@ public function testDatFrenchLoad()
         $this->assertEquals([new FileResource($resource.'.dat')], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new IcuDatFileLoader();
         $loader->load(__DIR__.'/../fixtures/non-existing.txt', 'en', 'domain1');
     }
diff --git a/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php
index 962c3af2efeb271360995787102c7fe85d649b20..99b2f90421977dc6e427c7e7176e12f4b423a50d 100644
--- a/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/IcuResFileLoaderTest.php
@@ -31,20 +31,16 @@ public function testLoad()
         $this->assertEquals([new DirectoryResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new IcuResFileLoader();
         $loader->load(__DIR__.'/../fixtures/non-existing.txt', 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadInvalidResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new IcuResFileLoader();
         $loader->load(__DIR__.'/../fixtures/resourcebundle/corrupted', 'en', 'domain1');
     }
diff --git a/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php
index e0d8b2f4c4a09991bd9f083d7b93b817b3be55ec..fd66e2015ae52232ed58d92c7b2f4f570eda3419 100644
--- a/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/IniFileLoaderTest.php
@@ -39,11 +39,9 @@ public function testLoadDoesNothingIfEmpty()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new IniFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.ini';
         $loader->load($resource, 'en', 'domain1');
diff --git a/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php
index 4c507da5abdfc1347b8b761ed7d67521bbe1f688..d264bb16b29d940a9d7b3e96411c91535a7ed37f 100644
--- a/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/JsonFileLoaderTest.php
@@ -39,22 +39,18 @@ public function testLoadDoesNothingIfEmpty()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new JsonFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.json';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException           \Symfony\Component\Translation\Exception\InvalidResourceException
-     * @expectedExceptionMessage    Error parsing JSON - Syntax error, malformed JSON
-     */
     public function testParseException()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
+        $this->expectExceptionMessage('Error parsing JSON - Syntax error, malformed JSON');
         $loader = new JsonFileLoader();
         $resource = __DIR__.'/../fixtures/malformed.json';
         $loader->load($resource, 'en', 'domain1');
diff --git a/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php
index 63de5cebaa4dcf491389c3af2090375c1ad3b125..3fe3a9925b1959cd49778e621e68e57503f9a81e 100644
--- a/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/MoFileLoaderTest.php
@@ -34,26 +34,25 @@ public function testLoadPlurals()
         $resource = __DIR__.'/../fixtures/plurals.mo';
         $catalogue = $loader->load($resource, 'en', 'domain1');
 
-        $this->assertEquals(['foo' => 'bar', 'foos' => '{0} bar|{1} bars'], $catalogue->all('domain1'));
+        $this->assertEquals([
+            'foo|foos' => 'bar|bars',
+            '{0} no foos|one foo|%count% foos' => '{0} no bars|one bar|%count% bars',
+        ], $catalogue->all('domain1'));
         $this->assertEquals('en', $catalogue->getLocale());
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new MoFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.mo';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadInvalidResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new MoFileLoader();
         $resource = __DIR__.'/../fixtures/empty.mo';
         $loader->load($resource, 'en', 'domain1');
diff --git a/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php
index 68cb2d0b72b5102778e11c3bc5c88e6db4ea0896..d4da6452f656971421c88e9f0e420b1b6d836f4f 100644
--- a/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/PhpFileLoaderTest.php
@@ -28,21 +28,17 @@ public function testLoad()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new PhpFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.php';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadThrowsAnExceptionIfFileNotLocal()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new PhpFileLoader();
         $resource = 'http://example.com/resources.php';
         $loader->load($resource, 'en', 'domain1');
diff --git a/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php
index d8e2c1993ba1ce3f500f0aede5a71f555a56749a..72c4c6672315cc2375cd4e7ac13e9c8e31fad2e3 100644
--- a/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/PoFileLoaderTest.php
@@ -34,7 +34,10 @@ public function testLoadPlurals()
         $resource = __DIR__.'/../fixtures/plurals.po';
         $catalogue = $loader->load($resource, 'en', 'domain1');
 
-        $this->assertEquals(['foo' => 'bar', 'foos' => 'bar|bars'], $catalogue->all('domain1'));
+        $this->assertEquals([
+            'foo|foos' => 'bar|bars',
+            '{0} no foos|one foo|%count% foos' => '{0} no bars|one bar|%count% bars',
+        ], $catalogue->all('domain1'));
         $this->assertEquals('en', $catalogue->getLocale());
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
@@ -50,11 +53,9 @@ public function testLoadDoesNothingIfEmpty()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new PoFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.po';
         $loader->load($resource, 'en', 'domain1');
@@ -89,10 +90,8 @@ public function testEscapedIdPlurals()
         $catalogue = $loader->load($resource, 'en', 'domain1');
 
         $messages = $catalogue->all('domain1');
-        $this->assertArrayHasKey('escaped "foo"', $messages);
-        $this->assertArrayHasKey('escaped "foos"', $messages);
-        $this->assertEquals('escaped "bar"', $messages['escaped "foo"']);
-        $this->assertEquals('escaped "bar"|escaped "bars"', $messages['escaped "foos"']);
+        $this->assertArrayHasKey('escaped "foo"|escaped "foos"', $messages);
+        $this->assertEquals('escaped "bar"|escaped "bars"', $messages['escaped "foo"|escaped "foos"']);
     }
 
     public function testSkipFuzzyTranslations()
@@ -106,4 +105,16 @@ public function testSkipFuzzyTranslations()
         $this->assertArrayNotHasKey('foo2', $messages);
         $this->assertArrayHasKey('foo3', $messages);
     }
+
+    public function testMissingPlurals()
+    {
+        $loader = new PoFileLoader();
+        $resource = __DIR__.'/../fixtures/missing-plurals.po';
+        $catalogue = $loader->load($resource, 'en', 'domain1');
+
+        $this->assertEquals([
+            'foo|foos' => '-|bar|-|bars',
+        ], $catalogue->all('domain1'));
+        $this->assertEquals('en', $catalogue->getLocale());
+    }
 }
diff --git a/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php
index 08f55e9022b890fd782a82f6cb2d30d44fba504f..47462d6aab2c2037f71a05582355001137ee1862 100644
--- a/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/QtFileLoaderTest.php
@@ -28,31 +28,25 @@ public function testLoad()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new QtFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.ts';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadNonLocalResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new QtFileLoader();
         $resource = 'http://domain1.com/resources.ts';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadInvalidResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new QtFileLoader();
         $resource = __DIR__.'/../fixtures/invalid-xml-resources.xlf';
         $loader->load($resource, 'en', 'domain1');
@@ -63,12 +57,8 @@ public function testLoadEmptyResource()
         $loader = new QtFileLoader();
         $resource = __DIR__.'/../fixtures/empty.xlf';
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
-            $this->expectExceptionMessage(sprintf('Unable to load "%s".', $resource));
-        } else {
-            $this->setExpectedException('Symfony\Component\Translation\Exception\InvalidResourceException', sprintf('Unable to load "%s".', $resource));
-        }
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
+        $this->expectExceptionMessage(sprintf('Unable to load "%s".', $resource));
 
         $loader->load($resource, 'en', 'domain1');
     }
diff --git a/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php
index 7cb9f54fde2e226737847827004f5da458c35a67..3dcff7b09fbda374dec50c4d2b5c3db31f13ab71 100644
--- a/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/XliffFileLoaderTest.php
@@ -96,50 +96,40 @@ public function testTargetAttributesAreStoredCorrectly()
         $this->assertEquals('translated', $metadata['target-attributes']['state']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadInvalidResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new XliffFileLoader();
         $loader->load(__DIR__.'/../fixtures/resources.php', 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadResourceDoesNotValidate()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new XliffFileLoader();
         $loader->load(__DIR__.'/../fixtures/non-valid.xlf', 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new XliffFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.xlf';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadThrowsAnExceptionIfFileNotLocal()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new XliffFileLoader();
         $resource = 'http://example.com/resources.xlf';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Translation\Exception\InvalidResourceException
-     * @expectedExceptionMessage Document types are not allowed.
-     */
     public function testDocTypeIsNotAllowed()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
+        $this->expectExceptionMessage('Document types are not allowed.');
         $loader = new XliffFileLoader();
         $loader->load(__DIR__.'/../fixtures/withdoctype.xlf', 'en', 'domain1');
     }
@@ -149,12 +139,8 @@ public function testParseEmptyFile()
         $loader = new XliffFileLoader();
         $resource = __DIR__.'/../fixtures/empty.xlf';
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
-            $this->expectExceptionMessage(sprintf('Unable to load "%s":', $resource));
-        } else {
-            $this->setExpectedException('Symfony\Component\Translation\Exception\InvalidResourceException', sprintf('Unable to load "%s":', $resource));
-        }
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
+        $this->expectExceptionMessage(sprintf('Unable to load "%s":', $resource));
 
         $loader->load($resource, 'en', 'domain1');
     }
diff --git a/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php b/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php
index a535db56fc0e40751cbc9353bfaf1ec027749244..b46fff747000645558175d578448fa1be58dcd04 100644
--- a/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php
+++ b/vendor/symfony/translation/Tests/Loader/YamlFileLoaderTest.php
@@ -39,31 +39,25 @@ public function testLoadDoesNothingIfEmpty()
         $this->assertEquals([new FileResource($resource)], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
-     */
     public function testLoadNonExistingResource()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loader = new YamlFileLoader();
         $resource = __DIR__.'/../fixtures/non-existing.yml';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadThrowsAnExceptionIfFileNotLocal()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new YamlFileLoader();
         $resource = 'http://example.com/resources.yml';
         $loader->load($resource, 'en', 'domain1');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException
-     */
     public function testLoadThrowsAnExceptionIfNotAnArray()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidResourceException');
         $loader = new YamlFileLoader();
         $resource = __DIR__.'/../fixtures/non-valid.yml';
         $loader->load($resource, 'en', 'domain1');
diff --git a/vendor/symfony/translation/Tests/MessageCatalogueTest.php b/vendor/symfony/translation/Tests/MessageCatalogueTest.php
index 0f9c8d684e3baf4c9d303abf0fe3d98ef8304b6b..b78dbf42ec5a040192dfdc7f7c2b966863f73a3f 100644
--- a/vendor/symfony/translation/Tests/MessageCatalogueTest.php
+++ b/vendor/symfony/translation/Tests/MessageCatalogueTest.php
@@ -132,11 +132,9 @@ public function testAddFallbackCatalogue()
         $this->assertEquals([$r, $r1, $r2], $catalogue->getResources());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\LogicException
-     */
     public function testAddFallbackCatalogueWithParentCircularReference()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\LogicException');
         $main = new MessageCatalogue('en_US');
         $fallback = new MessageCatalogue('fr_FR');
 
@@ -144,11 +142,9 @@ public function testAddFallbackCatalogueWithParentCircularReference()
         $main->addFallbackCatalogue($fallback);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\LogicException
-     */
     public function testAddFallbackCatalogueWithFallbackCircularReference()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\LogicException');
         $fr = new MessageCatalogue('fr');
         $en = new MessageCatalogue('en');
         $es = new MessageCatalogue('es');
@@ -158,11 +154,9 @@ public function testAddFallbackCatalogueWithFallbackCircularReference()
         $en->addFallbackCatalogue($fr);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\LogicException
-     */
     public function testAddCatalogueWhenLocaleIsNotTheSameAsTheCurrentOne()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\LogicException');
         $catalogue = new MessageCatalogue('en');
         $catalogue->addCatalogue(new MessageCatalogue('fr', []));
     }
diff --git a/vendor/symfony/translation/Tests/MessageSelectorTest.php b/vendor/symfony/translation/Tests/MessageSelectorTest.php
index a887411eed453e6f38d7e0f990fa3c4837ad1f36..abb1d4847215c04c068de360a0d6d240471f2ba4 100644
--- a/vendor/symfony/translation/Tests/MessageSelectorTest.php
+++ b/vendor/symfony/translation/Tests/MessageSelectorTest.php
@@ -35,10 +35,10 @@ public function testReturnMessageIfExactlyOneStandardRuleIsGiven()
 
     /**
      * @dataProvider getNonMatchingMessages
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
      */
     public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         $selector = new MessageSelector();
 
         $selector->choose($id, $number, 'en');
diff --git a/vendor/symfony/translation/Tests/TranslatorCacheTest.php b/vendor/symfony/translation/Tests/TranslatorCacheTest.php
index 0213e222547827a78c354aa84d9bda9676775b53..6b23a9f1e9e2c186e919e09b60ea3f9f6bdb6f3f 100644
--- a/vendor/symfony/translation/Tests/TranslatorCacheTest.php
+++ b/vendor/symfony/translation/Tests/TranslatorCacheTest.php
@@ -11,6 +11,7 @@
 
 namespace Symfony\Component\Translation\Tests;
 
+use PHPUnit\Framework\MockObject\MockObject;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Config\Resource\SelfCheckingResourceInterface;
 use Symfony\Component\Translation\Loader\ArrayLoader;
@@ -95,7 +96,7 @@ public function testCatalogueIsReloadedWhenResourcesAreNoLongerFresh()
         $catalogue = new MessageCatalogue($locale, []);
         $catalogue->addResource(new StaleResource()); // better use a helper class than a mock, because it gets serialized in the cache and re-loaded
 
-        /** @var LoaderInterface|\PHPUnit_Framework_MockObject_MockObject $loader */
+        /** @var LoaderInterface|MockObject $loader */
         $loader = $this->getMockBuilder('Symfony\Component\Translation\Loader\LoaderInterface')->getMock();
         $loader
             ->expects($this->exactly(2))
diff --git a/vendor/symfony/translation/Tests/TranslatorTest.php b/vendor/symfony/translation/Tests/TranslatorTest.php
index ab6dc5b8d4d42eaa4176b6d87ca5ff57463283e0..77af7de33efea4a4bd152806a2c3db1562c51e3d 100644
--- a/vendor/symfony/translation/Tests/TranslatorTest.php
+++ b/vendor/symfony/translation/Tests/TranslatorTest.php
@@ -19,11 +19,11 @@
 class TranslatorTest extends TestCase
 {
     /**
-     * @dataProvider      getInvalidLocalesTests
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
+     * @dataProvider getInvalidLocalesTests
      */
     public function testConstructorInvalidLocale($locale)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         new Translator($locale);
     }
 
@@ -55,11 +55,11 @@ public function testSetGetLocale()
     }
 
     /**
-     * @dataProvider      getInvalidLocalesTests
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
+     * @dataProvider getInvalidLocalesTests
      */
     public function testSetInvalidLocale($locale)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         $translator = new Translator('fr');
         $translator->setLocale($locale);
     }
@@ -138,11 +138,11 @@ public function testSetFallbackLocalesMultiple()
     }
 
     /**
-     * @dataProvider      getInvalidLocalesTests
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
+     * @dataProvider getInvalidLocalesTests
      */
     public function testSetFallbackInvalidLocales($locale)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         $translator = new Translator('fr');
         $translator->setFallbackLocales(['fr', $locale]);
     }
@@ -170,11 +170,11 @@ public function testTransWithFallbackLocale()
     }
 
     /**
-     * @dataProvider      getInvalidLocalesTests
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
+     * @dataProvider getInvalidLocalesTests
      */
     public function testAddResourceInvalidLocales($locale)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         $translator = new Translator('fr');
         $translator->addResource('array', ['foo' => 'foofoo'], $locale);
     }
@@ -205,11 +205,11 @@ public function testAddResourceAfterTrans()
     }
 
     /**
-     * @dataProvider      getTransFileTests
-     * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException
+     * @dataProvider getTransFileTests
      */
     public function testTransWithoutFallbackLocaleFile($format, $loader)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\NotFoundResourceException');
         $loaderClass = 'Symfony\\Component\\Translation\\Loader\\'.$loader;
         $translator = new Translator('en');
         $translator->addLoader($format, new $loaderClass());
@@ -264,11 +264,9 @@ public function testTransNonExistentWithFallback()
         $this->assertEquals('non-existent', $translator->trans('non-existent'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Translation\Exception\RuntimeException
-     */
     public function testWhenAResourceHasNoRegisteredLoader()
     {
+        $this->expectException('Symfony\Component\Translation\Exception\RuntimeException');
         $translator = new Translator('en');
         $translator->addResource('array', ['foo' => 'foofoo'], 'en');
 
@@ -318,11 +316,11 @@ public function testTrans($expected, $id, $translation, $parameters, $locale, $d
     }
 
     /**
-     * @dataProvider      getInvalidLocalesTests
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
+     * @dataProvider getInvalidLocalesTests
      */
     public function testTransInvalidLocale($locale)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         $translator = new Translator('en');
         $translator->addLoader('array', new ArrayLoader());
         $translator->addResource('array', ['foo' => 'foofoo'], 'en');
@@ -331,7 +329,7 @@ public function testTransInvalidLocale($locale)
     }
 
     /**
-     * @dataProvider      getValidLocalesTests
+     * @dataProvider getValidLocalesTests
      */
     public function testTransValidLocale($locale)
     {
@@ -368,11 +366,11 @@ public function testTransChoice($expected, $id, $translation, $number, $paramete
     }
 
     /**
-     * @dataProvider      getInvalidLocalesTests
-     * @expectedException \Symfony\Component\Translation\Exception\InvalidArgumentException
+     * @dataProvider getInvalidLocalesTests
      */
     public function testTransChoiceInvalidLocale($locale)
     {
+        $this->expectException('Symfony\Component\Translation\Exception\InvalidArgumentException');
         $translator = new Translator('en');
         $translator->addLoader('array', new ArrayLoader());
         $translator->addResource('array', ['foo' => 'foofoo'], 'en');
@@ -381,7 +379,7 @@ public function testTransChoiceInvalidLocale($locale)
     }
 
     /**
-     * @dataProvider      getValidLocalesTests
+     * @dataProvider getValidLocalesTests
      */
     public function testTransChoiceValidLocale($locale)
     {
diff --git a/vendor/symfony/translation/Tests/fixtures/missing-plurals.po b/vendor/symfony/translation/Tests/fixtures/missing-plurals.po
new file mode 100644
index 0000000000000000000000000000000000000000..3b47fca805b911ffa1fe717fa1804fce42aae31e
--- /dev/null
+++ b/vendor/symfony/translation/Tests/fixtures/missing-plurals.po
@@ -0,0 +1,4 @@
+msgid "foo"
+msgid_plural "foos"
+msgstr[3] "bars"
+msgstr[1] "bar"
diff --git a/vendor/symfony/translation/Tests/fixtures/plurals.mo b/vendor/symfony/translation/Tests/fixtures/plurals.mo
index 6445e77beab595289cd154ea253c4e49dfd6af47..3945ad95beae6c9ce059cb8d5209c53653c47440 100644
Binary files a/vendor/symfony/translation/Tests/fixtures/plurals.mo and b/vendor/symfony/translation/Tests/fixtures/plurals.mo differ
diff --git a/vendor/symfony/translation/Tests/fixtures/plurals.po b/vendor/symfony/translation/Tests/fixtures/plurals.po
index 439c41ad7fef4bc29f09cb011c01e15e54b1c778..61d1ba42b41a1bed557b6edddea1de75bf4b1538 100644
--- a/vendor/symfony/translation/Tests/fixtures/plurals.po
+++ b/vendor/symfony/translation/Tests/fixtures/plurals.po
@@ -3,3 +3,5 @@ msgid_plural "foos"
 msgstr[0] "bar"
 msgstr[1] "bars"
 
+msgid "{0} no foos|one foo|%count% foos"
+msgstr "{0} no bars|one bar|%count% bars"
diff --git a/vendor/symfony/validator/ConstraintValidator.php b/vendor/symfony/validator/ConstraintValidator.php
index 35f41889eaee7a4e47ccfc29d7fa8c82bc6a4ec5..93cca2ea74a5ed4514e8ddeddcbffdf56c88e65a 100644
--- a/vendor/symfony/validator/ConstraintValidator.php
+++ b/vendor/symfony/validator/ConstraintValidator.php
@@ -85,12 +85,10 @@ protected function formatTypeOf($value)
      */
     protected function formatValue($value, $format = 0)
     {
-        $isDateTime = $value instanceof \DateTimeInterface;
-
-        if (($format & self::PRETTY_DATE) && $isDateTime) {
+        if (($format & self::PRETTY_DATE) && $value instanceof \DateTimeInterface) {
             if (class_exists('IntlDateFormatter')) {
                 $locale = \Locale::getDefault();
-                $formatter = new \IntlDateFormatter($locale, \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT);
+                $formatter = new \IntlDateFormatter($locale, \IntlDateFormatter::MEDIUM, \IntlDateFormatter::SHORT, $value->getTimezone());
 
                 // neither the native nor the stub IntlDateFormatter support
                 // DateTimeImmutable as of yet
diff --git a/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php b/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
index 3c95c097e8e9ae14cb1431d2194f27dd0719a869..cd96bc9df75f8a76ed73498d858b7b6dd00cd40a 100644
--- a/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
+++ b/vendor/symfony/validator/Constraints/AbstractComparisonValidator.php
@@ -64,15 +64,15 @@ public function validate($value, Constraint $constraint)
         // Convert strings to DateTimes if comparing another DateTime
         // This allows to compare with any date/time value supported by
         // the DateTime constructor:
-        // http://php.net/manual/en/datetime.formats.php
-        if (\is_string($comparedValue)) {
-            if ($value instanceof \DateTimeImmutable) {
-                // If $value is immutable, convert the compared value to a
-                // DateTimeImmutable too
-                $comparedValue = new \DateTimeImmutable($comparedValue);
-            } elseif ($value instanceof \DateTimeInterface) {
-                // Otherwise use DateTime
-                $comparedValue = new \DateTime($comparedValue);
+        // https://php.net/datetime.formats
+        if (\is_string($comparedValue) && $value instanceof \DateTimeInterface) {
+            // If $value is immutable, convert the compared value to a DateTimeImmutable too, otherwise use DateTime
+            $dateTimeClass = $value instanceof \DateTimeImmutable ? \DateTimeImmutable::class : \DateTime::class;
+
+            try {
+                $comparedValue = new $dateTimeClass($comparedValue);
+            } catch (\Exception $e) {
+                throw new ConstraintDefinitionException(sprintf('The compared value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $comparedValue, $dateTimeClass, \get_class($constraint)));
             }
         }
 
@@ -112,5 +112,6 @@ abstract protected function compareValues($value1, $value2);
      */
     protected function getErrorCode()
     {
+        return null;
     }
 }
diff --git a/vendor/symfony/validator/Constraints/CardSchemeValidator.php b/vendor/symfony/validator/Constraints/CardSchemeValidator.php
index 04abe81af3647d2553d3c2b5277a3d790dde1142..d39c87319a59420c136eb8929c534f420ea1258b 100644
--- a/vendor/symfony/validator/Constraints/CardSchemeValidator.php
+++ b/vendor/symfony/validator/Constraints/CardSchemeValidator.php
@@ -21,9 +21,8 @@
  * @author Tim Nagel <t.nagel@infinite.net.au>
  * @author Bernhard Schussek <bschussek@gmail.com>
  *
- * @see http://en.wikipedia.org/wiki/Bank_card_number
- * @see http://www.regular-expressions.info/creditcard.html
- * @see http://www.barclaycard.co.uk/business/files/Ranges_and_Rules_September_2014.pdf
+ * @see https://en.wikipedia.org/wiki/Payment_card_number
+ * @see https://www.regular-expressions.info/creditcard.html
  */
 class CardSchemeValidator extends ConstraintValidator
 {
@@ -87,8 +86,7 @@ class CardSchemeValidator extends ConstraintValidator
     /**
      * Validates a creditcard belongs to a specified scheme.
      *
-     * @param mixed      $value
-     * @param Constraint $constraint
+     * @param mixed $value
      */
     public function validate($value, Constraint $constraint)
     {
diff --git a/vendor/symfony/validator/Constraints/File.php b/vendor/symfony/validator/Constraints/File.php
index 5221857101af2ea9f386f6433d6fd49e3ffefc63..c70db0a74c4c1f56e3fdb81be1ac0b1eb887e57a 100644
--- a/vendor/symfony/validator/Constraints/File.php
+++ b/vendor/symfony/validator/Constraints/File.php
@@ -102,8 +102,10 @@ private function normalizeBinaryFormat($maxSize)
         $factors = [
             'k' => 1000,
             'ki' => 1 << 10,
-            'm' => 1000000,
+            'm' => 1000 * 1000,
             'mi' => 1 << 20,
+            'g' => 1000 * 1000 * 1000,
+            'gi' => 1 << 30,
         ];
         if (ctype_digit((string) $maxSize)) {
             $this->maxSize = (int) $maxSize;
diff --git a/vendor/symfony/validator/Constraints/FileValidator.php b/vendor/symfony/validator/Constraints/FileValidator.php
index d3e3833ab72c05c159086e0a51ef3d145cf9e2b4..0a58cd2d687a061bcba93c4abedaf455415bc7c8 100644
--- a/vendor/symfony/validator/Constraints/FileValidator.php
+++ b/vendor/symfony/validator/Constraints/FileValidator.php
@@ -60,7 +60,7 @@ public function validate($value, Constraint $constraint)
                         $binaryFormat = null === $constraint->binaryFormat ? true : $constraint->binaryFormat;
                     }
 
-                    list($sizeAsString, $limitAsString, $suffix) = $this->factorizeSizes(0, $limitInBytes, $binaryFormat);
+                    list(, $limitAsString, $suffix) = $this->factorizeSizes(0, $limitInBytes, $binaryFormat);
                     $this->context->buildViolation($constraint->uploadIniSizeErrorMessage)
                         ->setParameter('{{ limit }}', $limitAsString)
                         ->setParameter('{{ suffix }}', $suffix)
diff --git a/vendor/symfony/validator/Constraints/GroupSequence.php b/vendor/symfony/validator/Constraints/GroupSequence.php
index fc34ca1a458e2f69047b9a9ae7e6540b0d3967ab..be5bdc4bec402795563d1e9544e1b8af5c294725 100644
--- a/vendor/symfony/validator/Constraints/GroupSequence.php
+++ b/vendor/symfony/validator/Constraints/GroupSequence.php
@@ -28,7 +28,6 @@
  *
  * When adding metadata to a class, you can override the "Default" group of
  * that class with a group sequence:
- *
  *     /**
  *      * @GroupSequence({"Address", "Strict"})
  *      *\/
diff --git a/vendor/symfony/validator/Constraints/LuhnValidator.php b/vendor/symfony/validator/Constraints/LuhnValidator.php
index 6e69f9ee74c23278f0ef19318355f2b859e7a2cb..89ebfdcc5c54d32b669f6f6faf992d3196ab431b 100644
--- a/vendor/symfony/validator/Constraints/LuhnValidator.php
+++ b/vendor/symfony/validator/Constraints/LuhnValidator.php
@@ -32,8 +32,7 @@ class LuhnValidator extends ConstraintValidator
     /**
      * Validates a credit card number with the Luhn algorithm.
      *
-     * @param mixed      $value
-     * @param Constraint $constraint
+     * @param mixed $value
      *
      * @throws UnexpectedTypeException when the given credit card number is no string
      */
diff --git a/vendor/symfony/validator/Constraints/RangeValidator.php b/vendor/symfony/validator/Constraints/RangeValidator.php
index e0cb92a93e9ecb147e3f88a897e73a2cb5009017..ea7d2778088c309209fb227affc345a7b101c7d5 100644
--- a/vendor/symfony/validator/Constraints/RangeValidator.php
+++ b/vendor/symfony/validator/Constraints/RangeValidator.php
@@ -13,6 +13,7 @@
 
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
 
 /**
@@ -48,14 +49,28 @@ public function validate($value, Constraint $constraint)
         // Convert strings to DateTimes if comparing another DateTime
         // This allows to compare with any date/time value supported by
         // the DateTime constructor:
-        // http://php.net/manual/en/datetime.formats.php
+        // https://php.net/datetime.formats
         if ($value instanceof \DateTimeInterface) {
+            $dateTimeClass = null;
+
             if (\is_string($min)) {
-                $min = new \DateTime($min);
+                $dateTimeClass = $value instanceof \DateTimeImmutable ? \DateTimeImmutable::class : \DateTime::class;
+
+                try {
+                    $min = new $dateTimeClass($min);
+                } catch (\Exception $e) {
+                    throw new ConstraintDefinitionException(sprintf('The min value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $min, $dateTimeClass, \get_class($constraint)));
+                }
             }
 
             if (\is_string($max)) {
-                $max = new \DateTime($max);
+                $dateTimeClass = $dateTimeClass ?: ($value instanceof \DateTimeImmutable ? \DateTimeImmutable::class : \DateTime::class);
+
+                try {
+                    $max = new $dateTimeClass($max);
+                } catch (\Exception $e) {
+                    throw new ConstraintDefinitionException(sprintf('The max value "%s" could not be converted to a "%s" instance in the "%s" constraint.', $max, $dateTimeClass, \get_class($constraint)));
+                }
             }
         }
 
diff --git a/vendor/symfony/validator/Constraints/Regex.php b/vendor/symfony/validator/Constraints/Regex.php
index dc9e5ea8859d94b8a75829f7dcf7ebc8520cb26b..7627fad9aee7791d2db27ee2ea7ecf69e5867912 100644
--- a/vendor/symfony/validator/Constraints/Regex.php
+++ b/vendor/symfony/validator/Constraints/Regex.php
@@ -71,7 +71,7 @@ public function getHtmlPattern()
 
         // Quit if delimiters not at very beginning/end (e.g. when options are passed)
         if ($this->pattern[0] !== $this->pattern[\strlen($this->pattern) - 1]) {
-            return;
+            return null;
         }
 
         $delimiter = $this->pattern[0];
diff --git a/vendor/symfony/validator/Constraints/UrlValidator.php b/vendor/symfony/validator/Constraints/UrlValidator.php
index bdaef756bcc54cd4b72565a368d66a7f5bb5c483..b77701dd7ecec73ecfbf41af1c02c72b2999b1a2 100644
--- a/vendor/symfony/validator/Constraints/UrlValidator.php
+++ b/vendor/symfony/validator/Constraints/UrlValidator.php
@@ -25,7 +25,7 @@ class UrlValidator extends ConstraintValidator
             (%s)://                                 # protocol
             (([\.\pL\pN-]+:)?([\.\pL\pN-]+)@)?      # basic auth
             (
-                ([\pL\pN\pS\-\.])+(\.?([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name
+                ([\pL\pN\pS\-\_\.])+(\.?([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name
                     |                                                 # or
                 \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}                    # an IP address
                     |                                                 # or
diff --git a/vendor/symfony/validator/Constraints/ValidValidator.php b/vendor/symfony/validator/Constraints/ValidValidator.php
index cc10ec5204efc862ab4a5316a7781c41e7e74f79..695ec822540ed622cab3160ce33c6302fdb9823c 100644
--- a/vendor/symfony/validator/Constraints/ValidValidator.php
+++ b/vendor/symfony/validator/Constraints/ValidValidator.php
@@ -33,6 +33,6 @@ public function validate($value, Constraint $constraint)
         $this->context
             ->getValidator()
             ->inContext($this->context)
-            ->validate($value, null, [$this->context->getGroup()]);
+            ->validate($value, null, $this->context->getGroup());
     }
 }
diff --git a/vendor/symfony/validator/Context/ExecutionContextInterface.php b/vendor/symfony/validator/Context/ExecutionContextInterface.php
index 2ab625b1561a1c29be8f6606cd83c39b86d7bc25..09137f8511afa98b7f83ad20a1d88bec04b783a6 100644
--- a/vendor/symfony/validator/Context/ExecutionContextInterface.php
+++ b/vendor/symfony/validator/Context/ExecutionContextInterface.php
@@ -283,7 +283,7 @@ public function getMetadata();
     /**
      * Returns the validation group that is currently being validated.
      *
-     * @return string The current validation group
+     * @return string|null The current validation group
      */
     public function getGroup();
 
diff --git a/vendor/symfony/validator/README.md b/vendor/symfony/validator/README.md
index 3ccb2901adeacf5ba28df3bfa09edf7cd66d85a6..410a4213eef079f8f61b28fd866102c24a2d8346 100644
--- a/vendor/symfony/validator/README.md
+++ b/vendor/symfony/validator/README.md
@@ -13,4 +13,4 @@ Resources
     [send Pull Requests](https://github.com/symfony/symfony/pulls)
     in the [main Symfony repository](https://github.com/symfony/symfony)
 
-[1]: http://jcp.org/en/jsr/detail?id=303
+[1]: https://jcp.org/en/jsr/detail?id=303
diff --git a/vendor/symfony/validator/Resources/translations/validators.az.xlf b/vendor/symfony/validator/Resources/translations/validators.az.xlf
index add868cd42b40e3fb3f3ca65089bb1e2c524af2b..c3420f3db2a94a06efb7f00fd9a0b21c7c11619f 100644
--- a/vendor/symfony/validator/Resources/translations/validators.az.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.az.xlf
@@ -222,6 +222,150 @@
                 <source>Unsupported card type or invalid card number.</source>
                 <target>Dəstəklənməyən kart tipi və ya yanlış kart nömrəsi.</target>
             </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Bu dəyər doğru bir Beynəlxalq Bank Hesap Nömrəsi (IBAN) deyil.</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Bu dəyər doğru bir ISBN-10 deyil.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Bu dəyər doğru bir ISBN-13 deyil.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Bu dəyər doğru bir ISBN-10 və ya ISBN-13 deyil.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Bu dəyər doğru bir ISSN deyil.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Bu dəyər doğru bir valyuta deyil.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value }} ilə bərabər olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value }} dəyərindən büyük olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value }} ilə bərabər və ya daha böyük olmaldır.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value_type }} {{ compared_value }} ilə eyni olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value }} dəyərindən kiçik olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value }} dəyərindən kiçik və ya bərabər olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Bu değer {{ compared_value }} ile eşit olmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compared_value_type }} {{ compared_value }} ilə eyni olmamalıdır.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Şəkil nisbəti çox büyükdür ({{ ratio }}). İcazə verilən maksimum nisbət: {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Şəkil nisbəti çox balacadır ({{ ratio }}). İcazə verilən minimum nisbət: {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Şəkil kvadratdır ({{ width }}x{{ height }}px). Kvadrat şəkillərə icazə verilmir.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Şəkil albom rejimindədir ({{ width }}x{{ height }}px). Albom rejimli şəkillərə icazə verilmir.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Şəkil portret rejimindədir ({{ width }}x{{ height }}px). Portret rejimli şəkillərə icazə verilmir.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Boş fayla icazə verilmir.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Ünvan tapılmadı.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Bu dəyər gözlənilən {{ charset }} simvol cədvəli ilə uyğun gəlmir.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>Bu dəyər doğru bir Biznes Təyinedici Kodu (BIC) deyil.</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Xəta</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Bu dəyər doğru bir UUID deyil.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Bu dəyər {{ compare_value }} dəyərinin bölənlərindən biri olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Bu Biznes Təyinedici Kodu (BIC) {{ iban }} IBAN kodu ilə əlaqəli deyil.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Bu dəyər doğru bir JSON olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Bu kolleksiyada sadəcə unikal elementlər olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Bu dəyər müsbət olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Bu dəyər müsbət və ya sıfır olmalıdır.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Bu dəyər mənfi olmaldır.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Bu dəyər mənfi və ya sıfır olmaldır.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Bu dəyər doğru bir zaman zolağı deyil.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Bu parol data oğurluğunda tapıldığı üçün işlədilməməlidir. Zəhmət olmasa, başqa parol seçin.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Bu dəyər {{ min }} və {{ max }} arasında olmaldır.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.da.xlf b/vendor/symfony/validator/Resources/translations/validators.da.xlf
index 3a545c80b64096b7df8c2eb54a220722fc49f8a8..2bc33a7b437cd8fd768cb8f80ce9bd413ea64a2c 100644
--- a/vendor/symfony/validator/Resources/translations/validators.da.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.da.xlf
@@ -242,10 +242,130 @@
                 <source>This value is not a valid ISSN.</source>
                 <target>Værdien er ikke en gyldig ISSN.</target>
             </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Denne værdi er ikke en gyldig valuta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Denne værdi skal være lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Denne værdi skal være større end {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Denne værdi skal være større end eller lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Denne værdi skal være identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Denne værdi skal være mindre end {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Denne værdi skal være mindre end eller lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Denne værdi bør ikke være lig med {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Denne værdi bør ikke være identisk med {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Billedforholdet er for stort ({{ratio}}). Tilladt maksimumsforhold er {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Billedforholdet er for lille ({{ ratio }}). Minimumsforventet forventet er {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Billedet er firkantet ({{ width }} x {{ height }} px). Firkantede billeder er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Billedet er landskabsorienteret ({{width}} x {{height}} px). Landskabsorienterede billeder er ikke tilladt</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Billedet er portrætorienteret ({{ width }}x{{ height }}px). Portrætorienterede billeder er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>En tom fil er ikke tilladt.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Værten kunne ikke løses.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Denne værdi stemmer ikke overens med den forventede {{ charset }} charset.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>Dette er ikke en gyldig Business Identifier Code (BIC).a</target>
+            </trans-unit>
             <trans-unit id="82">
                 <source>Error</source>
                 <target>Fejl</target>
             </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Dette er ikke en gyldig UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Denne værdi skal være et flertal af {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Denne Business Identifier Code (BIC) er ikke forbundet med IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Denne værdi skal være gyldig JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Denne samling bør kun indeholde unikke elementer.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Denne værdi skal være positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Denne værdi skal være enten positiv eller nul.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Denne værdi skal være negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Denne værdi skal være enten negativ eller nul.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Denne værdi er ikke en gyldig tidszone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Denne adgangskode er blevet lækket i et databrud, det må ikke bruges. Brug venligst en anden adgangskode.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Værdien skal være mellem {{ min }} og {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.de.xlf b/vendor/symfony/validator/Resources/translations/validators.de.xlf
index f33e4d602ca1538051cc03655657b0515a5600ec..8ee3120482267ce12a21ce816e156f756825141c 100644
--- a/vendor/symfony/validator/Resources/translations/validators.de.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.de.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>Dieses Passwort ist Teil eines Datenlecks, es darf nicht verwendet werden.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Dieser Wert sollte zwischen {{ min }} und {{ max }} sein.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.en.xlf b/vendor/symfony/validator/Resources/translations/validators.en.xlf
index d5d9d20997fc0c89ba4d77d748ea303d35a35b4c..100d552076f2c883c1ee2094eb56d3f467ab0a38 100644
--- a/vendor/symfony/validator/Resources/translations/validators.en.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.en.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>This password has been leaked in a data breach, it must not be used. Please use another password.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>This value should be between {{ min }} and {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.es.xlf b/vendor/symfony/validator/Resources/translations/validators.es.xlf
index f248f1cf3f20b53fb1095068189b3c26285fe061..75cb60605a6b3851705587b140fbec2df0cf5094 100644
--- a/vendor/symfony/validator/Resources/translations/validators.es.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.es.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>Esta contraseña no se puede utilizar porque está incluida en un listado de contraseñas públicas obtenido gracias a fallos de seguridad de otros sitios y aplicaciones. Por favor utilice otra contraseña.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Este valor debe estar entre {{ min }} y {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.et.xlf b/vendor/symfony/validator/Resources/translations/validators.et.xlf
index d047c8bb9ef82215709bcb8ad0dca42d01a36c88..84c24720dae3cc6048212df289513c91469a4b96 100644
--- a/vendor/symfony/validator/Resources/translations/validators.et.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.et.xlf
@@ -278,6 +278,18 @@
                 <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
                 <target>Väärtus ei tohiks olla identne väärtusega {{ compared_value_type }} {{ compared_value }}.</target>
             </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Kuvasuhe on liiga suur ({{ ratio }}). Lubatud maksimaalne suhe on {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Kuvasuhe on liiga väike ({{ ratio }}). Oodatav minimaalne suhe on {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Pilt on ruudukujuline ({{ width }}x{{ height }}px). Ruudukujulised pildid pole lubatud.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.fa.xlf b/vendor/symfony/validator/Resources/translations/validators.fa.xlf
index ff1aa7c0b1ec0d0475ad3f817c0bac47020e2093..c0b42096b5bd7b4fdca7ab5156a26b45a550628a 100644
--- a/vendor/symfony/validator/Resources/translations/validators.fa.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.fa.xlf
@@ -16,19 +16,19 @@
             </trans-unit>
             <trans-unit id="4">
                 <source>This value should be blank.</source>
-                <target>این فیلد باید خالی باشد.</target>
+                <target>این مقدار باید خالی باشد.</target>
             </trans-unit>
             <trans-unit id="5">
                 <source>The value you selected is not a valid choice.</source>
-                <target>گزینه انتخابی معتبر نیست.</target>
+                <target>مقدار انتخاب شده شامل گزینه های معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="6">
                 <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
-                <target>باید حداقل {{ limit }} گزینه انتخاب کنید.|باید حداقل {{ limit }} گزینه انتخاب کنید.</target>
+                <target>باید حداقل {{ limit }} گزینه انتخاب نمایید.|باید حداقل {{ limit }} گزینه انتخاب نمایید.</target>
             </trans-unit>
             <trans-unit id="7">
                 <source>You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.</source>
-                <target>حداکثر {{ limit }} گزینه می توانید انتخاب کنید.|حداکثر {{ limit }} گزینه می توانید انتخاب کنید.</target>
+                <target>حداکثر {{ limit }} گزینه می توانید انتخاب نمایید.|حداکثر {{ limit }} گزینه می توانید انتخاب نمایید.</target>
             </trans-unit>
             <trans-unit id="8">
                 <source>One or more of the given values is invalid.</source>
@@ -36,7 +36,7 @@
             </trans-unit>
             <trans-unit id="9">
                 <source>The fields {{ fields }} were not expected.</source>
-                <target>فیلدهای {{ fields }} اضافی هستند.</target>
+                <target>فیلدهای {{ fields }} شامل فیلدهای مورد انتظار نمی باشند.</target>
             </trans-unit>
             <trans-unit id="10">
                 <source>The fields {{ fields }} are missing.</source>
@@ -44,87 +44,87 @@
             </trans-unit>
             <trans-unit id="11">
                 <source>This value is not a valid date.</source>
-                <target>این مقدار یک تاریخ معتبر نیست.</target>
+                <target>این مقدار یک تاریخ معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="12">
                 <source>This value is not a valid datetime.</source>
-                <target>این مقدار یک تاریخ و زمان معتبر نیست.</target>
+                <target>این مقدار یک تاریخ و زمان معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="13">
                 <source>This value is not a valid email address.</source>
-                <target>این یک رایانامه معتبر نیست.</target>
+                <target>این یک رایانامه معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="14">
                 <source>The file could not be found.</source>
-                <target>فایل پیدا نشد.</target>
+                <target>فایل یافت نشد.</target>
             </trans-unit>
             <trans-unit id="15">
                 <source>The file is not readable.</source>
-                <target>فایل قابلیت خواندن ندارد.</target>
+                <target>پرونده خواندنی نمی باشد.</target>
             </trans-unit>
             <trans-unit id="16">
                 <source>The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.</source>
-                <target>فایل بیش از اندازه بزرگ است({{ size }} {{ suffix }}). حداکثر اندازه مجاز برابر {{ limit }} {{ suffix }} است.</target>
+                <target>فایل بیش از اندازه بزرگ است({{ size }} {{ suffix }}). حداکثر اندازه مجاز برابر با {{ limit }} {{ suffix }} می باشد.</target>
             </trans-unit>
             <trans-unit id="17">
                 <source>The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.</source>
-                <target>این نوع فایل مجاز نیست({{ type }}). نوع های مجاز {{ types }} هستند.</target>
+                <target>این نوع فایل مجاز نمی باشد({{ type }}). نوع های مجاز شامل {{ types }} می باشند.</target>
             </trans-unit>
             <trans-unit id="18">
                 <source>This value should be {{ limit }} or less.</source>
-                <target>این مقدار باید کوچکتر یا مساوی {{ limit }} باشد.</target>
+                <target>این مقدار باید کوچکتر و یا مساوی {{ limit }} باشد.</target>
             </trans-unit>
             <trans-unit id="19">
                 <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
-                <target>بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} است.|بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} است.</target>
+                <target>بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} می باشد.|بسیار طولانی است.حداکثر تعداد حروف مجاز برابر {{ limit }} می باشد.</target>
             </trans-unit>
             <trans-unit id="20">
                 <source>This value should be {{ limit }} or more.</source>
-                <target>این مقدار باید برابر و یا بیشتر از {{ limit }} باشد.</target>
+                <target>این مقدار باید بزرگتر و یا مساوی {{ limit }} باشد.</target>
             </trans-unit>
             <trans-unit id="21">
                 <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
-                <target>بسیار کوتاه است.تعداد حروف باید حداقل {{ limit }} باشد.|بسیار کوتاه است.تعداد حروف باید حداقل {{ limit }} باشد.</target>
+                <target>مقدار وارد شده بسیار کوتاه است.تعداد حروف وارد شده، باید حداقل شامل {{ limit }} کاراکتر باشد.|مقدار وارد شده بسیار کوتاه است.تعداد حروف وارد شده، باید حداقل شامل {{ limit }} کاراکتر باشد.</target>
             </trans-unit>
             <trans-unit id="22">
                 <source>This value should not be blank.</source>
-                <target>این مقدار نباید تهی باشد.</target>
+                <target>این مقدار نباید خالی باشد.</target>
             </trans-unit>
             <trans-unit id="23">
                 <source>This value should not be null.</source>
-                <target>باید مقداری داشته باشد..</target>
+                <target>این مقدار باید شامل چیزی باشد.</target>
             </trans-unit>
             <trans-unit id="24">
                 <source>This value should be null.</source>
-                <target>نباید مقداری داشته باشد.</target>
+                <target>این مقدار باید شامل چیزی نباشد.</target>
             </trans-unit>
             <trans-unit id="25">
                 <source>This value is not valid.</source>
-                <target>این مقدار معتبر نیست.</target>
+                <target>این مقدار معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="26">
                 <source>This value is not a valid time.</source>
-                <target>این مقدار یک زمان صحیح نیست.</target>
+                <target>این مقدار یک زمان صحیح نمی باشد.</target>
             </trans-unit>
             <trans-unit id="27">
                 <source>This value is not a valid URL.</source>
-                <target>این یک URL معتبر نیست.</target>
+                <target>این مقدار شامل یک URL معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="31">
                 <source>The two values should be equal.</source>
-                <target>دو مقدار باید برابر باشند.</target>
+                <target>دو مقدار باید با یکدیگر برابر باشند.</target>
             </trans-unit>
             <trans-unit id="32">
                 <source>The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.</source>
-                <target>فایل بیش از اندازه بزرگ است. حداکثر اندازه مجاز برابر {{ limit }} {{ suffix }} است.</target>
+                <target>فایل بیش از اندازه بزرگ است. حداکثر اندازه مجاز برابر با {{ limit }} {{ suffix }} می باشد.</target>
             </trans-unit>
             <trans-unit id="33">
                 <source>The file is too large.</source>
-                <target>فایل بیش از اندازه بزرگ است.</target>
+                <target>فایل بیش از اندازه بزرگ می باشد.</target>
             </trans-unit>
             <trans-unit id="34">
                 <source>The file could not be uploaded.</source>
-                <target>بارگذاری فایل با شکست مواجه شد.</target>
+                <target>بارگذاری فایل با شکست مواجه گردید.</target>
             </trans-unit>
             <trans-unit id="35">
                 <source>This value should be a valid number.</source>
@@ -132,23 +132,23 @@
             </trans-unit>
             <trans-unit id="36">
                 <source>This file is not a valid image.</source>
-                <target>این فایل یک تصویر نیست.</target>
+                <target>این فایل یک تصویر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="37">
                 <source>This is not a valid IP address.</source>
-                <target>این مقدار یک IP معتبر نیست.</target>
+                <target>این مقدار یک IP معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="38">
                 <source>This value is not a valid language.</source>
-                <target>این مقدار یک زبان صحیح نیست.</target>
+                <target>این مقدار یک زبان صحیح نمی باشد.</target>
             </trans-unit>
             <trans-unit id="39">
                 <source>This value is not a valid locale.</source>
-                <target>این مقدار یک محل صحیح نیست.</target>
+                <target>این مقدار یک محل صحیح نمی باشد.</target>
             </trans-unit>
             <trans-unit id="40">
                 <source>This value is not a valid country.</source>
-                <target>این مقدار یک کشور صحیح نیست.</target>
+                <target>این مقدار یک کشور صحیح نمی باشد.</target>
             </trans-unit>
             <trans-unit id="41">
                 <source>This value is already used.</source>
@@ -156,23 +156,23 @@
             </trans-unit>
             <trans-unit id="42">
                 <source>The size of the image could not be detected.</source>
-                <target>اندازه تصویر قابل شناسایی نیست.</target>
+                <target>اندازه تصویر قابل شناسایی نمی باشد.</target>
             </trans-unit>
             <trans-unit id="43">
                 <source>The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.</source>
-                <target>طول تصویر بسیار بزرگ است ({{ width }}px). بشینه طول مجاز {{ max_width }}px است.</target>
+                <target>طول تصویر بسیار بزرگ است({{ width }}px). بیشینه طول مجاز {{ max_width }}px می باشد.</target>
             </trans-unit>
             <trans-unit id="44">
                 <source>The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.</source>
-                <target>طول تصویر بسیار کوچک است ({{ width }}px). کمینه طول موردنظر {{ min_width }}px است.</target>
+                <target>طول تصویر بسیار کوچک است({{ width }}px). کمینه طول موردنظر {{ min_width }}px می باشد.</target>
             </trans-unit>
             <trans-unit id="45">
                 <source>The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.</source>
-                <target>ارتفاع تصویر بسیار بزرگ است ({{ height }}px). بشینه ارتفاع مجاز {{ max_height }}px است.</target>
+                <target>ارتفاع تصویر بسیار بزرگ است({{ height }}px). بیشینه ارتفاع مجاز {{ max_height }}px می باشد.</target>
             </trans-unit>
             <trans-unit id="46">
                 <source>The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.</source>
-                <target>ارتفاع تصویر بسیار کوچک است ({{ height }}px). کمینه ارتفاع موردنظر {{ min_height }}px است.</target>
+                <target>ارتفاع تصویر بسیار کوچک است({{ height }}px). کمینه ارتفاع موردنظر {{ min_height }}px می باشد.</target>
             </trans-unit>
             <trans-unit id="47">
                 <source>This value should be the user's current password.</source>
@@ -184,67 +184,67 @@
             </trans-unit>
             <trans-unit id="49">
                 <source>The file was only partially uploaded.</source>
-                <target>فایل به صورت جزیی بارگذاری شده است.</target>
+                <target>پرونده به صورت جزیی بارگذاری گردیده است.</target>
             </trans-unit>
             <trans-unit id="50">
                 <source>No file was uploaded.</source>
-                <target>هیچ فایلی بارگذاری نشد.</target>
+                <target>هیچ پرونده ای بارگذاری نگردیده است.</target>
             </trans-unit>
             <trans-unit id="51">
                 <source>No temporary folder was configured in php.ini.</source>
-                <target>فولدر موقت در php.ini پیکربندی نشده است.</target>
+                <target>پوشه موقتی در php.ini پیکربندی نگردیده است.</target>
             </trans-unit>
             <trans-unit id="52">
                 <source>Cannot write temporary file to disk.</source>
-                <target>فایل موقت را نمی توان در دیسک نوشت.</target>
+                <target>فایل موقتی را نمی توان در دیسک نوشت.</target>
             </trans-unit>
             <trans-unit id="53">
                 <source>A PHP extension caused the upload to fail.</source>
-                <target>اکستنشن PHP موجب شد که بارگذاری فایل با شکست مواجه شود.</target>
+                <target>یک اکستنشن PHP موجب شد که بارگذاری فایل با شکست مواجه گردد.</target>
             </trans-unit>
             <trans-unit id="54">
                 <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
-                <target>این مجموعه می بایست دارای {{ limit }} عنصر یا بیشتر باشد.|این مجموعه می بایست دارای {{ limit }} عنصر یا بیشتر باشد.</target>
+                <target>این مجموعه می بایست دارای حداقل {{ limit }} عنصر یا بیشتر باشد.|این مجموعه می بایست دارای حداقل {{ limit }} عنصر یا بیشتر باشد.</target>
             </trans-unit>
             <trans-unit id="55">
                 <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
-                <target>این مجموعه می بایست دارای حداقل {{ limit }} عنصر یا کمتر باشد.|این مجموعه می بایست دارای {{ limit }} عنصر یا کمتر باشد.</target>
+                <target>این مجموعه می بایست دارای حداکثر {{ limit }} عنصر یا کمتر باشد.|این مجموعه می بایست دارای حداکثر {{ limit }} عنصر یا کمتر باشد.</target>
             </trans-unit>
             <trans-unit id="56">
                 <source>This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.</source>
-                <target>این مجموعه می بایست به طور دقیق دارا {{ limit }} عنصر باشد.|این مجموعه می بایست به طور دقیق دارای {{ limit }} قلم باشد.</target>
+                <target>این مجموعه می بایست به طور دقیق دارای {{ limit }} عنصر باشد.|این مجموعه می بایست به طور دقیق دارای {{ limit }} عنصر باشد.</target>
             </trans-unit>
             <trans-unit id="57">
                 <source>Invalid card number.</source>
-                <target>شماره کارت نامعتبر است.</target>
+                <target>شماره کارت نامعتبر می باشد.</target>
             </trans-unit>
             <trans-unit id="58">
                 <source>Unsupported card type or invalid card number.</source>
-                <target>نوع کارت پشتیبانی نمی شود یا شماره کارت نامعتبر است.</target>
+                <target>نوع کارت پشتیبانی نمی شود و یا شماره کارت نامعتبر می باشد.</target>
             </trans-unit>
             <trans-unit id="59">
                 <source>This is not a valid International Bank Account Number (IBAN).</source>
-                <target>این یک شماره حساب بین المللی بانک (IBAN) درست نیست.</target>
+                <target>این یک شماره حساب بانک بین المللی معتبر نمی باشد(IBAN).</target>
             </trans-unit>
             <trans-unit id="60">
                 <source>This value is not a valid ISBN-10.</source>
-                <target>این مقدار یک ISBN-10 درست نیست.</target>
+                <target>این مقدار یک ISBN-10 معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="61">
                 <source>This value is not a valid ISBN-13.</source>
-                <target>این مقدار یک ISBN-13 درست نیست.</target>
+                <target>این مقدار یک ISBN-13 معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="62">
                 <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
-                <target>این مقدار یک ISBN-10 درست یا ISBN-13 درست نیست.</target>
+                <target>این مقدار یک ISBN-10 صحیح و یا ISBN-13 معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="63">
                 <source>This value is not a valid ISSN.</source>
-                <target>این مقدار یک ISSN درست نیست.</target>
+                <target>این مقدار یک ISSN معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="64">
                 <source>This value is not a valid currency.</source>
-                <target>این مقدار یک یکای پول درست نیست.</target>
+                <target>این مقدار یک واحد پول معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="65">
                 <source>This value should be equal to {{ compared_value }}.</source>
@@ -256,11 +256,11 @@
             </trans-unit>
             <trans-unit id="67">
                 <source>This value should be greater than or equal to {{ compared_value }}.</source>
-                <target>این مقدار باید بزرگتر یا مساوی با {{ compared_value }} باشد.</target>
+                <target>این مقدار باید بزرگتر و یا مساوی با {{ compared_value }} باشد.</target>
             </trans-unit>
             <trans-unit id="68">
                 <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
-                <target>این مقدار باید با {{ compared_value_type }} {{ compared_value }} یکی باشد.</target>
+                <target>این مقدار باید با {{ compared_value_type }} {{ compared_value }} یکسان باشد.</target>
             </trans-unit>
             <trans-unit id="69">
                 <source>This value should be less than {{ compared_value }}.</source>
@@ -268,7 +268,7 @@
             </trans-unit>
             <trans-unit id="70">
                 <source>This value should be less than or equal to {{ compared_value }}.</source>
-                <target>این مقدار باید کمتر یا مساوی با {{ compared_value }} باشد.</target>
+                <target>این مقدار باید کمتر و یا مساوی با {{ compared_value }} باشد.</target>
             </trans-unit>
             <trans-unit id="71">
                 <source>This value should not be equal to {{ compared_value }}.</source>
@@ -276,43 +276,43 @@
             </trans-unit>
             <trans-unit id="72">
                 <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
-                <target>این مقدار نباید {{ compared_value_type }} {{ compared_value }} یکی باشد.</target>
+                <target>این مقدار نباید با {{ compared_value_type }} {{ compared_value }} یکسان باشد.</target>
             </trans-unit>
             <trans-unit id="73">
                 <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
-                <target>ابعاد {{ ratio }} عکس بیش از حد بزرگ است.حداکثر ابعاد مجاز {{ max_ratio }} است.</target>
+                <target>ابعاد({{ ratio }}) عکس بیش از حد بزرگ است.حداکثر ابعاد مجاز {{ max_ratio }} می باشد.</target>
             </trans-unit>
             <trans-unit id="74">
                 <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
-                <target>ابعاد {{ ratio }} عکس بیش از حد کوچک است.حداقل ابعاد مجاز {{ min_ratio }} است.</target>
+                <target>ابعاد({{ ratio }}) عکس بیش از حد کوچک است.حداقل ابعاد مجاز {{ min_ratio }} می باشد.</target>
             </trans-unit>
             <trans-unit id="75">
                 <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
-                <target>این عکس مربع width }}x{{ height }}px}} می باشد.عکس مربع مجاز نمی باشد.</target>
+                <target>این تصویر یک مربع({{ width }}x{{ height }}px) می باشد. تصویر مربع مجاز نمی باشد.</target>
             </trans-unit>
             <trans-unit id="76">
                 <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
-                <target>این عکس افقی width }}x{{ height }}px}} می باشد.عکس افقی مجاز نمی باشد.</target>
+                <target>این تصویر افقی({{ width }}x{{ height }}px) می باشد. تصویر افقی مجاز نمی باشد.</target>
             </trans-unit>
             <trans-unit id="77">
                 <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
-                <target>این عکس عمودی width }}x{{ height }}px}} می باشد.عکس عمودی مجاز نمی باشد.</target>
+                <target>این تصویر عمودی({{ width }}x{{ height }}px) می باشد. تصویر عمودی مجاز نمی باشد.</target>
             </trans-unit>
             <trans-unit id="78">
                 <source>An empty file is not allowed.</source>
-                <target>فایل خالی مجاز نمی باشد.</target>
+                <target>پرونده خالی مجاز نمی باشد.</target>
             </trans-unit>
             <trans-unit id="79">
                 <source>The host could not be resolved.</source>
-                <target>هاست قابل حل نیست.</target>
+                <target>میزبان قابل حل نمی باشد.</target>
             </trans-unit>
             <trans-unit id="80">
                 <source>This value does not match the expected {{ charset }} charset.</source>
-                <target>این مقدار مورد نظر نمی باشد. مقدار مورد نظر {{ charset }} می باشد.</target>
+                <target>این مقدار مطابق با مقدار مورد انتظار {{ charset }} نمی باشد.</target>
             </trans-unit>
             <trans-unit id="81">
                 <source>This is not a valid Business Identifier Code (BIC).</source>
-                <target>این مقدار یک BIC درست نیست.</target>
+                <target>این مقدار یک(BIC) معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="82">
                 <source>Error</source>
@@ -320,7 +320,7 @@
             </trans-unit>
             <trans-unit id="83">
                 <source>This is not a valid UUID.</source>
-                <target>این مقدار یک UUID درست نیست.</target>
+                <target>این مقدار یک UUID معتبر نمی باشد.</target>
             </trans-unit>
             <trans-unit id="84">
                 <source>This value should be a multiple of {{ compared_value }}.</source>
@@ -328,7 +328,7 @@
             </trans-unit>
             <trans-unit id="85">
                 <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
-                <target>این BIC با IBAN ارتباط ندارد.</target>
+                <target>این(BIC) با IBAN ارتباطی ندارد.</target>
             </trans-unit>
         </body>
     </file>
diff --git a/vendor/symfony/validator/Resources/translations/validators.fi.xlf b/vendor/symfony/validator/Resources/translations/validators.fi.xlf
index e4390981dfda10579ccf042da6d6a1130567ec43..d35bff2c6e8e7066377a0bf13d69defe1f01d3d1 100644
--- a/vendor/symfony/validator/Resources/translations/validators.fi.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.fi.xlf
@@ -222,10 +222,150 @@
                 <source>Unsupported card type or invalid card number.</source>
                 <target>Tätä korttityyppiä ei tueta tai korttinumero on virheellinen.</target>
             </trans-unit>
+            <trans-unit id="59">
+                <source>This is not a valid International Bank Account Number (IBAN).</source>
+                <target>Arvo ei ole kelvollinen kansainvälinen pankkitilinumero (IBAN).</target>
+            </trans-unit>
+            <trans-unit id="60">
+                <source>This value is not a valid ISBN-10.</source>
+                <target>Arvo ei ole kelvollinen ISBN-10.</target>
+            </trans-unit>
+            <trans-unit id="61">
+                <source>This value is not a valid ISBN-13.</source>
+                <target>Arvo ei ole kelvollinen ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="62">
+                <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
+                <target>Arvo ei ole kelvollinen ISBN-10 tai kelvollinen ISBN-13.</target>
+            </trans-unit>
+            <trans-unit id="63">
+                <source>This value is not a valid ISSN.</source>
+                <target>Arvo ei ole kelvollinen ISSN.</target>
+            </trans-unit>
+            <trans-unit id="64">
+                <source>This value is not a valid currency.</source>
+                <target>Arvo ei ole kelvollinen valuutta.</target>
+            </trans-unit>
+            <trans-unit id="65">
+                <source>This value should be equal to {{ compared_value }}.</source>
+                <target>Arvo ei ole sama kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="66">
+                <source>This value should be greater than {{ compared_value }}.</source>
+                <target>Arvon tulee olla suurempi kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="67">
+                <source>This value should be greater than or equal to {{ compared_value }}.</source>
+                <target>Arvon tulee olla suurempi tai yhtä suuri kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="68">
+                <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Tämä arvo tulee olla sama kuin {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="69">
+                <source>This value should be less than {{ compared_value }}.</source>
+                <target>Arvon tulee olla pienempi kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="70">
+                <source>This value should be less than or equal to {{ compared_value }}.</source>
+                <target>Arvon tulee olla pienempi tai yhtä suuri {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="71">
+                <source>This value should not be equal to {{ compared_value }}.</source>
+                <target>Arvon ei tule olla sama kuin {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="72">
+                <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
+                <target>Tämä arvo ei tule olla sama kuin {{ compared_value_type }} {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Kuvasuhde on liian suuri ({{ ratio }}). Suurin sallittu suhde on {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Kuvasuhde on liian pieni ({{ ratio }}). Pienin sallittu arvo on {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Kuva on neliä ({{ width }}x{{ height }}px). Neliöt kuvat eivät ole sallittuja.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Kuva on vaakasuuntainen ({{ width }}x{{ height }}px). Vaakasuuntaiset kuvat eivät ole sallittuja.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Kuva on pystysuuntainen ({{ width }}x{{ height }}px). Pystysuuntaiset kuvat eivät ole sallittuja.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Tyhjä tiedosto ei ole sallittu.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>The host could not be resolved.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Arvo ei vastaa odotettua merkistöä {{ charset }}.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>Arvo ei ole kelvollinen yritystunnus (BIC).</target>
+            </trans-unit>
             <trans-unit id="82">
                 <source>Error</source>
                 <target>Virhe</target>
             </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Arvo ei ole kelvollinen UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Tämän arvon tulisi olla kerrannainen {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Tämä yritystunnus (BIC) ei ole liitetty IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Arvon tulee olla kelvollinen JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Tämä ryhmä tulisi sisältää vain yksilöllisiä arvoja.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Arvon tulisi olla positiivinen.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Arvon tulisi olla joko positiivinen tai nolla.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Arvon tulisi olla negatiivinen.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Arvon tulisi olla joko negatiivinen tai nolla.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Arvo ei ole kelvollinen aikavyöhyke.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Tämä salasana on vuotanut tietomurrossa, sitä ei saa käyttää. Käytä toista salasanaa.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Arvon tulisi olla välillä {{ min }} - {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.fr.xlf b/vendor/symfony/validator/Resources/translations/validators.fr.xlf
index 9b021cd68214f0a3d91b00cd03de9dd9f8686f29..dc7e73e3c75818bd1fff7f1e1de503aec380e868 100644
--- a/vendor/symfony/validator/Resources/translations/validators.fr.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.fr.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>Ce mot de passe a été divulgué lors d'une fuite de données, il ne doit plus être utilisé. Veuillez utiliser un autre mot de passe.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Cette valeur doit être comprise entre {{ min }} et {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.he.xlf b/vendor/symfony/validator/Resources/translations/validators.he.xlf
index 65105149005838dc0372d8feb943a055b0979ce9..6f9ab0a1cfa64a7b50dbd6cb7eed21181d29ea3e 100644
--- a/vendor/symfony/validator/Resources/translations/validators.he.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.he.xlf
@@ -72,7 +72,7 @@
             </trans-unit>
             <trans-unit id="18">
                 <source>This value should be {{ limit }} or less.</source>
-                <target>הערך צריל להכיל {{ limit }} תווים לכל היותר.</target>
+                <target>הערך צריך להכיל {{ limit }} תווים לכל היותר.</target>
             </trans-unit>
             <trans-unit id="19">
                 <source>This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.</source>
@@ -84,7 +84,7 @@
             </trans-unit>
             <trans-unit id="21">
                 <source>This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.</source>
-                <target>הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.|הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.</target>
+                <target>הערך קצר מידי. הוא צריך להכיל {{ limit }} תווים לפחות.|הערך קצר מידיץ הוא צריך להכיל {{ limit }} תווים לפחות.</target>
             </trans-unit>
             <trans-unit id="22">
                 <source>This value should not be blank.</source>
@@ -224,83 +224,147 @@
             </trans-unit>
             <trans-unit id="59">
                 <source>This is not a valid International Bank Account Number (IBAN).</source>
-                <target>This is not a valid International Bank Account Number (IBAN).</target>
+                <target>מספר חשבון בנק בינלאומי אינו חוקי (IBAN).</target>
             </trans-unit>
             <trans-unit id="60">
                 <source>This value is not a valid ISBN-10.</source>
-                <target>This value is not a valid ISBN-10.</target>
+                <target>הערך אינו ערך ISBN-10 חוקי.</target>
             </trans-unit>
             <trans-unit id="61">
                 <source>This value is not a valid ISBN-13.</source>
-                <target>This value is not a valid ISBN-13.</target>
+                <target>הערך אינו ערך ISBN-13 חוקי.</target>
             </trans-unit>
             <trans-unit id="62">
                 <source>This value is neither a valid ISBN-10 nor a valid ISBN-13.</source>
-                <target>This value is neither a valid ISBN-10 nor a valid ISBN-13.</target>
+                <target>הערך אינו ערך ISBN-10 חוקי או ערך ISBN-13 חוקי.</target>
             </trans-unit>
             <trans-unit id="63">
                 <source>This value is not a valid ISSN.</source>
-                <target>This value is not a valid ISSN.</target>
+                <target>הערך אינו ערך ISSN חוקי.</target>
             </trans-unit>
             <trans-unit id="64">
                 <source>This value is not a valid currency.</source>
-                <target>This value is not a valid currency.</target>
+                <target>הערך אינו ערך מטבע חוקי.</target>
             </trans-unit>
             <trans-unit id="65">
                 <source>This value should be equal to {{ compared_value }}.</source>
-                <target>This value should be equal to {{ compared_value }}.</target>
+                <target>הערך חייב להיות שווה ל {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="66">
                 <source>This value should be greater than {{ compared_value }}.</source>
-                <target>This value should be greater than {{ compared_value }}.</target>
+                <target>הערך חייב להיות גדול מ {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="67">
                 <source>This value should be greater than or equal to {{ compared_value }}.</source>
-                <target>This value should be greater than or equal to {{ compared_value }}.</target>
+                <target>הערך חייב להיות גדול או שווה ל {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="68">
                 <source>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</source>
-                <target>This value should be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+                <target>הערך חייב להיות זהה ל {{ compared_value_type }} {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="69">
                 <source>This value should be less than {{ compared_value }}.</source>
-                <target>This value should be less than {{ compared_value }}.</target>
+                <target>הערך חייב להיות קטן מ {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="70">
                 <source>This value should be less than or equal to {{ compared_value }}.</source>
-                <target>This value should be less than or equal to {{ compared_value }}.</target>
+                <target>הערך חייב להיות קטן או שווה ל {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="71">
                 <source>This value should not be equal to {{ compared_value }}.</source>
-                <target>This value should not be equal to {{ compared_value }}.</target>
+                <target>הערך חייב להיות לא שווה ל {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="72">
                 <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
-                <target>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</target>
+                <target>הערך חייב להיות לא זהה ל {{ compared_value_type }} {{ compared_value }}.</target>
             </trans-unit>
             <trans-unit id="73">
                 <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
-                <target>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</target>
+                <target>היחס של התמונה הוא גדול מדי ({{ ratio }}). היחס המקסימלי האפשרי הוא {{ max_ratio }}.</target>
             </trans-unit>
             <trans-unit id="74">
                 <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
-                <target>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</target>
+                <target>היחס של התמונה הוא קטן מדי ({{ ratio }}). היחס המינימלי האפשרי הוא {{ min_ratio }}.</target>
             </trans-unit>
             <trans-unit id="75">
                 <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
-                <target>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</target>
+                <target>התמונה מרובעת ({{ width }}x{{ height }}px). אסורות תמונות מרובעות.</target>
             </trans-unit>
             <trans-unit id="76">
                 <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
-                <target>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</target>
+                <target>התמונה היא לרוחב ({{ width }}x{{ height }}px). אסורות תמונות לרוחב.</target>
             </trans-unit>
             <trans-unit id="77">
                 <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
-                <target>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</target>
+                <target>התמונה היא לאורך ({{ width }}x{{ height }}px). אסורות תמונות לאורך.</target>
             </trans-unit>
             <trans-unit id="78">
                 <source>An empty file is not allowed.</source>
-                <target>An empty file is not allowed.</target>
+                <target>אסור קובץ ריק.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>לא הייתה אפשרות לזהות את המארח.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>הערך אינו תואם למערך התווים {{ charset }} הצפוי.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>קוד זיהוי עסקי אינו חוקי (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>שגיאה</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>הערך אינו ערך UUID חוקי.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>הערך חייב להיות כפולה של {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>הקוד זיהוי עסקי (BIC) אינו משוייך ל IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>הערך אינו ערך JSON תקין.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>האוסף חייב להכיל רק אלמנטים ייחודיים.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>הערך חייב להיות חיובי.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>הערך חייב להיות חיובי או אפס.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>הערך חייב להיות שלילי.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>הערך חייב להיות שלילי או אפס.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>הערך אינו אזור זמן תקין.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>סיסמא זו הודלפה בהדלפת מידע, אסור להשתמש בה. אנא השתמש בסיסמה אחרת.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>הערך חייב להיות בין {{ min }} ו- {{ max }}.</target>
             </trans-unit>
         </body>
     </file>
diff --git a/vendor/symfony/validator/Resources/translations/validators.hu.xlf b/vendor/symfony/validator/Resources/translations/validators.hu.xlf
index 300eb5f68fb972dfced1977652f6251c2dda02ce..96ae6fe54ea6ad64a8969e6541402ff27aa62405 100644
--- a/vendor/symfony/validator/Resources/translations/validators.hu.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.hu.xlf
@@ -358,6 +358,14 @@
                 <source>This value is not a valid timezone.</source>
                 <target>Ez az érték nem egy érvényes időzóna.</target>
             </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ez a jelszó korábban egy adatvédelmi incidens során illetéktelenek kezébe került, így nem használható. Kérjük, használjon másik jelszót.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ennek az értéknek {{ min }} és {{ max }} között kell lennie.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.hy.xlf b/vendor/symfony/validator/Resources/translations/validators.hy.xlf
index bc0daced86de27f3136a4f9ff68318e133f9602d..b005518f358750895506303e275cadc3f5b31b5d 100644
--- a/vendor/symfony/validator/Resources/translations/validators.hy.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.hy.xlf
@@ -314,6 +314,58 @@
                 <source>This is not a valid Business Identifier Code (BIC).</source>
                 <target>Սա վավեր Business Identifier Code (BIC) չէ։</target>
             </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Սխալ</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Սա վավեր UUID չէ:</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Այս արժեքը պետք է լինի բազմակի {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Բիզնեսի նույնականացման կոդը (BIC) կապված չէ IBAN- ի հետ {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Այս արժեքը պետք է լինի վավեր JSON:</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Այս հավաքածուն պետք է պարունակի միայն եզակի տարրեր:</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Այս արժեքը պետք է լինի դրական:</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Այս արժեքը պետք է լինի դրական կամ զրոյական:</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Այս արժեքը պետք է լինի բացասական:</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Այս արժեքը պետք է լինի բացասական կամ զրոյական:</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Այս արժեքը վավեր ժամանակի գոտի չէ:</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Այս գաղտնաբառն արտահոսվել է տվյալների խախտման մեջ, այն չպետք է օգտագործվի: Խնդրում ենք օգտագործել մեկ այլ գաղտնաբառ:</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Այս արժեքը պետք է լինի միջև {{ min }} և {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.it.xlf b/vendor/symfony/validator/Resources/translations/validators.it.xlf
index f4c188d1dd3aa6f3bd9db5fedc526a54f77b0868..3ec620ad6d48b7b8e11999006cf0a41511a7d065 100644
--- a/vendor/symfony/validator/Resources/translations/validators.it.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.it.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>Questa password è trapelata durante una compromissione di dati, non deve essere usata. Si prega di usare una password diversa.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Questo valore dovrebbe essere compreso tra {{ min }} e {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.ja.xlf b/vendor/symfony/validator/Resources/translations/validators.ja.xlf
index 5a391a2e6626e0417da5fbe633bcb1469040c5b0..21e2392c7d96c53126ef2be1e5ae6d0e7d8e919b 100644
--- a/vendor/symfony/validator/Resources/translations/validators.ja.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.ja.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>このパスワードは漏洩している為使用できません。</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>{{ min }}以上{{ max }}以下でなければなりません。</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.lt.xlf b/vendor/symfony/validator/Resources/translations/validators.lt.xlf
index 79171bc0dfa6e5979b86d8740c6600face35bc87..2a079aacbf9b122e10169655d36dfe1f6cf96ed8 100644
--- a/vendor/symfony/validator/Resources/translations/validators.lt.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.lt.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>Slaptažodis yra nutekėjęs duomenų saugumo pažeidime, jo naudoti negalima. Prašome naudoti kitą slaptažodį.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ši reikšmė turi būti tarp {{ min }} ir {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.nb.xlf b/vendor/symfony/validator/Resources/translations/validators.nb.xlf
index db534528d1d99bd3ac29dbca69fbcb49d96c916b..bfa9b1284e8d9de5c27f62b5051b0e4222125eeb 100644
--- a/vendor/symfony/validator/Resources/translations/validators.nb.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.nb.xlf
@@ -334,6 +334,38 @@
                 <source>This value should be valid JSON.</source>
                 <target>Verdien er ikke gyldig JSON.</target>
             </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Samlingen kan kun inneholde unike elementer.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Denne verdien må være positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Denne verdien må være positiv eller null.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Denne verdien må være negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Denne verdien må være negativ eller null.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Verdien er ikke en gyldig tidssone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dette passordet er lekket i et datainnbrudd, det må ikke tas i bruk. Vennligst bruk et annet passord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien må være mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.nl.xlf b/vendor/symfony/validator/Resources/translations/validators.nl.xlf
index 478ca19753a6455252949b04a2bf12cb010d6ba3..3b2eb4131bd3afde3c5a2903713e938a95d9cdbe 100644
--- a/vendor/symfony/validator/Resources/translations/validators.nl.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.nl.xlf
@@ -362,6 +362,10 @@
                 <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
                 <target>Dit wachtwoord is gelekt vanwege een data-inbreuk, het moet niet worden gebruikt. Kies een ander wachtwoord.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Deze waarde moet zich tussen {{ min }} en {{ max }} bevinden.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.no.xlf b/vendor/symfony/validator/Resources/translations/validators.no.xlf
index db534528d1d99bd3ac29dbca69fbcb49d96c916b..bfa9b1284e8d9de5c27f62b5051b0e4222125eeb 100644
--- a/vendor/symfony/validator/Resources/translations/validators.no.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.no.xlf
@@ -334,6 +334,38 @@
                 <source>This value should be valid JSON.</source>
                 <target>Verdien er ikke gyldig JSON.</target>
             </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Samlingen kan kun inneholde unike elementer.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Denne verdien må være positiv.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Denne verdien må være positiv eller null.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Denne verdien må være negativ.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Denne verdien må være negativ eller null.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Verdien er ikke en gyldig tidssone.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Dette passordet er lekket i et datainnbrudd, det må ikke tas i bruk. Vennligst bruk et annet passord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Verdien må være mellom {{ min }} og {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.pl.xlf b/vendor/symfony/validator/Resources/translations/validators.pl.xlf
index 888e73b1570077196c51b27f5487007af66f7c48..f1910c99d5751d1b2a200be7dfde89d4d7e62d7f 100644
--- a/vendor/symfony/validator/Resources/translations/validators.pl.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.pl.xlf
@@ -330,6 +330,10 @@
                 <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
                 <target>Ten kod BIC (Business Identifier Code) nie jest powiązany z międzynarodowym numerem rachunku bankowego (IBAN) {{ iban }}.</target>
             </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ta wartość powinna być pomiędzy {{ min }} a {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.ro.xlf b/vendor/symfony/validator/Resources/translations/validators.ro.xlf
index 63af47042b199c711ded7bbea9eb684422c9f2e1..26b069ab02774c1cc674531ce4e14489cde87f92 100644
--- a/vendor/symfony/validator/Resources/translations/validators.ro.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.ro.xlf
@@ -278,10 +278,62 @@
                 <source>This value should not be identical to {{ compared_value_type }} {{ compared_value }}.</source>
                 <target>Această valoare nu trebuie să fie identică cu {{ compared_value_type }} {{ compared_value }}.</target>
             </trans-unit>
+            <trans-unit id="73">
+                <source>The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.</source>
+                <target>Raportul imaginii este prea mare ({{ ratio }}). Raportul maxim permis este {{ max_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="74">
+                <source>The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.</source>
+                <target>Raportul imaginii este prea mic ({{ ratio }}). Raportul minim permis este {{ min_ratio }}.</target>
+            </trans-unit>
+            <trans-unit id="75">
+                <source>The image is square ({{ width }}x{{ height }}px). Square images are not allowed.</source>
+                <target>Imaginea este un pătrat ({{ width }}x{{ height }}px). Imaginile pătrat nu sunt permise.</target>
+            </trans-unit>
+            <trans-unit id="76">
+                <source>The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.</source>
+                <target>Imaginea are orientarea peisaj ({{ width }}x{{ height }}px). Imaginile cu orientare peisaj nu sunt permise.</target>
+            </trans-unit>
+            <trans-unit id="77">
+                <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
+                <target>Imaginea are orientarea portret ({{ width }}x{{ height }}px). Imaginile cu orientare portret nu sunt permise.</target>
+            </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Nu se permite un fișier gol.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Numele host nu a putut fi rezolvat către o adresă IP.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Această valoare nu corespunde setului de caractere {{ charset }} așteptat.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>Codul BIC (Business Identifier Code) nu este valid.</target>
+            </trans-unit>
             <trans-unit id="82">
                 <source>Error</source>
                 <target>Eroare</target>
             </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Identificatorul universal unic (UUID) nu este valid.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Această valoare trebuie să fie un multiplu de {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Codul BIC (Business Identifier Code) nu este asociat cu codul IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Această valoare trebuie să fie un JSON valid.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.ru.xlf b/vendor/symfony/validator/Resources/translations/validators.ru.xlf
index b77e04e8471c8f3f01bbc261e1839cd10e42cd91..361be20f796f885c546eaed2fcef6b55e6beb1fc 100644
--- a/vendor/symfony/validator/Resources/translations/validators.ru.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.ru.xlf
@@ -330,6 +330,42 @@
                 <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
                 <target>Данный BIC не связан с IBAN {{ iban }}.</target>
             </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Значение должно быть корректным JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Эта коллекция должна содержать только уникальные элементы.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Значение должно быть положительным.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Значение должно быть положительным или равным нулю.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Значение должно быть отрицательным.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Значение должно быть отрицательным или равным нулю.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Значение не является корректным часовым поясом.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Данный пароль был скомпрометирован в результате утечки данных и не должен быть использован. Пожалуйста, используйте другой пароль.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Значение должно быть между {{ min }} и {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.sk.xlf b/vendor/symfony/validator/Resources/translations/validators.sk.xlf
index 8ddb66d9c0b6f5c4655b97d92caed7a8bdb0cb6d..a161ddbfe8845d14d15e6653ba09ffcbe661a23e 100644
--- a/vendor/symfony/validator/Resources/translations/validators.sk.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.sk.xlf
@@ -314,6 +314,58 @@
                 <source>This is not a valid Business Identifier Code (BIC).</source>
                 <target>Táto hodnota nie je platný identifikačný kód podniku (BIC).</target>
             </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Chyba</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Táto hodnota nie je platný UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Táto hodnota by mala byť násobkom {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Tento identifikačný kód podniku (BIC) nie je spojený s IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Táto hodnota by mala byť platný JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Táto kolekcia by mala obsahovať len unikátne prkvy.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Táto hodnota by mala byť kladná.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Táto hodnota by mala byť kladná alebo nulová.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Táto hodnota by mala byť záporná.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Táto hodnota by mala byť záporná alebo nulová.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Táto hodnota nie je platné časové pásmo.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Toto heslo uniklo pri narušení ochrany dát, nie je možné ho použiť. Prosím, použite iné heslo.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Táto hodnota by mala byť medzi {{ min }} a {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.sl.xlf b/vendor/symfony/validator/Resources/translations/validators.sl.xlf
index 6f5fd98ca192ef0b94508f81f190db754920a615..cb12a8a9daa4d3ab15d88947fe6dc840c5b1ebad 100644
--- a/vendor/symfony/validator/Resources/translations/validators.sl.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.sl.xlf
@@ -318,6 +318,54 @@
                 <source>Error</source>
                 <target>Napaka</target>
             </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>To ni veljaven UUID.</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ta vrednost bi morala biti večkratnik od {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>Ta poslovna identifikacijska koda (BIC) ni povezana z IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ta vrednost bi morala biti veljaven JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ta zbirka bi morala vsebovati samo edinstvene elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ta vrednost bi morala biti pozitivna.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ta vrednost bi morala biti pozitivna ali enaka nič.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ta vrednost bi morala biti negativna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ta vrednost bi morala biti negativna ali enaka nič.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ta vrednost ni veljaven časovni pas.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>To geslo je ušlo pri kršitvi varnosti podatkov in ga ne smete uporabljati. Prosimo, uporabite drugo geslo.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ta vrednost bi morala biti med {{ min }} in {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf b/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf
index 81f5210f6fb334b8ed5e156deffd2d14ba9ea960..3f2b9eaba8e3063ea767f560333d7ca60d5ce75e 100644
--- a/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf
@@ -298,6 +298,74 @@
                 <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
                 <target>Слика је оријантације портрета ({{ width }}x{{ height }}px). Портретна оријентација слика није дозвољена.</target>
             </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>Празна датотека није дозвољена.</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>Није могуће одредити послужитеља.</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>Вредност се не поклапа са очекиваним {{ charset }} сетом карактера.</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>Ово није валидан међународни идентификацијски код банке (BIC).</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>Грешка</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>Ово није валидан универзални уникатни идентификатор (UUID).</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>Ова вредност би требало да буде дељива са {{ compared_value }}.</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>BIC код није повезан са IBAN {{ iban }}.</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Ова вредност би требало да буде валидан JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ова колекција би требала да садржи само јединствене елементе.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ова вредност би требала бити позитивна.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ова вредност би требала бити позитивна или нула.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ова вредност би требала бити негативна.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ова вредност би требала бити позитивна или нула.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ова вредност није валидна временска зона.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ова лозинка је компромитована приликом претходних напада, немојте је користити. Користите другу лозинку.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ова вредност треба да буде између {{ min }} и {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf b/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf
index 1c57f20162e650508f116161bfa31265b8255558..018dd1233ac61e77a9f52b4d6efcee3c7977de2f 100644
--- a/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf
@@ -334,6 +334,38 @@
                 <source>This value should be valid JSON.</source>
                 <target>Ova vrednost bi trebalo da bude validan JSON.</target>
             </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ova kolekcija bi trebala da sadrži samo jedinstvene elemente.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Ova vrednost bi trebala biti pozitivna.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Ova vrednost bi trebala biti pozitivna ili nula.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Ova vrednost bi trebala biti negativna.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Ova vrednost bi trebala biti pozitivna ili nula.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Ova vrednost nije validna vremenska zona.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Ova lozinka je kompromitovana prilikom prethodnih napada, nemojte je koristiti. Koristite drugu lozinku.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Ova vrednost treba da bude između {{ min }} i {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.sv.xlf b/vendor/symfony/validator/Resources/translations/validators.sv.xlf
index b3e8f0f42f12483c0de82af24e27fea7412f507c..bf7da2f06c907f7453c6edb9fb66d8f78d822429 100644
--- a/vendor/symfony/validator/Resources/translations/validators.sv.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.sv.xlf
@@ -334,6 +334,38 @@
                 <source>This value should be valid JSON.</source>
                 <target>Detta värde ska vara giltig JSON.</target>
             </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Denna samling bör endast innehålla unika element.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Detta värde bör vara positivt.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Detta värde bör vara antingen positivt eller noll.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Detta värde bör vara negativt.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Detta värde bör vara antingen negativt eller noll.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Detta värde är inte en giltig tidszon.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Det här lösenordet har läckt ut vid ett dataintrång, det får inte användas. Använd ett annat lösenord.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Detta värde bör ligga mellan {{ min }} och {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.th.xlf b/vendor/symfony/validator/Resources/translations/validators.th.xlf
index 63ce95ab1bee5f8a85ecee4c799ea92392a3dba9..31aa00cfac01184bb3c5ccb4b55729aeaae8d234 100644
--- a/vendor/symfony/validator/Resources/translations/validators.th.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.th.xlf
@@ -204,7 +204,7 @@
             </trans-unit>
             <trans-unit id="54">
                 <source>This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.</source>
-                <target>คอเล็กชั่นนี้ควรจะประกอบไปด้วยอ่างน้อย {{ limit }} สมาชิก</target>
+                <target>คอเล็กชั่นนี้ควรจะประกอบไปด้วยอย่างน้อย {{ limit }} สมาชิก</target>
             </trans-unit>
             <trans-unit id="55">
                 <source>This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.</source>
@@ -298,6 +298,74 @@
                 <source>The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.</source>
                 <target>ภาพนี้เป็นแนวตั้ง ({{ width }}x{{ height }}px) ไม่อนุญาตภาพที่เป็นแนวตั้ง</target>
             </trans-unit>
+            <trans-unit id="78">
+                <source>An empty file is not allowed.</source>
+                <target>ไม่อนุญาตให้ใช้ไฟล์ว่าง</target>
+            </trans-unit>
+            <trans-unit id="79">
+                <source>The host could not be resolved.</source>
+                <target>ไม่สามารถแก้ไขชื่อโฮสต์</target>
+            </trans-unit>
+            <trans-unit id="80">
+                <source>This value does not match the expected {{ charset }} charset.</source>
+                <target>ค่านี้ไม่ตรงกับการเข้ารหัส {{ charset }}</target>
+            </trans-unit>
+            <trans-unit id="81">
+                <source>This is not a valid Business Identifier Code (BIC).</source>
+                <target>นี่ไม่ถูกต้องตามรหัสสำหรับระบุธุรกิจนี้ (BIC)</target>
+            </trans-unit>
+            <trans-unit id="82">
+                <source>Error</source>
+                <target>เกิดข้อผิดพลาด</target>
+            </trans-unit>
+            <trans-unit id="83">
+                <source>This is not a valid UUID.</source>
+                <target>นี่ไม่ใช่ UUID ที่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="84">
+                <source>This value should be a multiple of {{ compared_value }}.</source>
+                <target>ค่านี้ควรเป็น {{ compared_value }} หลายตัว</target>
+            </trans-unit>
+            <trans-unit id="85">
+                <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
+                <target>รหัสสำหรับระบุธุรกิจนี้ (BIC) ไม่เกี่ยวข้องกับ IBAN {{ iban }}</target>
+            </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>ค่านี้ควรอยู่ในรูปแบบ JSON ที่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>คอเล็กชั่นนี้ควรมีเฉพาะสมาชิกที่ไม่ซ้ำกันเท่านั้น</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>ค่านี้ควรเป็นค่าบวก</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>ค่านี้ควรเป็นค่าบวกหรือค่าศูนย์</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>ค่านี้ควรเป็นค่าลบ</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>ค่านี้ควรเป็นค่าลบหรือค่าศูนย์</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>ค่าเขตเวลาไม่ถูกต้อง</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>รหัสผ่านนี้ได้เคยรั่วไหลออกไปโดยถูกการละเมิดข้อมูล ซึ่งไม่ควรนำกลับมาใช้ กรุณาใช้รหัสผ่านอื่น</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>ค่านี้ควรอยู่ระหว่าง {{ min }} ถึง {{ max }}</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Resources/translations/validators.uk.xlf b/vendor/symfony/validator/Resources/translations/validators.uk.xlf
index 5ddc429854e54f5b6d92313168c07ea39b22083b..cba61915544a3a6b383655ff3214bc88e91f1cf2 100644
--- a/vendor/symfony/validator/Resources/translations/validators.uk.xlf
+++ b/vendor/symfony/validator/Resources/translations/validators.uk.xlf
@@ -330,6 +330,42 @@
                 <source>This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.</source>
                 <target>Банківський код (BIC) не пов’язаний із міжнародним номером банківського рахунку (IBAN) {{ iban }}.</target>
             </trans-unit>
+            <trans-unit id="86">
+                <source>This value should be valid JSON.</source>
+                <target>Значення має бути корректним JSON.</target>
+            </trans-unit>
+            <trans-unit id="87">
+                <source>This collection should contain only unique elements.</source>
+                <target>Ця колекція повинна мати тільки унікальни значення.</target>
+            </trans-unit>
+            <trans-unit id="88">
+                <source>This value should be positive.</source>
+                <target>Значення має бути позитивним.</target>
+            </trans-unit>
+            <trans-unit id="89">
+                <source>This value should be either positive or zero.</source>
+                <target>Значення має бути позитивним або дорівнювати нулю.</target>
+            </trans-unit>
+            <trans-unit id="90">
+                <source>This value should be negative.</source>
+                <target>Значення має бути негативним.</target>
+            </trans-unit>
+            <trans-unit id="91">
+                <source>This value should be either negative or zero.</source>
+                <target>Значення має бути негативним або дорівнювати нулю.</target>
+            </trans-unit>
+            <trans-unit id="92">
+                <source>This value is not a valid timezone.</source>
+                <target>Значення не є дійсним часовим поясом.</target>
+            </trans-unit>
+            <trans-unit id="93">
+                <source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
+                <target>Цей пароль був скомпрометований в результаті витоку даних та не повинен використовуватися. Будь ласка, використовуйте інший пароль.</target>
+            </trans-unit>
+            <trans-unit id="94">
+                <source>This value should be between {{ min }} and {{ max }}.</source>
+                <target>Значення має бути між {{ min }} та {{ max }}.</target>
+            </trans-unit>
         </body>
     </file>
 </xliff>
diff --git a/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php b/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php
index 0a11c4741385a62d86a80fc28f8a3ba31d34e20b..ed57d396ae00e066314fa99bd95734b847e1c491 100644
--- a/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php
+++ b/vendor/symfony/validator/Test/ConstraintValidatorTestCase.php
@@ -29,7 +29,7 @@
  */
 abstract class ConstraintValidatorTestCase extends TestCase
 {
-    use TestCaseSetUpTearDownTrait;
+    use ForwardCompatTestTrait;
 
     /**
      * @var ExecutionContextInterface
@@ -177,7 +177,8 @@ protected function expectValidateAt($i, $propertyPath, $value, $group)
             ->willReturn($validator);
         $validator->expects($this->at(2 * $i + 1))
             ->method('validate')
-            ->with($value, $this->logicalOr(null, [], $this->isInstanceOf('\Symfony\Component\Validator\Constraints\Valid')), $group);
+            ->with($value, $this->logicalOr(null, [], $this->isInstanceOf('\Symfony\Component\Validator\Constraints\Valid')), $group)
+            ->willReturn($validator);
     }
 
     protected function expectValidateValueAt($i, $propertyPath, $value, $constraints, $group = null)
@@ -189,7 +190,8 @@ protected function expectValidateValueAt($i, $propertyPath, $value, $constraints
             ->willReturn($contextualValidator);
         $contextualValidator->expects($this->at(2 * $i + 1))
             ->method('validate')
-            ->with($value, $constraints, $group);
+            ->with($value, $constraints, $group)
+            ->willReturn($contextualValidator);
     }
 
     protected function assertNoViolation()
diff --git a/vendor/symfony/validator/Test/TestCaseSetUpTearDownTrait.php b/vendor/symfony/validator/Test/ForwardCompatTestTrait.php
similarity index 95%
rename from vendor/symfony/validator/Test/TestCaseSetUpTearDownTrait.php
rename to vendor/symfony/validator/Test/ForwardCompatTestTrait.php
index 236e02267b118b00cd39e7d52e5d49031b7861b0..078d8d54b48a67ac961506032fe15c8763404849 100644
--- a/vendor/symfony/validator/Test/TestCaseSetUpTearDownTrait.php
+++ b/vendor/symfony/validator/Test/ForwardCompatTestTrait.php
@@ -22,7 +22,7 @@
     /**
      * @internal
      */
-    trait TestCaseSetUpTearDownTrait
+    trait ForwardCompatTestTrait
     {
         private function doSetUp(): void
         {
@@ -47,7 +47,7 @@ protected function tearDown(): void
     /**
      * @internal
      */
-    trait TestCaseSetUpTearDownTrait
+    trait ForwardCompatTestTrait
     {
         /**
          * @return void
diff --git a/vendor/symfony/validator/Tests/ConstraintTest.php b/vendor/symfony/validator/Tests/ConstraintTest.php
index d1f41ce5ee97d53115757b4dd466627629c80af6..6c481b00888ed719fe49588169aa48a875c10a38 100644
--- a/vendor/symfony/validator/Tests/ConstraintTest.php
+++ b/vendor/symfony/validator/Tests/ConstraintTest.php
@@ -35,7 +35,7 @@ public function testSetProperties()
 
     public function testSetNotExistingPropertyThrowsException()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\InvalidOptionsException');
+        $this->expectException('Symfony\Component\Validator\Exception\InvalidOptionsException');
 
         new ConstraintA([
             'foo' => 'bar',
@@ -46,14 +46,14 @@ public function testMagicPropertiesAreNotAllowed()
     {
         $constraint = new ConstraintA();
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\InvalidOptionsException');
+        $this->expectException('Symfony\Component\Validator\Exception\InvalidOptionsException');
 
         $constraint->foo = 'bar';
     }
 
     public function testInvalidAndRequiredOptionsPassed()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\InvalidOptionsException');
+        $this->expectException('Symfony\Component\Validator\Exception\InvalidOptionsException');
 
         new ConstraintC([
             'option1' => 'default',
@@ -101,14 +101,14 @@ public function testDontSetDefaultPropertyIfValuePropertyExists()
 
     public function testSetUndefinedDefaultProperty()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
 
         new ConstraintB('foo');
     }
 
     public function testRequiredOptionsMustBeDefined()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\MissingOptionsException');
+        $this->expectException('Symfony\Component\Validator\Exception\MissingOptionsException');
 
         new ConstraintC();
     }
@@ -204,11 +204,9 @@ public function testSerializeKeepsCustomGroups()
         $this->assertSame(['MyGroup'], $constraint->groups);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\InvalidArgumentException
-     */
     public function testGetErrorNameForUnknownCode()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\InvalidArgumentException');
         Constraint::getErrorName(1);
     }
 
@@ -223,12 +221,10 @@ public function testOptionsAsDefaultOption()
         $this->assertEquals($options, $constraint->property2);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\InvalidOptionsException
-     * @expectedExceptionMessage The options "0", "5" do not exist in constraint "Symfony\Component\Validator\Tests\Fixtures\ConstraintA".
-     */
     public function testInvalidOptions()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\InvalidOptionsException');
+        $this->expectExceptionMessage('The options "0", "5" do not exist in constraint "Symfony\Component\Validator\Tests\Fixtures\ConstraintA".');
         new ConstraintA(['property2' => 'foo', 'bar', 5 => 'baz']);
     }
 
@@ -243,12 +239,10 @@ public function testOptionsWithInvalidInternalPointer()
         $this->assertEquals('foo', $constraint->property1);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     * @expectedExceptionMessage No default option is configured for constraint "Symfony\Component\Validator\Tests\Fixtures\ConstraintB".
-     */
     public function testAnnotationSetUndefinedDefaultOption()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectExceptionMessage('No default option is configured for constraint "Symfony\Component\Validator\Tests\Fixtures\ConstraintB".');
         new ConstraintB(['value' => 1]);
     }
 }
diff --git a/vendor/symfony/validator/Tests/ConstraintValidatorTest.php b/vendor/symfony/validator/Tests/ConstraintValidatorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..96af6f13eb4e77e802d1be9d591e5df847a9c440
--- /dev/null
+++ b/vendor/symfony/validator/Tests/ConstraintValidatorTest.php
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Validator\Tests;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+
+final class ConstraintValidatorTest extends TestCase
+{
+    /**
+     * @dataProvider formatValueProvider
+     */
+    public function testFormatValue($expected, $value, $format = 0)
+    {
+        $this->assertSame($expected, (new TestFormatValueConstraintValidator())->formatValueProxy($value, $format));
+    }
+
+    public function formatValueProvider()
+    {
+        $data = [
+            ['true', true],
+            ['false', false],
+            ['null', null],
+            ['resource', fopen('php://memory', 'r')],
+            ['"foo"', 'foo'],
+            ['array', []],
+            ['object', $toString = new TestToStringObject()],
+            ['ccc', $toString, ConstraintValidator::OBJECT_TO_STRING],
+            ['object', $dateTime = (new \DateTimeImmutable('@0'))->setTimezone(new \DateTimeZone('UTC'))],
+            [class_exists(\IntlDateFormatter::class) ? 'Jan 1, 1970, 12:00 AM' : '1970-01-01 00:00:00', $dateTime, ConstraintValidator::PRETTY_DATE],
+        ];
+
+        return $data;
+    }
+}
+
+final class TestFormatValueConstraintValidator extends ConstraintValidator
+{
+    public function validate($value, Constraint $constraint)
+    {
+    }
+
+    public function formatValueProxy($value, $format)
+    {
+        return $this->formatValue($value, $format);
+    }
+}
+
+final class TestToStringObject
+{
+    public function __toString()
+    {
+        return 'ccc';
+    }
+}
diff --git a/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php b/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
index 2f27974a801abc205a07a983ac83a93787c7791d..b02e57cfa235855e6e48199ef3795b5f268e313d 100644
--- a/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
+++ b/vendor/symfony/validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php
@@ -13,6 +13,7 @@
 
 use Symfony\Component\Intl\Util\IntlTestHelper;
 use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\Constraints\AbstractComparison;
 use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
 use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
 
@@ -81,20 +82,18 @@ public function provideInvalidConstraintOptions()
 
     /**
      * @dataProvider provideInvalidConstraintOptions
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     * @expectedExceptionMessage requires either the "value" or "propertyPath" option to be set.
      */
     public function testThrowsConstraintExceptionIfNoValueOrPropertyPath($options)
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectExceptionMessage('requires either the "value" or "propertyPath" option to be set.');
         $this->createConstraint($options);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     * @expectedExceptionMessage requires only one of the "value" or "propertyPath" options to be set, not both.
-     */
     public function testThrowsConstraintExceptionIfBothValueAndPropertyPath()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectExceptionMessage('requires only one of the "value" or "propertyPath" options to be set, not both.');
         $this->createConstraint(([
             'value' => 'value',
             'propertyPath' => 'propertyPath',
@@ -148,20 +147,6 @@ public function testValidComparisonToPropertyPath($comparedValue)
         $this->assertNoViolation();
     }
 
-    /**
-     * @dataProvider provideValidComparisonsToPropertyPath
-     */
-    public function testValidComparisonToPropertyPathOnArray($comparedValue)
-    {
-        $constraint = $this->createConstraint(['propertyPath' => '[root][value]']);
-
-        $this->setObject(['root' => ['value' => 5]]);
-
-        $this->validator->validate($comparedValue, $constraint);
-
-        $this->assertNoViolation();
-    }
-
     public function testNoViolationOnNullObjectWithPropertyPath()
     {
         $constraint = $this->createConstraint(['propertyPath' => 'propertyPath']);
@@ -177,12 +162,8 @@ public function testInvalidValuePath()
     {
         $constraint = $this->createConstraint(['propertyPath' => 'foo']);
 
-        if (method_exists($this, 'expectException')) {
-            $this->expectException(ConstraintDefinitionException::class);
-            $this->expectExceptionMessage(sprintf('Invalid property path "foo" provided to "%s" constraint', \get_class($constraint)));
-        } else {
-            $this->setExpectedException(ConstraintDefinitionException::class, sprintf('Invalid property path "foo" provided to "%s" constraint', \get_class($constraint)));
-        }
+        $this->expectException(ConstraintDefinitionException::class);
+        $this->expectExceptionMessage(sprintf('Invalid property path "foo" provided to "%s" constraint', \get_class($constraint)));
 
         $object = new ComparisonTest_Class(5);
 
@@ -231,6 +212,31 @@ public function testInvalidComparisonToValue($dirtyValue, $dirtyValueAsString, $
             ->assertRaised();
     }
 
+    /**
+     * @dataProvider throwsOnInvalidStringDatesProvider
+     */
+    public function testThrowsOnInvalidStringDates(AbstractComparison $constraint, $expectedMessage, $value)
+    {
+        $this->expectException(ConstraintDefinitionException::class);
+        $this->expectExceptionMessage($expectedMessage);
+
+        $this->validator->validate($value, $constraint);
+    }
+
+    public function throwsOnInvalidStringDatesProvider()
+    {
+        $constraint = $this->createConstraint([
+            'value' => 'foo',
+        ]);
+
+        $constraintClass = \get_class($constraint);
+
+        return [
+            [$constraint, sprintf('The compared value "foo" could not be converted to a "DateTimeImmutable" instance in the "%s" constraint.', $constraintClass), new \DateTimeImmutable()],
+            [$constraint, sprintf('The compared value "foo" could not be converted to a "DateTime" instance in the "%s" constraint.', $constraintClass), new \DateTime()],
+        ];
+    }
+
     /**
      * @return array
      */
@@ -264,5 +270,6 @@ abstract protected function createConstraint(array $options = null);
      */
     protected function getErrorCode()
     {
+        return null;
     }
 }
diff --git a/vendor/symfony/validator/Tests/Constraints/AllTest.php b/vendor/symfony/validator/Tests/Constraints/AllTest.php
index cdd72a22ebc58a80a157e2cf3c713063b5087bbf..5893298711371e112e5afe44876584ffa80a0704 100644
--- a/vendor/symfony/validator/Tests/Constraints/AllTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/AllTest.php
@@ -20,21 +20,17 @@
  */
 class AllTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectNonConstraints()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new All([
             'foo',
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectValidConstraint()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new All([
             new Valid(),
         ]);
diff --git a/vendor/symfony/validator/Tests/Constraints/AllValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/AllValidatorTest.php
index 1752f47e700a5e0eeba050ad9379d8a263055b93..31fa81d4e73d0644e01c5f11ca979c69be5cbe7f 100644
--- a/vendor/symfony/validator/Tests/Constraints/AllValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/AllValidatorTest.php
@@ -31,11 +31,9 @@ public function testNullIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testThrowsExceptionIfNotTraversable()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate('foo.barbar', new All(new Range(['min' => 4])));
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
index 1c771c2c13aa3e9a4b3ab5dad47b866bc37be879..4e712b92ad363bb2e77c16203352d2ef51aa9a16 100644
--- a/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CallbackValidatorTest.php
@@ -180,21 +180,17 @@ public function testArrayCallableExplicitName()
             ->assertRaised();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testExpectValidMethods()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $object = new CallbackValidatorTest_Object();
 
         $this->validator->validate($object, new Callback(['callback' => ['foobar']]));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testExpectValidCallbacks()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $object = new CallbackValidatorTest_Object();
 
         $this->validator->validate($object, new Callback(['callback' => ['foo', 'bar']]));
diff --git a/vendor/symfony/validator/Tests/Constraints/ChoiceValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/ChoiceValidatorTest.php
index e83cb8997745a3097439d992e8e70bf813d1ccd4..f100f90621618c8795c624e2be6437456ebfd108 100644
--- a/vendor/symfony/validator/Tests/Constraints/ChoiceValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/ChoiceValidatorTest.php
@@ -37,11 +37,9 @@ public function objectMethodCallback()
         return ['foo', 'bar'];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectArrayIfMultipleIsTrue()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $constraint = new Choice([
             'choices' => ['foo', 'bar'],
             'multiple' => true,
@@ -64,19 +62,15 @@ public function testNullIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testChoicesOrCallbackExpected()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $this->validator->validate('foobar', new Choice(['strict' => true]));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testValidCallbackExpected()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $this->validator->validate('foobar', new Choice(['callback' => 'abcd', 'strict' => true]));
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/CollectionTest.php b/vendor/symfony/validator/Tests/Constraints/CollectionTest.php
index fec935082afe47aa6b8c45d764f0f5d66a6679bd..fef129cfa7494672080acee327b7ce45aa913259 100644
--- a/vendor/symfony/validator/Tests/Constraints/CollectionTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CollectionTest.php
@@ -23,51 +23,41 @@
  */
 class CollectionTest extends TestCase
 {
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectInvalidFieldsOption()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new Collection([
             'fields' => 'foo',
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectNonConstraints()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new Collection([
             'foo' => 'bar',
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectValidConstraint()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new Collection([
             'foo' => new Valid(),
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectValidConstraintWithinOptional()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new Collection([
             'foo' => new Optional(new Valid()),
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testRejectValidConstraintWithinRequired()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new Collection([
             'foo' => new Required(new Valid()),
         ]);
diff --git a/vendor/symfony/validator/Tests/Constraints/CollectionValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/CollectionValidatorTest.php
index fa2ee0985ef1a1f8cb2670bcdcbf3252776769df..e0ccdba754b0bd94c200d7602f292cf4071544eb 100644
--- a/vendor/symfony/validator/Tests/Constraints/CollectionValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CollectionValidatorTest.php
@@ -52,11 +52,9 @@ public function testFieldsAsDefaultOption()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testThrowsExceptionIfNotTraversable()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate('foobar', new Collection(['fields' => [
             'foo' => new Range(['min' => 4]),
         ]]));
diff --git a/vendor/symfony/validator/Tests/Constraints/CompositeTest.php b/vendor/symfony/validator/Tests/Constraints/CompositeTest.php
index 3070e6a22f334d9822ae2f3c6113e150620c0841..2d42807821bb379c6987eec93bf578ebc500d9a5 100644
--- a/vendor/symfony/validator/Tests/Constraints/CompositeTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CompositeTest.php
@@ -79,11 +79,9 @@ public function testExplicitNestedGroupsMustBeSubsetOfExplicitParentGroups()
         $this->assertEquals(['Strict'], $constraint->constraints[1]->groups);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testFailIfExplicitNestedGroupsNotSubsetOfExplicitParentGroups()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new ConcreteComposite([
             'constraints' => [
                 new NotNull(['groups' => ['Default', 'Foobar']]),
@@ -114,33 +112,27 @@ public function testSingleConstraintsAccepted()
         $this->assertEquals([$nestedConstraint], $constraint->constraints);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testFailIfNoConstraint()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new ConcreteComposite([
             new NotNull(['groups' => 'Default']),
             'NotBlank',
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testFailIfNoConstraintObject()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new ConcreteComposite([
             new NotNull(['groups' => 'Default']),
             new \ArrayObject(),
         ]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testValidCantBeNested()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new ConcreteComposite([
             new Valid(),
         ]);
diff --git a/vendor/symfony/validator/Tests/Constraints/CountValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/CountValidatorTest.php
index 01e23cc3b92cdc0b3a2c6c6b24a3dc7cb481e9e7..2aab3b18a6c0640d1c38d4bd737348e78b2015e3 100644
--- a/vendor/symfony/validator/Tests/Constraints/CountValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CountValidatorTest.php
@@ -34,11 +34,9 @@ public function testNullIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsCountableType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Count(5));
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/CountryValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/CountryValidatorTest.php
index 23c528363000a9a3a538edef079b4e1aa3ab31d1..f5cb9a6db38f766ca5fa3a88fd362ec0302c32d0 100644
--- a/vendor/symfony/validator/Tests/Constraints/CountryValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CountryValidatorTest.php
@@ -18,6 +18,22 @@
 
 class CountryValidatorTest extends ConstraintValidatorTestCase
 {
+    private $defaultLocale;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->defaultLocale = \Locale::getDefault();
+    }
+
+    protected function tearDown()
+    {
+        parent::tearDown();
+
+        \Locale::setDefault($this->defaultLocale);
+    }
+
     protected function createValidator()
     {
         return new CountryValidator();
@@ -37,11 +53,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Country());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/CurrencyValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/CurrencyValidatorTest.php
index c699f851f26f557aed45f21ecf07daecaf248298..d46fcd55487ea5ffbb4fbe455d04a5d432b7cf08 100644
--- a/vendor/symfony/validator/Tests/Constraints/CurrencyValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/CurrencyValidatorTest.php
@@ -18,6 +18,22 @@
 
 class CurrencyValidatorTest extends ConstraintValidatorTestCase
 {
+    private $defaultLocale;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->defaultLocale = \Locale::getDefault();
+    }
+
+    protected function tearDown()
+    {
+        parent::tearDown();
+
+        \Locale::setDefault($this->defaultLocale);
+    }
+
     protected function createValidator()
     {
         return new CurrencyValidator();
@@ -37,11 +53,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Currency());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/DateTimeValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/DateTimeValidatorTest.php
index 6a8fa15b42030abcab148c10edb5c318c08716a2..55bfe4514385d11e0d61d88a82533cb50478c1d7 100644
--- a/vendor/symfony/validator/Tests/Constraints/DateTimeValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/DateTimeValidatorTest.php
@@ -50,11 +50,9 @@ public function testDateTimeImmutableClassIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new DateTime());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/DateValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/DateValidatorTest.php
index 0e0114f0ae650b8dd95f24040f202bcb63b45ed7..14edcbb2dff561620587922c8b9d4b7cbf046945 100644
--- a/vendor/symfony/validator/Tests/Constraints/DateValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/DateValidatorTest.php
@@ -50,11 +50,9 @@ public function testDateTimeImmutableClassIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Date());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
index 60cf10e4cac84be434af22bd045723860e6614ba..344139a44f171eda34954530de006b176806a88b 100644
--- a/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/EmailValidatorTest.php
@@ -40,11 +40,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Email());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/FileTest.php b/vendor/symfony/validator/Tests/Constraints/FileTest.php
index d3117ed44a2458beebf2f6adaa40858816c4bc5f..dfeeeb774eec53a6026d62ec107d4cf97c8efeff 100644
--- a/vendor/symfony/validator/Tests/Constraints/FileTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/FileTest.php
@@ -52,10 +52,10 @@ public function testMaxSizeCanBeSetAfterInitialization($maxSize, $bytes, $binary
 
     /**
      * @dataProvider provideInvalidSizes
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
      */
     public function testInvalidValueForMaxSizeThrowsExceptionAfterInitialization($maxSize)
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $file = new File(['maxSize' => 1000]);
         $file->maxSize = $maxSize;
     }
@@ -77,10 +77,10 @@ public function testMaxSizeCannotBeSetToInvalidValueAfterInitialization($maxSize
 
     /**
      * @dataProvider provideInValidSizes
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
      */
     public function testInvalidMaxSize($maxSize)
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new File(['maxSize' => $maxSize]);
     }
 
@@ -97,6 +97,10 @@ public function provideValidSizes()
             ['1MI', 1048576, true],
             ['3m', 3000000, false],
             ['3M', 3000000, false],
+            ['1gi', 1073741824, true],
+            ['1GI', 1073741824, true],
+            ['4g', 4000000000, false],
+            ['4G', 4000000000, false],
         ];
     }
 
@@ -107,8 +111,6 @@ public function provideInvalidSizes()
             ['foo'],
             ['1Ko'],
             ['1kio'],
-            ['1G'],
-            ['1Gi'],
         ];
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/FileValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/FileValidatorTest.php
index 65906c5539feec035b0f2aba63485604e99c1600..c0c89398ce466e04d936ba972f3fefea69553840 100644
--- a/vendor/symfony/validator/Tests/Constraints/FileValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/FileValidatorTest.php
@@ -66,11 +66,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleTypeOrFile()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new File());
     }
 
@@ -222,11 +220,9 @@ public function testMaxSizeNotExceeded($bytesWritten, $limit)
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMaxSize()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new File([
             'maxSize' => '1abc',
         ]);
@@ -454,7 +450,7 @@ public function uploadedFileErrorProvider()
             $reflection = new \ReflectionClass(\get_class(new FileValidator()));
             $method = $reflection->getMethod('factorizeSizes');
             $method->setAccessible(true);
-            list($sizeAsString, $limit, $suffix) = $method->invokeArgs(new FileValidator(), [0, UploadedFile::getMaxFilesize(), false]);
+            list(, $limit, $suffix) = $method->invokeArgs(new FileValidator(), [0, UploadedFile::getMaxFilesize(), false]);
 
             // it correctly parses the maxSize option and not only uses simple string comparison
             // 1000M should be bigger than the ini value
diff --git a/vendor/symfony/validator/Tests/Constraints/ImageValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/ImageValidatorTest.php
index aa8ad4cf55dc77910fe0259adb258e68e3a975cc..174ba5d99c1658c610545ec518588d74792c02a1 100644
--- a/vendor/symfony/validator/Tests/Constraints/ImageValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/ImageValidatorTest.php
@@ -200,11 +200,9 @@ public function testPixelsTooMany()
             ->assertRaised();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMinWidth()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'minWidth' => '1abc',
         ]);
@@ -212,11 +210,9 @@ public function testInvalidMinWidth()
         $this->validator->validate($this->image, $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMaxWidth()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'maxWidth' => '1abc',
         ]);
@@ -224,11 +220,9 @@ public function testInvalidMaxWidth()
         $this->validator->validate($this->image, $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMinHeight()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'minHeight' => '1abc',
         ]);
@@ -236,11 +230,9 @@ public function testInvalidMinHeight()
         $this->validator->validate($this->image, $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMaxHeight()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'maxHeight' => '1abc',
         ]);
@@ -248,11 +240,9 @@ public function testInvalidMaxHeight()
         $this->validator->validate($this->image, $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMinPixels()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'minPixels' => '1abc',
         ]);
@@ -260,11 +250,9 @@ public function testInvalidMinPixels()
         $this->validator->validate($this->image, $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMaxPixels()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'maxPixels' => '1abc',
         ]);
@@ -315,11 +303,9 @@ public function testMaxRatioUsesTwoDecimalsOnly()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMinRatio()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'minRatio' => '1abc',
         ]);
@@ -327,11 +313,9 @@ public function testInvalidMinRatio()
         $this->validator->validate($this->image, $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidMaxRatio()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $constraint = new Image([
             'maxRatio' => '1abc',
         ]);
diff --git a/vendor/symfony/validator/Tests/Constraints/IpValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/IpValidatorTest.php
index 1ee44e7c518d653b0467496d2cddac6563bb3e66..a7a161bf946d8536824879355f714f3ef0296277 100644
--- a/vendor/symfony/validator/Tests/Constraints/IpValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/IpValidatorTest.php
@@ -36,19 +36,15 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Ip());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testInvalidValidatorVersion()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         new Ip([
             'version' => 666,
         ]);
@@ -330,7 +326,7 @@ public function getInvalidReservedIpsV6()
     {
         // Quoting after official filter documentation:
         // "FILTER_FLAG_NO_RES_RANGE = This flag does not apply to IPv6 addresses."
-        // Full description: http://php.net/manual/en/filter.filters.flags.php
+        // Full description: https://php.net/filter.filters.flags
         return $this->getInvalidIpsV6();
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/IsbnValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/IsbnValidatorTest.php
index 3c17fd403ad0ba0168f3ec09d5b876c54df64f93..4e12f0f23f28716f405d8412bbbd5fa46a6b7f22 100644
--- a/vendor/symfony/validator/Tests/Constraints/IsbnValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/IsbnValidatorTest.php
@@ -136,11 +136,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $constraint = new Isbn(true);
 
         $this->validator->validate(new \stdClass(), $constraint);
diff --git a/vendor/symfony/validator/Tests/Constraints/IssnValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/IssnValidatorTest.php
index c9ca7ade88773e2aa2a2d21eac22c55a21c49149..3df0d2ebb4a32015a954070227e4e0119c3fb9fe 100644
--- a/vendor/symfony/validator/Tests/Constraints/IssnValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/IssnValidatorTest.php
@@ -106,11 +106,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $constraint = new Issn();
         $this->validator->validate(new \stdClass(), $constraint);
     }
diff --git a/vendor/symfony/validator/Tests/Constraints/LanguageValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/LanguageValidatorTest.php
index 247301df2e1694bfc403ae15c5c0c615dae7ca05..4991f9850ee5230a1325be06578f70830194c7f4 100644
--- a/vendor/symfony/validator/Tests/Constraints/LanguageValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/LanguageValidatorTest.php
@@ -18,6 +18,22 @@
 
 class LanguageValidatorTest extends ConstraintValidatorTestCase
 {
+    private $defaultLocale;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->defaultLocale = \Locale::getDefault();
+    }
+
+    protected function tearDown()
+    {
+        parent::tearDown();
+
+        \Locale::setDefault($this->defaultLocale);
+    }
+
     protected function createValidator()
     {
         return new LanguageValidator();
@@ -37,11 +53,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Language());
     }
 
@@ -59,7 +73,6 @@ public function getValidLanguages()
     {
         return [
             ['en'],
-            ['en_US'],
             ['my'],
         ];
     }
diff --git a/vendor/symfony/validator/Tests/Constraints/LengthValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/LengthValidatorTest.php
index f1daee534aa3fa92359a1240dd4a4b53c1977f41..bf7cca3c63247b3ec6b038392c037d99183240d3 100644
--- a/vendor/symfony/validator/Tests/Constraints/LengthValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/LengthValidatorTest.php
@@ -36,11 +36,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Length(5));
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/LocaleValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/LocaleValidatorTest.php
index 3d5123116534d75d274325f0ebcde1b14acb246d..0d15f375c43df0a3e725345507d2494514886d4d 100644
--- a/vendor/symfony/validator/Tests/Constraints/LocaleValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/LocaleValidatorTest.php
@@ -36,11 +36,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Locale());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/LuhnValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/LuhnValidatorTest.php
index 02aae3adbc31749a826b2eaf9c7ae566c630e0eb..a90b90ff63b5a9c247f774aaa6e570fb6d860256 100644
--- a/vendor/symfony/validator/Tests/Constraints/LuhnValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/LuhnValidatorTest.php
@@ -99,11 +99,11 @@ public function getInvalidNumbers()
     }
 
     /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
      * @dataProvider getInvalidTypes
      */
     public function testInvalidTypes($number)
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $constraint = new Luhn();
 
         $this->validator->validate($number, $constraint);
diff --git a/vendor/symfony/validator/Tests/Constraints/RangeValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/RangeValidatorTest.php
index 661161d886a20e70a0d835cf8d130264ecc76a07..83e32d8d97dd57cfa7645d735c2ac33c4295592d 100644
--- a/vendor/symfony/validator/Tests/Constraints/RangeValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/RangeValidatorTest.php
@@ -14,6 +14,7 @@
 use Symfony\Component\Intl\Util\IntlTestHelper;
 use Symfony\Component\Validator\Constraints\Range;
 use Symfony\Component\Validator\Constraints\RangeValidator;
+use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
 use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
 
 class RangeValidatorTest extends ConstraintValidatorTestCase
@@ -50,7 +51,7 @@ public function getLessThanTen()
             [9.99999, '9.99999'],
             ['9.99999', '"9.99999"'],
             [5, '5'],
-            [1.0, '1.0'],
+            [1.0, '1'],
         ];
     }
 
@@ -60,7 +61,7 @@ public function getMoreThanTwenty()
             [20.000001, '20.000001'],
             ['20.000001', '"20.000001"'],
             [21, '21'],
-            [30.0, '30.0'],
+            [30.0, '30'],
         ];
     }
 
@@ -389,4 +390,29 @@ public function testNonNumeric()
             ->setCode(Range::INVALID_CHARACTERS_ERROR)
             ->assertRaised();
     }
+
+    /**
+     * @dataProvider throwsOnInvalidStringDatesProvider
+     */
+    public function testThrowsOnInvalidStringDates($expectedMessage, $value, $min, $max)
+    {
+        $this->expectException(ConstraintDefinitionException::class);
+        $this->expectExceptionMessage($expectedMessage);
+
+        $this->validator->validate($value, new Range([
+            'min' => $min,
+            'max' => $max,
+        ]));
+    }
+
+    public function throwsOnInvalidStringDatesProvider()
+    {
+        return [
+            ['The min value "foo" could not be converted to a "DateTimeImmutable" instance in the "Symfony\Component\Validator\Constraints\Range" constraint.', new \DateTimeImmutable(), 'foo', null],
+            ['The min value "foo" could not be converted to a "DateTime" instance in the "Symfony\Component\Validator\Constraints\Range" constraint.', new \DateTime(), 'foo', null],
+            ['The max value "foo" could not be converted to a "DateTimeImmutable" instance in the "Symfony\Component\Validator\Constraints\Range" constraint.', new \DateTimeImmutable(), null, 'foo'],
+            ['The max value "foo" could not be converted to a "DateTime" instance in the "Symfony\Component\Validator\Constraints\Range" constraint.', new \DateTime(), null, 'foo'],
+            ['The min value "bar" could not be converted to a "DateTimeImmutable" instance in the "Symfony\Component\Validator\Constraints\Range" constraint.', new \DateTimeImmutable(), 'bar', 'ccc'],
+        ];
+    }
 }
diff --git a/vendor/symfony/validator/Tests/Constraints/RegexValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/RegexValidatorTest.php
index 55e739b036884b459de4fcc96811efef8b105529..edfb65e7a9e7a35bf9f9bf2bd5ebc08d2efac72c 100644
--- a/vendor/symfony/validator/Tests/Constraints/RegexValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/RegexValidatorTest.php
@@ -36,11 +36,9 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Regex(['pattern' => '/^[0-9]+$/']));
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/TimeValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/TimeValidatorTest.php
index fe22e9673b7ca0806a8d0c8349ab06e684c65501..e32a34b231807a8db0906a8bc833da307d472ae9 100644
--- a/vendor/symfony/validator/Tests/Constraints/TimeValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/TimeValidatorTest.php
@@ -43,11 +43,9 @@ public function testDateTimeClassIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Time());
     }
 
diff --git a/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php
index bd1c9a3e09f922b0f8a05d2a3762763cafb28000..f04dd44bc961d613b629dfd707352c210717904a 100644
--- a/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/UrlValidatorTest.php
@@ -47,11 +47,9 @@ public function testEmptyStringFromObjectIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Url());
     }
 
@@ -69,11 +67,13 @@ public function getValidUrls()
     {
         return [
             ['http://a.pl'],
-            ['http://www.google.com'],
-            ['http://www.google.com.'],
-            ['http://www.google.museum'],
-            ['https://google.com/'],
-            ['https://google.com:80/'],
+            ['http://www.example.com'],
+            ['http://www.example.com.'],
+            ['http://www.example.museum'],
+            ['https://example.com/'],
+            ['https://example.com:80/'],
+            ['http://examp_le.com'],
+            ['http://www.sub_domain.examp_le.com'],
             ['http://www.example.coop/'],
             ['http://www.test-example.com/'],
             ['http://www.symfony.com/'],
@@ -150,15 +150,14 @@ public function testInvalidUrls($url)
     public function getInvalidUrls()
     {
         return [
-            ['google.com'],
-            ['://google.com'],
-            ['http ://google.com'],
-            ['http:/google.com'],
-            ['http://goog_le.com'],
-            ['http://google.com::aa'],
-            ['http://google.com:aa'],
-            ['ftp://google.fr'],
-            ['faked://google.fr'],
+            ['example.com'],
+            ['://example.com'],
+            ['http ://example.com'],
+            ['http:/example.com'],
+            ['http://example.com::aa'],
+            ['http://example.com:aa'],
+            ['ftp://example.fr'],
+            ['faked://example.fr'],
             ['http://127.0.0.1:aa/'],
             ['ftp://[::1]/'],
             ['http://[::1'],
@@ -191,7 +190,7 @@ public function testCustomProtocolIsValid($url)
     public function getValidCustomUrls()
     {
         return [
-            ['ftp://google.com'],
+            ['ftp://example.com'],
             ['file://127.0.0.1'],
             ['git://[::1]/'],
         ];
@@ -281,11 +280,11 @@ public function testCheckDnsWithBoolean()
     }
 
     /**
-     * @expectedException \Symfony\Component\Validator\Exception\InvalidOptionsException
      * @requires function Symfony\Bridge\PhpUnit\DnsMock::withMockedHosts
      */
     public function testCheckDnsWithInvalidType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\InvalidOptionsException');
         DnsMock::withMockedHosts(['example.com' => [['type' => 'A']]]);
 
         $constraint = new Url([
diff --git a/vendor/symfony/validator/Tests/Constraints/UuidValidatorTest.php b/vendor/symfony/validator/Tests/Constraints/UuidValidatorTest.php
index 6c379b9430fb9f8a3ef0207c3863955157f94ac1..21bb9e506422975881c74541249d8a95f9aedff8 100644
--- a/vendor/symfony/validator/Tests/Constraints/UuidValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Constraints/UuidValidatorTest.php
@@ -39,21 +39,17 @@ public function testEmptyStringIsValid()
         $this->assertNoViolation();
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsUuidConstraintCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $constraint = $this->getMockForAbstractClass('Symfony\\Component\\Validator\\Constraint');
 
         $this->validator->validate('216fff40-98d9-11e3-a5e2-0800200c9a66', $constraint);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\UnexpectedTypeException
-     */
     public function testExpectsStringCompatibleType()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\UnexpectedTypeException');
         $this->validator->validate(new \stdClass(), new Uuid());
     }
 
diff --git a/vendor/symfony/validator/Tests/ContainerConstraintValidatorFactoryTest.php b/vendor/symfony/validator/Tests/ContainerConstraintValidatorFactoryTest.php
index 5178bc3b3060d61d136a4e1b1c46ab780a37d0b0..adc292b213d88eccd05a1bcbeec538731700248a 100644
--- a/vendor/symfony/validator/Tests/ContainerConstraintValidatorFactoryTest.php
+++ b/vendor/symfony/validator/Tests/ContainerConstraintValidatorFactoryTest.php
@@ -45,11 +45,9 @@ public function testGetInstanceReturnsService()
         $this->assertSame($validator, $factory->getInstance(new DummyConstraint()));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ValidatorException
-     */
     public function testGetInstanceInvalidValidatorClass()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ValidatorException');
         $constraint = $this->getMockBuilder(Constraint::class)->getMock();
         $constraint
             ->expects($this->once())
diff --git a/vendor/symfony/validator/Tests/DataCollector/ValidatorDataCollectorTest.php b/vendor/symfony/validator/Tests/DataCollector/ValidatorDataCollectorTest.php
index f32acf228bcc32a090672cdd8ed4d5e8f1bfd03c..29fd4b38d151f39933b6d6a344e7ca06d8f0045c 100644
--- a/vendor/symfony/validator/Tests/DataCollector/ValidatorDataCollectorTest.php
+++ b/vendor/symfony/validator/Tests/DataCollector/ValidatorDataCollectorTest.php
@@ -71,9 +71,4 @@ public function testReset()
         $this->assertCount(0, $collector->getCalls());
         $this->assertSame(0, $collector->getViolationsCount());
     }
-
-    protected function createMock($classname)
-    {
-        return $this->getMockBuilder($classname)->disableOriginalConstructor()->getMock();
-    }
 }
diff --git a/vendor/symfony/validator/Tests/DependencyInjection/AddConstraintValidatorsPassTest.php b/vendor/symfony/validator/Tests/DependencyInjection/AddConstraintValidatorsPassTest.php
index c3224840bb2dab6092c0205475124b08f1ac4a45..9a2958364df176d02e18ce66367a2c56cc383d6a 100644
--- a/vendor/symfony/validator/Tests/DependencyInjection/AddConstraintValidatorsPassTest.php
+++ b/vendor/symfony/validator/Tests/DependencyInjection/AddConstraintValidatorsPassTest.php
@@ -43,12 +43,10 @@ public function testThatConstraintValidatorServicesAreProcessed()
         $this->assertEquals($expected, $container->getDefinition((string) $validatorFactory->getArgument(0)));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The service "my_abstract_constraint_validator" tagged "validator.constraint_validator" must not be abstract.
-     */
     public function testAbstractConstraintValidator()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The service "my_abstract_constraint_validator" tagged "validator.constraint_validator" must not be abstract.');
         $container = new ContainerBuilder();
         $container->register('validator.validator_factory')
             ->addArgument([]);
diff --git a/vendor/symfony/validator/Tests/Fixtures/ConstraintAValidator.php b/vendor/symfony/validator/Tests/Fixtures/ConstraintAValidator.php
deleted file mode 100644
index 8b0d30f57142148a7b6daa0cee7fedccbfb6e649..0000000000000000000000000000000000000000
--- a/vendor/symfony/validator/Tests/Fixtures/ConstraintAValidator.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Fixtures;
-
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Context\ExecutionContextInterface;
-
-class ConstraintAValidator extends ConstraintValidator
-{
-    public static $passedContext;
-
-    public function initialize(ExecutionContextInterface $context)
-    {
-        parent::initialize($context);
-
-        self::$passedContext = $context;
-    }
-
-    public function validate($value, Constraint $constraint)
-    {
-        if ('VALID' != $value) {
-            $this->context->addViolation('message', ['param' => 'value']);
-
-            return;
-        }
-    }
-}
diff --git a/vendor/symfony/validator/Tests/Fixtures/FakeClassMetadata.php b/vendor/symfony/validator/Tests/Fixtures/FakeClassMetadata.php
deleted file mode 100644
index 39f54777795cd48d5a66b348aad675f450707da8..0000000000000000000000000000000000000000
--- a/vendor/symfony/validator/Tests/Fixtures/FakeClassMetadata.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Tests\Fixtures;
-
-use Symfony\Component\Validator\Mapping\ClassMetadata;
-
-class FakeClassMetadata extends ClassMetadata
-{
-    public function addCustomPropertyMetadata($propertyName, $metadata)
-    {
-        if (!isset($this->members[$propertyName])) {
-            $this->members[$propertyName] = [];
-        }
-
-        $this->members[$propertyName][] = $metadata;
-    }
-}
diff --git a/vendor/symfony/validator/Tests/Mapping/ClassMetadataTest.php b/vendor/symfony/validator/Tests/Mapping/ClassMetadataTest.php
index d33342c42557c60ea8cb6e20e60e8324f0347612..73af5c189405345290df00f4c207540b2f68e011 100644
--- a/vendor/symfony/validator/Tests/Mapping/ClassMetadataTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/ClassMetadataTest.php
@@ -40,14 +40,14 @@ protected function tearDown()
 
     public function testAddConstraintDoesNotAcceptValid()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
 
         $this->metadata->addConstraint(new Valid());
     }
 
     public function testAddConstraintRequiresClassConstraints()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
 
         $this->metadata->addConstraint(new PropertyConstraint());
     }
@@ -250,47 +250,37 @@ public function testGroupSequencesWorkIfContainingDefaultGroup()
         $this->assertInstanceOf('Symfony\Component\Validator\Constraints\GroupSequence', $this->metadata->getGroupSequence());
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException
-     */
     public function testGroupSequencesFailIfNotContainingDefaultGroup()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\GroupDefinitionException');
         $this->metadata->setGroupSequence(['Foo', 'Bar']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException
-     */
     public function testGroupSequencesFailIfContainingDefault()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\GroupDefinitionException');
         $this->metadata->setGroupSequence(['Foo', $this->metadata->getDefaultGroup(), Constraint::DEFAULT_GROUP]);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException
-     */
     public function testGroupSequenceFailsIfGroupSequenceProviderIsSet()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\GroupDefinitionException');
         $metadata = new ClassMetadata(self::PROVIDERCLASS);
         $metadata->setGroupSequenceProvider(true);
         $metadata->setGroupSequence(['GroupSequenceProviderEntity', 'Foo']);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException
-     */
     public function testGroupSequenceProviderFailsIfGroupSequenceIsSet()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\GroupDefinitionException');
         $metadata = new ClassMetadata(self::PROVIDERCLASS);
         $metadata->setGroupSequence(['GroupSequenceProviderEntity', 'Foo']);
         $metadata->setGroupSequenceProvider(true);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\GroupDefinitionException
-     */
     public function testGroupSequenceProviderFailsIfDomainClassIsInvalid()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\GroupDefinitionException');
         $metadata = new ClassMetadata('stdClass');
         $metadata->setGroupSequenceProvider(true);
     }
diff --git a/vendor/symfony/validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php b/vendor/symfony/validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
index a323567d2316bf3ba293d286790ba9d19a3b8b7a..42477e9f8885bbdff3be18ae5adf21a9d15183b2 100644
--- a/vendor/symfony/validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/Factory/BlackHoleMetadataFactoryTest.php
@@ -16,11 +16,9 @@
 
 class BlackHoleMetadataFactoryTest extends TestCase
 {
-    /**
-     * @expectedException \LogicException
-     */
     public function testGetMetadataForThrowsALogicException()
     {
+        $this->expectException('LogicException');
         $metadataFactory = new BlackHoleMetadataFactory();
         $metadataFactory->getMetadataFor('foo');
     }
diff --git a/vendor/symfony/validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php b/vendor/symfony/validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
index 9ad85e3f904fe2155280afd8fdab2fa0052ad310..6a89ef1c305146b0f18a0e8ec749e9c32610a48b 100644
--- a/vendor/symfony/validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/Factory/LazyLoadingMetadataFactoryTest.php
@@ -12,7 +12,9 @@
 namespace Symfony\Component\Validator\Tests\Mapping\Factory;
 
 use PHPUnit\Framework\TestCase;
+use Symfony\Component\Cache\Adapter\ArrayAdapter;
 use Symfony\Component\Validator\Constraints\Callback;
+use Symfony\Component\Validator\Mapping\Cache\Psr6Cache;
 use Symfony\Component\Validator\Mapping\ClassMetadata;
 use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
 use Symfony\Component\Validator\Mapping\Loader\LoaderInterface;
@@ -78,41 +80,20 @@ public function testMergeParentConstraints()
 
     public function testWriteMetadataToCache()
     {
-        $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
+        $cache = new Psr6Cache(new ArrayAdapter());
         $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache);
 
         $parentClassConstraints = [
             new ConstraintA(['groups' => ['Default', 'EntityParent']]),
             new ConstraintA(['groups' => ['Default', 'EntityInterfaceA', 'EntityParent']]),
         ];
-        $interfaceAConstraints = [
-            new ConstraintA(['groups' => ['Default', 'EntityInterfaceA']]),
-        ];
-
-        $cache->expects($this->never())
-              ->method('has');
-        $cache->expects($this->exactly(2))
-              ->method('read')
-              ->withConsecutive(
-                  [$this->equalTo(self::PARENT_CLASS)],
-                  [$this->equalTo(self::INTERFACE_A_CLASS)]
-              )
-              ->willReturn(false);
-        $cache->expects($this->exactly(2))
-              ->method('write')
-              ->withConsecutive(
-                  $this->callback(function ($metadata) use ($interfaceAConstraints) {
-                      return $interfaceAConstraints == $metadata->getConstraints();
-                  }),
-                  $this->callback(function ($metadata) use ($parentClassConstraints) {
-                      return $parentClassConstraints == $metadata->getConstraints();
-                  })
-              );
 
         $metadata = $factory->getMetadataFor(self::PARENT_CLASS);
 
         $this->assertEquals(self::PARENT_CLASS, $metadata->getClassName());
         $this->assertEquals($parentClassConstraints, $metadata->getConstraints());
+        $this->assertInstanceOf(ClassMetadata::class, $cache->read(self::PARENT_CLASS));
+        $this->assertInstanceOf(ClassMetadata::class, $cache->read(self::INTERFACE_A_CLASS));
     }
 
     public function testReadMetadataFromCache()
@@ -149,11 +130,9 @@ public function testReadMetadataFromCache()
         $this->assertEquals($metadata, $factory->getMetadataFor(self::PARENT_CLASS));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException
-     */
     public function testNonClassNameStringValues()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\NoSuchMetadataException');
         $testedValue = 'error@example.com';
         $loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock();
         $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock();
diff --git a/vendor/symfony/validator/Tests/Mapping/GetterMetadataTest.php b/vendor/symfony/validator/Tests/Mapping/GetterMetadataTest.php
index 05aef47e84aaf8d89b65d114f65598a55aa494a0..63d127c67aa13bd1371f45cf83f0ac3bada5bf60 100644
--- a/vendor/symfony/validator/Tests/Mapping/GetterMetadataTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/GetterMetadataTest.php
@@ -21,7 +21,7 @@ class GetterMetadataTest extends TestCase
 
     public function testInvalidPropertyName()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ValidatorException');
+        $this->expectException('Symfony\Component\Validator\Exception\ValidatorException');
 
         new GetterMetadata(self::CLASSNAME, 'foobar');
     }
@@ -61,12 +61,10 @@ public function testGetPropertyValueFromHasser()
         $this->assertEquals('permissions', $metadata->getPropertyValue($entity));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ValidatorException
-     * @expectedExceptionMessage The hasLastName() method does not exist in class Symfony\Component\Validator\Tests\Fixtures\Entity.
-     */
     public function testUndefinedMethodNameThrowsException()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ValidatorException');
+        $this->expectExceptionMessage('The hasLastName() method does not exist in class Symfony\Component\Validator\Tests\Fixtures\Entity.');
         new GetterMetadata(self::CLASSNAME, 'lastName', 'hasLastName');
     }
 }
diff --git a/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php b/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
index d6b20a0c8dcb986af7c5896f63ccc8e7e9b04389..53c77ec33830545334361c04e64b964d254e3431 100644
--- a/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/Loader/XmlFileLoaderTest.php
@@ -114,7 +114,7 @@ public function testThrowExceptionIfDocTypeIsSet()
         $loader = new XmlFileLoader(__DIR__.'/withdoctype.xml');
         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('\Symfony\Component\Validator\Exception\MappingException');
+        $this->expectException('\Symfony\Component\Validator\Exception\MappingException');
         $loader->loadClassMetadata($metadata);
     }
 
@@ -129,7 +129,7 @@ public function testDoNotModifyStateIfExceptionIsThrown()
         try {
             $loader->loadClassMetadata($metadata);
         } catch (MappingException $e) {
-            $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('\Symfony\Component\Validator\Exception\MappingException');
+            $this->expectException('\Symfony\Component\Validator\Exception\MappingException');
             $loader->loadClassMetadata($metadata);
         }
     }
diff --git a/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php b/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
index afa50cbee6485aa0f52725701d0eb314a61cf694..f81868b5b825fca54a0e56037d06a594c810c74c 100644
--- a/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/Loader/YamlFileLoaderTest.php
@@ -40,10 +40,10 @@ public function testLoadClassMetadataReturnsFalseIfEmpty()
 
     /**
      * @dataProvider provideInvalidYamlFiles
-     * @expectedException \InvalidArgumentException
      */
     public function testInvalidYamlFiles($path)
     {
+        $this->expectException('InvalidArgumentException');
         $loader = new YamlFileLoader(__DIR__.'/'.$path);
         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
 
@@ -69,7 +69,7 @@ public function testDoNotModifyStateIfExceptionIsThrown()
             $loader->loadClassMetadata($metadata);
         } catch (\InvalidArgumentException $e) {
             // Call again. Again an exception should be thrown
-            $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('\InvalidArgumentException');
+            $this->expectException('\InvalidArgumentException');
             $loader->loadClassMetadata($metadata);
         }
     }
diff --git a/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php b/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
index b6983f75b5715c0368a67960d8ec239c9727db2e..651ba9564254a176aff0498fd29ce0545c2df3d7 100644
--- a/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/MemberMetadataTest.php
@@ -38,7 +38,7 @@ protected function tearDown()
 
     public function testAddConstraintRequiresClassConstraints()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
 
         $this->metadata->addConstraint(new ClassConstraint());
     }
diff --git a/vendor/symfony/validator/Tests/Mapping/PropertyMetadataTest.php b/vendor/symfony/validator/Tests/Mapping/PropertyMetadataTest.php
index 9fea435dff27997f5c4f48b157cddbc1de8bffa5..7902625219ba9b60798daa07ef25b6e880a7b3c6 100644
--- a/vendor/symfony/validator/Tests/Mapping/PropertyMetadataTest.php
+++ b/vendor/symfony/validator/Tests/Mapping/PropertyMetadataTest.php
@@ -22,7 +22,7 @@ class PropertyMetadataTest extends TestCase
 
     public function testInvalidPropertyName()
     {
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ValidatorException');
+        $this->expectException('Symfony\Component\Validator\Exception\ValidatorException');
 
         new PropertyMetadata(self::CLASSNAME, 'foobar');
     }
@@ -50,7 +50,7 @@ public function testGetPropertyValueFromRemovedProperty()
         $metadata = new PropertyMetadata(self::CLASSNAME, 'internal');
         $metadata->name = 'test';
 
-        $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('Symfony\Component\Validator\Exception\ValidatorException');
+        $this->expectException('Symfony\Component\Validator\Exception\ValidatorException');
         $metadata->getPropertyValue($entity);
     }
 }
diff --git a/vendor/symfony/validator/Tests/Resources/TranslationFilesTest.php b/vendor/symfony/validator/Tests/Resources/TranslationFilesTest.php
index 64b3f78934f1d03d1bfde241e5eb6aa308891cbc..56ff24d2fd4bc8e044c1151f5ecd68f9b98c6d82 100644
--- a/vendor/symfony/validator/Tests/Resources/TranslationFilesTest.php
+++ b/vendor/symfony/validator/Tests/Resources/TranslationFilesTest.php
@@ -20,11 +20,7 @@ class TranslationFilesTest extends TestCase
      */
     public function testTranslationFileIsValid($filePath)
     {
-        if (class_exists('PHPUnit_Util_XML')) {
-            \PHPUnit_Util_XML::loadfile($filePath, false, false, true);
-        } else {
-            \PHPUnit\Util\XML::loadfile($filePath, false, false, true);
-        }
+        \PHPUnit\Util\XML::loadfile($filePath, false, false, true);
 
         $this->addToAssertionCount(1);
     }
diff --git a/vendor/symfony/validator/Tests/Util/PropertyPathTest.php b/vendor/symfony/validator/Tests/Util/PropertyPathTest.php
index f796463bbc32085f40b7384dac5910d71816a4bf..99bf9e6eb2ebebe76e7a028129ef97a5c0204507 100644
--- a/vendor/symfony/validator/Tests/Util/PropertyPathTest.php
+++ b/vendor/symfony/validator/Tests/Util/PropertyPathTest.php
@@ -32,6 +32,7 @@ public function provideAppendPaths()
             ['foo', 'bar', 'foo.bar', 'It append the subPath to the basePath'],
             ['foo', '[bar]', 'foo[bar]', 'It does not include the dot separator if subPath uses the array notation'],
             ['0', 'bar', '0.bar', 'Leading zeros are kept.'],
+            ['0', 1, '0.1', 'Numeric subpaths do not cause PHP 7.4 errors.'],
         ];
     }
 }
diff --git a/vendor/symfony/validator/Tests/Validator/AbstractTest.php b/vendor/symfony/validator/Tests/Validator/AbstractTest.php
index 2bc3d11ef6d49706eaa04f00773fdbda3073775c..697be6edc63f7d502378b937df5cb3e7f11ef2d1 100644
--- a/vendor/symfony/validator/Tests/Validator/AbstractTest.php
+++ b/vendor/symfony/validator/Tests/Validator/AbstractTest.php
@@ -411,11 +411,9 @@ public function testTraversalDisabledOnClass()
         $this->assertCount(0, $violations);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
-     */
     public function testExpectTraversableIfTraversalEnabledOnClass()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
         $entity = new Entity();
 
         $this->metadata->addConstraint(new Traverse(true));
@@ -511,7 +509,7 @@ public function testAddCustomizedViolation()
                 ->setParameter('%param%', 'value')
                 ->setInvalidValue('Invalid value')
                 ->setPlural(2)
-                ->setCode(42)
+                ->setCode('42')
                 ->addViolation();
         };
 
@@ -528,7 +526,7 @@ public function testAddCustomizedViolation()
         $this->assertSame($entity, $violations[0]->getRoot());
         $this->assertSame('Invalid value', $violations[0]->getInvalidValue());
         $this->assertSame(2, $violations[0]->getPlural());
-        $this->assertSame(42, $violations[0]->getCode());
+        $this->assertSame('42', $violations[0]->getCode());
     }
 
     public function testNoDuplicateValidationIfClassConstraintInMultipleGroups()
@@ -569,11 +567,9 @@ public function testNoDuplicateValidationIfPropertyConstraintInMultipleGroups()
         $this->assertCount(1, $violations);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\RuntimeException
-     */
     public function testValidateFailsIfNoConstraintsAndNoObjectOrArray()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\RuntimeException');
         $this->validate('Foobar');
     }
 
diff --git a/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php b/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
index 884ccc7da0f955e3a79713d11ee451457e619e96..07e45f47eb2cb2f91ce4b35c2191b2b07fde1a5d 100644
--- a/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Validator/AbstractValidatorTest.php
@@ -499,11 +499,9 @@ public function testsIgnoreNullReference()
         $this->assertCount(0, $violations);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException
-     */
     public function testFailOnScalarReferences()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\NoSuchMetadataException');
         $entity = new Entity();
         $entity->reference = 'string';
 
@@ -738,11 +736,9 @@ public function testDisableTraversableTraversal()
         $this->assertCount(0, $violations);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException
-     */
     public function testMetadataMustExistIfTraversalIsDisabled()
     {
+        $this->expectException('Symfony\Component\Validator\Exception\NoSuchMetadataException');
         $entity = new Entity();
         $entity->reference = new \ArrayIterator();
 
diff --git a/vendor/symfony/validator/Tests/Validator/TraceableValidatorTest.php b/vendor/symfony/validator/Tests/Validator/TraceableValidatorTest.php
index b80efed27e7b726b329199380326d74156f36984..8acfa597c284924e87cd21638a766e4b524cb0dd 100644
--- a/vendor/symfony/validator/Tests/Validator/TraceableValidatorTest.php
+++ b/vendor/symfony/validator/Tests/Validator/TraceableValidatorTest.php
@@ -95,9 +95,4 @@ public function testForwardsToOriginalValidator()
         $expects('validatePropertyValue')->willReturn($expected = new ConstraintViolationList());
         $this->assertSame($expected, $validator->validatePropertyValue(new \stdClass(), 'property', 'value'), 'returns original validator validatePropertyValue() result');
     }
-
-    protected function createMock($classname)
-    {
-        return $this->getMockBuilder($classname)->disableOriginalConstructor()->getMock();
-    }
 }
diff --git a/vendor/symfony/validator/Util/PropertyPath.php b/vendor/symfony/validator/Util/PropertyPath.php
index 4108a02c24f25bf6a797626f184c3aa6711dd953..5d062356772c01da232dec3418b33d256c124970 100644
--- a/vendor/symfony/validator/Util/PropertyPath.php
+++ b/vendor/symfony/validator/Util/PropertyPath.php
@@ -36,12 +36,13 @@ class PropertyPath
      */
     public static function append($basePath, $subPath)
     {
-        if ('' !== (string) $subPath) {
+        $subPath = (string) $subPath;
+        if ('' !== $subPath) {
             if ('[' === $subPath[0]) {
                 return $basePath.$subPath;
             }
 
-            return '' !== (string) $basePath ? $basePath.'.'.$subPath : $subPath;
+            return '' !== $basePath ? $basePath.'.'.$subPath : $subPath;
         }
 
         return $basePath;
diff --git a/vendor/symfony/validator/composer.json b/vendor/symfony/validator/composer.json
index 2f0e7584c023eea9db02f9339047d5c813eacc5f..287e3c2d18c4c907ca4ead32f42a2d2c820727e9 100644
--- a/vendor/symfony/validator/composer.json
+++ b/vendor/symfony/validator/composer.json
@@ -32,11 +32,12 @@
         "symfony/expression-language": "~2.8|~3.0|~4.0",
         "symfony/cache": "~3.1|~4.0",
         "symfony/property-access": "~2.8|~3.0|~4.0",
-        "doctrine/annotations": "~1.0",
+        "doctrine/annotations": "~1.7",
         "doctrine/cache": "~1.0",
-        "egulias/email-validator": "^1.2.8|~2.0"
+        "egulias/email-validator": "^2.1.10"
     },
     "conflict": {
+        "doctrine/lexer": "<1.0.2",
         "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
         "symfony/dependency-injection": "<3.3",
         "symfony/http-kernel": "<3.3.5",
diff --git a/vendor/symfony/yaml/Command/LintCommand.php b/vendor/symfony/yaml/Command/LintCommand.php
index cc19a5658101d2c4f8942f5bf4bcca765eb3fb99..f6732ecf8df60debe53f39870e2a4ac5bc9362d1 100644
--- a/vendor/symfony/yaml/Command/LintCommand.php
+++ b/vendor/symfony/yaml/Command/LintCommand.php
@@ -196,10 +196,13 @@ private function getFiles($fileOrDirectory)
         }
     }
 
+    /**
+     * @return string|null
+     */
     private function getStdin()
     {
         if (0 !== ftell(STDIN)) {
-            return;
+            return null;
         }
 
         $inputs = '';
diff --git a/vendor/symfony/yaml/Dumper.php b/vendor/symfony/yaml/Dumper.php
index d2a2ebcf88c218f05c8e5ea1e1aceb24ae1be9d9..a496dcc88ec2f7ea8f817a894d8199aa4b1ac5d3 100644
--- a/vendor/symfony/yaml/Dumper.php
+++ b/vendor/symfony/yaml/Dumper.php
@@ -11,6 +11,8 @@
 
 namespace Symfony\Component\Yaml;
 
+use Symfony\Component\Yaml\Tag\TaggedValue;
+
 /**
  * Dumper dumps PHP variables to YAML strings.
  *
@@ -91,7 +93,7 @@ public function dump($input, $inline = 0, $indent = 0, $flags = 0)
             $dumpObjectAsInlineMap = empty((array) $input);
         }
 
-        if ($inline <= 0 || (!\is_array($input) && $dumpObjectAsInlineMap) || empty($input)) {
+        if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) {
             $output .= $prefix.Inline::dump($input, $flags);
         } else {
             $dumpAsMap = Inline::isHash($input);
@@ -110,6 +112,19 @@ public function dump($input, $inline = 0, $indent = 0, $flags = 0)
                     continue;
                 }
 
+                if ($value instanceof TaggedValue) {
+                    $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag());
+
+                    if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) {
+                        $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n";
+                    } else {
+                        $output .= "\n";
+                        $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags);
+                    }
+
+                    continue;
+                }
+
                 $dumpObjectAsInlineMap = true;
 
                 if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) {
diff --git a/vendor/symfony/yaml/Inline.php b/vendor/symfony/yaml/Inline.php
index 5d71a1f30f08ce679d4da46d974ee8cd0601b28d..7d3218a35e187b7f9974faf1cc128cf854f8c62a 100644
--- a/vendor/symfony/yaml/Inline.php
+++ b/vendor/symfony/yaml/Inline.php
@@ -126,15 +126,15 @@ public static function parse($value, $flags = 0, $references = [])
                     $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references);
             }
 
-            if (null !== $tag) {
-                return new TaggedValue($tag, $result);
-            }
-
             // some comments are allowed at the end
             if (preg_replace('/\s+#.*$/A', '', substr($value, $i))) {
                 throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
             }
 
+            if (null !== $tag) {
+                return new TaggedValue($tag, $result);
+            }
+
             return $result;
         } finally {
             if (isset($mbEncoding)) {
@@ -644,7 +644,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
             case 'null' === $scalarLower:
             case '' === $scalar:
             case '~' === $scalar:
-                return;
+                return null;
             case 'true' === $scalarLower:
                 return true;
             case 'false' === $scalarLower:
@@ -672,7 +672,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
                             throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                         }
 
-                        return;
+                        return null;
                     case 0 === strpos($scalar, '!!php/object:'):
                         if (self::$objectSupport) {
                             @trigger_error(self::getDeprecationMessage('The !!php/object: tag to indicate dumped PHP objects is deprecated since Symfony 3.1 and will be removed in 4.0. Use the !php/object (without the colon) tag instead.'), E_USER_DEPRECATED);
@@ -684,7 +684,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
                             throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                         }
 
-                        return;
+                        return null;
                     case 0 === strpos($scalar, '!php/object'):
                         if (self::$objectSupport) {
                             return unserialize(self::parseScalar(substr($scalar, 12)));
@@ -694,7 +694,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
                             throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                         }
 
-                        return;
+                        return null;
                     case 0 === strpos($scalar, '!php/const:'):
                         if (self::$constantSupport) {
                             @trigger_error(self::getDeprecationMessage('The !php/const: tag to indicate dumped PHP constants is deprecated since Symfony 3.4 and will be removed in 4.0. Use the !php/const (without the colon) tag instead.'), E_USER_DEPRECATED);
@@ -709,7 +709,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
                             throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Have you forgotten to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                         }
 
-                        return;
+                        return null;
                     case 0 === strpos($scalar, '!php/const'):
                         if (self::$constantSupport) {
                             $i = 0;
@@ -723,7 +723,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
                             throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Have you forgotten to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                         }
 
-                        return;
+                        return null;
                     case 0 === strpos($scalar, '!!float '):
                         return (float) substr($scalar, 8);
                     case 0 === strpos($scalar, '!!binary '):
@@ -795,7 +795,7 @@ private static function evaluateScalar($scalar, $flags, $references = [])
     private static function parseTag($value, &$i, $flags)
     {
         if ('!' !== $value[$i]) {
-            return;
+            return null;
         }
 
         $tagLength = strcspn($value, " \t\n", $i + 1);
@@ -807,7 +807,7 @@ private static function parseTag($value, &$i, $flags)
         // Is followed by a scalar
         if ((!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && 'tagged' !== $tag) {
             // Manage non-whitelisted scalars in {@link self::evaluateScalar()}
-            return;
+            return null;
         }
 
         // Built-in tags
diff --git a/vendor/symfony/yaml/Parser.php b/vendor/symfony/yaml/Parser.php
index cc094085c62b93ffae86fb42b7988558535112f7..7d6112e3b9c6f990a8248454fcfba3a5047e5370 100644
--- a/vendor/symfony/yaml/Parser.php
+++ b/vendor/symfony/yaml/Parser.php
@@ -436,6 +436,9 @@ private function doParse($value, $flags)
                     $value = '';
 
                     foreach ($this->lines as $line) {
+                        if ('' !== ltrim($line) && '#' === ltrim($line)[0]) {
+                            continue;
+                        }
                         // If the indentation is not consistent at offset 0, it is to be considered as a ParseError
                         if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) {
                             throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
@@ -561,7 +564,7 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false)
         $oldLineIndentation = $this->getCurrentLineIndentation();
 
         if (!$this->moveToNextLine()) {
-            return;
+            return '';
         }
 
         if (null === $indentation) {
@@ -604,7 +607,7 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false)
         } else {
             $this->moveToPreviousLine();
 
-            return;
+            return '';
         }
 
         if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) {
@@ -612,7 +615,7 @@ private function getNextEmbedBlock($indentation = null, $inSequence = false)
             // and therefore no nested list or mapping
             $this->moveToPreviousLine();
 
-            return;
+            return '';
         }
 
         $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem();
@@ -712,7 +715,7 @@ private function parseValue($value, $flags, $context)
         if (self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) {
             $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
 
-            $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), (int) abs($modifiers));
+            $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), (int) abs((int) $modifiers));
 
             if ('' !== $matches['tag']) {
                 if ('!!binary' === $matches['tag']) {
@@ -1099,14 +1102,17 @@ private function trimTag($value)
         return $value;
     }
 
+    /**
+     * @return string|null
+     */
     private function getLineTag($value, $flags, $nextLineCheck = true)
     {
         if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) {
-            return;
+            return null;
         }
 
         if ($nextLineCheck && !$this->isNextLineIndented()) {
-            return;
+            return null;
         }
 
         $tag = substr($matches['tag'], 1);
diff --git a/vendor/symfony/yaml/Tests/Command/LintCommandTest.php b/vendor/symfony/yaml/Tests/Command/LintCommandTest.php
index 2bf0286b6e38b09bfbe96ed4f03d0860be9f250f..349897859f53f6aa9867f3b732b98dc1d80bb6eb 100644
--- a/vendor/symfony/yaml/Tests/Command/LintCommandTest.php
+++ b/vendor/symfony/yaml/Tests/Command/LintCommandTest.php
@@ -48,7 +48,7 @@ public function testLintIncorrectFile()
         $ret = $tester->execute(['filename' => $filename], ['decorated' => false]);
 
         $this->assertEquals(1, $ret, 'Returns 1 in case of error');
-        $this->assertContains('Unable to parse at line 3 (near "bar").', trim($tester->getDisplay()));
+        $this->assertStringContainsString('Unable to parse at line 3 (near "bar").', trim($tester->getDisplay()));
     }
 
     public function testConstantAsKey()
@@ -78,16 +78,14 @@ public function testCustomTagsError()
         $this->assertSame(1, $ret, 'lint:yaml exits with code 1 in case of error');
     }
 
-    /**
-     * @expectedException \RuntimeException
-     */
     public function testLintFileNotReadable()
     {
+        $this->expectException('RuntimeException');
         $tester = $this->createCommandTester();
         $filename = $this->createFile('');
         unlink($filename);
 
-        $ret = $tester->execute(['filename' => $filename], ['decorated' => false]);
+        $tester->execute(['filename' => $filename], ['decorated' => false]);
     }
 
     /**
diff --git a/vendor/symfony/yaml/Tests/DumperTest.php b/vendor/symfony/yaml/Tests/DumperTest.php
index e7a763ab96922fa457cd97cd3fdc9fc374a83611..1a1ef25a5a4bc052a81ce99ae33ec154d5b7717b 100644
--- a/vendor/symfony/yaml/Tests/DumperTest.php
+++ b/vendor/symfony/yaml/Tests/DumperTest.php
@@ -14,6 +14,7 @@
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Yaml\Dumper;
 use Symfony\Component\Yaml\Parser;
+use Symfony\Component\Yaml\Tag\TaggedValue;
 use Symfony\Component\Yaml\Yaml;
 
 class DumperTest extends TestCase
@@ -230,20 +231,18 @@ public function testObjectSupportDisabledButNoExceptions()
         $this->assertEquals('{ foo: null, bar: 1 }', $dump, '->dump() does not dump objects when disabled');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\DumpException
-     */
     public function testObjectSupportDisabledWithExceptions()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\DumpException');
         $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);
     }
 
     /**
      * @group legacy
-     * @expectedException \Symfony\Component\Yaml\Exception\DumpException
      */
     public function testObjectSupportDisabledWithExceptionsPassingTrue()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\DumpException');
         $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, true);
     }
 
@@ -438,6 +437,122 @@ public function testDumpingStdClassInstancesRespectsInlineLevel()
         $this->assertSame($expected, $yaml);
     }
 
+    public function testDumpingTaggedValueSequenceRespectsInlineLevel()
+    {
+        $data = [
+            new TaggedValue('user', [
+                'username' => 'jane',
+            ]),
+            new TaggedValue('user', [
+                'username' => 'john',
+            ]),
+        ];
+
+        $yaml = $this->dumper->dump($data, 2);
+
+        $expected = <<<YAML
+- !user
+  username: jane
+- !user
+  username: john
+
+YAML;
+        $this->assertSame($expected, $yaml);
+    }
+
+    public function testDumpingTaggedValueSequenceWithInlinedTagValues()
+    {
+        $data = [
+            new TaggedValue('user', [
+                'username' => 'jane',
+            ]),
+            new TaggedValue('user', [
+                'username' => 'john',
+            ]),
+        ];
+
+        $yaml = $this->dumper->dump($data, 1);
+
+        $expected = <<<YAML
+- !user { username: jane }
+- !user { username: john }
+
+YAML;
+        $this->assertSame($expected, $yaml);
+    }
+
+    public function testDumpingTaggedValueMapRespectsInlineLevel()
+    {
+        $data = [
+            'user1' => new TaggedValue('user', [
+                'username' => 'jane',
+            ]),
+            'user2' => new TaggedValue('user', [
+                'username' => 'john',
+            ]),
+        ];
+
+        $yaml = $this->dumper->dump($data, 2);
+
+        $expected = <<<YAML
+user1: !user
+    username: jane
+user2: !user
+    username: john
+
+YAML;
+        $this->assertSame($expected, $yaml);
+    }
+
+    public function testDumpingTaggedValueMapWithInlinedTagValues()
+    {
+        $data = [
+            'user1' => new TaggedValue('user', [
+                'username' => 'jane',
+            ]),
+            'user2' => new TaggedValue('user', [
+                'username' => 'john',
+            ]),
+        ];
+
+        $yaml = $this->dumper->dump($data, 1);
+
+        $expected = <<<YAML
+user1: !user { username: jane }
+user2: !user { username: john }
+
+YAML;
+        $this->assertSame($expected, $yaml);
+    }
+
+    public function testDumpingNotInlinedScalarTaggedValue()
+    {
+        $data = [
+            'user1' => new TaggedValue('user', 'jane'),
+            'user2' => new TaggedValue('user', 'john'),
+        ];
+        $expected = <<<YAML
+user1: !user jane
+user2: !user john
+
+YAML;
+
+        $this->assertSame($expected, $this->dumper->dump($data, 2));
+    }
+
+    public function testDumpingNotInlinedNullTaggedValue()
+    {
+        $data = [
+            'foo' => new TaggedValue('bar', null),
+        ];
+        $expected = <<<YAML
+foo: !bar null
+
+YAML;
+
+        $this->assertSame($expected, $this->dumper->dump($data, 2));
+    }
+
     public function testDumpMultiLineStringAsScalarBlock()
     {
         $data = [
@@ -470,21 +585,17 @@ public function testCarriageReturnIsMaintainedWhenDumpingAsMultiLineLiteralBlock
         $this->assertSame("- \"a\\r\\nb\\nc\"\n", $this->dumper->dump(["a\r\nb\nc"], 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The indentation must be greater than zero
-     */
     public function testZeroIndentationThrowsException()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The indentation must be greater than zero');
         new Dumper(0);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The indentation must be greater than zero
-     */
     public function testNegativeIndentationThrowsException()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The indentation must be greater than zero');
         new Dumper(-4);
     }
 }
diff --git a/vendor/symfony/yaml/Tests/InlineTest.php b/vendor/symfony/yaml/Tests/InlineTest.php
index 950c702300ebeea88a55d72c60bdb8777e27bae3..014a12a706723b27205d6de7fd3cae534000c821 100644
--- a/vendor/symfony/yaml/Tests/InlineTest.php
+++ b/vendor/symfony/yaml/Tests/InlineTest.php
@@ -62,21 +62,17 @@ public function getTestsForParsePhpConstants()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage The constant "WRONG_CONSTANT" is not defined
-     */
     public function testParsePhpConstantThrowsExceptionWhenUndefined()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('The constant "WRONG_CONSTANT" is not defined');
         Inline::parse('!php/const WRONG_CONSTANT', Yaml::PARSE_CONSTANT);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessageRegExp #The string "!php/const PHP_INT_MAX" could not be parsed as a constant.*#
-     */
     public function testParsePhpConstantThrowsExceptionOnInvalidType()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessageRegExp('#The string "!php/const PHP_INT_MAX" could not be parsed as a constant.*#');
         Inline::parse('!php/const PHP_INT_MAX', Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
     }
 
@@ -136,7 +132,7 @@ public function testDumpNumericValueWithLocale()
             }
 
             $this->assertEquals('1.2', Inline::dump(1.2));
-            $this->assertContains('fr', strtolower(setlocale(LC_NUMERIC, 0)));
+            $this->assertStringContainsStringIgnoringCase('fr', setlocale(LC_NUMERIC, 0));
         } finally {
             setlocale(LC_NUMERIC, $locale);
         }
@@ -149,46 +145,36 @@ public function testHashStringsResemblingExponentialNumericsShouldNotBeChangedTo
         $this->assertSame($value, Inline::parse(Inline::dump($value)));
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Found unknown escape character "\V".
-     */
     public function testParseScalarWithNonEscapedBlackslashShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Found unknown escape character "\V".');
         Inline::parse('"Foo\Var"');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testParseScalarWithNonEscapedBlackslashAtTheEndShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         Inline::parse('"Foo\\"');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testParseScalarWithIncorrectlyQuotedStringShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $value = "'don't do somthin' like that'";
         Inline::parse($value);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testParseScalarWithIncorrectlyDoubleQuotedStringShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $value = '"don"t do somthin" like that"';
         Inline::parse($value);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testParseInvalidMappingKeyShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $value = '{ "foo " bar": "bar" }';
         Inline::parse($value);
     }
@@ -203,22 +189,24 @@ public function testParseMappingKeyWithColonNotFollowedBySpace()
         Inline::parse('{1:""}');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testParseInvalidMappingShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         Inline::parse('[foo] bar');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testParseInvalidSequenceShouldThrowException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         Inline::parse('{ foo: bar } bar');
     }
 
+    public function testParseInvalidTaggedSequenceShouldThrowException()
+    {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        Inline::parse('!foo { bar: baz } qux', Yaml::PARSE_CUSTOM_TAGS);
+    }
+
     public function testParseScalarWithCorrectlyQuotedStringShouldReturnString()
     {
         $value = "'don''t do somthin'' like that'";
@@ -281,21 +269,17 @@ public function testParseMapReferenceInSequenceAsFifthArgument()
         $this->assertSame([$foo], Inline::parse('[*foo]', false, false, false, ['foo' => $foo]));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage A reference must contain at least one character at line 1.
-     */
     public function testParseUnquotedAsterisk()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('A reference must contain at least one character at line 1.');
         Inline::parse('{ foo: * }');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage A reference must contain at least one character at line 1.
-     */
     public function testParseUnquotedAsteriskFollowedByAComment()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('A reference must contain at least one character at line 1.');
         Inline::parse('{ foo: * #foo }');
     }
 
@@ -304,12 +288,8 @@ public function testParseUnquotedAsteriskFollowedByAComment()
      */
     public function testParseUnquotedScalarStartingWithReservedIndicator($indicator)
     {
-        if (method_exists($this, 'expectExceptionMessage')) {
-            $this->expectException(ParseException::class);
-            $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
-        } else {
-            $this->setExpectedException(ParseException::class, sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
-        }
+        $this->expectException(ParseException::class);
+        $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
 
         Inline::parse(sprintf('{ foo: %sfoo }', $indicator));
     }
@@ -324,12 +304,8 @@ public function getReservedIndicators()
      */
     public function testParseUnquotedScalarStartingWithScalarIndicator($indicator)
     {
-        if (method_exists($this, 'expectExceptionMessage')) {
-            $this->expectException(ParseException::class);
-            $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
-        } else {
-            $this->setExpectedException(ParseException::class, sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
-        }
+        $this->expectException(ParseException::class);
+        $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo ").', $indicator));
 
         Inline::parse(sprintf('{ foo: %sfoo }', $indicator));
     }
@@ -693,15 +669,11 @@ public function getBinaryData()
 
     /**
      * @dataProvider getInvalidBinaryData
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
      */
     public function testParseInvalidBinaryData($data, $expectedMessage)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectExceptionMessageRegExp($expectedMessage);
-        } else {
-            $this->setExpectedExceptionRegExp(ParseException::class, $expectedMessage);
-        }
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessageRegExp($expectedMessage);
 
         Inline::parse($data);
     }
@@ -716,12 +688,10 @@ public function getInvalidBinaryData()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Malformed inline YAML string: {this, is not, supported} at line 1.
-     */
     public function testNotSupportedMissingValue()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Malformed inline YAML string: {this, is not, supported} at line 1.');
         Inline::parse('{this, is not, supported}');
     }
 
@@ -805,12 +775,10 @@ public function testDeprecatedStrTag()
         $this->assertSame(['foo' => 'bar'], Inline::parse('{ foo: !str bar }'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Unexpected end of line, expected one of ",}" at line 1 (near "{abc: 'def'").
-     */
     public function testUnfinishedInlineMap()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Unexpected end of line, expected one of ",}" at line 1 (near "{abc: \'def\'").');
         Inline::parse("{abc: 'def'");
     }
 }
diff --git a/vendor/symfony/yaml/Tests/ParserTest.php b/vendor/symfony/yaml/Tests/ParserTest.php
index 0f25732ab4420614d5b79a2ad65783bd96855c05..dc7c122d592c2373690327a56aea34a4c9bdc645 100644
--- a/vendor/symfony/yaml/Tests/ParserTest.php
+++ b/vendor/symfony/yaml/Tests/ParserTest.php
@@ -12,7 +12,6 @@
 namespace Symfony\Component\Yaml\Tests;
 
 use PHPUnit\Framework\TestCase;
-use Symfony\Component\Yaml\Exception\ParseException;
 use Symfony\Component\Yaml\Parser;
 use Symfony\Component\Yaml\Tag\TaggedValue;
 use Symfony\Component\Yaml\Yaml;
@@ -46,14 +45,12 @@ public function testSpecifications($expected, $yaml, $comment, $deprecated)
                 if (E_USER_DEPRECATED !== $type) {
                     restore_error_handler();
 
-                    if (class_exists('PHPUnit_Util_ErrorHandler')) {
-                        return \call_user_func_array('PHPUnit_Util_ErrorHandler::handleError', \func_get_args());
-                    }
-
                     return \call_user_func_array('PHPUnit\Util\ErrorHandler::handleError', \func_get_args());
                 }
 
                 $deprecations[] = $msg;
+
+                return null;
             });
         }
 
@@ -63,7 +60,7 @@ public function testSpecifications($expected, $yaml, $comment, $deprecated)
             restore_error_handler();
 
             $this->assertCount(1, $deprecations);
-            $this->assertContains(true !== $deprecated ? $deprecated : 'Using the comma as a group separator for floats is deprecated since Symfony 3.2 and will be removed in 4.0 on line 1.', $deprecations[0]);
+            $this->assertStringContainsString(true !== $deprecated ? $deprecated : 'Using the comma as a group separator for floats is deprecated since Symfony 3.2 and will be removed in 4.0 on line 1.', $deprecations[0]);
         }
     }
 
@@ -113,7 +110,7 @@ public function testTabsInYaml()
 
         foreach ($yamls as $yaml) {
             try {
-                $content = $this->parser->parse($yaml);
+                $this->parser->parse($yaml);
 
                 $this->fail('YAML files must not contain tabs');
             } catch (\Exception $e) {
@@ -610,10 +607,10 @@ public function getObjectForMapTests()
 
     /**
      * @dataProvider invalidDumpedObjectProvider
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
      */
     public function testObjectsSupportDisabledWithExceptions($yaml)
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $this->parser->parse($yaml, Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
     }
 
@@ -631,10 +628,10 @@ public function testCanParseContentWithTrailingSpaces()
     /**
      * @group legacy
      * @dataProvider invalidDumpedObjectProvider
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
      */
     public function testObjectsSupportDisabledWithExceptionsUsingBooleanToggles($yaml)
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $this->parser->parse($yaml, true);
     }
 
@@ -677,11 +674,9 @@ public function testNonUtf8Exception()
         }
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testUnindentedCollectionException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $yaml = <<<'EOF'
 
 collection:
@@ -694,11 +689,9 @@ public function testUnindentedCollectionException()
         $this->parser->parse($yaml);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testShortcutKeyUnindentedCollectionException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $yaml = <<<'EOF'
 
 collection:
@@ -710,12 +703,10 @@ public function testShortcutKeyUnindentedCollectionException()
         $this->parser->parse($yaml);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessageRegExp /^Multiple documents are not supported.+/
-     */
     public function testMultipleDocumentsNotSupportedException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessageRegExp('/^Multiple documents are not supported.+/');
         Yaml::parse(<<<'EOL'
 # Ranking of 1998 home runs
 ---
@@ -731,11 +722,9 @@ public function testMultipleDocumentsNotSupportedException()
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testSequenceInAMapping()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         Yaml::parse(<<<'EOF'
 yaml:
   hash: me
@@ -840,10 +829,10 @@ public function getParseExceptionNotAffectedMultiLineStringLastResortParsing()
 
     /**
      * @dataProvider getParseExceptionNotAffectedMultiLineStringLastResortParsing
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
      */
     public function testParseExceptionNotAffectedByMultiLineStringLastResortParsing($yaml)
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         $this->parser->parse($yaml);
     }
 
@@ -873,11 +862,9 @@ public function testMultiLineStringLastResortParsing()
         $this->assertSame($expected, $this->parser->parse($yaml));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     */
     public function testMappingInASequence()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
         Yaml::parse(<<<'EOF'
 yaml:
   - array stuff
@@ -886,12 +873,10 @@ public function testMappingInASequence()
         );
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage missing colon
-     */
     public function testScalarInSequence()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('missing colon');
         Yaml::parse(<<<'EOF'
 foo:
     - bar
@@ -1242,12 +1227,10 @@ public function testExplicitStringCasting()
         $this->assertEquals($expected, $this->parser->parse($yaml));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage A colon cannot be used in an unquoted mapping value
-     */
     public function testColonInMappingValueException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('A colon cannot be used in an unquoted mapping value');
         $yaml = <<<'EOF'
 foo: bar: baz
 EOF;
@@ -1481,15 +1464,11 @@ public function getBinaryData()
 
     /**
      * @dataProvider getInvalidBinaryData
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
      */
     public function testParseInvalidBinaryData($data, $expectedMessage)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectExceptionMessageRegExp($expectedMessage);
-        } else {
-            $this->setExpectedExceptionRegExp(ParseException::class, $expectedMessage);
-        }
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessageRegExp($expectedMessage);
 
         $this->parser->parse($data);
     }
@@ -1556,12 +1535,8 @@ public function testParseDateAsMappingValue()
      */
     public function testParserThrowsExceptionWithCorrectLineNumber($lineNumber, $yaml)
     {
-        if (method_exists($this, 'expectException')) {
-            $this->expectException('\Symfony\Component\Yaml\Exception\ParseException');
-            $this->expectExceptionMessage(sprintf('Unexpected characters near "," at line %d (near "bar: "123",").', $lineNumber));
-        } else {
-            $this->setExpectedException('\Symfony\Component\Yaml\Exception\ParseException', sprintf('Unexpected characters near "," at line %d (near "bar: "123",").', $lineNumber));
-        }
+        $this->expectException('\Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage(sprintf('Unexpected characters near "," at line %d (near "bar: "123",").', $lineNumber));
 
         $this->parser->parse($yaml);
     }
@@ -1803,12 +1778,10 @@ public function taggedValuesProvider()
         ];
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Tags support is not enabled. Enable the `Yaml::PARSE_CUSTOM_TAGS` flag to use "!iterator" at line 1 (near "!iterator [foo]").
-     */
     public function testCustomTagsDisabled()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Tags support is not enabled. Enable the `Yaml::PARSE_CUSTOM_TAGS` flag to use "!iterator" at line 1 (near "!iterator [foo]").');
         $this->parser->parse('!iterator [foo]');
     }
 
@@ -1821,12 +1794,10 @@ public function testUnsupportedTagWithScalar()
         $this->assertEquals('!iterator foo', $this->parser->parse('!iterator foo'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage The built-in tag "!!foo" is not implemented at line 1 (near "!!foo").
-     */
     public function testExceptionWhenUsingUnsuportedBuiltInTags()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('The built-in tag "!!foo" is not implemented at line 1 (near "!!foo").');
         $this->parser->parse('!!foo');
     }
 
@@ -1876,12 +1847,10 @@ public function testComplexMappingNestedInSequenceThrowsParseException()
         $this->parser->parse($yaml);
     }
 
-    /**
-     * @expectedException        \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Unable to parse at line 1 (near "[parameters]").
-     */
     public function testParsingIniThrowsException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Unable to parse at line 1 (near "[parameters]").');
         $ini = <<<INI
 [parameters]
   foo = bar
@@ -1931,12 +1900,10 @@ public function testCanParseVeryLongValue()
         $this->assertEquals($trickyVal, $arrayFromYaml);
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Reference "foo" does not exist at line 2
-     */
     public function testParserCleansUpReferencesBetweenRuns()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Reference "foo" does not exist at line 2');
         $yaml = <<<YAML
 foo: &foo
     baz: foobar
@@ -2077,24 +2044,20 @@ public function testFilenamesAreParsedAsStringsWithoutFlag()
 
     public function testParseFile()
     {
-        $this->assertInternalType('array', $this->parser->parseFile(__DIR__.'/Fixtures/index.yml'));
+        $this->assertIsArray($this->parser->parseFile(__DIR__.'/Fixtures/index.yml'));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessageRegExp #^File ".+/Fixtures/nonexistent.yml" does not exist\.$#
-     */
     public function testParsingNonExistentFilesThrowsException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessageRegExp('#^File ".+/Fixtures/nonexistent.yml" does not exist\.$#');
         $this->parser->parseFile(__DIR__.'/Fixtures/nonexistent.yml');
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessageRegExp #^File ".+/Fixtures/not_readable.yml" cannot be read\.$#
-     */
     public function testParsingNotReadableFilesThrowsException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessageRegExp('#^File ".+/Fixtures/not_readable.yml" cannot be read\.$#');
         if ('\\' === \DIRECTORY_SEPARATOR) {
             $this->markTestSkipped('chmod is not supported on Windows');
         }
@@ -2165,12 +2128,10 @@ public function testParseReferencesOnMergeKeysWithMappingsParsedAsObjects()
         $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
     }
 
-    /**
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Reference "foo" does not exist
-     */
     public function testEvalRefException()
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Reference "foo" does not exist');
         $yaml = <<<EOE
 foo: { &foo { a: Steve, <<: *foo} }
 EOE;
@@ -2179,11 +2140,11 @@ public function testEvalRefException()
 
     /**
      * @dataProvider circularReferenceProvider
-     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
-     * @expectedExceptionMessage Circular reference [foo, bar, foo] detected
      */
     public function testDetectCircularReferences($yaml)
     {
+        $this->expectException('Symfony\Component\Yaml\Exception\ParseException');
+        $this->expectExceptionMessage('Circular reference [foo, bar, foo] detected');
         $this->parser->parse($yaml, Yaml::PARSE_CUSTOM_TAGS);
     }
 
@@ -2292,6 +2253,60 @@ public function indentedMappingData()
 
         return $tests;
     }
+
+    public function testMultiLineComment()
+    {
+        $yaml = <<<YAML
+parameters:
+    abc
+
+# Comment 
+YAML;
+
+        $this->assertSame(['parameters' => 'abc'], $this->parser->parse($yaml));
+    }
+
+    public function testParseValueWithModifiers()
+    {
+        $yaml = <<<YAML
+parameters:
+    abc: |+5 # plus five spaces indent
+         one
+         two
+         three
+         four
+         five
+YAML;
+        $this->assertSame(
+            [
+                'parameters' => [
+                    'abc' => implode("\n", ['one', 'two', 'three', 'four', 'five']),
+                ],
+            ],
+            $this->parser->parse($yaml)
+        );
+    }
+
+    public function testParseValueWithNegativeModifiers()
+    {
+        $yaml = <<<YAML
+parameters:
+    abc: |-3 # minus
+       one
+       two
+       three
+       four
+       five
+YAML;
+        $this->assertSame(
+            [
+                'parameters' => [
+                    'abc' => implode("\n", ['one', 'two', 'three', 'four', 'five']),
+                ],
+            ],
+            $this->parser->parse($yaml)
+        );
+    }
 }
 
 class B
diff --git a/vendor/symfony/yaml/Tests/YamlTest.php b/vendor/symfony/yaml/Tests/YamlTest.php
index 5a792c51160a1322f92f84133b248adf41c16769..7be1266497f0e8de6a99eff51c16f59e9ca94246 100644
--- a/vendor/symfony/yaml/Tests/YamlTest.php
+++ b/vendor/symfony/yaml/Tests/YamlTest.php
@@ -24,21 +24,17 @@ public function testParseAndDump()
         $this->assertEquals($data, $parsed);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The indentation must be greater than zero
-     */
     public function testZeroIndentationThrowsException()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The indentation must be greater than zero');
         Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, 0);
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage The indentation must be greater than zero
-     */
     public function testNegativeIndentationThrowsException()
     {
+        $this->expectException('InvalidArgumentException');
+        $this->expectExceptionMessage('The indentation must be greater than zero');
         Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, -4);
     }
 }
diff --git a/vendor/typo3/phar-stream-wrapper/.appveyor.yml b/vendor/typo3/phar-stream-wrapper/.appveyor.yml
index 4017284a2866c72efc39abb71ccf37799d7a9a7c..831dbcc15835f5bcd3b68a9e21eed445cff1ebde 100644
--- a/vendor/typo3/phar-stream-wrapper/.appveyor.yml
+++ b/vendor/typo3/phar-stream-wrapper/.appveyor.yml
@@ -26,7 +26,8 @@ init:
 ## Install PHP and composer, and run the appropriate composer command
 install:
     - IF EXIST c:\tools\php (SET PHP=0) # Checks for the PHP install being cached
-    - ps: appveyor-retry cinst --params '""/InstallDir:C:\tools\php""' --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $env:php_ver_target | sort { [version]($_ -split '\|' | select -last 1) } -Descending | Select-Object -first 1) -replace '[php|]','')
+    # see https://windows.php.net/downloads/releases/archives/ for previous PHP releases, using PHP 5.5.38
+    - ps: appveyor-retry cinst --params '""/InstallDir:C:\tools\php""' --ignore-checksums -y php --version 5.5.38
     - cd c:\tools\php
     - IF %PHP%==1 copy php.ini-production php.ini /Y
     - IF %PHP%==1 echo date.timezone="UTC" >> php.ini
diff --git a/vendor/typo3/phar-stream-wrapper/src/Phar/Reader.php b/vendor/typo3/phar-stream-wrapper/src/Phar/Reader.php
index 42794faf5297716fa6c92939d19634658711850d..6cc124cf753f1af228e6e63e99065b54cf2aada1 100644
--- a/vendor/typo3/phar-stream-wrapper/src/Phar/Reader.php
+++ b/vendor/typo3/phar-stream-wrapper/src/Phar/Reader.php
@@ -144,7 +144,7 @@ private function extractData($fileName)
      */
     private function resolveStream()
     {
-        if ($this->fileType === 'application/x-gzip') {
+        if ($this->fileType === 'application/x-gzip' || $this->fileType === 'application/gzip') {
             return 'compress.zlib://';
         } elseif ($this->fileType === 'application/x-bzip2') {
             return 'compress.bzip2://';
diff --git a/vendor/typo3/phar-stream-wrapper/src/PharStreamWrapper.php b/vendor/typo3/phar-stream-wrapper/src/PharStreamWrapper.php
index acd5656f47b516f68408d0bad1d4cae4c35f2913..d704d26ab1d2a9d0e4ba91c308a032a0375415f3 100644
--- a/vendor/typo3/phar-stream-wrapper/src/PharStreamWrapper.php
+++ b/vendor/typo3/phar-stream-wrapper/src/PharStreamWrapper.php
@@ -476,7 +476,7 @@ private function invokeInternalStreamWrapper($functionName)
     {
         $arguments = func_get_args();
         array_shift($arguments);
-        $silentExecution = $functionName{0} === '@';
+        $silentExecution = $functionName[0] === '@';
         $functionName = ltrim($functionName, '@');
         $this->restoreInternalSteamWrapper();
 
diff --git a/vendor/zendframework/zend-diactoros/CHANGELOG.md b/vendor/zendframework/zend-diactoros/CHANGELOG.md
index 4ea9683b81b880404a0d656457405601f6b1076a..1eb54beea07d195442a6333ad14c66d344528d44 100644
--- a/vendor/zendframework/zend-diactoros/CHANGELOG.md
+++ b/vendor/zendframework/zend-diactoros/CHANGELOG.md
@@ -2,6 +2,30 @@
 
 All notable changes to this project will be documented in this file, in reverse chronological order by release.
 
+## 1.8.7 - 2019-08-06
+
+### Added
+
+- Nothing.
+
+### Changed
+
+- Nothing.
+
+### Deprecated
+
+- Nothing.
+
+### Removed
+
+- Nothing.
+
+### Fixed
+
+- [#364](https://github.com/zendframework/zend-diactoros/issues/364) modifies detection of HTTPS schemas via the `$_SERVER['HTTPS']` value
+  such that an empty HTTPS-key will result in a scheme of `http` and not
+  `https`.
+
 ## 1.8.6 - 2018-09-05
 
 ### Added
diff --git a/vendor/zendframework/zend-diactoros/composer.json b/vendor/zendframework/zend-diactoros/composer.json
index ddb91d9645253f9e05eccf62eef7a772fb858ea5..cd72e2520c759c7bbb88d58c5048ef6d785c6cf7 100644
--- a/vendor/zendframework/zend-diactoros/composer.json
+++ b/vendor/zendframework/zend-diactoros/composer.json
@@ -18,9 +18,7 @@
   },
   "extra": {
     "branch-alias": {
-      "dev-master": "1.8.x-dev",
-      "dev-develop": "1.9.x-dev",
-      "dev-release-2.0": "2.0.x-dev"
+      "dev-release-1.8": "1.8.x-dev"
     }
   },
   "require": {
diff --git a/vendor/zendframework/zend-diactoros/composer.lock b/vendor/zendframework/zend-diactoros/composer.lock
index 261ae10c65a8696b13ab98368f1eb87a75cc8d03..3bc15f55dd31a3dee57ae93c329fc39f33a93d85 100644
--- a/vendor/zendframework/zend-diactoros/composer.lock
+++ b/vendor/zendframework/zend-diactoros/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": "7ca0087aabf01eb8dbf67e0ae741f2f2",
+    "content-hash": "fac154ebe22e2006d25b441f9bc6300a",
     "packages": [
         {
             "name": "psr/http-message",
diff --git a/vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php b/vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php
index decaafb835b55cb5abe83374f73919fee1e9d15f..eba3d1ec46d1f7f5ae6bc91e85f1736687bbfac9 100644
--- a/vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php
+++ b/vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php
@@ -171,7 +171,7 @@ function marshalUriFromSapi(array $server, array $headers)
     } else {
         $https = false;
     }
-    if (($https && 'off' !== strtolower($https))
+    if (($https && 'on' === strtolower($https))
         || strtolower($getHeaderFromArray('x-forwarded-proto', $headers, false)) === 'https'
     ) {
         $scheme = 'https';
diff --git a/vendor/zendframework/zend-escaper/CHANGELOG.md b/vendor/zendframework/zend-escaper/CHANGELOG.md
index aa99334989940b21ab88492fe64c26a235f826df..23d9043be27cb4f62a213ed634bc8fa4dfd3bf07 100644
--- a/vendor/zendframework/zend-escaper/CHANGELOG.md
+++ b/vendor/zendframework/zend-escaper/CHANGELOG.md
@@ -2,6 +2,28 @@
 
 All notable changes to this project will be documented in this file, in reverse chronological order by release.
 
+## 2.6.1 - 2019-09-05
+
+### Added
+
+- [#32](https://github.com/zendframework/zend-escaper/pull/32) adds support for PHP 7.3.
+
+### Changed
+
+- Nothing.
+
+### Deprecated
+
+- Nothing.
+
+### Removed
+
+- Nothing.
+
+### Fixed
+
+- Nothing.
+
 ## 2.6.0 - 2018-04-25
 
 ### Added
diff --git a/vendor/zendframework/zend-escaper/LICENSE.md b/vendor/zendframework/zend-escaper/LICENSE.md
index d44ab5dc72bf4cbca7c9ddc4c8334a929c2185de..4bc22a4a477d3256d842f7dbb1d53269ac153afc 100644
--- a/vendor/zendframework/zend-escaper/LICENSE.md
+++ b/vendor/zendframework/zend-escaper/LICENSE.md
@@ -1,4 +1,4 @@
-Copyright (c) 2005-2018, Zend Technologies USA, Inc.
+Copyright (c) 2005-2019, Zend Technologies USA, Inc.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
diff --git a/vendor/zendframework/zend-escaper/README.md b/vendor/zendframework/zend-escaper/README.md
index 4e8b563d50ad91b936f1634912537512b31d7507..9df54f4e6d5a1ab735f963286e83bb3c1c0d24c3 100644
--- a/vendor/zendframework/zend-escaper/README.md
+++ b/vendor/zendframework/zend-escaper/README.md
@@ -9,5 +9,20 @@ of which one is commonly misapplied. Thus, the zend-escaper component was writte
 It offers developers a way to escape output and defend from XSS and related
 vulnerabilities by introducing contextual escaping based on peer-reviewed rules.
 
-- File issues at https://github.com/zendframework/zend-escaper/issues
-- Documentation is at https://docs.zendframework.com/zend-escaper/
+## Installation
+
+Run the following to install this library:
+
+```bash
+$ composer require zendframework/zend-escaper
+```
+
+## Documentation
+
+Browse the documentation online at https://docs.zendframework.com/zend-escaper/
+
+## Support
+
+* [Issues](https://github.com/zendframework/zend-escaper/issues/)
+* [Chat](https://zendframework-slack.herokuapp.com/)
+* [Forum](https://discourse.zendframework.com/)
diff --git a/web/core/MAINTAINERS.txt b/web/core/MAINTAINERS.txt
index 1b84b1895b44ed3ccfbfce1138fa34bb20c8bab1..773ad5229df13cb45dc70cba429e8e1ef8090a67 100644
--- a/web/core/MAINTAINERS.txt
+++ b/web/core/MAINTAINERS.txt
@@ -210,7 +210,7 @@ Field UI
 - Andrei Mateescu 'amateescu' https://www.drupal.org/u/amateescu
 
 File
-- ?
+- Kim Pepper 'kim.pepper' https://www.drupal.org/u/kimpepper
 
 Filter
 - ?
diff --git a/web/core/assets/vendor/ckeditor/CHANGES.md b/web/core/assets/vendor/ckeditor/CHANGES.md
index 8f64f18808483ead5a956e949cc0f533793375b8..acb979c1d2b7f4ebcaa3d3f98919749cfb395335 100644
--- a/web/core/assets/vendor/ckeditor/CHANGES.md
+++ b/web/core/assets/vendor/ckeditor/CHANGES.md
@@ -1,6 +1,34 @@
 CKEditor 4 Changelog
 ====================
 
+## CKEditor 4.11.4
+
+Fixed Issues:
+
+* [#589](https://github.com/ckeditor/ckeditor-dev/issues/589): Fixed: The editor causes memory leaks in create and destroy cycles.
+* [#1397](https://github.com/ckeditor/ckeditor-dev/issues/1397): Fixed: Using the dialog to remove headers from a [table](https://ckeditor.com/cke4/addon/table) with one header row only throws an error.
+* [#1479](https://github.com/ckeditor/ckeditor-dev/issues/1479): Fixed: [Justification](https://ckeditor.com/cke4/addon/justify) for styled content in BR mode is disabled.
+* [#2816](https://github.com/ckeditor/ckeditor-dev/issues/2816): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) resize handler is visible in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html).
+* [#2874](https://github.com/ckeditor/ckeditor-dev/issues/2874): Fixed: [Enhanced Image](https://ckeditor.com/cke4/addon/image2) resize handler is not created when the editor is initialized in [read-only mode](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html).
+* [#2775](https://github.com/ckeditor/ckeditor-dev/issues/2775): Fixed: [Clipboard](https://ckeditor.com/cke4/addon/clipboard) paste buttons have wrong state when [read-only](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_readonly.html) mode is set by the mouse event listener with the [Div Editing Area](https://ckeditor.com/cke4/addon/divarea) plugin.
+* [#1901](https://github.com/ckeditor/ckeditor-dev/issues/1901): Fixed: Cannot open the context menu over a [Widget](https://ckeditor.com/cke4/addon/widget) with the <kbd>Shift</kbd>+<kbd>F10</kbd> keyboard shortcut.
+
+Other Changes:
+
+* Updated [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) (WSC) and [SpellCheckAsYouType](https://ckeditor.com/cke4/addon/scayt) (SCAYT) plugins:
+	* Language dictionary update: German language was extended with over 600k new words.
+	* Language dictionary update: Swedish language was extended with over 300k new words.
+	* Grammar support added for Australian and New Zealand English, Polish, Slovak, Slovenian and Austrian languages.
+	* Changed wavy red and green lines that underline spelling and grammar errors to straight ones.
+	* [#55](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/55): Fixed: WSC does not use [`CKEDITOR.getUrl()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-getUrl) when referencing style sheets.
+	* [#166](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/166): Fixed: SCAYT does not use [`CKEDITOR.getUrl()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-getUrl) when referencing style sheets.
+	* [#56](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/56): [Chrome] Fixed: SCAYT/WSC throws errors when running inside a  Chrome extension.
+	* Fixed: After removing a dictionary, the words are not underlined and considered as incorrect.
+	* Fixed: The Slovenian (`sl_SL`) language does not work.
+	* Fixed: Quotes with code `U+2019` (Right single quotation mark) are considered separators.
+	* Fixed: Wrong error message formatting when the service ID is invalid.
+	* Fixed: Absent languages in the Languages tab when using SCAYT with the [Shared Spaces](https://ckeditor.com/cke4/addon/sharedspace) plugin.
+
 ## CKEditor 4.11.3
 
 Fixed Issues:
@@ -36,7 +64,7 @@ Fixed Issues:
 Other Changes:
 
 * Updated the [WebSpellChecker](https://ckeditor.com/cke4/addon/wsc) (WSC) plugin:
-  * [#52](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/52) Fixed: Clicking "Finish Checking" without a prior action would hang the Spell Checking dialog.
+	* [#52](https://github.com/WebSpellChecker/ckeditor-plugin-wsc/issues/52) Fixed: Clicking "Finish Checking" without a prior action would hang the Spell Checking dialog.
 * [#2603](https://github.com/ckeditor/ckeditor-dev/issues/2603): Corrected the GPL license entry in the `package.json` file.
 
 ## CKEditor 4.11.1
@@ -51,7 +79,7 @@ Fixed Issues:
 
 * Fixed XSS vulnerability in the HTML parser reported by [maxarr](https://hackerone.com/maxarr).
 
-  Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
+	Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode.
 
 **An upgrade is highly recommended!**
 
@@ -98,8 +126,8 @@ API Changes:
 * [#2224](https://github.com/ckeditor/ckeditor-dev/issues/2224):  The [`CKEDITOR.tools.convertToPx`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-convertToPx) function now converts negative values.
 * [#2253](https://github.com/ckeditor/ckeditor-dev/issues/2253): The widget definition [`insert`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget_definition.html#property-insert) method now passes `editor` and `commandData`. Thanks to [marcparmet](https://github.com/marcparmet)!
 * [#2045](https://github.com/ckeditor/ckeditor-dev/issues/2045): Extracted [`tools.eventsBuffer`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-eventsBuffer) and [`tools.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) functions logic into a separate namespace.
-  * [`tools.eventsBuffer`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-eventsBuffer) was extracted into [`tools.buffers.event`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_buffers_event.html),
-  * [`tools.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) was extracted into [`tools.buffers.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_buffers_throttle.html).
+	* [`tools.eventsBuffer`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-eventsBuffer) was extracted into [`tools.buffers.event`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_buffers_event.html),
+	* [`tools.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-throttle) was extracted into [`tools.buffers.throttle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_buffers_throttle.html).
 * [#2466](https://github.com/ckeditor/ckeditor-dev/issues/2466):  The [`CKEDITOR.filter`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-constructor) constructor accepts an additional `rules` parameter allowing to bind the editor and filter together.
 * [#2493](https://github.com/ckeditor/ckeditor-dev/issues/2493):  The [`editor.getCommandKeystroke`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getCommandKeystroke) method accepts an additional `all` parameter allowing to retrieve an array of all command keystrokes.
 * [#2483](https://github.com/ckeditor/ckeditor-dev/issues/2483): Button's DOM element created with the [`hasArrow`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui.html#method-addButton) definition option can by identified by the `.cke_button_expandable` CSS class.
@@ -652,7 +680,7 @@ Other Changes:
 	- New features:
 		- CKEditor [Language](https://ckeditor.com/cke4/addon/language) plugin support.
 		- CKEditor [Placeholder](https://ckeditor.com/cke4/addon/placeholder) plugin support.
-    - [Drag&Drop](https://ckeditor.com/docs/ckeditor4/latest/examples/fileupload.html) support.
+		- [Drag&Drop](https://ckeditor.com/docs/ckeditor4/latest/examples/fileupload.html) support.
 		- **Experimental** [GRAYT](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-grayt_autoStartup) (Grammar As You Type) functionality.
 	- Fixed issues:
 		* [#98](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/98): SCAYT affects dialog double-click. Fixed in SCAYT core.
diff --git a/web/core/assets/vendor/ckeditor/build-config.js b/web/core/assets/vendor/ckeditor/build-config.js
index 8af244be56214fac4050e2a8bab7e956a4514d60..5c9999c62e60d433c45d39ee6be911aea234aa19 100644
--- a/web/core/assets/vendor/ckeditor/build-config.js
+++ b/web/core/assets/vendor/ckeditor/build-config.js
@@ -1,19 +1,17 @@
 /**
  * This is a Drupal-optimized build of CKEditor.
  *
- * You may re-use it at any time at http://ckeditor.com/builder to build
- * CKEditor again. Alternatively, use the "build.sh" script to build it locally.
- * If you do so, be sure to pass it the "-s" flag. So: "sh build.sh -s".
+ * To re-create this build:
+ * 1. Clone the development repo of CKEditor to your machine
+ * 2. Check out the version you'd like to build
+ * 3. Run ./dev/builder/build.sh -s /path/to/build-config.js
  *
- * If you are developing or debugging CKEditor plugins, you may want to work
- * against an unoptimized (unminified) CKEditor build. To do so, you have two
- * options:
- * 1. Upload build-config.js to http://ckeditor.com/builder and choose the
- *    "Source (Big N'Slow)" option when downloading.
- * 2. Use the "build.sh" script to build it locally, with one additional flag:
- *    "sh build.sh -s --leave-js-unminified".
  * Then, replace this directory (core/assets/vendor/ckeditor) with your build.
  *
+ * If you are developing or debugging CKEditor plugins, you may want to work
+ * against an unoptimized (unminified) CKEditor build. To do so,
+ * run the build command with the --leave-js-unminified flag.
+ *
  * NOTE:
  *    This file is not used by CKEditor, you may remove it.
  *    Changing this file will not change your CKEditor configuration.
diff --git a/web/core/assets/vendor/ckeditor/ckeditor.js b/web/core/assets/vendor/ckeditor/ckeditor.js
index 956b2c4aa32513b5dcaad9d7aefc2c2be953975d..8383328f0f8a8c96ccca66cf325918c80ef1bb24 100644
--- a/web/core/assets/vendor/ckeditor/ckeditor.js
+++ b/web/core/assets/vendor/ckeditor/ckeditor.js
@@ -2,13 +2,13 @@
 Copyright (c) 2003-2019, 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 e=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,f={timestamp:"J24I",version:"4.11.3",revision:"8b53603e8",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:e},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),h=0;h<c.length;h++){var d=c[h].src.match(e);if(d){b=d[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,
+(function(){window.CKEDITOR&&window.CKEDITOR.dom||(window.CKEDITOR||(window.CKEDITOR=function(){var e=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,f={timestamp:"J3PE",version:"4.11.4",revision:"e1836357e",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:e},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),h=0;h<c.length;h++){var d=c[h].src.match(e);if(d){b=d[1];break}}-1==b.indexOf(":/")&&"//"!=b.slice(0,
 2)&&(b=0===b.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+b:location.href.match(/^[^\?]*\/(?:)/)[0]+b);if(!b)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return b}(),getUrl:function(b){-1==b.indexOf(":/")&&0!==b.indexOf("/")&&(b=this.basePath+b);this.timestamp&&"/"!=b.charAt(b.length-1)&&!/[&?]t=/.test(b)&&(b+=(0<=b.indexOf("?")?"\x26":"?")+"t\x3d"+this.timestamp);return b},
 domReady:function(){function b(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",b,!1),c()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",b),c())}catch(d){}}function c(){for(var d;d=e.shift();)d()}var e=[];return function(d){function g(){try{document.documentElement.doScroll("left")}catch(a){setTimeout(g,1);return}b()}e.push(d);"complete"===document.readyState&&setTimeout(b,1);if(1==e.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",
 b,!1),window.addEventListener("load",b,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",b);window.attachEvent("onload",b);d=!1;try{d=!window.frameElement}catch(m){}document.documentElement.doScroll&&d&&g()}}}()},c=window.CKEDITOR_GETURL;if(c){var h=f.getUrl;f.getUrl=function(b){return c.call(f,b)||h.call(f,b)}}return f}()),CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(e){var f=CKEDITOR.event.prototype,c;for(c in f)null==e[c]&&(e[c]=f[c])},
 CKEDITOR.event.prototype=function(){function e(e){var b=f(this);return b[e]||(b[e]=new c(e))}var f=function(c){c=c.getPrivate&&c.getPrivate()||c._||(c._={});return c.events||(c.events={})},c=function(c){this.name=c;this.listeners=[]};c.prototype={getListenerIndex:function(c){for(var b=0,e=this.listeners;b<e.length;b++)if(e[b].fn==c)return b;return-1}};return{define:function(c,b){var f=e.call(this,c);CKEDITOR.tools.extend(f,b,!0)},on:function(c,b,f,k,d){function g(a,n,d,g){a={name:c,sender:this,editor:a,
-data:n,listenerData:k,stop:d,cancel:g,removeListener:m};return!1===b.call(f,a)?!1:a.data}function m(){n.removeListener(c,b)}var a=e.call(this,c);if(0>a.getListenerIndex(b)){a=a.listeners;f||(f=this);isNaN(d)&&(d=10);var n=this;g.fn=b;g.priority=d;for(var w=a.length-1;0<=w;w--)if(a[w].priority<=d)return a.splice(w+1,0,g),{removeListener:m};a.unshift(g)}return{removeListener:m}},once:function(){var c=Array.prototype.slice.call(arguments),b=c[1];c[1]=function(c){c.removeListener();return b.apply(this,
-arguments)};return this.on.apply(this,c)},capture:function(){CKEDITOR.event.useCapture=1;var c=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return c},fire:function(){var c=0,b=function(){c=1},e=0,k=function(){e=1};return function(d,g,m){var a=f(this)[d];d=c;var n=e;c=e=0;if(a){var w=a.listeners;if(w.length)for(var w=w.slice(0),u,t=0;t<w.length;t++){if(a.errorProof)try{u=w[t].call(this,m,g,b,k)}catch(p){}else u=w[t].call(this,m,g,b,k);!1===u?e=1:"undefined"!=typeof u&&(g=u);if(c||e)break}}g=
+data:n,listenerData:k,stop:d,cancel:g,removeListener:m};return!1===b.call(f,a)?!1:a.data}function m(){n.removeListener(c,b)}var a=e.call(this,c);if(0>a.getListenerIndex(b)){a=a.listeners;f||(f=this);isNaN(d)&&(d=10);var n=this;g.fn=b;g.priority=d;for(var x=a.length-1;0<=x;x--)if(a[x].priority<=d)return a.splice(x+1,0,g),{removeListener:m};a.unshift(g)}return{removeListener:m}},once:function(){var c=Array.prototype.slice.call(arguments),b=c[1];c[1]=function(c){c.removeListener();return b.apply(this,
+arguments)};return this.on.apply(this,c)},capture:function(){CKEDITOR.event.useCapture=1;var c=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return c},fire:function(){var c=0,b=function(){c=1},e=0,k=function(){e=1};return function(d,g,m){var a=f(this)[d];d=c;var n=e;c=e=0;if(a){var x=a.listeners;if(x.length)for(var x=x.slice(0),u,t=0;t<x.length;t++){if(a.errorProof)try{u=x[t].call(this,m,g,b,k)}catch(p){}else u=x[t].call(this,m,g,b,k);!1===u?e=1:"undefined"!=typeof u&&(g=u);if(c||e)break}}g=
 e?!1:"undefined"==typeof g?!0:g;c=d;e=n;return g}}(),fireOnce:function(c,b,e){b=this.fire(c,b,e);delete f(this)[c];return b},removeListener:function(c,b){var e=f(this)[c];if(e){var k=e.getListenerIndex(b);0<=k&&e.listeners.splice(k,1)}},removeAllListeners:function(){var c=f(this),b;for(b in c)delete c[b]},hasListeners:function(c){return(c=f(this)[c])&&0<c.listeners.length}}}()),CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=
 function(e,f){e in{instanceReady:1,loaded:1}&&(this[e]=!0);return CKEDITOR.event.prototype.fire.call(this,e,f,this)},CKEDITOR.editor.prototype.fireOnce=function(e,f){e in{instanceReady:1,loaded:1}&&(this[e]=!0);return CKEDITOR.event.prototype.fireOnce.call(this,e,f,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)),CKEDITOR.env||(CKEDITOR.env=function(){var e=navigator.userAgent.toLowerCase(),f=e.match(/edge[ \/](\d+.?\d*)/),c=-1<e.indexOf("trident/"),c=!(!f&&!c),c={ie:c,edge:!!f,webkit:!c&&
 -1<e.indexOf(" applewebkit/"),air:-1<e.indexOf(" adobeair/"),mac:-1<e.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<e.indexOf("mobile"),iOS:/(ipad|iphone|ipod)/.test(e),isCustomDomain:function(){if(!this.ie)return!1;var b=document.domain,c=window.location.hostname;return b!=c&&b!="["+c+"]"},secure:"https:"==location.protocol};c.gecko="Gecko"==navigator.product&&!c.webkit&&!c.ie;c.webkit&&(-1<e.indexOf("chrome")?c.chrome=
@@ -20,24 +20,24 @@ CKEDITOR.loadFullCore=function(){if("basic_ready"!=CKEDITOR.status)CKEDITOR.load
 a;this._context=g;this._lastOutput=this._scheduledTimer=0;this._output=CKEDITOR.tools.bind(d,g||{});var b=this;this.input=function(){function a(){b._lastOutput=(new Date).getTime();b._scheduledTimer=0;b._call()}if(!b._scheduledTimer||!1!==b._reschedule()){var n=(new Date).getTime()-b._lastOutput;n<b._minInterval?b._scheduledTimer=setTimeout(a,b._minInterval-n):a()}}}function f(a,d,g){e.call(this,a,d,g);this._args=[];var b=this;this.input=CKEDITOR.tools.override(this.input,function(a){return function(){b._args=
 Array.prototype.slice.call(arguments);a.call(this)}})}var c=[],h=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,l=/>/g,k=/</g,d=/"/g,g=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,m={lt:"\x3c",gt:"\x3e",amp:"\x26",quot:'"',nbsp:" ",shy:"­"},a=function(a,d){return"#"==d[0]?String.fromCharCode(parseInt(d.slice(1),10)):m[d]};CKEDITOR.on("reset",function(){c=[]});CKEDITOR.tools={arrayCompare:function(a,d){if(!a&&!d)return!0;if(!a||!d||a.length!=d.length)return!1;
 for(var g=0;g<a.length;g++)if(a[g]!=d[g])return!1;return!0},getIndex:function(a,d){for(var g=0;g<a.length;++g)if(d(a[g]))return g;return-1},clone:function(a){var d;if(a&&a instanceof Array){d=[];for(var g=0;g<a.length;g++)d[g]=CKEDITOR.tools.clone(a[g]);return d}if(null===a||"object"!=typeof a||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;d=new a.constructor;for(g in a)d[g]=CKEDITOR.tools.clone(a[g]);return d},
-capitalize:function(a,d){return a.charAt(0).toUpperCase()+(d?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var d=arguments.length,g,b;"boolean"==typeof(g=arguments[d-1])?d--:"boolean"==typeof(g=arguments[d-2])&&(b=arguments[d-1],d-=2);for(var c=1;c<d;c++){var m=arguments[c],e;for(e in m)if(!0===g||null==a[e])if(!b||e in b)a[e]=m[e]}return a},prototypedCopy:function(a){var d=function(){};d.prototype=a;return new d},copy:function(a){var d={},g;for(g in a)d[g]=a[g];return d},isArray:function(a){return"[object Array]"==
+capitalize:function(a,d){return a.charAt(0).toUpperCase()+(d?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var d=arguments.length,g,b;"boolean"==typeof(g=arguments[d-1])?d--:"boolean"==typeof(g=arguments[d-2])&&(b=arguments[d-1],d-=2);for(var c=1;c<d;c++){var e=arguments[c],m;for(m in e)if(!0===g||null==a[m])if(!b||m in b)a[m]=e[m]}return a},prototypedCopy:function(a){var d=function(){};d.prototype=a;return new d},copy:function(a){var d={},g;for(g in a)d[g]=a[g];return d},isArray:function(a){return"[object Array]"==
 Object.prototype.toString.call(a)},isEmpty:function(a){for(var d in a)if(a.hasOwnProperty(d))return!1;return!0},cssVendorPrefix:function(a,d,g){if(g)return h+a+":"+d+";"+a+":"+d;g={};g[a]=d;g[h+a]=d;return g},cssStyleToDomStyle:function(){var a=document.createElement("div").style,d="undefined"!=typeof a.cssFloat?"cssFloat":"undefined"!=typeof a.styleFloat?"styleFloat":"float";return function(a){return"float"==a?d:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){a=
 [].concat(a);for(var d,g=[],b=0;b<a.length;b++)if(d=a[b])/@import|[{}]/.test(d)?g.push("\x3cstyle\x3e"+d+"\x3c/style\x3e"):g.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+d+'"\x3e');return g.join("")},htmlEncode:function(a){return void 0===a||null===a?"":String(a).replace(b,"\x26amp;").replace(l,"\x26gt;").replace(k,"\x26lt;")},htmlDecode:function(n){return n.replace(g,a)},htmlEncodeAttr:function(a){return CKEDITOR.tools.htmlEncode(a).replace(d,"\x26quot;")},htmlDecodeAttr:function(a){return CKEDITOR.tools.htmlDecode(a)},
-transformPlainTextToHtml:function(a,d){var g=d==CKEDITOR.ENTER_BR,b=this.htmlEncode(a.replace(/\r\n/g,"\n")),b=b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),c=d==CKEDITOR.ENTER_P?"p":"div";if(!g){var e=/\n{2}/g;if(e.test(b))var m="\x3c"+c+"\x3e",h="\x3c/"+c+"\x3e",b=m+b.replace(e,function(){return h+m})+h}b=b.replace(/\n/g,"\x3cbr\x3e");g||(b=b.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+c+"\x3e)"),function(a){return CKEDITOR.tools.repeat(a,2)}));b=b.replace(/^ | $/g,"\x26nbsp;");return b=b.replace(/(>|\s) /g,
+transformPlainTextToHtml:function(a,d){var g=d==CKEDITOR.ENTER_BR,b=this.htmlEncode(a.replace(/\r\n/g,"\n")),b=b.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),c=d==CKEDITOR.ENTER_P?"p":"div";if(!g){var m=/\n{2}/g;if(m.test(b))var e="\x3c"+c+"\x3e",h="\x3c/"+c+"\x3e",b=e+b.replace(m,function(){return h+e})+h}b=b.replace(/\n/g,"\x3cbr\x3e");g||(b=b.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+c+"\x3e)"),function(a){return CKEDITOR.tools.repeat(a,2)}));b=b.replace(/^ | $/g,"\x26nbsp;");return b=b.replace(/(>|\s) /g,
 function(a,n){return n+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",d=0;8>d;d++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,d){var g=d(a);g.prototype=a.prototype;return g},setTimeout:function(a,d,g,b,c){c||(c=window);g||(g=c);return c.setTimeout(function(){b?a.apply(g,[].concat(b)):a.apply(g)},
 d||0)},throttle:function(a,d,g){return new this.buffers.throttle(a,d,g)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(d){return d.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(d){return d.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(d){return d.replace(a,"")}}(),indexOf:function(a,d){if("function"==typeof d)for(var g=0,b=a.length;g<b;g++){if(d(a[g]))return g}else{if(a.indexOf)return a.indexOf(d);g=0;for(b=a.length;g<
-b;g++)if(a[g]===d)return g}return-1},search:function(a,d){var g=CKEDITOR.tools.indexOf(a,d);return 0<=g?a[g]:null},bind:function(a,d){return function(){return a.apply(d,arguments)}},createClass:function(a){var d=a.$,g=a.base,b=a.privates||a._,c=a.proto;a=a.statics;!d&&(d=function(){g&&this.base.apply(this,arguments)});if(b)var e=d,d=function(){var a=this._||(this._={}),d;for(d in b){var g=b[d];a[d]="function"==typeof g?CKEDITOR.tools.bind(g,this):g}e.apply(this,arguments)};g&&(d.prototype=this.prototypedCopy(g.prototype),
+b;g++)if(a[g]===d)return g}return-1},search:function(a,d){var g=CKEDITOR.tools.indexOf(a,d);return 0<=g?a[g]:null},bind:function(a,d){return function(){return a.apply(d,arguments)}},createClass:function(a){var d=a.$,g=a.base,b=a.privates||a._,c=a.proto;a=a.statics;!d&&(d=function(){g&&this.base.apply(this,arguments)});if(b)var m=d,d=function(){var a=this._||(this._={}),d;for(d in b){var g=b[d];a[d]="function"==typeof g?CKEDITOR.tools.bind(g,this):g}m.apply(this,arguments)};g&&(d.prototype=this.prototypedCopy(g.prototype),
 d.prototype.constructor=d,d.base=g,d.baseProto=g.prototype,d.prototype.base=function(){this.base=g.prototype.base;g.apply(this,arguments);this.base=arguments.callee});c&&this.extend(d.prototype,c,!0);a&&this.extend(d,a,!0);return d},addFunction:function(a,d){return c.push(function(){return a.apply(d||this,arguments)})-1},removeFunction:function(a){c[a]=null},callFunction:function(a){var d=c[a];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,
 d;return function(g){d=CKEDITOR.tools.trim(g+"")+"px";return a.test(d)?d:g||""}}(),convertToPx:function(){var a;return function(d){a||(a=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(a));if(!/%$/.test(d)){var g=0>parseFloat(d);g&&(d=d.replace("-",""));a.setStyle("width",d);d=a.$.clientWidth;return g?-d:d}return d}}(),repeat:function(a,d){return Array(d+
 1).join(a)},tryThese:function(){for(var a,d=0,g=arguments.length;d<g;d++){var b=arguments[d];try{a=b();break}catch(c){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var d=arguments,g=this;window.setTimeout(function(){a.apply(g,d)},0)}},normalizeCssText:function(a,d){var g=[],b,c=CKEDITOR.tools.parseCssText(a,!0,d);for(b in c)g.push(b+":"+c[b]);g.sort();return g.length?g.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,
 function(a,d,g,n){a=[d,g,n];for(d=0;3>d;d++)a[d]=("0"+parseInt(a[d],10).toString(16)).slice(-2);return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,d,g,n){a=d.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+n})},parseCssText:function(a,d,g){var b={};g&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));
 if(!a||";"==a)return b;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,g,n){d&&(g=g.toLowerCase(),"font-family"==g&&(n=n.replace(/\s*,\s*/g,",")),n=CKEDITOR.tools.trim(n));b[g]=n});return b},writeCssText:function(a,d){var g,b=[];for(g in a)b.push(g+":"+a[g]);d&&b.sort();return b.join("; ")},objectCompare:function(a,d,g){var b;if(!a&&!d)return!0;if(!a||!d)return!1;for(b in a)if(a[b]!=d[b])return!1;if(!g)for(b in d)if(a[b]!=d[b])return!1;return!0},objectKeys:function(a){var d=
 [],g;for(g in a)d.push(g);return d},convertArrayToObject:function(a,d){var g={};1==arguments.length&&(d=!0);for(var b=0,c=a.length;b<c;++b)g[a[b]]=d;return g},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(d){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,d,g){return new this.buffers.event(a,d,g)},enableHtml5Elements:function(a,d){for(var g="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(" "),
-b=g.length,c;b--;)c=a.createElement(g[b]),d&&a.appendChild(c)},checkIfAnyArrayItemMatches:function(a,d){for(var g=0,b=a.length;g<b;++g)if(a[g].match(d))return!0;return!1},checkIfAnyObjectPropertyMatches:function(a,d){for(var g in a)if(g.match(d))return!0;return!1},keystrokeToString:function(a,d){var g=this.keystrokeToArray(a,d);g.display=g.display.join("+");g.aria=g.aria.join("+");return g},keystrokeToArray:function(a,d){var g=d&16711680,b=d&65535,c=CKEDITOR.env.mac,e=[],m=[];g&CKEDITOR.CTRL&&(e.push(c?
-"⌘":a[17]),m.push(c?a[224]:a[17]));g&CKEDITOR.ALT&&(e.push(c?"⌥":a[18]),m.push(a[18]));g&CKEDITOR.SHIFT&&(e.push(c?"⇧":a[16]),m.push(a[16]));b&&(a[b]?(e.push(a[b]),m.push(a[b])):(e.push(String.fromCharCode(b)),m.push(String.fromCharCode(b))));return{display:e,aria:m}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",getCookie:function(a){a=a.toLowerCase();for(var d=document.cookie.split(";"),g,b,c=0;c<d.length;c++)if(g=d[c].split("\x3d"),
+b=g.length,c;b--;)c=a.createElement(g[b]),d&&a.appendChild(c)},checkIfAnyArrayItemMatches:function(a,d){for(var g=0,b=a.length;g<b;++g)if(a[g].match(d))return!0;return!1},checkIfAnyObjectPropertyMatches:function(a,d){for(var g in a)if(g.match(d))return!0;return!1},keystrokeToString:function(a,d){var g=this.keystrokeToArray(a,d);g.display=g.display.join("+");g.aria=g.aria.join("+");return g},keystrokeToArray:function(a,d){var g=d&16711680,b=d&65535,c=CKEDITOR.env.mac,m=[],e=[];g&CKEDITOR.CTRL&&(m.push(c?
+"⌘":a[17]),e.push(c?a[224]:a[17]));g&CKEDITOR.ALT&&(m.push(c?"⌥":a[18]),e.push(a[18]));g&CKEDITOR.SHIFT&&(m.push(c?"⇧":a[16]),e.push(a[16]));b&&(a[b]?(m.push(a[b]),e.push(a[b])):(m.push(String.fromCharCode(b)),e.push(String.fromCharCode(b))));return{display:m,aria:e}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",getCookie:function(a){a=a.toLowerCase();for(var d=document.cookie.split(";"),g,b,c=0;c<d.length;c++)if(g=d[c].split("\x3d"),
 b=decodeURIComponent(CKEDITOR.tools.trim(g[0]).toLowerCase()),b===a)return decodeURIComponent(1<g.length?g[1]:"");return null},setCookie:function(a,d){document.cookie=encodeURIComponent(a)+"\x3d"+encodeURIComponent(d)+";path\x3d/"},getCsrfToken:function(){var a=CKEDITOR.tools.getCookie("ckCsrfToken");if(!a||40!=a.length){var a=[],d="";if(window.crypto&&window.crypto.getRandomValues)a=new Uint8Array(40),window.crypto.getRandomValues(a);else for(var g=0;40>g;g++)a.push(Math.floor(256*Math.random()));
 for(g=0;g<a.length;g++)var b="abcdefghijklmnopqrstuvwxyz0123456789".charAt(a[g]%36),d=d+(.5<Math.random()?b.toUpperCase():b);a=d;CKEDITOR.tools.setCookie("ckCsrfToken",a)}return a},escapeCss:function(a){return a?window.CSS&&CSS.escape?CSS.escape(a):isNaN(parseInt(a.charAt(0),10))?a:"\\3"+a.charAt(0)+" "+a.substring(1,a.length):""},getMouseButton:function(a){return(a=a.data?a.data.$:a)?CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.ie6Compat)?4===a.button?CKEDITOR.MOUSE_BUTTON_MIDDLE:1===a.button?
-CKEDITOR.MOUSE_BUTTON_LEFT:CKEDITOR.MOUSE_BUTTON_RIGHT:a.button:!1},convertHexStringToBytes:function(a){var d=[],g=a.length/2,b;for(b=0;b<g;b++)d.push(parseInt(a.substr(2*b,2),16));return d},convertBytesToBase64:function(a){var d="",g=a.length,b;for(b=0;b<g;b+=3){var c=a.slice(b,b+3),e=c.length,m=[],h;if(3>e)for(h=e;3>h;h++)c[h]=0;m[0]=(c[0]&252)>>2;m[1]=(c[0]&3)<<4|c[1]>>4;m[2]=(c[1]&15)<<2|(c[2]&192)>>6;m[3]=c[2]&63;for(h=0;4>h;h++)d=h<=e?d+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(m[h]):
+CKEDITOR.MOUSE_BUTTON_LEFT:CKEDITOR.MOUSE_BUTTON_RIGHT:a.button:!1},convertHexStringToBytes:function(a){var d=[],g=a.length/2,b;for(b=0;b<g;b++)d.push(parseInt(a.substr(2*b,2),16));return d},convertBytesToBase64:function(a){var d="",g=a.length,b;for(b=0;b<g;b+=3){var c=a.slice(b,b+3),m=c.length,e=[],h;if(3>m)for(h=m;3>h;h++)c[h]=0;e[0]=(c[0]&252)>>2;e[1]=(c[0]&3)<<4|c[1]>>4;e[2]=(c[1]&15)<<2|(c[2]&192)>>6;e[3]=c[2]&63;for(h=0;4>h;h++)d=h<=m?d+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e[h]):
 d+"\x3d"}return d},style:{parse:{_colors:{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",
@@ -46,7 +46,7 @@ mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldl
 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",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},_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(a){var d={},g=this._findColor(a);g.length&&(d.color=g[0],CKEDITOR.tools.array.forEach(g,function(d){a=a.replace(d,"")}));if(a=CKEDITOR.tools.trim(a))d.unprocessed=a;return d},margin:function(a){function d(a){g.top=b[a[0]];g.right=
 b[a[1]];g.bottom=b[a[2]];g.left=b[a[3]]}var g={},b=a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset)/g)||["0px"];switch(b.length){case 1:d([0,0,0,0]);break;case 2:d([0,1,0,1]);break;case 3:d([0,1,2,1]);break;case 4:d([0,1,2,3])}return g},border:function(a){var d={},g=a.split(/\s+/g);a=CKEDITOR.tools.style.parse._findColor(a);a.length&&(d.color=a[0]);CKEDITOR.tools.array.forEach(g,function(a){d.style||-1===CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle,a)?!d.width&&CKEDITOR.tools.style.parse._widthRegExp.test(a)&&
-(d.width=a):d.style=a});return d},_findColor:function(a){var d=[],g=CKEDITOR.tools.array,d=d.concat(a.match(this._rgbaRegExp)||[]),d=d.concat(a.match(this._hslaRegExp)||[]);return d=d.concat(g.filter(a.split(/\s+/),function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(a,d,g){var b=[];this.forEach(a,function(c,e){d.call(g,c,e,a)&&b.push(c)});return b},forEach:function(a,d,g){var b=a.length,c;for(c=0;c<b;c++)d.call(g,
+(d.width=a):d.style=a});return d},_findColor:function(a){var d=[],g=CKEDITOR.tools.array,d=d.concat(a.match(this._rgbaRegExp)||[]),d=d.concat(a.match(this._hslaRegExp)||[]);return d=d.concat(g.filter(a.split(/\s+/),function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(a,d,g){var b=[];this.forEach(a,function(c,m){d.call(g,c,m,a)&&b.push(c)});return b},forEach:function(a,d,g){var b=a.length,c;for(c=0;c<b;c++)d.call(g,
 a[c],c,a)},map:function(a,d,g){for(var b=[],c=0;c<a.length;c++)b.push(d.call(g,a[c],c,a));return b},reduce:function(a,d,g,b){for(var c=0;c<a.length;c++)g=d.call(b,g,a[c],c,a);return g},every:function(a,d,g){if(!a.length)return!0;d=this.filter(a,d,g);return a.length===d.length}},object:{findKey:function(a,d){if("object"!==typeof a)return null;for(var g in a)if(a[g]===d)return g;return null},merge:function(a,d){var g=CKEDITOR.tools,b=g.clone(a),c=g.clone(d);g.array.forEach(g.objectKeys(c),function(a){b[a]=
 "object"===typeof c[a]&&"object"===typeof b[a]?g.object.merge(b[a],c[a]):c[a]});return b}},getAbsoluteRectPosition:function(a,d){function g(a){if(a){var d=a.getClientRect();b.top+=d.top;b.left+=d.left;"x"in b&&"y"in b&&(b.x+=d.x,b.y+=d.y);g(a.getWindow().getFrame())}}var b=CKEDITOR.tools.copy(d);g(a.getFrame());var c=CKEDITOR.document.getWindow().getScrollPosition();b.top+=c.y;b.left+=c.x;"x"in b&&"y"in b&&(b.y+=c.y,b.x+=c.x);b.right=b.left+b.width;b.bottom=b.top+b.height;return b}};e.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}};f.prototype=CKEDITOR.tools.prototypedCopy(e.prototype);f.prototype._reschedule=function(){this._scheduledTimer&&this._clearTimer()};f.prototype._call=function(){this._output.apply(this._context,this._args)};CKEDITOR.tools.buffers={};CKEDITOR.tools.buffers.event=e;CKEDITOR.tools.buffers.throttle=f;CKEDITOR.tools.array.indexOf=
@@ -115,7 +115,7 @@ arguments)}catch(a){}else d.apply(this,arguments);return this}:d}(),setAttribute
 "html"!=l.getName();){b+=l.$.offsetLeft-l.$.scrollLeft;c+=l.$.offsetTop-l.$.scrollTop;l.equals(this)||(b+=l.$.clientLeft||0,c+=l.$.clientTop||0);for(;r&&!r.equals(l);)b-=r.$.scrollLeft,c-=r.$.scrollTop,r=r.getParent();r=l;l=(f=l.$.offsetParent)?new CKEDITOR.dom.element(f):null}d&&(f=this.getWindow(),l=d.getWindow(),!f.equals(l)&&f.$.frameElement&&(d=(new CKEDITOR.dom.element(f.$.frameElement)).getDocumentPosition(d),b+=d.x,c+=d.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko||
 h||(b+=this.$.clientLeft?1:0,c+=this.$.clientTop?1:0);return{x:b,y:c}},scrollIntoView:function(d){var b=this.getParent();if(b){do if((b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,d,1),b.is("html")){var c=b.getWindow();try{var a=c.$.frameElement;a&&(b=new CKEDITOR.dom.element(a))}catch(e){}}while(b=b.getParent())}},scrollIntoParent:function(d,b,c){var a,e,h,f;function l(a,b){/body|html/.test(d.getName())?
 d.getWindow().$.scrollBy(a,b):(d.$.scrollLeft+=a,d.$.scrollTop+=b)}function k(a,d){var b={x:0,y:0};if(!a.is(v?"body":"html")){var c=a.$.getBoundingClientRect();b.x=c.left;b.y=c.top}c=a.getWindow();c.equals(d)||(c=k(CKEDITOR.dom.element.get(c.$.frameElement),d),b.x+=c.x,b.y+=c.y);return b}function r(a,d){return parseInt(a.getComputedStyle("margin-"+d)||0,10)||0}!d&&(d=this.getWindow());h=d.getDocument();var v="BackCompat"==h.$.compatMode;d instanceof CKEDITOR.dom.window&&(d=v?h.getBody():h.getDocumentElement());
-CKEDITOR.env.webkit&&(h=this.getEditor(!1))&&(h._.previousScrollTop=null);h=d.getWindow();e=k(this,h);var q=k(d,h),B=this.$.offsetHeight;a=this.$.offsetWidth;var x=d.$.clientHeight,y=d.$.clientWidth;h=e.x-r(this,"left")-q.x||0;f=e.y-r(this,"top")-q.y||0;a=e.x+a+r(this,"right")-(q.x+y)||0;e=e.y+B+r(this,"bottom")-(q.y+x)||0;(0>f||0<e)&&l(0,!0===b?f:!1===b?e:0>f?f:e);c&&(0>h||0<a)&&l(0>h?h:a,0)},setState:function(d,b,c){b=b||"cke";switch(d){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+
+CKEDITOR.env.webkit&&(h=this.getEditor(!1))&&(h._.previousScrollTop=null);h=d.getWindow();e=k(this,h);var q=k(d,h),B=this.$.offsetHeight;a=this.$.offsetWidth;var w=d.$.clientHeight,y=d.$.clientWidth;h=e.x-r(this,"left")-q.x||0;f=e.y-r(this,"top")-q.y||0;a=e.x+a+r(this,"right")-(q.x+y)||0;e=e.y+B+r(this,"bottom")-(q.y+w)||0;(0>f||0<e)&&l(0,!0===b?f:!1===b?e:0>f?f:e);c&&(0>h||0<a)&&l(0>h?h:a,0)},setState:function(d,b,c){b=b||"cke";switch(d){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+
 "_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",!0);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",!0);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off"),this.removeClass(b+"_on"),this.removeClass(b+"_disabled"),c&&this.removeAttribute("aria-pressed"),c&&this.removeAttribute("aria-disabled")}},
 getFrameDocument:function(){var b=this.$;try{b.contentWindow.document}catch(c){b.src=b.src}return b&&new CKEDITOR.dom.document(b.contentWindow.document)},copyAttributes:function(b,c){var e=this.$.attributes;c=c||{};for(var a=0;a<e.length;a++){var n=e[a],h=n.nodeName.toLowerCase(),f;if(!(h in c))if("checked"==h&&(f=this.getAttribute(h)))b.setAttribute(h,f);else if(!CKEDITOR.env.ie||this.hasAttribute(h))f=this.getAttribute(h),null===f&&(f=n.nodeValue),b.setAttribute(h,f)}""!==this.$.style.cssText&&
 (b.$.style.cssText=this.$.style.cssText)},renameNode:function(b){if(this.getName()!=b){var c=this.getDocument();b=new CKEDITOR.dom.element(b,c);this.copyAttributes(b);this.moveChildren(b);this.getParent(!0)&&this.$.parentNode.replaceChild(b.$,this.$);b.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=b.$;delete this.getName}},getChild:function(){function b(d,c){var a=d.childNodes;if(0<=c&&c<a.length)return a[c]}return function(c){var e=this.$;if(c.slice)for(c=c.slice();0<c.length&&e;)e=b(e,
@@ -134,11 +134,11 @@ return!!(a^d)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.wal
 c=c.getNext(d),g=g.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()));return!!(a^g)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var b=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,l=CKEDITOR.dom.walker.whitespaces(),k=CKEDITOR.dom.walker.bookmark(),d=CKEDITOR.dom.walker.temp(),g=function(a){return k(a)||l(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty)};
 CKEDITOR.dom.walker.ignored=function(a){return function(b){b=l(b)||k(b)||d(b);return!!(a^b)}};var m=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(b){for(var d=0,c=b.getChildCount();d<c;++d)if(!m(b.getChild(d)))return!!a;return!a}};var a=CKEDITOR.dom.walker.empty(),n=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var b={},d;for(d in a)CKEDITOR.dtd[d]["#"]&&(b[d]=1);return b}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=
 function(b){return function(d){d=m(d)?!1:d.type==CKEDITOR.NODE_TEXT||d.type==CKEDITOR.NODE_ELEMENT&&(d.is(CKEDITOR.dtd.$inline)||d.is("hr")||"false"==d.getAttribute("contenteditable")||!CKEDITOR.env.needsBrFiller&&d.is(n)&&a(d))?!0:!1;return!!(b^d)}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(g(a));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&b.test(a.getText()))?a:!1}}(),CKEDITOR.dom.range=function(e){this.endOffset=this.endContainer=
-this.startOffset=this.startContainer=null;this.collapsed=!0;var f=e instanceof CKEDITOR.dom.document;this.document=f?e:e.getDocument();this.root=f?e.getBody():e},function(){function e(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function f(a,b,d,c,g){function e(a,b,d,c){var h=d?a.getPrevious():a.getNext();if(c&&f)return h;x||c?b.append(a.clone(!0,g),d):(a.remove(),l&&b.append(a,d));return h}function h(){var a,b,d,c=Math.min(I.length,
+this.startOffset=this.startContainer=null;this.collapsed=!0;var f=e instanceof CKEDITOR.dom.document;this.document=f?e:e.getDocument();this.root=f?e.getBody():e},function(){function e(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function f(a,b,d,c,g){function e(a,b,d,c){var h=d?a.getPrevious():a.getNext();if(c&&f)return h;w||c?b.append(a.clone(!0,g),d):(a.remove(),l&&b.append(a,d));return h}function h(){var a,b,d,c=Math.min(I.length,
 C.length);for(a=0;a<c;a++)if(b=I[a],d=C[a],!b.equals(d))return a;return a-1}function m(){var b=S-1,d=H&&F&&!k.equals(A);b<O-1||b<P-1||d?(d?a.moveToPosition(A,CKEDITOR.POSITION_BEFORE_START):P==b+1&&E?a.moveToPosition(C[b],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(C[b+1],CKEDITOR.POSITION_BEFORE_START),c&&(b=I[b+1])&&b.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(b),
-b.mergeSiblings(!1),a.moveToBookmark({startNode:d}))):a.collapse(!0)}a.optimizeBookmark();var f=0===b,l=1==b,x=2==b;b=x||l;var k=a.startContainer,A=a.endContainer,D=a.startOffset,z=a.endOffset,J,E,H,F,G,L;if(x&&A.type==CKEDITOR.NODE_TEXT&&(k.equals(A)||k.type===CKEDITOR.NODE_ELEMENT&&k.getFirst().equals(A)))d.append(a.document.createText(A.substring(D,z)));else{A.type==CKEDITOR.NODE_TEXT?x?L=!0:A=A.split(z):0<A.getChildCount()?z>=A.getChildCount()?(A=A.getChild(z-1),E=!0):A=A.getChild(z):F=E=!0;k.type==
-CKEDITOR.NODE_TEXT?x?G=!0:k.split(D):0<k.getChildCount()?0===D?(k=k.getChild(D),J=!0):k=k.getChild(D-1):H=J=!0;for(var I=k.getParents(),C=A.getParents(),S=h(),O=I.length-1,P=C.length-1,K=d,V,T,Y,Z=-1,M=S;M<=O;M++){T=I[M];Y=T.getNext();for(M!=O||T.equals(C[M])&&O<P?b&&(V=K.append(T.clone(0,g))):J?e(T,K,!1,H):G&&K.append(a.document.createText(T.substring(D)));Y;){if(Y.equals(C[M])){Z=M;break}Y=e(Y,K)}K=V}K=d;for(M=S;M<=P;M++)if(d=C[M],Y=d.getPrevious(),d.equals(I[M]))b&&(K=K.getChild(0));else{M!=P||
-d.equals(I[M])&&P<O?b&&(V=K.append(d.clone(0,g))):E?e(d,K,!1,F):L&&K.append(a.document.createText(d.substring(0,z)));if(M>Z)for(;Y;)Y=e(Y,K,!0);K=V}x||m()}}function c(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),c=CKEDITOR.dom.walker.bogus();return function(g){return d(g)||b(g)?!0:c(g)&&!a?a=!0:g.type==CKEDITOR.NODE_TEXT&&(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(l)?!1:!0}}function h(a){var b=CKEDITOR.dom.walker.whitespaces(),
+b.mergeSiblings(!1),a.moveToBookmark({startNode:d}))):a.collapse(!0)}a.optimizeBookmark();var f=0===b,l=1==b,w=2==b;b=w||l;var k=a.startContainer,A=a.endContainer,D=a.startOffset,z=a.endOffset,J,E,H,F,G,L;if(w&&A.type==CKEDITOR.NODE_TEXT&&(k.equals(A)||k.type===CKEDITOR.NODE_ELEMENT&&k.getFirst().equals(A)))d.append(a.document.createText(A.substring(D,z)));else{A.type==CKEDITOR.NODE_TEXT?w?L=!0:A=A.split(z):0<A.getChildCount()?z>=A.getChildCount()?(A=A.getChild(z-1),E=!0):A=A.getChild(z):F=E=!0;k.type==
+CKEDITOR.NODE_TEXT?w?G=!0:k.split(D):0<k.getChildCount()?0===D?(k=k.getChild(D),J=!0):k=k.getChild(D-1):H=J=!0;for(var I=k.getParents(),C=A.getParents(),S=h(),O=I.length-1,P=C.length-1,K=d,V,T,Y,Z=-1,M=S;M<=O;M++){T=I[M];Y=T.getNext();for(M!=O||T.equals(C[M])&&O<P?b&&(V=K.append(T.clone(0,g))):J?e(T,K,!1,H):G&&K.append(a.document.createText(T.substring(D)));Y;){if(Y.equals(C[M])){Z=M;break}Y=e(Y,K)}K=V}K=d;for(M=S;M<=P;M++)if(d=C[M],Y=d.getPrevious(),d.equals(I[M]))b&&(K=K.getChild(0));else{M!=P||
+d.equals(I[M])&&P<O?b&&(V=K.append(d.clone(0,g))):E?e(d,K,!1,F):L&&K.append(a.document.createText(d.substring(0,z)));if(M>Z)for(;Y;)Y=e(Y,K,!0);K=V}w||m()}}function c(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),c=CKEDITOR.dom.walker.bogus();return function(g){return d(g)||b(g)?!0:c(g)&&!a?a=!0:g.type==CKEDITOR.NODE_TEXT&&(g.hasAscendant("pre")||CKEDITOR.tools.trim(g.getText()).length)||g.type==CKEDITOR.NODE_ELEMENT&&!g.is(l)?!1:!0}}function h(a){var b=CKEDITOR.dom.walker.whitespaces(),
 d=CKEDITOR.dom.walker.bookmark(1);return function(c){return d(c)||b(c)?!0:!a&&k(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&m(a)&&(b=a);return g(a)&&!(k(a)&&a.equals(b))})}}var l={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(),
 d=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,g=CKEDITOR.dom.walker.editable(),m=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 b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||f(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||f(this,0,null,a)},extractContents:function(a,b){var d=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||f(this,1,d,a,"undefined"==typeof b?!0:b);return d},createBookmark:function(a){var b,d,c,g,e=this.collapsed;b=this.document.createElement("span");
@@ -194,8 +194,8 @@ var b=/^[\r\n\t ]+$/,l=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker
 this._.nestedEditable.iterator.getNextParagraph(e);this._.nestedEditable=null}if(!this.range.root.getDtd()[e])return null;if(!this._.started){var p=this.range.clone();f=p.startPath();var r=p.endPath(),v=!p.collapsed&&h(p,f.block),q=!p.collapsed&&h(p,r.block,1);p.shrink(CKEDITOR.SHRINK_ELEMENT,!0);v&&p.setStartAt(f.block,CKEDITOR.POSITION_BEFORE_END);q&&p.setEndAt(r.block,CKEDITOR.POSITION_AFTER_START);f=p.endContainer.hasAscendant("pre",!0)||p.startContainer.hasAscendant("pre",!0);p.enlarge(this.forceBrBreak&&
 !f||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);p.collapsed||(f=new CKEDITOR.dom.walker(p.clone()),r=CKEDITOR.dom.walker.bookmark(!0,!0),f.evaluator=r,this._.nextNode=f.next(),f=new CKEDITOR.dom.walker(p.clone()),f.evaluator=r,f=f.previous(),this._.lastNode=f.getNextSourceNode(!0,null,p.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&&p.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=p.document.createText(""),this._.lastNode.insertAfter(f)),p=null);this._.started=1;f=p}r=this._.nextNode;p=this._.lastNode;for(this._.nextNode=null;r;){var v=0,q=r.hasAscendant("pre"),B=r.type!=CKEDITOR.NODE_ELEMENT,
-x=0;if(B)r.type==CKEDITOR.NODE_TEXT&&b.test(r.getText())&&(B=0);else{var y=r.getName();if(CKEDITOR.dtd.$block[y]&&"false"==r.getAttribute("contenteditable")){a=r;c(this,e,a);break}else if(r.isBlockBoundary(this.forceBrBreak&&!q&&{br:1})){if("br"==y)B=1;else if(!f&&!r.getChildCount()&&"hr"!=y){a=r;k=r.equals(p);break}f&&(f.setEndAt(r,CKEDITOR.POSITION_BEFORE_START),"br"!=y&&(this._.nextNode=r));v=1}else{if(r.getFirst()){f||(f=this.range.clone(),f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));r=r.getFirst();
-continue}B=1}}B&&!f&&(f=this.range.clone(),f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));k=(!v||B)&&r.equals(p);if(f&&!v)for(;!r.getNext(d)&&!k;){y=r.getParent();if(y.isBlockBoundary(this.forceBrBreak&&!q&&{br:1})){v=1;B=0;k||y.equals(p);f.setEndAt(y,CKEDITOR.POSITION_BEFORE_END);break}r=y;B=1;k=r.equals(p);x=1}B&&f.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=this._getNextSourceNode(r,x,p);if((k=!r)||v&&f)break}if(!a){if(!f)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=
+w=0;if(B)r.type==CKEDITOR.NODE_TEXT&&b.test(r.getText())&&(B=0);else{var y=r.getName();if(CKEDITOR.dtd.$block[y]&&"false"==r.getAttribute("contenteditable")){a=r;c(this,e,a);break}else if(r.isBlockBoundary(this.forceBrBreak&&!q&&{br:1})){if("br"==y)B=1;else if(!f&&!r.getChildCount()&&"hr"!=y){a=r;k=r.equals(p);break}f&&(f.setEndAt(r,CKEDITOR.POSITION_BEFORE_START),"br"!=y&&(this._.nextNode=r));v=1}else{if(r.getFirst()){f||(f=this.range.clone(),f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));r=r.getFirst();
+continue}B=1}}B&&!f&&(f=this.range.clone(),f.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));k=(!v||B)&&r.equals(p);if(f&&!v)for(;!r.getNext(d)&&!k;){y=r.getParent();if(y.isBlockBoundary(this.forceBrBreak&&!q&&{br:1})){v=1;B=0;k||y.equals(p);f.setEndAt(y,CKEDITOR.POSITION_BEFORE_END);break}r=y;B=1;k=r.equals(p);w=1}B&&f.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=this._getNextSourceNode(r,w,p);if((k=!r)||v&&f)break}if(!a){if(!f)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=
 null;a=new CKEDITOR.dom.elementPath(f.startContainer,f.root);r=a.blockLimit;v={div:1,th:1,td:1};a=a.block;!a&&r&&!this.enforceRealBlocks&&v[r.getName()]&&f.checkStartOfBlock()&&f.checkEndOfBlock()&&!r.equals(f.root)?a=r:!a||this.enforceRealBlocks&&a.is(g)?(a=this.range.document.createElement(e),f.extractContents().appendTo(a),a.trim(),f.insertNode(a),u=t=!0):"li"!=a.getName()?f.checkStartOfBlock()&&f.checkEndOfBlock()||(a=a.clone(!1),f.extractContents().appendTo(a),a.trim(),t=f.splitBlock(),u=!t.wasStartOfBlock,
 t=!t.wasEndOfBlock,f.insertNode(a)):k||(this._.nextNode=a.equals(p)?null:this._getNextSourceNode(f.getBoundaryNodes().endNode,1,p))}u&&(u=a.getPrevious())&&u.type==CKEDITOR.NODE_ELEMENT&&("br"==u.getName()?u.remove():u.getLast()&&"br"==u.getLast().$.nodeName.toLowerCase()&&u.getLast().remove());t&&(u=a.getLast())&&u.type==CKEDITOR.NODE_ELEMENT&&"br"==u.getName()&&(!CKEDITOR.env.needsBrFiller||u.getPrevious(l)||u.getNext(l))&&u.remove();this._.nextNode||(this._.nextNode=k||a.equals(p)||!p?null:this._getNextSourceNode(a,
 1,p));return a},_getNextSourceNode:function(b,a,d){function c(a){return!(a.equals(d)||a.equals(g))}var g=this.range.root;for(b=b.getNextSourceNode(a,null,c);!l(b);)b=b.getNextSourceNode(a,null,c);return b}};CKEDITOR.dom.range.prototype.createIterator=function(){return new e(this)}}(),CKEDITOR.command=function(e,f){this.uiItems=[];this.exec=function(c){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&e.focus();return!1===this.fire("exec")?!0:!1!==f.exec.call(this,
@@ -203,18 +203,18 @@ e,c)};this.refresh=function(c,b){if(!this.readOnly&&c.readOnly)return!0;if(this.
 editorFocus:1,contextSensitive:!!f.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(e){if(this.state==e||e!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=
 this.state;this.state=e;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 e(a,b,d,c,g){var e,h;a=[];for(e in b){h=b[e];h="boolean"==typeof h?{}:"function"==typeof h?{match:h}:H(h);"$"!=e.charAt(0)&&(h.elements=e);d&&(h.featureName=d.toLowerCase());var f=h;f.elements=k(f.elements,
-/\s+/)||null;f.propertiesOnly=f.propertiesOnly||!0===f.elements;var m=/\s*,\s*/,r=void 0;for(r in L){f[r]=k(f[r],m)||null;var l=f,n=I[r],x=k(f[I[r]],m),C=f[r],A=[],y=!0,q=void 0;x?y=!1:x={};for(q in C)"!"==q.charAt(0)&&(q=q.slice(1),A.push(q),x[q]=!0,y=!1);for(;q=A.pop();)C[q]=C["!"+q],delete C["!"+q];l[n]=(y?!1:x)||null}f.match=f.match||null;c.push(h);a.push(h)}b=g.elements;g=g.generic;var w;d=0;for(c=a.length;d<c;++d){e=H(a[d]);h=!0===e.classes||!0===e.styles||!0===e.attributes;f=e;r=n=m=void 0;
-for(m in L)f[m]=v(f[m]);l=!0;for(r in I){m=I[r];n=f[m];x=[];C=void 0;for(C in n)-1<C.indexOf("*")?x.push(new RegExp("^"+C.replace(/\*/g,".*")+"$")):x.push(C);n=x;n.length&&(f[m]=n,l=!1)}f.nothingRequired=l;f.noProperties=!(f.attributes||f.classes||f.styles);if(!0===e.elements||null===e.elements)g[h?"unshift":"push"](e);else for(w in f=e.elements,delete e.elements,f)if(b[w])b[w][h?"unshift":"push"](e);else b[w]=[e]}}function f(a,b,g,e){if(!a.match||a.match(b))if(e||d(a,b))if(a.propertiesOnly||(g.valid=
+/\s+/)||null;f.propertiesOnly=f.propertiesOnly||!0===f.elements;var m=/\s*,\s*/,r=void 0;for(r in L){f[r]=k(f[r],m)||null;var l=f,n=I[r],w=k(f[I[r]],m),C=f[r],A=[],y=!0,q=void 0;w?y=!1:w={};for(q in C)"!"==q.charAt(0)&&(q=q.slice(1),A.push(q),w[q]=!0,y=!1);for(;q=A.pop();)C[q]=C["!"+q],delete C["!"+q];l[n]=(y?!1:w)||null}f.match=f.match||null;c.push(h);a.push(h)}b=g.elements;g=g.generic;var x;d=0;for(c=a.length;d<c;++d){e=H(a[d]);h=!0===e.classes||!0===e.styles||!0===e.attributes;f=e;r=n=m=void 0;
+for(m in L)f[m]=v(f[m]);l=!0;for(r in I){m=I[r];n=f[m];w=[];C=void 0;for(C in n)-1<C.indexOf("*")?w.push(new RegExp("^"+C.replace(/\*/g,".*")+"$")):w.push(C);n=w;n.length&&(f[m]=n,l=!1)}f.nothingRequired=l;f.noProperties=!(f.attributes||f.classes||f.styles);if(!0===e.elements||null===e.elements)g[h?"unshift":"push"](e);else for(x in f=e.elements,delete e.elements,f)if(b[x])b[x][h?"unshift":"push"](e);else b[x]=[e]}}function f(a,b,g,e){if(!a.match||a.match(b))if(e||d(a,b))if(a.propertiesOnly||(g.valid=
 !0),g.allAttributes||(g.allAttributes=c(a.attributes,b.attributes,g.validAttributes)),g.allStyles||(g.allStyles=c(a.styles,b.styles,g.validStyles)),!g.allClasses){a=a.classes;b=b.classes;e=g.validClasses;if(a)if(!0===a)a=!0;else{for(var h=0,f=b.length,m;h<f;++h)m=b[h],e[m]||(e[m]=a(m));a=!1}else a=!1;g.allClasses=a}}function c(a,b,d){if(!a)return!1;if(!0===a)return!0;for(var c in b)d[c]||(d[c]=a(c));return!1}function h(a,d,c){if(!a.match||a.match(d)){if(a.noProperties)return!1;c.hadInvalidAttribute=
 b(a.attributes,d.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=b(a.styles,d.styles)||c.hadInvalidStyle;a=a.classes;d=d.classes;if(a){for(var g=!1,e=!0===a,h=d.length;h--;)if(e||a(d[h]))d.splice(h,1),g=!0;a=g}else a=!1;c.hadInvalidClass=a||c.hadInvalidClass}}function b(a,b){if(!a)return!1;var d=!1,c=!0===a,g;for(g in b)if(c||a(g))delete b[g],d=!0;return d}function l(a,b,d){if(a.disabled||a.customConfig&&!d||!b)return!1;a._.cachedChecks={};return!0}function k(a,b){if(!a)return!1;if(!0===a)return a;
 if("string"==typeof a)return a=F(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(b));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var d={},c=0,g;for(g in a)d[g]=a[g],c++;return c?d:!1}function d(a,b){if(a.nothingRequired)return!0;var d,c,e,h;if(e=a.requiredClasses)for(h=b.classes,d=0;d<e.length;++d)if(c=e[d],"string"==typeof c){if(-1==CKEDITOR.tools.indexOf(h,c))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(h,c))return!1;return g(b.styles,
 a.requiredStyles)&&g(b.attributes,a.requiredAttributes)}function g(a,b){if(!b)return!0;for(var d=0,c;d<b.length;++d)if(c=b[d],"string"==typeof c){if(!(c in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,c))return!1;return!0}function m(a){if(!a)return{};a=a.split(/\s*,\s*/).sort();for(var b={};a.length;)b[a.shift()]="cke-test";return b}function a(a){var b,d,c,g,e={},h=1;for(a=F(a);b=a.match(C);)(d=b[2])?(c=n(d,"styles"),g=n(d,"attrs"),d=n(d,"classes")):c=g=d=null,e["$"+h++]=
-{elements:b[1],classes:d,styles:c,attributes:g},a=a.slice(b[0].length);return e}function n(a,b){var d=a.match(S[b]);return d?F(d[1]):null}function w(a){var b=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(b||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function u(a,b,d,c){var g=0,e;c.toHtml&&(b.name=b.name.replace(O,"$1"));if(c.doCallbacks&&a.elementCallbacks){a:{e=a.elementCallbacks;for(var m=0,k=e.length,l;m<k;++m)if(l=
-e[m](b)){e=l;break a}e=void 0}if(e)return e}if(c.doTransform&&(e=a._.transformations[b.name])){w(b);for(m=0;m<e.length;++m)y(a,b,e[m]);p(b)}if(c.doFilter){a:{m=b.name;k=a._;a=k.allowedRules.elements[m];e=k.allowedRules.generic;m=k.disallowedRules.elements[m];k=k.disallowedRules.generic;l=c.skipRequired;var n={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},x,C;if(a||e){w(b);if(m)for(x=
-0,C=m.length;x<C;++x)if(!1===h(m[x],b,n)){a=null;break a}if(k)for(x=0,C=k.length;x<C;++x)h(k[x],b,n);if(a)for(x=0,C=a.length;x<C;++x)f(a[x],b,n,l);if(e)for(x=0,C=e.length;x<C;++x)f(e[x],b,n,l);a=n}else a=null}if(!a||!a.valid)return d.push(b),1;C=a.validAttributes;var A=a.validStyles;e=a.validClasses;var m=b.attributes,I=b.styles,k=b.classes;l=b.classBackup;var q=b.styleBackup,v,E,F=[],n=[],z=/^data-cke-/;x=!1;delete m.style;delete m["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(v in m)C[v]||
-(z.test(v)?v==(E=v.replace(/^data-cke-saved-/,""))||C[E]||(delete m[v],x=!0):(delete m[v],x=!0));if(!a.allStyles||a.hadInvalidStyle){for(v in I)a.allStyles||A[v]?F.push(v+":"+I[v]):x=!0;F.length&&(m.style=F.sort().join("; "))}else q&&(m.style=q);if(!a.allClasses||a.hadInvalidClass){for(v=0;v<k.length;++v)(a.allClasses||e[k[v]])&&n.push(k[v]);n.length&&(m["class"]=n.sort().join(" "));l&&n.length<l.split(/\s+/).length&&(x=!0)}else l&&(m["class"]=l);x&&(g=1);if(!c.skipFinalValidation&&!r(b))return d.push(b),
+{elements:b[1],classes:d,styles:c,attributes:g},a=a.slice(b[0].length);return e}function n(a,b){var d=a.match(S[b]);return d?F(d[1]):null}function x(a){var b=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(b||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function u(a,b,d,c){var g=0,e;c.toHtml&&(b.name=b.name.replace(O,"$1"));if(c.doCallbacks&&a.elementCallbacks){a:{e=a.elementCallbacks;for(var m=0,k=e.length,l;m<k;++m)if(l=
+e[m](b)){e=l;break a}e=void 0}if(e)return e}if(c.doTransform&&(e=a._.transformations[b.name])){x(b);for(m=0;m<e.length;++m)y(a,b,e[m]);p(b)}if(c.doFilter){a:{m=b.name;k=a._;a=k.allowedRules.elements[m];e=k.allowedRules.generic;m=k.disallowedRules.elements[m];k=k.disallowedRules.generic;l=c.skipRequired;var n={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},w,C;if(a||e){x(b);if(m)for(w=
+0,C=m.length;w<C;++w)if(!1===h(m[w],b,n)){a=null;break a}if(k)for(w=0,C=k.length;w<C;++w)h(k[w],b,n);if(a)for(w=0,C=a.length;w<C;++w)f(a[w],b,n,l);if(e)for(w=0,C=e.length;w<C;++w)f(e[w],b,n,l);a=n}else a=null}if(!a||!a.valid)return d.push(b),1;C=a.validAttributes;var A=a.validStyles;e=a.validClasses;var m=b.attributes,I=b.styles,k=b.classes;l=b.classBackup;var q=b.styleBackup,v,H,E=[],n=[],F=/^data-cke-/;w=!1;delete m.style;delete m["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(v in m)C[v]||
+(F.test(v)?v==(H=v.replace(/^data-cke-saved-/,""))||C[H]||(delete m[v],w=!0):(delete m[v],w=!0));if(!a.allStyles||a.hadInvalidStyle){for(v in I)a.allStyles||A[v]?E.push(v+":"+I[v]):w=!0;E.length&&(m.style=E.sort().join("; "))}else q&&(m.style=q);if(!a.allClasses||a.hadInvalidClass){for(v=0;v<k.length;++v)(a.allClasses||e[k[v]])&&n.push(k[v]);n.length&&(m["class"]=n.sort().join(" "));l&&n.length<l.split(/\s+/).length&&(w=!0)}else l&&(m["class"]=l);w&&(g=1);if(!c.skipFinalValidation&&!r(b))return d.push(b),
 1}c.toHtml&&(b.name=b.name.replace(P,"cke:$1"));return g}function t(a){var b=[],d;for(d in a)-1<d.indexOf("*")&&b.push(d.replace(/\*/g,".*"));return b.length?new RegExp("^(?:"+b.join("|")+")$"):null}function p(a){var b=a.attributes,d;delete b.style;delete b["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))b.style=d;a.classes.length&&(b["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 v(a){if(!a)return!1;if(!0===a)return!0;var b=t(a);return function(d){return d in a||b&&d.match(b)}}function q(){return new CKEDITOR.htmlParser.element("br")}function B(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||E.$block[a.name])}function x(a,b,d){var c=a.name;if(E.$empty[c]||!a.children.length)"hr"==c&&"br"==b?a.replaceWith(q()):(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(E.$block[c]||"tr"==c)if("br"==b)a.previous&&!B(a.previous)&&(b=q(),b.insertBefore(a)),
+function v(a){if(!a)return!1;if(!0===a)return!0;var b=t(a);return function(d){return d in a||b&&d.match(b)}}function q(){return new CKEDITOR.htmlParser.element("br")}function B(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||E.$block[a.name])}function w(a,b,d){var c=a.name;if(E.$empty[c]||!a.children.length)"hr"==c&&"br"==b?a.replaceWith(q()):(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(E.$block[c]||"tr"==c)if("br"==b)a.previous&&!B(a.previous)&&(b=q(),b.insertBefore(a)),
 a.next&&!B(a.next)&&(b=q(),b.insertAfter(a)),a.replaceWithChildren();else{var c=a.children,g;b:{g=E[b];for(var e=0,h=c.length,f;e<h;++e)if(f=c[e],f.type==CKEDITOR.NODE_ELEMENT&&!g[f.name]){g=!1;break b}g=!0}if(g)a.name=b,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,k,h=c.length;0<h;)f=c[--h],e&&(f.type==CKEDITOR.NODE_TEXT||f.type==CKEDITOR.NODE_ELEMENT&&E.$inline[f.name])?(m||(m=new CKEDITOR.htmlParser.element(b),
 m.insertAfter(a),d.push({check:"parent-down",el:m})),m.add(f,0)):(m=null,k=E[g.name]||E.span,f.insertAfter(a),g.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||f.type!=CKEDITOR.NODE_ELEMENT||k[f.name]||d.push({check:"el-up",el:f}));a.remove()}}else c in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function y(a,b,d){var c,g;for(c=0;c<d.length;++c)if(g=d[c],!(g.check&&!a.check(g.check,!1)||g.left&&!g.left(b))){g.right(b,K);break}}function A(a,b){var d=b.getDefinition(),
 c=d.attributes,g=d.styles,e,h,f,m;if(a.name!=d.element)return!1;for(e in c)if("class"==e)for(d=c[e].split(/\s+/),f=a.classes.join("|");m=d.pop();){if(-1==f.indexOf(m))return!1}else if(a.attributes[e]!=c[e])return!1;for(h in g)if(a.styles[h]!=g[h])return!1;return!0}function D(a,b){var d,c;"string"==typeof a?d=a:a instanceof CKEDITOR.style?c=a:(d=a[0],c=a[1]);return[{element:d,left:c,right:function(a,d){d.transform(a,b)}}]}function z(a){return function(b){return A(b,a)}}function J(a){return function(b,
@@ -222,13 +222,13 @@ d){d[a](b)}}var E=CKEDITOR.dtd,H=CKEDITOR.tools.copy,F=CKEDITOR.tools.trim,G=[""
 CKEDITOR.editor?a:null;if(d&&!b){this.customConfig=!0;var c=d.config.allowedContent;!0===c?this.disabled=!0:(c||(this.customConfig=!1),this.allow(c,"config",1),this.allow(d.config.extraAllowedContent,"extra",1),this.allow(G[d.enterMode]+" "+G[d.shiftEnterMode],"default",1),this.disallow(d.config.disallowedContent))}else this.customConfig=!1,this.allow(b||a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,d,c){if(!l(this,b,c))return!1;var g,h;if("string"==typeof b)b=
 a(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),d,c);g=b.getDefinition();b={};c=g.attributes;b[g.element]=g={styles:g.styles,requiredStyles:g.styles&&CKEDITOR.tools.objectKeys(g.styles)};c&&(c=H(c),g.classes=c["class"]?c["class"].split(/\s+/):null,g.requiredClasses=g.classes,delete c["class"],g.attributes=c,g.requiredAttributes=c&&CKEDITOR.tools.objectKeys(c))}else if(CKEDITOR.tools.isArray(b)){for(g=0;g<b.length;++g)h=this.allow(b[g],
 d,c);return h}e(this,b,d,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,b,d,c){if(this.disabled)return!1;var g=this,e=[],h=this.editor&&this.editor.config.protectedSource,f,m=!1,k={doFilter:!d,doTransform:!0,doCallbacks:!0,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1;if(!b||"span"!=a.name||!~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))if(f=u(g,a,e,k),f&1)m=!0;else if(f&2)return!1}else if(a.type==
-CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var c=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var r,l,n;if(h)for(l=0;l<h.length;++l)if((n=c.match(h[l]))&&n[0].length==c.length){d=!0;break a}c=CKEDITOR.htmlParser.fragment.fromHtml(c);1==c.children.length&&(r=c.children[0]).type==CKEDITOR.NODE_ELEMENT&&u(g,r,d,k);d=!d.length}d||e.push(a)}},null,!0);e.length&&(m=!0);var l;a=[];c=G[c||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var n;d=
-e.pop();)d.type==CKEDITOR.NODE_ELEMENT?x(d,c,a):d.remove();for(;l=a.pop();)if(d=l.el,d.parent)switch(n=E[d.parent.name]||E.span,l.check){case "it":E.$removeEmpty[d.name]&&!d.children.length?x(d,c,a):r(d)||x(d,c,a);break;case "el-up":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||n[d.name]||x(d,c,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||n[d.name]||x(d.parent,c,a)}return m},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));
+CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var c=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var l,r,n;if(h)for(r=0;r<h.length;++r)if((n=c.match(h[r]))&&n[0].length==c.length){d=!0;break a}c=CKEDITOR.htmlParser.fragment.fromHtml(c);1==c.children.length&&(l=c.children[0]).type==CKEDITOR.NODE_ELEMENT&&u(g,l,d,k);d=!d.length}d||e.push(a)}},null,!0);e.length&&(m=!0);var l;a=[];c=G[c||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var n;d=
+e.pop();)d.type==CKEDITOR.NODE_ELEMENT?w(d,c,a):d.remove();for(;l=a.pop();)if(d=l.el,d.parent)switch(n=E[d.parent.name]||E.span,l.check){case "it":E.$removeEmpty[d.name]&&!d.children.length?w(d,c,a):r(d)||w(d,c,a);break;case "el-up":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||n[d.name]||w(d,c,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||n[d.name]||w(d.parent,c,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(b){if(!l(this,b,!0))return!1;"string"==typeof b&&(b=a(b));e(this,b,null,this.disallowedContent,this._.disallowedRules);return!0},addContentForms:function(a){if(!this.disabled&&a){var b,d,c=[],g;for(b=0;b<a.length&&!g;++b)d=a[b],("string"==typeof d||d instanceof CKEDITOR.style)&&this.check(d)&&(g=d);if(g){for(b=0;b<a.length;++b)c.push(D(a[b],g));this.addTransformations(c)}}},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 b,d;if(!this.disabled&&a){var c=this._.transformations,g;for(g=0;g<a.length;++g){b=
-a[g];var e=void 0,h=void 0,f=void 0,m=void 0,k=void 0,r=void 0;d=[];for(h=0;h<b.length;++h)f=b[h],"string"==typeof f?(f=f.split(/\s*:\s*/),m=f[0],k=null,r=f[1]):(m=f.check,k=f.left,r=f.right),e||(e=f,e=e.element?e.element:m?m.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element),k instanceof CKEDITOR.style&&(k=z(k)),d.push({check:m==e?null:m,left:k,right:"string"==typeof r?J(r):r});b=e;c[b]||(c[b]=[]);c[b].push(d)}}},check:function(b,d,c){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(b)){for(var g=
+a[g];var e=void 0,h=void 0,f=void 0,m=void 0,k=void 0,l=void 0;d=[];for(h=0;h<b.length;++h)f=b[h],"string"==typeof f?(f=f.split(/\s*:\s*/),m=f[0],k=null,l=f[1]):(m=f.check,k=f.left,l=f.right),e||(e=f,e=e.element?e.element:m?m.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element),k instanceof CKEDITOR.style&&(k=z(k)),d.push({check:m==e?null:m,left:k,right:"string"==typeof l?J(l):l});b=e;c[b]||(c[b]=[]);c[b].push(d)}}},check:function(b,d,c){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(b)){for(var g=
 b.length;g--;)if(this.check(b[g],d,c))return!0;return!1}var e,h;if("string"==typeof b){h=b+"\x3c"+(!1===d?"0":"1")+(c?"1":"0")+"\x3e";if(h in this._.cachedChecks)return this._.cachedChecks[h];e=a(b).$1;var f=e.styles,g=e.classes;e.name=e.elements;e.classes=g=g?g.split(/\s*,\s*/):[];e.styles=m(f);e.attributes=m(e.attributes);e.children=[];g.length&&(e.attributes["class"]=g.join(" "));f&&(e.attributes.style=CKEDITOR.tools.writeCssText(e.styles))}else e=b.getDefinition(),f=e.styles,g=e.attributes||{},
-f&&!CKEDITOR.tools.isEmpty(f)?(f=H(f),g.style=CKEDITOR.tools.writeCssText(f,!0)):f={},e={name:e.element,attributes:g,classes:g["class"]?g["class"].split(/\s+/):[],styles:f,children:[]};var f=CKEDITOR.tools.clone(e),k=[],r;if(!1!==d&&(r=this._.transformations[e.name])){for(g=0;g<r.length;++g)y(this,e,r[g]);p(e)}u(this,f,k,{doFilter:!0,doTransform:!1!==d,skipRequired:!c,skipFinalValidation:!c});0<k.length?c=!1:((d=e.attributes["class"])&&(e.attributes["class"]=e.attributes["class"].split(" ").sort().join(" ")),
+f&&!CKEDITOR.tools.isEmpty(f)?(f=H(f),g.style=CKEDITOR.tools.writeCssText(f,!0)):f={},e={name:e.element,attributes:g,classes:g["class"]?g["class"].split(/\s+/):[],styles:f,children:[]};var f=CKEDITOR.tools.clone(e),k=[],l;if(!1!==d&&(l=this._.transformations[e.name])){for(g=0;g<l.length;++g)y(this,e,l[g]);p(e)}u(this,f,k,{doFilter:!0,doTransform:!1!==d,skipRequired:!c,skipFinalValidation:!c});0<k.length?c=!1:((d=e.attributes["class"])&&(e.attributes["class"]=e.attributes["class"].split(" ").sort().join(" ")),
 c=CKEDITOR.tools.objectCompare(e.attributes,f.attributes,!0),d&&(e.attributes["class"]=d));"string"==typeof b&&(this._.cachedChecks[h]=c);return c},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,c){var g=a.slice(),e;if(this.check(G[d]))return d;for(c||(g=g.reverse());e=g.pop();)if(this.check(e))return b[e];return CKEDITOR.ENTER_BR}}(),clone:function(){var a=new CKEDITOR.filter,b=CKEDITOR.tools.clone;a.allowedContent=
 b(this.allowedContent);a._.allowedRules=b(this._.allowedRules);a.disallowedContent=b(this.disallowedContent);a._.disallowedRules=b(this._.disallowedRules);a._.transformations=b(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 L={styles:1,attributes:1,classes:1},I={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},
 C=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,S={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},O=/^cke:(object|embed|param)$/,P=/^(object|embed|param)$/,K;K=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,b,d){d=d||
@@ -242,38 +242,38 @@ h="focusout"):CKEDITOR.event.useCapture=1);var b={blur:function(){e.equals(this.
 this.keystrokes={};this.blockedKeystrokes={};this._={editor:e};return this},function(){var e,f=function(c){c=c.data;var b=c.getKeystroke(),f=this.keystrokes[b],k=this._.editor;e=!1===k.fire("key",{keyCode:b,domEvent:c});e||(f&&(e=!1!==k.execCommand(f,{from:"keystrokeHandler"})),e||(e=!!this.blockedKeystrokes[b]));e&&c.preventDefault(!0);return!e},c=function(c){e&&(e=!1,c.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(e){e.on("keydown",f,this);if(CKEDITOR.env.gecko&&
 CKEDITOR.env.mac)e.on("keypress",c,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(e,f,c){e&&CKEDITOR.lang.languages[e]||(e=this.detect(f,e));var h=this;f=function(){h[e].dir=h.rtl[e]?"rtl":"ltr";c(e,h[e])};this[e]?f():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+e+".js"),f,this)},detect:function(e,f){var c=this.languages;f=f||navigator.userLanguage||navigator.language||e;var h=f.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),b=h[1],h=h[2];c[b+"-"+h]?b=b+"-"+h:c[b]||(b=null);CKEDITOR.lang.detect=b?function(){return b}:function(b){return b};return b||
-e}}}(),CKEDITOR.scriptLoader=function(){var e={},f={};return{load:function(c,h,b,l){var k="string"==typeof c;k&&(c=[c]);b||(b=CKEDITOR);var d=c.length,g=[],m=[],a=function(a){h&&(k?h.call(b,a):h.call(b,g,m))};if(0===d)a(!0);else{var n=function(b,c){(c?g:m).push(b);0>=--d&&(l&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),a(c))},w=function(a,b){e[a]=1;var d=f[a];delete f[a];for(var c=0;c<d.length;c++)d[c](a,b)},u=function(a){if(e[a])n(a,!0);else{var b=f[a]||(f[a]=[]);b.push(n);if(!(1<
-b.length)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:a});h&&(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(){w(a,!0)},0)},d.$.onerror=function(){w(a,!1)}));d.appendTo(CKEDITOR.document.getHead())}}};l&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");
-for(var t=0;t<d;t++)u(c[t])}},queue:function(){function c(){var b;(b=e[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var e=[];return function(b,f){var k=this;e.push({scriptUrl:b,callback:function(){f&&f.apply(this,arguments);e.shift();c.call(k)}});1==e.length&&c.call(this)}}()}}(),CKEDITOR.resourceManager=function(e,f){this.basePath=e;this.fileName=f;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype={add:function(e,f){if(this.registered[e])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+
-e+'" is already registered.');var c=this.registered[e]=f||{};c.name=e;c.path=this.getPath(e);CKEDITOR.fire(e+CKEDITOR.tools.capitalize(this.fileName)+"Ready",c);return this.get(e)},get:function(e){return this.registered[e]||null},getPath:function(e){var f=this.externals[e];return CKEDITOR.getUrl(f&&f.dir||this.basePath+e+"/")},getFilePath:function(e){var f=this.externals[e];return CKEDITOR.getUrl(this.getPath(e)+(f?f.file:this.fileName+".js"))},addExternal:function(e,f,c){e=e.split(",");for(var h=
-0;h<e.length;h++){var b=e[h];c||(f=f.replace(/[^\/]+$/,function(b){c=b;return""}));this.externals[b]={dir:f,file:c||this.fileName+".js"}}},load:function(e,f,c){CKEDITOR.tools.isArray(e)||(e=e?[e]:[]);for(var h=this.loaded,b=this.registered,l=[],k={},d={},g=0;g<e.length;g++){var m=e[g];if(m)if(h[m]||b[m])d[m]=this.get(m);else{var a=this.getFilePath(m);l.push(a);a in k||(k[a]=[]);k[a].push(m)}}CKEDITOR.scriptLoader.load(l,function(a,b){if(b.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+
-k[b[0]].join(",")+'" was not found at "'+b[0]+'".');for(var g=0;g<a.length;g++)for(var e=k[a[g]],m=0;m<e.length;m++){var r=e[m];d[r]=this.get(r);h[r]=1}f.call(c,d)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(e){var f={};return function(c,h,b){var l={},k=function(d){e.call(this,d,function(d){CKEDITOR.tools.extend(l,d);var c=[],a;for(a in d){var e=d[a],w=e&&e.requires;if(!f[a]){if(e.icons)for(var u=
-e.icons.split(","),t=u.length;t--;)CKEDITOR.skin.addIcon(u[t],e.path+"icons/"+(CKEDITOR.env.hidpi&&e.hidpi?"hidpi/":"")+u[t]+".png");f[a]=1}if(w)for(w.split&&(w=w.split(",")),e=0;e<w.length;e++)l[w[e]]||c.push(w[e])}if(c.length)k.call(this,c);else{for(a in l)e=l[a],e.onLoad&&!e.onLoad._called&&(!1===e.onLoad()&&delete l[a],e.onLoad._called=1);h&&h.call(b||window,l)}},this)};k.call(this,c)}}),CKEDITOR.plugins.setLang=function(e,f,c){var h=this.get(e);e=h.langEntries||(h.langEntries={});h=h.lang||(h.lang=
-[]);h.split&&(h=h.split(","));-1==CKEDITOR.tools.indexOf(h,f)&&h.push(f);e[f]=c},CKEDITOR.ui=function(e){if(e.ui)return e.ui;this.items={};this.instances={};this.editor=e;this._={handlers:{}};return this},CKEDITOR.ui.prototype={add:function(e,f,c){c.name=e.toLowerCase();var h=this.items[e]={type:f,command:c.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(h,c)},get:function(e){return this.instances[e]},create:function(e){var f=this.items[e],c=f&&this._.handlers[f.type],
-h=f&&f.command&&this.editor.getCommand(f.command),c=c&&c.create.apply(this,f.args);this.instances[e]=c;h&&h.uiItems.push(c);c&&!c.type&&(c.type=f.type);return c},addHandler:function(e,f){this._.handlers[e]=f},space:function(e){return CKEDITOR.document.getById(this.spaceId(e))},spaceId:function(e){return this.editor.id+"_"+e}},CKEDITOR.event.implementOn(CKEDITOR.ui),function(){function e(a,b,g){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(void 0!==b){if(!(b instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");
-if(!g)throw Error("One of the element modes must be specified.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&g==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!c(b,g))throw Error('The specified element mode is not supported on element: "'+b.getName()+'".');this.element=b;this.elementMode=g;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(b.getId()||b.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};
-this.templates={};this.name=this.name||f();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",h);this.on("selectionChange",function(a){l(this,a.data.path)});this.on("activeFilterChange",function(){l(this,this.elementPath(),!0)});this.on("mode",h);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(){"destroyed"!==this.status?d(this,a):CKEDITOR.warn("editor-incorrect-destroy")},0,this)}function f(){do var a="editor"+ ++t;while(CKEDITOR.instances[a]);return a}function c(a,b){return b==CKEDITOR.ELEMENT_MODE_INLINE?
-a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):b==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function h(){var a=this.commands,d;for(d in a)b(this,a[d])}function b(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function l(a,b,d){if(b){var c,g,e=a.commands;for(g in e)c=e[g],(d||c.contextSensitive)&&c.refresh(a,b)}}function k(a){var b=a.config.customConfig;if(!b)return!1;var b=CKEDITOR.getUrl(b),d=p[b]||(p[b]={});d.fn?
-(d.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=b&&k(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(b,function(){d.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};k(a)});return!0}function d(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var d in b.on)a.on(d,b.on[d]);CKEDITOR.tools.extend(a.config,b,!0);delete a.config.on}d=a.config;a.readOnly=d.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=d.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:d.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:
-d.shiftEnterMode;d.skin&&(CKEDITOR.skinName=d.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);g(a)});b&&null!=b.customConfig&&(a.config.customConfig=b.customConfig);k(a)||a.fireOnce("customConfigLoaded")}function g(a){CKEDITOR.skin.loadPart("editor",function(){m(a)})}function m(b){CKEDITOR.lang.load(b.config.language,b.config.defaultLanguage,function(d,c){var g=b.config.title;b.langCode=d;b.lang=CKEDITOR.tools.prototypedCopy(c);
-b.title="string"==typeof g||!1===g?g:[b.lang.editor,b.name].join(", ");b.config.contentsLangDirection||(b.config.contentsLangDirection=b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?b.element.getDirection(1):b.lang.dir);b.fire("langLoaded");a(b)})}function a(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);n(a)})}function n(a){function b(a){if(!a)return"";CKEDITOR.tools.isArray(a)&&(a=a.join(","));return a.replace(/\s/g,"")}var d=a.config,c=b(d.plugins),
-g=b(d.extraPlugins),e=b(d.removePlugins);if(g)var h=new RegExp("(?:^|,)(?:"+g.replace(/,/g,"|")+")(?\x3d,|$)","g"),c=c.replace(h,""),c=c+(","+g);if(e)var f=new RegExp("(?:^|,)(?:"+e.replace(/,/g,"|")+")(?\x3d,|$)","g"),c=c.replace(f,"");CKEDITOR.env.air&&(c+=",adobeair");CKEDITOR.plugins.load(c.split(","),function(b){var c=[],g=[],e=[];a.plugins=CKEDITOR.tools.extend({},a.plugins,b);for(var h in b){var m=b[h],k=m.lang,l=null,n=m.requires,x;CKEDITOR.tools.isArray(n)&&(n=n.join(","));if(n&&(x=n.match(f)))for(;n=
-x.pop();)CKEDITOR.error("editor-plugin-required",{plugin:n.replace(",",""),requiredBy:h});k&&!a.lang[h]&&(k.split&&(k=k.split(",")),0<=CKEDITOR.tools.indexOf(k,a.langCode)?l=a.langCode:(l=a.langCode.replace(/-.*/,""),l=l!=a.langCode&&0<=CKEDITOR.tools.indexOf(k,l)?l:0<=CKEDITOR.tools.indexOf(k,"en")?"en":k[0]),m.langEntries&&m.langEntries[l]?(a.lang[h]=m.langEntries[l],l=null):e.push(CKEDITOR.getUrl(m.path+"lang/"+l+".js")));g.push(l);c.push(m)}CKEDITOR.scriptLoader.load(e,function(){for(var b=["beforeInit",
-"init","afterInit"],e=0;e<b.length;e++)for(var h=0;h<c.length;h++){var f=c[h];0===e&&g[h]&&f.lang&&f.langEntries&&(a.lang[f.name]=f.langEntries[g[h]]);if(f[b[e]])f[b[e]](a)}a.fireOnce("pluginsLoaded");d.keystrokes&&a.setKeystroke(a.config.keystrokes);for(h=0;h<a.config.blockedKeystrokes.length;h++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[h]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function w(){var a=this.element;if(a&&this.elementMode!=
-CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):a.setHtml(b);return!0}return!1}function u(a,b){function d(a){var b=a.startContainer,c=a.endContainer;return b.is&&(b.is("tr")||b.is("td")&&b.equals(c)&&a.endOffset===b.getChildCount())?!0:!1}function c(a){var b=a.startContainer;return b.is("tr")?a.cloneContents():b.clone(!0)}for(var g=new CKEDITOR.dom.documentFragment,e,h,f,m=0;m<a.length;m++){var k=a[m],
-l=k.startContainer.getAscendant("tr",!0);d(k)?(e||(e=l.getAscendant("table").clone(),e.append(l.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),g.append(e),e=e.findOne("thead, tbody, tfoot")),h&&h.equals(l)||(h=l,f=l.clone(),e.append(f)),f.append(c(k))):g.append(k.cloneContents())}return e?g:b.getHtmlFromRange(a[0])}e.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=e;var t=0,p={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{plugins:{detectConflict:function(a,b){for(var d=0;d<b.length;d++){var c=
-b[d];if(this[c])return CKEDITOR.warn("editor-plugin-conflict",{plugin:a,replacedWith:c}),!0}return!1}},addCommand:function(a,d){d.name=a.toLowerCase();var c=d instanceof CKEDITOR.command?d:new CKEDITOR.command(this,d);this.mode&&b(this,c);return this.commands[a]=c},_attachToForm:function(){function a(b){d.updateElement();d._.required&&!c.getValue()&&!1===d.fire("required")&&b.data.preventDefault()}function b(a){return!!(a&&a.call&&a.apply)}var d=this,c=d.element,g=new CKEDITOR.dom.element(c.$.form);
-c.is("textarea")&&g&&(g.on("submit",a),b(g.$.submit)&&(g.$.submit=CKEDITOR.tools.override(g.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}})),d.on("destroy",function(){g.removeListener("submit",a)}))},destroy:function(a){var b=CKEDITOR.filter.instances,d=this;this.fire("beforeDestroy");!a&&w.call(this);this.editable(null);this.filter&&delete this.filter;CKEDITOR.tools.array.forEach(CKEDITOR.tools.objectKeys(b),function(a){a=b[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,b){var d=this.getCommand(a),c={name:a,commandData:b||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&
-!1!==this.fire("beforeCommandExec",c)&&(c.returnValue=d.exec(c.commandData),!d.async&&!1!==this.fire("afterCommandExec",c))?c.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;"string"!=typeof b&&(b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"");b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");
-"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,b,d){var c=!0,g=b;b&&"object"==typeof b&&(d=b.internal,g=b.callback,c=!b.noSnapshot);!d&&c&&this.fire("saveSnapshot");if(g||!d)this.once("dataReady",function(a){!d&&c&&this.fire("saveSnapshot");g&&g.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,b,d){this.fire("insertHtml",{dataValue:a,mode:b,range:d})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var b=this.editable(),d=this.getSelection(),d=d&&d.getRanges();if(!b||!d||0===d.length)return null;
-b=u(d,b);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var d=this.editable(),c=this.getSelection().getRanges(),g=new CKEDITOR.dom.documentFragment,e;if(!d||0===c.length)return null;for(e=0;e<c.length;e++)g.append(d.extractHtmlFromRange(c[e],b));b||this.getSelection().selectRanges([c[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 w.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,c,g=b.length;g--;)d=b[g],c=0,CKEDITOR.tools.isArray(d)&&(c=d[1],d=d[0]),c?a[d]=c:delete a[d]},getCommandKeystroke:function(a,b){var d="string"===typeof a?this.getCommand(a):a,c=[];if(d){var g=CKEDITOR.tools.object.findKey(this.commands,d),e=this.keystrokeHandler.keystrokes;if(d.fakeKeystroke)c.push(d.fakeKeystroke);
-else for(var h in e)e[h]===g&&c.push(h)}return b?c:c[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,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?
-CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b)this.activeEnterMode=a,this.activeShiftEnterMode=b,this.fire("activeEnterModeChange")},showNotification:function(a){alert(a)}})}(),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]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}},
+e}}}(),CKEDITOR.scriptLoader=function(){var e={},f={};return{load:function(c,h,b,l){var k="string"==typeof c;k&&(c=[c]);b||(b=CKEDITOR);var d=c.length,g=[],m=[],a=function(a){h&&(k?h.call(b,a):h.call(b,g,m))};if(0===d)a(!0);else{var n=function(b,c){(c?g:m).push(b);0>=--d&&(l&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),a(c))},x=function(a,b){e[a]=1;var d=f[a];delete f[a];for(var c=0;c<d.length;c++)d[c](a,b)},u=function(a){if(e[a])n(a,!0);else{var b=f[a]||(f[a]=[]);b.push(n);if(!(1<
+b.length)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:a});h&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?d.$.onreadystatechange=function(){if("loaded"==d.$.readyState||"complete"==d.$.readyState)d.$.onreadystatechange=null,x(a,!0)}:(d.$.onload=function(){setTimeout(function(){d.$.onload=null;d.$.onerror=null;x(a,!0)},0)},d.$.onerror=function(){d.$.onload=null;d.$.onerror=null;x(a,!1)}));d.appendTo(CKEDITOR.document.getHead())}}};l&&
+CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var t=0;t<d;t++)u(c[t])}},queue:function(){function c(){var b;(b=e[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var e=[];return function(b,f){var k=this;e.push({scriptUrl:b,callback:function(){f&&f.apply(this,arguments);e.shift();c.call(k)}});1==e.length&&c.call(this)}}()}}(),CKEDITOR.resourceManager=function(e,f){this.basePath=e;this.fileName=f;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype=
+{add:function(e,f){if(this.registered[e])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+e+'" is already registered.');var c=this.registered[e]=f||{};c.name=e;c.path=this.getPath(e);CKEDITOR.fire(e+CKEDITOR.tools.capitalize(this.fileName)+"Ready",c);return this.get(e)},get:function(e){return this.registered[e]||null},getPath:function(e){var f=this.externals[e];return CKEDITOR.getUrl(f&&f.dir||this.basePath+e+"/")},getFilePath:function(e){var f=this.externals[e];return CKEDITOR.getUrl(this.getPath(e)+
+(f?f.file:this.fileName+".js"))},addExternal:function(e,f,c){e=e.split(",");for(var h=0;h<e.length;h++){var b=e[h];c||(f=f.replace(/[^\/]+$/,function(b){c=b;return""}));this.externals[b]={dir:f,file:c||this.fileName+".js"}}},load:function(e,f,c){CKEDITOR.tools.isArray(e)||(e=e?[e]:[]);for(var h=this.loaded,b=this.registered,l=[],k={},d={},g=0;g<e.length;g++){var m=e[g];if(m)if(h[m]||b[m])d[m]=this.get(m);else{var a=this.getFilePath(m);l.push(a);a in k||(k[a]=[]);k[a].push(m)}}CKEDITOR.scriptLoader.load(l,
+function(a,b){if(b.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+k[b[0]].join(",")+'" was not found at "'+b[0]+'".');for(var g=0;g<a.length;g++)for(var e=k[a[g]],m=0;m<e.length;m++){var l=e[m];d[l]=this.get(l);h[l]=1}f.call(c,d)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(e){var f={};return function(c,h,b){var l={},k=function(d){e.call(this,d,function(d){CKEDITOR.tools.extend(l,
+d);var c=[],a;for(a in d){var e=d[a],x=e&&e.requires;if(!f[a]){if(e.icons)for(var u=e.icons.split(","),t=u.length;t--;)CKEDITOR.skin.addIcon(u[t],e.path+"icons/"+(CKEDITOR.env.hidpi&&e.hidpi?"hidpi/":"")+u[t]+".png");f[a]=1}if(x)for(x.split&&(x=x.split(",")),e=0;e<x.length;e++)l[x[e]]||c.push(x[e])}if(c.length)k.call(this,c);else{for(a in l)e=l[a],e.onLoad&&!e.onLoad._called&&(!1===e.onLoad()&&delete l[a],e.onLoad._called=1);h&&h.call(b||window,l)}},this)};k.call(this,c)}}),CKEDITOR.plugins.setLang=
+function(e,f,c){var h=this.get(e);e=h.langEntries||(h.langEntries={});h=h.lang||(h.lang=[]);h.split&&(h=h.split(","));-1==CKEDITOR.tools.indexOf(h,f)&&h.push(f);e[f]=c},CKEDITOR.ui=function(e){if(e.ui)return e.ui;this.items={};this.instances={};this.editor=e;this._={handlers:{}};return this},CKEDITOR.ui.prototype={add:function(e,f,c){c.name=e.toLowerCase();var h=this.items[e]={type:f,command:c.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(h,c)},get:function(e){return this.instances[e]},
+create:function(e){var f=this.items[e],c=f&&this._.handlers[f.type],h=f&&f.command&&this.editor.getCommand(f.command),c=c&&c.create.apply(this,f.args);this.instances[e]=c;h&&h.uiItems.push(c);c&&!c.type&&(c.type=f.type);return c},addHandler:function(e,f){this._.handlers[e]=f},space:function(e){return CKEDITOR.document.getById(this.spaceId(e))},spaceId:function(e){return this.editor.id+"_"+e}},CKEDITOR.event.implementOn(CKEDITOR.ui),function(){function e(a,b,g){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);
+if(void 0!==b){if(!(b instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");if(!g)throw Error("One of the element modes must be specified.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&g==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!c(b,g))throw Error('The specified element mode is not supported on element: "'+b.getName()+'".');this.element=b;this.elementMode=g;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&
+(b.getId()||b.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||f();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",h);this.on("selectionChange",function(a){l(this,a.data.path)});this.on("activeFilterChange",
+function(){l(this,this.elementPath(),!0)});this.on("mode",h);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(){"destroyed"!==this.status?d(this,a):CKEDITOR.warn("editor-incorrect-destroy")},
+0,this)}function f(){do var a="editor"+ ++t;while(CKEDITOR.instances[a]);return a}function c(a,b){return b==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):b==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function h(){var a=this.commands,d;for(d in a)b(this,a[d])}function b(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function l(a,b,d){if(b){var c,g,e=a.commands;for(g in e)c=e[g],(d||c.contextSensitive)&&
+c.refresh(a,b)}}function k(a){var b=a.config.customConfig;if(!b)return!1;var b=CKEDITOR.getUrl(b),d=p[b]||(p[b]={});d.fn?(d.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=b&&k(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(b,function(){d.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};k(a)});return!0}function d(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var d in b.on)a.on(d,b.on[d]);CKEDITOR.tools.extend(a.config,b,!0);delete a.config.on}d=
+a.config;a.readOnly=d.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=d.tabIndex||a.element&&a.element.getAttribute("tabindex")||
+0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:d.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:d.shiftEnterMode;d.skin&&(CKEDITOR.skinName=d.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);g(a)});b&&null!=b.customConfig&&(a.config.customConfig=b.customConfig);k(a)||a.fireOnce("customConfigLoaded")}function g(a){CKEDITOR.skin.loadPart("editor",function(){m(a)})}function m(b){CKEDITOR.lang.load(b.config.language,
+b.config.defaultLanguage,function(d,c){var g=b.config.title;b.langCode=d;b.lang=CKEDITOR.tools.prototypedCopy(c);b.title="string"==typeof g||!1===g?g:[b.lang.editor,b.name].join(", ");b.config.contentsLangDirection||(b.config.contentsLangDirection=b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?b.element.getDirection(1):b.lang.dir);b.fire("langLoaded");a(b)})}function a(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);n(a)})}function n(a){function b(a){if(!a)return"";
+CKEDITOR.tools.isArray(a)&&(a=a.join(","));return a.replace(/\s/g,"")}var d=a.config,c=b(d.plugins),g=b(d.extraPlugins),e=b(d.removePlugins);if(g)var h=new RegExp("(?:^|,)(?:"+g.replace(/,/g,"|")+")(?\x3d,|$)","g"),c=c.replace(h,""),c=c+(","+g);if(e)var f=new RegExp("(?:^|,)(?:"+e.replace(/,/g,"|")+")(?\x3d,|$)","g"),c=c.replace(f,"");CKEDITOR.env.air&&(c+=",adobeair");CKEDITOR.plugins.load(c.split(","),function(b){var c=[],g=[],e=[];a.plugins=CKEDITOR.tools.extend({},a.plugins,b);for(var h in b){var m=
+b[h],k=m.lang,l=null,n=m.requires,w;CKEDITOR.tools.isArray(n)&&(n=n.join(","));if(n&&(w=n.match(f)))for(;n=w.pop();)CKEDITOR.error("editor-plugin-required",{plugin:n.replace(",",""),requiredBy:h});k&&!a.lang[h]&&(k.split&&(k=k.split(",")),0<=CKEDITOR.tools.indexOf(k,a.langCode)?l=a.langCode:(l=a.langCode.replace(/-.*/,""),l=l!=a.langCode&&0<=CKEDITOR.tools.indexOf(k,l)?l:0<=CKEDITOR.tools.indexOf(k,"en")?"en":k[0]),m.langEntries&&m.langEntries[l]?(a.lang[h]=m.langEntries[l],l=null):e.push(CKEDITOR.getUrl(m.path+
+"lang/"+l+".js")));g.push(l);c.push(m)}CKEDITOR.scriptLoader.load(e,function(){for(var b=["beforeInit","init","afterInit"],e=0;e<b.length;e++)for(var h=0;h<c.length;h++){var f=c[h];0===e&&g[h]&&f.lang&&f.langEntries&&(a.lang[f.name]=f.langEntries[g[h]]);if(f[b[e]])f[b[e]](a)}a.fireOnce("pluginsLoaded");d.keystrokes&&a.setKeystroke(a.config.keystrokes);for(h=0;h<a.config.blockedKeystrokes.length;h++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[h]]=1;a.status="loaded";a.fireOnce("loaded");
+CKEDITOR.fire("instanceLoaded",null,a)})})}function x(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):a.setHtml(b);return!0}return!1}function u(a,b){function d(a){var b=a.startContainer,c=a.endContainer;return b.is&&(b.is("tr")||b.is("td")&&b.equals(c)&&a.endOffset===b.getChildCount())?!0:!1}function c(a){var b=a.startContainer;return b.is("tr")?a.cloneContents():
+b.clone(!0)}for(var g=new CKEDITOR.dom.documentFragment,e,h,f,m=0;m<a.length;m++){var k=a[m],l=k.startContainer.getAscendant("tr",!0);d(k)?(e||(e=l.getAscendant("table").clone(),e.append(l.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),g.append(e),e=e.findOne("thead, tbody, tfoot")),h&&h.equals(l)||(h=l,f=l.clone(),e.append(f)),f.append(c(k))):g.append(k.cloneContents())}return e?g:b.getHtmlFromRange(a[0])}e.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=e;var t=0,p={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,
+{plugins:{detectConflict:function(a,b){for(var d=0;d<b.length;d++){var c=b[d];if(this[c])return CKEDITOR.warn("editor-plugin-conflict",{plugin:a,replacedWith:c}),!0}return!1}},addCommand:function(a,d){d.name=a.toLowerCase();var c=d instanceof CKEDITOR.command?d:new CKEDITOR.command(this,d);this.mode&&b(this,c);return this.commands[a]=c},_attachToForm:function(){function a(b){d.updateElement();d._.required&&!c.getValue()&&!1===d.fire("required")&&b.data.preventDefault()}function b(a){return!!(a&&a.call&&
+a.apply)}var d=this,c=d.element,g=new CKEDITOR.dom.element(c.$.form);c.is("textarea")&&g&&(g.on("submit",a),b(g.$.submit)&&(g.$.submit=CKEDITOR.tools.override(g.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}})),d.on("destroy",function(){g.removeListener("submit",a)}))},destroy:function(a){var b=CKEDITOR.filter.instances,d=this;this.fire("beforeDestroy");!a&&x.call(this);this.editable(null);this.filter&&delete this.filter;CKEDITOR.tools.array.forEach(CKEDITOR.tools.objectKeys(b),
+function(a){a=b[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,b){var d=this.getCommand(a),
+c={name:a,commandData:b||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&!1!==this.fire("beforeCommandExec",c)&&(c.returnValue=d.exec(c.commandData),!d.async&&!1!==this.fire("afterCommandExec",c))?c.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;"string"!=typeof b&&(b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"");b={dataValue:b};!a&&this.fire("getData",
+b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");"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,b,d){var c=!0,g=b;b&&"object"==typeof b&&(d=b.internal,g=b.callback,c=!b.noSnapshot);!d&&c&&this.fire("saveSnapshot");if(g||!d)this.once("dataReady",function(a){!d&&c&&this.fire("saveSnapshot");g&&g.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,b,d){this.fire("insertHtml",{dataValue:a,mode:b,range:d})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var b=this.editable(),
+d=this.getSelection(),d=d&&d.getRanges();if(!b||!d||0===d.length)return null;b=u(d,b);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var d=this.editable(),c=this.getSelection().getRanges(),g=new CKEDITOR.dom.documentFragment,e;if(!d||0===c.length)return null;for(e=0;e<c.length;e++)g.append(d.extractHtmlFromRange(c[e],b));b||this.getSelection().selectRanges([c[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 x.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,c,g=b.length;g--;)d=b[g],c=0,CKEDITOR.tools.isArray(d)&&(c=d[1],d=d[0]),c?a[d]=c:delete a[d]},getCommandKeystroke:function(a,b){var d="string"===typeof a?this.getCommand(a):a,c=[];if(d){var g=CKEDITOR.tools.object.findKey(this.commands,
+d),e=this.keystrokeHandler.keystrokes;if(d.fakeKeystroke)c.push(d.fakeKeystroke);else for(var h in e)e[h]===g&&c.push(h)}return b?c:c[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,
+b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b)this.activeEnterMode=a,this.activeShiftEnterMode=b,this.fire("activeEnterModeChange")},showNotification:function(a){alert(a)}})}(),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]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}},
 function(){var e=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,f={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(c){for(var h,b,l=0,k;h=this._.htmlPartsRegex.exec(c);){b=h.index;if(b>l)if(l=c.substring(l,b),k)k.push(l);else this.onText(l);
 l=this._.htmlPartsRegex.lastIndex;if(b=h[1])if(b=b.toLowerCase(),k&&CKEDITOR.dtd.$cdata[b]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(b);continue}if(k)k.push(h[0]);else if(b=h[3]){if(b=b.toLowerCase(),!/="/.test(b)){var d={},g,m=h[4];h=!!h[5];if(m)for(;g=e.exec(m);){var a=g[1].toLowerCase();g=g[2]||g[3]||g[4]||"";d[a]=!g&&f[a]?a:CKEDITOR.tools.htmlDecodeAttr(g)}this.onTagOpen(b,d,h);!k&&CKEDITOR.dtd.$cdata[b]&&(k=[])}}else if(b=h[2])this.onComment(b)}if(c.length>l)this.onText(c.substring(l,
 c.length))}}}(),CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(e){this._.output.push("\x3c",e)},openTagClose:function(e,f){f?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(e,f){"string"==typeof f&&(f=CKEDITOR.tools.htmlEncodeAttr(f));this._.output.push(" ",e,'\x3d"',f,'"')},closeTag:function(e){this._.output.push("\x3c/",e,"\x3e")},text:function(e){this._.output.push(e)},comment:function(e){this._.output.push("\x3c!--",
@@ -284,12 +284,12 @@ function(e){this.value=e;this._={isBlockLike:!1}},CKEDITOR.htmlParser.comment.pr
 CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(e,f){if(!(this.value=e.onText(f,this.value,this)))return this.remove(),!1},writeHtml:function(e,f){f&&this.filter(f);e.text(this.value)}})}(),"use strict",function(){CKEDITOR.htmlParser.cdata=function(e){this.value=e};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(e){e.write(this.value)}})}(),"use strict",
 CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}},function(){function e(b){return b.attributes["data-cke-survive"]?!1:"a"==b.name&&b.attributes.href||CKEDITOR.dtd.$removeEmpty[b.name]}var f=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),c={ol:1,ul:1},h=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),b={ul:"li",
 ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(l,k,d){function g(a){var b;if(0<r.length)for(var d=0;d<r.length;d++){var c=r[d],g=c.name,e=CKEDITOR.dtd[g],h=q.name&&CKEDITOR.dtd[q.name];h&&!h[g]||a&&e&&!e[a]&&CKEDITOR.dtd[a]?g==q.name&&(n(q,q.parent,1),d--):(b||(m(),b=1),c=c.clone(),c.parent=q,q=c,r.splice(d,1),d--)}}function m(){for(;v.length;)n(v.shift(),q)}function a(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var b=
-a.children.length,d=a.children[b-1],c;d&&d.type==CKEDITOR.NODE_TEXT&&((c=CKEDITOR.tools.rtrim(d.value))?d.value=c:a.children.length=b-1)}}function n(b,c,g){c=c||q||p;var h=q;void 0===b.previous&&(w(c,b)&&(q=c,t.onTagOpen(d,{}),b.returnPoint=c=q),a(b),e(b)&&!b.children.length||c.add(b),"pre"==b.name&&(x=!1),"textarea"==b.name&&(B=!1));b.returnPoint?(q=b.returnPoint,delete b.returnPoint):q=g?c:h}function w(a,b){if((a==p||"body"==a.name)&&d&&(!a.name||CKEDITOR.dtd[a.name][d])){var c,g;return(c=b.attributes&&
-(g=b.attributes["data-cke-real-element-type"])?g:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function u(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||"dt"==a&&"dd"==b||"dd"==a&&"dt"==b:!1}var t=new CKEDITOR.htmlParser,p=k instanceof CKEDITOR.htmlParser.element?k:"string"==typeof k?new CKEDITOR.htmlParser.element(k):new CKEDITOR.htmlParser.fragment,r=[],v=[],q=p,B="textarea"==p.name,x="pre"==p.name;t.onTagOpen=
-function(a,b,d,k){b=new CKEDITOR.htmlParser.element(a,b);b.isUnknown&&d&&(b.isEmpty=!0);b.isOptionalClose=k;if(e(b))r.push(b);else{if("pre"==a)x=!0;else{if("br"==a&&x){q.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==a&&(B=!0)}if("br"==a)v.push(b);else{for(;!(k=(d=q.name)?CKEDITOR.dtd[d]||(q._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):h,b.isUnknown||q.isUnknown||k[a]);)if(q.isOptionalClose)t.onTagClose(d);else if(a in c&&d in c)d=q.children,(d=d[d.length-1])&&"li"==d.name||n(d=new CKEDITOR.htmlParser.element("li"),
+a.children.length,d=a.children[b-1],c;d&&d.type==CKEDITOR.NODE_TEXT&&((c=CKEDITOR.tools.rtrim(d.value))?d.value=c:a.children.length=b-1)}}function n(b,c,g){c=c||q||p;var h=q;void 0===b.previous&&(x(c,b)&&(q=c,t.onTagOpen(d,{}),b.returnPoint=c=q),a(b),e(b)&&!b.children.length||c.add(b),"pre"==b.name&&(w=!1),"textarea"==b.name&&(B=!1));b.returnPoint?(q=b.returnPoint,delete b.returnPoint):q=g?c:h}function x(a,b){if((a==p||"body"==a.name)&&d&&(!a.name||CKEDITOR.dtd[a.name][d])){var c,g;return(c=b.attributes&&
+(g=b.attributes["data-cke-real-element-type"])?g:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function u(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||"dt"==a&&"dd"==b||"dd"==a&&"dt"==b:!1}var t=new CKEDITOR.htmlParser,p=k instanceof CKEDITOR.htmlParser.element?k:"string"==typeof k?new CKEDITOR.htmlParser.element(k):new CKEDITOR.htmlParser.fragment,r=[],v=[],q=p,B="textarea"==p.name,w="pre"==p.name;t.onTagOpen=
+function(a,b,d,k){b=new CKEDITOR.htmlParser.element(a,b);b.isUnknown&&d&&(b.isEmpty=!0);b.isOptionalClose=k;if(e(b))r.push(b);else{if("pre"==a)w=!0;else{if("br"==a&&w){q.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==a&&(B=!0)}if("br"==a)v.push(b);else{for(;!(k=(d=q.name)?CKEDITOR.dtd[d]||(q._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):h,b.isUnknown||q.isUnknown||k[a]);)if(q.isOptionalClose)t.onTagClose(d);else if(a in c&&d in c)d=q.children,(d=d[d.length-1])&&"li"==d.name||n(d=new CKEDITOR.htmlParser.element("li"),
 q),!b.returnPoint&&(b.returnPoint=q),q=d;else if(a in CKEDITOR.dtd.$listItem&&!u(a,d))t.onTagOpen("li"==a?"ul":"dl",{},0,1);else if(d in f&&!u(a,d))!b.returnPoint&&(b.returnPoint=q),q=q.parent;else if(d in CKEDITOR.dtd.$inline&&r.unshift(q),q.parent)n(q,q.parent,1);else{b.isOrphan=1;break}g(a);m();b.parent=q;b.isEmpty?n(b):q=b}}};t.onTagClose=function(a){for(var b=r.length-1;0<=b;b--)if(a==r[b].name){r.splice(b,1);return}for(var c=[],g=[],e=q;e!=p&&e.name!=a;)e._.isBlockLike||g.unshift(e),c.push(e),
-e=e.returnPoint||e.parent;if(e!=p){for(b=0;b<c.length;b++){var h=c[b];n(h,h.parent)}q=e;e._.isBlockLike&&m();n(e,e.parent);e==q&&(q=q.parent);r=r.concat(g)}"body"==a&&(d=!1)};t.onText=function(a){if(!(q._.hasInlineStarted&&!v.length||x||B)&&(a=CKEDITOR.tools.ltrim(a),0===a.length))return;var c=q.name,e=c?CKEDITOR.dtd[c]||(q._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):h;if(!B&&!e["#"]&&c in f)t.onTagOpen(b[c]||""),t.onText(a);else{m();g();x||B||(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=
-new CKEDITOR.htmlParser.text(a);if(w(q,a))this.onTagOpen(d,{},0,1);q.add(a)}};t.onCDATA=function(a){q.add(new CKEDITOR.htmlParser.cdata(a))};t.onComment=function(a){m();g();q.add(new CKEDITOR.htmlParser.comment(a))};t.parse(l);for(m();q!=p;)n(q,q.parent,1);a(p);return p};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(b,c){isNaN(c)&&(c=this.children.length);var d=0<c?this.children[c-1]:null;if(d){if(b._.isBlockLike&&d.type==CKEDITOR.NODE_TEXT&&(d.value=CKEDITOR.tools.rtrim(d.value),
+e=e.returnPoint||e.parent;if(e!=p){for(b=0;b<c.length;b++){var h=c[b];n(h,h.parent)}q=e;e._.isBlockLike&&m();n(e,e.parent);e==q&&(q=q.parent);r=r.concat(g)}"body"==a&&(d=!1)};t.onText=function(a){if(!(q._.hasInlineStarted&&!v.length||w||B)&&(a=CKEDITOR.tools.ltrim(a),0===a.length))return;var c=q.name,e=c?CKEDITOR.dtd[c]||(q._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):h;if(!B&&!e["#"]&&c in f)t.onTagOpen(b[c]||""),t.onText(a);else{m();g();w||B||(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=
+new CKEDITOR.htmlParser.text(a);if(x(q,a))this.onTagOpen(d,{},0,1);q.add(a)}};t.onCDATA=function(a){q.add(new CKEDITOR.htmlParser.cdata(a))};t.onComment=function(a){m();g();q.add(new CKEDITOR.htmlParser.comment(a))};t.parse(l);for(m();q!=p;)n(q,q.parent,1);a(p);return p};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(b,c){isNaN(c)&&(c=this.children.length);var d=0<c?this.children[c-1]:null;if(d){if(b._.isBlockLike&&d.type==CKEDITOR.NODE_TEXT&&(d.value=CKEDITOR.tools.rtrim(d.value),
 0===d.value.length)){this.children.pop();this.add(b);return}d.next=b}b.previous=d;b.parent=this;this.children.splice(c,0,b);this._.hasInlineStarted||(this._.hasInlineStarted=b.type==CKEDITOR.NODE_TEXT||b.type==CKEDITOR.NODE_ELEMENT&&!b._.isBlockLike)},filter:function(b,c){c=this.getFilterContext(c);b.onRoot(c,this);this.filterChildren(b,!1,c)},filterChildren:function(b,c,d){if(this.childrenFilteredBy!=b.id){d=this.getFilterContext(d);if(c&&!this.parent)b.onRoot(d,this);this.childrenFilteredBy=b.id;
 for(c=0;c<this.children.length;c++)!1===this.children[c].filter(b,d)&&c--}},writeHtml:function(b,c){c&&this.filter(c);this.writeChildrenHtml(b)},writeChildrenHtml:function(b,c,d){var g=this.getFilterContext();if(d&&!this.parent&&c)c.onRoot(g,this);c&&this.filterChildren(c,!1,g);c=0;d=this.children;for(g=d.length;c<g;c++)d[c].writeHtml(b)},forEach:function(b,c,d){if(!(d||c&&this.type!=c))var g=b(this);if(!1!==g){d=this.children;for(var e=0;e<d.length;e++)g=d[e],g.type==CKEDITOR.NODE_ELEMENT?g.forEach(b,
 c):c&&g.type!=c||b(g)}},getFilterContext:function(b){return b||{}}}}(),"use strict",function(){function e(){this.rules=[]}function f(c,h,b,f){var k,d;for(k in h)(d=c[k])||(d=c[k]=new e),d.add(h[k],b,f)}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(c){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new e;this.attributeNameRules=new e;this.elementsRules={};this.attributesRules={};this.textRules=new e;this.commentRules=new e;this.rootRules=new e;c&&this.addRules(c,10)},
@@ -298,22 +298,22 @@ b,e)},applyTo:function(c){c.filter(this)},onElementName:function(c,e){return thi
 f.exec(c,e,this);if(!1===f)return null;if(f&&f!=e)return this.onNode(c,f);if(e.parent&&!e.name)break}return e},onNode:function(c,e){var b=e.type;return b==CKEDITOR.NODE_ELEMENT?this.onElement(c,e):b==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(c,e.value)):b==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(c,e.value)):null},onAttribute:function(c,e,b,f){return(b=this.attributesRules[b])?b.exec(c,f,e,this):f}}});CKEDITOR.htmlParser.filterRulesGroup=e;e.prototype=
 {add:function(c,e,b){this.rules.splice(this.findIndex(e),0,{value:c,priority:e,options:b})},addMany:function(c,e,b){for(var f=[this.findIndex(e),0],k=0,d=c.length;k<d;k++)f.push({value:c[k],priority:e,options:b});this.rules.splice.apply(this.rules,f)},findIndex:function(c){for(var e=this.rules,b=e.length-1;0<=b&&c<e[b].priority;)b--;return b+1},exec:function(c,e){var b=e instanceof CKEDITOR.htmlParser.node||e instanceof CKEDITOR.htmlParser.fragment,f=Array.prototype.slice.call(arguments,1),k=this.rules,
 d=k.length,g,m,a,n;for(n=0;n<d;n++)if(b&&(g=e.type,m=e.name),a=k[n],!(c.nonEditable&&!a.options.applyToAll||c.nestedEditable&&a.options.excludeNestedEditable)){a=a.value.apply(null,f);if(!1===a||b&&a&&(a.name!=m||a.type!=g))return a;null!=a&&(f[0]=e=a)}return e},execOnName:function(c,e){for(var b=0,f=this.rules,k=f.length,d;e&&b<k;b++)d=f[b],c.nonEditable&&!d.options.applyToAll||c.nestedEditable&&d.options.excludeNestedEditable||(e=e.replace(d.value[0],d.value[1]));return e}}}(),function(){function e(a,
-d){function g(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function e(a,b){return function(d){if(d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=[],m=c(d),k,x;if(m)for(f(m,1)&&e.push(m);m;)l(m)&&(k=h(m))&&f(k)&&((x=h(k))&&!l(x)?e.push(k):(g(n).insertAfter(k),k.remove())),m=m.previous;for(m=0;m<e.length;m++)e[m].remove();if(e=!a||!1!==("function"==typeof b?b(d):b))n||CKEDITOR.env.needsBrFiller||d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?
+d){function g(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function e(a,b){return function(d){if(d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=[],m=c(d),k,w;if(m)for(f(m,1)&&e.push(m);m;)l(m)&&(k=h(m))&&f(k)&&((w=h(k))&&!l(w)?e.push(k):(g(n).insertAfter(k),k.remove())),m=m.previous;for(m=0;m<e.length;m++)e[m].remove();if(e=!a||!1!==("function"==typeof b?b(d):b))n||CKEDITOR.env.needsBrFiller||d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?
 n||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||d.name in CKEDITOR.dtd.tr||d.name in CKEDITOR.dtd.$listItem)?(e=c(d),e=!e||"form"==d.name&&"input"==e.name):e=!1:e=!1;e&&d.add(g(a))}}}function f(a,b){if((!n||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(q))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&
-n&&(!b||a.parent.name in C)||!n&&((d=a.previous)&&"br"==d.name||!d||l(d)))?!0:!1}var m={elements:{}},n="html"==d,C=CKEDITOR.tools.extend({},A),r;for(r in C)"#"in x[r]||delete C[r];for(r in C)m.elements[r]=e(n,a.config.fillEmptyBlocks);m.root=e(n,!1);m.elements.br=function(a){return function(d){if(d.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=d.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=d.next;c&&b(c);)c=c.next;var e=h(d);!c&&l(d.parent)?k(d.parent,
+n&&(!b||a.parent.name in C)||!n&&((d=a.previous)&&"br"==d.name||!d||l(d)))?!0:!1}var m={elements:{}},n="html"==d,C=CKEDITOR.tools.extend({},A),r;for(r in C)"#"in w[r]||delete C[r];for(r in C)m.elements[r]=e(n,a.config.fillEmptyBlocks);m.root=e(n,!1);m.elements.br=function(a){return function(d){if(d.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=d.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=d.next;c&&b(c);)c=c.next;var e=h(d);!c&&l(d.parent)?k(d.parent,
 g(a)):l(c)&&e&&!l(e)&&g(a).insertBefore(c)}}}}(n);return m}function f(a,b){return a!=CKEDITOR.ENTER_BR&&!1!==b?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function c(a){for(a=a.children[a.children.length-1];a&&b(a);)a=a.previous;return a}function h(a){for(a=a.previous;a&&b(a);)a=a.previous;return a}function b(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function l(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in
 A||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function k(a,b){var d=a.children[a.children.length-1];a.children.push(b);b.parent=a;d&&(d.next=b,b.previous=d)}function d(a){a=a.attributes;"false"!=a.contenteditable&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function g(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function m(a){return a.replace(H,function(a,b,d){return"\x3c"+b+d.replace(F,
-function(a,b){return G.test(b)&&-1==d.indexOf("data-cke-saved-"+b)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function a(a,b){return a.replace(b,function(a,b,d){0===a.indexOf("\x3ctextarea")&&(a=b+p(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(C,function(a,b){return decodeURIComponent(b)})}function w(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
+function(a,b){return G.test(b)&&-1==d.indexOf("data-cke-saved-"+b)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function a(a,b){return a.replace(b,function(a,b,d){0===a.indexOf("\x3ctextarea")&&(a=b+p(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(C,function(a,b){return decodeURIComponent(b)})}function x(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
 function(a){return"\x3c!--"+B+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function u(a){return CKEDITOR.tools.array.reduce(a.split(""),function(a,b){var d=b.toLowerCase(),c=b.toUpperCase(),e=t(d);d!==c&&(e+="|"+t(c));return a+("("+e+")")},"")}function t(a){var b;b=a.charCodeAt(0);var d=b.toString(16);b={htmlCode:"\x26#"+b+";?",hex:"\x26#x0*"+d+";?",entity:{"\x3c":"\x26lt;","\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var c in b)b[c]&&(a+="|"+b[c]);return a}function p(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,
 function(a,b){return decodeURIComponent(b)})}function r(a,b){var d=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return d&&d[b]||""})}function v(a,b){var d=[],c=b.config.protectedSource,e=b._.dataStore||(b._.dataStore={id:1}),g=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,c=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(c);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,
 function(a){return"\x3c!--{cke_tempcomment}"+(d.push(a)-1)+"--\x3e"});for(var f=0;f<c.length;f++)a=a.replace(c[f],function(a){a=a.replace(g,function(a,b,c){return d[c]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(d.push(a)-1)+"--\x3e"});a=a.replace(g,function(a,b,c){return"\x3c!--"+B+(b?"{C}":"")+encodeURIComponent(d[c]).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,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,c,e){return"\x3c"+d+c+"\x3e"+r(p(e),b)+"\x3c/"+d+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var d,c,g=this;this.editor=b;this.dataFilter=d=new CKEDITOR.htmlParser.filter;this.htmlFilter=c=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;d.addRules(D);d.addRules(z,{applyToAll:!0});d.addRules(e(b,"data"),
 {applyToAll:!0});c.addRules(J);c.addRules(E,{applyToAll:!0});c.addRules(e(b,"html"),{applyToAll:!0});b.on("toHtml",function(d){d=d.data;var c=d.dataValue,e,c=c.replace(S,""),c=v(c,b),c=a(c,I),c=m(c),c=a(c,L),c=c.replace(O,"$1cke:$2"),c=c.replace(K,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");e=d.context||b.editable().getName();var g;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==
 e&&(e="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",g=1);e=b.document.createElement(e);e.setHtml("a"+c);c=e.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");g&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(P,"$1$2");c=n(c);c=p(c);e=!1===d.fixForBody?!1:f(d.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,d.context,e);e&&(g=c,!g.children.length&&CKEDITOR.dtd[g.name][e]&&(e=new CKEDITOR.htmlParser.element(e),g.add(e)));d.dataValue=c},null,null,
-5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(g.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,d=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(d);b=d.getHtml(!0);a.dataValue=w(b)},null,null,15);b.on("toDataFormat",function(a){var d=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(d=d.replace(/^<br *\/?>/i,
+5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(g.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,d=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(d);b=d.getHtml(!0);a.dataValue=x(b)},null,null,15);b.on("toDataFormat",function(a){var d=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(d=d.replace(/^<br *\/?>/i,
 ""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(d,a.data.context,f(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(g.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,!1,!0)},null,null,11);b.on("toDataFormat",function(a){var d=a.data.dataValue,c=g.writer;c.reset();d.writeChildrenHtml(c);d=c.getHtml(!0);d=p(d);d=r(d,b);a.data.dataValue=d},null,null,15)};CKEDITOR.htmlDataProcessor.prototype=
 {toHtml:function(a,b,d,c){var e=this.editor,g,f,h,m;b&&"object"==typeof b?(g=b.context,d=b.fixForBody,c=b.dontFilter,f=b.filter,h=b.enterMode,m=b.protectedWhitespaces):g=b;g||null===g||(g=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:g,fixForBody:d,dontFilter:c,filter:f||e.filter,enterMode:h||e.enterMode,protectedWhitespaces:m}).dataValue},toDataFormat:function(a,b){var d,c,e;b&&(d=b.context,c=b.filter,e=b.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat",
-{dataValue:a,filter:c||this.editor.filter,context:d,enterMode:e||this.editor.enterMode}).dataValue}};var q=/(?:&nbsp;|\xa0)$/,B="{cke_protected}",x=CKEDITOR.dtd,y="caption colgroup col thead tfoot tbody".split(" "),A=CKEDITOR.tools.extend({},x.$blockLimit,x.$block),D={elements:{input:d,textarea:d}},z={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 b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,
+{dataValue:a,filter:c||this.editor.filter,context:d,enterMode:e||this.editor.enterMode}).dataValue}};var q=/(?:&nbsp;|\xa0)$/,B="{cke_protected}",w=CKEDITOR.dtd,y="caption colgroup col thead tfoot tbody".split(" "),A=CKEDITOR.tools.extend({},w.$blockLimit,w.$block),D={elements:{input:d,textarea:d}},z={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 b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,
 "");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},J={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var d=b.attributes.width,b=b.attributes.height;d&&(a.attributes.width=d);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.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 b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var d=["name","href","src"],c,e=0;e<d.length;e++)c="data-cke-saved-"+d[e],c in b&&delete b[d[e]]}return a},table:function(a){a.children.slice(0).sort(function(a,b){var d,c;a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type&&(d=CKEDITOR.tools.indexOf(y,a.name),c=CKEDITOR.tools.indexOf(y,b.name));-1<d&&-1<c&&d!=c||(d=a.parent?a.getIndex():-1,c=b.parent?b.getIndex():-1);return d>c?
 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 b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&k(a,b=new CKEDITOR.htmlParser.text);
@@ -328,8 +328,8 @@ k=[],d=this.attributes,g,m;c.openTag(e,d);for(g in d)k.push([g,d[g]]);c.sortAttr
 this.children.length-c),e=this.clone(),f=0;f<b.length;++f)b[f].parent=e;e.children=b;b[0]&&(b[0].previous=null);0<c&&(this.children[c-1].next=null);this.parent.add(e,this.getIndex()+1);return e},find:function(c,b){void 0===b&&(b=!1);var e=[],f;for(f=0;f<this.children.length;f++){var d=this.children[f];"function"==typeof c&&c(d)?e.push(d):"string"==typeof c&&d.name===c&&e.push(d);b&&d.find&&(e=e.concat(d.find(c,b)))}return e},addClass:function(c){if(!this.hasClass(c)){var b=this.attributes["class"]||
 "";this.attributes["class"]=b+(b?" ":"")+c}},removeClass:function(c){var b=this.attributes["class"];b&&((b=CKEDITOR.tools.trim(b.replace(new RegExp("(?:\\s+|^)"+c+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"])},hasClass:function(c){var b=this.attributes["class"];return b?(new RegExp("(?:^|\\s)"+c+"(?\x3d\\s|$)")).test(b):!1},getFilterContext:function(c){var b=[];c||(c={nonEditable:!1,nestedEditable:!1});c.nonEditable||"false"!=this.attributes.contenteditable?c.nonEditable&&
 !c.nestedEditable&&"true"==this.attributes.contenteditable&&b.push("nestedEditable",!0):b.push("nonEditable",!0);if(b.length){c=CKEDITOR.tools.copy(c);for(var e=0;e<b.length;e+=2)c[b[e]]=b[e+1]}return c}},!0)}(),function(){var e=/{([^}]+)}/g;CKEDITOR.template=function(e){this.source=String(e)};CKEDITOR.template.prototype.output=function(f,c){var h=this.source.replace(e,function(b,c){return void 0!==f[c]?f[c]:b});return c?c.push(h):h}}(),delete CKEDITOR.loadFullCore,CKEDITOR.instances={},CKEDITOR.document=
-new CKEDITOR.dom.document(document),CKEDITOR.add=function(e){CKEDITOR.instances[e.name]=e;e.on("focus",function(){CKEDITOR.currentInstance!=e&&(CKEDITOR.currentInstance=e,CKEDITOR.fire("currentInstance"))});e.on("blur",function(){CKEDITOR.currentInstance==e&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))});CKEDITOR.fire("instance",null,e)},CKEDITOR.remove=function(e){delete CKEDITOR.instances[e.name]},function(){var e={};CKEDITOR.addTemplate=function(f,c){var h=e[f];if(h)return h;
-h={name:f,source:c};CKEDITOR.fire("template",h);return e[f]=new CKEDITOR.template(h.source)};CKEDITOR.getTemplate=function(f){return e[f]}}(),function(){var e=[];CKEDITOR.addCss=function(f){e.push(f)};CKEDITOR.getCss=function(){return e.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(e,f){if(!CKEDITOR.env.isCompatible)return null;
+new CKEDITOR.dom.document(document),CKEDITOR.add=function(e){function f(){CKEDITOR.currentInstance==e&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))}CKEDITOR.instances[e.name]=e;e.on("focus",function(){CKEDITOR.currentInstance!=e&&(CKEDITOR.currentInstance=e,CKEDITOR.fire("currentInstance"))});e.on("blur",f);e.on("destroy",f);CKEDITOR.fire("instance",null,e)},CKEDITOR.remove=function(e){delete CKEDITOR.instances[e.name]},function(){var e={};CKEDITOR.addTemplate=function(f,c){var h=
+e[f];if(h)return h;h={name:f,source:c};CKEDITOR.fire("template",h);return e[f]=new CKEDITOR.template(h.source)};CKEDITOR.getTemplate=function(f){return e[f]}}(),function(){var e=[];CKEDITOR.addCss=function(f){e.push(f)};CKEDITOR.getCss=function(){return e.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(e,f){if(!CKEDITOR.env.isCompatible)return null;
 e=CKEDITOR.dom.element.get(e);if(e.getEditor())throw'The editor instance "'+e.getEditor().name+'" is already attached to the provided element.';var c=new CKEDITOR.editor(f,e,CKEDITOR.ELEMENT_MODE_INLINE),h=e.is("textarea")?e:null;h?(c.setData(h.getValue(),null,!0),e=CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"'+!!c.readOnly+'" class\x3d"cke_textarea_inline"\x3e'+h.getValue()+"\x3c/div\x3e",CKEDITOR.document),e.insertAfter(h),h.hide(),h.$.form&&c._attachToForm()):c.setData(e.getHtml(),
 null,!0);c.on("loaded",function(){c.fire("uiReady");c.editable(e);c.container=e;c.ui.contentsElement=e;c.setData(c.getData(1));c.resetDirty();c.fire("contentDom");c.mode="wysiwyg";c.fire("mode");c.status="ready";c.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,c)},null,null,1E4);c.on("destroy",function(){h&&(c.container.clearCustomData(),c.container.remove(),h.show());c.element.clearCustomData();delete c.element});return c};CKEDITOR.inlineAll=function(){var e,f,c;for(c in CKEDITOR.dtd.$editable)for(var h=
 CKEDITOR.document.getElementsByTag(c),b=0,l=h.count();b<l;b++)e=h.getItem(b),"true"==e.getAttribute("contenteditable")&&(f={element:e,config:{}},!1!==CKEDITOR.fire("inline",f)&&CKEDITOR.inline(e,f.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})}(),CKEDITOR.replaceClass="ckeditor",function(){function e(e,b,l,k){if(!CKEDITOR.env.isCompatible)return null;e=CKEDITOR.dom.element.get(e);if(e.getEditor())throw'The editor instance "'+e.getEditor().name+'" is already attached to the provided element.';
@@ -346,7 +346,7 @@ g=e.getRanges()[0],m;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsB
 (b=b.getFirst(h))&&b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/)&&b.remove(),m=1,a.cancel());m&&g.select()}function f(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,c=d&&d.getLast(h);if(!(!d||!d.isBlockBoundary()||c&&c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()||d.is("pre")||d.getBogus()))return d}function c(a){var b=a.data.getTarget();b.is("input")&&(b=b.getAttribute("type"),"submit"!=b&&"reset"!=b||a.data.preventDefault())}function h(b){return a(b)&&
 n(b)}function b(a,b){return function(d){var c=d.data.$.toElement||d.data.$.fromElement||d.data.$.relatedTarget;(c=c&&c.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(c):null)&&(b.equals(c)||b.contains(c))||a.call(this,d)}}function l(a){function b(a){return function(b,c){c&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(e)&&(d=b);if(!(c||!h(b)||a&&u(b)))return!1}}var d,c=a.getRanges()[0];a=a.root;var e={table:1,ul:1,ol:1,dl:1};if(c.startPath().contains(e)){var g=c.clone();g.collapse(1);g.setStartAt(a,
 CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(g);a.guard=b();a.checkBackward();if(d)return g=c.clone(),g.collapse(),g.setEndAt(d,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(g),a.guard=b(!0),d=!1,a.checkForward(),d}return null}function k(a,b,d){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(d)&&!b||b&&"true"==b.getAttribute("contenteditable"))}function d(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?
-a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function g(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function m(a,b,d){var c=a.getCommonAncestor(b);for(b=a=d?b:a;(a=a.getParent())&&!c.equals(a)&&1==a.getChildCount();)b=a;b.remove()}var a,n,w,u,t,p,r,v,q,B;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;
+a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function g(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function m(a,b,d){var c=a.getCommonAncestor(b);for(b=a=d?b:a;(a=a.getParent())&&!c.equals(a)&&1==a.getChildCount();)b=a;b.remove()}var a,n,x,u,t,p,r,v,q,B;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);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 b=this.$.scrollTop;this.$.focus();this.$.scrollTop=b}else this.$.focus();
 else this.$.setActive()}catch(d){if(!CKEDITOR.env.ie)throw d;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(a,d){var c=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(a)&&(a="focus"==a?"focusin":"focusout",d=b(d,this),c[0]=a,c[1]=d);return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,
 1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,d;for(d in a)a.hasOwnProperty(d)&&(b=a[d],null!==b?this.setAttribute(d,b):this.removeAttribute(d))},attachClass:function(a){var b=this.getCustomData("classes");this.hasClass(a)||(!b&&(b=[]),b.push(a),this.setCustomData("classes",b),this.addClass(a))},changeAttr:function(a,b){var d=this.getAttribute(a);
@@ -359,7 +359,7 @@ fixInitialSelection:function(){function a(){var b=d.getDocument().$,c=b.getSelec
 c.type&&e.equals(d)&&(c=new CKEDITOR.dom.range(d),a=a.body.createTextRange(),c.moveToElementEditStart(d),c=c.startContainer,c.type!=CKEDITOR.NODE_ELEMENT&&(c=c.getParent()),a.moveToElementText(c.$),a.collapse(!0),a.select())}var d=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());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()};q.eol.detect(a,this);q.bogus.exclude(a);q.cell.shrink(a);a.fragment=a.range.cloneContents();q.tree.rebuild(a,this);q.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var d=B,c={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);d.table.detectPurge(c);c.bookmark=a.createBookmark();delete c.range;var g=this.editor.createRange();
 g.moveToPosition(c.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);c.targetBookmark=g.createBookmark();d.list.detectMerge(c,this);d.table.detectRanges(c,this);d.block.detectMerge(c,this);c.tableContentsRanges?(d.table.deleteRanges(c),a.moveToBookmark(c.bookmark),c.range=a):(a.moveToBookmark(c.bookmark),c.range=a,a.extractContents(d.detectExtractMerge(c)));a.moveToBookmark(c.targetBookmark);a.optimize();d.fixUneditableRangePosition(a);d.list.merge(c,this);d.table.purge(c,this);d.block.merge(c,this);
-if(b){d=a.startPath();if(c=a.checkStartOfBlock()&&a.checkEndOfBlock()&&d.block&&!a.root.equals(d.block)){a:{var c=d.block.getElementsByTag("span"),g=0,f;if(c)for(;f=c.getItem(g++);)if(!n(f)){c=!0;break a}c=!1}c=!c}c&&(a.moveToPosition(d.block,CKEDITOR.POSITION_BEFORE_START),d.block.remove())}else d.autoParagraph(this.editor,a),w(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return e},setup:function(){var b=this.editor;this.attachListener(b,"beforeGetData",function(){var a=
+if(b){d=a.startPath();if(c=a.checkStartOfBlock()&&a.checkEndOfBlock()&&d.block&&!a.root.equals(d.block)){a:{var c=d.block.getElementsByTag("span"),g=0,f;if(c)for(;f=c.getItem(g++);)if(!n(f)){c=!0;break a}c=!1}c=!c}c&&(a.moveToPosition(d.block,CKEDITOR.POSITION_BEFORE_START),d.block.remove())}else d.autoParagraph(this.editor,a),x(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return e},setup:function(){var b=this.editor;this.attachListener(b,"beforeGetData",function(){var a=
 this.getData();this.is("textarea")||!1!==b.config.ignoreEmptyParagraph&&(a=a.replace(t,function(a,b){return b}));b.setData(a,null,1)},this);this.attachListener(b,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(b,"afterSetData",function(){this.setData(b.getData(1))},this);this.attachListener(b,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(b,"beforeFocus",function(){var a=b.getSelection();(a=a&&a.getNative())&&"Control"==a.type||this.focus()},
 this);this.attachListener(b,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(b,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(b,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(b.readOnly);this.attachClass("cke_editable");b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):b.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&b.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||
 this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+b.config.contentsLangDirection);b.keystrokeHandler.blockedKeystrokes[8]=+b.readOnly;b.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(){b._.previousScrollTop=b.editable().$.scrollTop},null,null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var d=function(){var a=b.editable();
@@ -377,20 +377,20 @@ b.fire("saveSnapshot");return!1}},this,null,100)}}},_:{detach:function(){this.ed
 delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on("instanceLoaded",function(a){var b=a.editor;b.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))});b.on("selectionChange",function(a){if(!b.readOnly){var d=b.getSelection();d&&!d.isLocked&&(d=b.checkDirty(),b.fire("lockSnapshot"),e(a),b.fire("unlockSnapshot"),!d&&b.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var d=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-multiline","true");a.changeAttr("aria-label",d);d&&a.changeAttr("title",d);var c=
 b.fire("ariaEditorHelpLabel",{}).label;if(c&&(d=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var e=CKEDITOR.tools.getNextId(),c=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+e+'" class\x3d"cke_voice_label"\x3e'+c+"\x3c/span\x3e");d.append(c);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");a=CKEDITOR.dom.walker.whitespaces(!0);n=CKEDITOR.dom.walker.bookmark(!1,
-!0);w=CKEDITOR.dom.walker.empty();u=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;p=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(d,c){var e,g,f,m,h=[],k=c.range.startContainer;e=c.range.startPath();for(var k=n[k.getName()],l=0,r=d.getChildren(),w=r.count(),p=-1,q=-1,A=0,E=e.contains(n.$list);l<w;++l)e=r.getItem(l),a(e)?(f=e.getName(),E&&f in CKEDITOR.dtd.$list?
-h=h.concat(b(e,c)):(m=!!k[f],"br"!=f||!e.data("cke-eol")||l&&l!=w-1||(A=(g=l?h[l-1].node:r.getItem(l+1))&&(!a(g)||!g.is("br")),g=g&&a(g)&&n.$block[g.getName()]),-1!=p||m||(p=l),m||(q=l),h.push({isElement:1,isLineBreak:A,isBlock:e.isBlockBoundary(),hasBlockSibling:g,node:e,name:f,allowed:m}),g=A=0)):h.push({isElement:0,node:e,allowed:1});-1<p&&(h[p].firstNotAllowed=1);-1<q&&(h[q].lastNotAllowed=1);return h}function c(b,d){var e=[],g=b.getChildren(),f=g.count(),m,h=0,k=n[d],l=!b.is(n.$inline)||b.is("br");
+!0);x=CKEDITOR.dom.walker.empty();u=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;p=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(d,c){var e,g,f,m,h=[],k=c.range.startContainer;e=c.range.startPath();for(var k=n[k.getName()],l=0,r=d.getChildren(),x=r.count(),p=-1,q=-1,A=0,E=e.contains(n.$list);l<x;++l)e=r.getItem(l),a(e)?(f=e.getName(),E&&f in CKEDITOR.dtd.$list?
+h=h.concat(b(e,c)):(m=!!k[f],"br"!=f||!e.data("cke-eol")||l&&l!=x-1||(A=(g=l?h[l-1].node:r.getItem(l+1))&&(!a(g)||!g.is("br")),g=g&&a(g)&&n.$block[g.getName()]),-1!=p||m||(p=l),m||(q=l),h.push({isElement:1,isLineBreak:A,isBlock:e.isBlockBoundary(),hasBlockSibling:g,node:e,name:f,allowed:m}),g=A=0)):h.push({isElement:0,node:e,allowed:1});-1<p&&(h[p].firstNotAllowed=1);-1<q&&(h[q].lastNotAllowed=1);return h}function c(b,d){var e=[],g=b.getChildren(),f=g.count(),m,h=0,k=n[d],l=!b.is(n.$inline)||b.is("br");
 for(l&&e.push(" ");h<f;h++)m=g.getItem(h),a(m)&&!m.is(k)?e=e.concat(c(m,d)):e.push(m);l&&e.push(" ");return e}function e(b){return a(b.startContainer)&&b.startContainer.getChild(b.startOffset-1)}function g(b){return b&&a(b)&&(b.is(n.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,d,c,e){var g=b.clone(),m,h;g.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);(m=(new CKEDITOR.dom.walker(g)).next())&&a(m)&&l[m.getName()]&&(h=m.getPrevious())&&a(h)&&!h.getParent().equals(b.startContainer)&&c.contains(h)&&
 e.contains(m)&&m.isIdentical(h)&&(m.moveChildren(h),m.remove(),f(b,d,c,e))}function m(b,d){function c(b,d){if(d.isBlock&&d.isElement&&!d.node.is("br")&&a(b)&&b.is("br"))return b.remove(),1}var e=d.endContainer.getChild(d.endOffset),g=d.endContainer.getChild(d.endOffset-1);e&&c(e,b[b.length-1]);g&&c(g,b[0])&&(d.setEnd(d.endContainer,d.endOffset-1),d.collapse())}var n=CKEDITOR.dtd,l={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},r={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,
-h6:1},w=CKEDITOR.tools.extend({},n.$inline);delete w.br;return function(l,C,p,q){var v=l.editor,t=!1;"unfiltered_html"==C&&(C="html",t=!0);if(!q.checkReadOnly()){var F=(new CKEDITOR.dom.elementPath(q.startContainer,q.root)).blockLimit||q.root;l={type:C,dontFilter:t,editable:l,editor:v,range:q,blockLimit:F,mergeCandidates:[],zombies:[]};C=l.range;q=l.mergeCandidates;var u,B;"text"==l.type&&C.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(u=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",
-C.document),C.insertNode(u),C.setStartAfter(u));t=new CKEDITOR.dom.elementPath(C.startContainer);l.endPath=F=new CKEDITOR.dom.elementPath(C.endContainer);if(!C.collapsed){var v=F.block||F.blockLimit,Z=C.getCommonAncestor();v&&!v.equals(Z)&&!v.contains(Z)&&C.checkEndOfBlock()&&l.zombies.push(v);C.deleteContents()}for(;(B=e(C))&&a(B)&&B.isBlockBoundary()&&t.contains(B);)C.moveToPosition(B,CKEDITOR.POSITION_BEFORE_END);f(C,l.blockLimit,t,F);u&&(C.setEndBefore(u),C.collapse(),u.remove());u=C.startPath();
-if(v=u.contains(g,!1,1))C.splitElement(v),l.inlineStylesRoot=v,l.inlineStylesPeak=u.lastElement;u=C.createBookmark();(v=u.startNode.getPrevious(h))&&a(v)&&g(v)&&q.push(v);(v=u.startNode.getNext(h))&&a(v)&&g(v)&&q.push(v);for(v=u.startNode;(v=v.getParent())&&g(v);)q.push(v);C.moveToBookmark(u);if(u=p){u=l.range;if("text"==l.type&&l.inlineStylesRoot){B=l.inlineStylesPeak;C=B.getDocument().createText("{cke-peak}");for(q=l.inlineStylesRoot.getParent();!B.equals(q);)C=C.appendTo(B.clone()),B=B.getParent();
-p=C.getOuterHtml().split("{cke-peak}").join(p)}B=l.blockLimit.getName();if(/^\s+|\s+$/.test(p)&&"span"in CKEDITOR.dtd[B]){var M='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';p=M+p+M}p=l.editor.dataProcessor.toHtml(p,{context:null,fixForBody:!1,protectedWhitespaces:!!M,dontFilter:l.dontFilter,filter:l.editor.activeFilter,enterMode:l.editor.activeEnterMode});B=u.document.createElement("body");B.setHtml(p);M&&(B.getFirst().remove(),B.getLast().remove());if((M=u.startPath().block)&&(1!=
-M.getChildCount()||!M.getBogus()))a:{var R;if(1==B.getChildCount()&&a(R=B.getFirst())&&R.is(r)&&!R.hasAttribute("contenteditable")){M=R.getElementsByTag("*");u=0;for(q=M.count();u<q;u++)if(C=M.getItem(u),!C.is(w))break a;R.moveChildren(R.getParent(1));R.remove()}}l.dataWrapper=B;u=p}if(u){R=l.range;u=R.document;var N;B=l.blockLimit;q=0;var W,M=[],U,Q;p=v=0;var X,ba;C=R.startContainer;var t=l.endPath.elements[0],ca,F=t.getPosition(C),Z=!!t.getCommonAncestor(C)&&F!=CKEDITOR.POSITION_IDENTICAL&&!(F&
-CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);C=b(l.dataWrapper,l);for(m(C,R);q<C.length;q++){F=C[q];if(N=F.isLineBreak){N=R;X=B;var aa=void 0,da=void 0;F.hasBlockSibling?N=1:(aa=N.startContainer.getAscendant(n.$block,1))&&aa.is({div:1,p:1})?(da=aa.getPosition(X),da==CKEDITOR.POSITION_IDENTICAL||da==CKEDITOR.POSITION_CONTAINS?N=0:(X=N.splitElement(aa),N.moveToPosition(X,CKEDITOR.POSITION_AFTER_START),N=1)):N=0}if(N)p=0<q;else{N=R.startPath();!F.isBlock&&k(l.editor,N.block,N.blockLimit)&&
-(Q=d(l.editor))&&(Q=u.createElement(Q),Q.appendBogus(),R.insertNode(Q),CKEDITOR.env.needsBrFiller&&(W=Q.getBogus())&&W.remove(),R.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END));if((N=R.startPath().block)&&!N.equals(U)){if(W=N.getBogus())W.remove(),M.push(N);U=N}F.firstNotAllowed&&(v=1);if(v&&F.isElement){N=R.startContainer;for(X=null;N&&!n[N.getName()][F.name];){if(N.equals(B)){N=null;break}X=N;N=N.getParent()}if(N)X&&(ba=R.splitElement(X),l.zombies.push(ba),l.zombies.push(X));else{X=B.getName();
-ca=!q;N=q==C.length-1;X=c(F.node,X);for(var aa=[],da=X.length,ea=0,ha=void 0,ia=0,fa=-1;ea<da;ea++)ha=X[ea]," "==ha?(ia||ca&&!ea||(aa.push(new CKEDITOR.dom.text(" ")),fa=aa.length),ia=1):(aa.push(ha),ia=0);N&&fa==aa.length&&aa.pop();ca=aa}}if(ca){for(;N=ca.pop();)R.insertNode(N);ca=0}else R.insertNode(F.node);F.lastNotAllowed&&q<C.length-1&&((ba=Z?t:ba)&&R.setEndAt(ba,CKEDITOR.POSITION_AFTER_START),v=0);R.collapse()}}1!=C.length?W=!1:(W=C[0],W=W.isElement&&"false"==W.node.getAttribute("contenteditable"));
-W&&(p=!0,N=C[0].node,R.setStartAt(N,CKEDITOR.POSITION_BEFORE_START),R.setEndAt(N,CKEDITOR.POSITION_AFTER_END));l.dontMoveCaret=p;l.bogusNeededBlocks=M}W=l.range;var ga;ba=l.bogusNeededBlocks;for(ca=W.createBookmark();U=l.zombies.pop();)U.getParent()&&(Q=W.clone(),Q.moveToElementEditStart(U),Q.removeEmptyBlocksAtEnd());if(ba)for(;U=ba.pop();)CKEDITOR.env.needsBrFiller?U.appendBogus():U.append(W.document.createText(" "));for(;U=l.mergeCandidates.pop();)U.mergeSiblings();W.moveToBookmark(ca);if(!l.dontMoveCaret){for(U=
-e(W);U&&a(U)&&!U.is(n.$empty);){if(U.isBlockBoundary())W.moveToPosition(U,CKEDITOR.POSITION_BEFORE_END);else{if(g(U)&&U.getHtml().match(/(\s|&nbsp;)$/g)){ga=null;break}ga=W.clone();ga.moveToPosition(U,CKEDITOR.POSITION_BEFORE_END)}U=U.getLast(h)}ga&&W.moveToRange(ga)}}}}();r=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};
+h6:1},x=CKEDITOR.tools.extend({},n.$inline);delete x.br;return function(l,C,p,q){var v=l.editor,t=!1;"unfiltered_html"==C&&(C="html",t=!0);if(!q.checkReadOnly()){var u=(new CKEDITOR.dom.elementPath(q.startContainer,q.root)).blockLimit||q.root;l={type:C,dontFilter:t,editable:l,editor:v,range:q,blockLimit:u,mergeCandidates:[],zombies:[]};C=l.range;q=l.mergeCandidates;var F,B;"text"==l.type&&C.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(F=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",
+C.document),C.insertNode(F),C.setStartAfter(F));t=new CKEDITOR.dom.elementPath(C.startContainer);l.endPath=u=new CKEDITOR.dom.elementPath(C.endContainer);if(!C.collapsed){var v=u.block||u.blockLimit,Z=C.getCommonAncestor();v&&!v.equals(Z)&&!v.contains(Z)&&C.checkEndOfBlock()&&l.zombies.push(v);C.deleteContents()}for(;(B=e(C))&&a(B)&&B.isBlockBoundary()&&t.contains(B);)C.moveToPosition(B,CKEDITOR.POSITION_BEFORE_END);f(C,l.blockLimit,t,u);F&&(C.setEndBefore(F),C.collapse(),F.remove());F=C.startPath();
+if(v=F.contains(g,!1,1))C.splitElement(v),l.inlineStylesRoot=v,l.inlineStylesPeak=F.lastElement;F=C.createBookmark();(v=F.startNode.getPrevious(h))&&a(v)&&g(v)&&q.push(v);(v=F.startNode.getNext(h))&&a(v)&&g(v)&&q.push(v);for(v=F.startNode;(v=v.getParent())&&g(v);)q.push(v);C.moveToBookmark(F);if(F=p){F=l.range;if("text"==l.type&&l.inlineStylesRoot){B=l.inlineStylesPeak;C=B.getDocument().createText("{cke-peak}");for(q=l.inlineStylesRoot.getParent();!B.equals(q);)C=C.appendTo(B.clone()),B=B.getParent();
+p=C.getOuterHtml().split("{cke-peak}").join(p)}B=l.blockLimit.getName();if(/^\s+|\s+$/.test(p)&&"span"in CKEDITOR.dtd[B]){var M='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';p=M+p+M}p=l.editor.dataProcessor.toHtml(p,{context:null,fixForBody:!1,protectedWhitespaces:!!M,dontFilter:l.dontFilter,filter:l.editor.activeFilter,enterMode:l.editor.activeEnterMode});B=F.document.createElement("body");B.setHtml(p);M&&(B.getFirst().remove(),B.getLast().remove());if((M=F.startPath().block)&&(1!=
+M.getChildCount()||!M.getBogus()))a:{var R;if(1==B.getChildCount()&&a(R=B.getFirst())&&R.is(r)&&!R.hasAttribute("contenteditable")){M=R.getElementsByTag("*");F=0;for(q=M.count();F<q;F++)if(C=M.getItem(F),!C.is(x))break a;R.moveChildren(R.getParent(1));R.remove()}}l.dataWrapper=B;F=p}if(F){R=l.range;F=R.document;var N;B=l.blockLimit;q=0;var W,M=[],U,Q;p=v=0;var X,ca;C=R.startContainer;var t=l.endPath.elements[0],da,u=t.getPosition(C),Z=!!t.getCommonAncestor(C)&&u!=CKEDITOR.POSITION_IDENTICAL&&!(u&
+CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);C=b(l.dataWrapper,l);for(m(C,R);q<C.length;q++){u=C[q];if(N=u.isLineBreak){N=R;X=B;var ba=void 0,ea=void 0;u.hasBlockSibling?N=1:(ba=N.startContainer.getAscendant(n.$block,1))&&ba.is({div:1,p:1})?(ea=ba.getPosition(X),ea==CKEDITOR.POSITION_IDENTICAL||ea==CKEDITOR.POSITION_CONTAINS?N=0:(X=N.splitElement(ba),N.moveToPosition(X,CKEDITOR.POSITION_AFTER_START),N=1)):N=0}if(N)p=0<q;else{N=R.startPath();!u.isBlock&&k(l.editor,N.block,N.blockLimit)&&
+(Q=d(l.editor))&&(Q=F.createElement(Q),Q.appendBogus(),R.insertNode(Q),CKEDITOR.env.needsBrFiller&&(W=Q.getBogus())&&W.remove(),R.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END));if((N=R.startPath().block)&&!N.equals(U)){if(W=N.getBogus())W.remove(),M.push(N);U=N}u.firstNotAllowed&&(v=1);if(v&&u.isElement){N=R.startContainer;for(X=null;N&&!n[N.getName()][u.name];){if(N.equals(B)){N=null;break}X=N;N=N.getParent()}if(N)X&&(ca=R.splitElement(X),l.zombies.push(ca),l.zombies.push(X));else{X=B.getName();
+da=!q;N=q==C.length-1;X=c(u.node,X);for(var ba=[],ea=X.length,fa=0,ga=void 0,ha=0,ia=-1;fa<ea;fa++)ga=X[fa]," "==ga?(ha||da&&!fa||(ba.push(new CKEDITOR.dom.text(" ")),ia=ba.length),ha=1):(ba.push(ga),ha=0);N&&ia==ba.length&&ba.pop();da=ba}}if(da){for(;N=da.pop();)R.insertNode(N);da=0}else R.insertNode(u.node);u.lastNotAllowed&&q<C.length-1&&((ca=Z?t:ca)&&R.setEndAt(ca,CKEDITOR.POSITION_AFTER_START),v=0);R.collapse()}}1!=C.length?W=!1:(W=C[0],W=W.isElement&&"false"==W.node.getAttribute("contenteditable"));
+W&&(p=!0,N=C[0].node,R.setStartAt(N,CKEDITOR.POSITION_BEFORE_START),R.setEndAt(N,CKEDITOR.POSITION_AFTER_END));l.dontMoveCaret=p;l.bogusNeededBlocks=M}W=l.range;var aa;ca=l.bogusNeededBlocks;for(da=W.createBookmark();U=l.zombies.pop();)U.getParent()&&(Q=W.clone(),Q.moveToElementEditStart(U),Q.removeEmptyBlocksAtEnd());if(ca)for(;U=ca.pop();)CKEDITOR.env.needsBrFiller?U.appendBogus():U.append(W.document.createText(" "));for(;U=l.mergeCandidates.pop();)U.mergeSiblings();W.moveToBookmark(da);if(!l.dontMoveCaret){for(U=
+e(W);U&&a(U)&&!U.is(n.$empty);){if(U.isBlockBoundary())W.moveToPosition(U,CKEDITOR.POSITION_BEFORE_END);else{if(g(U)&&U.getHtml().match(/(\s|&nbsp;)$/g)){aa=null;break}aa=W.clone();aa.moveToPosition(U,CKEDITOR.POSITION_BEFORE_END)}U=U.getLast(h)}aa&&W.moveToRange(aa)}}}}();r=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};
 return b}function b(a,d,c){d=a.getDocument().createElement(d);a.append(d,c);return d}function d(a){var b=a.count(),c;for(b;0<b--;)c=a.getItem(b),CKEDITOR.tools.trim(c.getHtml())||(c.appendBogus(),CKEDITOR.env.ie&&9>CKEDITOR.env.version&&c.getChildCount()&&c.getFirst().remove())}return function(c){var e=c.startContainer,g=e.getAscendant("table",1),f=!1;d(g.getElementsByTag("td"));d(g.getElementsByTag("th"));g=c.clone();g.setStart(e,0);g=a(g).lastBackward();g||(g=c.clone(),g.setEndAt(e,CKEDITOR.POSITION_BEFORE_END),
 g=a(g).lastForward(),f=!0);g||(g=e);g.is("table")?(c.setStartAt(g,CKEDITOR.POSITION_BEFORE_START),c.collapse(!0),g.remove()):(g.is({tbody:1,thead:1,tfoot:1})&&(g=b(g,"tr",f)),g.is("tr")&&(g=b(g,g.getParent().is("thead")?"th":"td",f)),(e=g.getBogus())&&e.remove(),c.moveToPosition(g,f?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();v=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||
 a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var d=b.startContainer,c=!1,e;e=b.clone();e.setStart(d,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(d,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),c=!0);e||(e=d);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((d=e.getBogus())&&d.remove(),b.moveToPosition(e,c?CKEDITOR.POSITION_AFTER_START:
@@ -398,58 +398,58 @@ CKEDITOR.POSITION_BEFORE_END),b.select())}}();q={eol:{detect:function(a,b){var d
 this.createEolBr(d),a.fragment.append(c));!a.prependEolBr||c&&!c.getPrevious()||a.fragment.append(this.createEolBr(d),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),d=b.startNode,b=b.endNode;!b||!u(b)||d&&d.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var d=a.range,c=d.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(c,b),g=new CKEDITOR.dom.elementPath(d.startContainer,b),
 d=new CKEDITOR.dom.elementPath(d.endContainer,b),f;c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());if(e.blockLimit.is({tr:1,table:1})){var m=e.contains("table").getParent();f=function(a){return!a.equals(m)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(g=g.contains(CKEDITOR.dtd.$list),d=d.contains(CKEDITOR.dtd.$list),!g.equals(d))){var h=e.contains(CKEDITOR.dtd.$list).getParent();f=function(a){return!a.equals(h)}}f||(f=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,
 b,c,f)},rebuildFragment:function(a,b,d,c){for(var e;d&&!d.equals(b)&&c(d);)e=d.clone(0,1),a.fragment.appendTo(e),a.fragment=e,d=d.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,d=a.endContainer,c=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(d)&&b.is("tr")&&++c==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};B=function(){function a(b,d){var c=b.getParent();if(c.is(CKEDITOR.dtd.$inline))b[d?"insertBefore":"insertAfter"](c)}function b(d,c,e){a(c);a(e,1);for(var g;g=
-e.getNext();)g.insertAfter(c),c=g;w(d)&&d.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode);d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),g=d.endPath(),f=e.contains(CKEDITOR.dtd.$list),m=g.contains(CKEDITOR.dtd.$list);a.mergeList=f&&m&&f.getParent().equals(m.getParent())&&!f.equals(m);a.mergeListItems=e.block&&g.block&&e.block.is(CKEDITOR.dtd.$listItem)&&g.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||
+e.getNext();)g.insertAfter(c),c=g;x(d)&&d.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode);d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),g=d.endPath(),f=e.contains(CKEDITOR.dtd.$list),m=g.contains(CKEDITOR.dtd.$list);a.mergeList=f&&m&&f.getParent().equals(m.getParent())&&!f.equals(m);a.mergeListItems=e.block&&g.block&&e.block.is(CKEDITOR.dtd.$listItem)&&g.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,d){if(a.mergeListBookmark){var c=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,g=new CKEDITOR.dom.elementPath(c,d),f=new CKEDITOR.dom.elementPath(e,d);if(a.mergeList){var m=g.contains(CKEDITOR.dtd.$list),h=f.contains(CKEDITOR.dtd.$list);m.equals(h)||(h.moveChildren(m),h.remove())}a.mergeListItems&&(g=g.contains(CKEDITOR.dtd.$listItem),
 f=f.contains(CKEDITOR.dtd.$listItem),g.equals(f)||b(f,c,e));c.remove();e.remove()}}},block:{detectMerge:function(a,b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var d=new CKEDITOR.dom.range(b);d.setStartBefore(a.bookmark.startNode);d.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=d.createBookmark()}},merge:function(a,d){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var c=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,g=new CKEDITOR.dom.elementPath(c,d),f=new CKEDITOR.dom.elementPath(e,
 d),g=g.block,f=f.block;g&&f&&!g.equals(f)&&b(f,c,e);c.remove();e.remove()}}},table:function(){function a(c){var e=[],g,f=new CKEDITOR.dom.walker(c),m=c.startPath().contains(d),h=c.endPath().contains(d),k={};f.guard=function(a,f){if(a.type==CKEDITOR.NODE_ELEMENT){var n="visited_"+(f?"out":"in");if(a.getCustomData(n))return;CKEDITOR.dom.element.setMarker(k,a,n,1)}if(f&&m&&a.equals(m))g=c.clone(),g.setEndAt(m,CKEDITOR.POSITION_BEFORE_END),e.push(g);else if(!f&&h&&a.equals(h))g=c.clone(),g.setStartAt(h,
 CKEDITOR.POSITION_AFTER_START),e.push(g);else{if(n=!f)n=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!m||b(a,m))&&(!h||b(a,h));if(!n&&(n=f))if(a.is(d))var n=m&&m.getAscendant("table",!0),l=h&&h.getAscendant("table",!0),r=a.getAscendant("table",!0),n=n&&n.contains(r)||l&&l.contains(r);else n=void 0;n&&(g=c.clone(),g.selectNodeContents(a),e.push(g))}};f.lastForward();CKEDITOR.dom.element.clearAllMarkers(k);return e}function b(a,d){var c=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(d);
 return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&c)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e};c.checkForward();if(1<e){var c=b.startPath().contains("table"),g=b.endPath().contains("table");c&&g&&b.checkBoundaryOfElement(c,CKEDITOR.START)&&b.checkBoundaryOfElement(g,CKEDITOR.END)&&(b=a.range.clone(),b.setStartBefore(c),
 b.setEndAfter(g),a.purgeTableBookmark=b.createBookmark())}},detectRanges:function(e,g){var f=c(g,e.bookmark),m=f.clone(),h,k,n=f.getCommonAncestor();n.is(CKEDITOR.dtd.$tableContent)&&!n.is(d)&&(n=n.getAscendant("table",!0));k=n;n=new CKEDITOR.dom.elementPath(f.startContainer,k);k=new CKEDITOR.dom.elementPath(f.endContainer,k);n=n.contains("table");k=k.contains("table");if(n||k)n&&k&&b(n,k)?(e.tableSurroundingRange=m,m.setStartAt(n,CKEDITOR.POSITION_AFTER_END),m.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),
-m=f.clone(),m.setEndAt(n,CKEDITOR.POSITION_AFTER_END),h=f.clone(),h.setStartAt(k,CKEDITOR.POSITION_BEFORE_START),h=a(m).concat(a(h))):n?k||(e.tableSurroundingRange=m,m.setStartAt(n,CKEDITOR.POSITION_AFTER_END),f.setEndAt(n,CKEDITOR.POSITION_AFTER_END)):(e.tableSurroundingRange=m,m.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(k,CKEDITOR.POSITION_AFTER_START)),e.tableContentsRanges=h?h:a(f)},deleteRanges:function(a){for(var b;b=a.tableContentsRanges.pop();)b.extractContents(),w(b.startContainer)&&
+m=f.clone(),m.setEndAt(n,CKEDITOR.POSITION_AFTER_END),h=f.clone(),h.setStartAt(k,CKEDITOR.POSITION_BEFORE_START),h=a(m).concat(a(h))):n?k||(e.tableSurroundingRange=m,m.setStartAt(n,CKEDITOR.POSITION_AFTER_END),f.setEndAt(n,CKEDITOR.POSITION_AFTER_END)):(e.tableSurroundingRange=m,m.setEndAt(k,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(k,CKEDITOR.POSITION_AFTER_START)),e.tableContentsRanges=h?h:a(f)},deleteRanges:function(a){for(var b;b=a.tableContentsRanges.pop();)b.extractContents(),x(b.startContainer)&&
 b.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var b=a.doc,d=a.range.clone(),b=b.createElement("p");b.insertBefore(a.purgeTableBookmark.startNode);d.moveToBookmark(a.purgeTableBookmark);d.deleteContents();a.range.moveToPosition(b,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,b){var c=b.startPath(),e;k(a,c.block,c.blockLimit)&&(e=d(a))&&(e=b.document.createElement(e),e.appendBogus(),b.insertNode(e),b.moveToPosition(e,CKEDITOR.POSITION_AFTER_START))}}}()}(),function(){function e(a){return CKEDITOR.plugins.widget&&CKEDITOR.plugins.widget.isDomWidget(a)}function f(a,b){if(0===a.length||e(a[0].getEnclosedNode()))return!1;var d,c;if((d=!b&&
 1===a.length)&&!(d=a[0].collapsed)){var g=a[0];d=g.startContainer.getAscendant({td:1,th:1},!0);var f=g.endContainer.getAscendant({td:1,th:1},!0);c=CKEDITOR.tools.trim;d&&d.equals(f)&&!d.findOne("td, th, tr, tbody, table")?(g=g.cloneContents(),d=g.getFirst()?c(g.getFirst().getText())!==c(d.getText()):!0):d=!1}if(d)return!1;for(c=0;c<a.length;c++)if(d=a[c]._getTableElement(),!d)return!1;return!0}function c(a){function b(a){a=a.find("td, th");var d=[],c;for(c=0;c<a.count();c++)d.push(a.getItem(c));return d}
-var d=[],c,e;for(e=0;e<a.length;e++)c=a[e]._getTableElement(),c.is&&c.is({td:1,th:1})?d.push(c):d=d.concat(b(c));return d}function h(a){a=c(a);var b="",d=[],e,g;for(g=0;g<a.length;g++)e&&!e.equals(a[g].getAscendant("tr"))?(b+=d.join("\t")+"\n",e=a[g].getAscendant("tr"),d=[]):0===g&&(e=a[g].getAscendant("tr")),d.push(a[g].getText());return b+=d.join("\t")}function b(a){var b=this.root.editor,d=b.getSelection(1);this.reset();x=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null,0);d.selectRanges([a[0]]);
-d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=h(a);d.nativeSel=null;this.isFake=1;this.rev=v++;b._.fakeSelection=this;x=!1;this.root.fire("selectionchange")}function l(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);var d;if(!(d=!b)&&(d=!b.isHidden())){d=a;var c=b.getRanges(),g=d.getRanges(),m=c.length&&c[0]._getTableElement()&&c[0]._getTableElement().getAscendant("table",!0),h=g.length&&g[0]._getTableElement()&&
+var d=[],c,e;for(e=0;e<a.length;e++)c=a[e]._getTableElement(),c.is&&c.is({td:1,th:1})?d.push(c):d=d.concat(b(c));return d}function h(a){a=c(a);var b="",d=[],e,g;for(g=0;g<a.length;g++)e&&!e.equals(a[g].getAscendant("tr"))?(b+=d.join("\t")+"\n",e=a[g].getAscendant("tr"),d=[]):0===g&&(e=a[g].getAscendant("tr")),d.push(a[g].getText());return b+=d.join("\t")}function b(a){var b=this.root.editor,d=b.getSelection(1);this.reset();w=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null,0);d.selectRanges([a[0]]);
+d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=h(a);d.nativeSel=null;this.isFake=1;this.rev=v++;b._.fakeSelection=this;w=!1;this.root.fire("selectionchange")}function l(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);var d;if(!(d=!b)&&(d=!b.isHidden())){d=a;var c=b.getRanges(),g=d.getRanges(),m=c.length&&c[0]._getTableElement()&&c[0]._getTableElement().getAscendant("table",!0),h=g.length&&g[0]._getTableElement()&&
 g[0]._getTableElement().getAscendant("table",!0),k=1===c.length&&c[0]._getTableElement()&&c[0]._getTableElement().is("table"),n=1===g.length&&g[0]._getTableElement()&&g[0]._getTableElement().is("table");if(e(d.getSelectedElement()))d=!1;else{var l=1===c.length&&c[0].collapsed,g=f(c,!!CKEDITOR.env.webkit)&&f(g);m=m&&h?m.equals(h)||h.contains(m):!1;m&&(l||g)?(k&&!n&&d.selectRanges(c),d=!0):d=!1}d=!d}d&&(a.reset(),a=0)}if(!a&&(a=b||this.getSelection(1),!a||a.getType()==CKEDITOR.SELECTION_NONE))return;
 this.fire("selectionCheck",a);b=this.elementPath();b.compare(this._.selectionPreviousPath)||(d=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(b.blockLimit),!CKEDITOR.env.webkit&&!CKEDITOR.env.gecko||d||(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath=b,this.fire("selectionChange",{selection:a,path:b}))}function k(){A=!0;y||(d.call(this),y=CKEDITOR.tools.setTimeout(d,200,this))}function d(){y=null;A&&(CKEDITOR.tools.setTimeout(l,0,this),A=
 !1)}function g(a){return D(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function m(a){function b(d,c){return d&&d.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(c?"End":"Start")](d):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var d=a.startContainer,c=a.getPreviousNode(g,null,d),e=a.getNextNode(g,null,d);return b(c)||b(e,1)||!(c||e||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&d.getBogus())?!0:!1}function a(a){n(a,!1);var b=a.getDocument().createText(q);
-a.setCustomData("cke-fillingChar",b);return b}function n(a,b){var d=a&&a.removeCustomData("cke-fillingChar");if(d){if(!1!==b){var c=a.getDocument().getSelection().getNative(),e=c&&"None"!=c.type&&c.getRangeAt(0),g=q.length;if(d.getLength()>g&&e&&e.intersectsNode(d.$)){var f=[{node:c.anchorNode,offset:c.anchorOffset},{node:c.focusNode,offset:c.focusOffset}];c.anchorNode==d.$&&c.anchorOffset>g&&(f[0].offset-=g);c.focusNode==d.$&&c.focusOffset>g&&(f[1].offset-=g)}}d.setText(w(d.getText(),1));f&&(d=a.getDocument().$,
-c=d.getSelection(),d=d.createRange(),d.setStart(f[0].node,f[0].offset),d.collapse(!0),c.removeAllRanges(),c.addRange(d),c.extend(f[1].node,f[1].offset))}}function w(a,b){return b?a.replace(B,function(a,b){return b?" ":""}):a.replace(q,"")}function u(a,b){var d=b&&CKEDITOR.tools.htmlEncode(b)||"\x26nbsp;",d=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;")+
+a.setCustomData("cke-fillingChar",b);return b}function n(a,b){var d=a&&a.removeCustomData("cke-fillingChar");if(d){if(!1!==b){var c=a.getDocument().getSelection().getNative(),e=c&&"None"!=c.type&&c.getRangeAt(0),g=q.length;if(d.getLength()>g&&e&&e.intersectsNode(d.$)){var f=[{node:c.anchorNode,offset:c.anchorOffset},{node:c.focusNode,offset:c.focusOffset}];c.anchorNode==d.$&&c.anchorOffset>g&&(f[0].offset-=g);c.focusNode==d.$&&c.focusOffset>g&&(f[1].offset-=g)}}d.setText(x(d.getText(),1));f&&(d=a.getDocument().$,
+c=d.getSelection(),d=d.createRange(),d.setStart(f[0].node,f[0].offset),d.collapse(!0),c.removeAllRanges(),c.addRange(d),c.extend(f[1].node,f[1].offset))}}function x(a,b){return b?a.replace(B,function(a,b){return b?" ":""}):a.replace(q,"")}function u(a,b){var d=b&&CKEDITOR.tools.htmlEncode(b)||"\x26nbsp;",d=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'+d+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(d);var c=a.getSelection(1),e=a.createRange(),g=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(d,CKEDITOR.POSITION_AFTER_START);e.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([e]);g.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=d}function t(a){var b={37:1,39:1,8:1,46:1};return function(d){var c=d.data.getKeystroke();if(b[c]){var e=a.getSelection().getRanges(),
 g=e[0];1==e.length&&g.collapsed&&(c=g[38>c?"getPreviousEditableNode":"getNextEditableNode"]())&&c.type==CKEDITOR.NODE_ELEMENT&&"false"==c.getAttribute("contenteditable")&&(a.getSelection().fake(c),d.data.preventDefault(),d.cancel())}}}function p(a){for(var b=0;b<a.length;b++){var d=a[b];d.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!d.collapsed){if(d.startContainer.isReadOnly())for(var c=d.startContainer,e;c&&!((e=c.type==CKEDITOR.NODE_ELEMENT)&&c.is("body")||!c.isReadOnly());)e&&"false"==
 c.getAttribute("contentEditable")&&d.setStartAfter(c),c=c.getParent();c=d.startContainer;e=d.endContainer;var g=d.startOffset,f=d.endOffset,m=d.clone();c&&c.type==CKEDITOR.NODE_TEXT&&(g>=c.getLength()?m.setStartAfter(c):m.setStartBefore(c));e&&e.type==CKEDITOR.NODE_TEXT&&(f?m.setEndAfter(e):m.setEndBefore(e));c=new CKEDITOR.dom.walker(m);c.evaluator=function(c){if(c.type==CKEDITOR.NODE_ELEMENT&&c.isReadOnly()){var e=d.clone();d.setEndBefore(c);d.collapsed&&a.splice(b--,1);c.getPosition(m.endContainer)&
-CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(c),e.collapsed||a.splice(b+1,0,e));return!0}return!1};c.next()}}return a}var r="function"!=typeof window.getSelection,v=1,q=CKEDITOR.tools.repeat("​",7),B=new RegExp(q+"( )?","g"),x,y,A,D=CKEDITOR.dom.walker.invisible(1),z=function(){function a(b){return function(a){var d=a.editor.createRange();d.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([d]);return!1}}function b(a){return function(b){var d=b.editor,c=d.createRange(),
+CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(c),e.collapsed||a.splice(b+1,0,e));return!0}return!1};c.next()}}return a}var r="function"!=typeof window.getSelection,v=1,q=CKEDITOR.tools.repeat("​",7),B=new RegExp(q+"( )?","g"),w,y,A,D=CKEDITOR.dom.walker.invisible(1),z=function(){function a(b){return function(a){var d=a.editor.createRange();d.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([d]);return!1}}function b(a){return function(b){var d=b.editor,c=d.createRange(),
 e;if(!d.readOnly)return(e=c.moveToClosestEditablePosition(b.selected,a))||(e=c.moveToClosestEditablePosition(b.selected,!a)),e&&d.getSelection().selectRanges([c]),d.fire("saveSnapshot"),b.selected.remove(),e||(c.moveToElementEditablePosition(d.editable()),d.getSelection().selectRanges([c])),d.fire("saveSnapshot"),!1}}var d=a(),c=a(1);return{37:d,38:d,39:c,40:c,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=d.getSelection();a&&a.removeAllRanges()}var d=a.editor;d.on("contentDom",
 function(){function a(){q=new CKEDITOR.dom.selection(d.getSelection());q.lock()}function b(){g.removeListener("mouseup",b);h.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,d=a.createRange();"None"!=a.type&&d.parentElement()&&d.parentElement().ownerDocument==e.$&&d.select()}function c(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=d.document,g=CKEDITOR.document,f=d.editable(),m=e.getBody(),h=e.getDocumentElement(),w=f.isInline(),p,q;CKEDITOR.env.gecko&&f.attachListener(f,"focus",function(a){a.removeListener();0!==p&&(a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==f.$&&(a=d.createRange(),a.moveToElementEditStart(f),a.select())},null,null,-2);f.attachListener(f,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(p&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){p=d._.previousActive&&
-d._.previousActive.equals(e.getActive());var a=null!=d._.previousScrollTop&&d._.previousScrollTop!=f.$.scrollTop;CKEDITOR.env.webkit&&p&&a&&(f.$.scrollTop=d._.previousScrollTop)}d.unlockSelection(p);p=0},null,null,-1);f.attachListener(f,"mousedown",function(){p=0});if(CKEDITOR.env.ie||w)r?f.attachListener(f,"beforedeactivate",a,null,null,-1):f.attachListener(d,"selectionCheck",a,null,null,-1),f.attachListener(f,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusout":"blur",function(){d.lockSelection(q);
-p=1},null,null,-1),f.attachListener(f,"mousedown",function(){p=0});if(CKEDITOR.env.ie&&!w){var v;f.attachListener(f,"mousedown",function(a){2==a.data.$.button&&((a=d.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(v=d.window.getScrollPosition()))});f.attachListener(f,"mouseup",function(a){2==a.data.$.button&&v&&(d.document.$.documentElement.scrollLeft=v.x,d.document.$.documentElement.scrollTop=v.y);v=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var x,
-u;h.on("mousedown",function(a){function b(a){a=a.data.$;if(x){var d=m.$.createTextRange();try{d.moveToPoint(a.clientX,a.clientY)}catch(c){}x.setEndPoint(0>u.compareEndPoints("StartToStart",d)?"EndToEnd":"StartToStart",d);x.select()}}function d(){h.removeListener("mousemove",b);g.removeListener("mouseup",d);h.removeListener("mouseup",d);x.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<h.$.clientHeight&&a.$.x<h.$.clientWidth){x=m.$.createTextRange();try{x.moveToPoint(a.$.clientX,a.$.clientY)}catch(c){}u=
-x.duplicate();h.on("mousemove",b);g.on("mouseup",d);h.on("mouseup",d)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)h.on("mousedown",function(a){a.data.getTarget().is("html")&&(g.on("mouseup",b),h.on("mouseup",b))})}}f.attachListener(f,"selectionchange",l,d);f.attachListener(f,"keyup",k,d);f.attachListener(f,"touchstart",k,d);f.attachListener(f,"touchend",k,d);CKEDITOR.env.ie&&f.attachListener(f,"keydown",function(a){var b=this.getSelection(1),d=c(b);d&&!d.equals(f)&&(b.selectElement(d),a.data.preventDefault())},
-d);f.attachListener(f,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(w&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var A;f.attachListener(f,"mousedown",function(){A=1});f.attachListener(e.getDocumentElement(),"mouseup",function(){A&&k.call(d);A=0})}else f.attachListener(CKEDITOR.env.ie?f:e.getDocumentElement(),"mouseup",k,d);CKEDITOR.env.webkit&&f.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:f.hasFocus&&
+a:null:null}var e=d.document,g=CKEDITOR.document,f=d.editable(),m=e.getBody(),h=e.getDocumentElement(),x=f.isInline(),p,q;CKEDITOR.env.gecko&&f.attachListener(f,"focus",function(a){a.removeListener();0!==p&&(a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==f.$&&(a=d.createRange(),a.moveToElementEditStart(f),a.select())},null,null,-2);f.attachListener(f,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(p&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){p=d._.previousActive&&
+d._.previousActive.equals(e.getActive());var a=null!=d._.previousScrollTop&&d._.previousScrollTop!=f.$.scrollTop;CKEDITOR.env.webkit&&p&&a&&(f.$.scrollTop=d._.previousScrollTop)}d.unlockSelection(p);p=0},null,null,-1);f.attachListener(f,"mousedown",function(){p=0});if(CKEDITOR.env.ie||x)r?f.attachListener(f,"beforedeactivate",a,null,null,-1):f.attachListener(d,"selectionCheck",a,null,null,-1),f.attachListener(f,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusout":"blur",function(){d.lockSelection(q);
+p=1},null,null,-1),f.attachListener(f,"mousedown",function(){p=0});if(CKEDITOR.env.ie&&!x){var v;f.attachListener(f,"mousedown",function(a){2==a.data.$.button&&((a=d.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(v=d.window.getScrollPosition()))});f.attachListener(f,"mouseup",function(a){2==a.data.$.button&&v&&(d.document.$.documentElement.scrollLeft=v.x,d.document.$.documentElement.scrollTop=v.y);v=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var w,
+u;h.on("mousedown",function(a){function b(a){a=a.data.$;if(w){var d=m.$.createTextRange();try{d.moveToPoint(a.clientX,a.clientY)}catch(c){}w.setEndPoint(0>u.compareEndPoints("StartToStart",d)?"EndToEnd":"StartToStart",d);w.select()}}function d(){h.removeListener("mousemove",b);g.removeListener("mouseup",d);h.removeListener("mouseup",d);w.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<h.$.clientHeight&&a.$.x<h.$.clientWidth){w=m.$.createTextRange();try{w.moveToPoint(a.$.clientX,a.$.clientY)}catch(c){}u=
+w.duplicate();h.on("mousemove",b);g.on("mouseup",d);h.on("mouseup",d)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)h.on("mousedown",function(a){a.data.getTarget().is("html")&&(g.on("mouseup",b),h.on("mouseup",b))})}}f.attachListener(f,"selectionchange",l,d);f.attachListener(f,"keyup",k,d);f.attachListener(f,"touchstart",k,d);f.attachListener(f,"touchend",k,d);CKEDITOR.env.ie&&f.attachListener(f,"keydown",function(a){var b=this.getSelection(1),d=c(b);d&&!d.equals(f)&&(b.selectElement(d),a.data.preventDefault())},
+d);f.attachListener(f,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(x&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var A;f.attachListener(f,"mousedown",function(){A=1});f.attachListener(e.getDocumentElement(),"mouseup",function(){A&&k.call(d);A=0})}else f.attachListener(CKEDITOR.env.ie?f:e.getDocumentElement(),"mouseup",k,d);CKEDITOR.env.webkit&&f.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:f.hasFocus&&
 n(f)}},null,null,-1);f.attachListener(f,"keydown",t(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&b()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy",b,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=d.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&
 (b.remove(),CKEDITOR.env.gecko&&(a=d.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);d.on("key",function(a){if("wysiwyg"==d.mode){var b=d.getSelection();if(b.isFake){var c=z[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),d=a.getCustomData("cke-fillingChar");
-d&&(d.getCustomData("ready")?(n(a),a.editor.fire("selectionCheck")):d.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){n(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=w(a.data))},b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=w(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?l:k).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||
+d&&(d.getCustomData("ready")?(n(a),a.editor.fire("selectionCheck")):d.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){n(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=x(a.data))},b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=x(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?l: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.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 b=this._.savedSelection;return b?(b.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 b=a;a=a.root}var d=a instanceof CKEDITOR.dom.element;
 this.rev=b?b.rev:v++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=d?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache),this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var c,e;if(a)if(a.getRangeAt)c=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(g){}c=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!c||
-c.type!=CKEDITOR.NODE_ELEMENT&&c.type!=CKEDITOR.NODE_TEXT||!this.root.equals(c)&&!this.root.contains(c))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 J={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:w,
+c.type!=CKEDITOR.NODE_ELEMENT&&c.type!=CKEDITOR.NODE_TEXT||!this.root.equals(c)&&!this.root.contains(c))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 J={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:x,
 _createFillingCharSequenceNode:a,FILLING_CHAR_SEQUENCE:q});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 b=CKEDITOR.SELECTION_NONE;try{var d=this.getNative(),c=d.type;"Text"==c&&(b=CKEDITOR.SELECTION_TEXT);"Control"==c&&(b=CKEDITOR.SELECTION_ELEMENT);d.createRange().parentElement()&&
 (b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,d=this.getNative();if(!d||!d.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(1==d.rangeCount){var d=d.getRangeAt(0),c=d.startContainer;c==d.endContainer&&1==c.nodeType&&1==d.endOffset-d.startOffset&&J[c.childNodes[d.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=r?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}
 var b=function(b,d){b=b.duplicate();b.collapse(d);var c=b.parentElement();if(!c.hasChildNodes())return{container:c,offset:0};for(var e=c.children,g,f,m=b.duplicate(),h=0,k=e.length-1,n=-1,l,r;h<=k;)if(n=Math.floor((h+k)/2),g=e[n],m.moveToElementText(g),l=m.compareEndPoints("StartToStart",b),0<l)k=n-1;else if(0>l)h=n+1;else return{container:c,offset:a(g)};if(-1==n||n==e.length-1&&0>l){m.moveToElementText(c);m.setEndPoint("StartToStart",b);m=m.text.replace(/(\r\n|\r)/g,"\n").length;e=c.childNodes;if(!m)return g=
 e[e.length-1],g.nodeType!=CKEDITOR.NODE_TEXT?{container:c,offset:e.length}:{container:g,offset:g.nodeValue.length};for(c=e.length;0<m&&0<c;)f=e[--c],f.nodeType==CKEDITOR.NODE_TEXT&&(r=f,m-=f.nodeValue.length);return{container:r,offset:-m}}m.collapse(0<l?!0:!1);m.setEndPoint(0<l?"StartToStart":"EndToStart",b);m=m.text.replace(/(\r\n|\r)/g,"\n").length;if(!m)return{container:c,offset:a(g)+(0<l?0:1)};for(;0<m;)try{f=g[0<l?"previousSibling":"nextSibling"],f.nodeType==CKEDITOR.NODE_TEXT&&(m-=f.nodeValue.length,
-r=f),g=f}catch(w){return{container:c,offset:a(g)}}return{container:r,offset:0<l?-m:r.nodeValue.length+m}};return function(){var a=this.getNative(),d=a&&a.createRange(),c=this.getType();if(!a)return[];if(c==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),c=b(d,!0),a.setStart(new CKEDITOR.dom.node(c.container),c.offset),c=b(d),a.setEnd(new CKEDITOR.dom.node(c.container),c.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&
+r=f),g=f}catch(x){return{container:c,offset:a(g)}}return{container:r,offset:0<l?-m:r.nodeValue.length+m}};return function(){var a=this.getNative(),d=a&&a.createRange(),c=this.getType();if(!a)return[];if(c==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),c=b(d,!0),a.setStart(new CKEDITOR.dom.node(c.container),c.offset),c=b(d),a.setEnd(new CKEDITOR.dom.node(c.container),c.offset),a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&
 a.collapse(),[a];if(c==CKEDITOR.SELECTION_ELEMENT){for(var c=[],e=0;e<d.length;e++){for(var g=d.item(e),f=g.parentNode,m=0,a=new CKEDITOR.dom.range(this.root);m<f.childNodes.length&&f.childNodes[m]!=g;m++);a.setStart(new CKEDITOR.dom.node(f),m);a.setEnd(new CKEDITOR.dom.node(f),m+1);c.push(a)}return c}return[]}}():function(){var a=[],b,d=this.getNative();if(!d)return a;for(var c=0;c<d.rangeCount;c++){var e=d.getRangeAt(c);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),
 e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var d=this._.cache,c=d.ranges;c||(d.ranges=c=new CKEDITOR.dom.rangeList(a.call(this)));return b?p(new CKEDITOR.dom.rangeList(c.slice())):c}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var d=this.getRanges()[0];
 if(d){if(d.collapsed)b=d.startContainer,b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());else{for(d.optimize();b=d.startContainer,d.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary();)d.setStartAfter(b);b=d.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();if((b=b.getChild(d.startOffset))&&b.type==CKEDITOR.NODE_ELEMENT)for(d=b.getFirst();d&&d.type==CKEDITOR.NODE_ELEMENT;)b=d,d=d.getFirst();else b=d.startContainer}b=b.$}}return a.startElement=b?
 new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var b=this,d=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),d,c,e=2;e&&!((d=a.getEnclosedNode())&&d.type==CKEDITOR.NODE_ELEMENT&&J[d.getName()]&&(c=d));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return c&&c.$});return a.selectedElement=d?new CKEDITOR.dom.element(d):null},getSelectedText:function(){var a=
 this._.cache;if(void 0!==a.selectedText)return a.selectedText;var b=this.getNative(),b=r?"Control"==b.type?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var d=this.getSelectedElement(),c=this.getRanges(),e=this.isFake;this.isLocked=0;this.reset();a&&(a=d||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",
 1)&&(f(c)?b.call(this,c):e?this.fake(d):d?this.selectElement(d):this.selectRanges(c))}},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 b=a._.hiddenSelectionContainer;if(b){var d=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!d&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=v++},selectElement:function(a){var b=
-new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(d){var c=this.root.editor,e=c&&c._.hiddenSelectionContainer;this.reset();if(e)for(var e=this.root,g,h=0;h<d.length;++h)g=d[h],g.endContainer.equals(e)&&(g.endOffset=Math.min(g.endOffset,e.getChildCount()));if(d.length)if(this.isLocked){var k=CKEDITOR.document.getActive();this.unlock();this.selectRanges(d);this.lock();k&&!k.equals(this.root)&&k.focus()}else{var l;a:{var w,p;if(1==d.length&&
-!(p=d[0]).collapsed&&(l=p.getEnclosedNode())&&l.type==CKEDITOR.NODE_ELEMENT&&(p=p.clone(),p.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(w=p.getEnclosedNode())&&w.type==CKEDITOR.NODE_ELEMENT&&(l=w),"false"==l.getAttribute("contenteditable")))break a;l=void 0}if(l)this.fake(l);else if(c&&c.plugins.tableselection&&CKEDITOR.plugins.tableselection.isSupportedEnvironment&&f(d)&&!x)b.call(this,d);else{if(r){w=CKEDITOR.dom.walker.whitespaces(!0);l=/\ufeff|\u00a0/;p={table:1,tbody:1,tr:1};1<d.length&&(c=d[d.length-
+new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(d){var c=this.root.editor,e=c&&c._.hiddenSelectionContainer;this.reset();if(e)for(var e=this.root,g,h=0;h<d.length;++h)g=d[h],g.endContainer.equals(e)&&(g.endOffset=Math.min(g.endOffset,e.getChildCount()));if(d.length)if(this.isLocked){var k=CKEDITOR.document.getActive();this.unlock();this.selectRanges(d);this.lock();k&&!k.equals(this.root)&&k.focus()}else{var l;a:{var x,p;if(1==d.length&&
+!(p=d[0]).collapsed&&(l=p.getEnclosedNode())&&l.type==CKEDITOR.NODE_ELEMENT&&(p=p.clone(),p.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(x=p.getEnclosedNode())&&x.type==CKEDITOR.NODE_ELEMENT&&(l=x),"false"==l.getAttribute("contenteditable")))break a;l=void 0}if(l)this.fake(l);else if(c&&c.plugins.tableselection&&CKEDITOR.plugins.tableselection.isSupportedEnvironment&&f(d)&&!w)b.call(this,d);else{if(r){x=CKEDITOR.dom.walker.whitespaces(!0);l=/\ufeff|\u00a0/;p={table:1,tbody:1,tr:1};1<d.length&&(c=d[d.length-
 1],d[0].setEnd(c.endContainer,c.endOffset));c=d[0];d=c.collapsed;var q,v,u;if((e=c.getEnclosedNode())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in J&&(!e.is("a")||!e.getText()))try{u=e.$.createControlRange();u.addElement(e.$);u.select();return}catch(t){}if(c.startContainer.type==CKEDITOR.NODE_ELEMENT&&c.startContainer.getName()in p||c.endContainer.type==CKEDITOR.NODE_ELEMENT&&c.endContainer.getName()in p)c.shrink(CKEDITOR.NODE_ELEMENT,!0),d=c.collapsed;u=c.createBookmark();p=u.startNode;d||(k=u.endNode);
-u=c.document.$.body.createTextRange();u.moveToElementText(p.$);u.moveStart("character",1);k?(l=c.document.$.body.createTextRange(),l.moveToElementText(k.$),u.setEndPoint("EndToEnd",l),u.moveEnd("character",-1)):(q=p.getNext(w),v=p.hasAscendant("pre"),q=!(q&&q.getText&&q.getText().match(l))&&(v||!p.hasPrevious()||p.getPrevious().is&&p.getPrevious().is("br")),v=c.document.createElement("span"),v.setHtml("\x26#65279;"),v.insertBefore(p),q&&c.document.createText("").insertBefore(p));c.setStartBefore(p);
+u=c.document.$.body.createTextRange();u.moveToElementText(p.$);u.moveStart("character",1);k?(l=c.document.$.body.createTextRange(),l.moveToElementText(k.$),u.setEndPoint("EndToEnd",l),u.moveEnd("character",-1)):(q=p.getNext(x),v=p.hasAscendant("pre"),q=!(q&&q.getText&&q.getText().match(l))&&(v||!p.hasPrevious()||p.getPrevious().is&&p.getPrevious().is("br")),v=c.document.createElement("span"),v.setHtml("\x26#65279;"),v.insertBefore(p),q&&c.document.createText("").insertBefore(p));c.setStartBefore(p);
 p.remove();d?(q?(u.moveStart("character",-1),u.select(),c.document.$.selection.clear()):u.select(),c.moveToPosition(v,CKEDITOR.POSITION_BEFORE_START),v.remove()):(c.setEndBefore(k),k.remove(),u.select())}else{k=this.getNative();if(!k)return;this.removeAllRanges();for(u=0;u<d.length;u++){if(u<d.length-1&&(q=d[u],v=d[u+1],l=q.clone(),l.setStart(q.endContainer,q.endOffset),l.setEnd(v.startContainer,v.startOffset),!l.collapsed&&(l.shrink(CKEDITOR.NODE_ELEMENT,!0),c=l.getCommonAncestor(),l=l.getEnclosedNode(),
 c.isReadOnly()||l&&l.isReadOnly()))){v.setStart(q.startContainer,q.startOffset);d.splice(u--,1);continue}c=d[u];v=this.document.$.createRange();c.collapsed&&CKEDITOR.env.webkit&&m(c)&&(l=a(this.root),c.insertNode(l),(q=l.getNext())&&!l.getPrevious()&&q.type==CKEDITOR.NODE_ELEMENT&&"br"==q.getName()?(n(this.root),c.moveToPosition(q,CKEDITOR.POSITION_BEFORE_START)):c.moveToPosition(l,CKEDITOR.POSITION_AFTER_END));v.setStart(c.startContainer.$,c.startOffset);try{v.setEnd(c.endContainer.$,c.endOffset)}catch(A){if(0<=
 A.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))c.collapse(1),v.setEnd(c.endContainer.$,c.endOffset);else throw A;}k.addRange(v)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a,b){var d=this.root.editor;void 0===b&&a.hasAttribute("aria-label")&&(b=a.getAttribute("aria-label"));this.reset();u(d,b);var c=this._.cache,e=new CKEDITOR.dom.range(this.root);e.setStartBefore(a);e.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(e);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;
@@ -457,23 +457,23 @@ c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=v++;d._.fakeSelection=thi
 this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],d,c=0;c<a.length;c++){var e=new CKEDITOR.dom.range(this.root);e.moveToBookmark(a[c]);b.push(e)}a.isFake&&(d=f(b)?b[0]._getTableElement():b[0].getEnclosedNode(),d&&d.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),a.isFake=0));a.isFake&&!f(b)?this.fake(d):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-
 1].endContainer):null},scrollIntoView:function(){this.type!=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(b){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function e(a,b){for(var d,c;(a=a.getParent())&&!a.equals(b);)if(a.getAttribute("data-nostyle"))d=a;else if(!c){var e=a.getAttribute("contentEditable");
 "false"==e?d=a:"true"==e&&(c=1)}return d}function f(a,b,d,c){return(a.getPosition(b)|c)==c&&(!d.childRule||d.childRule(a))}function c(a){var d=a.document;if(a.collapsed)d=v(this,d),a.insertNode(d),a.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,m=this._.definition,h,k=m.ignoreReadonly,n=k||m.includeReadonly;null==n&&(n=a.root.getCustomData("cke_includeReadonly"));var l=CKEDITOR.dtd[g];l||(h=!0,l=CKEDITOR.dtd.span);a.enlarge(CKEDITOR.ENLARGE_INLINE,1);a.trim();var r=a.createBookmark(),
-w=r.startNode,p=r.endNode,q=w,u;if(!k){var x=a.getCommonAncestor(),k=e(w,x),x=e(p,x);k&&(q=k.getNextSourceNode(!0));x&&(p=x)}for(q.getPosition(p)==CKEDITOR.POSITION_FOLLOWING&&(q=0);q;){k=!1;if(q.equals(p))q=null,k=!0;else{var Q=q.type==CKEDITOR.NODE_ELEMENT?q.getName():null,x=Q&&"false"==q.getAttribute("contentEditable"),A=Q&&q.getAttribute("data-nostyle");if(Q&&q.data("cke-bookmark")||q.type===CKEDITOR.NODE_COMMENT){q=q.getNextSourceNode(!0);continue}if(x&&n&&CKEDITOR.dtd.$block[Q])for(var B=q,
-y=b(B),z=void 0,D=y.length,ea=0,B=D&&new CKEDITOR.dom.range(B.getDocument());ea<D;++ea){var z=y[ea],J=CKEDITOR.filter.instances[z.data("cke-filter")];if(J?J.check(this):1)B.selectNodeContents(z),c.call(this,B)}y=Q?!l[Q]||A?0:x&&!n?0:f(q,p,m,L):1;if(y)if(z=q.getParent(),y=m,D=g,ea=h,!z||!(z.getDtd()||CKEDITOR.dtd.span)[D]&&!ea||y.parentRule&&!y.parentRule(z))k=!0;else{if(u||Q&&CKEDITOR.dtd.$removeEmpty[Q]&&(q.getPosition(p)|L)!=L||(u=a.clone(),u.setStartBefore(q)),Q=q.type,Q==CKEDITOR.NODE_TEXT||x||
-Q==CKEDITOR.NODE_ELEMENT&&!q.getChildCount()){for(var Q=q,E;(k=!Q.getNext(F))&&(E=Q.getParent(),l[E.getName()])&&f(E,w,m,I);)Q=E;u.setEndAfter(Q)}}else k=!0;q=q.getNextSourceNode(A||x)}if(k&&u&&!u.collapsed){for(var k=v(this,d),x=k.hasAttributes(),A=u.getCommonAncestor(),Q={},y={},z={},D={},fa,H,G;k&&A;){if(A.getName()==g){for(fa in m.attributes)!D[fa]&&(G=A.getAttribute(H))&&(k.getAttribute(fa)==G?y[fa]=1:D[fa]=1);for(H in m.styles)!z[H]&&(G=A.getStyle(H))&&(k.getStyle(H)==G?Q[H]=1:z[H]=1)}A=A.getParent()}for(fa in y)k.removeAttribute(fa);
-for(H in Q)k.removeStyle(H);x&&!k.hasAttributes()&&(k=null);k?(u.extractContents().appendTo(k),u.insertNode(k),t.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element("span"),u.extractContents().appendTo(k),u.insertNode(k),t.call(this,k),k.remove(!0));u=null}}a.moveToBookmark(r);a.shrink(CKEDITOR.SHRINK_TEXT);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function h(a){function b(){for(var a=new CKEDITOR.dom.elementPath(c.getParent()),d=new CKEDITOR.dom.elementPath(n.getParent()),
+x=r.startNode,p=r.endNode,q=x,u;if(!k){var w=a.getCommonAncestor(),k=e(x,w),w=e(p,w);k&&(q=k.getNextSourceNode(!0));w&&(p=w)}for(q.getPosition(p)==CKEDITOR.POSITION_FOLLOWING&&(q=0);q;){k=!1;if(q.equals(p))q=null,k=!0;else{var Q=q.type==CKEDITOR.NODE_ELEMENT?q.getName():null,w=Q&&"false"==q.getAttribute("contentEditable"),A=Q&&q.getAttribute("data-nostyle");if(Q&&q.data("cke-bookmark")||q.type===CKEDITOR.NODE_COMMENT){q=q.getNextSourceNode(!0);continue}if(w&&n&&CKEDITOR.dtd.$block[Q])for(var B=q,
+y=b(B),z=void 0,D=y.length,fa=0,B=D&&new CKEDITOR.dom.range(B.getDocument());fa<D;++fa){var z=y[fa],J=CKEDITOR.filter.instances[z.data("cke-filter")];if(J?J.check(this):1)B.selectNodeContents(z),c.call(this,B)}y=Q?!l[Q]||A?0:w&&!n?0:f(q,p,m,L):1;if(y)if(z=q.getParent(),y=m,D=g,fa=h,!z||!(z.getDtd()||CKEDITOR.dtd.span)[D]&&!fa||y.parentRule&&!y.parentRule(z))k=!0;else{if(u||Q&&CKEDITOR.dtd.$removeEmpty[Q]&&(q.getPosition(p)|L)!=L||(u=a.clone(),u.setStartBefore(q)),Q=q.type,Q==CKEDITOR.NODE_TEXT||w||
+Q==CKEDITOR.NODE_ELEMENT&&!q.getChildCount()){for(var Q=q,H;(k=!Q.getNext(F))&&(H=Q.getParent(),l[H.getName()])&&f(H,x,m,I);)Q=H;u.setEndAfter(Q)}}else k=!0;q=q.getNextSourceNode(A||w)}if(k&&u&&!u.collapsed){for(var k=v(this,d),w=k.hasAttributes(),A=u.getCommonAncestor(),Q={},y={},z={},D={},E,aa,G;k&&A;){if(A.getName()==g){for(E in m.attributes)!D[E]&&(G=A.getAttribute(aa))&&(k.getAttribute(E)==G?y[E]=1:D[E]=1);for(aa in m.styles)!z[aa]&&(G=A.getStyle(aa))&&(k.getStyle(aa)==G?Q[aa]=1:z[aa]=1)}A=A.getParent()}for(E in y)k.removeAttribute(E);
+for(aa in Q)k.removeStyle(aa);w&&!k.hasAttributes()&&(k=null);k?(u.extractContents().appendTo(k),u.insertNode(k),t.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element("span"),u.extractContents().appendTo(k),u.insertNode(k),t.call(this,k),k.remove(!0));u=null}}a.moveToBookmark(r);a.shrink(CKEDITOR.SHRINK_TEXT);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function h(a){function b(){for(var a=new CKEDITOR.dom.elementPath(c.getParent()),d=new CKEDITOR.dom.elementPath(n.getParent()),
 e=null,g=null,f=0;f<a.elements.length;f++){var m=a.elements[f];if(m==a.block||m==a.blockLimit)break;l.checkElementRemovable(m,!0)&&(e=m)}for(f=0;f<d.elements.length;f++){m=d.elements[f];if(m==d.block||m==d.blockLimit)break;l.checkElementRemovable(m,!0)&&(g=m)}g&&n.breakParent(g);e&&c.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var d=a.createBookmark(),c=d.startNode,e=this._.definition.alwaysRemoveElement;if(a.collapsed){for(var g=new CKEDITOR.dom.elementPath(c.getParent(),a.root),f,m=0,h;m<
-g.elements.length&&(h=g.elements[m])&&h!=g.block&&h!=g.blockLimit;m++)if(this.checkElementRemovable(h)){var k;!e&&a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(k=a.checkBoundaryOfElement(h,CKEDITOR.START)))?(f=h,f.match=k?"start":"end"):(h.mergeSiblings(),h.is(this.element)?u.call(this,h):p(h,x(this)[h.getName()]))}if(f){e=c;for(m=0;;m++){h=g.elements[m];if(h.equals(f))break;else if(h.match)continue;else h=h.clone();h.append(e);e=h}e["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var n=
-d.endNode,l=this;b();for(g=c;!g.equals(n);)f=g.getNextSourceNode(),g.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(g)&&(g.getName()==this.element?u.call(this,g):p(g,x(this)[g.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(c)&&(b(),f=c.getNext())),g=f}a.moveToBookmark(d);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function b(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function l(a){var b=a.getEnclosedNode()||
+g.elements.length&&(h=g.elements[m])&&h!=g.block&&h!=g.blockLimit;m++)if(this.checkElementRemovable(h)){var k;!e&&a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(k=a.checkBoundaryOfElement(h,CKEDITOR.START)))?(f=h,f.match=k?"start":"end"):(h.mergeSiblings(),h.is(this.element)?u.call(this,h):p(h,w(this)[h.getName()]))}if(f){e=c;for(m=0;;m++){h=g.elements[m];if(h.equals(f))break;else if(h.match)continue;else h=h.clone();h.append(e);e=h}e["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var n=
+d.endNode,l=this;b();for(g=c;!g.equals(n);)f=g.getNextSourceNode(),g.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(g)&&(g.getName()==this.element?u.call(this,g):p(g,w(this)[g.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(c)&&(b(),f=c.getNext())),g=f}a.moveToBookmark(d);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function b(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function l(a){var b=a.getEnclosedNode()||
 a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&q(a,this)}function k(a){var b=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,d=b.attributes;if(d)for(var c in d)a.removeAttribute(c,d[c]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&&a.removeStyle(e)}}function d(a){var b=a.createBookmark(!0),d=a.createIterator();d.enforceRealBlocks=!0;this._.enterMode&&
 (d.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var c,e=a.document,g;c=d.getNextParagraph();)!c.isReadOnly()&&(d.activeFilter?d.activeFilter.check(this):1)&&(g=v(this,e,c),m(c,g));a.moveToBookmark(b)}function g(a){var b=a.createBookmark(1),d=a.createIterator();d.enforceRealBlocks=!0;d.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var c,e;c=d.getNextParagraph();)this.checkElementRemovable(c)&&(c.is("pre")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==
 CKEDITOR.ENTER_P?"p":"div"))&&c.copyAttributes(e),m(c,e)):u.call(this,c));a.moveToBookmark(b)}function m(b,d){var c=!d;c&&(d=b.getDocument().createElement("div"),b.copyAttributes(d));var e=d&&d.is("pre"),g=b.is("pre"),f=!e&&g;if(e&&!g){g=d;(f=b.getBogus())&&f.remove();f=b.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 m=b.getDocument().createElement("div");
-m.append(g);g.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e";g.copyAttributes(m.getFirst());g=m.getFirst().remove()}else g.setHtml(f);d=g}else f?d=w(c?[b.getHtml()]:a(b),d):b.moveChildren(d);d.replace(b);if(e){var c=d,h;(h=c.getPrevious(G))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")&&(e=n(h.getHtml(),/\n$/,"")+"\n\n"+n(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+e+"\x3c/pre\x3e":c.setHtml(e),h.remove())}else c&&r(d)}function a(a){var b=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,
-function(a,b,d){return b+"\x3c/pre\x3e"+d+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,d){b.push(d)});return b}function n(a,b,d){var c="",e="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,d){b&&(c=b);d&&(e=d);return""});return c+a.replace(b,d)+e}function w(a,b){var d;1<a.length&&(d=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var c=0;c<a.length;c++){var e=a[c],e=e.replace(/(\r\n|\r)/g,"\n"),e=n(e,/^[ \t]*\n/,
-""),e=n(e,/\n$/,""),e=n(e,/^[ \t]+|[ \t]+$/g,function(a,b){return 1==a.length?"\x26nbsp;":b?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"\x3cbr\x3e"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(d){var g=b.clone();g.setHtml(e);d.append(g)}else b.setHtml(e)}return d||b}function u(a,b){var d=this._.definition,c=d.attributes,d=d.styles,e=x(this)[a.getName()],g=CKEDITOR.tools.isEmpty(c)&&
+m.append(g);g.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e";g.copyAttributes(m.getFirst());g=m.getFirst().remove()}else g.setHtml(f);d=g}else f?d=x(c?[b.getHtml()]:a(b),d):b.moveChildren(d);d.replace(b);if(e){var c=d,h;(h=c.getPrevious(G))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")&&(e=n(h.getHtml(),/\n$/,"")+"\n\n"+n(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+e+"\x3c/pre\x3e":c.setHtml(e),h.remove())}else c&&r(d)}function a(a){var b=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,
+function(a,b,d){return b+"\x3c/pre\x3e"+d+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,d){b.push(d)});return b}function n(a,b,d){var c="",e="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,d){b&&(c=b);d&&(e=d);return""});return c+a.replace(b,d)+e}function x(a,b){var d;1<a.length&&(d=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var c=0;c<a.length;c++){var e=a[c],e=e.replace(/(\r\n|\r)/g,"\n"),e=n(e,/^[ \t]*\n/,
+""),e=n(e,/\n$/,""),e=n(e,/^[ \t]+|[ \t]+$/g,function(a,b){return 1==a.length?"\x26nbsp;":b?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"\x3cbr\x3e"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(d){var g=b.clone();g.setHtml(e);d.append(g)}else b.setHtml(e)}return d||b}function u(a,b){var d=this._.definition,c=d.attributes,d=d.styles,e=w(this)[a.getName()],g=CKEDITOR.tools.isEmpty(c)&&
 CKEDITOR.tools.isEmpty(d),f;for(f in c)if("class"!=f&&!this._.definition.fullMatch||a.getAttribute(f)==y(f,c[f]))b&&"data-"==f.slice(0,5)||(g=a.hasAttribute(f),a.removeAttribute(f));for(var m in d)this._.definition.fullMatch&&a.getStyle(m)!=y(m,d[m],!0)||(g=g||!!a.getStyle(m),a.removeStyle(m));p(a,e,z[a.getName()]);g&&(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 t(a){for(var b=x(this),d=a.getElementsByTag(this.element),c,e=d.count();0<=--e;)c=d.getItem(e),c.isReadOnly()||u.call(this,c,!0);for(var g in b)if(g!=this.element)for(d=a.getElementsByTag(g),e=d.count()-1;0<=e;e--)c=d.getItem(e),c.isReadOnly()||p(c,b[g])}function p(a,b,d){if(b=b&&b.attributes)for(var c=0;c<b.length;c++){var e=b[c][0],g;if(g=a.getAttribute(e)){var f=b[c][1];(null===f||f.test&&f.test(g)||"string"==typeof f&&g==f)&&a.removeAttribute(e)}}d||r(a)}function r(a,b){if(!a.hasAttributes()||
+"p":"div"))}function t(a){for(var b=w(this),d=a.getElementsByTag(this.element),c,e=d.count();0<=--e;)c=d.getItem(e),c.isReadOnly()||u.call(this,c,!0);for(var g in b)if(g!=this.element)for(d=a.getElementsByTag(g),e=d.count()-1;0<=e;e--)c=d.getItem(e),c.isReadOnly()||p(c,b[g])}function p(a,b,d){if(b=b&&b.attributes)for(var c=0;c<b.length;c++){var e=b[c][0],g;if(g=a.getAttribute(e)){var f=b[c][1];(null===f||f.test&&f.test(g)||"string"==typeof f&&g==f)&&a.removeAttribute(e)}}d||r(a)}function r(a,b){if(!a.hasAttributes()||
 b)if(CKEDITOR.dtd.$block[a.getName()]){var d=a.getPrevious(G),c=a.getNext(G);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br",1);!c||c.type!=CKEDITOR.NODE_TEXT&&c.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else d=a.getFirst(),c=a.getLast(),a.remove(!0),d&&(d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings(),c&&!d.equals(c)&&c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings())}function v(a,b,d){var c;c=a.element;"*"==c&&(c="span");c=new CKEDITOR.dom.element(c,b);d&&d.copyAttributes(c);
-c=q(c,a);b.getCustomData("doc_processing_style")&&c.hasAttribute("id")?c.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return c}function q(a,b){var d=b._.definition,c=d.attributes,d=CKEDITOR.style.getStyleText(d);if(c)for(var e in c)a.setAttribute(e,c[e]);d&&a.setAttribute("style",d);a.getDocument().removeCustomData("doc_processing_style");return a}function B(a,b){for(var d in a)a[d]=a[d].replace(H,function(a,d){return b[d]})}function x(a){if(a._.overrides)return a._.overrides;var b=
+c=q(c,a);b.getCustomData("doc_processing_style")&&c.hasAttribute("id")?c.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return c}function q(a,b){var d=b._.definition,c=d.attributes,d=CKEDITOR.style.getStyleText(d);if(c)for(var e in c)a.setAttribute(e,c[e]);d&&a.setAttribute("style",d);a.getDocument().removeCustomData("doc_processing_style");return a}function B(a,b){for(var d in a)a[d]=a[d].replace(H,function(a,d){return b[d]})}function w(a){if(a._.overrides)return a._.overrides;var b=
 a._.overrides={},d=a._.definition.overrides;if(d){CKEDITOR.tools.isArray(d)||(d=[d]);for(var c=0;c<d.length;c++){var e=d[c],g,f;"string"==typeof e?g=e.toLowerCase():(g=e.element?e.element.toLowerCase():a.element,f=e.attributes);e=b[g]||(b[g]={});if(f){var e=e.attributes=e.attributes||[],m;for(m in f)e.push([m.toLowerCase(),f[m]])}}}return b}function y(a,b,d){var c=new CKEDITOR.dom.element("span");c[d?"setStyle":"setAttribute"](a,b);return c[d?"getStyle":"getAttribute"](a)}function A(a,b){function d(a,
 b){return"font-family"==b.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof b&&(b=CKEDITOR.tools.parseCssText(b,!0));for(var c in a)if(!(c in b)||d(b[c],c)!=d(a[c],c)&&"inherit"!=a[c]&&"inherit"!=b[c])return!1;return!0}function D(a,b,d){var c=a.getRanges();b=b?this.removeFromRange:this.applyToRange;var e,g;if(a.isFake&&a.isInTable())for(e=[],g=0;g<c.length;g++)e.push(c[g].clone());for(var f=c.createIterator();g=f.getNextRange();)b.call(this,
 g,d);a.selectRanges(e||c)}var z={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},J={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},E=/\s*(?:;\s*|$)/,H=/#\((.+?)\)/g,F=CKEDITOR.dom.walker.bookmark(0,1),G=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=
@@ -482,7 +482,7 @@ function(a,b){if("string"==typeof a.type)return new CKEDITOR.style.customHandler
 b||(this._.enterMode=a.activeEnterMode);D.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?d:this.type==CKEDITOR.STYLE_OBJECT?l:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?h:this.type==CKEDITOR.STYLE_BLOCK?g:this.type==CKEDITOR.STYLE_OBJECT?k:null;return this.removeFromRange(a)},applyToObject:function(a){q(a,this)},
 checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var d=a.elements,c=0,e;c<d.length;c++)if(e=d[c],this.type!=CKEDITOR.STYLE_INLINE||e!=a.block&&e!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var g=e.getName();if(!("string"==typeof this.element?g==this.element:g in this.element))continue}if(this.checkElementRemovable(e,!0,b))return!0}}return!1},checkApplicable:function(a,
 b,d){b&&b instanceof CKEDITOR.filter&&(d=b);if(d&&!d.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,b){var d=this._.definition;if(!a||!d.ignoreReadonly&&a.isReadOnly())return!1;var c=a.getName();if("string"==typeof this.element?c==this.element:c in this.element){if(!b&&!a.hasAttributes())return!0;if(c=d._AC)d=c;else{var c={},e=0,g=d.attributes;
-if(g)for(var f in g)e++,c[f]=g[f];if(f=CKEDITOR.style.getStyleText(d))c.style||e++,c.style=f;c._length=e;d=d._AC=c}if(d._length){for(var m in d)if("_length"!=m)if(c=a.getAttribute(m)||"","style"==m?A(d[m],c):d[m]==c){if(!b)return!0}else if(b)return!1;if(b)return!0}else return!0}return!1},checkElementRemovable:function(a,b,d){if(this.checkElementMatch(a,b,d))return!0;if(b=x(this)[a.getName()]){var c;if(!(b=b.attributes))return!0;for(d=0;d<b.length;d++)if(c=b[d][0],c=a.getAttribute(c)){var e=b[d][1];
+if(g)for(var f in g)e++,c[f]=g[f];if(f=CKEDITOR.style.getStyleText(d))c.style||e++,c.style=f;c._length=e;d=d._AC=c}if(d._length){for(var m in d)if("_length"!=m)if(c=a.getAttribute(m)||"","style"==m?A(d[m],c):d[m]==c){if(!b)return!0}else if(b)return!1;if(b)return!0}else return!0}return!1},checkElementRemovable:function(a,b,d){if(this.checkElementMatch(a,b,d))return!0;if(b=w(this)[a.getName()]){var c;if(!(b=b.attributes))return!0;for(d=0;d<b.length;d++)if(c=b[d][0],c=a.getAttribute(c)){var e=b[d][1];
 if(null===e)return!0;if("string"==typeof e){if(c==e)return!0}else if(e.test(c))return!0}}return!1},buildPreview:function(a){var b=this._.definition,d=[],c=b.element;"bdo"==c&&(c="span");var d=["\x3c",c],e=b.attributes;if(e)for(var g in e)d.push(" ",g,'\x3d"',e[g],'"');(e=CKEDITOR.style.getStyleText(b))&&d.push(' style\x3d"',e,'"');d.push("\x3e",a||b.name,"\x3c/",c,"\x3e");return d.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;
 var b=a.styles,d=a.attributes&&a.attributes.style||"",c="";d.length&&(d=d.replace(E,";"));for(var e in b){var g=b[e],f=(e+":"+g).replace(E,";");"inherit"==g?c+=f:d+=f}d.length&&(d=CKEDITOR.tools.normalizeCssText(d,!0));return a._ST=d+c};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},
 a,!0);return this.customHandlers[a.type]=b};var L=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,I=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(e,f){this.requiredContent=this.allowedContent=this.style=e;CKEDITOR.tools.extend(this,f,!0)},CKEDITOR.styleCommand.prototype.exec=function(e){e.focus();this.state==CKEDITOR.TRISTATE_OFF?e.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&
@@ -490,7 +490,7 @@ e.removeStyle(this.style)},CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","s
 c.length;b++){var f=c[b],k=f.style.checkActive(e.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;f.fn.call(this,k)}}));c.push({style:e,fn:f})},applyStyle:function(e){e.apply(this)},removeStyle:function(e){e.remove(this)},getStylesSet:function(e){if(this._.stylesDefinitions)e(this._.stylesDefinitions);else{var f=this,c=f.config.stylesCombo_stylesSet||f.config.stylesSet;if(!1===c)e(null);else if(c instanceof Array)f._.stylesDefinitions=c,e(c);else{c||(c="default");var c=c.split(":"),h=c[0];
 CKEDITOR.stylesSet.addExternal(h,c[1]?c.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(h,function(b){f._.stylesDefinitions=b[h];e(f._.stylesDefinitions)})}}}}),CKEDITOR.dom.comment=function(e,f){"string"==typeof e&&(e=(f?f.$:document).createComment(e));CKEDITOR.dom.domObject.call(this,e)},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 e={},f={},c;for(c in CKEDITOR.dtd.$blockLimit)c in CKEDITOR.dtd.$list||(e[c]=1);for(c in CKEDITOR.dtd.$block)c in CKEDITOR.dtd.$blockLimit||c in CKEDITOR.dtd.$empty||(f[c]=1);CKEDITOR.dom.elementPath=function(c,b){var l=null,k=null,d=[],g=c,m;b=b||c.getDocument().getBody();g||(g=b);do if(g.type==CKEDITOR.NODE_ELEMENT){d.push(g);if(!this.lastElement&&(this.lastElement=g,g.is(CKEDITOR.dtd.$object)||"false"==g.getAttribute("contenteditable")))continue;if(g.equals(b))break;
-if(!k&&(m=g.getName(),"true"==g.getAttribute("contenteditable")?k=g:!l&&f[m]&&(l=g),e[m])){if(m=!l&&"div"==m){a:{m=g.getChildren();for(var a=0,n=m.count();a<n;a++){var w=m.getItem(a);if(w.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[w.getName()]){m=!0;break a}}m=!1}m=!m}m?l=g:k=g}}while(g=g.getParent());k||(k=b);this.block=l;this.blockLimit=k;this.root=b;this.elements=d}}(),CKEDITOR.dom.elementPath.prototype={compare:function(e){var f=this.elements;e=e&&e.elements;if(!e||f.length!=e.length)return!1;
+if(!k&&(m=g.getName(),"true"==g.getAttribute("contenteditable")?k=g:!l&&f[m]&&(l=g),e[m])){if(m=!l&&"div"==m){a:{m=g.getChildren();for(var a=0,n=m.count();a<n;a++){var x=m.getItem(a);if(x.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[x.getName()]){m=!0;break a}}m=!1}m=!m}m?l=g:k=g}}while(g=g.getParent());k||(k=b);this.block=l;this.blockLimit=k;this.root=b;this.elements=d}}(),CKEDITOR.dom.elementPath.prototype={compare:function(e){var f=this.elements;e=e&&e.elements;if(!e||f.length!=e.length)return!1;
 for(var c=0;c<f.length;c++)if(!f[c].equals(e[c]))return!1;return!0},contains:function(e,f,c){var h=0,b;"string"==typeof e&&(b=function(b){return b.getName()==e});e instanceof CKEDITOR.dom.element?b=function(b){return b.equals(e)}:CKEDITOR.tools.isArray(e)?b=function(b){return-1<CKEDITOR.tools.indexOf(e,b.getName())}:"function"==typeof e?b=e:"object"==typeof e&&(b=function(b){return b.getName()in e});var l=this.elements,k=l.length;f&&(c?h+=1:--k);c&&(l=Array.prototype.slice.call(l,0),l.reverse());
 for(;h<k;h++)if(b(l[h]))return l[h];return null},isContextFor:function(e){var f;return e in CKEDITOR.dtd.$block?(f=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!f.getDtd()[e]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=function(e,f){"string"==typeof e&&(e=(f?f.$:document).createTextNode(e));this.$=e},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(e){this.$.nodeValue=e},split:function(e){var f=this.$.parentNode,c=f.childNodes.length,h=this.getLength(),b=this.getDocument(),l=new CKEDITOR.dom.text(this.$.splitText(e),b);f.childNodes.length==c&&(e>=h?(l=b.createText(""),l.insertAfter(this)):(e=b.createText(""),e.insertAfter(l),e.remove()));return l},substring:function(e,f){return"number"!=typeof f?this.$.nodeValue.substr(e):
@@ -501,10 +501,10 @@ for(a=a.getById(b[m+1].startNode);;){g=g.getNextSourceNode(!1);if(a.equals(g))k=
 g)&&(g="ie"),d[g]){b+="_"+a[c];break}return CKEDITOR.getUrl(e()+b+".css")}function c(b,a){l[b]||(CKEDITOR.document.appendStyleSheet(f(b)),l[b]=1);a&&a()}function h(b){var a=b.getById(k);a||(a=b.getHead().append("style"),a.setAttribute("id",k),a.setAttribute("type","text/css"));return a}function b(b,a,d){var c,e,g;if(CKEDITOR.env.webkit)for(a=a.split("}").slice(0,-1),e=0;e<a.length;e++)a[e]=a[e].split("{");for(var f=0;f<b.length;f++)if(CKEDITOR.env.webkit)for(e=0;e<a.length;e++){g=a[e][1];for(c=0;c<
 d.length;c++)g=g.replace(d[c][0],d[c][1]);b[f].$.sheet.addRule(a[e][0],g)}else{g=a;for(c=0;c<d.length;c++)g=g.replace(d[c][0],d[c][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?b[f].$.styleSheet.cssText+=g:b[f].$.innerHTML+=g}}var l={};CKEDITOR.skin={path:e,loadPart:function(b,a){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e()+"skin.js"),function(){c(b,a)}):c(b,a)},getPath:function(b){return CKEDITOR.getUrl(f(b))},icons:{},addIcon:function(b,a,d,c){b=
 b.toLowerCase();this.icons[b]||(this.icons[b]={path:a,offset:d||0,bgsize:c||"16px"})},getIconStyle:function(b,a,d,c,e){var g;b&&(b=b.toLowerCase(),a&&(g=this.icons[b+"-rtl"]),g||(g=this.icons[b]));b=d||g&&g.path||"";c=c||g&&g.offset;e=e||g&&g.bgsize||"16px";b&&(b=b.replace(/'/g,"\\'"));return b&&"background-image:url('"+CKEDITOR.getUrl(b)+"');background-position:0 "+c+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(c){var a=
-h(CKEDITOR.document);return(this.setUiColor=function(c){this.uiColor=c;var e=CKEDITOR.skin.chameleon,f="",m="";"function"==typeof e&&(f=e(this,"editor"),m=e(this,"panel"));c=[[g,c]];b([a],f,c);b(d,m,c)}).call(this,c)}});var k="cke_ui_color",d=[],g=/\$color/g;CKEDITOR.on("instanceLoaded",function(c){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var a=c.editor;c=function(c){c=(c.data[0]||c.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!c.getById("cke_ui_color")){c=h(c);d.push(c);
-var e=a.getUiColor();e&&b([c],CKEDITOR.skin.chameleon(a,"panel"),[[g,e]])}};a.on("panelShow",c);a.on("menuShow",c);a.config.uiColor&&a.setUiColor(a.config.uiColor)}})}(),function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var e=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);e.appendTo(CKEDITOR.document.getHead());try{var f=e.getComputedStyle("border-top-color"),
-c=e.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!f||f!=c)}catch(h){CKEDITOR.env.hc=!1}e.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(e=CKEDITOR._.pending)for(delete CKEDITOR._.pending,f=0;f<e.length;f++)CKEDITOR.editor.prototype.constructor.apply(e[f][0],e[f][1]),CKEDITOR.add(e[f][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 e=function(){return function(c,e){for(var b=c.match(/[^#]./g),f=0;3>f;f++){var k=f,d;d=parseInt(b[f],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);b[k]=d}return"#"+b.join("")}}(),f={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};] "),
+h(CKEDITOR.document);return(this.setUiColor=function(c){this.uiColor=c;var e=CKEDITOR.skin.chameleon,f="",m="";"function"==typeof e&&(f=e(this,"editor"),m=e(this,"panel"));c=[[g,c]];b([a],f,c);b(d,m,c)}).call(this,c)}});var k="cke_ui_color",d=[],g=/\$color/g;CKEDITOR.on("instanceLoaded",function(c){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var a=c.editor;c=function(c){c=(c.data[0]||c.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!c.getById("cke_ui_color")){var e=h(c);
+d.push(e);a.on("destroy",function(){d=CKEDITOR.tools.array.filter(d,function(a){return e!==a})});(c=a.getUiColor())&&b([e],CKEDITOR.skin.chameleon(a,"panel"),[[g,c]])}};a.on("panelShow",c);a.on("menuShow",c);a.config.uiColor&&a.setUiColor(a.config.uiColor)}})}(),function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var e=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);
+e.appendTo(CKEDITOR.document.getHead());try{var f=e.getComputedStyle("border-top-color"),c=e.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!f||f!=c)}catch(h){CKEDITOR.env.hc=!1}e.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(e=CKEDITOR._.pending)for(delete CKEDITOR._.pending,f=0;f<e.length;f++)CKEDITOR.editor.prototype.constructor.apply(e[f][0],e[f][1]),CKEDITOR.add(e[f][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 e=function(){return function(c,e){for(var b=c.match(/[^#]./g),f=0;3>f;f++){var k=f,d;d=parseInt(b[f],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);b[k]=d}return"#"+b.join("")}}(),f={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(c,h){var b=e(c.uiColor,.4),b={id:"."+c.id,defaultBorder:e(b,-.2),toolbarElementsBorder:e(b,-.25),defaultBackground:b,lightBackground:e(b,.8),darkBackground:e(b,-.15),ckeButtonOn:e(b,.4),ckeResizer:e(b,-.4),ckeColorauto:e(b,.8),dialogBody:e(b,.7),dialogTab:e(b,.65),dialogTabSelected:"#FFF",dialogTabSelectedBorder:"#FFF",elementsPathColor:e(b,-.6),menubuttonHover:e(b,.1),menubuttonIcon:e(b,.5),menubuttonIconHover:e(b,.3)};return f[h].output(b).replace(/\[/g,"{").replace(/\]/g,"}")}}(),
 CKEDITOR.plugins.add("dialogui",{onLoad:function(){var e=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var d=[this._],a=1;a<arguments.length;a++)d.push(arguments[a]);d.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,d);return this._},f={build:function(b,d,a){return new CKEDITOR.ui.dialog.textInput(b,d,a)}},c={build:function(b,d,a){return new CKEDITOR.ui.dialog[d.type](b,d,a)}},h={isChanged:function(){return this.getValue()!=
@@ -518,8 +518,8 @@ function(a){13==a.data.getKeystroke()&&(l=!0)});k.getInputElement().on("keyup",f
 function(){f.getInputElement().on("keyup",d)},f);CKEDITOR.ui.dialog.labeledElement.call(this,b,c,a,function(){k["aria-labelledby"]=this._.labelId;this._.required&&(k["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',h,'" '],b;for(b in k)a.push(b+'\x3d"'+CKEDITOR.tools.htmlEncode(k[b])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(f._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(b,
 d,a){if(!(3>arguments.length)){var c=e.call(this,d,{"default":!!d["default"]});d.validate&&(this.validate=d.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,d,a,"span",null,null,function(){var a=CKEDITOR.tools.extend({},d,{id:d.id?d.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),e=[],f=CKEDITOR.tools.getNextId()+"_label",h={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":f};k(a);d["default"]&&(h.checked="checked");"undefined"!=typeof a.inputStyle&&(a.style=a.inputStyle);
 c.checkbox=new CKEDITOR.ui.dialog.uiElement(b,a,e,"input",null,h);e.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 e.join("")})}},radio:function(b,d,a){if(!(3>arguments.length)){e.call(this,d);this._["default"]||(this._["default"]=this._.initValue=d.items[0][1]);d.validate&&(this.validate=d.validate);var c=[],f=this;d.role="radiogroup";d.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,
-b,d,a,function(){for(var a=[],e=[],h=(d.id?d.id:CKEDITOR.tools.getNextId())+"_radio",l=0;l<d.items.length;l++){var v=d.items[l],q=void 0!==v[2]?v[2]:v[0],B=void 0!==v[1]?v[1]:v[0],x=CKEDITOR.tools.getNextId()+"_radio_input",y=x+"_label",x=CKEDITOR.tools.extend({},d,{id:x,title:null,type:null},!0),q=CKEDITOR.tools.extend({},x,{title:q},!0),A={type:"radio","class":"cke_dialog_ui_radio_input",name:h,value:B,"aria-labelledby":y},D=[];f._["default"]==B&&(A.checked="checked");k(x);k(q);"undefined"!=typeof x.inputStyle&&
-(x.style=x.inputStyle);x.keyboardFocusable=!0;c.push(new CKEDITOR.ui.dialog.uiElement(b,x,D,"input",null,A));D.push(" ");new CKEDITOR.ui.dialog.uiElement(b,q,D,"label",null,{id:y,"for":A.id},v[0]);a.push(D.join(""))}new CKEDITOR.ui.dialog.hbox(b,c,a,e);return e.join("")});this._.children=c}},button:function(b,d,a){if(arguments.length){"function"==typeof d&&(d=d(b.getParentEditor()));e.call(this,d,{disabled:d.disabled||!1});CKEDITOR.event.implementOn(this);var c=this;b.on("load",function(){var a=this.getElement();
+b,d,a,function(){for(var a=[],e=[],h=(d.id?d.id:CKEDITOR.tools.getNextId())+"_radio",l=0;l<d.items.length;l++){var v=d.items[l],q=void 0!==v[2]?v[2]:v[0],B=void 0!==v[1]?v[1]:v[0],w=CKEDITOR.tools.getNextId()+"_radio_input",y=w+"_label",w=CKEDITOR.tools.extend({},d,{id:w,title:null,type:null},!0),q=CKEDITOR.tools.extend({},w,{title:q},!0),A={type:"radio","class":"cke_dialog_ui_radio_input",name:h,value:B,"aria-labelledby":y},D=[];f._["default"]==B&&(A.checked="checked");k(w);k(q);"undefined"!=typeof w.inputStyle&&
+(w.style=w.inputStyle);w.keyboardFocusable=!0;c.push(new CKEDITOR.ui.dialog.uiElement(b,w,D,"input",null,A));D.push(" ");new CKEDITOR.ui.dialog.uiElement(b,q,D,"label",null,{id:y,"for":A.id},v[0]);a.push(D.join(""))}new CKEDITOR.ui.dialog.hbox(b,c,a,e);return e.join("")});this._.children=c}},button:function(b,d,a){if(arguments.length){"function"==typeof d&&(d=d(b.getParentEditor()));e.call(this,d,{disabled:d.disabled||!1});CKEDITOR.event.implementOn(this);var c=this;b.on("load",function(){var a=this.getElement();
 (function(){a.on("click",function(a){c.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(c.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,b,f,a,"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(b,d,a){if(!(3>arguments.length)){var c=e.call(this,d);d.validate&&(this.validate=d.validate);c.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,d,a,function(){var a=CKEDITOR.tools.extend({},d,{id:d.id?d.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),e=[],f=[],h={id:c.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};e.push('\x3cdiv class\x3d"cke_dialog_ui_input_',
 d.type,'" role\x3d"presentation"');d.width&&e.push('style\x3d"width:'+d.width+'" ');e.push("\x3e");void 0!==d.size&&(h.size=d.size);void 0!==d.multiple&&(h.multiple=d.multiple);k(a);for(var l=0,v;l<d.items.length&&(v=d.items[l]);l++)f.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==v[1]?v[1]:v[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(v[0]));"undefined"!=typeof a.inputStyle&&(a.style=a.inputStyle);c.select=new CKEDITOR.ui.dialog.uiElement(b,a,e,"select",null,
@@ -551,22 +551,22 @@ this.getInputElement();a&&a.removeAttribute("aria-invalid")}function l(a){var b=
 footer:d.getChild([3,0,1,0])}}}function k(a,b,d){this.element=b;this.focusIndex=d;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 d(a){function b(){a.layout()}var d=CKEDITOR.document.getWindow();
 d.on("resize",b);a.on("hide",function(){d.removeListener("resize",b)})}function g(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function m(a){function b(d){var k=a.getSize(),m=CKEDITOR.document.getWindow().getViewPaneSize(),l=d.data.$.screenX,n=d.data.$.screenY,r=l-c.x,q=n-c.y;c={x:l,y:n};e.x+=r;e.y+=q;a.move(e.x+h[3]<f?-h[3]:e.x-h[1]>m.width-k.width-f?m.width-k.width+("rtl"==g.lang.dir?0:h[1]):e.x,e.y+h[0]<f?-h[0]:e.y-h[2]>m.height-k.height-f?m.height-k.height+h[2]:e.y,1);d.data.preventDefault()}
 function d(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",d);if(CKEDITOR.env.ie6Compat){var a=D.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",d)}}var c=null,e=null,g=a.getParentEditor(),f=g.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(g){c={x:g.data.$.screenX,y:g.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",
-d);e=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=D.getChild(0).getFrameDocument();f.on("mousemove",b);f.on("mouseup",d)}g.data.preventDefault()},a)}function a(a){function b(d){var n="rtl"==g.lang.dir,r=l.width,q=l.height,p=r+(d.data.$.screenX-m.x)*(n?-1:1)*(a._.moved?1:2),w=q+(d.data.$.screenY-m.y)*(a._.moved?1:2),v=a._.element.getFirst(),v=n&&v.getComputedStyle("right"),x=a.getPosition();x.y+w>k.height&&(w=k.height-x.y);(n?v:x.x)+p>k.width&&(p=k.width-(n?v:x.x));if(e==CKEDITOR.DIALOG_RESIZE_WIDTH||
-e==CKEDITOR.DIALOG_RESIZE_BOTH)r=Math.max(c.minWidth||0,p-f);if(e==CKEDITOR.DIALOG_RESIZE_HEIGHT||e==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(c.minHeight||0,w-h);a.resize(r,q);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",b);n&&(n.remove(),n=null);if(CKEDITOR.env.ie6Compat){var a=D.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",b)}}var c=a.definition,e=c.resizable;
+d);e=a.getPosition();if(CKEDITOR.env.ie6Compat){var f=D.getChild(0).getFrameDocument();f.on("mousemove",b);f.on("mouseup",d)}g.data.preventDefault()},a)}function a(a){function b(d){var n="rtl"==g.lang.dir,r=l.width,q=l.height,p=r+(d.data.$.screenX-m.x)*(n?-1:1)*(a._.moved?1:2),v=q+(d.data.$.screenY-m.y)*(a._.moved?1:2),x=a._.element.getFirst(),x=n&&x.getComputedStyle("right"),w=a.getPosition();w.y+v>k.height&&(v=k.height-w.y);(n?x:w.x)+p>k.width&&(p=k.width-(n?x:w.x));if(e==CKEDITOR.DIALOG_RESIZE_WIDTH||
+e==CKEDITOR.DIALOG_RESIZE_BOTH)r=Math.max(c.minWidth||0,p-f);if(e==CKEDITOR.DIALOG_RESIZE_HEIGHT||e==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(c.minHeight||0,v-h);a.resize(r,q);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",b);n&&(n.remove(),n=null);if(CKEDITOR.env.ie6Compat){var a=D.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",b)}}var c=a.definition,e=c.resizable;
 if(e!=CKEDITOR.DIALOG_RESIZE_NONE){var g=a.getParentEditor(),f,h,k,m,l,n,r=CKEDITOR.tools.addFunction(function(c){l=a.getSize();var e=a.parts.contents;e.$.getElementsByTagName("iframe").length&&(n=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%;"\x3e\x3c/div\x3e'),e.append(n));h=l.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));f=l.width-a.parts.contents.getSize("width",
 1);m={x:c.screenX,y:c.screenY};k=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(e=D.getChild(0).getFrameDocument(),e.on("mousemove",b),e.on("mouseup",d));c.preventDefault&&c.preventDefault()});a.on("load",function(){var b="";e==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":e==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+
-b+" cke_resizer_"+g.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(g.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+r+', event )"\x3e'+("ltr"==g.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(b,1)});g.on("destroy",function(){CKEDITOR.tools.removeFunction(r)})}}function n(a){a.data.preventDefault(1)}function w(a){var b=CKEDITOR.document.getWindow(),d=a.config,c=CKEDITOR.skinName||a.config.skin,e=d.dialog_backgroundCoverColor||("moono-lisa"==c?"black":"white"),c=d.dialog_backgroundCoverOpacity,
+b+" cke_resizer_"+g.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(g.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+r+', event )"\x3e'+("ltr"==g.lang.dir?"◢":"◣")+"\x3c/div\x3e");a.parts.footer.append(b,1)});g.on("destroy",function(){CKEDITOR.tools.removeFunction(r)})}}function n(a){a.data.preventDefault(1)}function x(a){var b=CKEDITOR.document.getWindow(),d=a.config,c=CKEDITOR.skinName||a.config.skin,e=d.dialog_backgroundCoverColor||("moono-lisa"==c?"black":"white"),c=d.dialog_backgroundCoverOpacity,
 g=d.baseFloatZIndex,d=CKEDITOR.tools.genKey(e,c,g),f=A[d];f?f.show():(g=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ",CKEDITOR.env.ie6Compat?"":"background-color: "+e,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(e="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+e+";\\'\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( '"+e+"' );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"),f=CKEDITOR.dom.element.createFromHtml(g.join("")),f.setOpacity(void 0!==c?c:.5),f.on("keydown",n),f.on("keypress",n),f.on("keyup",n),f.appendTo(CKEDITOR.document.getBody()),
 A[d]=f);a.focusManager.add(f);D=f;a=function(){var a=b.getViewPaneSize();f.setStyles({width:a.width+"px",height:a.height+"px"})};var h=function(){var a=b.getScrollPosition(),d=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(d){do a=d.getPosition(),d.move(a.x,a.y);while(d=d._.parentDialog)}};y=a;b.on("resize",a);a();CKEDITOR.env.mac&&CKEDITOR.env.webkit||f.focus();if(CKEDITOR.env.ie6Compat){var k=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){k.prevScrollHandler=
-window.onscroll||function(){};window.onscroll=k},0);h()}}function u(a){D&&(a.focusManager.remove(D),a=CKEDITOR.document.getWindow(),D.hide(),a.removeListener("resize",y),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),y=null)}var t=CKEDITOR.tools.cssLength,p='\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+
+window.onscroll||function(){};window.onscroll=k},0);h()}}function u(a){D&&(a.focusManager.remove(D),a=CKEDITOR.document.getWindow(),D.hide(),D=null,a.removeListener("resize",y),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),y=null)}var t=CKEDITOR.tools.cssLength,p='\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" 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"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(d,c){function g(){var a=z._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,d=0;d<b;d++)a[d].focusIndex=d}function k(a){var b=z._.focusList;a=a||0;if(!(1>b.length)){var d=z._.currentFocusIndex;z._.tabBarMode&&0>a&&(d=0);try{b[d].getInputElement().$.blur()}catch(c){}var e=d,g=1<z._.pageCount;do{e+=a;if(g&&!z._.tabBarMode&&(e==b.length||-1==e)){z._.tabBarMode=!0;z._.tabs[z._.currentTabId][0].focus();
 z._.currentFocusIndex=-1;return}e=(e+b.length)%b.length;if(e==d)break}while(a&&!b[e].isFocusable());b[e].focus();"text"==b[e].type&&b[e].select()}}function n(a){if(z==CKEDITOR.dialog._.currentTop){var b=a.data.getKeystroke(),c="rtl"==d.lang.dir,g=[37,38,39,40];B=t=0;if(9==b||b==CKEDITOR.SHIFT+9)k(b==CKEDITOR.SHIFT+9?-1:1),B=1;else if(b==CKEDITOR.ALT+121&&!z._.tabBarMode&&1<z.getPageCount())z._.tabBarMode=!0,z._.tabs[z._.currentTabId][0].focus(),z._.currentFocusIndex=-1,B=1;else if(-1!=CKEDITOR.tools.indexOf(g,
 b)&&z._.tabBarMode)b=-1!=CKEDITOR.tools.indexOf([c?39:37,38],b)?e.call(z):f.call(z),z.selectPage(b),z._.tabs[b][0].focus(),B=1;else if(13!=b&&32!=b||!z._.tabBarMode)if(13==b)b=a.data.getTarget(),b.is("a","button","select","textarea")||b.is("input")&&"button"==b.$.type||((b=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(b.click,0,b),B=1),t=1;else if(27==b)(b=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(b.click,0,b):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),t=1;else return;else this.selectPage(this._.currentTabId),
-this._.tabBarMode=!1,this._.currentFocusIndex=-1,k(1),B=1;q(a)}}function q(a){B?a.data.preventDefault(1):t&&a.data.stopPropagation()}var p=CKEDITOR.dialog._.dialogDefinitions[c],w=CKEDITOR.tools.clone(r),v=d.config.dialog_buttonsOrder||"OS",A=d.lang.dir,u={},B,t;("OS"==v&&CKEDITOR.env.mac||"rtl"==v&&"ltr"==A||"ltr"==v&&"rtl"==A)&&w.buttons.reverse();p=CKEDITOR.tools.extend(p(d),w);p=CKEDITOR.tools.clone(p);p=new x(this,p);w=l(d);this._={editor:d,element:w.element,name:c,contentSize:{width:0,height:0},
-size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=w.parts;CKEDITOR.tools.setTimeout(function(){d.fire("ariaWidget",this.parts.contents)},0,this);w={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};w["rtl"==A?"right":"left"]=0;this.parts.dialog.setStyles(w);CKEDITOR.event.call(this);this.definition=p=CKEDITOR.fire("dialogDefinition",
-{name:c,definition:p},d).definition;if(!("removeDialogTabs"in d._)&&d.config.removeDialogTabs){w=d.config.removeDialogTabs.split(";");for(A=0;A<w.length;A++)if(v=w[A].split(":"),2==v.length){var y=v[0];u[y]||(u[y]=[]);u[y].push(v[1])}d._.removeDialogTabs=u}if(d._.removeDialogTabs&&(u=d._.removeDialogTabs[c]))for(A=0;A<u.length;A++)p.removeContents(u[A]);if(p.onLoad)this.on("load",p.onLoad);if(p.onShow)this.on("show",p.onShow);if(p.onHide)this.on("hide",p.onHide);if(p.onOk)this.on("ok",function(a){d.fire("saveSnapshot");
+this._.tabBarMode=!1,this._.currentFocusIndex=-1,k(1),B=1;q(a)}}function q(a){B?a.data.preventDefault(1):t&&a.data.stopPropagation()}var p=CKEDITOR.dialog._.dialogDefinitions[c],v=CKEDITOR.tools.clone(r),x=d.config.dialog_buttonsOrder||"OS",A=d.lang.dir,u={},B,t;("OS"==x&&CKEDITOR.env.mac||"rtl"==x&&"ltr"==A||"ltr"==x&&"rtl"==A)&&v.buttons.reverse();p=CKEDITOR.tools.extend(p(d),v);p=CKEDITOR.tools.clone(p);p=new w(this,p);v=l(d);this._={editor:d,element:v.element,name:c,contentSize:{width:0,height:0},
+size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=v.parts;CKEDITOR.tools.setTimeout(function(){d.fire("ariaWidget",this.parts.contents)},0,this);v={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};v["rtl"==A?"right":"left"]=0;this.parts.dialog.setStyles(v);CKEDITOR.event.call(this);this.definition=p=CKEDITOR.fire("dialogDefinition",
+{name:c,definition:p},d).definition;if(!("removeDialogTabs"in d._)&&d.config.removeDialogTabs){v=d.config.removeDialogTabs.split(";");for(A=0;A<v.length;A++)if(x=v[A].split(":"),2==x.length){var y=x[0];u[y]||(u[y]=[]);u[y].push(x[1])}d._.removeDialogTabs=u}if(d._.removeDialogTabs&&(u=d._.removeDialogTabs[c]))for(A=0;A<u.length;A++)p.removeContents(u[A]);if(p.onLoad)this.on("load",p.onLoad);if(p.onShow)this.on("show",p.onShow);if(p.onHide)this.on("hide",p.onHide);if(p.onOk)this.on("ok",function(a){d.fire("saveSnapshot");
 setTimeout(function(){d.fire("saveSnapshot")},0);!1===p.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(p.onCancel)this.on("cancel",function(a){!1===p.onCancel.call(this,a)&&(a.data.hide=!1)});var z=this,Q=function(a){var b=z._.contents,d=!1,c;for(c in b)for(var e in b[c])if(d=a.call(this,b[c][e]))return};this.on("ok",function(a){Q(function(b){if(b.validate){var d=b.validate(this),c="string"==typeof d||!1===d;c&&(a.data.hide=!1,a.stop());h.call(b,!c,"string"==typeof d?
 d:void 0);return c}})},this,null,0);this.on("cancel",function(a){Q(function(b){if(b.isChanged())return d.config.dialog_noConfirmCancel||confirm(d.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=k;var X=this._.element;d.focusManager.add(X,1);this.on("show",function(){X.on("keydown",n,this);if(CKEDITOR.env.gecko)X.on("keypress",q,this)});this.on("hide",
 function(){X.removeListener("keydown",n);CKEDITOR.env.gecko&&X.removeListener("keypress",q);Q(function(a){b.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",n,this,null,0)});this.on("show",function(){g();var a=1<z._.pageCount;d.config.dialog_startupFocusTab&&a?(z._.tabBarMode=!0,z._.tabs[z._.currentTabId][0].focus(),z._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=a?-1:this._.focusList.length-1,p.onFocus?
@@ -575,7 +575,7 @@ this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,k(1)),a.dat
 a&&this._.contentSize.height==b||(CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x=CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a,height:b})}}(),getSize:function(){var a=this._.element.getFirst();
 return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,d){var c=this._.element.getFirst(),e="rtl"==this._.editor.lang.dir,g="fixed"==c.getComputedStyle("position");CKEDITOR.env.ie&&c.setStyle("zoom","100%");g&&this._.position&&this._.position.x==a&&this._.position.y==b||(this._.position={x:a,y:b},g||(g=CKEDITOR.document.getWindow().getScrollPosition(),a+=g.x,b+=g.y),e&&(g=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-g.width-a),b={top:(0<b?b:0)+"px"},
 b[e?"right":"left"]=(0<a?a:0)+"px",c.setStyles(b),d&&(this._.moved=1))},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;a.getParent()&&a.getParent().equals(CKEDITOR.document.getBody())?a.setStyle("display","block"):a.appendTo(CKEDITOR.document.getBody());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=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,w(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/
+this._.currentTabId&&this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,x(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/
 2),CKEDITOR.dialog._.currentTop=this);a.on("keydown",J);a.on("keyup",E);this._.hasFocus=!1;for(var c in b.contents)if(b.contents[c]){var a=b.contents[c],e=this._.tabs[a.id],g=a.requiredContent,f=0;if(e){for(var h in this._.contents[a.id]){var k=this._.contents[a.id][h];"hbox"!=k.type&&"vbox"!=k.type&&k.getInputElement()&&(k.requiredContent&&!this._.editor.activeFilter.check(k.requiredContent)?k.disable():(k.enable(),f++))}!f||g&&!this._.editor.activeFilter.check(g)?e[0].addClass("cke_dialog_tab_disabled"):
 e[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();d(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),d=CKEDITOR.document.getWindow().getViewPaneSize(),c=
 (d.width-b.width)/2,e=(d.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<e?e:0)>d.height||b.width+(0<c?c:0)>d.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:c,this._.moved?this._.position.y:e)},foreach:function(a){for(var b in this._.contents)for(var d in this._.contents[b])a.call(this,this._.contents[b][d]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),
@@ -593,14 +593,14 @@ CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.
 "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(d){return a(d,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(d){return a(d,b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);
 var r={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},v=function(a,b,d){for(var c=0,e;e=a[c];c++)if(e.id==b||d&&e[d]&&(e=v(e[d],b,d)))return e;return null},q=function(a,b,d,c,e){if(d){for(var g=0,f;f=a[g];g++){if(f.id==d)return a.splice(g,0,b),b;if(c&&f[c]&&(f=q(f[c],b,d,c,!0)))return f}if(e)return null}a.push(b);return b},B=function(a,b,d){for(var c=0,e;e=a[c];c++){if(e.id==b)return a.splice(c,1);if(d&&e[d]&&(e=B(e[d],
-b,d)))return e}return null},x=function(a,b){this.dialog=a;for(var d=b.contents,c=0,e;e=d[c];c++)d[c]=e&&new g(a,e);CKEDITOR.tools.extend(this,b)};x.prototype={getContents:function(a){return v(this.contents,a)},getButton:function(a){return v(this.buttons,a)},addContents:function(a,b){return q(this.contents,a,b)},addButton:function(a,b){return q(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};g.prototype={get:function(a){return v(this.elements,
+b,d)))return e}return null},w=function(a,b){this.dialog=a;for(var d=b.contents,c=0,e;e=d[c];c++)d[c]=e&&new g(a,e);CKEDITOR.tools.extend(this,b)};w.prototype={getContents:function(a){return v(this.contents,a)},getButton:function(a){return v(this.buttons,a)},addContents:function(a,b){return q(this.contents,a,b)},addButton:function(a,b){return q(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};g.prototype={get:function(a){return v(this.elements,
 a,"children")},add:function(a,b){return q(this.elements,a,b,"children")},remove:function(a){B(this.elements,a,"children")}};var y,A={},D,z={},J=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,c=a.data.$.shiftKey,e=String.fromCharCode(a.data.$.keyCode);(b=z[(b?"CTRL+":"")+(d?"ALT+":"")+(c?"SHIFT+":"")+e])&&b.length&&(b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},E=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,d=a.data.$.altKey,
 c=a.data.$.shiftKey,e=String.fromCharCode(a.data.$.keyCode);(b=z[(b?"CTRL+":"")+(d?"ALT+":"")+(c?"SHIFT+":"")+e])&&b.length&&(b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),a.data.preventDefault()))},H=function(a,b,d,c,e){(z[d]||(z[d]=[])).push({uiElement:a,dialog:b,key:d,keyup:e||a.accessKeyUp,keydown:c||a.accessKeyDown})},F=function(a){for(var b in z){for(var d=z[b],c=d.length-1;0<=c;c--)d[c].dialog!=a&&d[c].uiElement!=a||d.splice(c,1);0===d.length&&delete z[b]}},G=function(a,
 b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},L=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,d,c,e,g,f){if(!(4>arguments.length)){var h=(c.call?c(b):c)||"div",k=["\x3c",h," "],m=(e&&e.call?e(b):e)||{},l=(g&&g.call?g(b):g)||{},n=(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)&&(m.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 p=l["class"]&&l["class"].split?l["class"].split(" "):[],r=0;r<p.length;r++)p[r]&&(q[p[r]]=1);p=[];for(r in q)p.push(r);l["class"]=p.join(" ");b.title&&(l.title=b.title);q=(b.style||"").split(";");b.align&&(p=b.align,m["margin-left"]="left"==p?0:"auto",m["margin-right"]="right"==p?0:"auto");for(r in m)q.push(r+":"+m[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)k.push(r+'\x3d"'+CKEDITOR.tools.htmlEncode(l[r])+'" ');k.push("\x3e",n,"\x3c/",h,"\x3e");d.push(k.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(d){a.call(this,b.setValue.call(this,d))}}));"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&&H(this,a,"CTRL+"+b.accessKey);var w=this;a.on("load",function(){var b=w.getInputElement();if(b){var d=w.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;w.fire("focus");
-d&&this.addClass(d)});b.on("blur",function(){w.fire("blur");d&&this.removeClass(d)})}});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=w.focusIndex}))}},hbox:function(a,b,d,c,e){if(!(4>arguments.length)){this._||(this._={});var g=this._.children=b,f=e&&e.widths||null,h=e&&e.height||null,k,m={role:"presentation"};e&&e.align&&(m.align=e.align);CKEDITOR.ui.dialog.uiElement.call(this,
+(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&&H(this,a,"CTRL+"+b.accessKey);var v=this;a.on("load",function(){var b=v.getInputElement();if(b){var d=v.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;v.fire("focus");
+d&&this.addClass(d)});b.on("blur",function(){v.fire("blur");d&&this.removeClass(d)})}});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=v.focusIndex}))}},hbox:function(a,b,d,c,e){if(!(4>arguments.length)){this._||(this._={});var g=this._.children=b,f=e&&e.widths||null,h=e&&e.height||null,k,m={role:"presentation"};e&&e.align&&(m.align=e.align);CKEDITOR.ui.dialog.uiElement.call(this,
 a,e||{type:"hbox"},c,"table",{},m,function(){var a=['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(k=0;k<d.length;k++){var b="cke_dialog_ui_hbox_child",c=[];0===k&&(b="cke_dialog_ui_hbox_first");k==d.length-1&&(b="cke_dialog_ui_hbox_last");a.push('\x3ctd class\x3d"',b,'" role\x3d"presentation" ');f?f[k]&&c.push("width:"+t(f[k])):c.push("width:"+Math.floor(100/d.length)+"%");h&&c.push("height:"+t(h));e&&void 0!==e.padding&&c.push("padding:"+t(e.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&
 g[k].align&&c.push("text-align:"+g[k].align);0<c.length&&a.push('style\x3d"'+c.join("; ")+'" ');a.push("\x3e",d[k],"\x3c/td\x3e")}a.push("\x3c/tr\x3e\x3c/tbody\x3e");return a.join("")})}},vbox:function(a,b,d,c,e){if(!(3>arguments.length)){this._||(this._={});var g=this._.children=b,f=e&&e.width||null,h=e&&e.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,e||{type:"vbox"},c,"div",null,{role:"presentation"},function(){var b=['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" '];
 b.push('style\x3d"');e&&e.expand&&b.push("height:100%;");b.push("width:"+t(f||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align\x3d"',CKEDITOR.tools.htmlEncode(e&&e.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("\x3e\x3ctbody\x3e");for(var c=0;c<d.length;c++){var k=[];b.push('\x3ctr\x3e\x3ctd role\x3d"presentation" ');f&&k.push("width:"+t(f||"100%"));h?k.push("height:"+t(h[c])):e&&e.expand&&k.push("height:"+Math.floor(100/d.length)+"%");
@@ -613,13 +613,13 @@ f,g,d,b)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("
 g=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue():a[0],d,c=CKEDITOR.VALIDATE_AND,e=[],g;for(g=0;g<a.length;g++)if("function"==typeof a[g])e.push(a[g]);else break;g<a.length&&"string"==typeof a[g]&&(d=a[g],g++);g<a.length&&"number"==typeof a[g]&&(c=a[g]);var f=c==CKEDITOR.VALIDATE_AND?!0:!1;for(g=0;g<e.length;g++)f=c==CKEDITOR.VALIDATE_AND?f&&
 e[g](b):f||e[g](b);return f?!0:d}},regex:function(a,b){return function(d){d=this&&this.getValue?this.getValue():d;return a.test(d)?!0:b}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,a)},number:function(a){return this.regex(d,a)},cssLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return c.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},
 a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var d in A)A[d].remove();A={}}a=a.editor._.storedDialogs;for(var c in a)a[c].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var d=null,c=CKEDITOR.dialog._.dialogDefinitions[a];
-null===CKEDITOR.dialog._.currentTop&&w(this);if("function"==typeof c)d=this._.storedDialogs||(this._.storedDialogs={}),d=d[a]||(d[a]=new CKEDITOR.dialog(this,a)),b&&b.call(d,d),d.show();else{if("failed"==c)throw u(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof c&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,
+null===CKEDITOR.dialog._.currentTop&&x(this);if("function"==typeof c)d=this._.storedDialogs||(this._.storedDialogs={}),d=d[a]||(d[a]=new CKEDITOR.dialog(this,a)),b&&b.call(d,d),d.show();else{if("failed"==c)throw u(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof c&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,
 b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return d}})}(),CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(e){e.on("doubleclick",function(f){f.data.dialog&&e.openDialog(f.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(e){var f=this;e.addCommand("a11yHelp",{exec:function(){var c=e.langCode,c=f.availableLangs[c]?c:f.availableLangs[c.replace(/-.*/,"")]?c.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(f.path+"dialogs/lang/"+c+".js"),function(){e.lang.a11yhelp=f.langEntries[c];e.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},
 readOnly:1,canUndo:!1});e.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");e.on("ariaEditorHelpLabel",function(c){c.data.label=e.lang.common.editorHelp})}})}(),CKEDITOR.plugins.add("about",{requires:"dialog",init:function(e){var f=e.addCommand("about",new CKEDITOR.dialogCommand("about"));f.modes={wysiwyg:1,source:1};f.canUndo=!1;f.readOnly=1;e.ui.addButton&&e.ui.addButton("About",{label:e.lang.about.dlgTitle,command:"about",toolbar:"about"});
 CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}}),"use strict",function(){function e(e){function c(){l=e.document;k=l[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();d=CKEDITOR.env.quirks?l.getBody():l.getDocumentElement();var a=CKEDITOR.env.quirks?d:d.findOne("body");a&&(a.setStyle("height","auto"),a.setStyle("min-height",CKEDITOR.env.safari?"0%":"auto"));g=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",l)}function h(){w&&d.setStyle("overflow-y","hidden");var c=e.window.getViewPaneSize().height,h;k.append(g);h=g.getDocumentPosition(l).y+g.$.offsetHeight;g.remove();h+=m;h=Math.max(h,a);h=Math.min(h,n);h!=c&&b!=h&&(h=e.fire("autoGrow",{currentHeight:c,newHeight:h}).newHeight,e.resize(e.container.getStyle("width"),h,!0),b=h);w||(h<n&&d.$.scrollHeight>d.$.clientHeight?d.setStyle("overflow-y","hidden"):d.removeStyle("overflow-y"))}var b,l,k,d,g,m=e.config.autoGrow_bottomSpace||
-0,a=void 0!==e.config.autoGrow_minHeight?e.config.autoGrow_minHeight:200,n=e.config.autoGrow_maxHeight||Infinity,w=!e.config.autoGrow_maxHeight;e.addCommand("autogrow",{exec:h,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var u={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},t;for(t in u)e.on(t,function(a){"wysiwyg"==a.editor.mode&&setTimeout(function(){var a=e.getCommand("maximize");!e.window||a&&a.state==CKEDITOR.TRISTATE_ON?b=null:(h(),w||h())},100)});e.on("afterCommandExec",
+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",l)}function h(){x&&d.setStyle("overflow-y","hidden");var c=e.window.getViewPaneSize().height,h;k.append(g);h=g.getDocumentPosition(l).y+g.$.offsetHeight;g.remove();h+=m;h=Math.max(h,a);h=Math.min(h,n);h!=c&&b!=h&&(h=e.fire("autoGrow",{currentHeight:c,newHeight:h}).newHeight,e.resize(e.container.getStyle("width"),h,!0),b=h);x||(h<n&&d.$.scrollHeight>d.$.clientHeight?d.setStyle("overflow-y","hidden"):d.removeStyle("overflow-y"))}var b,l,k,d,g,m=e.config.autoGrow_bottomSpace||
+0,a=void 0!==e.config.autoGrow_minHeight?e.config.autoGrow_minHeight:200,n=e.config.autoGrow_maxHeight||Infinity,x=!e.config.autoGrow_maxHeight;e.addCommand("autogrow",{exec:h,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var u={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},t;for(t in u)e.on(t,function(a){"wysiwyg"==a.editor.mode&&setTimeout(function(){var a=e.getCommand("maximize");!e.window||a&&a.state==CKEDITOR.TRISTATE_ON?b=null:(h(),x||h())},100)});e.on("afterCommandExec",
 function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?d.removeStyle("overflow-y"):h())});e.on("contentDom",c);c();e.config.autoGrow_onStartup&&e.editable().isVisible()&&e.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(f){if(f.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)f.on("instanceReady",function(){f.editable().isInline()?f.ui.space("contents").setStyle("height","auto"):e(f)})}})}(),CKEDITOR.plugins.add("basicstyles",{init:function(e){var f=
 0,c=function(b,d,c,m){if(m){m=new CKEDITOR.style(m);var a=h[c];a.unshift(m);e.attachStyleStateChange(m,function(a){!e.readOnly&&e.getCommand(c).setState(a)});e.addCommand(c,new CKEDITOR.styleCommand(m,{contentForms:a}));e.ui.addButton&&e.ui.addButton(b,{label:d,command:c,toolbar:"basicstyles,"+(f+=10)})}},h={bold:["strong","b",["span",function(b){b=b.styles["font-weight"];return"bold"==b||700<=+b}]],italic:["em","i",["span",function(b){return"italic"==b.styles["font-style"]}]],underline:["u",["span",
 function(b){return"underline"==b.styles["text-decoration"]}]],strike:["s","strike",["span",function(b){return"line-through"==b.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},b=e.config,l=e.lang.basicstyles;c("Bold",l.bold,"bold",b.coreStyles_bold);c("Italic",l.italic,"italic",b.coreStyles_italic);c("Underline",l.underline,"underline",b.coreStyles_underline);c("Strike",l.strike,"strike",b.coreStyles_strike);c("Subscript",l.subscript,"subscript",b.coreStyles_subscript);c("Superscript",
@@ -640,28 +640,28 @@ e.append(b);b=CKEDITOR.dom.element.createFromHtml('\x3ca class\x3d"cke_notificat
 c.setStyle("width",this._getPercentageProgress());return c},_getPercentageProgress:function(){return Math.round(100*(this.progress||0))+"%"},_hideAfterTimeout:function(){var c=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&&(c._hideTimeoutId=setTimeout(function(){c.hide()},e))}};f.prototype=
 {add:function(c){this.notifications.push(c);this.element.append(c.element);1==this.element.getChildCount()&&(CKEDITOR.document.getBody().append(this.element),this._attachListeners());this._layout()},remove:function(c){var e=CKEDITOR.tools.indexOf(this.notifications,c);0>e||(this.notifications.splice(e,1),c.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var c=this.editor,e=c.config,b=new CKEDITOR.dom.element("div");b.addClass("cke_notifications_area");
 b.setAttribute("id","cke_notifications_area_"+c.name);b.setStyle("z-index",e.baseFloatZIndex-2);return b},_attachListeners:function(){var c=CKEDITOR.document.getWindow(),e=this.editor;c.on("scroll",this._uiBuffer.input);c.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 c=CKEDITOR.document.getWindow(),e=this.editor;c.removeListener("scroll",this._uiBuffer.input);
-c.removeListener("resize",this._uiBuffer.input);e.removeListener("change",this._changeBuffer.input);e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function c(){e.setStyle("left",v(q+f.width-n-w))}var e=this.element,b=this.editor,f=b.ui.contentsElement.getClientRect(),k=b.ui.contentsElement.getDocumentPosition(),d,g,m=e.getClientRect(),a,n=this._notificationWidth,w=this._notificationMargin;a=CKEDITOR.document.getWindow();var u=a.getScrollPosition(),
-t=a.getViewPaneSize(),p=CKEDITOR.document.getBody(),r=p.getDocumentPosition(),v=CKEDITOR.tools.cssLength;n&&w||(a=this.element.getChild(0),n=this._notificationWidth=a.getClientRect().width,w=this._notificationMargin=parseInt(a.getComputedStyle("margin-left"),10)+parseInt(a.getComputedStyle("margin-right"),10));b.toolbar&&(d=b.ui.space("top"),g=d.getClientRect());d&&d.isVisible()&&g.bottom>f.top&&g.bottom<f.bottom-m.height?e.setStyles({position:"fixed",top:v(g.bottom)}):0<f.top?e.setStyles({position:"absolute",
-top:v(k.y)}):k.y+f.height-m.height>u.y?e.setStyles({position:"fixed",top:0}):e.setStyles({position:"absolute",top:v(k.y+f.height-m.height)});var q="fixed"==e.getStyle("position")?f.left:"static"!=p.getComputedStyle("position")?k.x-r.x:k.x;f.width<n+w?k.x+n+w>u.x+t.width?c():e.setStyle("left",v(q)):k.x+n+w>u.x+t.width?e.setStyle("left",v(q)):k.x+f.width/2+n/2+w>u.x+t.width?e.setStyle("left",v(q-k.x+u.x+t.width-n-w)):0>f.left+f.width-n-w?c():0>f.left+f.width/2-n/2?e.setStyle("left",v(q-k.x+u.x)):e.setStyle("left",
-v(q+f.width/2-n/2-w/2))}};CKEDITOR.plugins.notification=e}(),function(){var e='\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&&(e+=
+c.removeListener("resize",this._uiBuffer.input);e.removeListener("change",this._changeBuffer.input);e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function c(){e.setStyle("left",v(q+f.width-n-x))}var e=this.element,b=this.editor,f=b.ui.contentsElement.getClientRect(),k=b.ui.contentsElement.getDocumentPosition(),d,g,m=e.getClientRect(),a,n=this._notificationWidth,x=this._notificationMargin;a=CKEDITOR.document.getWindow();var u=a.getScrollPosition(),
+t=a.getViewPaneSize(),p=CKEDITOR.document.getBody(),r=p.getDocumentPosition(),v=CKEDITOR.tools.cssLength;n&&x||(a=this.element.getChild(0),n=this._notificationWidth=a.getClientRect().width,x=this._notificationMargin=parseInt(a.getComputedStyle("margin-left"),10)+parseInt(a.getComputedStyle("margin-right"),10));b.toolbar&&(d=b.ui.space("top"),g=d.getClientRect());d&&d.isVisible()&&g.bottom>f.top&&g.bottom<f.bottom-m.height?e.setStyles({position:"fixed",top:v(g.bottom)}):0<f.top?e.setStyles({position:"absolute",
+top:v(k.y)}):k.y+f.height-m.height>u.y?e.setStyles({position:"fixed",top:0}):e.setStyles({position:"absolute",top:v(k.y+f.height-m.height)});var q="fixed"==e.getStyle("position")?f.left:"static"!=p.getComputedStyle("position")?k.x-r.x:k.x;f.width<n+x?k.x+n+x>u.x+t.width?c():e.setStyle("left",v(q)):k.x+n+x>u.x+t.width?e.setStyle("left",v(q)):k.x+f.width/2+n/2+x>u.x+t.width?e.setStyle("left",v(q-k.x+u.x+t.width-n-x)):0>f.left+f.width-n-x?c():0>f.left+f.width/2-n/2?e.setStyle("left",v(q-k.x+u.x)):e.setStyle("left",
+v(q+f.width/2-n/2-x/2))}};CKEDITOR.plugins.notification=e}(),function(){var e='\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&&(e+=
 ' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(e+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var f="";CKEDITOR.env.ie&&(f='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var e=e+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"'+f+'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{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',c=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),h=CKEDITOR.addTemplate("button",e);CKEDITOR.plugins.add("button",{beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_BUTTON,
 CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(b){CKEDITOR.tools.extend(this,b,{title:b.label,click:b.click||function(c){c.execCommand(b.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(b){return new CKEDITOR.ui.button(b)}};CKEDITOR.ui.button.prototype={render:function(b,e){function f(){var a=b.mode;a&&(a=this.modes[a]?void 0!==d[a]?d[a]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,a=b.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:
-a,this.setState(a),this.refresh&&this.refresh())}var d=null,g=CKEDITOR.env,m=this._.id=CKEDITOR.tools.getNextId(),a="",n=this.command,w,u,t;this._.editor=b;var p={id:m,button:this,editor:b,focus:function(){CKEDITOR.document.getById(m).focus()},execute:function(){this.button.click(b)},attach:function(a){this.button.attach(a)}},r=CKEDITOR.tools.addFunction(function(a){if(p.onkey)return a=new CKEDITOR.dom.event(a),!1!==p.onkey(p,a.getKeystroke())}),v=CKEDITOR.tools.addFunction(function(a){var b;p.onfocus&&
-(b=!1!==p.onfocus(p,new CKEDITOR.dom.event(a)));return b}),q=0;p.clickFn=w=CKEDITOR.tools.addFunction(function(){q&&(b.unlockSelection(1),q=0);p.execute();g.iOS&&b.focus()});this.modes?(d={},b.on("beforeModeUnload",function(){b.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(d[b.mode]=this._.state)},this),b.on("activeFilterChange",f,this),b.on("mode",f,this),!this.readOnly&&b.on("readOnly",f,this)):n&&(n=b.getCommand(n))&&(n.on("state",function(){this.setState(n.state)},this),a+=n.state==CKEDITOR.TRISTATE_ON?
-"on":n.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");var B;if(this.directional)b.on("contentDirChanged",function(a){var d=CKEDITOR.document.getById(this._.id),c=d.getFirst();a=a.data;a!=b.lang.dir?d.addClass("cke_"+a):d.removeClass("cke_ltr").removeClass("cke_rtl");c.setAttribute("style",CKEDITOR.skin.getIconStyle(B,"rtl"==a,this.icon,this.iconOffset))},this);n?(u=b.getCommandKeystroke(n))&&(t=CKEDITOR.tools.keystrokeToString(b.lang.common.keyboard,u)):a+="off";u=this.name||this.command;var x=
-null,y=this.icon;B=u;this.icon&&!/\./.test(this.icon)?(B=this.icon,y=null):(this.icon&&(x=this.icon),CKEDITOR.env.hidpi&&this.iconHiDpi&&(x=this.iconHiDpi));x?(CKEDITOR.skin.addIcon(x,x),y=null):x=B;a={id:m,name:u,iconName:B,label:this.label,cls:(this.hasArrow?"cke_button_expandable ":"")+(this.className||""),state:a,ariaDisabled:"disabled"==a?"true":"false",title:this.title+(t?" ("+t.display+")":""),ariaShortcut:t?b.lang.common.keyboardShortcut+" "+t.aria:"",titleJs:g.gecko&&!g.hc?"":(this.title||
-"").replace("'",""),hasArrow:"string"===typeof this.hasArrow&&this.hasArrow||(this.hasArrow?"true":"false"),keydownFn:r,focusFn:v,clickFn:w,style:CKEDITOR.skin.getIconStyle(x,"rtl"==b.lang.dir,y,this.iconOffset),arrowHtml:this.hasArrow?c.output():""};h.output(a,e);if(this.onRender)this.onRender();return p},setState:function(b){if(this._.state==b)return!1;this._.state=b;var c=CKEDITOR.document.getById(this._.id);return c?(c.setState(b,"cke_button"),c.setAttribute("aria-disabled",b==CKEDITOR.TRISTATE_DISABLED),
+a,this.setState(a),this.refresh&&this.refresh())}var d=null,g=CKEDITOR.env,m=this._.id=CKEDITOR.tools.getNextId(),a="",n=this.command,x,u,t;this._.editor=b;var p={id:m,button:this,editor:b,focus:function(){CKEDITOR.document.getById(m).focus()},execute:function(){this.button.click(b)},attach:function(a){this.button.attach(a)}},r=CKEDITOR.tools.addFunction(function(a){if(p.onkey)return a=new CKEDITOR.dom.event(a),!1!==p.onkey(p,a.getKeystroke())}),v=CKEDITOR.tools.addFunction(function(a){var b;p.onfocus&&
+(b=!1!==p.onfocus(p,new CKEDITOR.dom.event(a)));return b}),q=0;p.clickFn=x=CKEDITOR.tools.addFunction(function(){q&&(b.unlockSelection(1),q=0);p.execute();g.iOS&&b.focus()});this.modes?(d={},b.on("beforeModeUnload",function(){b.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(d[b.mode]=this._.state)},this),b.on("activeFilterChange",f,this),b.on("mode",f,this),!this.readOnly&&b.on("readOnly",f,this)):n&&(n=b.getCommand(n))&&(n.on("state",function(){this.setState(n.state)},this),a+=n.state==CKEDITOR.TRISTATE_ON?
+"on":n.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");var B;if(this.directional)b.on("contentDirChanged",function(a){var d=CKEDITOR.document.getById(this._.id),c=d.getFirst();a=a.data;a!=b.lang.dir?d.addClass("cke_"+a):d.removeClass("cke_ltr").removeClass("cke_rtl");c.setAttribute("style",CKEDITOR.skin.getIconStyle(B,"rtl"==a,this.icon,this.iconOffset))},this);n?(u=b.getCommandKeystroke(n))&&(t=CKEDITOR.tools.keystrokeToString(b.lang.common.keyboard,u)):a+="off";u=this.name||this.command;var w=
+null,y=this.icon;B=u;this.icon&&!/\./.test(this.icon)?(B=this.icon,y=null):(this.icon&&(w=this.icon),CKEDITOR.env.hidpi&&this.iconHiDpi&&(w=this.iconHiDpi));w?(CKEDITOR.skin.addIcon(w,w),y=null):w=B;a={id:m,name:u,iconName:B,label:this.label,cls:(this.hasArrow?"cke_button_expandable ":"")+(this.className||""),state:a,ariaDisabled:"disabled"==a?"true":"false",title:this.title+(t?" ("+t.display+")":""),ariaShortcut:t?b.lang.common.keyboardShortcut+" "+t.aria:"",titleJs:g.gecko&&!g.hc?"":(this.title||
+"").replace("'",""),hasArrow:"string"===typeof this.hasArrow&&this.hasArrow||(this.hasArrow?"true":"false"),keydownFn:r,focusFn:v,clickFn:x,style:CKEDITOR.skin.getIconStyle(w,"rtl"==b.lang.dir,y,this.iconOffset),arrowHtml:this.hasArrow?c.output():""};h.output(a,e);if(this.onRender)this.onRender();return p},setState:function(b){if(this._.state==b)return!1;this._.state=b;var c=CKEDITOR.document.getById(this._.id);return c?(c.setState(b,"cke_button"),c.setAttribute("aria-disabled",b==CKEDITOR.TRISTATE_DISABLED),
 this.hasArrow?c.setAttribute("aria-expanded",b==CKEDITOR.TRISTATE_ON):b===CKEDITOR.TRISTATE_ON?c.setAttribute("aria-pressed",!0):c.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(b){if(this._.feature)return this._.feature;var c=this;this.allowedContent||this.requiredContent||!this.command||(c=b.getCommand(this.command)||c);return this._.feature=c}};CKEDITOR.ui.prototype.addButton=function(b,c){this.add(b,CKEDITOR.UI_BUTTON,c)}}(),function(){function e(b){function c(){for(var a=
 e(),g=CKEDITOR.tools.clone(b.config.toolbarGroups)||f(b),h=0;h<g.length;h++){var m=g[h];if("/"!=m){"string"==typeof m&&(m=g[h]={name:m});var l,r=m.groups;if(r)for(var v=0;v<r.length;v++)l=r[v],(l=a[l])&&d(m,l);(l=a[m.name])&&d(m,l)}}return g}function e(){var a={},d,c,g;for(d in b.ui.items)c=b.ui.items[d],g=c.toolbar||"others",g=g.split(","),c=g[0],g=parseInt(g[1]||-1,10),a[c]||(a[c]=[]),a[c].push({name:d,order:g});for(c in a)a[c]=a[c].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 a}function d(a,d){if(d.length){a.items?a.items.push(b.ui.create("-")):a.items=[];for(var c;c=d.shift();)c="string"==typeof c?c:c.name,h&&-1!=CKEDITOR.tools.indexOf(h,c)||(c=b.ui.create(c))&&b.addFeature(c)&&a.items.push(c)}}function g(a){var b=[],c,e,g;for(c=0;c<a.length;++c)e=a[c],g={},"/"==e?b.push(e):CKEDITOR.tools.isArray(e)?(d(g,CKEDITOR.tools.clone(e)),b.push(g)):e.items&&(d(g,CKEDITOR.tools.clone(e.items)),g.name=e.name,b.push(g));return b}var h=b.config.removeButtons,
 h=h&&h.split(","),a=b.config.toolbar;"string"==typeof a&&(a=b.config["toolbar_"+a]);return b.toolbar=a?g(a):c()}function f(b){return b._.toolbarGroups||(b._.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 c=function(){this.toolbars=[];this.focusCommandExecuted=!1};c.prototype.focus=function(){for(var b=0,c;c=this.toolbars[b++];)for(var e=0,d;d=c.items[e++];)if(d.focus){d.focus();return}};var h={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(b){b.toolbox&&(b.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){b.toolbox.focus()},100):b.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",
-{requires:"button",init:function(b){var f,k=function(d,c){var e,a="rtl"==b.lang.dir,h=b.config.toolbarGroupCycling,w=a?37:39,a=a?39:37,h=void 0===h||h;switch(c){case 9:case CKEDITOR.SHIFT+9:for(;!e||!e.items.length;)if(e=9==c?(e?e.next:d.toolbar.next)||b.toolbox.toolbars[0]:(e?e.previous:d.toolbar.previous)||b.toolbox.toolbars[b.toolbox.toolbars.length-1],e.items.length)for(d=e.items[f?e.items.length-1:0];d&&!d.focus;)(d=f?d.previous:d.next)||(e=0);d&&d.focus();return!1;case w:e=d;do e=e.next,!e&&
-h&&(e=d.toolbar.items[0]);while(e&&!e.focus);e?e.focus():k(d,9);return!1;case 40:return d.button&&d.button.hasArrow?d.execute():k(d,40==c?w:a),!1;case a:case 38:e=d;do e=e.previous,!e&&h&&(e=d.toolbar.items[d.toolbar.items.length-1]);while(e&&!e.focus);e?e.focus():(f=1,k(d,CKEDITOR.SHIFT+9),f=0);return!1;case 27:return b.focus(),!1;case 13:case 32:return d.execute(),!1}return!0};b.on("uiSpace",function(d){if(d.data.space==b.config.toolbarLocation){d.removeListener();b.toolbox=new c;var g=CKEDITOR.tools.getNextId(),
+{requires:"button",init:function(b){var f,k=function(d,c){var e,a="rtl"==b.lang.dir,h=b.config.toolbarGroupCycling,x=a?37:39,a=a?39:37,h=void 0===h||h;switch(c){case 9:case CKEDITOR.SHIFT+9:for(;!e||!e.items.length;)if(e=9==c?(e?e.next:d.toolbar.next)||b.toolbox.toolbars[0]:(e?e.previous:d.toolbar.previous)||b.toolbox.toolbars[b.toolbox.toolbars.length-1],e.items.length)for(d=e.items[f?e.items.length-1:0];d&&!d.focus;)(d=f?d.previous:d.next)||(e=0);d&&d.focus();return!1;case x:e=d;do e=e.next,!e&&
+h&&(e=d.toolbar.items[0]);while(e&&!e.focus);e?e.focus():k(d,9);return!1;case 40:return d.button&&d.button.hasArrow?d.execute():k(d,40==c?x:a),!1;case a:case 38:e=d;do e=e.previous,!e&&h&&(e=d.toolbar.items[d.toolbar.items.length-1]);while(e&&!e.focus);e?e.focus():(f=1,k(d,CKEDITOR.SHIFT+9),f=0);return!1;case 27:return b.focus(),!1;case 13:case 32:return d.execute(),!1}return!0};b.on("uiSpace",function(d){if(d.data.space==b.config.toolbarLocation){d.removeListener();b.toolbox=new c;var g=CKEDITOR.tools.getNextId(),
 f=['\x3cspan id\x3d"',g,'" class\x3d"cke_voice_label"\x3e',b.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+b.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',g,'" onmousedown\x3d"return false;"\x3e'],g=!1!==b.config.toolbarStartupExpanded,a,h;b.config.toolbarCanCollapse&&b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&f.push('\x3cspan class\x3d"cke_toolbox_main"'+(g?"\x3e":' style\x3d"display:none"\x3e'));for(var l=b.toolbox.toolbars,u=e(b),t=u.length,
-p=0;p<t;p++){var r,v=0,q,B=u[p],x="/"!==B&&("/"===u[p+1]||p==t-1),y;if(B)if(a&&(f.push("\x3c/span\x3e"),h=a=0),"/"===B)f.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{y=B.items||B;for(var A=0;A<y.length;A++){var D=y[A],z;if(D){var J=function(a){a=a.render(b,f);E=v.items.push(a)-1;0<E&&(a.previous=v.items[E-1],a.previous.next=a);a.toolbar=v;a.onkey=k;a.onfocus=function(){b.toolbox.focusCommandExecuted||b.focus()}};if(D.type==CKEDITOR.UI_SEPARATOR)h=a&&D;else{z=!1!==D.canGroup;
-if(!v){r=CKEDITOR.tools.getNextId();v={id:r,items:[]};q=B.name&&(b.lang.toolbar.toolbarGroups[B.name]||B.name);f.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(x?' cke_toolbar_last"':'"'),q?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');q&&f.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',q,"\x3c/span\x3e");f.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var E=l.push(v)-1;0<E&&(v.previous=l[E-1],v.previous.next=v)}z?a||(f.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),
+p=0;p<t;p++){var r,v=0,q,B=u[p],w="/"!==B&&("/"===u[p+1]||p==t-1),y;if(B)if(a&&(f.push("\x3c/span\x3e"),h=a=0),"/"===B)f.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{y=B.items||B;for(var A=0;A<y.length;A++){var D=y[A],z;if(D){var J=function(a){a=a.render(b,f);E=v.items.push(a)-1;0<E&&(a.previous=v.items[E-1],a.previous.next=a);a.toolbar=v;a.onkey=k;a.onfocus=function(){b.toolbox.focusCommandExecuted||b.focus()}};if(D.type==CKEDITOR.UI_SEPARATOR)h=a&&D;else{z=!1!==D.canGroup;
+if(!v){r=CKEDITOR.tools.getNextId();v={id:r,items:[]};q=B.name&&(b.lang.toolbar.toolbarGroups[B.name]||B.name);f.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(w?' cke_toolbar_last"':'"'),q?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');q&&f.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',q,"\x3c/span\x3e");f.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var E=l.push(v)-1;0<E&&(v.previous=l[E-1],v.previous.next=v)}z?a||(f.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),
 a=1):a&&(f.push("\x3c/span\x3e"),a=0);h&&(J(h),h=0);J(D)}}}a&&(f.push("\x3c/span\x3e"),h=a=0);v&&f.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}b.config.toolbarCanCollapse&&f.push("\x3c/span\x3e");if(b.config.toolbarCanCollapse&&b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var H=CKEDITOR.tools.addFunction(function(){b.execCommand("toolbarCollapse")});b.on("destroy",function(){CKEDITOR.tools.removeFunction(H)});b.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=
 a.ui.space("toolbar_collapser"),d=b.getPrevious(),c=a.ui.space("contents"),e=d.getParent(),g=parseInt(c.$.style.height,10),f=e.$.offsetHeight,h=b.hasClass("cke_toolbox_collapser_min");h?(d.show(),b.removeClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(d.hide(),b.addClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarExpand));b.getFirst().setText(h?"▲":"◀");c.setStyle("height",g-(e.$.offsetHeight-f)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight,
 contentsHeight:c.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});b.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");f.push('\x3ca title\x3d"'+(g?b.lang.toolbar.toolbarCollapse:b.lang.toolbar.toolbarExpand)+'" id\x3d"'+b.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');g||f.push(" cke_toolbox_collapser_min");f.push('" onclick\x3d"CKEDITOR.tools.callFunction('+H+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',
@@ -669,7 +669,7 @@ contentsHeight:c.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{w
 {});b.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(b,c){c.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(b,c,e){var d=f(this.editor),g=0===c,h={name:b};if(e){if(e=CKEDITOR.tools.search(d,function(a){return a.name==e})){!e.groups&&(e.groups=[]);if(c&&(c=CKEDITOR.tools.indexOf(e.groups,c),0<=c)){e.groups.splice(c+1,0,b);return}g?e.groups.splice(0,0,b):e.groups.push(b);
 return}c=null}c&&(c=CKEDITOR.tools.indexOf(d,function(a){return a.name==c}));g?d.splice(0,0,b):"number"==typeof c?d.splice(c+1,0,h):d.push(b)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",function(){function e(a,b,d){b.type||(b.type="auto");if(d&&!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 f(a){function b(){var d=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var c=function(b){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==b.name||z.initPasteDataTransfer(b,a),b.data.preventDefault())};d.on("copy",c);d.on("cut",c);d.on("cut",function(){a.readOnly||a.extractSelectedHtml()},null,null,999)}d.on(z.mainPasteEvent,function(a){"beforepaste"==z.mainPasteEvent&&J||y(a)});"beforepaste"==z.mainPasteEvent&&(d.on("paste",function(a){E||(g(),a.data.preventDefault(),
-y(a),h("paste"))}),d.on("contextmenu",f,null,null,0),d.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||f()},null,null,0));d.on("beforecut",function(){!J&&k(a)});var e;d.attachListener(CKEDITOR.env.ie?d:a.document.getDocumentElement(),"mouseup",function(){e=setTimeout(function(){A()},0)});a.on("destroy",function(){clearTimeout(e)});d.on("keyup",A)}function d(b){return{type:b,canUndo:"cut"==b,startDisabled:!0,fakeKeystroke:"cut"==b?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==
+y(a),h("paste"))}),d.on("contextmenu",f,null,null,0),d.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||f()},null,null,0));d.on("beforecut",function(){!J&&k(a)});var e;d.attachListener(CKEDITOR.env.ie?d:a.document.getDocumentElement(),"mouseup",function(){e=setTimeout(A,0)});a.on("destroy",function(){clearTimeout(e)});d.on("keyup",A)}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&&k();var b;var d=this.type;if(CKEDITOR.env.ie)b=h(d);else try{b=a.document.$.execCommand(d,!1,null)}catch(c){b=!1}b||a.showNotification(a.lang.clipboard[this.type+"Error"]);return b}}}function c(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(a,b){function d(b,f){f="undefined"!==typeof f?f:!0;b?(b.method="paste",b.dataTransfer||(b.dataTransfer=z.initPasteDataTransfer()),e(a,b,f)):g&&!a._.forcePasteDialog&&a.showNotification(k,"info",a.config.clipboard_notificationDuration);
 a._.forcePasteDialog=!1;a.fire("afterCommandExec",{name:"paste",command:c,returnValue:!!b})}b="undefined"!==typeof b&&null!==b?b:{};var c=this,g="undefined"!==typeof b.notification?b.notification:!0,f=b.type,h=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,a.getCommandKeystroke(this)),k="string"===typeof g?g:a.lang.clipboard.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof b?b:b.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 g(){E=1;setTimeout(function(){E=0},100)}function f(){J=1;setTimeout(function(){J=0},10)}function h(b){var d=a.document,c=d.getBody(),e=!1,g=function(){e=!0};c.on(b,g);7<CKEDITOR.env.version?d.$.execCommand(b):d.$.selection.createRange().execCommand(b);c.removeListener(b,g);return e}function k(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var b=
@@ -677,12 +677,12 @@ a.getSelection(),d,c,e;b.getType()==CKEDITOR.SELECTION_ELEMENT&&(d=b.getSelected
 !e.is("body")||CKEDITOR.env.ie?"div":"body",c);l.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var n=0,c=c.getWindow();CKEDITOR.env.webkit?(e.append(l),l.addClass("cke_editable"),e.is("body")||(n="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),n=n.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(l);l.setStyles({position:"absolute",top:c.getScrollPosition().y-n+10+"px",width:"1px",height:Math.max(1,c.getViewPaneSize().height-
 20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&l.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(n=l.getParent().isReadOnly())?(l.setOpacity(0),l.setAttribute("contenteditable",!0)):l.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-10000px");a.on("selectionChange",g,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)f=e.once("blur",g,null,null,-100);n&&l.focus();n=new CKEDITOR.dom.range(l);n.selectNodeContents(l);var r=n.select();CKEDITOR.env.ie&&
 (f=e.once("blur",function(){a.lockSelection(r)}));var q=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=q);f&&f.removeListener();CKEDITOR.env.ie&&e.focus();h.selectBookmarks(k);l.remove();var b;CKEDITOR.env.webkit&&(b=l.getFirst())&&b.is&&b.hasClass("Apple-style-span")&&(l=b);a.removeListener("selectionChange",g);d(l.getHtml())},0)}}function l(){if("paste"==z.mainPasteEvent)return a.fire("beforePaste",{type:"auto",
-method:"paste"}),!1;a.focus();g();var b=a.focusManager;b.lock();if(a.editable().fire(z.mainPasteEvent)&&!h("paste"))return b.unlock(),!1;b.unlock();return!0}function x(b){if("wysiwyg"==a.mode)switch(b.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:b=a.editable();g();"paste"==z.mainPasteEvent&&b.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:a.fire("saveSnapshot"),setTimeout(function(){a.fire("saveSnapshot")},50)}}function y(b){var d={type:"auto",method:"paste",
-dataTransfer:z.initPasteDataTransfer(b)};d.dataTransfer.cacheData();var c=!1!==a.fire("beforePaste",d);c&&z.canClipboardApiBeTrusted(d.dataTransfer,a)?(b.data.preventDefault(),setTimeout(function(){e(a,d)},0)):m(b,function(b){d.dataValue=b.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");c&&e(a,d)})}function A(){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){if(H&&
-b in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==b)return CKEDITOR.TRISTATE_OFF;b=a.getSelection();var d=b.getRanges();return b.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var z=CKEDITOR.plugins.clipboard,J=0,E=0,H=0;(function(){a.on("key",x);a.on("contentDom",b);a.on("selectionChange",function(a){H=a.data.selection.getRanges()[0].checkReadOnly();A()});if(a.contextMenu){a.contextMenu.addListener(function(a,b){H=
-b.getRanges()[0].checkReadOnly();return{cut:D("cut"),copy:D("copy"),paste:D("paste")}});var d=null;a.on("menuShow",function(){d&&(d.removeListener(),d=null);var b=a.contextMenu.findItemByCommandName("paste");b&&b.element&&(d=b.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(d,c,e,g,f){var h=a.lang.clipboard[c];a.addCommand(c,e);a.ui.addButton&&a.ui.addButton(d,{label:h,command:c,toolbar:"clipboard,"+g});a.addMenuItems&&a.addMenuItem(c,{label:h,command:c,group:"clipboard",order:f})}b("Cut","cut",d("cut"),10,1);b("Copy","copy",d("copy"),20,4);b("Paste","paste",c(),30,8);a._.pasteButtons||(a._.pasteButtons=[]);a._.pasteButtons.push("Paste")})();a.getClipboardData=function(b,d){function c(a){a.removeListener();a.cancel();d(a.data)}function e(a){a.removeListener();
-a.cancel();d({type:f,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}var g=!1,f="auto";d||(d=b,b=null);a.on("beforePaste",function(a){a.removeListener();g=!0;f=a.data.type},null,null,1E3);a.on("paste",c,null,null,0);!1===l()&&(a.removeListener("paste",c),a._.forcePasteDialog&&g&&a.fire("pasteDialog")?(a.on("pasteDialogCommit",e),a.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",e);a.data._.committed||d(null)})):d(null))}}function c(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&
+method:"paste"}),!1;a.focus();g();var b=a.focusManager;b.lock();if(a.editable().fire(z.mainPasteEvent)&&!h("paste"))return b.unlock(),!1;b.unlock();return!0}function w(b){if("wysiwyg"==a.mode)switch(b.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:b=a.editable();g();"paste"==z.mainPasteEvent&&b.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:a.fire("saveSnapshot"),setTimeout(function(){a.fire("saveSnapshot")},50)}}function y(b){var d={type:"auto",method:"paste",
+dataTransfer:z.initPasteDataTransfer(b)};d.dataTransfer.cacheData();var c=!1!==a.fire("beforePaste",d);c&&z.canClipboardApiBeTrusted(d.dataTransfer,a)?(b.data.preventDefault(),setTimeout(function(){e(a,d)},0)):m(b,function(b){d.dataValue=b.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");c&&e(a,d)})}function A(){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 d=
+a.getSelection(),d=d&&d.getRanges()[0];if((a.readOnly||d&&d.checkReadOnly())&&b in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==b)return CKEDITOR.TRISTATE_OFF;b=a.getSelection();d=b.getRanges();return b.getType()==CKEDITOR.SELECTION_NONE||1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var z=CKEDITOR.plugins.clipboard,J=0,E=0;(function(){a.on("key",w);a.on("contentDom",b);a.on("selectionChange",A);if(a.contextMenu){a.contextMenu.addListener(function(){return{cut:D("cut"),
+copy:D("copy"),paste:D("paste")}});var d=null;a.on("menuShow",function(){d&&(d.removeListener(),d=null);var b=a.contextMenu.findItemByCommandName("paste");b&&b.element&&(d=b.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(d,
+c,e,g,f){var h=a.lang.clipboard[c];a.addCommand(c,e);a.ui.addButton&&a.ui.addButton(d,{label:h,command:c,toolbar:"clipboard,"+g});a.addMenuItems&&a.addMenuItem(c,{label:h,command:c,group:"clipboard",order:f})}b("Cut","cut",d("cut"),10,1);b("Copy","copy",d("copy"),20,4);b("Paste","paste",c(),30,8);a._.pasteButtons||(a._.pasteButtons=[]);a._.pasteButtons.push("Paste")})();a.getClipboardData=function(b,d){function c(a){a.removeListener();a.cancel();d(a.data)}function e(a){a.removeListener();a.cancel();
+d({type:f,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}var g=!1,f="auto";d||(d=b,b=null);a.on("beforePaste",function(a){a.removeListener();g=!0;f=a.data.type},null,null,1E3);a.on("paste",c,null,null,0);!1===l()&&(a.removeListener("paste",c),a._.forcePasteDialog&&g&&a.fire("pasteDialog")?(a.on("pasteDialogCommit",e),a.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",e);a.data._.committed||d(null)})):d(null))}}function c(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 h(a,b){function d(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 d(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 d(a.length/4)})+"\x3c/p\x3e"));return k(a,b)}function b(a){function b(){var a={},d;for(d in CKEDITOR.dtd)"$"!=d.charAt(0)&&"div"!=d&&"span"!=d&&(a[d]=1);return a}var d={};return{get:function(c){return"plain-text"==c?d.plainText||(d.plainText=new CKEDITOR.filter(a,
@@ -734,7 +734,7 @@ d;d=e.getItem(++f);)if(d.getAttribute("_cke_focus")&&d.$.offsetWidth){this._.foc
 (d.$[e]?d.$[e]():d.$["on"+e]()),!1}return!0}}})}(),CKEDITOR.plugins.add("floatpanel",{requires:"panel"}),function(){function e(c,e,b,l,k){k=CKEDITOR.tools.genKey(e.getUniqueId(),b.getUniqueId(),c.lang.dir,c.uiColor||"",l.css||"",k||"");var d=f[k];d||(d=f[k]=new CKEDITOR.ui.panel(e,l),d.element=b.append(CKEDITOR.dom.element.createFromHtml(d.render(c),e)),d.element.setStyles({display:"none",position:"absolute"}));return d}var f={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(c,f,b,
 l){function k(){a.hide()}b.forceIFrame=1;b.toolbarRelated&&c.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(f=CKEDITOR.document.getById("cke_"+c.name));var d=f.getDocument();l=e(c,d,f,b,l||0);var g=l.element,m=g.getFirst(),a=this;g.disableContextMenu();this.element=g;this._={editor:c,panel:l,parentElement:f,definition:b,document:d,iframe:m,children:[],dir:c.lang.dir,showBlockParams:null,markFirst:void 0!==b.markFirst?b.markFirst:!0};c.on("mode",k);c.on("resize",k);d.getWindow().on("resize",function(){this.reposition()},
 this)},proto:{addBlock:function(c,e){return this._.panel.addBlock(c,e)},addListBlock:function(c,e){return this._.panel.addListBlock(c,e)},getBlock:function(c){return this._.panel.getBlock(c)},showBlock:function(c,e,b,f,k,d){var g=this._.panel,m=g.showBlock(c);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var n=this.element,a=this._.iframe,
-a=CKEDITOR.env.ie&&!CKEDITOR.env.edge?a:new CKEDITOR.dom.window(a.$.contentWindow),w=n.getDocument(),u=this._.parentElement.getPositionedAncestor(),t=e.getDocumentPosition(w),w=u?u.getDocumentPosition(w):{x:0,y:0},p="rtl"==this._.dir,r=t.x+(f||0)-w.x,v=t.y+(k||0)-w.y;!p||1!=b&&4!=b?p||2!=b&&3!=b||(r+=e.$.offsetWidth-1):r+=e.$.offsetWidth;if(3==b||4==b)v+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:v+"px",left:0,display:""});n.setOpacity(0);n.getFirst().removeStyle("width");
+a=CKEDITOR.env.ie&&!CKEDITOR.env.edge?a:new CKEDITOR.dom.window(a.$.contentWindow),x=n.getDocument(),u=this._.parentElement.getPositionedAncestor(),t=e.getDocumentPosition(x),x=u?u.getDocumentPosition(x):{x:0,y:0},p="rtl"==this._.dir,r=t.x+(f||0)-x.x,v=t.y+(k||0)-x.y;!p||1!=b&&4!=b?p||2!=b&&3!=b||(r+=e.$.offsetWidth-1):r+=e.$.offsetWidth;if(3==b||4==b)v+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:v+"px",left:0,display:""});n.setOpacity(0);n.getFirst().removeStyle("width");
 this._.editor.focusManager.add(a);this._.blurSet||(CKEDITOR.event.useCapture=!0,a.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),a.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(a.on("touchstart",function(){clearTimeout(this._.hideTimeout)},
 this),a.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);g.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(m.autoSize){var b=m.element.getDocument(),b=(CKEDITOR.env.webkit||CKEDITOR.env.edge?m.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=m.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle("height",b+"px");g._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");p&&(r-=n.$.offsetWidth);n.setStyle("left",r+"px");var b=g.element.getWindow(),a=n.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,e=a.height||a.bottom-a.top,f=p?a.right:
@@ -748,15 +748,15 @@ this),this._.activeChild=c,this._.focused=!1,c.showBlock(e,b,f,k,d),this.blur(),
 -1:b.group>d.group?1:b.order<d.order?-1:b.order>d.order?1:0})}var f='\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"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&
 (f+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(f+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;" ondragstart\x3d"return false;"');var f=f+(' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e'),c=CKEDITOR.addTemplate("menuItem",f+'\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'),
 h=CKEDITOR.addTemplate("menuArrow",'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'),b=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(b,c){c=this._.definition=c||{};this.id=CKEDITOR.tools.getNextId();this.editor=b;this.items=[];this._.listeners=[];this._.level=c.level||1;var d=CKEDITOR.tools.extend({},c.panel,{css:[CKEDITOR.skin.getPath("editor")],
-level:this._.level-1,block:{}}),e=d.block.attributes=d.attributes||{};!e.role&&(e.role="menu");this._.panelDefinition=d},_:{onShow:function(){var b=this.editor.getSelection(),c=b&&b.getStartElement(),d=this.editor.elementPath(),e=this._.listeners;this.removeAll();for(var f=0;f<e.length;f++){var a=e[f](c,b,d);if(a)for(var h in a){var w=this.editor.getMenuItem(h);!w||w.command&&!this.editor.getCommand(w.command).state||(w.state=a[h],this.add(w))}}},onClick:function(b){this.hide();if(b.onClick)b.onClick();
+level:this._.level-1,block:{}}),e=d.block.attributes=d.attributes||{};!e.role&&(e.role="menu");this._.panelDefinition=d},_:{onShow:function(){var b=this.editor.getSelection(),c=b&&b.getStartElement(),d=this.editor.elementPath(),e=this._.listeners;this.removeAll();for(var f=0;f<e.length;f++){var a=e[f](c,b,d);if(a)for(var h in a){var x=this.editor.getMenuItem(h);!x||x.command&&!this.editor.getCommand(x.command).state||(x.state=a[h],this.add(x))}}},onClick:function(b){this.hide();if(b.onClick)b.onClick();
 else b.command&&this.editor.execCommand(b.command)},onEscape:function(b){var c=this.parent;c?c._.panel.hideChild(1):27==b&&this.hide(1);return!1},onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(b){var c=this._.subMenu,d=this.items[b];if(d=d.getItems&&d.getItems()){c?c.removeAll():(c=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),c.parent=this,c._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var e in d){var f=
-this.editor.getMenuItem(e);f&&(f.state=d[e],c.add(f))}var a=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+String(b));setTimeout(function(){c.show(a,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(b){b.order||(b.order=this.items.length);this.items.push(b)},removeAll:function(){this.items=[]},show:function(b,c,d,g){if(!this.parent&&(this._.onShow(),!this.items.length))return;c=c||("rtl"==this.editor.lang.dir?2:1);var f=this.items,a=this.editor,h=this._.panel,w=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);w=h.addBlock(this.id,this._.panelDefinition.block);w.autoSize=!0;var u=w.keys;u[40]="next";u[9]="next";u[38]=
-"prev";u[CKEDITOR.SHIFT+9]="prev";u["rtl"==a.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";u[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(u[13]="mouseup");w=this._.element=w.element;u=w.getDocument();u.getBody().setStyle("overflow","hidden");u.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(b){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,a.config.menu_subMenuDelay||
+this.editor.getMenuItem(e);f&&(f.state=d[e],c.add(f))}var a=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+String(b));setTimeout(function(){c.show(a,2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(b){b.order||(b.order=this.items.length);this.items.push(b)},removeAll:function(){this.items=[]},show:function(b,c,d,g){if(!this.parent&&(this._.onShow(),!this.items.length))return;c=c||("rtl"==this.editor.lang.dir?2:1);var f=this.items,a=this.editor,h=this._.panel,x=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);x=h.addBlock(this.id,this._.panelDefinition.block);x.autoSize=!0;var u=x.keys;u[40]="next";u[9]="next";u[38]=
+"prev";u[CKEDITOR.SHIFT+9]="prev";u["rtl"==a.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";u[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(u[13]="mouseup");x=this._.element=x.element;u=x.getDocument();u.getBody().setStyle("overflow","hidden");u.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(b){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,a.config.menu_subMenuDelay||
 400,this,[b])},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)}e(f);for(var u=a.elementPath(),u=['\x3cdiv class\x3d"cke_menu'+(u&&u.direction()!=a.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],t=f.length,p=t&&f[0].group,
-r=0;r<t;r++){var v=f[r];p!=v.group&&(u.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),p=v.group);v.render(this,r,u)}u.push("\x3c/div\x3e");w.setHtml(u.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,b,c,d,g):h.showBlock(this.id,b,c,d,g);a.fire("menuShow",[h])},addListener:function(b){this._.listeners.push(b)},hide:function(b){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(b)},findItemByCommandName:function(b){var c=
+r=0;r<t;r++){var v=f[r];p!=v.group&&(u.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),p=v.group);v.render(this,r,u)}u.push("\x3c/div\x3e");x.setHtml(u.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,b,c,d,g):h.showBlock(this.id,b,c,d,g);a.fire("menuShow",[h])},addListener:function(b){this._.listeners.push(b)},hide:function(b){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(b)},findItemByCommandName:function(b){var c=
 CKEDITOR.tools.array.filter(this.items,function(d){return b===d.command});return c.length?(c=c[0],{item:c,element:this._.element.findOne("."+c.className)}):null}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(b,c,d){CKEDITOR.tools.extend(this,d,{order:0,className:"cke_menubutton__"+c});this.group=b._.menuGroups[this.group];this.editor=b;this.name=c},proto:{render:function(e,f,d){var g=e.id+String(f),m="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,a="",n=this.editor,
-w,u,t=m==CKEDITOR.TRISTATE_ON?"on":m==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(a=' aria-checked\x3d"'+(m==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var p=this.getItems,r="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",v=this.name;this.icon&&!/\./.test(this.icon)&&(v=this.icon);this.command&&(w=n.getCommand(this.command),(w=n.getCommandKeystroke(w))&&(u=CKEDITOR.tools.keystrokeToString(n.lang.common.keyboard,w)));e={id:g,name:this.name,
+x,u,t=m==CKEDITOR.TRISTATE_ON?"on":m==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(a=' aria-checked\x3d"'+(m==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var p=this.getItems,r="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",v=this.name;this.icon&&!/\./.test(this.icon)&&(v=this.icon);this.command&&(x=n.getCommand(this.command),(x=n.getCommandKeystroke(x))&&(u=CKEDITOR.tools.keystrokeToString(n.lang.common.keyboard,x)));e={id:g,name:this.name,
 iconName:v,label:this.label,cls:this.className||"",state:t,hasPopup:p?"true":"false",disabled:m==CKEDITOR.TRISTATE_DISABLED,title:this.label+(u?" ("+u.display+")":""),ariaShortcut:u?n.lang.common.keyboardShortcut+" "+u.aria:"",href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:e._.itemOverFn,moveOutFn:e._.itemOutFn,clickFn:e._.itemClickFn,index:f,iconStyle:CKEDITOR.skin.getIconStyle(v,"rtl"==this.editor.lang.dir,v==this.icon?null:this.icon,this.iconOffset),shortcutHtml:u?b.output({shortcut:u.display}):
 "",arrowHtml:p?h.output({label:r}):"",role:this.role?this.role:"menuitem",ariaChecked:a};c.output(e,d)}}})}(),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(e){this.base.call(this,e,{panel:{css:e.config.contextmenu_contentsCss,
 className:"cke_menu_panel",attributes:{"aria-label":e.lang.contextmenu.options}}})},proto:{addTarget:function(e,f){function c(){b=!1}var h,b;e.on("contextmenu",function(c){c=c.data;var d=CKEDITOR.env.webkit?h:CKEDITOR.env.mac?c.$.metaKey:c.$.ctrlKey;if(!f||!d)if(c.preventDefault(),!b){if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var d=this.editor,e=(new CKEDITOR.dom.elementPath(c.getTarget(),d.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);e&&"false"==e.getAttribute("contenteditable")&&
@@ -764,20 +764,20 @@ d.getSelection().fake(e)}var e=c.getTarget().getDocument(),m=c.getTarget().getDo
 e.on("contextmenu",l)}CKEDITOR.env.gecko&&!CKEDITOR.env.mac&&(e.on("keydown",function(c){c.data.$.shiftKey&&121===c.data.$.keyCode&&(b=!0)},null,null,0),e.on("keyup",c),e.on("contextmenu",c))},open:function(e,f,c,h){!1!==this.editor.config.enableContextMenu&&this.editor.getSelection().getType()!==CKEDITOR.SELECTION_NONE&&(this.editor.focus(),e=e||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(e,f,c,h))}}})},beforeInit:function(e){var f=e.contextMenu=new CKEDITOR.plugins.contextMenu(e);
 e.on("contentDom",function(){f.addTarget(e.editable(),!1!==e.config.browserContextMenuOnCtrl)});e.addCommand("contextMenu",{exec:function(c){var e=0,b=0,f=c.getSelection().getRanges(),f=f[f.length-1].getClientRects(c.editable().isInline());if(f=f[f.length-1])e=f["rtl"===c.lang.dir?"left":"right"],b=f.bottom;c.contextMenu.open(c.document.getBody().getParent(),null,e,b)}});e.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");e.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}}),function(){function e(b,
 c){function e(d){d=a.list[d];var c;d.equals(b.editable())||"true"==d.getAttribute("contenteditable")?(c=b.createRange(),c.selectNodeContents(d),c=c.select()):(c=b.getSelection(),c.selectElement(d));CKEDITOR.env.ie&&b.fire("selectionChange",{selection:c,path:new CKEDITOR.dom.elementPath(d)});b.focus()}function d(){m&&m.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete a.list}var g=b.ui.spaceId("path"),m,a=b._.elementsPath,n=a.idBase;c.html+='\x3cspan id\x3d"'+g+'_label" class\x3d"cke_voice_label"\x3e'+
-b.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+g+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+g+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';b.on("uiReady",function(){var a=b.ui.space("path");a&&b.focusManager.add(a,1)});a.onClick=e;var w=CKEDITOR.tools.addFunction(e),u=CKEDITOR.tools.addFunction(function(d,c){var g=a.idBase,f;c=new CKEDITOR.dom.event(c);f="rtl"==b.lang.dir;switch(c.getKeystroke()){case f?39:37:case 9:return(f=
-CKEDITOR.document.getById(g+(d+1)))||(f=CKEDITOR.document.getById(g+"0")),f.focus(),!1;case f?37:39:case CKEDITOR.SHIFT+9:return(f=CKEDITOR.document.getById(g+(d-1)))||(f=CKEDITOR.document.getById(g+(a.list.length-1))),f.focus(),!1;case 27:return b.focus(),!1;case 13:case 32:return e(d),!1}return!0});b.on("selectionChange",function(d){for(var c=[],e=a.list=[],f=[],k=a.filters,l=!0,x=d.data.path.elements,y=x.length;y--;){var A=x[y],D=0;d=A.data("cke-display-name")?A.data("cke-display-name"):A.data("cke-real-element-type")?
-A.data("cke-real-element-type"):A.getName();(l=A.hasAttribute("contenteditable")?"true"==A.getAttribute("contenteditable"):l)||A.hasAttribute("contenteditable")||(D=1);for(var z=0;z<k.length;z++){var J=k[z](A,d);if(!1===J){D=1;break}d=J||d}D||(e.unshift(A),f.unshift(d))}e=e.length;for(k=0;k<e;k++)d=f[k],l=b.lang.elementspath.eleTitle.replace(/%1/,d),d=h.output({id:n+k,label:l,text:d,jsTitle:"javascript:void('"+d+"')",index:k,keyDownFn:u,clickFn:w}),c.unshift(d);m||(m=CKEDITOR.document.getById(g));
+b.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+g+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+g+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';b.on("uiReady",function(){var a=b.ui.space("path");a&&b.focusManager.add(a,1)});a.onClick=e;var x=CKEDITOR.tools.addFunction(e),u=CKEDITOR.tools.addFunction(function(d,c){var g=a.idBase,f;c=new CKEDITOR.dom.event(c);f="rtl"==b.lang.dir;switch(c.getKeystroke()){case f?39:37:case 9:return(f=
+CKEDITOR.document.getById(g+(d+1)))||(f=CKEDITOR.document.getById(g+"0")),f.focus(),!1;case f?37:39:case CKEDITOR.SHIFT+9:return(f=CKEDITOR.document.getById(g+(d-1)))||(f=CKEDITOR.document.getById(g+(a.list.length-1))),f.focus(),!1;case 27:return b.focus(),!1;case 13:case 32:return e(d),!1}return!0});b.on("selectionChange",function(d){for(var c=[],e=a.list=[],f=[],k=a.filters,l=!0,w=d.data.path.elements,y=w.length;y--;){var A=w[y],D=0;d=A.data("cke-display-name")?A.data("cke-display-name"):A.data("cke-real-element-type")?
+A.data("cke-real-element-type"):A.getName();(l=A.hasAttribute("contenteditable")?"true"==A.getAttribute("contenteditable"):l)||A.hasAttribute("contenteditable")||(D=1);for(var z=0;z<k.length;z++){var J=k[z](A,d);if(!1===J){D=1;break}d=J||d}D||(e.unshift(A),f.unshift(d))}e=e.length;for(k=0;k<e;k++)d=f[k],l=b.lang.elementspath.eleTitle.replace(/%1/,d),d=h.output({id:n+k,label:l,text:d,jsTitle:"javascript:void('"+d+"')",index:k,keyDownFn:u,clickFn:x}),c.unshift(d);m||(m=CKEDITOR.document.getById(g));
 f=m;f.setHtml(c.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');b.fire("elementsPathUpdate",{space:f})});b.on("readOnly",d);b.on("contentDomUnload",d);b.addCommand("elementsPathFocus",f.toolbarFocus);b.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var f={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(b){(b=CKEDITOR.document.getById(b._.elementsPath.idBase+"0"))&&b.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},c="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress\x3d"return false;"');
 CKEDITOR.env.gecko&&(c+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var h=CKEDITOR.addTemplate("pathItem",'\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"'+c+' 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(b){b._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};b.on("uiSpace",function(c){"bottom"==c.data.space&&e(b,c.data)})}})}(),function(){function e(b,a,c){c=b.config.forceEnterMode||c;if("wysiwyg"==b.mode){a||(a=b.activeEnterMode);var e=b.elementPath();e&&!e.isContextFor("p")&&(a=CKEDITOR.ENTER_BR,c=1);b.fire("saveSnapshot");a==CKEDITOR.ENTER_BR?k(b,a,null,c):d(b,a,null,c);b.fire("saveSnapshot")}}function f(b){b=
 b.getSelection().getRanges(!0);for(var a=b.length-1;0<a;a--)b[a].deleteContents();return b[0]}function c(b){var a=b.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},!0);if(b.root.equals(a))return b;a=new CKEDITOR.dom.range(a);a.moveToRange(b);return a}CKEDITOR.plugins.add("enterkey",{init:function(b){b.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){e(a)}});b.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,
 exec:function(a){e(a,a.activeShiftEnterMode,1)}});b.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var h=CKEDITOR.dom.walker.whitespaces(),b=CKEDITOR.dom.walker.bookmark(),l,k,d,g;CKEDITOR.plugins.enterkey={enterBlock:function(d,a,e,l){function u(a){var b;if(a===CKEDITOR.ENTER_BR||-1===CKEDITOR.tools.indexOf(["td","th"],v.lastElement.getName())||1!==v.lastElement.getChildCount())return!1;a=v.lastElement.getChild(0).clone(!0);(b=a.getBogus())&&b.remove();return a.getText().length?
-!1:!0}if(e=e||f(d)){e=c(e);var t=e.document,p=e.checkStartOfBlock(),r=e.checkEndOfBlock(),v=d.elementPath(e.startContainer),q=v.block,B=a==CKEDITOR.ENTER_DIV?"div":"p",x;if(q&&p&&r){p=q.getParent();if(p.is("li")&&1<p.getChildCount()){t=new CKEDITOR.dom.element("li");x=d.createRange();t.insertAfter(p);q.remove();x.setStart(t,0);d.getSelection().selectRanges([x]);return}if(q.is("li")||q.getParent().is("li")){q.is("li")||(q=q.getParent(),p=q.getParent());x=p.getParent();e=!q.hasPrevious();var y=!q.hasNext();
-l=d.getSelection();var B=l.createBookmarks(),A=q.getDirection(1),r=q.getAttribute("class"),D=q.getAttribute("style"),z=x.getDirection(1)!=A;d=d.enterMode!=CKEDITOR.ENTER_BR||z||D||r;if(x.is("li"))e||y?(e&&y&&p.remove(),q[y?"insertAfter":"insertBefore"](x)):q.breakParent(x);else{if(d)if(v.block.is("li")?(x=t.createElement(a==CKEDITOR.ENTER_P?"p":"div"),z&&x.setAttribute("dir",A),D&&x.setAttribute("style",D),r&&x.setAttribute("class",r),q.moveChildren(x)):x=v.block,e||y)x[e?"insertBefore":"insertAfter"](p);
-else q.breakParent(p),x.insertAfter(p);else if(q.appendBogus(!0),e||y)for(;t=q[e?"getFirst":"getLast"]();)t[e?"insertBefore":"insertAfter"](p);else for(q.breakParent(p);t=q.getLast();)t.insertAfter(p);q.remove()}l.selectBookmarks(B);return}if(q&&q.getParent().is("blockquote")){q.breakParent(q.getParent());q.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||q.getPrevious().remove();q.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||q.getNext().remove();e.moveToElementEditStart(q);e.select();
-return}}else if(q&&q.is("pre")&&!r){k(d,a,e,l);return}if(D=e.splitBlock(B)){d=D.previousBlock;q=D.nextBlock;p=D.wasStartOfBlock;r=D.wasEndOfBlock;q?(y=q.getParent(),y.is("li")&&(q.breakParent(y),q.move(q.getNext(),1))):d&&(y=d.getParent())&&y.is("li")&&(d.breakParent(y),y=d.getNext(),e.moveToElementEditStart(y),d.move(d.getPrevious()));if(p||r)if(u(a))e.moveToElementEditStart(e.getTouchedStartNode());else{if(d){if(d.is("li")||!g.test(d.getName())&&!d.is("pre"))x=d.clone()}else q&&(x=q.clone());x?
-l&&!x.is("li")&&x.renameNode(B):y&&y.is("li")?x=y:(x=t.createElement(B),d&&(A=d.getDirection())&&x.setAttribute("dir",A));if(t=D.elementPath)for(a=0,l=t.elements.length;a<l;a++){B=t.elements[a];if(B.equals(t.block)||B.equals(t.blockLimit))break;CKEDITOR.dtd.$removeEmpty[B.getName()]&&(B=B.clone(),x.moveChildren(B),x.append(B))}x.appendBogus();x.getParent()||e.insertNode(x);x.is("li")&&x.removeAttribute("value");!CKEDITOR.env.ie||!p||r&&d.getChildCount()||(e.moveToElementEditStart(r?d:x),e.select());
-e.moveToElementEditStart(p&&!r?q:x)}else q.is("li")&&(x=e.clone(),x.selectNodeContents(q),x=new CKEDITOR.dom.walker(x),x.evaluator=function(a){return!(b(a)||h(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(y=x.next())&&y.type==CKEDITOR.NODE_ELEMENT&&y.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?t.createElement("br"):t.createText(" ")).insertBefore(y)),q&&e.moveToElementEditStart(q);e.select();e.scrollIntoView()}}},enterBr:function(b,a,
+!1:!0}if(e=e||f(d)){e=c(e);var t=e.document,p=e.checkStartOfBlock(),r=e.checkEndOfBlock(),v=d.elementPath(e.startContainer),q=v.block,B=a==CKEDITOR.ENTER_DIV?"div":"p",w;if(q&&p&&r){p=q.getParent();if(p.is("li")&&1<p.getChildCount()){t=new CKEDITOR.dom.element("li");w=d.createRange();t.insertAfter(p);q.remove();w.setStart(t,0);d.getSelection().selectRanges([w]);return}if(q.is("li")||q.getParent().is("li")){q.is("li")||(q=q.getParent(),p=q.getParent());w=p.getParent();e=!q.hasPrevious();var y=!q.hasNext();
+l=d.getSelection();var B=l.createBookmarks(),A=q.getDirection(1),r=q.getAttribute("class"),D=q.getAttribute("style"),z=w.getDirection(1)!=A;d=d.enterMode!=CKEDITOR.ENTER_BR||z||D||r;if(w.is("li"))e||y?(e&&y&&p.remove(),q[y?"insertAfter":"insertBefore"](w)):q.breakParent(w);else{if(d)if(v.block.is("li")?(w=t.createElement(a==CKEDITOR.ENTER_P?"p":"div"),z&&w.setAttribute("dir",A),D&&w.setAttribute("style",D),r&&w.setAttribute("class",r),q.moveChildren(w)):w=v.block,e||y)w[e?"insertBefore":"insertAfter"](p);
+else q.breakParent(p),w.insertAfter(p);else if(q.appendBogus(!0),e||y)for(;t=q[e?"getFirst":"getLast"]();)t[e?"insertBefore":"insertAfter"](p);else for(q.breakParent(p);t=q.getLast();)t.insertAfter(p);q.remove()}l.selectBookmarks(B);return}if(q&&q.getParent().is("blockquote")){q.breakParent(q.getParent());q.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||q.getPrevious().remove();q.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||q.getNext().remove();e.moveToElementEditStart(q);e.select();
+return}}else if(q&&q.is("pre")&&!r){k(d,a,e,l);return}if(D=e.splitBlock(B)){d=D.previousBlock;q=D.nextBlock;p=D.wasStartOfBlock;r=D.wasEndOfBlock;q?(y=q.getParent(),y.is("li")&&(q.breakParent(y),q.move(q.getNext(),1))):d&&(y=d.getParent())&&y.is("li")&&(d.breakParent(y),y=d.getNext(),e.moveToElementEditStart(y),d.move(d.getPrevious()));if(p||r)if(u(a))e.moveToElementEditStart(e.getTouchedStartNode());else{if(d){if(d.is("li")||!g.test(d.getName())&&!d.is("pre"))w=d.clone()}else q&&(w=q.clone());w?
+l&&!w.is("li")&&w.renameNode(B):y&&y.is("li")?w=y:(w=t.createElement(B),d&&(A=d.getDirection())&&w.setAttribute("dir",A));if(t=D.elementPath)for(a=0,l=t.elements.length;a<l;a++){B=t.elements[a];if(B.equals(t.block)||B.equals(t.blockLimit))break;CKEDITOR.dtd.$removeEmpty[B.getName()]&&(B=B.clone(),w.moveChildren(B),w.append(B))}w.appendBogus();w.getParent()||e.insertNode(w);w.is("li")&&w.removeAttribute("value");!CKEDITOR.env.ie||!p||r&&d.getChildCount()||(e.moveToElementEditStart(r?d:w),e.select());
+e.moveToElementEditStart(p&&!r?q:w)}else q.is("li")&&(w=e.clone(),w.selectNodeContents(q),w=new CKEDITOR.dom.walker(w),w.evaluator=function(a){return!(b(a)||h(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(y=w.next())&&y.type==CKEDITOR.NODE_ELEMENT&&y.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?t.createElement("br"):t.createText(" ")).insertBefore(y)),q&&e.moveToElementEditStart(q);e.select();e.scrollIntoView()}}},enterBr:function(b,a,
 c,e){if(c=c||f(b)){var h=c.document,k=c.checkEndOfBlock(),l=new CKEDITOR.dom.elementPath(b.getSelection().getStartElement()),r=l.block,v=r&&l.block.getName();e||"li"!=v?(!e&&k&&g.test(v)?(k=r.getDirection())?(h=h.createElement("div"),h.setAttribute("dir",k),h.insertAfter(r),c.setStart(h,0)):(h.createElement("br").insertAfter(r),CKEDITOR.env.gecko&&h.createText("").insertAfter(r),c.setStartAt(r.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(b="pre"==v&&CKEDITOR.env.ie&&
 8>CKEDITOR.env.version?h.createText("\r"):h.createElement("br"),c.deleteContents(),c.insertNode(b),CKEDITOR.env.needsBrFiller?(h.createText("").insertAfter(b),k&&(r||l.blockLimit).appendBogus(),b.getNext().$.nodeValue="",c.setStartAt(b.getNext(),CKEDITOR.POSITION_AFTER_START)):c.setStartAt(b,CKEDITOR.POSITION_AFTER_END)),c.collapse(!0),c.select(),c.scrollIntoView()):d(b,a,c,e)}}};l=CKEDITOR.plugins.enterkey;k=l.enterBr;d=l.enterBlock;g=/^h[1-6]$/}(),function(){function e(e,c){var h={},b=[],l={nbsp:" ",
 shy:"­",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};e=e.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(d,a){var e=c?"\x26"+a+";":l[a];h[e]=c?l[a]:"\x26"+a+";";b.push(e);return""});e=e.replace(/,$/,"");if(!c&&e){e=e.split(",");var k=document.createElement("div"),d;k.innerHTML="\x26"+e.join(";\x26")+";";d=k.innerHTML;k=null;for(k=0;k<d.length;k++){var g=d.charAt(k);h[g]="\x26"+e[k]+";";b.push(g)}}h.regex=b.join(c?"|":"");return h}CKEDITOR.plugins.add("entities",{afterInit:function(f){function c(a){return g[a]}
@@ -804,8 +804,8 @@ this["for"][1]).getInputElement(),k=CKEDITOR.fileTools&&CKEDITOR.fileTools.isFil
 p.filebrowser)}}function g(a){var b={};try{b=JSON.parse(a.sender.xhr.response)||{}}catch(d){}this.enable();alert(b.error?b.error.message:a.sender.message)}function m(a,b,d){if(-1!==d.indexOf(";")){d=d.split(";");for(var c=0;c<d.length;c++)if(m(a,b,d[c]))return!0;return!1}return(a=a.getContents(b).get(d).filebrowser)&&a.url}function a(a,b){var d=this._.filebrowserSe.getDialog(),c=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;c&&d.getContentElement(c[0],c[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&&(c=this._.filebrowserSe,d=c.getDialog(),c=c.filebrowser.target||null))if(c=c.split(":"),e=d.getContentElement(c[0],c[1]))e.setValue(a),d.selectPage(c[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup,filetools",init:function(b){b._.filebrowserFn=CKEDITOR.tools.addFunction(a,b);b.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])d(a.editor,a.data.name,b,c.elements),c.hidden&&c.filebrowser&&(c.hidden=!m(b,c.id,c.filebrowser))})}(),function(){function e(e){var b=e.config,l=e.fire("uiSpace",{space:"top",html:""}).html,k=function(){function a(b,d,e){g.setStyle(d,c(e));g.setStyle("position",b)}function d(b){var c=l.getDocumentPosition();switch(b){case "top":a("absolute","top",c.y-q-y);break;case "pin":a("fixed",
-"top",D);break;case "bottom":a("absolute","top",c.y+(r.height||r.bottom-r.top)+y)}m=b}var m,l,p,r,v,q,B,x=b.floatSpaceDockedOffsetX||0,y=b.floatSpaceDockedOffsetY||0,A=b.floatSpacePinnedOffsetX||0,D=b.floatSpacePinnedOffsetY||0;return function(a){if(l=e.editable()){var n=a&&"focus"==a.name;n&&g.show();e.fire("floatingSpaceLayout",{show:n});g.removeStyle("left");g.removeStyle("right");p=g.getClientRect();r=l.getClientRect();v=f.getViewPaneSize();q=p.height;B="pageXOffset"in f.$?f.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;
-m?(q+y<=r.top?d("top"):q+y>v.height-r.bottom?d("pin"):d("bottom"),a=v.width/2,a=b.floatSpacePreferRight?"right":0<r.left&&r.right<v.width&&r.width>p.width?"rtl"==b.contentsLangDirection?"right":"left":a-r.left>r.right-a?"left":"right",p.width>v.width?(a="left",n=0):(n="left"==a?0<r.left?r.left:0:r.right<v.width?v.width-r.right:0,n+p.width>v.width&&(a="left"==a?"right":"left",n=0)),g.setStyle(a,c(("pin"==m?A:x)+n+("pin"==m?0:"left"==a?B:-B)))):(m="pin",d("pin"),k(a))}}}();if(l){var d=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+
+"top",D);break;case "bottom":a("absolute","top",c.y+(r.height||r.bottom-r.top)+y)}m=b}var m,l,p,r,v,q,B,w=b.floatSpaceDockedOffsetX||0,y=b.floatSpaceDockedOffsetY||0,A=b.floatSpacePinnedOffsetX||0,D=b.floatSpacePinnedOffsetY||0;return function(a){if(l=e.editable()){var n=a&&"focus"==a.name;n&&g.show();e.fire("floatingSpaceLayout",{show:n});g.removeStyle("left");g.removeStyle("right");p=g.getClientRect();r=l.getClientRect();v=f.getViewPaneSize();q=p.height;B="pageXOffset"in f.$?f.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;
+m?(q+y<=r.top?d("top"):q+y>v.height-r.bottom?d("pin"):d("bottom"),a=v.width/2,a=b.floatSpacePreferRight?"right":0<r.left&&r.right<v.width&&r.width>p.width?"rtl"==b.contentsLangDirection?"right":"left":a-r.left>r.right-a?"left":"right",p.width>v.width?(a="left",n=0):(n="left"==a?0<r.left?r.left:0:r.right<v.width?v.width-r.right:0,n+p.width>v.width&&(a="left"==a?"right":"left",n=0)),g.setStyle(a,c(("pin"==m?A:w)+n+("pin"==m?0:"left"==a?B:-B)))):(m="pin",d("pin"),k(a))}}}();if(l){var d=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}"'+(e.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(e.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'),g=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(d.output({content:l,
 id:e.id,langDir:e.lang.dir,langCode:e.langCode,name:e.name,style:"display:none;z-index:"+(b.baseFloatZIndex-1),topId:e.ui.spaceId("top"),voiceLabel:e.title}))),m=CKEDITOR.tools.eventsBuffer(500,k),a=CKEDITOR.tools.eventsBuffer(100,k);g.unselectable();g.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});e.on("focus",function(b){k(b);e.on("change",m.input);f.on("scroll",a.input);f.on("resize",a.input)});e.on("blur",function(){g.hide();e.removeListener("change",
 m.input);f.removeListener("scroll",a.input);f.removeListener("resize",a.input)});e.on("destroy",function(){f.removeListener("scroll",a.input);f.removeListener("resize",a.input);g.clearCustomData();g.remove()});e.focusManager.hasFocus&&g.show();e.focusManager.add(g,1)}}var f=CKEDITOR.document.getWindow(),c=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(c){c.on("loaded",function(){e(this)},null,null,20)}})}(),CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var e=
@@ -821,9 +821,9 @@ d;break}}else this.element.focus();e&&setTimeout(function(){e.focus()},0)}}})}})
 (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"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(e+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(e+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var e=e+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?
 'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"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",e);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=
 CKEDITOR.tools.createClass({$:function(c){CKEDITOR.tools.extend(this,c,{canGroup:!1,title:c.label,modes:{wysiwyg:1},editorFocus:1});c=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=c.parent&&c.parent.getDocument()||CKEDITOR.document;c.className="cke_combopanel";c.block={multiSelect:c.multiSelect,attributes:c.attributes};c.toolbarRelated=!0;this._={panelDefinition:c,items:{},listeners:[]}},proto:{renderHtml:function(c){var e=[];this.render(c,e);return e.join("")},
-render:function(c,e){function b(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var a=this.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;c.readOnly&&!this.readOnly&&(a=CKEDITOR.TRISTATE_DISABLED);this.setState(a);this.setValue("");a!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var l=CKEDITOR.env,k="cke_"+this.id,d=CKEDITOR.tools.addFunction(function(a){w&&(c.unlockSelection(1),w=0);m.execute(a)},this),g=this,m={id:k,combo:this,focus:function(){CKEDITOR.document.getById(k).getChild(1).focus()},
+render:function(c,e){function b(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var a=this.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;c.readOnly&&!this.readOnly&&(a=CKEDITOR.TRISTATE_DISABLED);this.setState(a);this.setValue("");a!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var l=CKEDITOR.env,k="cke_"+this.id,d=CKEDITOR.tools.addFunction(function(a){x&&(c.unlockSelection(1),x=0);m.execute(a)},this),g=this,m={id:k,combo:this,focus:function(){CKEDITOR.document.getById(k).getChild(1).focus()},
 execute:function(a){var b=g._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(g.createPanel(c),b.on)b.panel.hide();else{g.commit();var d=g.getValue();d?b.list.mark(d):b.list.unmarkAll();b.panel.showBlock(g.id,new CKEDITOR.dom.element(a),4)}},clickFn:d};this._.listeners.push(c.on("activeFilterChange",b,this));this._.listeners.push(c.on("mode",b,this));this._.listeners.push(c.on("selectionChange",b,this));!this.readOnly&&this._.listeners.push(c.on("readOnly",b,this));var a=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(d,b);break;default:m.onkey(m,c)}a.preventDefault()}),n=CKEDITOR.tools.addFunction(function(){m.onfocus&&m.onfocus()}),w=0;m.keyDownFn=a;l={id:k,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:l.gecko&&!l.hc?"":(this.title||"").replace("'",""),keydownFn:a,focusFn:n,clickFn:d};f.output(l,e);if(this.onRender)this.onRender();return m},createPanel:function(c){if(!this._.panel){var e=
+b){a=new CKEDITOR.dom.event(a);var c=a.getKeystroke();switch(c){case 13:case 32:case 40:CKEDITOR.tools.callFunction(d,b);break;default:m.onkey(m,c)}a.preventDefault()}),n=CKEDITOR.tools.addFunction(function(){m.onfocus&&m.onfocus()}),x=0;m.keyDownFn=a;l={id:k,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:l.gecko&&!l.hc?"":(this.title||"").replace("'",""),keydownFn:a,focusFn:n,clickFn:d};f.output(l,e);if(this.onRender)this.onRender();return m},createPanel:function(c){if(!this._.panel){var e=
 this._.panelDefinition,b=this._.panelDefinition.block,f=e.parent||CKEDITOR.document.getBody(),k="cke_combopanel__"+this.name,d=new CKEDITOR.ui.floatPanel(c,f,e),e=d.addListBlock(this.id,b),g=this;d.onShow=function(){this.element.addClass(k);g.setState(CKEDITOR.TRISTATE_ON);g._.on=1;g.editorFocus&&!c.focusManager.hasFocus&&c.focus();if(g.onOpen)g.onOpen()};d.onHide=function(b){this.element.removeClass(k);g.setState(g.modes&&g.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);g._.on=0;
 if(!b&&g.onClose)g.onClose()};d.onEscape=function(){d.hide(1)};e.onClick=function(b,a){g.onClick&&g.onClick.call(g,b,a);d.hide()};this._.panel=d;this._.list=e;d.getBlock(this.id).onHide=function(){g._.on=0;g.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(c,e){this._.value=c;var b=this.document.getById("cke_"+this.id+"_text");b&&(c||e?b.removeClass("cke_combo_inlinelabel"):(e=this.label,b.addClass("cke_combo_inlinelabel")),b.setText("undefined"!=typeof e?e:c))},getValue:function(){return this._.value||
 ""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(c){this._.list.mark(c)},hideItem:function(c){this._.list.hideItem(c)},hideGroup:function(c){this._.list.hideGroup(c)},showAll:function(){this._.list.showAll()},add:function(c,e,b){this._.items[c]=b||c;this._.list.add(c,e,b)},startGroup:function(c){this._.list.startGroup(c)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(c){if(this._.state!=
@@ -863,7 +863,7 @@ return e},isWholeContentSelected:function(e){var c=e.editor.getSelection().getRa
 c.setAttribute(this.fillerAttribute,e?"end":"start");c.setAttribute("data-cke-temp",1);c.setStyles({display:"block",width:0,height:0,padding:0,border:0,margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return c},removeFiller:function(e,c){if(e){var h=c.editor,b=c.editor.getSelection().getRanges()[0].startPath(),l=h.createRange(),k,d;b.contains(e)&&(k=e.getHtml(),d=!0);b="start"==e.getAttribute(this.fillerAttribute);e.remove();k&&0<k.length&&k!=this.fillerContent?(c.insertHtmlIntoRange(k,
 h.getSelection().getRanges()[0]),l.setStartAt(c.getChild(c.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),h.getSelection().selectRanges([l])):d&&(b?l.setStartAt(c.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):l.setEndAt(c.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),c.editor.getSelection().selectRanges([l]))}},createFillerRegex:function(e){var c=this.createFiller(e).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi,"\x3e[^\x3c]*\x3c");return new RegExp((e?
 "":"^")+c+(e?"$":""))},addSelectAllIntegration:function(e){var c=this;e.editable().attachListener(e,"beforeCommandExec",function(h){var b=e.editable();"selectAll"==h.data.name&&b&&c.addFillers(b)},null,null,9999)}}}(),"use strict",function(){function e(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};J(this);z(this);this.on("checkWidgets",k);this.editor.on("contentDomInvalidated",
-this.checkWidgets,this);D(this);x(this);y(this);B(this);A(this)}function f(a,b,d,c,e){var g=a.editor;CKEDITOR.tools.extend(this,c,{editor:g,id:b,inline:"span"==d.getParent().getName(),element:d,data:CKEDITOR.tools.extend({},"function"==typeof c.defaults?c.defaults():c.defaults),dataReady:!1,inited:!1,ready:!1,edit:f.prototype.edit,focusedEditable:null,definition:c,repository:a,draggable:!1!==c.draggable,_:{downcastFn:c.downcast&&"string"==typeof c.downcast?c.downcasts[c.downcast]:c.downcast}},!0);
+this.checkWidgets,this);D(this);w(this);y(this);B(this);A(this)}function f(a,b,d,c,e){var g=a.editor;CKEDITOR.tools.extend(this,c,{editor:g,id:b,inline:"span"==d.getParent().getName(),element:d,data:CKEDITOR.tools.extend({},"function"==typeof c.defaults?c.defaults():c.defaults),dataReady:!1,inited:!1,ready:!1,edit:f.prototype.edit,focusedEditable:null,definition:c,repository:a,draggable:!1!==c.draggable,_:{downcastFn:c.downcast&&"string"==typeof c.downcast?c.downcasts[c.downcast]:c.downcast}},!0);
 a.fire("instanceCreated",this);Z(this,c);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;R(this);this.fire("data",this.data);this.isInited()&&g.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function c(a,b,d){CKEDITOR.dom.element.call(this,b.$);this.editor=a;this._={};b=this.filter=d.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 h(a,b){a.addCommand(b.name,{exec:function(a,d){function c(){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:d});else if(b.template){var e="function"==typeof b.defaults?b.defaults():b.defaults,e=CKEDITOR.dom.element.createFromHtml(b.template.output(e)),
 g,f=a.widgets.wrapElement(e,b.name),h=new CKEDITOR.dom.documentFragment(f.getDocument());h.append(f);(g=a.widgets.initOn(e,b,d&&d.startupData))?(e=g.once("edit",function(b){if(b.data.dialog)g.once("dialog",function(b){b=b.data;var d,e;d=b.once("ok",c,null,null,20);e=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(g,!0)});b.once("hide",function(){d.removeListener();e.removeListener()})});else c()},null,null,999),g.edit(),e.removeListener()):c()}},allowedContent:b.allowedContent,
@@ -872,12 +872,12 @@ b,g):c(e,b,g))}function l(a,b){a.focused=null;if(b.isInited()){var d=b.editor.ch
 !0)){a:{h=p;for(var m=g;m=m.getParent();)if(h(m)){h=!0;break a}h=!1}h=!h}h&&b.contains(g)&&(g.addClass("cke_widget_new"),d.push(this.initOn(g.getFirst(f.isDomWidgetElement))))}}a&&a.focusInited&&1==d.length&&d[0].focus()}}}function d(a){if("undefined"!=typeof a.attributes&&a.attributes["data-widget"]){var b=g(a),d=m(a),c=!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;"),c=!0);d&&d.value&&d.value.match(/\s$/g)&&(d.parent.attributes["data-cke-white-space-last"]=
 1,d.value=d.value.replace(/\s$/g,"\x26nbsp;"),c=!0);c&&(a.attributes["data-cke-widget-white-space"]=1)}}function g(a){return a.find(function(a){return 3===a.type},!0).shift()}function m(a){return a.find(function(a){return 3===a.type},!0).pop()}function a(a,b,d){if(!d.allowedContent&&!d.disallowedContent)return null;var c=this._.filters[a];c||(this._.filters[a]=c={});a=c[b];a||(a=d.allowedContent?new CKEDITOR.filter(d.allowedContent):this.editor.filter.clone(),c[b]=a,d.disallowedContent&&a.disallow(d.disallowedContent));
 return a}function n(a){var b=[],d=a._.upcasts,c=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var e,g,h,k,m;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(f.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(m=d.length){if(a.attributes["data-cke-widget-upcasted"])return!1;k=0;for(e=c.length;k<e;++k)if(!1===c[k](a))return;for(k=0;k<m;++k)if(e=d[k],h={},g=e[0](a,h))return g instanceof CKEDITOR.htmlParser.element&&(a=g),a.attributes["data-cke-widget-data"]=
-encodeURIComponent(JSON.stringify(h)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,e[1]]),!1}}}}function w(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 u(a,b,d){if(a.type==CKEDITOR.NODE_ELEMENT){var c=CKEDITOR.dtd[a.name];if(c&&!c[d.name]){var c=a.split(b),e=a.parent;b=c.getIndex();a.children.length||(--b,a.remove());c.children.length||
+encodeURIComponent(JSON.stringify(h)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,e[1]]),!1}}}}function x(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 u(a,b,d){if(a.type==CKEDITOR.NODE_ELEMENT){var c=CKEDITOR.dtd[a.name];if(c&&!c[d.name]){var c=a.split(b),e=a.parent;b=c.getIndex();a.children.length||(--b,a.remove());c.children.length||
 c.remove();return u(e,b,d)}}a.add(d,b)}function t(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function p(a){return a.hasAttribute("data-cke-temp")}function r(a,b,d,c){var e=a.editor;e.fire("lockSnapshot");d?(c=d.data("cke-widget-editable"),c=b.editables[c],a.widgetHoldingFocusedEditable=b,b.focusedEditable=c,d.addClass("cke_widget_editable_focused"),c.filter&&e.setActiveFilter(c.filter),e.setActiveEnterMode(c.enterMode,c.shiftEnterMode)):(c||b.focusedEditable.removeClass("cke_widget_editable_focused"),
 b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function v(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function q(a,b){return CKEDITOR.tools.trim(b)}function B(a){var b=a.editor,d=CKEDITOR.plugins.lineutils;b.on("dragstart",function(d){var c=d.data.target;f.isDomDragHandler(c)&&(c=a.getByElement(c),d.data.dataTransfer.setData("cke/widget-id",
 c.id),b.focus(),c.focus())});b.on("drop",function(d){var c=d.data.dataTransfer,e=c.getData("cke/widget-id"),g=c.getTransferType(b),c=b.createRange();""!==e&&g===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?d.cancel():""!==e&&g==CKEDITOR.DATA_TRANSFER_INTERNAL&&(e=a.instances[e])&&(c.setStartBefore(e.wrapper),c.setEndAfter(e.wrapper),d.data.dragRange=c,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,d.data.dataTransfer.setData("text/html",
 b.editable().getHtmlFromRange(c).getHtml()),b.widgets.destroy(e,!0))});b.on("contentDom",function(){var c=b.editable();CKEDITOR.tools.extend(a,{finder:new d.finder(b,{lookups:{"default":function(b){if(!b.is(CKEDITOR.dtd.$listItem)&&b.is(CKEDITOR.dtd.$block)&&!f.isDomNestedEditable(b)&&!a._.draggedWidget.wrapper.contains(b)){var d=f.getNestedEditable(c,b);if(d){b=a._.draggedWidget;if(a.getByElement(d)==b)return;d=CKEDITOR.filter.instances[d.data("cke-filter")];b=b.requiredContent;if(d&&b&&!d.check(b))return}return CKEDITOR.LINEUTILS_BEFORE|
-CKEDITOR.LINEUTILS_AFTER}}}}),locator:new d.locator(b),liner:new d.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function x(a){var b=a.editor;b.on("contentDom",function(){var d=b.editable(),c=d.isInline()?d:b.document,e,g;d.attachListener(c,"mousedown",function(d){var c=d.data.getTarget();e=c instanceof CKEDITOR.dom.element?a.getByElement(c):null;g=0;e&&(e.inline&&c.type==CKEDITOR.NODE_ELEMENT&&
+CKEDITOR.LINEUTILS_AFTER}}}}),locator:new d.locator(b),liner:new d.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function w(a){var b=a.editor;b.on("contentDom",function(){var d=b.editable(),c=d.isInline()?d:b.document,e,g;d.attachListener(c,"mousedown",function(d){var c=d.data.getTarget();e=c instanceof CKEDITOR.dom.element?a.getByElement(c):null;g=0;e&&(e.inline&&c.type==CKEDITOR.NODE_ELEMENT&&
 c.hasAttribute("data-cke-widget-drag-handler")?(g=1,a.focused!=e&&b.getSelection().removeAllRanges()):f.getNestedEditable(e.wrapper,c)?e=null:(d.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});d.attachListener(c,"mouseup",function(){g&&e&&e.wrapper&&(g=0,e.focus())});CKEDITOR.env.ie&&d.attachListener(c,"mouseup",function(){setTimeout(function(){e&&e.wrapper&&d.contains(e.wrapper)&&(e.focus(),e=null)})})});b.on("doubleclick",function(b){var d=a.getByElement(b.data.element);if(d&&!f.getNestedEditable(d.wrapper,
 b.data.element))return d.fire("doubleclick",{element:b.data.element})},null,null,1)}function y(a){a.editor.on("key",function(b){var d=a.focused,c=a.widgetHoldingFocusedEditable,e;d?e=d.fire("key",{keyCode:b.data.keyCode}):c&&(d=b.data.keyCode,b=c.focusedEditable,d==CKEDITOR.CTRL+65?(d=b.getBogus(),c=c.editor.createRange(),c.selectNodeContents(b),d&&c.setEndAt(d,CKEDITOR.POSITION_BEFORE_START),c.select(),e=!1):8==d||46==d?(e=c.editor.getSelection().getRanges(),c=e[0],e=!(1==e.length&&c.collapsed&&
 c.checkBoundaryOfElement(b,CKEDITOR[8==d?"START":"END"]))):e=void 0);return e},null,null,1)}function A(a){function b(d){a.focused&&G(a.focused,"cut"==d.name)}var d=a.editor;d.on("contentDom",function(){var a=d.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function D(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(d){var c=(d=f.getNestedEditable(b.editable(),d.data.selection.getStartElement()))&&
@@ -890,27 +890,28 @@ a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&b
 commit:function(){var g=a.focused!==e,f,h;a.editor.fire("lockSnapshot");for(g&&(f=a.focused)&&l(a,f);f=c.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=d.pop();)b.push(f),f.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function H(a,b,d){var c=0;b=L(b);var e=a.data.classes||{},g;if(b){for(e=
 CKEDITOR.tools.clone(e);g=b.pop();)d?e[g]||(c=e[g]=1):e[g]&&(delete e[g],c=1);c&&a.setData("classes",e)}}function F(a){a.cancel()}function G(a,b){var d=a.editor,c=d.document,e=CKEDITOR.env.edge&&16<=CKEDITOR.env.version;if(!c.getById("cke_copybin")){var g=!d.blockless&&!CKEDITOR.env.ie||e?"div":"span",e=c.createElement(g),f=c.createElement(g),g=CKEDITOR.env.ie&&9>CKEDITOR.env.version;f.setAttributes({id:"cke_copybin","data-cke-temp":"1"});e.setStyles({position:"absolute",width:"1px",height:"1px",
 overflow:"hidden"});e.setStyle("ltr"==d.config.contentsLangDirection?"left":"right","-5000px");var h=d.createRange();h.setStartBefore(a.wrapper);h.setEndAfter(a.wrapper);e.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e​\x3c/span\x3e'+d.editable().getHtmlFromRange(h).getHtml()+'\x3cspan data-cke-copybin-end\x3d"1"\x3e​\x3c/span\x3e');d.fire("saveSnapshot");d.fire("lockSnapshot");f.append(e);d.editable().append(f);var k=d.on("selectionChange",F,null,null,0),m=a.repository.on("checkSelection",F,
-null,null,0);if(g)var l=c.getDocumentElement().$,r=l.scrollTop;h=d.createRange();h.selectNodeContents(e);h.select();g&&(l.scrollTop=r);setTimeout(function(){b||a.focus();f.remove();k.removeListener();m.removeListener();d.fire("unlockSnapshot");b&&!d.readOnly&&(a.repository.del(a),d.fire("saveSnapshot"))},100)}}function L(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function I(){var a=CKEDITOR.document.getActive(),b=this.editor,d=b.editable();(d.isInline()?d:b.document.getWindow().getFrame()).equals(a)&&
+null,null,0);if(g)var l=c.getDocumentElement().$,q=l.scrollTop;h=d.createRange();h.selectNodeContents(e);h.select();g&&(l.scrollTop=q);setTimeout(function(){b||a.focus();f.remove();k.removeListener();m.removeListener();d.fire("unlockSnapshot");b&&!d.readOnly&&(a.repository.del(a),d.fire("saveSnapshot"))},100)}}function L(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function I(){var a=CKEDITOR.document.getActive(),b=this.editor,d=b.editable();(d.isInline()?d:b.document.getWindow().getFrame()).equals(a)&&
 b.focusManager.focus(d)}function C(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function S(a){var b=null;a.on("data",function(){var a=this.data.classes,d;if(b!=a){for(d in b)a&&a[d]||this.removeClass(d);for(d in a)this.addClass(d);b=a}})}function O(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 P(a){if(a.draggable){var b=a.editor,d=a.wrapper.getLast(f.isDomDragHandlerContainer),c;d?c=d.findOne("img"):(d=new CKEDITOR.dom.element("span",b.document),d.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)"}),c=new CKEDITOR.dom.element("img",b.document),c.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&&c.setAttribute("draggable","true"),d.append(c),a.wrapper.append(d));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&&(c.on("mousedown",K,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))c.on("dragstart",
-function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=d}}function K(a){function b(){var d;for(q.reset();d=h.pop();)d.removeListener();var c=k;d=a.sender;var e=this.repository.finder,g=this.repository.liner,f=this.editor,m=this.editor.editable();CKEDITOR.tools.isEmpty(g.visible)||(c=e.getRange(c[0]),this.focus(),f.fire("drop",{dropRange:c,target:c.startContainer}));m.removeClass("cke_widget_dragging");g.hideVisible();f.fire("dragend",{target:d})}if(CKEDITOR.tools.getMouseButton(a)===CKEDITOR.MOUSE_BUTTON_LEFT){var d=
-this.repository.finder,c=this.repository.locator,e=this.repository.liner,g=this.editor,f=g.editable(),h=[],k=[],m,l;this.repository._.draggedWidget=this;var r=d.greedySearch(),q=CKEDITOR.tools.eventsBuffer(50,function(){m=c.locate(r);k=c.sort(l,1);k.length&&(e.prepare(r,m),e.placeLine(k[0]),e.cleanup())});f.addClass("cke_widget_dragging");h.push(f.on("mousemove",function(a){l=a.data.$.clientY;q.input()}));g.fire("dragstart",{target:a.sender});h.push(g.document.once("mouseup",b,this));f.isInline()||
+function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=d}}function K(a){function b(){var d;for(r.reset();d=h.pop();)d.removeListener();var c=k;d=a.sender;var e=this.repository.finder,g=this.repository.liner,f=this.editor,m=this.editor.editable();CKEDITOR.tools.isEmpty(g.visible)||(c=e.getRange(c[0]),this.focus(),f.fire("drop",{dropRange:c,target:c.startContainer}));m.removeClass("cke_widget_dragging");g.hideVisible();f.fire("dragend",{target:d})}if(CKEDITOR.tools.getMouseButton(a)===CKEDITOR.MOUSE_BUTTON_LEFT){var d=
+this.repository.finder,c=this.repository.locator,e=this.repository.liner,g=this.editor,f=g.editable(),h=[],k=[],m,l;this.repository._.draggedWidget=this;var q=d.greedySearch(),r=CKEDITOR.tools.eventsBuffer(50,function(){m=c.locate(q);k=c.sort(l,1);k.length&&(e.prepare(q,m),e.placeLine(k[0]),e.cleanup())});f.addClass("cke_widget_dragging");h.push(f.on("mousemove",function(a){l=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 V(a){var b,d,c=a.editables;a.editables={};if(a.editables)for(b in c)d=c[b],a.initEditable(b,"string"==typeof d?{selector:d}:d)}function T(a){if(a.mask){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 Y(a){if(a.parts){var b={},d,c;for(c in a.parts)d=a.wrapper.findOne(a.parts[c]),
 b[c]=d;a.parts=b}}function Z(a,b){M(a);Y(a);V(a);T(a);P(a);S(a);O(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var d=b.data.getTarget();f.getNestedEditable(a,d)||a.inline&&f.isDomDragHandler(d)||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){G(a,b==CKEDITOR.CTRL+88);return}if(b in U||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 M(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function R(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}function N(){function a(){}function b(a,d,c){return c&&this.checkElement(a)?(a=c.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}var d={};CKEDITOR.style.addCustomHandler({type:"widget",
-setup:function(a){this.widget=a.widget;if(this.group="string"==typeof a.group?[a.group]:a.group){a=this.widget;var b;d[a]||(d[a]={});for(var c=0,e=this.group.length;c<e;c++)b=this.group[c],d[a][b]||(d[a][b]=[]),d[a][b].push(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,c,e=!1;if(!(a instanceof CKEDITOR.editor))return!1;c=a.elementPath();if(this.checkApplicable(c,a))for(var g=0,f=this.group.length;g<f;g++){b=d[this.widget][this.group[g]];for(var h=0;h<b.length;h++)b[h]!==this&&b[h].checkActive(c,a)&&(a.widgets.focused.removeStyle(b[h]),e=!0)}return e},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 f.isDomWidgetWrapper(a)?(a=a.getFirst(f.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,d={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;d[a.styleableElements]={classes:b,propertiesOnly:!0};
-return d}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:none;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}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_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}"),
+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 M(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function R(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}function N(){function a(){}function b(a,d,c){return c&&this.checkElement(a)?(a=c.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}function d(a){function b(a,
+d,c){for(var e=a.length,g=0;g<e;){if(d.call(c,a[g],g,a))return a[g];g++}}function e(a){function b(a,d){var c=CKEDITOR.tools.objectKeys(a),e=CKEDITOR.tools.objectKeys(d);if(c.length!==e.length)return!1;for(var g in a)if(("object"!==typeof a[g]||"object"!==typeof d[g]||!b(a[g],d[g]))&&a[g]!==d[g])return!1;return!0}return function(d){return b(a.getDefinition(),d.getDefinition())}}var g=a.widget,f;c[g]||(c[g]={});for(var h=0,k=a.group.length;h<k;h++)f=a.group[h],c[g][f]||(c[g][f]=[]),f=c[g][f],b(f,e(a))||
+f.push(a)}var c={};CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget;(this.group="string"==typeof a.group?[a.group]:a.group)&&d(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,
+d,e=!1;if(!(a instanceof CKEDITOR.editor))return!1;d=a.elementPath();if(this.checkApplicable(d,a))for(var g=0,f=this.group.length;g<f;g++){b=c[this.widget][this.group[g]];for(var h=0;h<b.length;h++)b[h]!==this&&b[h].checkActive(d,a)&&(a.widgets.focused.removeStyle(b[h]),e=!0)}return e},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 f.isDomWidgetWrapper(a)?(a=a.getFirst(f.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,d={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;d[a.styleableElements]={classes:b,propertiesOnly:!0};return d}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:none;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}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_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}"),
 N())},beforeInit:function(a){void 0!==CKEDITOR.document.$.querySelectorAll&&(a.widgets=new e(a))},afterInit:function(a){if(void 0!==CKEDITOR.document.$.querySelectorAll){var b=a.widgets.registered,d,c,e;for(c in b)d=b[c],(e=d.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(d.name,!0),{label:e,command:d.name,toolbar:"insert,10"});v(a)}}});e.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(a,d){d=CKEDITOR.tools.prototypedCopy(d);d.name=a;d._=d._||{};this.editor.fire("widgetDefinition",
 d);d.template&&(d.template=new CKEDITOR.template(d.template));h(this.editor,d);b(this,d);return this.registered[a]=d},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},checkSelection:function(){var a=this.editor.getSelection(),b=a.getSelectedElement(),d=E(this),c;if(b&&(c=this.getByElement(b,!0)))return d.focus(c).select(c).commit();a=a.getRanges()[0];if(!a||a.collapsed)return d.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=f.isDomWidgetWrapper;b=a.next();)d.select(this.getByElement(b));
 d.commit()},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===a){var b=a.editor,d=b.createRange(),c;(c=d.moveToClosestEditablePosition(a.wrapper,!0))||(c=d.moveToClosestEditablePosition(a.wrapper,!1));c&&b.getSelection().selectRanges([d])}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 d,c,e=this.instances;if(b&&!a){c=b.find(".cke_widget_wrapper");for(var e=c.count(),g=0;g<e;++g)(d=this.getByElement(c.getItem(g),!0))&&this.destroy(d)}else for(c in e)d=e[c],this.destroy(d,a)},finalizeCreation:function(a){(a=a.getFirst())&&f.isDomWidgetWrapper(a)&&(this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus())},getByElement:function(){function a(d){return d.is(b)&&d.data("cke-widget-id")}var b={div:1,span:1};return function(b,d){if(!b)return null;
 var c=a(b);if(!d&&!c){var e=this.editor.editable();do b=b.getParent();while(b&&!b.equals(e)&&!(c=a(b)))}return this.instances[c]||null}}(),initOn:function(a,b,d){b?"string"==typeof b&&(b=this.registered[b]):b=this.registered[a.data("widget")];if(!b)return null;var c=this.wrapElement(a,b.name);return c?c.hasClass("cke_widget_new")?(a=new f(this,this._.nextId++,a,b,d),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=[],d,c=a.count();c--;)(d=this.initOn(a.getItem(c).getFirst(f.isDomWidgetElement)))&&b.push(d);return b},onWidget:function(a){var b=Array.prototype.slice.call(arguments);b.shift();for(var d in this.instances){var c=this.instances[d];c.name==a&&c.on.apply(c,b)}this.on("instanceCreated",function(d){d=d.data;d.name==a&&d.on.apply(d,b)})},parseElementClasses:function(a){if(!a)return null;a=CKEDITOR.tools.trim(a).split(/\s+/);for(var b,d={},c=0;b=a.pop();)-1==b.indexOf("cke_")&&(d[b]=c=1);return c?
-d:null},wrapElement:function(a,b){var c=null,e,g;if(a instanceof CKEDITOR.dom.element){b=b||a.data("widget");e=this.registered[b];if(!e)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);(g=t(e,a.getName()))&&d(a);c=new CKEDITOR.dom.element(g?"span":"div");c.setAttributes(w(g,b));c.data("cke-display-name",e.pathName?e.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"];e=this.registered[b];if(!e)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);(g=t(e,a.name))&&d(a);c=new CKEDITOR.htmlParser.element(g?"span":"div",w(g,b));c.attributes["data-cke-display-name"]=
+d:null},wrapElement:function(a,b){var c=null,e,g;if(a instanceof CKEDITOR.dom.element){b=b||a.data("widget");e=this.registered[b];if(!e)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);(g=t(e,a.getName()))&&d(a);c=new CKEDITOR.dom.element(g?"span":"div");c.setAttributes(x(g,b));c.data("cke-display-name",e.pathName?e.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"];e=this.registered[b];if(!e)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);(g=t(e,a.name))&&d(a);c=new CKEDITOR.htmlParser.element(g?"span":"div",x(g,b));c.attributes["data-cke-display-name"]=
 e.pathName?e.pathName:a.name;e=a.parent;var f;e&&(f=a.getIndex(),a.remove());c.add(a);e&&u(e,f,c)}return c},_tests_createEditableFilter:a};CKEDITOR.event.implementOn(e.prototype);f.prototype={addClass:function(a){this.element.addClass(a);this.wrapper.addClass(f.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){H(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 d=this.editables[a],c=!0;d.removeListener("focus",C);d.removeListener("blur",I);this.editor.focusManager.remove(d);if(d.filter){for(var e in this.repository.instances){var g=this.repository.instances[e];
 g.editables&&(g=g.editables[a])&&g!==d&&d.filter===g.filter&&(c=!1)}c&&(d.filter.destroy(),(c=this.repository._.filters[this.name])&&delete c[a])}b||(this.repository.destroyAll(!1,d),d.removeClass("cke_widget_editable"),d.removeClass("cke_widget_editable_focused"),d.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,
@@ -922,40 +923,40 @@ return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("c
 CKEDITOR.event.implementOn(f.prototype);f.getNestedEditable=function(a,b){return!b||b.equals(a)?null:f.isDomNestedEditable(b)?b:f.getNestedEditable(a,b.getParent())};f.isDomDragHandler=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-drag-handler")};f.isDomDragHandlerContainer=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")};f.isDomNestedEditable=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")};
 f.isDomWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-widget")};f.isDomWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")};f.isDomWidget=function(a){return a?this.isDomWidgetWrapper(a)||this.isDomWidgetElement(a):!1};f.isParserWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]};f.isParserWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-cke-widget-wrapper"]};
 f.WRAPPER_CLASS_PREFIX="cke_widget_wrapper_";c.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.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 W=/^(?:<(?: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,U={37:1,38:1,39:1,40:1,8:1,46:1};CKEDITOR.plugins.widget=f;f.repository=e;f.nestedEditable=c}(),"use strict",function(){function e(b){function d(){this.deflated||
+filter:this.filter,enterMode:this.enterMode})}});var W=/^(?:<(?: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,U={37:1,38:1,39:1,40:1,8:1,46:1};U[CKEDITOR.SHIFT+121]=1;CKEDITOR.plugins.widget=f;f.repository=e;f.nestedEditable=c}(),"use strict",function(){function e(b){function d(){this.deflated||
 (b.widgets.focused==this.widget&&(this.focused=!0),b.widgets.destroy(this.widget),this.deflated=!0)}function e(){var a=b.editable(),d=b.document;if(this.deflated)this.widget=b.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,a)).block&&(a=d.createElement(b.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),a.replace(this.widget.wrapper),this.widget.wrapper.move(a)),this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;
 else{var c=this.widget,a=g,d=c.wrapper,f=c.data.align,c=c.data.hasCaption;if(a){for(var h=3;h--;)d.removeClass(a[h]);"center"==f?c&&d.addClass(a[1]):"none"!=f&&d.addClass(a[u[f]])}else"center"==f?(c?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 g=b.config.image2_alignClasses,h=b.config.image2_captionedClass;return{allowedContent:m(b),requiredContent:"img[src,alt]",features:a(b),
 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 a=this.features;this.data.hasCaption&&!b.filter.checkFeature(a.caption)&&(this.data.hasCaption=!1);"none"==this.data.align||b.filter.checkFeature(a.align)||(this.data.align="none");this.shiftState({widget:this,
 element:this.element,oldData:this.oldData,newData:this.data,deflate:d,inflate:e});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 c in this.data.classes)this.parts.image.removeClass(c);if(b.filter.checkFeature(a.dimension)){a=this.data;a={width:a.width,
 height:a.height};c=this.parts.image;for(var g in a)a[g]?c.setAttribute(g,a[g]):c.removeAttribute(g)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var a=CKEDITOR.plugins.image2,d=this.parts.image,c={hasCaption:!!this.parts.caption,src:d.getAttribute("src"),alt:d.getAttribute("alt")||"",width:d.getAttribute("width")||"",height:d.getAttribute("height")||"",lock:this.ready?a.checkHasNaturalRatio(d):!0},e=d.getAscendant("a");e&&this.wrapper.contains(e)&&(this.parts.link=e);c.align||
 (d=c.hasCaption?this.element:d,g?(d.hasClass(g[0])?c.align="left":d.hasClass(g[2])&&(c.align="right"),c.align?d.removeClass(g[u[c.align]]):c.align="none"):(c.align=d.getStyle("float")||"none",d.removeStyle("float")));b.plugins.link&&this.parts.link&&(c.link=a.getLinkAttributesParser()(b,this.parts.link),(d=c.link.advanced)&&d.advCSSClasses&&(d.advCSSClasses=CKEDITOR.tools.trim(d.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(c.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(c);
-b.filter.checkFeature(this.features.dimension)&&!0!==b.config.image2_disableResizer&&1!=b.readOnly&&l(this);this.shiftState=a.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});this.on("dialog",function(a){a.data.widget=this},this)},addClass:function(a){n(this).addClass(a)},hasClass:function(a){return n(this).hasClass(a)},removeClass:function(a){n(this).removeClass(a)},
+b.filter.checkFeature(this.features.dimension)&&!0!==b.config.image2_disableResizer&&l(this);this.shiftState=a.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});this.on("dialog",function(a){a.data.widget=this},this)},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(h,g).join("|")+")$");return function(){var b=this.repository.parseElementClasses(n(this).getAttribute("class")),d;for(d in b)a.test(d)&&delete b[d];return b}}(),upcast:f(b),downcast:c(b),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/,(this.data.alt||"")+" "+this.pathName)}}}function f(a){var d=h(a),c=a.config.image2_captionedClass;return function(a,e){var g={width:1,height:1},f=a.name,h;if(!a.attributes["data-cke-realelement"]&&
 (d(a)?("div"==f&&(h=a.getFirst("figure"))&&(a.replaceWith(h),a=h),e.align="center",h=a.getFirst("img")||a.getFirst("a").getFirst("img")):"figure"==f&&a.hasClass(c)?h=a.find(function(a){return"img"===a.name&&-1!==CKEDITOR.tools.array.indexOf(["figure","a"],a.parent.name)},!0)[0]:b(a)&&(h="a"==a.name?a.children[0]:a),h)){for(var k in g)(g=h.attributes[k])&&g.match(t)&&delete h.attributes[k];return a}}}function c(a){var b=a.config.image2_alignClasses;return function(a){var d="a"==a.name?a.getFirst():
 a,c=d.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(c.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?d.addClass(b[u[e]]):g["float"]=e),b||CKEDITOR.tools.isEmpty(g)||(c.style=CKEDITOR.tools.writeCssText(g)));return a}}function h(a){var d=a.config.image2_captionedClass,c=a.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(!b(f))return!1}else if("figure"==f.name){if(!f.hasClass(d))return!1}else if(a.enterMode==CKEDITOR.ENTER_P||!b(f))return!1;return(c?g.hasClass(c[1]):"center"==CKEDITOR.tools.parseCssText(g.attributes.style||"",!0)["text-align"])?!0:!1}}function b(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function l(a){var b=
 a.editor,d=b.editable(),c=b.document,e=a.resizer=c.createElement("span");e.addClass("cke_image_resizer");e.setAttribute("title",b.lang.image2.resizer);e.append(new CKEDITOR.dom.text("​",c));if(a.inline)a.wrapper.append(e);else{var g=a.parts.link||a.parts.image,f=g.getParent(),h=c.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,d){var e=CKEDITOR.document,g=[];c.equals(e)||
-g.push(e.on(a,b));g.push(c.on(a,b));if(d)for(a=g.length;a--;)d.push(g.pop())}function h(){V=x+l*Z;T=Math.round(V/w)}function k(){T=y-M;V=Math.round(T*w)}var m=a.parts.image,l="right"==a.data.align?-1:1,n=g.data.$.screenX,A=g.data.$.screenY,x=m.$.clientWidth,y=m.$.clientHeight,w=x/y,u=[],t="cke_image_s"+(~l?"e":"w"),K,V,T,Y,Z,M,R;b.fire("saveSnapshot");f("mousemove",function(a){K=a.data.$;Z=K.screenX-n;M=A-K.screenY;R=Math.abs(Z/M);1==l?0>=Z?0>=M?h():R>=w?h():k():0>=M?R>=w?k():h():k():0>=Z?0>=M?R>=
-w?k():h():k():0>=M?h():R>=w?h():k();15<=V&&15<=T?(m.setAttributes({width:V,height:T}),Y=!0):Y=!1},u);f("mouseup",function(){for(var c;c=u.pop();)c.removeListener();d.removeClass(t);e.removeClass("cke_image_resizing");Y&&(a.setData({width:V,height:T}),b.fire("saveSnapshot"));Y=!1},u);d.addClass(t);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(c){var e=a.getCommand("justify"+
+g.push(e.on(a,b));g.push(c.on(a,b));if(d)for(a=g.length;a--;)d.push(g.pop())}function h(){V=w+l*Z;T=Math.round(V/x)}function k(){T=y-M;V=Math.round(T*x)}var m=a.parts.image,l="right"==a.data.align?-1:1,n=g.data.$.screenX,A=g.data.$.screenY,w=m.$.clientWidth,y=m.$.clientHeight,x=w/y,u=[],t="cke_image_s"+(~l?"e":"w"),K,V,T,Y,Z,M,R;b.fire("saveSnapshot");f("mousemove",function(a){K=a.data.$;Z=K.screenX-n;M=A-K.screenY;R=Math.abs(Z/M);1==l?0>=Z?0>=M?h():R>=x?h():k():0>=M?R>=x?k():h():k():0>=Z?0>=M?R>=
+x?k():h():k():0>=M?h():R>=x?h():k();15<=V&&15<=T?(m.setAttributes({width:V,height:T}),Y=!0):Y=!1},u);f("mouseup",function(){for(var c;c=u.pop();)c.removeListener();d.removeClass(t);e.removeClass("cke_image_resizing");Y&&(a.setData({width:V,height:T}),b.fire("saveSnapshot"));Y=!1},u);d.addClass(t);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(c){var e=a.getCommand("justify"+
 c);if(e){b.push(function(){e.refresh(a,a.elementPath())});if(c in{right:1,left:1,center:1})e.on("exec",function(d){var e=g(a);if(e){e.setData("align",c);for(e=b.length;e--;)b[e]();d.cancel()}});e.on("refresh",function(b){var e=g(a),f={right:1,left:1,center:1};e&&(void 0===d&&(d=a.filter.checkFeature(a.widgets.registered.image.features.align)),d?this.setState(e.data.align==c?CKEDITOR.TRISTATE_ON:c in f?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}
-function d(a){a.plugins.link&&(CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){b=b.definition;var d=b.onShow,c=b.onOk;b.onShow=function(){var b=g(a),c=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),c.hide()):(c.show(),d.apply(this,arguments))};b.onOk=function(){var b=g(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);b.setData("link",
-d)}else c.apply(this,arguments)}}}),a.getCommand("unlink").on("exec",function(b){var d=g(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=g(a);d&&(this.setState(d.data.link||d.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())}))}function g(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function m(a){var b=a.config.image2_alignClasses;a={div:{match:h(a)},p:{match:h(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 a(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 w=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),u={left:0,center:1,right:2},t=/^\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_widget_wrapper\x3ea{display:inline-block}")},
+function d(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,c=b.onOk;b.onShow=function(){var b=g(a),c=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),c.hide()):(c.show(),d.apply(this,arguments))};b.onOk=function(){var b=g(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);
+b.setData("link",d)}else c.apply(this,arguments)}}});a.on("destroy",function(){b.removeListener()});a.getCommand("unlink").on("exec",function(b){var d=g(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=g(a);d&&(this.setState(d.data.link||d.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}function g(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function m(a){var b=
+a.config.image2_alignClasses;a={div:{match:h(a)},p:{match:h(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 a(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 x=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),u={left:0,center:1,right:2},t=/^\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 b=a.config,d=a.lang.image2,c=e(a);b.filebrowserImage2BrowseUrl=b.filebrowserImageBrowseUrl;b.filebrowserImage2UploadUrl=b.filebrowserImageUploadUrl;c.pathName=d.pathName;c.editables.caption.pathName=d.pathNameCaption;a.widgets.add("image",c);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),e;for(e in b)c(e);d(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=c.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",f);d(f,g);g.move(f);return f}function d(b,c){if(c.getParent()){var e=a.createRange();e.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);
 c.remove();f.insertElementIntoRange(b,e)}else b.replace(c)}var c=a.document,e=a.config.image2_alignClasses,g=a.config.image2_captionedClass,f=a.editable(),h=["hasCaption","align","link"],k={align:function(d,c,g){var f=d.element;d.changed.align?d.newData.hasCaption||("center"==g&&(d.deflate(),d.element=b(a,f)),d.changed.hasCaption||"center"!=c||"center"==g||(d.deflate(),c=f.findOne("a,img"),c.replace(f),d.element=c)):"center"==g&&d.changed.hasCaption&&!d.newData.hasCaption&&(d.deflate(),d.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(w.output({captionedClass:g,captionPlaceholder:a.lang.image2.captionPlaceholder}),c),d(f,b.element),e.replace(f.findOne("img")),b.element=f):(e.replace(b.element),b.element=e))},link:function(b,d,e){if(b.changed.link){var g=b.element.is("img")?
+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(x.output({captionedClass:g,captionPlaceholder:a.lang.image2.captionPlaceholder}),c),d(f,b.element),e.replace(f.findOne("img")),b.element=f):(e.replace(b.element),b.element=e))},link:function(b,d,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?(d||(k=c.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,d;
 a.changed={};for(d=0;d<h.length;d++)b=h[d],a.changed[b]=a.oldData?a.oldData[b]!==a.newData[b]:!1;for(d=0;d<h.length;d++)b=h[d],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 e(e,b){var l,k;b.on("refresh",function(b){var e=[f],h;for(h in b.data.states)e.push(b.data.states[h]);this.setState(CKEDITOR.tools.search(e,c)?c:f)},b,null,100);b.on("exec",function(b){l=e.getSelection();
 k=l.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on("exec",function(){e.forceNextSelectionCheck();l.selectBookmarks(k)},b,null,100)}var f=CKEDITOR.TRISTATE_DISABLED,c=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(c){var b=CKEDITOR.plugins.indent.genericDefinition;e(c,c.addCommand("indent",new b(!0)));e(c,c.addCommand("outdent",new b));c.ui.addButton&&(c.ui.addButton("Indent",{label:c.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),
-c.ui.addButton("Outdent",{label:c.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));c.on("dirChanged",function(b){var e=c.createRange(),d=b.data.node;e.setStartBefore(d);e.setEndAfter(d);for(var g=new CKEDITOR.dom.walker(e),f;f=g.next();)if(f.type==CKEDITOR.NODE_ELEMENT)if(!f.equals(d)&&f.getDirection())e.setStartAfter(f),g=new CKEDITOR.dom.walker(e);else{var a=c.config.indentClasses;if(a)for(var n="ltr"==b.data.dir?["_rtl",""]:["","_rtl"],w=0;w<a.length;w++)f.hasClass(a[w]+
-n[0])&&(f.removeClass(a[w]+n[0]),f.addClass(a[w]+n[1]));a=f.getStyle("margin-right");n=f.getStyle("margin-left");a?f.setStyle("margin-left",a):f.removeStyle("margin-left");n?f.setStyle("margin-right",n):f.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(c){this.isIndent=!!c;this.startDisabled=!this.isIndent},specificDefinition:function(c,b,e){this.name=b;this.editor=c;this.jobs={};this.enterBr=c.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=
+c.ui.addButton("Outdent",{label:c.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));c.on("dirChanged",function(b){var e=c.createRange(),d=b.data.node;e.setStartBefore(d);e.setEndAfter(d);for(var g=new CKEDITOR.dom.walker(e),f;f=g.next();)if(f.type==CKEDITOR.NODE_ELEMENT)if(!f.equals(d)&&f.getDirection())e.setStartAfter(f),g=new CKEDITOR.dom.walker(e);else{var a=c.config.indentClasses;if(a)for(var n="ltr"==b.data.dir?["_rtl",""]:["","_rtl"],x=0;x<a.length;x++)f.hasClass(a[x]+
+n[0])&&(f.removeClass(a[x]+n[0]),f.addClass(a[x]+n[1]));a=f.getStyle("margin-right");n=f.getStyle("margin-left");a?f.setStyle("margin-left",a):f.removeStyle("margin-left");n?f.setStyle("margin-right",n):f.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(c){this.isIndent=!!c;this.startDisabled=!this.isIndent},specificDefinition:function(c,b,e){this.name=b;this.editor=c;this.jobs={};this.enterBr=c.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=
 e?"indent":"outdent";this.indentKey=e?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(c,b){c.on("pluginsLoaded",function(){for(var c in b)(function(b,d){var c=b.getCommand(d.relatedGlobal),e;for(e in d.jobs)c.on("exec",function(a){a.data.done||(b.fire("lockSnapshot"),d.execJob(b,e)&&(a.data.done=!0),b.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(d.database))},this,null,e),c.on("refresh",function(a){a.data.states||(a.data.states={});a.data.states[d.name+"@"+e]=d.refreshJob(b,
 e,a.data.path)},this,null,e);b.addFeature(d)})(this,b[c])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(c,b){var e=this.jobs[b];if(e.state!=f)return e.exec.call(this,c)},refreshJob:function(c,b,e){b=this.jobs[b];c.activeFilter.checkFeature(this)?b.state=b.refresh.call(this,c,e):b.state=f;return b.state},getContext:function(c){return c.contains(this.context)}}}(),function(){function e(b){function e(g){for(var f=
-l.startContainer,q=l.endContainer;f&&!f.getParent().equals(g);)f=f.getParent();for(;q&&!q.getParent().equals(g);)q=q.getParent();if(!f||!q)return!1;for(var B=[],x=!1;!x;)f.equals(q)&&(x=!0),B.push(f),f=f.getNext();if(1>B.length)return!1;f=g.getParents(!0);for(q=0;q<f.length;q++)if(f[q].getName&&k[f[q].getName()]){g=f[q];break}for(var f=h.isIndent?1:-1,q=B[0],B=B[B.length-1],x=CKEDITOR.plugins.list.listToArray(g,a),p=x[B.getCustomData("listarray_index")].indent,q=q.getCustomData("listarray_index");q<=
-B.getCustomData("listarray_index");q++)if(x[q].indent+=f,0<f){for(var A=x[q].parent,u=q-1;0<=u;u--)if(x[u].indent===f){A=x[u].parent;break}x[q].parent=new CKEDITOR.dom.element(A.getName(),A.getDocument())}for(q=B.getCustomData("listarray_index")+1;q<x.length&&x[q].indent>p;q++)x[q].indent+=f;f=CKEDITOR.plugins.list.arrayToList(x,a,null,b.config.enterMode,g.getDirection());if(!h.isIndent){var z;if((z=g.getParent())&&z.is("li"))for(var B=f.listNode.getChildren(),t=[],E,q=B.count()-1;0<=q;q--)(E=B.getItem(q))&&
+l.startContainer,q=l.endContainer;f&&!f.getParent().equals(g);)f=f.getParent();for(;q&&!q.getParent().equals(g);)q=q.getParent();if(!f||!q)return!1;for(var B=[],w=!1;!w;)f.equals(q)&&(w=!0),B.push(f),f=f.getNext();if(1>B.length)return!1;f=g.getParents(!0);for(q=0;q<f.length;q++)if(f[q].getName&&k[f[q].getName()]){g=f[q];break}for(var f=h.isIndent?1:-1,q=B[0],B=B[B.length-1],w=CKEDITOR.plugins.list.listToArray(g,a),p=w[B.getCustomData("listarray_index")].indent,q=q.getCustomData("listarray_index");q<=
+B.getCustomData("listarray_index");q++)if(w[q].indent+=f,0<f){for(var A=w[q].parent,u=q-1;0<=u;u--)if(w[u].indent===f){A=w[u].parent;break}w[q].parent=new CKEDITOR.dom.element(A.getName(),A.getDocument())}for(q=B.getCustomData("listarray_index")+1;q<w.length&&w[q].indent>p;q++)w[q].indent+=f;f=CKEDITOR.plugins.list.arrayToList(w,a,null,b.config.enterMode,g.getDirection());if(!h.isIndent){var z;if((z=g.getParent())&&z.is("li"))for(var B=f.listNode.getChildren(),t=[],E,q=B.count()-1;0<=q;q--)(E=B.getItem(q))&&
 E.is&&E.is("li")&&t.push(E)}f&&f.listNode.replace(g);if(t&&t.length)for(q=0;q<t.length;q++){for(E=g=t[q];(E=E.getNext())&&E.is&&E.getName()in k;)CKEDITOR.env.needsNbspFiller&&!g.getFirst(c)&&g.append(l.document.createText(" ")),g.append(E);g.insertAfter(z)}f&&b.fire("contentDomInvalidated");return!0}for(var h=this,a=this.database,k=this.context,l,u=b.getSelection(),u=(u&&u.getRanges()).createIterator();l=u.getNextRange();){for(var t=l.getCommonAncestor();t&&(t.type!=CKEDITOR.NODE_ELEMENT||!k[t.getName()]);){if(b.editable().equals(t)){t=
 !1;break}t=t.getParent()}t||(t=l.startPath().contains(k))&&l.setEndAt(t,CKEDITOR.POSITION_BEFORE_END);if(!t){var p=l.getEnclosedNode();p&&p.type==CKEDITOR.NODE_ELEMENT&&p.getName()in k&&(l.setStartAt(p,CKEDITOR.POSITION_AFTER_START),l.setEndAt(p,CKEDITOR.POSITION_BEFORE_END),t=p)}t&&l.startContainer.type==CKEDITOR.NODE_ELEMENT&&l.startContainer.getName()in k&&(p=new CKEDITOR.dom.walker(l),p.evaluator=f,l.startContainer=p.next());t&&l.endContainer.type==CKEDITOR.NODE_ELEMENT&&l.endContainer.getName()in
 k&&(p=new CKEDITOR.dom.walker(l),p.evaluator=f,l.endContainer=p.previous());if(t)return e(t)}return 0}function f(b){return b.type==CKEDITOR.NODE_ELEMENT&&b.is("li")}function c(d){return h(d)&&b(d)}var h=CKEDITOR.dom.walker.whitespaces(!0),b=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.TRISTATE_DISABLED,k=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(b){function c(a){f.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];a.on("key",
@@ -964,77 +965,77 @@ exec:CKEDITOR.tools.bind(e,this)}}var f=CKEDITOR.plugins.indent;f.registerComman
 else{for(;!c.hasAttribute||!c.hasAttribute("align")&&!c.getStyle("text-align");){e=c.getParent();if(!e)break;c=e}e=c.getStyle("text-align")||c.getAttribute("align")||""}e&&(e=e.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!e&&b&&(e="rtl"==c.getComputedStyle("direction")?"right":"left");return e}function f(c,b,e){this.editor=c;this.name=b;this.value=e;this.context="p";b=c.config.justifyClasses;var f=c.config.enterMode==CKEDITOR.ENTER_P?"p":"div";if(b){switch(e){case "left":this.cssClassName=
 b[0];break;case "center":this.cssClassName=b[1];break;case "right":this.cssClassName=b[2];break;case "justify":this.cssClassName=b[3]}this.cssClassRegex=new RegExp("(?:^|\\s+)(?:"+b.join("|")+")(?\x3d$|\\s)");this.requiredContent=f+"("+this.cssClassName+")"}else this.requiredContent=f+"{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}};c.config.enterMode==CKEDITOR.ENTER_BR&&
 (this.allowedContent.div=!0)}function c(c){var b=c.editor,e=b.createRange();e.setStartBefore(c.data.node);e.setEndAfter(c.data.node);for(var f=new CKEDITOR.dom.walker(e),d;d=f.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(c.data.node)&&d.getDirection())e.setStartAfter(d),f=new CKEDITOR.dom.walker(e);else{var g=b.config.justifyClasses;g&&(d.hasClass(g[0])?(d.removeClass(g[0]),d.addClass(g[2])):d.hasClass(g[2])&&(d.removeClass(g[2]),d.addClass(g[0])));g=d.getStyle("text-align");"left"==g?d.setStyle("text-align",
-"right"):"right"==g&&d.setStyle("text-align","left")}}f.prototype={exec:function(c){var b=c.getSelection(),f=c.config.enterMode;if(b){for(var k=b.createBookmarks(),d=b.getRanges(),g=this.cssClassName,m,a,n=c.config.useComputedState,n=void 0===n||n,w=d.length-1;0<=w;w--)for(m=d[w].createIterator(),m.enlargeBr=f!=CKEDITOR.ENTER_BR;a=m.getNextParagraph(f==CKEDITOR.ENTER_P?"p":"div");)if(!a.isReadOnly()){var u=a.getName(),t;t=c.activeFilter.check(u+"{text-align}");if((u=c.activeFilter.check(u+"("+g+")"))||
+"right"):"right"==g&&d.setStyle("text-align","left")}}f.prototype={exec:function(c){var b=c.getSelection(),f=c.config.enterMode;if(b){for(var k=b.createBookmarks(),d=b.getRanges(),g=this.cssClassName,m,a,n=c.config.useComputedState,n=void 0===n||n,x=d.length-1;0<=x;x--)for(m=d[x].createIterator(),m.enlargeBr=f!=CKEDITOR.ENTER_BR;a=m.getNextParagraph(f==CKEDITOR.ENTER_P?"p":"div");)if(!a.isReadOnly()){var u=a.getName(),t;t=c.activeFilter.check(u+"{text-align}");if((u=c.activeFilter.check(u+"("+g+")"))||
 t){a.removeAttribute("align");a.removeStyle("text-align");var p=g&&(a.$.className=CKEDITOR.tools.ltrim(a.$.className.replace(this.cssClassRegex,""))),r=this.state==CKEDITOR.TRISTATE_OFF&&(!n||e(a,!0)!=this.value);g&&u?r?a.addClass(g):p||a.removeAttribute("class"):r&&t&&a.setStyle("text-align",this.value)}}c.focus();c.forceNextSelectionCheck();b.selectBookmarks(k)}},refresh:function(c,b){var f=b.block||b.blockLimit,k=f.getName(),d=f.equals(c.editable()),k=this.cssClassName?c.activeFilter.check(k+"("+
-this.cssClassName+")"):c.activeFilter.check(k+"{text-align}");d&&1===b.elements.length?this.setState(CKEDITOR.TRISTATE_OFF):!d&&k?this.setState(e(f,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(e){if(!e.blockless){var b=new f(e,"justifyleft","left"),l=new f(e,"justifycenter","center"),k=new f(e,"justifyright","right"),d=new f(e,"justifyblock","justify");e.addCommand("justifyleft",
-b);e.addCommand("justifycenter",l);e.addCommand("justifyright",k);e.addCommand("justifyblock",d);e.ui.addButton&&(e.ui.addButton("JustifyLeft",{label:e.lang.common.alignLeft,command:"justifyleft",toolbar:"align,10"}),e.ui.addButton("JustifyCenter",{label:e.lang.common.center,command:"justifycenter",toolbar:"align,20"}),e.ui.addButton("JustifyRight",{label:e.lang.common.alignRight,command:"justifyright",toolbar:"align,30"}),e.ui.addButton("JustifyBlock",{label:e.lang.common.justify,command:"justifyblock",
-toolbar:"align,40"}));e.on("dirChanged",c)}}})}(),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var e=function(e){var c=this._,h=c.menu;c.state!==CKEDITOR.TRISTATE_DISABLED&&(c.on&&h?h.hide():(c.previousState=c.state,h||(h=c.menu=new CKEDITOR.menu(e,{panel:{className:"cke_menu_panel",attributes:{"aria-label":e.lang.common.options}}}),h.onHide=CKEDITOR.tools.bind(function(){var b=this.command?e.getCommand(this.command).modes:this.modes;this.setState(!b||b[e.mode]?c.previousState:
-CKEDITOR.TRISTATE_DISABLED);c.on=0},this),this.onMenu&&h.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),c.on=1,setTimeout(function(){h.show(CKEDITOR.document.getById(c.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(f){delete f.panel;this.base(f);this.hasArrow="menu";this.click=e},statics:{handler:{create:function(e){return new CKEDITOR.ui.menuButton(e)}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}),
-CKEDITOR.UI_MENUBUTTON="menubutton","use strict",function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(e){var f=e.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,h=e.lang.language,b={},l,k,d,g;e.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(d,a){var c=b["language_"+a];if(c)d[c.style.checkActive(d.elementPath(),d)?"removeStyle":"applyStyle"](c.style)},refresh:function(b){this.setState(c.getCurrentLangElement(b)?
-CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(g=0;g<f.length;g++)l=f[g].split(":"),k=l[0],d="language_"+k,b[d]={label:l[1],langId:k,group:"language",order:g,ltr:"rtl"!=(""+l[2]).toLowerCase(),onClick:function(){e.execCommand("language",this.langId)},role:"menuitemcheckbox"},b[d].style=new CKEDITOR.style({element:"span",attributes:{lang:k,dir:b[d].ltr?"ltr":"rtl"}});b.language_remove={label:h.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:b.length,onClick:function(){var b=
-c.getCurrentLangElement(e);b&&e.execCommand("language",b.getAttribute("lang"))}};e.addMenuGroup("language",1);e.addMenuGroup("language_remove");e.addMenuItems(b);e.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:h.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var d={},a=c.getCurrentLangElement(e),g;for(g in b)d[g]=CKEDITOR.TRISTATE_OFF;d.language_remove=a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a&&(d["language_"+
-a.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return d}});e.addRemoveFormatFilter&&e.addRemoveFormatFilter(function(b){return!(b.is("span")&&b.getAttribute("dir")&&b.getAttribute("lang"))})},getCurrentLangElement:function(e){var f=e.elementPath();e=f&&f.elements;var c;if(f)for(var h=0;h<e.length;h++)f=e[h],!c&&"span"==f.getName()&&f.hasAttribute("dir")&&f.hasAttribute("lang")&&(c=f);return c}})}(),function(){function e(a,b,d,c){for(var e=CKEDITOR.plugins.list.listToArray(b.root,d),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(d,h,"list_item_processed",!0))}for(var h=b.root.getDocument(),k,m,f=0;f<g.length;f++){var l=g[f].getCustomData("listarray_index");k=e[l].parent;k.is(this.type)||(m=h.createElement(this.type),k.copyAttributes(m,{start:1,type:1}),m.removeStyle("list-style-type"),e[l].parent=m)}d=CKEDITOR.plugins.list.arrayToList(e,d,null,a.config.enterMode);for(var n,e=d.listNode.getChildCount(),
-f=0;f<e&&(n=d.listNode.getChild(f));f++)n.getName()==this.type&&c.push(n);d.listNode.replace(b.root);a.fire("contentDomInvalidated")}function f(a,b,d){var c=b.contents,e=b.root.getDocument(),g=[];if(1==c.length&&c[0].equals(b.root)){var f=e.createElement("div");c[0].moveChildren&&c[0].moveChildren(f);c[0].append(f);c[0]=f}b=b.contents[0].getParent();for(f=0;f<c.length;f++)b=b.getCommonAncestor(c[f].getParent());a=a.config.useComputedState;var h,k;a=void 0===a||a;for(f=0;f<c.length;f++)for(var m=c[f],
-l;l=m.getParent();){if(l.equals(b)){g.push(m);!k&&m.getDirection()&&(k=1);m=m.getDirection(a);null!==h&&(h=h&&h!=m?null:m);break}m=l}if(!(1>g.length)){c=g[g.length-1].getNext();f=e.createElement(this.type);for(d.push(f);g.length;)d=g.shift(),a=e.createElement("li"),m=d,m.is("pre")||t.test(m.getName())||"false"==m.getAttribute("contenteditable")?d.appendTo(a):(d.copyAttributes(a),h&&d.getDirection()&&(a.removeStyle("direction"),a.removeAttribute("dir")),d.moveChildren(a),d.remove()),a.appendTo(f);
-h&&k&&f.setAttribute("dir",h);c?f.insertBefore(c):f.appendTo(b)}}function c(a,b,d){function c(d){if(!(!(m=k[d?"getFirst":"getLast"]())||m.is&&m.isBlockBoundary()||!(l=b.root[d?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||l.is&&l.isBlockBoundary({br:1})))a.document.createElement("br")[d?"insertBefore":"insertAfter"](m)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,d),g=[],f=0;f<b.contents.length;f++){var h=b.contents[f];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&
+this.cssClassName+")"):c.activeFilter.check(k+"{text-align}");d&&!CKEDITOR.dtd.$list[b.lastElement.getName()]?this.setState(CKEDITOR.TRISTATE_OFF):!d&&k?this.setState(e(f,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(e){if(!e.blockless){var b=new f(e,"justifyleft","left"),l=new f(e,"justifycenter","center"),k=new f(e,"justifyright","right"),d=new f(e,"justifyblock",
+"justify");e.addCommand("justifyleft",b);e.addCommand("justifycenter",l);e.addCommand("justifyright",k);e.addCommand("justifyblock",d);e.ui.addButton&&(e.ui.addButton("JustifyLeft",{label:e.lang.common.alignLeft,command:"justifyleft",toolbar:"align,10"}),e.ui.addButton("JustifyCenter",{label:e.lang.common.center,command:"justifycenter",toolbar:"align,20"}),e.ui.addButton("JustifyRight",{label:e.lang.common.alignRight,command:"justifyright",toolbar:"align,30"}),e.ui.addButton("JustifyBlock",{label:e.lang.common.justify,
+command:"justifyblock",toolbar:"align,40"}));e.on("dirChanged",c)}}})}(),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var e=function(e){var c=this._,h=c.menu;c.state!==CKEDITOR.TRISTATE_DISABLED&&(c.on&&h?h.hide():(c.previousState=c.state,h||(h=c.menu=new CKEDITOR.menu(e,{panel:{className:"cke_menu_panel",attributes:{"aria-label":e.lang.common.options}}}),h.onHide=CKEDITOR.tools.bind(function(){var b=this.command?e.getCommand(this.command).modes:this.modes;this.setState(!b||
+b[e.mode]?c.previousState:CKEDITOR.TRISTATE_DISABLED);c.on=0},this),this.onMenu&&h.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),c.on=1,setTimeout(function(){h.show(CKEDITOR.document.getById(c.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(f){delete f.panel;this.base(f);this.hasArrow="menu";this.click=e},statics:{handler:{create:function(e){return new CKEDITOR.ui.menuButton(e)}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_MENUBUTTON,
+CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(e){var f=e.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,h=e.lang.language,b={},l,k,d,g;e.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(d,a){var c=b["language_"+a];if(c)d[c.style.checkActive(d.elementPath(),d)?"removeStyle":"applyStyle"](c.style)},
+refresh:function(b){this.setState(c.getCurrentLangElement(b)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(g=0;g<f.length;g++)l=f[g].split(":"),k=l[0],d="language_"+k,b[d]={label:l[1],langId:k,group:"language",order:g,ltr:"rtl"!=(""+l[2]).toLowerCase(),onClick:function(){e.execCommand("language",this.langId)},role:"menuitemcheckbox"},b[d].style=new CKEDITOR.style({element:"span",attributes:{lang:k,dir:b[d].ltr?"ltr":"rtl"}});b.language_remove={label:h.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,
+order:b.length,onClick:function(){var b=c.getCurrentLangElement(e);b&&e.execCommand("language",b.getAttribute("lang"))}};e.addMenuGroup("language",1);e.addMenuGroup("language_remove");e.addMenuItems(b);e.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:h.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var d={},a=c.getCurrentLangElement(e),g;for(g in b)d[g]=CKEDITOR.TRISTATE_OFF;d.language_remove=a?CKEDITOR.TRISTATE_OFF:
+CKEDITOR.TRISTATE_DISABLED;a&&(d["language_"+a.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return d}});e.addRemoveFormatFilter&&e.addRemoveFormatFilter(function(b){return!(b.is("span")&&b.getAttribute("dir")&&b.getAttribute("lang"))})},getCurrentLangElement:function(e){var f=e.elementPath();e=f&&f.elements;var c;if(f)for(var h=0;h<e.length;h++)f=e[h],!c&&"span"==f.getName()&&f.hasAttribute("dir")&&f.hasAttribute("lang")&&(c=f);return c}})}(),function(){function e(a,b,d,c){for(var e=CKEDITOR.plugins.list.listToArray(b.root,
+d),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(d,h,"list_item_processed",!0))}for(var h=b.root.getDocument(),k,m,f=0;f<g.length;f++){var l=g[f].getCustomData("listarray_index");k=e[l].parent;k.is(this.type)||(m=h.createElement(this.type),k.copyAttributes(m,{start:1,type:1}),m.removeStyle("list-style-type"),e[l].parent=m)}d=CKEDITOR.plugins.list.arrayToList(e,d,null,a.config.enterMode);
+for(var n,e=d.listNode.getChildCount(),f=0;f<e&&(n=d.listNode.getChild(f));f++)n.getName()==this.type&&c.push(n);d.listNode.replace(b.root);a.fire("contentDomInvalidated")}function f(a,b,d){var c=b.contents,e=b.root.getDocument(),g=[];if(1==c.length&&c[0].equals(b.root)){var f=e.createElement("div");c[0].moveChildren&&c[0].moveChildren(f);c[0].append(f);c[0]=f}b=b.contents[0].getParent();for(f=0;f<c.length;f++)b=b.getCommonAncestor(c[f].getParent());a=a.config.useComputedState;var h,k;a=void 0===
+a||a;for(f=0;f<c.length;f++)for(var m=c[f],l;l=m.getParent();){if(l.equals(b)){g.push(m);!k&&m.getDirection()&&(k=1);m=m.getDirection(a);null!==h&&(h=h&&h!=m?null:m);break}m=l}if(!(1>g.length)){c=g[g.length-1].getNext();f=e.createElement(this.type);for(d.push(f);g.length;)d=g.shift(),a=e.createElement("li"),m=d,m.is("pre")||t.test(m.getName())||"false"==m.getAttribute("contenteditable")?d.appendTo(a):(d.copyAttributes(a),h&&d.getDirection()&&(a.removeStyle("direction"),a.removeAttribute("dir")),d.moveChildren(a),
+d.remove()),a.appendTo(f);h&&k&&f.setAttribute("dir",h);c?f.insertBefore(c):f.appendTo(b)}}function c(a,b,d){function c(d){if(!(!(m=k[d?"getFirst":"getLast"]())||m.is&&m.isBlockBoundary()||!(l=b.root[d?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||l.is&&l.isBlockBoundary({br:1})))a.document.createElement("br")[d?"insertBefore":"insertAfter"](m)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,d),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(d,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,d,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,m,l;c(!0);c();k.replace(b.root);a.fire("contentDomInvalidated")}function h(a,b){this.name=
-a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function b(a,b,d,c){for(var e,g;e=a[c?"getLast":"getFirst"](p);)(g=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",g),e.remove(),d?e[c?"insertBefore":"insertAfter"](d):b.append(e,c),d=e}function l(a){function d(c){var e=a[c?"getPrevious":"getNext"](w);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(a.getName())&&(b(a,e,null,!c),a.remove(),a=e)}d();d(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 d(a,d,c){a.fire("saveSnapshot");c.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var e=c.extractContents();d.trim(!1,!0);var f=d.createBookmark(),h=new CKEDITOR.dom.elementPath(d.startContainer),k=h.block,h=h.lastElement.getAscendant("li",1)||k,m=new CKEDITOR.dom.elementPath(c.startContainer),n=m.contains(CKEDITOR.dtd.$listItem),m=m.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():m&&(k=m.getPrevious(w))&&
-u(k)&&k.remove();(k=e.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br")&&k.remove();(k=d.startContainer.getChild(d.startOffset))?e.insertBefore(k):d.startContainer.append(e);n&&(e=g(n))&&(h.contains(n)?(b(e,n.getParent(),n),e.remove()):h.append(e));for(;c.checkStartOfBlock()&&c.checkEndOfBlock();){m=c.startPath();e=m.block;if(!e)break;e.is("li")&&(h=e.getParent(),e.equals(h.getLast(w))&&e.equals(h.getFirst(w))&&(e=h));c.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);e.remove()}c=c.clone();e=
-a.editable();c.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(c);c.evaluator=function(a){return w(a)&&!u(a)};(c=c.next())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in CKEDITOR.dtd.$list&&l(c);d.moveToBookmark(f);d.select();a.fire("saveSnapshot")}function g(a){return(a=a.getLast(w))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in m?a:null}var m={ol:1,ul:1},a=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),w=function(b){return!(a(b)||n(b))},u=CKEDITOR.dom.walker.bogus();
+a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function b(a,b,d,c){for(var e,g;e=a[c?"getLast":"getFirst"](p);)(g=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",g),e.remove(),d?e[c?"insertBefore":"insertAfter"](d):b.append(e,c),d=e}function l(a){function d(c){var e=a[c?"getPrevious":"getNext"](x);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(a.getName())&&(b(a,e,null,!c),a.remove(),a=e)}d();d(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 d(a,d,c){a.fire("saveSnapshot");c.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var e=c.extractContents();d.trim(!1,!0);var f=d.createBookmark(),h=new CKEDITOR.dom.elementPath(d.startContainer),k=h.block,h=h.lastElement.getAscendant("li",1)||k,m=new CKEDITOR.dom.elementPath(c.startContainer),n=m.contains(CKEDITOR.dtd.$listItem),m=m.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():m&&(k=m.getPrevious(x))&&
+u(k)&&k.remove();(k=e.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br")&&k.remove();(k=d.startContainer.getChild(d.startOffset))?e.insertBefore(k):d.startContainer.append(e);n&&(e=g(n))&&(h.contains(n)?(b(e,n.getParent(),n),e.remove()):h.append(e));for(;c.checkStartOfBlock()&&c.checkEndOfBlock();){m=c.startPath();e=m.block;if(!e)break;e.is("li")&&(h=e.getParent(),e.equals(h.getLast(x))&&e.equals(h.getFirst(x))&&(e=h));c.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);e.remove()}c=c.clone();e=
+a.editable();c.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(c);c.evaluator=function(a){return x(a)&&!u(a)};(c=c.next())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in CKEDITOR.dtd.$list&&l(c);d.moveToBookmark(f);d.select();a.fire("saveSnapshot")}function g(a){return(a=a.getLast(x))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in m?a:null}var m={ol:1,ul:1},a=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),x=function(b){return!(a(b)||n(b))},u=CKEDITOR.dom.walker.bogus();
 CKEDITOR.plugins.list={listToArray:function(a,b,d,c,e){if(!m[a.getName()])return[];c||(c=0);d||(d=[]);for(var g=0,f=a.getChildCount();g<f;g++){var h=a.getChild(g);h.type==CKEDITOR.NODE_ELEMENT&&h.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(h,b,d,c+1);if("li"==h.$.nodeName.toLowerCase()){var k={parent:a,indent:c,element:h,contents:[]};e?k.grandparent=e:(k.grandparent=a.getParent(),k.grandparent&&"li"==k.grandparent.$.nodeName.toLowerCase()&&(k.grandparent=k.grandparent.getParent()));
 b&&CKEDITOR.dom.element.setMarker(b,h,"listarray_index",d.length);d.push(k);for(var l=0,n=h.getChildCount(),p;l<n;l++)p=h.getChild(l),p.type==CKEDITOR.NODE_ELEMENT&&m[p.getName()]?CKEDITOR.plugins.list.listToArray(p,b,d,c+1,k.grandparent):k.contents.push(p)}}return d},arrayToList:function(a,b,d,c,e){d||(d=0);if(!a||a.length<d+1)return null;for(var g,f=a[d].parent.getDocument(),h=new CKEDITOR.dom.documentFragment(f),k=null,l=d,p=Math.max(a[d].indent,0),u=null,t,G,L=c==CKEDITOR.ENTER_P?"p":"div";;){var I=
 a[l];g=I.grandparent;t=I.element.getDirection(1);if(I.indent==p){k&&a[l].parent.getName()==k.getName()||(k=a[l].parent.clone(!1,1),e&&k.setAttribute("dir",e),h.append(k));u=k.append(I.element.clone(0,1));t!=k.getDirection(1)&&u.setAttribute("dir",t);for(g=0;g<I.contents.length;g++)u.append(I.contents[g].clone(1,1));l++}else if(I.indent==Math.max(p,0)+1)I=a[l-1].element.getDirection(1),l=CKEDITOR.plugins.list.arrayToList(a,null,l,c,I!=t?t:null),!u.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>=
 f.$.documentMode&&u.append(f.createText(" ")),u.append(l.listNode),l=l.nextIndex;else if(-1==I.indent&&!d&&g){m[g.getName()]?(u=I.element.clone(!1,!0),t!=g.getDirection(1)&&u.setAttribute("dir",t)):u=new CKEDITOR.dom.documentFragment(f);var k=g.getDirection(1)!=t,C=I.element,S=C.getAttribute("class"),O=C.getAttribute("style"),P=u.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(c!=CKEDITOR.ENTER_BR||k||O||S),K,V=I.contents.length,T;for(g=0;g<V;g++)if(K=I.contents[g],n(K)&&1<V)P?T=K.clone(1,1):u.append(K.clone(1,
 1));else if(K.type==CKEDITOR.NODE_ELEMENT&&K.isBlockBoundary()){k&&!K.getDirection()&&K.setAttribute("dir",t);G=K;var Y=C.getAttribute("style");Y&&G.setAttribute("style",Y.replace(/([^;])$/,"$1;")+(G.getAttribute("style")||""));S&&K.addClass(S);G=null;T&&(u.append(T),T=null);u.append(K.clone(1,1))}else P?(G||(G=f.createElement(L),u.append(G),k&&G.setAttribute("dir",t)),O&&G.setAttribute("style",O),S&&G.setAttribute("class",S),T&&(G.append(T),T=null),G.append(K.clone(1,1))):u.append(K.clone(1,1));
-T&&((G||u).append(T),T=null);u.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&l!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(t=u.getLast())&&t.type==CKEDITOR.NODE_ELEMENT&&t.is("br")&&t.remove(),(t=u.getLast(w))&&t.type==CKEDITOR.NODE_ELEMENT&&t.is(CKEDITOR.dtd.$block)||u.append(f.createElement("br")));t=u.$.nodeName.toLowerCase();"div"!=t&&"p"!=t||u.appendBogus();h.append(u);k=null;l++}else return null;G=null;if(a.length<=l||Math.max(a[l].indent,0)<p)break}if(b)for(a=h.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&&
+T&&((G||u).append(T),T=null);u.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&l!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(t=u.getLast())&&t.type==CKEDITOR.NODE_ELEMENT&&t.is("br")&&t.remove(),(t=u.getLast(x))&&t.type==CKEDITOR.NODE_ELEMENT&&t.is(CKEDITOR.dtd.$block)||u.append(f.createElement("br")));t=u.$.nodeName.toLowerCase();"div"!=t&&"p"!=t||u.appendBogus();h.append(u);k=null;l++}else return null;G=null;if(a.length<=l||Math.max(a[l].indent,0)<p)break}if(b)for(a=h.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&&
 (CKEDITOR.dom.element.clearMarkers(b,a),a.getName()in CKEDITOR.dtd.$listItem&&(d=a,f=e=c=void 0,c=d.getDirection()))){for(e=d.getParent();e&&!(f=e.getDirection());)e=e.getParent();c==f&&d.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:h,nextIndex:l}}};var t=/^h[1-6]$/,p=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);h.prototype={exec:function(a){function b(a){return m[a.root.getName()]&&!d(a.root,[CKEDITOR.NODE_COMMENT])}function d(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 h=a.config,k=a.getSelection(),n=k&&k.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var p=a.editable();if(p.getFirst(w)){var u=1==n.length&&n[0];(h=u&&u.getEnclosedNode())&&h.is&&this.type==h.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else h.enterMode==
+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 h=a.config,k=a.getSelection(),n=k&&k.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var p=a.editable();if(p.getFirst(x)){var u=1==n.length&&n[0];(h=u&&u.getEnclosedNode())&&h.is&&this.type==h.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else h.enterMode==
 CKEDITOR.ENTER_BR?p.appendBogus():n[0].fixBlock(1,h.enterMode==CKEDITOR.ENTER_P?"p":"div"),k.selectRanges(n)}for(var h=k.createBookmarks(!0),p=[],t={},n=n.createIterator(),E=0;(u=n.getNextRange())&&++E;){var H=u.getBoundaryNodes(),F=H.startNode,G=H.endNode;F.type==CKEDITOR.NODE_ELEMENT&&"td"==F.getName()&&u.setStartAt(H.startNode,CKEDITOR.POSITION_AFTER_START);G.type==CKEDITOR.NODE_ELEMENT&&"td"==G.getName()&&u.setEndAt(H.endNode,CKEDITOR.POSITION_BEFORE_END);u=u.createIterator();for(u.forceBrBreak=
 this.state==CKEDITOR.TRISTATE_OFF;H=u.getNextParagraph();)if(!H.getCustomData("list_block")&&!g(H)){CKEDITOR.dom.element.setMarker(t,H,"list_block",1);for(var L=a.elementPath(H),F=L.elements,G=0,L=L.blockLimit,I,C=F.length-1;0<=C&&(I=F[C]);C--)if(m[I.getName()]&&L.contains(I)){L.removeCustomData("list_group_object_"+E);(F=I.getCustomData("list_group_object"))?F.contents.push(H):(F={root:I,contents:[H]},p.push(F),CKEDITOR.dom.element.setMarker(t,I,"list_group_object",F));G=1;break}G||(G=L,G.getCustomData("list_group_object_"+
 E)?G.getCustomData("list_group_object_"+E).contents.push(H):(F={root:G,contents:[H]},CKEDITOR.dom.element.setMarker(t,G,"list_group_object_"+E,F),p.push(F)))}}for(I=[];0<p.length;)F=p.shift(),this.state==CKEDITOR.TRISTATE_OFF?b(F)||(m[F.root.getName()]?e.call(this,a,F,t,I):f.call(this,a,F,I)):this.state==CKEDITOR.TRISTATE_ON&&m[F.root.getName()]&&!b(F)&&c.call(this,a,F,t);for(C=0;C<I.length;C++)l(I[C]);CKEDITOR.dom.element.clearAllMarkers(t);k.selectBookmarks(h);a.focus()},refresh:function(a,b){var d=
 b.contains(m,1),c=b.blockLimit||b.root;d&&c.contains(d)?this.setState(d.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 h("numberedlist","ol")),a.addCommand("bulletedlist",new h("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 c=b.data.domEvent.getKey(),e;if("wysiwyg"==a.mode&&c in{8:1,46:1}){var f=a.getSelection().getRanges()[0],h=f&&f.startPath();if(f&&f.collapsed){var l=8==c,n=a.editable(),p=new CKEDITOR.dom.walker(f.clone());p.evaluator=function(a){return w(a)&&!u(a)};p.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};c=f.clone();if(l){var t;(t=h.contains(m))&&f.checkBoundaryOfElement(t,
-CKEDITOR.START)&&(t=t.getParent())&&t.is("li")&&(t=g(t))?(e=t,t=t.getPrevious(w),c.moveToPosition(t&&u(t)?t:e,CKEDITOR.POSITION_BEFORE_START)):(p.range.setStartAt(n,CKEDITOR.POSITION_AFTER_START),p.range.setEnd(f.startContainer,f.startOffset),(t=p.previous())&&t.type==CKEDITOR.NODE_ELEMENT&&(t.getName()in m||t.is("li"))&&(t.is("li")||(p.range.selectNodeContents(t),p.reset(),p.evaluator=k,t=p.previous()),e=t,c.moveToElementEditEnd(e),c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END)));
-if(e)d(a,c,f),b.cancel();else{var E=h.contains(m);E&&f.checkBoundaryOfElement(E,CKEDITOR.START)&&(e=E.getFirst(w),f.checkBoundaryOfElement(e,CKEDITOR.START)&&(t=E.getPrevious(w),g(e)?t&&(f.moveToElementEditEnd(t),f.select()):a.execCommand("outdent"),b.cancel()))}}else if(e=h.contains("li")){if(p.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),l=(n=e.getLast(w))&&k(n)?n:e,h=0,(t=p.next())&&t.type==CKEDITOR.NODE_ELEMENT&&t.getName()in m&&t.equals(n)?(h=1,t=p.next()):f.checkBoundaryOfElement(l,CKEDITOR.END)&&
+{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var c=b.data.domEvent.getKey(),e;if("wysiwyg"==a.mode&&c in{8:1,46:1}){var f=a.getSelection().getRanges()[0],h=f&&f.startPath();if(f&&f.collapsed){var l=8==c,n=a.editable(),p=new CKEDITOR.dom.walker(f.clone());p.evaluator=function(a){return x(a)&&!u(a)};p.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};c=f.clone();if(l){var t;(t=h.contains(m))&&f.checkBoundaryOfElement(t,
+CKEDITOR.START)&&(t=t.getParent())&&t.is("li")&&(t=g(t))?(e=t,t=t.getPrevious(x),c.moveToPosition(t&&u(t)?t:e,CKEDITOR.POSITION_BEFORE_START)):(p.range.setStartAt(n,CKEDITOR.POSITION_AFTER_START),p.range.setEnd(f.startContainer,f.startOffset),(t=p.previous())&&t.type==CKEDITOR.NODE_ELEMENT&&(t.getName()in m||t.is("li"))&&(t.is("li")||(p.range.selectNodeContents(t),p.reset(),p.evaluator=k,t=p.previous()),e=t,c.moveToElementEditEnd(e),c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END)));
+if(e)d(a,c,f),b.cancel();else{var E=h.contains(m);E&&f.checkBoundaryOfElement(E,CKEDITOR.START)&&(e=E.getFirst(x),f.checkBoundaryOfElement(e,CKEDITOR.START)&&(t=E.getPrevious(x),g(e)?t&&(f.moveToElementEditEnd(t),f.select()):a.execCommand("outdent"),b.cancel()))}}else if(e=h.contains("li")){if(p.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),l=(n=e.getLast(x))&&k(n)?n:e,h=0,(t=p.next())&&t.type==CKEDITOR.NODE_ELEMENT&&t.getName()in m&&t.equals(n)?(h=1,t=p.next()):f.checkBoundaryOfElement(l,CKEDITOR.END)&&
 (h=2),h&&t){f=f.clone();f.moveToElementEditStart(t);if(1==h&&(c.optimize(),!c.startContainer.equals(e))){for(e=c.startContainer;e.is(CKEDITOR.dtd.$inline);)E=e,e=e.getParent();E&&c.moveToPosition(E,CKEDITOR.POSITION_AFTER_END)}2==h&&(c.moveToPosition(c.endPath().block,CKEDITOR.POSITION_BEFORE_END),f.endPath().block&&f.moveToPosition(f.endPath().block,CKEDITOR.POSITION_AFTER_START));d(a,c,f);b.cancel()}}else p.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),(t=p.next())&&t.type==CKEDITOR.NODE_ELEMENT&&
-t.is(m)&&(t=t.getFirst(w),h.block&&f.checkStartOfBlock()&&f.checkEndOfBlock()?(h.block.remove(),f.moveToElementEditStart(t),f.select()):g(t)?(f.moveToElementEditStart(t),f.select()):(f=f.clone(),f.moveToElementEditStart(t),d(a,c,f)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})}(),"use strict",function(){function e(a,b,d){return n(b)&&n(d)&&d.equals(b.getNext(function(a){return!(ba(a)||ca(a)||w(a))}))}function f(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}
-function c(a){var b=a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var d=k(b);if("true"==d.getAttribute("contenteditable"))return b;if(d.is(a.triggers))return d}return null}function h(a,b,d){x(a,b);x(a,d);a=b.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function b(b,d,c){return d=d[c?"getPrevious":"getNext"](function(d){return d&&d.type==CKEDITOR.NODE_TEXT&&!ba(d)||n(d)&&!w(d)&&!a(b,d)})}function l(a,b,d){return a>b&&a<d}function k(a,b){if(a.data("cke-editable"))return null;
+t.is(m)&&(t=t.getFirst(x),h.block&&f.checkStartOfBlock()&&f.checkEndOfBlock()?(h.block.remove(),f.moveToElementEditStart(t),f.select()):g(t)?(f.moveToElementEditStart(t),f.select()):(f=f.clone(),f.moveToElementEditStart(t),d(a,c,f)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})}(),"use strict",function(){function e(a,b,d){return n(b)&&n(d)&&d.equals(b.getNext(function(a){return!(ca(a)||da(a)||x(a))}))}function f(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}
+function c(a){var b=a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var d=k(b);if("true"==d.getAttribute("contenteditable"))return b;if(d.is(a.triggers))return d}return null}function h(a,b,d){w(a,b);w(a,d);a=b.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function b(b,d,c){return d=d[c?"getPrevious":"getNext"](function(d){return d&&d.type==CKEDITOR.NODE_TEXT&&!ca(d)||n(d)&&!x(d)&&!a(b,d)})}function l(a,b,d){return a>b&&a<d}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 d(a){var b=a.doc,d=E('\x3cspan contenteditable\x3d"false" data-cke-magic-line\x3d"1" style\x3d"'+W+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),c=CKEDITOR.getUrl(this.path+"images/"+(H.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");z(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[z(E('\x3cspan title\x3d"'+
 a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:W+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+c+") center no-repeat "+a.boxColor+";cursor:pointer;"+(H.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(H.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;"]}),z(E(Q,b),{base:U+
-"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"]}),z(E(Q,b),{base:U+"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(){x(a,this);var b=a.holdDistance,d=this.size;return d&&l(a.mouse.y,
-d.top-b,d.bottom+b)&&l(a.mouse.x,d.left-b,d.right+b)?!0:!1},place:function(){var b=a.view,d=a.editable,c=a.trigger,e=c.upper,g=c.lower,f=e||g,h=f.getParent(),k={};this.trigger=c;e&&x(a,e,!0);g&&x(a,g,!0);x(a,h,!0);a.inInlineMode&&y(a,!0);h.equals(d)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=f.size.left-f.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=f.size.outerWidth+f.size.margin.left+f.size.margin.right+b.scroll.x,k.right="");e&&g?
+"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"]}),z(E(Q,b),{base:U+"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(){w(a,this);var b=a.holdDistance,d=this.size;return d&&l(a.mouse.y,
+d.top-b,d.bottom+b)&&l(a.mouse.x,d.left-b,d.right+b)?!0:!1},place:function(){var b=a.view,d=a.editable,c=a.trigger,e=c.upper,g=c.lower,f=e||g,h=f.getParent(),k={};this.trigger=c;e&&w(a,e,!0);g&&w(a,g,!0);w(a,h,!0);a.inInlineMode&&y(a,!0);h.equals(d)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=f.size.left-f.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=f.size.outerWidth+f.size.margin.left+f.size.margin.right+b.scroll.x,k.right="");e&&g?
 k.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||(k.top=e.size.bottom+e.size.margin.bottom):k.top=g.size.top-g.size.margin.top;c.is(P)||l(k.top,b.scroll.y-15,b.scroll.y+5)?(k.top=a.inInlineMode?0:b.scroll.y,this.look(P)):c.is(K)||l(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(K)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(V));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var m in k)k[m]=CKEDITOR.tools.cssLength(k[m]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,d;b--;)(d=this.lineChildren[b]).setAttribute("style",d.base+d.looks[0|a/2]);this.oldLook=a}},wrap:new J("span",a.doc)});for(b=d.lineChildren.length;b--;)d.lineChildren[b].appendTo(d);
 d.look(V);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();g(a,function(b){var d=a.line.trigger;b[d.is(I)?"insertBefore":"insertAfter"](d.is(I)?d.lower:d.upper)},!0);a.editor.focus();H.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 g(a,b,d){var c=new CKEDITOR.dom.range(a.doc),e=a.editor,g;H.ie&&a.enterMode==CKEDITOR.ENTER_BR?g=a.doc.createText(T):
 (g=(g=k(a.element,!0))&&g.data("cke-enter-mode")||a.enterMode,g=new J(L[g],a.doc),g.is("br")||a.doc.createText(T).appendTo(g));d&&e.fire("saveSnapshot");b(g);c.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([c]);a.hotNode=g;d&&e.fire("saveSnapshot")}function m(a,d){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function e(b){var c=H.ie&&9>H.version?" ":T,f=a.hotNode&&a.hotNode.getText()==c&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!d;g(a,function(c){f&&
 a.hotNode&&a.hotNode.remove();c[d?"insertAfter":"insertBefore"](b);c.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!d});a.lastCmdDirection=!!d});H.ie||a.enterMode==CKEDITOR.ENTER_BR||a.hotNode.scrollIntoView();a.line.detach()}return function(g){g=g.getSelection().getStartElement();var f;g=g.getAscendant(R,1);if(!p(a,g)&&g&&!g.equals(a.editable)&&!g.contains(a.editable)){(f=k(g))&&"false"==f.getAttribute("contenteditable")&&(g=f);a.element=g;f=b(a,g,!d);var h;n(f)&&f.is(a.triggers)&&
-f.is(M)&&(!b(a,f,!d)||(h=b(a,f,!d))&&n(h)&&h.is(a.triggers))?e(f):(h=c(a,g),n(h)&&(b(a,h,!d)?(g=b(a,h,!d))&&n(g)&&g.is(a.triggers)&&e(h):e(h)))}}}()}}function a(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var d=a.line;return d.wrap.equals(b)||d.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function w(a){if(!n(a))return!1;var b;(b=u(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function u(a){return!!{absolute:1,
-fixed:1}[a.getComputedStyle("position")]}function t(a,b){return n(b)?b.is(a.triggers):null}function p(a,b){if(!b)return!1;for(var d=b.getParents(1),c=d.length;c--;)for(var e=a.tabuList.length;e--;)if(d[c].hasAttribute(a.tabuList[e]))return!0;return!1}function r(a,b,d){b=b[d?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(Z)});if(!b)return!1;x(a,b);return d?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function v(b){var d=b.editable,c=b.mouse,e=b.view,g=b.triggerOffset;y(b);var h=c.y>
-(b.inInlineMode?e.editable.top+e.editable.height/2:Math.min(e.editable.height,e.pane.height)/2),d=d[h?"getLast":"getFirst"](function(a){return!(ba(a)||ca(a))});if(!d)return null;a(b,d)&&(d=b.line.wrap[h?"getPrevious":"getNext"](function(a){return!(ba(a)||ca(a))}));if(!n(d)||w(d)||!t(b,d))return null;x(b,d);return!h&&0<=d.size.top&&l(c.y,0,d.size.top+g)?(b=b.inInlineMode||0===e.scroll.y?P:V,new f([null,d,I,O,b])):h&&d.size.bottom<=e.pane.height&&l(c.y,d.size.bottom-g,e.pane.height)?(b=b.inInlineMode||
-l(d.size.bottom,e.pane.height-g,e.pane.height)?K:V,new f([d,null,C,O,b])):null}function q(a){var d=a.mouse,e=a.view,g=a.triggerOffset,h=c(a);if(!h)return null;x(a,h);var g=Math.min(g,0|h.size.outerHeight/2),k=[],m,q;if(l(d.y,h.size.top-1,h.size.top+g))q=!1;else if(l(d.y,h.size.bottom-g,h.size.bottom+1))q=!0;else return null;if(w(h)||r(a,h,q)||h.getParent().is(Y))return null;var p=b(a,h,!q);if(p){if(p&&p.type==CKEDITOR.NODE_TEXT)return null;if(n(p)){if(w(p)||!t(a,p)||p.getParent().is(Y))return null;
-k=[p,h][q?"reverse":"concat"]().concat([S,O])}}else h.equals(a.editable[q?"getLast":"getFirst"](a.isRelevant))?(y(a),q&&l(d.y,h.size.bottom-g,e.pane.height)&&l(h.size.bottom,e.pane.height-g,e.pane.height)?m=K:l(d.y,0,h.size.top+g)&&(m=P)):m=V,k=[null,h][q?"reverse":"concat"]().concat([q?C:I,O,m,h.equals(a.editable[q?"getLast":"getFirst"](a.isRelevant))?q?K:P:V]);return 0 in k?new f(k):null}function B(a,b,d,c){for(var e=b.getDocumentPosition(),g={},f={},h={},k={},m=da.length;m--;)g[da[m]]=parseInt(b.getComputedStyle.call(b,
-"border-"+da[m]+"-width"),10)||0,h[da[m]]=parseInt(b.getComputedStyle.call(b,"padding-"+da[m]),10)||0,f[da[m]]=parseInt(b.getComputedStyle.call(b,"margin-"+da[m]),10)||0;d&&!c||A(a,c);k.top=e.y-(d?0:a.view.scroll.y);k.left=e.x-(d?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+g.top+g.bottom);k.width=k.outerWidth-(h.left+h.right+g.left+g.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop,
-left:b.$.scrollLeft});return z({border:g,padding:h,margin:f,ignoreScroll:d},k,!0)}function x(a,b,d){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==d&&b.size.date>new Date-N)return null;return z(b.size,B(a,b,d),{date:+new Date},!0)}function y(a,b){a.view.editable=B(a,a.editable,b,!0)}function A(a,b){a.view||(a.view={});var d=a.view;if(!(!b&&d&&d.date>new Date-N)){var c=a.win,d=c.getScrollPosition(),c=c.getViewPaneSize();z(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-
+f.is(M)&&(!b(a,f,!d)||(h=b(a,f,!d))&&n(h)&&h.is(a.triggers))?e(f):(h=c(a,g),n(h)&&(b(a,h,!d)?(g=b(a,h,!d))&&n(g)&&g.is(a.triggers)&&e(h):e(h)))}}}()}}function a(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var d=a.line;return d.wrap.equals(b)||d.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function x(a){if(!n(a))return!1;var b;(b=u(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function u(a){return!!{absolute:1,
+fixed:1}[a.getComputedStyle("position")]}function t(a,b){return n(b)?b.is(a.triggers):null}function p(a,b){if(!b)return!1;for(var d=b.getParents(1),c=d.length;c--;)for(var e=a.tabuList.length;e--;)if(d[c].hasAttribute(a.tabuList[e]))return!0;return!1}function r(a,b,d){b=b[d?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(Z)});if(!b)return!1;w(a,b);return d?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function v(b){var d=b.editable,c=b.mouse,e=b.view,g=b.triggerOffset;y(b);var h=c.y>
+(b.inInlineMode?e.editable.top+e.editable.height/2:Math.min(e.editable.height,e.pane.height)/2),d=d[h?"getLast":"getFirst"](function(a){return!(ca(a)||da(a))});if(!d)return null;a(b,d)&&(d=b.line.wrap[h?"getPrevious":"getNext"](function(a){return!(ca(a)||da(a))}));if(!n(d)||x(d)||!t(b,d))return null;w(b,d);return!h&&0<=d.size.top&&l(c.y,0,d.size.top+g)?(b=b.inInlineMode||0===e.scroll.y?P:V,new f([null,d,I,O,b])):h&&d.size.bottom<=e.pane.height&&l(c.y,d.size.bottom-g,e.pane.height)?(b=b.inInlineMode||
+l(d.size.bottom,e.pane.height-g,e.pane.height)?K:V,new f([d,null,C,O,b])):null}function q(a){var d=a.mouse,e=a.view,g=a.triggerOffset,h=c(a);if(!h)return null;w(a,h);var g=Math.min(g,0|h.size.outerHeight/2),k=[],m,q;if(l(d.y,h.size.top-1,h.size.top+g))q=!1;else if(l(d.y,h.size.bottom-g,h.size.bottom+1))q=!0;else return null;if(x(h)||r(a,h,q)||h.getParent().is(Y))return null;var p=b(a,h,!q);if(p){if(p&&p.type==CKEDITOR.NODE_TEXT)return null;if(n(p)){if(x(p)||!t(a,p)||p.getParent().is(Y))return null;
+k=[p,h][q?"reverse":"concat"]().concat([S,O])}}else h.equals(a.editable[q?"getLast":"getFirst"](a.isRelevant))?(y(a),q&&l(d.y,h.size.bottom-g,e.pane.height)&&l(h.size.bottom,e.pane.height-g,e.pane.height)?m=K:l(d.y,0,h.size.top+g)&&(m=P)):m=V,k=[null,h][q?"reverse":"concat"]().concat([q?C:I,O,m,h.equals(a.editable[q?"getLast":"getFirst"](a.isRelevant))?q?K:P:V]);return 0 in k?new f(k):null}function B(a,b,d,c){for(var e=b.getDocumentPosition(),g={},f={},h={},k={},m=ea.length;m--;)g[ea[m]]=parseInt(b.getComputedStyle.call(b,
+"border-"+ea[m]+"-width"),10)||0,h[ea[m]]=parseInt(b.getComputedStyle.call(b,"padding-"+ea[m]),10)||0,f[ea[m]]=parseInt(b.getComputedStyle.call(b,"margin-"+ea[m]),10)||0;d&&!c||A(a,c);k.top=e.y-(d?0:a.view.scroll.y);k.left=e.x-(d?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+g.top+g.bottom);k.width=k.outerWidth-(h.left+h.right+g.left+g.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop,
+left:b.$.scrollLeft});return z({border:g,padding:h,margin:f,ignoreScroll:d},k,!0)}function w(a,b,d){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==d&&b.size.date>new Date-N)return null;return z(b.size,B(a,b,d),{date:+new Date},!0)}function y(a,b){a.view.editable=B(a,a.editable,b,!0)}function A(a,b){a.view||(a.view={});var d=a.view;if(!(!b&&d&&d.date>new Date-N)){var c=a.win,d=c.getScrollPosition(),c=c.getViewPaneSize();z(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-
 c.width,height:a.doc.$.documentElement.scrollHeight-c.height},pane:{width:c.width,height:c.height,bottom:c.height+d.y},date:+new Date},!0)}}function D(a,b,d,c){for(var e=c,g=c,h=0,k=!1,m=!1,l=a.view.pane.height,q=a.mouse;q.y+h<l&&0<q.y-h;){k||(k=b(e,c));m||(m=b(g,c));!k&&0<q.y-h&&(e=d(a,{x:q.x,y:q.y-h}));!m&&q.y+h<l&&(g=d(a,{x:q.x,y:q.y+h}));if(k&&m)break;h+=2}return new f([e,g,null,null])}CKEDITOR.plugins.add("magicline",{init:function(e){var h=e.config,k=h.magicline_triggerOffset||30,l={editor:e,
-enterMode:h.enterMode,triggerOffset:k,holdDistance:0|k*(h.magicline_holdDistance||.5),boxColor:h.magicline_color||"#ff0000",rtl:"rtl"==h.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(h.magicline_tabuList||[]),triggers:h.magicline_everywhere?R:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},r,t,x;l.isRelevant=function(b){return n(b)&&!a(l,b)&&!w(b)};e.on("contentDom",function(){var k=e.editable(),n=e.document,w=e.window;z(l,{editable:k,inInlineMode:k.isInline(),doc:n,win:w,
+enterMode:h.enterMode,triggerOffset:k,holdDistance:0|k*(h.magicline_holdDistance||.5),boxColor:h.magicline_color||"#ff0000",rtl:"rtl"==h.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(h.magicline_tabuList||[]),triggers:h.magicline_everywhere?R:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},r,t,w;l.isRelevant=function(b){return n(b)&&!a(l,b)&&!x(b)};e.on("contentDom",function(){var k=e.editable(),n=e.document,x=e.window;z(l,{editable:k,inInlineMode:k.isInline(),doc:n,win:x,
 hotNode:null},!0);l.boundary=l.inInlineMode?l.editable:l.doc.getDocumentElement();k.is(G.$inline)||(l.inInlineMode&&!u(k)&&k.setStyles({position:"relative",top:null,left:null}),d.call(this,l),A(l),k.attachListener(e,"beforeUndoImage",function(){l.line.detach()}),k.attachListener(e,"beforeGetData",function(){l.line.wrap.getParent()&&(l.line.detach(),e.once("getData",function(){l.line.attach()},null,null,1E3))},null,null,0),k.attachListener(l.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(a){if("wysiwyg"==
-e.mode)if(l.inInlineMode){var b=a.data.$.clientX;a=a.data.$.clientY;A(l);y(l,!0);var d=l.view.editable,c=l.view.scroll;b>d.left-c.x&&b<d.right-c.x&&a>d.top-c.y&&a<d.bottom-c.y||(clearTimeout(x),x=null,l.line.detach())}else clearTimeout(x),x=null,l.line.detach()}),k.attachListener(k,"keyup",function(){l.hiddenMode=0}),k.attachListener(k,"keydown",function(a){if("wysiwyg"==e.mode)switch(a.data.getKeystroke()){case 2228240:case 16:l.hiddenMode=1,l.line.detach()}}),k.attachListener(l.inInlineMode?k:n,
-"mousemove",function(a){t=!0;if("wysiwyg"==e.mode&&!e.readOnly&&!x){var b={x:a.data.$.clientX,y:a.data.$.clientY};x=setTimeout(function(){l.mouse=b;x=l.trigger=null;A(l);t&&!l.hiddenMode&&e.focusManager.hasFocus&&!l.line.mouseNear()&&(l.element=X(l,!0))&&((l.trigger=v(l)||q(l)||aa(l))&&!p(l,l.trigger.upper||l.trigger.lower)?l.line.attach().place():(l.trigger=null,l.line.detach()),t=!1)},30)}}),k.attachListener(w,"scroll",function(){"wysiwyg"==e.mode&&(l.line.detach(),H.webkit&&(l.hiddenMode=1,clearTimeout(r),
-r=setTimeout(function(){l.mouseDown||(l.hiddenMode=0)},50)))}),k.attachListener(F?n:w,"mousedown",function(){"wysiwyg"==e.mode&&(l.line.detach(),l.hiddenMode=1,l.mouseDown=1)}),k.attachListener(F?n:w,"mouseup",function(){l.hiddenMode=0;l.mouseDown=0}),e.addCommand("accessPreviousSpace",m(l)),e.addCommand("accessNextSpace",m(l,!0)),e.setKeystroke([[h.magicline_keystrokePrevious,"accessPreviousSpace"],[h.magicline_keystrokeNext,"accessNextSpace"]]),e.on("loadSnapshot",function(){var a,b,d,c;for(c in{p:1,
-br:1,div:1})for(a=e.document.getElementsByTag(c),d=a.count();d--;)if((b=a.getItem(d)).data("cke-magicline-hot")){l.hotNode=b;l.lastCmdDirection="true"===b.data("cke-magicline-dir")?!0:!1;return}}),this.backdoor={accessFocusSpace:g,boxTrigger:f,isLine:a,getAscendantTrigger:c,getNonEmptyNeighbour:b,getSize:B,that:l,triggerEdge:q,triggerEditable:v,triggerExpand:aa})},this)}});var z=CKEDITOR.tools.extend,J=CKEDITOR.dom.element,E=J.createFromHtml,H=CKEDITOR.env,F=CKEDITOR.env.ie&&9>CKEDITOR.env.version,
+e.mode)if(l.inInlineMode){var b=a.data.$.clientX;a=a.data.$.clientY;A(l);y(l,!0);var d=l.view.editable,c=l.view.scroll;b>d.left-c.x&&b<d.right-c.x&&a>d.top-c.y&&a<d.bottom-c.y||(clearTimeout(w),w=null,l.line.detach())}else clearTimeout(w),w=null,l.line.detach()}),k.attachListener(k,"keyup",function(){l.hiddenMode=0}),k.attachListener(k,"keydown",function(a){if("wysiwyg"==e.mode)switch(a.data.getKeystroke()){case 2228240:case 16:l.hiddenMode=1,l.line.detach()}}),k.attachListener(l.inInlineMode?k:n,
+"mousemove",function(a){t=!0;if("wysiwyg"==e.mode&&!e.readOnly&&!w){var b={x:a.data.$.clientX,y:a.data.$.clientY};w=setTimeout(function(){l.mouse=b;w=l.trigger=null;A(l);t&&!l.hiddenMode&&e.focusManager.hasFocus&&!l.line.mouseNear()&&(l.element=X(l,!0))&&((l.trigger=v(l)||q(l)||ba(l))&&!p(l,l.trigger.upper||l.trigger.lower)?l.line.attach().place():(l.trigger=null,l.line.detach()),t=!1)},30)}}),k.attachListener(x,"scroll",function(){"wysiwyg"==e.mode&&(l.line.detach(),H.webkit&&(l.hiddenMode=1,clearTimeout(r),
+r=setTimeout(function(){l.mouseDown||(l.hiddenMode=0)},50)))}),k.attachListener(F?n:x,"mousedown",function(){"wysiwyg"==e.mode&&(l.line.detach(),l.hiddenMode=1,l.mouseDown=1)}),k.attachListener(F?n:x,"mouseup",function(){l.hiddenMode=0;l.mouseDown=0}),e.addCommand("accessPreviousSpace",m(l)),e.addCommand("accessNextSpace",m(l,!0)),e.setKeystroke([[h.magicline_keystrokePrevious,"accessPreviousSpace"],[h.magicline_keystrokeNext,"accessNextSpace"]]),e.on("loadSnapshot",function(){var a,b,d,c;for(c in{p:1,
+br:1,div:1})for(a=e.document.getElementsByTag(c),d=a.count();d--;)if((b=a.getItem(d)).data("cke-magicline-hot")){l.hotNode=b;l.lastCmdDirection="true"===b.data("cke-magicline-dir")?!0:!1;return}}),e._.magiclineBackdoor={accessFocusSpace:g,boxTrigger:f,isLine:a,getAscendantTrigger:c,getNonEmptyNeighbour:b,getSize:B,that:l,triggerEdge:q,triggerEditable:v,triggerExpand:ba})},this)}});var z=CKEDITOR.tools.extend,J=CKEDITOR.dom.element,E=J.createFromHtml,H=CKEDITOR.env,F=CKEDITOR.env.ie&&9>CKEDITOR.env.version,
 G=CKEDITOR.dtd,L={},I=128,C=64,S=32,O=16,P=4,K=2,V=1,T=" ",Y=G.$listItem,Z=G.$tableContent,M=z({},G.$nonEditable,G.$empty),R=G.$block,N=100,W="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",U=W+"border-color:transparent;display:block;border-style:solid;",Q="\x3cspan\x3e"+T+"\x3c/span\x3e";L[CKEDITOR.ENTER_BR]="br";L[CKEDITOR.ENTER_P]="p";L[CKEDITOR.ENTER_DIV]="div";f.prototype={set:function(a,b,d){this.properties=
-a+b+(d||V);return this},is:function(a){return(this.properties&a)==a}};var X=function(){function b(a,d){var c=a.$.elementFromPoint(d.x,d.y);return c&&c.nodeType?new CKEDITOR.dom.element(c):null}return function(d,c,e){if(!d.mouse)return null;var g=d.doc,f=d.line.wrap;e=e||d.mouse;var h=b(g,e);c&&a(d,h)&&(f.hide(),h=b(g,e),f.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||H.ie&&9>H.version&&!d.boundary.equals(h)&&!d.boundary.contains(h)?null:h}}(),ba=CKEDITOR.dom.walker.whitespaces(),ca=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),
-aa=function(){function b(a){var c=a.element,g,f,k;if(!n(c)||c.contains(a.editable)||c.isReadOnly())return null;k=D(a,function(a,b){return!b.equals(a)},function(a,b){return X(a,!0,b)},c);g=k.upper;f=k.lower;if(e(a,g,f))return k.set(S,8);if(g&&c.contains(g))for(;!g.getParent().equals(c);)g=g.getParent();else g=c.getFirst(function(b){return d(a,b)});if(f&&c.contains(f))for(;!f.getParent().equals(c);)f=f.getParent();else f=c.getLast(function(b){return d(a,b)});if(!g||!f)return null;x(a,g);x(a,f);if(!l(a.mouse.y,
-g.size.top,f.size.bottom))return null;for(var c=Number.MAX_VALUE,m,q,r,p;f&&!f.equals(g)&&(q=g.getNext(a.isRelevant));)m=Math.abs(h(a,g,q)-a.mouse.y),m<c&&(c=m,r=g,p=q),g=q,x(a,g);if(!r||!p||!l(a.mouse.y,r.size.top,p.size.bottom))return null;k.upper=r;k.lower=p;return k.set(S,8)}function d(b,c){return!(c&&c.type==CKEDITOR.NODE_TEXT||ca(c)||w(c)||a(b,c)||c.type==CKEDITOR.NODE_ELEMENT&&c.$&&c.is("br"))}return function(a){var d=b(a),c;if(c=d){c=d.upper;var g=d.lower;c=!c||!g||w(g)||w(c)||g.equals(c)||
-c.equals(g)||g.contains(c)||c.contains(g)?!1:t(a,c)&&t(a,g)&&e(a,c,g)?!0:!1}return c?d:null}}(),da=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function e(b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||"form"!=b.getName())return[];for(var c=[],d=["style","className"],e=0;e<d.length;e++){var f=b.$.elements.namedItem(d[e]);f&&(f=new CKEDITOR.dom.element(f),c.push([f,
+a+b+(d||V);return this},is:function(a){return(this.properties&a)==a}};var X=function(){function b(a,d){var c=a.$.elementFromPoint(d.x,d.y);return c&&c.nodeType?new CKEDITOR.dom.element(c):null}return function(d,c,e){if(!d.mouse)return null;var g=d.doc,f=d.line.wrap;e=e||d.mouse;var h=b(g,e);c&&a(d,h)&&(f.hide(),h=b(g,e),f.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||H.ie&&9>H.version&&!d.boundary.equals(h)&&!d.boundary.contains(h)?null:h}}(),ca=CKEDITOR.dom.walker.whitespaces(),da=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),
+ba=function(){function b(a){var c=a.element,g,f,k;if(!n(c)||c.contains(a.editable)||c.isReadOnly())return null;k=D(a,function(a,b){return!b.equals(a)},function(a,b){return X(a,!0,b)},c);g=k.upper;f=k.lower;if(e(a,g,f))return k.set(S,8);if(g&&c.contains(g))for(;!g.getParent().equals(c);)g=g.getParent();else g=c.getFirst(function(b){return d(a,b)});if(f&&c.contains(f))for(;!f.getParent().equals(c);)f=f.getParent();else f=c.getLast(function(b){return d(a,b)});if(!g||!f)return null;w(a,g);w(a,f);if(!l(a.mouse.y,
+g.size.top,f.size.bottom))return null;for(var c=Number.MAX_VALUE,m,q,r,p;f&&!f.equals(g)&&(q=g.getNext(a.isRelevant));)m=Math.abs(h(a,g,q)-a.mouse.y),m<c&&(c=m,r=g,p=q),g=q,w(a,g);if(!r||!p||!l(a.mouse.y,r.size.top,p.size.bottom))return null;k.upper=r;k.lower=p;return k.set(S,8)}function d(b,c){return!(c&&c.type==CKEDITOR.NODE_TEXT||da(c)||x(c)||a(b,c)||c.type==CKEDITOR.NODE_ELEMENT&&c.$&&c.is("br"))}return function(a){var d=b(a),c;if(c=d){c=d.upper;var g=d.lower;c=!c||!g||x(g)||x(c)||g.equals(c)||
+c.equals(g)||g.contains(c)||c.contains(g)?!1:t(a,c)&&t(a,g)&&e(a,c,g)?!0:!1}return c?d:null}}(),ea=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function e(b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||"form"!=b.getName())return[];for(var c=[],d=["style","className"],e=0;e<d.length;e++){var f=b.$.elements.namedItem(d[e]);f&&(f=new CKEDITOR.dom.element(f),c.push([f,
 f.nextSibling]),f.remove())}return c}function f(b,c){if(b&&b.type==CKEDITOR.NODE_ELEMENT&&"form"==b.getName()&&0<c.length)for(var d=c.length-1;0<=d;d--){var e=c[d][0],f=c[d][1];f?e.insertBefore(f):e.appendTo(b)}}function c(b,c){var d=e(b),g={},h=b.$;c||(g["class"]=h.className||"",h.className="");g.inline=h.style.cssText||"";c||(h.style.cssText="position: static; overflow: visible");f(d);return g}function h(b,c){var d=e(b),g=b.$;"class"in c&&(g.className=c["class"]);"inline"in c&&(g.style.cssText=
 c.inline);f(d)}function b(b){if(!b.editable().isInline()){var c=CKEDITOR.instances,d;for(d in c){var e=c[d];"wysiwyg"!=e.mode||e.readOnly||(e=e.document.getBody(),e.setAttribute("contentEditable",!1),e.setAttribute("contentEditable",!0))}b.editable().hasFocus&&(b.toolbox.focus(),b.focus())}}CKEDITOR.plugins.add("maximize",{init:function(e){function f(){var a=m.getViewPaneSize();e.resize(a.width,a.height,null,!0)}if(e.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var d=e.lang,g=CKEDITOR.document,m=g.getWindow(),
-a,n,w,u=CKEDITOR.TRISTATE_OFF;e.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var t=e.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),p=e.ui.space("contents");if("wysiwyg"==e.mode){var r=e.getSelection();a=r&&r.getRanges();n=m.getScrollPosition()}else{var v=e.editable().$;a=!CKEDITOR.env.ie&&[v.selectionStart,v.selectionEnd];n=[v.scrollLeft,v.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){m.on("resize",
-f);w=m.getScrollPosition();for(r=e.container;r=r.getParent();)r.setCustomData("maximize_saved_styles",c(r)),r.setStyle("z-index",e.config.baseFloatZIndex-5);p.setCustomData("maximize_saved_styles",c(p,!0));t.setCustomData("maximize_saved_styles",c(t,!0));p={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};g.getDocumentElement().setStyles(p);!CKEDITOR.env.gecko&&g.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||g.getBody().setStyles(p);CKEDITOR.env.ie?
+a,n,x,u=CKEDITOR.TRISTATE_OFF;e.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var t=e.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),p=e.ui.space("contents");if("wysiwyg"==e.mode){var r=e.getSelection();a=r&&r.getRanges();n=m.getScrollPosition()}else{var v=e.editable().$;a=!CKEDITOR.env.ie&&[v.selectionStart,v.selectionEnd];n=[v.scrollLeft,v.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){m.on("resize",
+f);x=m.getScrollPosition();for(r=e.container;r=r.getParent();)r.setCustomData("maximize_saved_styles",c(r)),r.setStyle("z-index",e.config.baseFloatZIndex-5);p.setCustomData("maximize_saved_styles",c(p,!0));t.setCustomData("maximize_saved_styles",c(t,!0));p={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};g.getDocumentElement().setStyles(p);!CKEDITOR.env.gecko&&g.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||g.getBody().setStyles(p);CKEDITOR.env.ie?
 setTimeout(function(){m.$.scrollTo(0,0)},0):m.$.scrollTo(0,0);t.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");t.$.offsetLeft;t.setStyles({"z-index":e.config.baseFloatZIndex-5,left:"0px",top:"0px"});t.addClass("cke_maximized");f();p=t.getDocumentPosition();t.setStyles({left:-1*p.x+"px",top:-1*p.y+"px"});CKEDITOR.env.gecko&&b(e)}else if(this.state==CKEDITOR.TRISTATE_ON){m.removeListener("resize",f);for(var r=[p,t],q=0;q<r.length;q++)h(r[q],r[q].getCustomData("maximize_saved_styles")),
-r[q].removeCustomData("maximize_saved_styles");for(r=e.container;r=r.getParent();)h(r,r.getCustomData("maximize_saved_styles")),r.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){m.$.scrollTo(w.x,w.y)},0):m.$.scrollTo(w.x,w.y);t.removeClass("cke_maximized");CKEDITOR.env.webkit&&(t.setStyle("display","inline"),setTimeout(function(){t.setStyle("display","block")},0));e.fire("resize",{outerHeight:e.container.$.offsetHeight,contentsHeight:p.$.offsetHeight,outerWidth:e.container.$.offsetWidth})}this.toggleState();
+r[q].removeCustomData("maximize_saved_styles");for(r=e.container;r=r.getParent();)h(r,r.getCustomData("maximize_saved_styles")),r.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){m.$.scrollTo(x.x,x.y)},0):m.$.scrollTo(x.x,x.y);t.removeClass("cke_maximized");CKEDITOR.env.webkit&&(t.setStyle("display","inline"),setTimeout(function(){t.setStyle("display","block")},0));e.fire("resize",{outerHeight:e.container.$.offsetHeight,contentsHeight:p.$.offsetHeight,outerWidth:e.container.$.offsetWidth})}this.toggleState();
 if(r=this.uiItems[0])p=this.state==CKEDITOR.TRISTATE_OFF?d.maximize.maximize:d.maximize.minimize,r=CKEDITOR.document.getById(r._.id),r.getChild(1).setHtml(p),r.setAttribute("title",p),r.setAttribute("href",'javascript:void("'+p+'");');"wysiwyg"==e.mode?a?(CKEDITOR.env.gecko&&b(e),e.getSelection().selectRanges(a),(v=e.getSelection().getStartElement())&&v.scrollIntoView(!0)):m.$.scrollTo(n.x,n.y):(a&&(v.selectionStart=a[0],v.selectionEnd=a[1]),v.scrollLeft=n[0],v.scrollTop=n[1]);a=n=null;u=this.state;
 e.fire("maximize",this.state)},canUndo:!1});e.ui.addButton&&e.ui.addButton("Maximize",{label:d.maximize.maximize,command:"maximize",toolbar:"tools,10"});e.on("mode",function(){var a=e.getCommand("maximize");a.setState(a.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:u)},null,null,100)}}})}(),function(){function e(e,c,h){var b=CKEDITOR.cleanWord;b?h():(e=CKEDITOR.getUrl(e.config.pasteFromWordCleanupFile||c+"filter/default.js"),CKEDITOR.scriptLoader.load(e,h,null,!0));return!b}CKEDITOR.plugins.add("pastefromword",
 {requires:"clipboard",init:function(f){function c(b){var d=CKEDITOR.plugins.pastefromword&&CKEDITOR.plugins.pastefromword.images,c,e=[];if(d&&b.editor.filter.check("img[src]")&&(c=d.extractTagsFromHtml(b.data.dataValue),0!==c.length&&(d=d.extractFromRtf(b.data.dataTransfer["text/rtf"]),0!==d.length&&(CKEDITOR.tools.array.forEach(d,function(a){e.push(a.type?"data:"+a.type+";base64,"+CKEDITOR.tools.convertBytesToBase64(CKEDITOR.tools.convertHexStringToBytes(a.hex)):null)},this),c.length===e.length))))for(d=
@@ -1045,8 +1046,8 @@ if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&l)f.on("afterPasteFrom
 b.display+"\x3c/kbd\x3e");e.execCommand("paste",{type:"text",notification:l?h:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(f){var c=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+86:CKEDITOR.CTRL+CKEDITOR.SHIFT+86;f.addCommand("pastetext",e);f.setKeystroke(c,"pastetext");CKEDITOR.plugins.clipboard.addPasteButton(f,"PasteText",{label:f.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(f.config.forcePasteAsPlainText)f.on("beforePaste",
 function(c){"html"!=c.data.type&&(c.data.type="text")});f.on("pasteState",function(c){f.getCommand("pastetext").setState(c.data)})}})}(),CKEDITOR.plugins.add("removeformat",{init:function(e){e.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);e.ui.addButton&&e.ui.addButton("RemoveFormat",{label:e.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(e){for(var f=e._.removeFormatRegex||
 (e._.removeFormatRegex=new RegExp("^(?:"+e.config.removeFormatTags.replace(/,/g,"|")+")$","i")),c=e._.removeAttributes||(e._.removeAttributes=e.config.removeFormatAttributes.split(",")),h=CKEDITOR.plugins.removeformat.filter,b=e.getSelection().getRanges().createIterator(),l=function(a){return a.type==CKEDITOR.NODE_ELEMENT},k=[],d;d=b.getNextRange();){var g=d.createBookmark();d=e.createRange();d.setStartBefore(g.startNode);g.endNode&&d.setEndAfter(g.endNode);d.collapsed||d.enlarge(CKEDITOR.ENLARGE_ELEMENT);
-var m=d.createBookmark(),a=m.startNode,n=m.endNode,w=function(a){for(var b=e.elementPath(a),d=b.elements,c=1,g;(g=d[c])&&!g.equals(b.block)&&!g.equals(b.blockLimit);c++)f.test(g.getName())&&h(e,g)&&a.breakParent(g)};w(a);if(n)for(w(n),a=a.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);a&&!a.equals(n);)if(a.isReadOnly()){if(a.getPosition(n)&CKEDITOR.POSITION_CONTAINS)break;a=a.getNext(l)}else w=a.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==a.getName()&&a.data("cke-realelement")||a.hasAttribute("data-cke-bookmark")||
-!h(e,a)||(f.test(a.getName())?a.remove(1):(a.removeAttributes(c),e.fire("removeFormatCleanup",a))),a=w;m.startNode.remove();m.endNode&&m.endNode.remove();d.moveToBookmark(g);k.push(d)}e.forceNextSelectionCheck();e.getSelection().selectRanges(k)}}},filter:function(e,f){for(var c=e._.removeFormatFilters||[],h=0;h<c.length;h++)if(!1===c[h](f))return!1;return!0}},CKEDITOR.editor.prototype.addRemoveFormatFilter=function(e){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(e)},
+var m=d.createBookmark(),a=m.startNode,n=m.endNode,x=function(a){for(var b=e.elementPath(a),d=b.elements,c=1,g;(g=d[c])&&!g.equals(b.block)&&!g.equals(b.blockLimit);c++)f.test(g.getName())&&h(e,g)&&a.breakParent(g)};x(a);if(n)for(x(n),a=a.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);a&&!a.equals(n);)if(a.isReadOnly()){if(a.getPosition(n)&CKEDITOR.POSITION_CONTAINS)break;a=a.getNext(l)}else x=a.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==a.getName()&&a.data("cke-realelement")||a.hasAttribute("data-cke-bookmark")||
+!h(e,a)||(f.test(a.getName())?a.remove(1):(a.removeAttributes(c),e.fire("removeFormatCleanup",a))),a=x;m.startNode.remove();m.endNode&&m.endNode.remove();d.moveToBookmark(g);k.push(d)}e.forceNextSelectionCheck();e.getSelection().selectRanges(k)}}},filter:function(e,f){for(var c=e._.removeFormatFilters||[],h=0;h<c.length;h++)if(!1===c[h](f))return!1;return!0}},CKEDITOR.editor.prototype.addRemoveFormatFilter=function(e){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(e)},
 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 e(c,e,b){var l,k;if(b="string"==typeof b?CKEDITOR.document.getById(b):new CKEDITOR.dom.element(b))if(l=c.fire("uiSpace",{space:e,html:""}).html)c.on("uiSpace",function(b){b.data.space==e&&b.cancel()},null,null,1),k=b.append(CKEDITOR.dom.element.createFromHtml(f.output({id:c.id,
 name:c.name,langDir:c.lang.dir,langCode:c.langCode,space:e,spaceId:c.ui.spaceId(e),content:l}))),b.getCustomData("cke_hasshared")?k.hide():b.setCustomData("cke_hasshared",1),k.unselectable(),k.on("mousedown",function(b){b=b.data;b.getTarget().hasAscendant("a",1)||b.preventDefault()}),c.focusManager.add(k,1),c.on("focus",function(){for(var d=0,c,e=b.getChildren();c=e.getItem(d);d++)c.type==CKEDITOR.NODE_ELEMENT&&!c.equals(k)&&c.hasClass("cke_shared")&&c.hide();k.show()}),c.on("destroy",function(){k.remove()})}
 var f=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(c){c.on("loaded",
@@ -1063,9 +1064,9 @@ arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}}),e.com
 f.ui.space("contents").append(h);h=f.editable(new e(f,h));h.setData(f.getData(1));CKEDITOR.env.ie&&(h.attachListener(f,"resize",c,h),h.attachListener(CKEDITOR.document.getWindow(),"resize",c,h),CKEDITOR.tools.setTimeout(c,0,h));f.fire("ariaWidget",this);b()});f.addCommand("source",h.commands.source);f.ui.addButton&&f.ui.addButton("Source",{label:f.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});f.on("mode",function(){f.getCommand("source").setState("source"==f.mode?CKEDITOR.TRISTATE_ON:
 CKEDITOR.TRISTATE_OFF)});var b=CKEDITOR.env.ie&&9==CKEDITOR.env.version}}});var e=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(e){this.setValue(e);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(e){this[(e?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){e.baseProto.detach.call(this);this.clearCustomData();
 this.remove()}}})}(),CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(e){"wysiwyg"==e.mode&&e.fire("saveSnapshot");e.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);e.setMode("source"==e.mode?"wysiwyg":"source")},canUndo:!1}}},CKEDITOR.plugins.add("sourcedialog",{requires:"dialog",init:function(e){e.addCommand("sourcedialog",new CKEDITOR.dialogCommand("sourcedialog"));CKEDITOR.dialog.add("sourcedialog",this.path+"dialogs/sourcedialog.js");
-e.ui.addButton&&e.ui.addButton("Sourcedialog",{label:e.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,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},
-requires:"dialog",init:function(e){var f=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");e.addCommand("specialchar",{exec:function(){var c=e.langCode,c=f.availableLangs[c]?c:f.availableLangs[c.replace(/-.*/,"")]?c.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(f.path+"dialogs/lang/"+c+".js"),function(){CKEDITOR.tools.extend(e.lang.specialchar,f.langEntries[c]);e.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});e.ui.addButton&&e.ui.addButton("SpecialChar",
-{label:e.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(" "),
+e.ui.addButton&&e.ui.addButton("Sourcedialog",{label:e.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(e){var f=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");e.addCommand("specialchar",{exec:function(){var c=e.langCode,c=f.availableLangs[c]?c:f.availableLangs[c.replace(/-.*/,"")]?c.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(f.path+"dialogs/lang/"+c+".js"),function(){CKEDITOR.tools.extend(e.lang.specialchar,f.langEntries[c]);e.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});e.ui.addButton&&
+e.ui.addButton("SpecialChar",{label:e.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(e){var f=e.config,c=e.lang.stylescombo,h={},b=[],l=[];e.on("stylesSet",function(c){if(c=c.data.styles){for(var d,g,m,a=0,n=c.length;a<n;a++)(d=c[a],e.blockless&&d.element in CKEDITOR.dtd.$block||"string"==typeof d.type&&!CKEDITOR.style.customHandlers[d.type]||(g=d.name,d=new CKEDITOR.style(d),e.filter.customConfig&&!e.filter.check(d)))||(d._name=g,d._.enterMode=f.enterMode,d._.type=m=d.assignedTo||d.type,d._.weight=
 a+1E3*(m==CKEDITOR.STYLE_OBJECT?1:m==CKEDITOR.STYLE_BLOCK?2:3),h[g]=d,b.push(d),l.push(d));b.sort(function(a,b){return a._.weight-b._.weight})}});e.ui.addRichCombo("Styles",{label:c.label,title:c.panelTitle,toolbar:"styles,10",allowedContent:l,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(f.contentsCss),multiSelect:!0,attributes:{"aria-label":c.panelTitle}},init:function(){var e,d,g,f,a,h;a=0;for(h=b.length;a<h;a++)e=b[a],d=e._name,f=e._.type,f!=g&&(this.startGroup(c["panelTitle"+String(f)]),
 g=f),this.add(d,e.type==CKEDITOR.STYLE_OBJECT?d:e.buildPreview(),d);this.commit()},onClick:function(b){e.focus();e.fire("saveSnapshot");b=h[b];var d=e.elementPath();if(b.group&&b.removeStylesFromSameGroup(e))e.applyStyle(b);else e[b.checkActive(d,e)?"removeStyle":"applyStyle"](b);e.fire("saveSnapshot")},onRender:function(){e.on("selectionChange",function(b){var d=this.getValue();b=b.data.path.elements;for(var c=0,f=b.length,a;c<f;c++){a=b[c];for(var l in h)if(h[l].checkElementRemovable(a,!0,e)){l!=
@@ -1092,9 +1093,9 @@ p+=f.$.rowSpan-1,g.$.cells.length||l.push(g));k=h[0].length-1>m?new CKEDITOR.dom
 a.getRanges(),d=e(a),c=d[0]&&d[0].getAscendant("table"),f;a:{var h=0;f=d.length-1;for(var k={},l,n;l=d[h++];)CKEDITOR.dom.element.setMarker(k,l,"delete_cell",!0);for(h=0;l=d[h++];)if((n=l.getPrevious())&&!n.getCustomData("delete_cell")||(n=l.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(k);f=n;break a}CKEDITOR.dom.element.clearAllMarkers(k);h=d[0].getParent();(h=h.getPrevious())?f=h.getLast():(h=d[f].getParent(),f=(h=h.getNext())?h.getChild(0):null)}a.reset();for(a=
 d.length-1;0<=a;a--)g(d[a]);f?m(f,!0):c&&(b[0].moveToPosition(c,CKEDITOR.POSITION_BEFORE_START),b[0].select(),c.remove())}else a instanceof CKEDITOR.dom.element&&(b=a.getParent(),1==b.getChildCount()?b.remove():a.remove())}function m(a,b){var d=a.getDocument(),c=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(c.focus(),d.focus());d=new CKEDITOR.dom.range(d);d["moveToElementEdit"+(b?"End":"Start")](a)||(d.selectNodeContents(a),d.collapse(b?!1:!0));d.select(!0)}function a(a,b,d){a=a[b];
 if("undefined"==typeof d)return a;for(b=0;a&&b<a.length;b++){if(d.is&&a[b]==d.$)return b;if(b==d)return new CKEDITOR.dom.element(a[b])}return d.is?-1:null}function n(b,d,c){var g=e(b),f;if((d?1!=g.length:2>g.length)||(f=b.getCommonAncestor())&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("table"))return!1;var h;b=g[0];f=b.getAscendant("table");var k=CKEDITOR.tools.buildTableMap(f),m=k.length,l=k[0].length,n=b.getParent().$.rowIndex,p=a(k,n,b);if(d){var t;try{var u=parseInt(b.getAttribute("rowspan"),10)||1;
-h=parseInt(b.getAttribute("colspan"),10)||1;t=k["up"==d?n-u:"down"==d?n+u:n]["left"==d?p-h:"right"==d?p+h:p]}catch(w){return!1}if(!t||b.$==t)return!1;g["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(t))}d=b.getDocument();var L=n,u=t=0,I=!c&&new CKEDITOR.dom.documentFragment(d),C=0;for(d=0;d<g.length;d++){h=g[d];var S=h.getParent(),O=h.getFirst(),P=h.$.colSpan,K=h.$.rowSpan,S=S.$.rowIndex,V=a(k,S,h),C=C+P*K,u=Math.max(u,V-p+P);t=Math.max(t,S-n+K);c||(P=h,(K=P.getBogus())&&K.remove(),
+h=parseInt(b.getAttribute("colspan"),10)||1;t=k["up"==d?n-u:"down"==d?n+u:n]["left"==d?p-h:"right"==d?p+h:p]}catch(x){return!1}if(!t||b.$==t)return!1;g["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(t))}d=b.getDocument();var L=n,u=t=0,I=!c&&new CKEDITOR.dom.documentFragment(d),C=0;for(d=0;d<g.length;d++){h=g[d];var S=h.getParent(),O=h.getFirst(),P=h.$.colSpan,K=h.$.rowSpan,S=S.$.rowIndex,V=a(k,S,h),C=C+P*K,u=Math.max(u,V-p+P);t=Math.max(t,S-n+K);c||(P=h,(K=P.getBogus())&&K.remove(),
 P.trim(),h.getChildren().count()&&(S==L||!O||O.isBlockBoundary&&O.isBlockBoundary({br:1})||(L=I.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!L||L.is&&L.is("br")||I.append("br")),h.moveChildren(I)),d?h.remove():h.setHtml(""));L=S}if(c)return t*u==C;I.moveChildren(b);b.appendBogus();u>=l?b.removeAttribute("rowSpan"):b.$.rowSpan=t;t>=m?b.removeAttribute("colSpan"):b.$.colSpan=u;c=new CKEDITOR.dom.nodeList(f.$.rows);g=c.count();for(d=g-1;0<=d;d--)f=c.getItem(d),f.$.cells.length||(f.remove(),g++);return b}
-function w(b,d){var c=e(b);if(1<c.length)return!1;if(d)return!0;var c=c[0],g=c.getParent(),f=g.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(f),k=g.$.rowIndex,m=a(h,k,c),l=c.$.rowSpan,n;if(1<l){n=Math.ceil(l/2);for(var l=Math.floor(l/2),g=k+n,f=new CKEDITOR.dom.element(f.$.rows[g]),h=a(h,g),p,g=c.clone(),k=0;k<h.length;k++)if(p=h[k],p.parentNode==f.$&&k>m){g.insertBefore(new CKEDITOR.dom.element(p));break}else p=null;p||f.append(g)}else for(l=n=1,f=g.clone(),f.insertAfter(g),f.append(g=c.clone()),
+function x(b,d){var c=e(b);if(1<c.length)return!1;if(d)return!0;var c=c[0],g=c.getParent(),f=g.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(f),k=g.$.rowIndex,m=a(h,k,c),l=c.$.rowSpan,n;if(1<l){n=Math.ceil(l/2);for(var l=Math.floor(l/2),g=k+n,f=new CKEDITOR.dom.element(f.$.rows[g]),h=a(h,g),p,g=c.clone(),k=0;k<h.length;k++)if(p=h[k],p.parentNode==f.$&&k>m){g.insertBefore(new CKEDITOR.dom.element(p));break}else p=null;p||f.append(g)}else for(l=n=1,f=g.clone(),f.insertAfter(g),f.append(g=c.clone()),
 p=a(h,k),m=0;m<p.length;m++)p[m].rowSpan++;g.appendBogus();c.$.rowSpan=n;g.$.rowSpan=l;1==n&&c.removeAttribute("rowSpan");1==l&&g.removeAttribute("rowSpan");return g}function u(b,d){var c=e(b);if(1<c.length)return!1;if(d)return!0;var c=c[0],g=c.getParent(),f=g.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(f),h=a(f,g.$.rowIndex,c),k=c.$.colSpan;if(1<k)g=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=g=1,m=[],l=0;l<f.length;l++){var n=f[l];m.push(n[h]);1<n[h].rowSpan&&(l+=n[h].rowSpan-1)}for(f=
 0;f<m.length;f++)m[f].colSpan++}f=c.clone();f.insertAfter(c);f.appendBogus();c.$.colSpan=g;f.$.colSpan=k;1==g&&c.removeAttribute("colSpan");1==k&&f.removeAttribute("colSpan");return f}var t=/^(?:td|th)$/,p=CKEDITOR.tools.isArray;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(a){function b(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 h(b,
 d){var c=a.addCommand(b,d);a.addFeature(c)}var p=a.lang.table,t=CKEDITOR.tools.style.parse,y="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(" ");h("cellProperties",new CKEDITOR.dialogCommand("cellProperties",b({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:y,contentTransformations:[[{element:"td",left:function(a){return a.styles.background&&
@@ -1102,20 +1103,20 @@ t.background(a.styles.background).color},right:function(a){a.styles["background-
 (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");h("rowDelete",b({requiredContent:"table",exec:function(a){a=a.getSelection();(a=c(a))&&m(a)}}));h("rowInsertBefore",b({requiredContent:"table",exec:function(a){a=
 a.getSelection();a=e(a);f(a,!0)}}));h("rowInsertAfter",b({requiredContent:"table",exec:function(a){a=a.getSelection();a=e(a);f(a)}}));h("columnDelete",b({requiredContent:"table",exec:function(a){a=a.getSelection();(a=k(a))&&m(a,!0)}}));h("columnInsertBefore",b({requiredContent:"table",exec:function(a){a=a.getSelection();a=e(a);l(a,!0)}}));h("columnInsertAfter",b({requiredContent:"table",exec:function(a){a=a.getSelection();a=e(a);l(a)}}));h("cellDelete",b({requiredContent:"table",exec:function(a){a=
 a.getSelection();g(a)}}));h("cellMerge",b({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a,b){b.cell=n(a.getSelection());m(b.cell,!0)}}));h("cellMergeRight",b({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a,b){b.cell=n(a.getSelection(),"right");m(b.cell,!0)}}));h("cellMergeDown",b({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a,b){b.cell=n(a.getSelection(),"down");m(b.cell,!0)}}));h("cellVerticalSplit",
-b({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(u(a.getSelection()))}}));h("cellHorizontalSplit",b({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(w(a.getSelection()))}}));h("cellInsertBefore",b({requiredContent:"table",exec:function(a){a=a.getSelection();d(a,!0)}}));h("cellInsertAfter",b({requiredContent:"table",exec:function(a){a=a.getSelection();d(a)}}));a.addMenuItems&&a.addMenuItems({tablecell:{label:p.cell.menu,group:"tablecell",
+b({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(u(a.getSelection()))}}));h("cellHorizontalSplit",b({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(x(a.getSelection()))}}));h("cellInsertBefore",b({requiredContent:"table",exec:function(a){a=a.getSelection();d(a,!0)}}));h("cellInsertAfter",b({requiredContent:"table",exec:function(a){a=a.getSelection();d(a)}}));a.addMenuItems&&a.addMenuItems({tablecell:{label:p.cell.menu,group:"tablecell",
 order:1,getItems:function(){var b=a.getSelection(),d=e(b),b={tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:n(b,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:n(b,"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:n(b,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:u(b,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,
-tablecell_split_horizontal:w(b,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.filter.check(y)&&(b.tablecell_properties=0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);return b}},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,
+tablecell_split_horizontal:x(b,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.filter.check(y)&&(b.tablecell_properties=0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);return b}},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,d){return(a=d.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getCellColIndex:h,insertRow:f,insertColumn:l,getSelectedCells:e};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)}(),CKEDITOR.tools.buildTableMap=function(e,f,c,h,b){e=e.$.rows;c=c||0;h="number"===typeof h?h:e.length-
-1;b="number"===typeof b?b:-1;var l=-1,k=[];for(f=f||0;f<=h;f++){l++;!k[l]&&(k[l]=[]);for(var d=-1,g=c;g<=(-1===b?e[f].cells.length-1:b);g++){var m=e[f].cells[g];if(!m)break;for(d++;k[l][d];)d++;for(var a=isNaN(m.colSpan)?1:m.colSpan,m=isNaN(m.rowSpan)?1:m.rowSpan,n=0;n<m&&!(f+n>h);n++){k[l+n]||(k[l+n]=[]);for(var w=0;w<a;w++)k[l+n][d+w]=e[f].cells[g]}d+=a-1;if(-1!==b&&d>=b)break}}return k},function(){function e(b){return CKEDITOR.env.ie?b.$.clientWidth:parseInt(b.getComputedStyle("width"),10)}function f(b,
+1;b="number"===typeof b?b:-1;var l=-1,k=[];for(f=f||0;f<=h;f++){l++;!k[l]&&(k[l]=[]);for(var d=-1,g=c;g<=(-1===b?e[f].cells.length-1:b);g++){var m=e[f].cells[g];if(!m)break;for(d++;k[l][d];)d++;for(var a=isNaN(m.colSpan)?1:m.colSpan,m=isNaN(m.rowSpan)?1:m.rowSpan,n=0;n<m&&!(f+n>h);n++){k[l+n]||(k[l+n]=[]);for(var x=0;x<a;x++)k[l+n][d+x]=e[f].cells[g]}d+=a-1;if(-1!==b&&d>=b)break}}return k},function(){function e(b){return CKEDITOR.env.ie?b.$.clientWidth:parseInt(b.getComputedStyle("width"),10)}function f(b,
 d){var a=b.getComputedStyle("border-"+d+"-width"),c={thin:"0px",medium:"1px",thick:"2px"};0>a.indexOf("px")&&(a=a in c&&"none"!=b.getComputedStyle("border-style")?c[a]:0);return parseInt(a,10)}function c(b){var d=[],a={},c="rtl"==b.getComputedStyle("direction");CKEDITOR.tools.array.forEach(b.$.rows,function(e,h){var k=-1,l=0,r=null;e?(l=new CKEDITOR.dom.element(e),r={height:l.$.offsetHeight,position:l.getDocumentPosition()}):r=void 0;for(var l=r.height,r=r.position,v=0,q=e.cells.length;v<q;v++){var B=
-new CKEDITOR.dom.element(e.cells[v]),x=e.cells[v+1]&&new CKEDITOR.dom.element(e.cells[v+1]),k=k+(B.$.colSpan||1),y,A,D=B.getDocumentPosition().x;c?A=D+f(B,"left"):y=D+B.$.offsetWidth-f(B,"right");x?(D=x.getDocumentPosition().x,c?y=D+x.$.offsetWidth-f(x,"right"):A=D+f(x,"left")):(D=b.getDocumentPosition().x,c?y=D:A=D+b.$.offsetWidth);B=Math.max(A-y,3);B={table:b,index:k,x:y,y:r.y,width:B,height:l,rtl:c};a[k]=a[k]||[];a[k].push(B);B.alignedPillars=a[k];d.push(B)}});return d}function h(b){(b.data||b).preventDefault()}
+new CKEDITOR.dom.element(e.cells[v]),w=e.cells[v+1]&&new CKEDITOR.dom.element(e.cells[v+1]),k=k+(B.$.colSpan||1),y,A,D=B.getDocumentPosition().x;c?A=D+f(B,"left"):y=D+B.$.offsetWidth-f(B,"right");w?(D=w.getDocumentPosition().x,c?y=D+w.$.offsetWidth-f(w,"right"):A=D+f(w,"left")):(D=b.getDocumentPosition().x,c?y=D:A=D+b.$.offsetWidth);B=Math.max(A-y,3);B={table:b,index:k,x:y,y:r.y,width:B,height:l,rtl:c};a[k]=a[k]||[];a[k].push(B);B.alignedPillars=a[k];d.push(B)}});return d}function h(b){(b.data||b).preventDefault()}
 function b(b){function c(){v=0;r.setOpacity(0);B&&a();var b=t.table;setTimeout(function(){b.removeCustomData("_cke_table_pillars")},0);p.removeListener("dragstart",h)}function a(){for(var a=t.rtl,d=a?A.length:y.length,c=0,h=0;h<d;h++){var m=y[h],l=A[h],n=t.table;CKEDITOR.tools.setTimeout(function(e,f,h,m,l,p){e&&e.setStyle("width",k(Math.max(f+p,1)));h&&h.setStyle("width",k(Math.max(m-p,1)));l&&n.setStyle("width",k(l+p*(a?-1:1)));++c==d&&b.fire("saveSnapshot")},0,this,[m,m&&e(m),l,l&&e(l),(!m||!l)&&
-e(n)+f(n,"left")+f(n,"right"),B])}}function l(a){h(a);b.fire("saveSnapshot");a=t.index;for(var d=CKEDITOR.tools.buildTableMap(t.table),c=[],f=[],k=Number.MAX_VALUE,m=k,n=t.rtl,x=0,S=d.length;x<S;x++){var O=d[x],P=O[a+(n?1:0)],O=O[a+(n?0:1)],P=P&&new CKEDITOR.dom.element(P),O=O&&new CKEDITOR.dom.element(O);P&&O&&P.equals(O)||(P&&(k=Math.min(k,e(P))),O&&(m=Math.min(m,e(O))),c.push(P),f.push(O))}y=c;A=f;D=t.x-k;z=t.x+m;r.setOpacity(.5);q=parseInt(r.getStyle("left"),10);B=0;v=1;r.on("mousemove",u);p.on("dragstart",
-h);p.on("mouseup",w,this)}function w(a){a.removeListener();c()}function u(a){x(a.data.getPageOffset().x)}var t,p,r,v,q,B,x,y,A,D,z;p=b.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:10"\x3e\x3c/div\x3e',p);b.on("destroy",function(){r.remove()});d||p.getDocumentElement().append(r);
-this.attachTo=function(a){var b,c,e;v||(d&&(p.getBody().append(r),B=0),t=a,b=t.alignedPillars[0],c=t.alignedPillars[t.alignedPillars.length-1],e=b.y,b=c.height+c.y-b.y,r.setStyles({width:k(a.width),height:k(b),left:k(a.x),top:k(e)}),d&&r.setOpacity(.25),r.on("mousedown",l,this),p.getBody().setStyle("cursor","col-resize"),r.show())};x=this.move=function(a,b){if(!t)return 0;if(!(v||a>=t.x&&a<=t.x+t.width&&b>=t.y&&b<=t.y+t.height))return t=null,v=B=0,p.removeListener("mouseup",w),r.removeListener("mousedown",
+e(n)+f(n,"left")+f(n,"right"),B])}}function l(a){h(a);b.fire("saveSnapshot");a=t.index;for(var d=CKEDITOR.tools.buildTableMap(t.table),c=[],f=[],k=Number.MAX_VALUE,m=k,n=t.rtl,w=0,S=d.length;w<S;w++){var O=d[w],P=O[a+(n?1:0)],O=O[a+(n?0:1)],P=P&&new CKEDITOR.dom.element(P),O=O&&new CKEDITOR.dom.element(O);P&&O&&P.equals(O)||(P&&(k=Math.min(k,e(P))),O&&(m=Math.min(m,e(O))),c.push(P),f.push(O))}y=c;A=f;D=t.x-k;z=t.x+m;r.setOpacity(.5);q=parseInt(r.getStyle("left"),10);B=0;v=1;r.on("mousemove",u);p.on("dragstart",
+h);p.on("mouseup",x,this)}function x(a){a.removeListener();c()}function u(a){w(a.data.getPageOffset().x)}var t,p,r,v,q,B,w,y,A,D,z;p=b.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:10"\x3e\x3c/div\x3e',p);b.on("destroy",function(){r.remove()});d||p.getDocumentElement().append(r);
+this.attachTo=function(a){var b,c,e;v||(d&&(p.getBody().append(r),B=0),t=a,b=t.alignedPillars[0],c=t.alignedPillars[t.alignedPillars.length-1],e=b.y,b=c.height+c.y-b.y,r.setStyles({width:k(a.width),height:k(b),left:k(a.x),top:k(e)}),d&&r.setOpacity(.25),r.on("mousedown",l,this),p.getBody().setStyle("cursor","col-resize"),r.show())};w=this.move=function(a,b){if(!t)return 0;if(!(v||a>=t.x&&a<=t.x+t.width&&b>=t.y&&b<=t.y+t.height))return t=null,v=B=0,p.removeListener("mouseup",x),r.removeListener("mousedown",
 l),r.removeListener("mousemove",u),p.getBody().setStyle("cursor","auto"),d?r.remove():r.hide(),0;var c=a-Math.round(r.$.offsetWidth/2);if(v){if(c==D||c==z)return 1;c=Math.max(c,D);c=Math.min(c,z);B=c-q}r.setStyle("left",k(c));return 1}}function l(b){var d=b.data.getTarget();if("mouseout"==b.name){if(!d.is("table"))return;for(var a=new CKEDITOR.dom.element(b.data.$.relatedTarget||b.data.$.toElement);a&&a.$&&!a.equals(d)&&!a.is("body");)a=a.getParent();if(!a||a.equals(d))return}d.getAscendant("table",
 1).removeCustomData("_cke_table_pillars");b.removeListener()}var k=CKEDITOR.tools.cssLength,d=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(d){d.on("contentDom",function(){var e,a=d.editable();a.attachListener(a.isInline()?a:d.document,"mousemove",function(a){a=a.data;var f=a.getTarget();if(f.type==CKEDITOR.NODE_ELEMENT){var k=a.getPageOffset().x,t=a.getPageOffset().y;if(e&&e.move(k,t))h(a);else if(f.is("table")||
 f.getAscendant({thead:1,tbody:1,tfoot:1},1))if(a=f.getAscendant("table",1),d.editable().contains(a)){(f=a.getCustomData("_cke_table_pillars"))||(a.setCustomData("_cke_table_pillars",f=c(a)),a.on("mouseout",l),a.on("mousedown",l));a:{a=f;for(var f=0,p=a.length;f<p;f++){var r=a[f];if(k>=r.x&&k<=r.x+r.width&&t>=r.y&&t<=r.y+r.height){k=r;break a}}k=null}k&&(!e&&(e=new b(d)),e.attachTo(k))}}})})}})}(),"use strict",function(){var e=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],f={8:1,
@@ -1145,13 +1146,13 @@ g.data("cke-title",g.getText());CKEDITOR.env.ie&&(e.document.$.title=this._.docT
 e),d=a.$)})}function e(b){b.returnValue=!1}if(CKEDITOR.env.gecko)try{var d=b.document.$;d.execCommand("enableObjectResizing",!1,!b.config.disableObjectResizing);d.execCommand("enableInlineTableEditing",!1,!b.config.disableNativeTableHandles)}catch(f){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&b.config.disableObjectResizing&&c(b)}function c(){var b=[];if(8<=CKEDITOR.document.$.documentMode){b.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var c=[],e;for(e in CKEDITOR.dtd.$removeEmpty)c.push("html.CSS1Compat "+
 e+"[contenteditable\x3dfalse]");b.push(c.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(b.push("html{height:100% !important}"),b.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));b.push("html{cursor:text;*cursor:auto}");b.push("img,input,textarea{cursor:default}");return b.join("\n")}var h;CKEDITOR.plugins.add("wysiwygarea",{init:function(b){b.config.fullPage&&b.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",
 requiredContent:"body"});b.addMode("wysiwyg",function(c){function e(a){a&&a.removeListener();b.editable(new h(b,f.$.contentWindow.document.body));b.setData(b.getData(1),c)}var d="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",d=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(d)+"}())":"",f=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+d+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');
-f.setStyles({width:"100%",height:"100%"});f.addClass("cke_wysiwyg_frame").addClass("cke_reset");d=b.ui.space("contents");d.append(f);var m=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(m)f.on("load",e);var a=b.title,n=b.fire("ariaEditorHelpLabel",{}).label;a&&(CKEDITOR.env.ie&&n&&(a+=", "+n),f.setAttribute("title",a));if(n){var a=CKEDITOR.tools.getNextId(),w=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+a+'" class\x3d"cke_voice_label"\x3e'+n+"\x3c/span\x3e");d.append(w,1);f.setAttribute("aria-describedby",
-a)}b.on("beforeModeUnload",function(a){a.removeListener();w&&w.remove()});f.setAttributes({tabIndex:b.tabIndex,allowTransparency:"true"});!m&&e();b.fire("ariaWidget",f)})}});CKEDITOR.editor.prototype.addContentsCss=function(b){var c=this.config,e=c.contentsCss;CKEDITOR.tools.isArray(e)||(c.contentsCss=e?[e]:[]);c.contentsCss.push(b)};h=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(b){CKEDITOR.tools.setTimeout(e,
+f.setStyles({width:"100%",height:"100%"});f.addClass("cke_wysiwyg_frame").addClass("cke_reset");d=b.ui.space("contents");d.append(f);var m=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(m)f.on("load",e);var a=b.title,n=b.fire("ariaEditorHelpLabel",{}).label;a&&(CKEDITOR.env.ie&&n&&(a+=", "+n),f.setAttribute("title",a));if(n){var a=CKEDITOR.tools.getNextId(),x=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+a+'" class\x3d"cke_voice_label"\x3e'+n+"\x3c/span\x3e");d.append(x,1);f.setAttribute("aria-describedby",
+a)}b.on("beforeModeUnload",function(a){a.removeListener();x&&x.remove()});f.setAttributes({tabIndex:b.tabIndex,allowTransparency:"true"});!m&&e();b.fire("ariaWidget",f)})}});CKEDITOR.editor.prototype.addContentsCss=function(b){var c=this.config,e=c.contentsCss;CKEDITOR.tools.isArray(e)||(c.contentsCss=e?[e]:[]);c.contentsCss.push(b)};h=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(b){CKEDITOR.tools.setTimeout(e,
 0,this,b)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(b,e){var f=this.editor;if(e)this.setHtml(b),this.fixInitialSelection(),f.fire("dataReady");else{this._.isLoadingData=!0;f._.dataStore={id:1};var d=f.config,g=d.fullPage,h=d.docType,a=CKEDITOR.tools.buildStyleHtml(c()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');g||(a+=CKEDITOR.tools.buildStyleHtml(f.config.contentsCss));var n=d.baseHref?'\x3cbase href\x3d"'+
 d.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";g&&(b=b.replace(/<!DOCTYPE[^>]*>/i,function(a){f.docType=h=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){f.xmlDeclaration=a;return""}));b=f.dataProcessor.toHtml(b);g?(/<body[\s|>]/.test(b)||(b="\x3cbody\x3e"+b),/<html[\s|>]/.test(b)||(b="\x3chtml\x3e"+b+"\x3c/html\x3e"),/<head[\s|>]/.test(b)?/<title[\s|>]/.test(b)||(b=b.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):b=b.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"),
 n&&(b=b.replace(/<head[^>]*?>/,"$\x26"+n)),b=b.replace(/<\/head\s*>/,a+"$\x26"),b=h+b):b=d.docType+'\x3chtml dir\x3d"'+d.contentsLangDirection+'" lang\x3d"'+(d.contentsLanguage||f.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+this._.docTitle+"\x3c/title\x3e"+n+a+"\x3c/head\x3e\x3cbody"+(d.bodyId?' id\x3d"'+d.bodyId+'"':"")+(d.bodyClass?' class\x3d"'+d.bodyClass+'"':"")+"\x3e"+b+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(b=b.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&&
 (b=b.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e")));d='\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&&(d+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e');
-n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(d+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');b=b.replace(/(?=\s*<\/(:?head)>)/,d);this.clearCustomData();this.clearListeners();f.fire("contentDomUnload");var w=this.getDocument();try{w.write(b)}catch(u){setTimeout(function(){w.write(b)},0)}}},getData:function(b){if(b)return this.getHtml();b=this.editor;var c=b.config,e=c.fullPage,d=e&&b.docType,f=e&&b.xmlDeclaration,
+n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(d+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');b=b.replace(/(?=\s*<\/(:?head)>)/,d);this.clearCustomData();this.clearListeners();f.fire("contentDomUnload");var x=this.getDocument();try{x.write(b)}catch(u){setTimeout(function(){x.write(b)},0)}}},getData:function(b){if(b)return this.getHtml();b=this.editor;var c=b.config,e=c.fullPage,d=e&&b.docType,f=e&&b.xmlDeclaration,
 h=this.getDocument(),e=e?h.getDocumentElement().getOuterHtml():h.getBody().getHtml();CKEDITOR.env.gecko&&c.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,""));e=b.dataProcessor.toDataFormat(e);f&&(e=f+"\n"+e);d&&(e=d+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:h.baseProto.focus.call(this)},detach:function(){var b=this.editor,c=b.document,e;try{e=b.window.getFrame()}catch(d){}h.baseProto.detach.call(this);this.clearCustomData();c.getDocumentElement().clearCustomData();
 CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);e&&e.getParent()?(e.clearCustomData(),(b=e.removeCustomData("onResize"))&&b.removeListener(),e.remove()):CKEDITOR.warn("editor-destroy-iframe")}}})}(),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,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea",
 CKEDITOR.config.skin="moono-lisa",function(){var e=function(e,c){var h=CKEDITOR.getUrl("plugins/"+c);e=e.split(",");for(var b=0;b<e.length;b++)CKEDITOR.skin.icons[e[b]]={path:h,offset:-e[++b],bgsize:e[++b]}};CKEDITOR.env.hidpi?e("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",
diff --git a/web/core/assets/vendor/ckeditor/lang/de.js b/web/core/assets/vendor/ckeditor/lang/de.js
index c326d76c3a4ace46fc1890b4ae5746e62369f0b3..19420016f58e9cc742d944c020f7dfea559d1470 100644
--- a/web/core/assets/vendor/ckeditor/lang/de.js
+++ b/web/core/assets/vendor/ckeditor/lang/de.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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","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 dem 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 erhöhen","outdent":"Einzug verringern"},"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 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 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":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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":"Default"}};
\ 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","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 dem 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 erhöhen","outdent":"Einzug verringern"},"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 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 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":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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/web/core/assets/vendor/ckeditor/lang/pt.js b/web/core/assets/vendor/ckeditor/lang/pt.js
index 6775004389003fa1a8363a94c32775dc49416066..30eb3a7def2c38376d3738982661fc91d9101984 100644
--- a/web/core/assets/vendor/ckeditor/lang/pt.js
+++ b/web/core/assets/vendor/ckeditor/lang/pt.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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","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":"pixéis","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":"Colar área","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":"Align Center","alignTop":"Topo","alignMiddle":"Centro","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 pontos 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":"Default"}};
\ 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","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
diff --git a/web/core/assets/vendor/ckeditor/lang/sr-latn.js b/web/core/assets/vendor/ckeditor/lang/sr-latn.js
index 1dcf28b2448c0da20b4362c8d2bc434ebcd2f840..1f7c4bfb4e5f013b41f558b899782de8aa59aea1 100644
--- a/web/core/assets/vendor/ckeditor/lang/sr-latn.js
+++ b/web/core/assets/vendor/ckeditor/lang/sr-latn.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ponovi akciju","undo":"Poni�ti akciju"},"toolbar":{"toolbarCollapse":"Suzi alatnu traku","toolbarExpand":"Proširi alatnu traku","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":"Alatne trake"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Obriši ćelije","merge":"Spoj celije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"None","headersRow":"Prvi red","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":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Obriši redove"},"rows":"Redova","summary":"Sažetak","title":"Osobine tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"sourcedialog":{"toolbar":"Kôd","title":"Kôd"},"sourcearea":{"toolbar":"Kôd"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalepi kao čist tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Zalepi kao čist tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Nenabrojiva lista","numberedlist":"Nabrojiva lista"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Uvećaj levu marginu","outdent":"Smanji levu marginu"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info slike","lockRatio":"Zaključaj odnos","menu":"Osobine slika","pathName":"image","pathNameCaption":"caption","resetSize":"Resetuj veličinu","resizer":"Click and drag to resize","title":"Osobine slika","uploadTab":"Pošalji","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format","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":"Normal","tag_pre":"Formatirano"},"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":"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":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Prostor za lepljenje","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Bogati uređivač teksta","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Forma","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Izborno polje","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smer jezika","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Pun opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Resize","generalTab":"Opšte","advancedTab":"Napredni tagovi","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":"You have changed some options. Are you sure you want to close the dialog window?","options":"Opcije","target":"Meta","targetNew":"Novi prozor (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"Stylesheet klase","width":"Širina","height":"Visina","align":"Ravnanje","left":"Levo","right":"Desno","center":"Sredina","justify":"Obostrano ravnanje","alignLeft":"Levo ravnanje","alignRight":"Desno ravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","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['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","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
diff --git a/web/core/assets/vendor/ckeditor/lang/sr.js b/web/core/assets/vendor/ckeditor/lang/sr.js
index 9588bb1223659d430d2d5c885cf87e0580d5e4ba..824d12161294b4bedb6381260a8315e5b4f3a8ec 100644
--- a/web/core/assets/vendor/ckeditor/lang/sr.js
+++ b/web/core/assets/vendor/ckeditor/lang/sr.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sr']={"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":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Размак ћелија","cellSpace":"Ћелијски простор","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"None","headersRow":"Први ред","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Особине табеле","row":{"menu":"Row","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":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"sourcedialog":{"toolbar":"Kôд","title":"Kôд"},"sourcearea":{"toolbar":"Kôд"},"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":"Залепи из Worda","toolbar":"Залепи из Worda"},"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":"Недостаје УРЛ слике.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Adresa","tag_div":"Нормално (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"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":"Залепи зону","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":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","flash":"Флеш елемент","form":"Форма","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Изборно поље","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер језика","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"Stylesheet класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Затвори","preview":"Изглед странице","resize":"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":"Meтa","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","styles":"Стил","cssClasses":"Stylesheet класе","width":"Ширина","height":"Висина","align":"Равнање","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['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":"Први ред","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
diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
index 59ab904c60a3fe18cdb58ae6362d9df4b48520b6..b7016dae35e2e1399f7abba732c86da16b0e6826 100644
--- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
+++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
@@ -3,7 +3,7 @@
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
 CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de acessibilidade",contents:"Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de ferramentas do editor",legend:"Clique em ${toolbarFocus} para navegar na barra de ferramentas. Para navegar entre o grupo da barra de ferramentas anterior e seguinte use TAB e SHIFT+TAB. Para navegar entre o botão da barra de ferramentas seguinte e anterior use a SETA DIREITA ou SETA ESQUERDA. Carregue em ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."},
-{name:"Janela do editor",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:"Menu de contexto do editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com  SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu.  Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. Vá para o item do menu contentor com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},
+{name:"Janela do editor",legend:"Dentro de uma janela de diálogo, use TAB para navegar para o campo seguinte; use SHIFT + TAB para mover para o campo anterior, use ENTER para submeter a janela, use ESC para cancelar a janela. Para as janelas que tenham vários separadores, use ALT + F10 para navegar na lista de separadores. Na lista pode mover entre o separador seguinte ou anterior com SETA DIREITA e SETA ESQUERDA, respetivamente"},{name:"Menu de contexto do editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com  SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu.  Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. Vá para o item do menu contentor com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},
 {name:"Editor de caixa em lista",legend:"Dentro de uma lista, para navegar para o item seguinte da lista use TAB ou SETA PARA BAIXO. Para o item anterior da lista use SHIFT+TAB ou SETA PARA BAIXO. Carregue em ESPAÇO ou ENTER para selecionar a opção lista. Carregue em ESC para fechar a caixa da lista."},{name:"Editor da barra de caminho dos elementos",legend:"Clique em ${elementsPathFocus} para navegar na barra de caminho dos elementos. Para o botão do elemento seguinte use TAB ou SETA DIREITA. para o botão anterior use SHIFT+TAB ou SETA ESQUERDA. Carregue em ESPAÇO ou ENTER para selecionar o elemento no editor."}]},
 {name:"Comandos",items:[{name:"Comando de anular",legend:"Carregar ${undo}"},{name:"Comando de refazer",legend:"Clique ${redo}"},{name:"Comando de negrito",legend:"Pressione ${bold}"},{name:"Comando de itálico",legend:"Pressione ${italic}"},{name:"Comando de sublinhado",legend:"Pressione ${underline}"},{name:"Comando de hiperligação",legend:"Pressione ${link}"},{name:"Comando de ocultar barra de ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Aceder ao comando espaço de foco anterior",
 legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},
diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js
index bf8b9e5a339a4be4662ec5e3f16346b4b21a4226..142801f8fa7f8d84ad72b37d0b5c8f6cce4f63ce 100644
--- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js
+++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js
@@ -2,10 +2,11 @@
  Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",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","sr-latn",{title:"Uputstva za pomoć",contents:"Sadržaji za pomoć. Da bi ste zatvorili diјalog pritisnite ESC.",legend:[{name:"Opšte",items:[{name:"Alatke za uređivanje",legend:"Pritisnite ${toolbarFocus} da bi označili alatke. Do sledeće i prethodne grupe alatki možete doći sa tasterom  TAB i SHIFT+TAB. Do tastera sledeće i predthodne grupe alatki možete doći sa tasterima STRELICA LEVO i STRELICA DESNO. Pritisnite  SPACE ili ENTER da bi aktivirali taster alatki."},
+{name:"Uređivač dijaloga",legend:"U prozoru dijalog pritisnite TAB da bi došli do sledećeg polja dijaloga, pritisnite ENTER za prihvatanje dijaloga, pritisnite ESC za odbijanje dijaloga. Kada dijalog ima više kartica, do njih možete doći pritiskom na ALT + F10 ili  TAB. Zatim sa TAB ili STRELICA  DESNO dolazite do naredne kartice."},{name:"Uređivač lokalnog menija",legend:"Pritisnite  ${contextMenu} ili APPLICATION TASTER za otvaranje lokalnog menija. Zatim sa TAB ili STRELICA DOLE možete preći na sledeću tačku menija.  Prethodnu opciju možete postići sa SHIFT+TAB ili STRELICA GORE. Pritisnite SPACE ili ENTER za odabir tačke menija. Pritisnite SPACE ili ENTER  da bi ste otvorili podmeni trenutne stavke menija. Za povratak u glavni meni pritisnite ESC ili STRELICA DESNO. Zatvorite lokalni meni pomoću tastera ESC."},
+{name:"Uređjivač liste",legend:"Do sledećеg elementa liste možete doći sa TAB ili STERLICA DOLE. Za odabir prethodnog elementa  pritisnite SHIFT+TAB ili STREKICA DOLE. Za odabir elementa pritisnite SPACE ili ENTER. Sa pritiskom ESC zatvarate listu. "},{name:"Uredjivač trake puta elemenata",legend:"Pritisnite $ {elementsPathFocus} da bi ste označili traku puta elenementa. Do sledećеg elementa  možete doći sa TAB ili STRELICA DESNO. Do prethodnоg dolazite sa SHIFT+TAB ili STRELICA DESNO. Sa SPACE ili ENTER možete odbrati element u uredjivaču."}]},
+{name:"Komanda",items:[{name:"Otkaži komandu",legend:"Pritisni ${undo}"},{name:"Prepoznavanje komande",legend:"Pritisni ${redo}"},{name:"Podebljana komanda",legend:"Pritisni ${bold}"},{name:"Kurziv komanda",legend:"Pritisni ${italic}"},{name:"Precrtana komanda",legend:"Pritisni ${underline}"},{name:"Link komanda",legend:"Pritisni ${link}"},{name:"Zatvori traku uredjivača komanda ",legend:"Pritisni ${toolbarCollapse}"},{name:"Pristup prethodnom fokus mestu komanda ",legend:"Pritisni ${accessNextSpace} da bi pristupio najbližem nedostupnom fokus mestu pre znaka hiányjel, na primer: dva susedna HR elementa.Ponovi kombinaciju tastera da pronadješ fokus mesto koje se nalazi dalje."},
+{name:"Pristup sledećem fokus mestu komanda ",legend:"Pritisni ${accessNextSpace} da bi pristupio najbližem nedostupnom fokus mestu posle znaka hiányjel, na primer: dva susedna HR elementa.Ponovi kombinaciju tastera da pronadješ fokus mesto koje se nalazi dalje."},{name:"Pomoć pristupačnosti",legend:"Pritisni ${a11yHelp}"},{name:"Nalepi kao običan tekst",legend:"Pritisnite: ${pastetext}",legendEdge:"Pritisnite ${pastetext}-t, zatim ${paste}-t"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",
+pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Strelica levo",upArrow:"strelica gore",rightArrow:"strelica desno",downArrow:"strelica dole",insert:"Insert",leftWindowKey:"levi Windows-taster",rightWindowKey:"desni Windows-taster",selectKey:"Odabir tastera",numpad0:"Tasteri sa brojevima 0",numpad1:"Tasteri sa brojevima 1",numpad2:"Tasteri sa brojevima 2",numpad3:"Tasteri sa brojevima 3",numpad4:"Tasteri sa brojevima 4",numpad5:"Tasteri sa brojevima 5",numpad6:"Tasteri sa brojevima 6",numpad7:"Tasteri sa brojevima 7",
+numpad8:"Tasteri sa brojevima 8",numpad9:"Tasteri sa brojevima 9",multiply:"Množenje",add:"Sabiranje",subtract:"Oduzimanje",decimalPoint:"Decimalna tačka",divide:"Deljenjje",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:"Tačka zarez",equalSign:"Znak jednakosti",comma:"Zarez",dash:"Crtica",period:"Tačka",forwardSlash:"Kosa crta",graveAccent:"Obrnuti znak akcenta",openBracket:"Otvorena čoškasta zagrada",
+backSlash:"Obrnuta kosa crta",closeBracket:"Zatvorena ćoškasta zagrada",singleQuote:"Simpli znak navoda"});
\ No newline at end of file
diff --git a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js
index d5d607dab8706b6611ca732b716888d34b19e6dd..b95dbe05e370cf6a75571ab461f9dde10af2978b 100644
--- a/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js
+++ b/web/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js
@@ -2,10 +2,11 @@
  Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","sr",{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","sr",{title:"Упутства за помоћ",contents:"Садржаји за помоћ. Да би сте затворили дијалог притисните ЕСЦ",legend:[{name:"Опште",items:[{name:"Алатке за преуређиванје",legend:"Притисните ${toolbarFocus} да би означили алатке. До следеће и претходне групе алатки можете дићи тастером  TAB и SHIFT+TAB. До тастера следеће и претходне групе алатки можете доћи са тастерима СТРЕЛИЦА ЛЕВО и СТРЕЛИЦА ДЕСНО. Притисните СПАЦЕ и ЕНТЕР да би активирали тастер алатки."},{name:"Уређивач дијалога",
+legend:"У прозору дијалог притисните ТАБ да би дошли до следећег поља дијалога, притисните ЕНТЕР за прихватање дијалога, притисните ЕСЦ за одбијање дијалога. Када дијалог има више картица, до њих можете доћи притиском на АЛТ+Ф10 или ТАБ. Затим са ТАБ или СТРЕЛИЦА ДЕСНО долазите до наредне картице."},{name:"Уређивач локалног менија.",legend:"Притисните ${contextMenu} или APPLICATION ТАСТЕР за отварање локалног менија. Затим са ТАБ или СТРЕЛИЦА ДОЛЕ можете прећи на следећу зачку менија. Претходну опцију можете постићи са ШХИФТ+ТАБ или СТРЕЛИЦА ГОРЕ. Притисните СПАЦЕ или ЕНТЕР за одабир тачке менија. Притисните СПАЦЕ или ЕНТЕР да би се отворио подмени тренутне ставке менија. За повратак у главни мени притисмите ЕСЦ или СТРЕЛИЦА ДЕСНО. Затворите локални мени помоћу тастера ЕСЦ."},
+{name:"Уређивач листе",legend:"До следећег елемента листе можете дочи са ТАБ или СТРЕЛИЦА ДОЛЕ. За одабир петходног елемента притисните СХИФТ+TAБ или  СТРЕЛИЦА ДОЛЕ. За одабир елемента притисните СПАЦЕ или ЕНТЕР. Са притиско ЕСЦ затварате листу. "},{name:"Уређивач траке пута елемената",legend:"Притисни ${elementsPathFocus} да би означили траку пута елемената. До следећег елемента можете доћи са TAБ или СТРЕЛИЦА ДЕСНО. До претходног долазите са СХИФТ+TAБ или СТРЕЛИЦА ДЕСНО. Са  СПАЦЕ или ЕНТЕР можете одабрати елемент у уређивачу."}]},
+{name:"Команда",items:[{name:"Откажи команду",legend:"Притисни ${undo}"},{name:"Понови команду",legend:"Притисни ${redo}"},{name:"Подебљана команда",legend:"Притисни ${bold}"},{name:"Курзив команда",legend:"Притисни ${italic}"},{name:"Прецтрана команда",legend:"Притисни ${underline}"},{name:"Линк команда",legend:"Притисни ${link}"},{name:"Затвори траку уређивача команда",legend:"Притисни ${toolbarCollapse}"},{name:"Приступ претходном фокус месту команда",legend:"Притисни ${accessNextSpace} да би приступио најближем недоступном фокус месту пре знака  hiányjel, на пример: дав сусаедна ХР елемента. Понови комбинацију тастера да пронађеш фокус место које се налази даље."},
+{name:"Приступ следећем фокус  месту команда ",legend:"Притисни ${accessNextSpace} да би приступио најближем недоступном фокус месту после знака hiányjel, на пример: дав сусаедна ХР елемента. Понови комбинацију тастера да пронађеш фокус место које се налази даље."},{name:"Помоћ приступачнсти",legend:"Притисни ${a11yHelp}"},{name:" Налепи као обичан текст",legend:"Притисните: ${pastetext}",legendEdge:"Притисните ${pastetext}, затим ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",
+pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Стрелица лево",upArrow:"Стрелица горе",rightArrow:"Стрелица десно",downArrow:"Стрелица доле",insert:"Insert",leftWindowKey:"леви Windows-тастер",rightWindowKey:"десни Windows-тастер",selectKey:"Одабир тастера",numpad0:"Тастери са бројевима 0",numpad1:"Тастери са бројевима 1",numpad2:"Тастери са бројевима 2",numpad3:"Тастери са бројевима 3",numpad4:"Тастери са бројевима 4",numpad5:"Тастери са бројевима 5",numpad6:"Тастери са бројевима 6",numpad7:"Тастери са бројевима 7",
+numpad8:"Тастери са бројевима 8",numpad9:" Тастери са бројевима 9",multiply:"Множење",add:"Сабирање",subtract:"Одузимање",decimalPoint:"Децимална тачка",divide:"Дељење",f1:"Ф1",f2:"Ф2",f3:"Ф3",f4:"Ф4",f5:"Ф5",f6:"Ф6",f7:"Ф7",f8:"Ф8",f9:"Ф9",f10:"Ф10",f11:"Ф11",f12:"Ф12",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/web/core/assets/vendor/ckeditor/plugins/icons.png b/web/core/assets/vendor/ckeditor/plugins/icons.png
index cf5548c7b0fc1518a7f18edebdfd836a0a4ffe32..331a155f7e77d608bcecc95060556417af6da4b2 100644
--- a/web/core/assets/vendor/ckeditor/plugins/icons.png
+++ b/web/core/assets/vendor/ckeditor/plugins/icons.png
@@ -1,12 +1,30 @@
 �PNG
 
-���
IHDR������������1��QIDATx��]��U^
-Q�*�5���mPK��VYw�;�ٙ�I7ݭ�55�ڤ�H�H;ؘ��"5�hֈ����J()M��PL�>(h(�!��$3�;��ܽs�������Knf��=���s�{���}}�B.�۽v��:OgGGG�zgf�FFFt�/��t���d&$��� MV��{%!��ĉ�������*���J5źFhU�$��h�y�T��3��3jK]�2�$Ԧt_��� ������4x�w����+��B�S�c5�"�������@��E�	{(
-{}�П
��H8�%�w��^.i��%���D0w	 s^D�$���K�b�R�J<&�����RZ�Qu@��;^�b���B�Q���f��%_
���q�wW��H,�}��@����.�Y"��|�e�:�`��`�;J�2�CCC�F
��I�m���r6�4J%M>�����SƝI�gL���������C��rK�q@$hn0H���:آ�|L�S�a^P�����}K��f/���'yc^���(�ܐ�Q�T~:���^���~��\.��2�흱T*��U7>��*�$M��Q�V/��7zk�*;��]�@��X�'�x�`���
���l�dk��ჺι8lذ��:�̝��c�9q����	�Hua@���.R��j��d;�m��Z�1N���ھ�I��I������N���������WՍ�իY���X�&s�X�M"�Fb��{�!��R���`������G|�e��P�L�J���"Hv��w���/�vy�c�-Ԅ�Y_b
-�yS��O'?*e�i������#y�0�'UT�������$���t�X,�p�F����t�5��1O_��o���a��W�[o�0P
-����49����ѕ�'�~���\�:G<z�dSenݺu��e���9�����"]橩�x��6/�.���j')�z�d�|���&:���1C|7U�$l��Ʃ��`�>���'�t��{�bB>�$f��<�8�-�R{�!M���ׅ�Z�*�E�+����x��^���d�)�ט��7��ݟ����.�f�:�/S���#��
R��r�@���x�3e�,{�;($\�T^gy6i�Wk���+Tk֬Y=n�fS���G��\q�')�)���R+���c/��b�$g���D:"U�\���"��Zm�e�&�C�N*L��&�\�)juJ��u.�*�G��/�����`��p=�x��^�/���"�9�R�4*���΄��s��H��a��v�R�XB&ԝ�%��LJS�d
-�m����LJ�Fk@n:�i<-���x��^�/�@昞���$h0=�,1��ڛ��Е���-��484c�C�B����� ^C��F	��P(�I�=�����*�������gu�G���V���~[3N~�T��Fw$����N��0�#Z�g�g���
�ŗt�LT��o�u@����`xiж:�~�[��pB����M_j�8k&E�6{�&X���Qu�A�uУ�����Z6Vn�Д�|��<_0j����ZnH��1��Y�2)�וu�5����:H� �:��~��@��$�����BE�� cT��7&?�Y~qVj����J����I�ؙ���/r�n-��j��|!��:o��Τ��(�ʝw��/���bnqEpC�sx�:��`z>���4$q�N~V}F�~��j��W�7c��d��2g�(
��lꚮ���̋�Y��|��z����U��Ii�+{j�"O.����,f�Z��*��3�w�#q}�N[4#���
6�����2������KR!#�ּ��A�Q��?��
-�N%�S��ewF�.v:���JL�+����n,u�Cs?���;-���+����:P(v��J��V֝��w�Y���.��EH��,�1�#eڕ��	��2�oߺ<l����v�]�')�����(lǍl+�W��DV>K�Xi�������ni	�\R?��^���6��k���zί�e���i�6W4������=8_Hl�nw�������}�����]�
������� ;&���W�N��$#���r+���d4�i���U*���b��U�����	@��VI��b*�@e�8z\U~��/���c��O�f�����^�/�����������ե�I��놆8��\������$�9>�z�\���R�:�ry����pA@���G�BaPh�~_3�����,%�A]b�fV� C
\���`lll�m�-z�Q���������b���٘������~mEh
-F@��������?|�_K4P���m�r�%�V6θ��\���WXyA�t\^��g1���|>����\����>���Ӓ����S=,��?"{"*�aot�'�Xy����#ǝ�F�ɯ��,$��N
H�f?|��?Ͷ�'^�]L}����[��Z.`m��>�
-����2͝�7n���G��ca<8;�N\ �!H�����#!�p�g�$�+w�O8����+2gX5`����i��yބ���q��	��B9!/s8�0_�|������0_�|�Z�R������}�A)�������k�(?!J�1�+}N<�J>��F�ϯtĠ٤ЪR�,T�y�������C����<���Ź�;/oR�ғ
n2i�g�I{^�V[ ��f�I�y�ƍ�K�mѕoL�0	����*��_�2?�~�Z��n�ur�Y�߾��h�W��_I���j�+�o.��W0���V�K��^f�u��-���`��5��>cA��J�t%��F�[e4X��R�y��9�˝ьwQ����W���[\/�J���$b�R6�����V.�
-a_ 2U"�ӱǹ����HZ�zu�֑��m05��ܠN���I����L�0NP�,s�ƌ��{�u歷��us�/��|�J,�'x���x�Ǚ�7U��z�6B�|}t3�||rG����^�/���8�H�#�|�ҥK�)�orr��o߾�����_���144�M6,/s���}������W.���6�l�����$�d��AFk��+<o���D�4�Fk��;00�A#���,I�Zb�Ł���/�6�!��`����IEND�B`�
\ No newline at end of file
+���
IHDR������������1��cIDATx^��U�$������
+%> 
+������vw�i���55[l1����"1!*���`�`���J
+A$�0(>@0�!�@�(����a�����;��7��G{~�a��=s���~��[����E�׻b|||��ݫW�ކ>Q8���[r?�PO;ٙ�LLL\D��L�ר$[1��8RМ�S�kK��Z@����&�S�iRڲ���8����2�G!�U`!���[�&��I(覲��h�7Pw�7�%hK2;;{��@/��Ľhˆ*y>��Y�����+�̇���	9�^'@ٵk�!S��~%΢;IU�\	9�%���H@�W�>��t>�ο#	��0��$�djj�X����$y@'��g0�^�@�W%�����LI@[�k��F�xJX�R��'n$z/Ę�V.R�ҽ��i`ӦMG�,,'�g�ׄ/�����}QIND[��+W+��-Z�.��і���v5ڲ��Jށ�$�lw�~
+����S��e�����R�H�*$����8N&�l0J�I=#�j����qJkA�����Ǖ�c�|kVU�uh�B*(����mi�A�(T�$^���������^+gff^BWfNOO�u���(����H�{����{1���]^+
+m{oŘ����+�)��./���8ΰ@�u7O[��G�N�����5�V��h_���>�E��\.&�C�(:Ir���
+��7R,]�ik;�t���Rp��D�<��s�=�0��wh_&H���}��k��}���q�׃���q=h�XH��� 
�����z�z��I�^r�
+��ic�E�.�R�6�_k_�q�2�iv^o�ij?������Z�k�<��7j}�b&��ߨ�	�oKՈ]�Z`wj}�8��@�%1ɕZ@������֍�?"\�15��ƎRUԄ��o���Oη��Pe�G��'V:J��8΁
+M�9zS�G��f͚SiZoF������6�Ї���v�hUe��Z�Ǖ}�kS{/�o>M��QE�	��qrrr�rx�;�_��ի�F=}]hE>��z��|��>��l۶��^f�]A��:�m\�e�G��ٴi�ae�/�6�nݺז��..����+�4[�&P�$O���棲�Y��:���w�!C/ZhQ���6;���G����%`�$נ�FS&eO;��8�"�oY	t[(��*���p���6��u�@ʞtHٓ){�!eO:��A�	�8Nw�.�}���S$X�+�n�/�!eO:��I��=鐲�5&�8Cݦ�NMM��z�V�ShUڍ���#�轞�sg�s	�l��Sf9�F����9R�'���=m)�C��ު�]���}���X�A����0��U��@�F�w�7BAO���D�@{��(��2�G�'ݏK��:����({������l��������%�a~~�`>'�O꒩}#Ƀ���I�����%|)b��ϕ	�Kx�Y����xˁt�`R���q�����X&�}�\�$������3l��*-���^-�Gc>g�zti���v>oJ@�e�Q
S��5�L_S�L`��5&���H`G���g�����H`G��T@r�n+}�Z�{�@���>p����͘���
��kL*0����
+ic�Z��������������l߾}��`|w���`|w���`���E�,^���_��`|w���`|w���`�����J-�ʗ����X.��q��03�Y^3�\V����L�����%.>�fZ'�w��^��܎&����q��-c��+ݐ���(�%X%y�L@��ѹIj	(�萒Z�A�J�8N����Y��zRǥ�ٴ
+Е`������"g��?˞$�a��A��1�c6����v�����u���Z/��y�
+�X�W���V�����{�썕TA�X��u�]��
+�+i]�9���Gt�����kDVBM��]	V00V�q�M��d�:Y�l���
+�M��${�g?��Dj�@f��X�cM����U�~��ҙXk"�c������
+�/J+gfx��qZ�S5%�=Ag���`|���R���t{H	�wO�8�"277��uZ��٩I�qذa��XnJ7�������X���A��2,5%�`�^�9����z�aP���^�cЩI0vq�^,���l	�,.�[J0�{�q�"8[�Fj��5�K�`l:5	�..؛%S�-���`)���	���0}bbbϯ��D�	CΏ�����ǫ)(�����Y�����n�&��{ս����a�X���س��uh�T
�Y6f�X�dT
���8�7
-��_:?C>&ۙ:>ܙ�Ɔ
+L}6�/a���nc��*dV`��|	��d�3Lf�<��L��10�K�]A�$bc�=��W!�X��
+b��8ξ&wڊ�ֵ�L�[c&hC�VUC@� �O�K01�K�
+��6t��qp�ϙ��2e�|i*h�>�Xk��D+{�
+�Yh��8���r3���*#���j�-'At2E��199y�iT>"⫍?��*&�p6�b�dltD6t}+�,D����Vn=�g���e�kY���!�e|ޔ��ǜ�2��k*#��5	X�l]�$�ڱ])А�
+4��"u�]sD��]K@��<���J@�G��
+�7|jm���w,;��VO`��5&���H`G��s��"��
+t�+P�Q,q4�-�W��9�)K�/���M	�y���@;�+����TѶ(ڶE�v�hj��y�9�X�}���	�q�Ƥ`	쨐6����?P�m���@Ѷ-�</��y�q�����wB�Ÿ
+�TN�I����LLJդ��t}�w��ξ�Ld&4����^�z�Iha�X%�ړp�����H�'�t��\-[��=	��C�˺A����p�j߼|��C�]�z�p�$:>X�T[@zl�-�ѦE$�ﲪ˂=΁��%��������;I��y��q����G������{>u,�����I,M$�%�f���J���!u,���J�f�~���"r�F�Q~�	�Xn�,��I$Гijjj���ek	>�r��G��MG���ne�IW����Z�\�	��p���	r�&�w�%�G`P-7bK8�
�<Pk�ne�/Xb�M&���Эz5��Zп����UM�\c�T0M�e���h�������?�#UU�c���:�M�|�˫�������>����� :�����Ы�/���m<�e�76&�#%��$+��p��ij�_�6p�zg��x���p��(��֣_E��D�ؐ+�8CުZx�E������3/���є�I&I%`8I�rr0Q?4�^�/��*����i���m�_
1��_m�6/���B��A�|Y��#X/{��U����r)~����%ܪ������'��~5�@{�Dy��C�UD
@ԏ
����3���B3Q?4��y�����3$୪%�[�t�tn|��4%`�IR	N���L�
���y��"���3�LOO�A���t�+
+�a�&���:�����%�S�(�Ü�\�ߣm��[��Pe������kF2\�3]����:������H%��f��2�_Z;�|GQ��}�?��ΏUp�i�(��L������
+z�ίK6o�|��j}���֔��If�mtt��L�m+����(��̎�K-��D��T��[A����?���P������9��H�.�9�@�
+�PU��(k׮=�J�8KޞmeI`�K�.j��E
���!W���"�̹��!W5�ꢆ\���`R�q���2���x�Q�E�-���z՟���{��HΣ����9�c�ѴD�{(����K�G�@~Z9���@D~#N�{�$;��F�e���NP�t#��R�9�3�4M�,da�EmY�u���݄���xOЋ)/��_�k>X���VP�c$�57�xO�`����2�^��M��{��U���z�3���elZ�;�H����sւ҄^���/b^�����u�ʩ ���H�%��H�s�p���/t���7.�رc �ؑ�����+W��AZ8����+;�nݺ�.2233�^�"��P	�o߾�F8���r�
+�XYy���pLK������WPĮX�b�
+�XI�=�$H0U�a�ҥsg���/�6�u�Do����IEND�B`�
\ No newline at end of file
diff --git a/web/core/assets/vendor/ckeditor/plugins/icons_hidpi.png b/web/core/assets/vendor/ckeditor/plugins/icons_hidpi.png
index 9547434aee1bdd3b25b319413d8ac4a17c531e35..1979dd167ea54095b328ad3ca96850e7546b56fe 100644
--- a/web/core/assets/vendor/ckeditor/plugins/icons_hidpi.png
+++ b/web/core/assets/vendor/ckeditor/plugins/icons_hidpi.png
@@ -1,39 +1,53 @@
 �PNG
 
-���
IHDR��� ��	�����N:��*IDATx��]�eEy^A#"|P���%FEE�G2��w治0d�uɺ(�5���u�ĀE�*�@H�����e@y�F��@T�Y�l���[������>ݧ��3��}U]�ι���Nw�3��_�ϚT@���2�`����*�}��=������&o����Rn�n���5Rٌ̹B
�Bb�����7o�T�����1s�=ϼ��R����8#q�<���c�X��uxxx����ҵ%wȿp�EO�]��ʕ+_h������*�Su�$�����#HW���-z����3L���7p�6J�>)�ѹs��@���ƨ�[�+��1�bŊ��]#	б7�f����ibK�.gW<Q��/jkiP7e�Z���Ӎ�9s��*��5n���Ϋ1��4��ؒ%K�u‘����-t���x2�QC��F6###��Ɖ�C�74����W̄��ߎ�N��A�5n�^h(>��?�7j���[%�*�#@�b���ٳg�*�?���G��/f������`�����'|�x���tl��~5��J����2�Z�r��yw�"�`aXw�&Z���a��<[�F5���,	e������y��޼�z��'A���5���/^����s��N���]�ҹ7�s
-�?�F�����8j�42���
��[�U���Z�FH�3�s���%�'H�?��L@q\2d# �w��c��2z����9��9/��sH�N.��<���2zľ[��M��:����)�=A`�R�KM�����wE,�p����ּ�ݰ�2��0}u;���B��ܸ�w��~�IWm�+����$t)D��I����Uf"���+o^���<X��(��N�J���M�L�"��o���������������'�|�e5��t�DZ�v`?Z�������#���uυ;����d��t�n������F`
-;�1s��9�{�ۈ%��j0��1���'�!ʊ��n��ϒO���Sin�����>��ǿ���D`[�?;���nc�/^�Z鮝={�p���G�K��.u�����u��x3��A�%�E�4<_�N�6R*�S����������8�~��i�	��Q����t��L���+����x.�V�1������_V�y9��1� K�����n�G��/�g�jz�2�{��,~C�K
�̀z}Y�"mi?]����vZ��u���W<)��X����x��
ȥ�E�LDי@�چ���q���-�s�H*>�6XEK&����ꗆ���ض�4�+&�d|E-?��Or�


����R����P�K����zO �6rǐ��[�q-�H<�8Tn�*_I�r�%�,D�����?��K���+�+Ж����H�>LGe!x?]��]�T矒z@����|%�;Abl�!�I"@�|��oX�hqEɛ���������F!�ׇ�c��?N��/�������������t���[��_�p�C�9900�d�S*�U�y�?�]�q�ԱC9og-5r����`ƟRrϘ��d�d�^�҉������*��)D�L���cJ)��rG���a���k�-���.��Kߨ��@c��ko��s��U�q;�K�o��ٗ�m|L3D=�mz��A�\��q��]윟�����&v�ӚnP����S�9Q�whD�^$��ez��$��=d�sp�TAY�x�K�K�����{n2�\ #�]��! 
!�lo�@-��.f�H���	���<�hm���������Y�._��g��4#Cc�.����C��`{�C �!���=	�b�b	�z�6��v��+g�q�bb\q�T@�e�b|��ڞ!�������z�:���S���?�o3޲|�������wxR�*&��O�����M1�Ʒ���ʕׯ�����7L��WL�Ѓ.�w�	x�cܖ��e|�t���V�m|L['N�M��
��2~�c��]윟8�ߔ��f���Y<�2S?5z���}���9m;�B�p2z���(&���������@4�T?7n|��|��F&��v�K*��9.9�nI���1�n2x�<�ȿ�2�n<��}~�<�����rY��|2v�<?�@��Z��IC��ZP�� ��m2wQ��qzܦ샜F F���ؑ� �%`Vb��R-)�Rw�RY����I(<���_�!<f	[G6���R�������X�lȸ���}����y��Z��<�������ʮ=퇆�^i�9�A]���(@�q������	�>�g�����;fu���J\�Z�[oA-_R�����4޿$;"cT~K��+��|xb�K���!���'A��������������]�`�Ӆ�����7̣_џ���
-��l5�����ի�#��p�ehh訲6/^��#��M��
-g倝��/��g����V�.�8p��']Ʃ��\���
-��ǔʮ|3R|�)&��a/s٫m�����L�k�@@枉�5�O�4�s�{���1w�ܿ�6J��}���QzI����H�YƼ��Km<�	���s��'�B3B�LRu_����@��n����y"���JT٤�����d�����w����Mf,���*�Wα�q�}�৹c��>2�8չ�_�dɫ����V��P3c��暿�j׳�lL��΂�>V��5���T<޲6ZQ�D�_me[NL�
-�r���/�]ydd���6�������
-�g�
�q��~ZV�}l];:��d'r����K�~��8���ul��Y�&.1���0�D���|���BcC �Yv*��T?��TL{e�[�+~v4�+��NG�����lb)S[kl{�n7�D��X7+����6gd!�-5��I�A���`$�n����)�]��.T/���U�%ïJ���L�$��u7��HM���.hZH�7������g�?K�r-�w��ϒ�b|�d���������N@/�^���z����@/�^Pw��@/�^���������ؽ��vyfJF[0YZ�T��͠���<]�9k����V�&�=SG�Z�d�	�CSB`T��������^OD 㫬"“ڜp�	/r�1q�<	�}%R�$M"��A��Ij
-1?ˑgL9w���1��%=<z�(������N"@����q�{��N�3�I!tA�'"�Fw��-����>�5Մ���j���	��L#�t�җ���$e�����?$��E�zes����Y��q���}n-Ƈ���[h[Q�ϩ'����l=M�>EW��LH�9�z�|�|T**d��lb�B�f`<u�op�K�uO/}ӱ���f��`�L�&�~�m���o�!c�k6�w%ȡ���ӱ����M���C����NDO-㇅�b���k����%=w��.��[��c�9����1{�҈��6���b	��"`R��@�t^�]a�gj���秺>��O+#p?�|���yj���)4�� �#�+V�M�����<��!=�m�M���<.�ēt���o	�`;���,�����������^���z�����^01�@/�^���z���������f.�W����u����k� 0)Q�L���5x7o����jᒽG�;���j�qW�`O����O����e�^2�u�uF��_�X���]_������7L�lG^�zb��v�$0�{ �i�k�Nf�Q�-�J�$'�y�����y�J33���י�'���'�e�	)Q|^,W�܋��g]Pz���IqJ	��@홙bRC�<�!H" =�Ux��@JB��(KZ�#)N�������-*m	��=η��ԃeW�H^"���̢�#/QRVW��ؒ��(-)RL���?r������P��@/�
-x��QL�@/�^���z���lO@/p�j�^������P/N:��:��'�`����E�4[&b�J��������R_��i����7��C�r��Y0��70�����������!�-�e���K�s����*���+��$�O�}`�޳n��V2��T��_�J�� ]�|fم�a�K@n�#�!�@mC����u�s�̹�7�sL�(U���^��4�i'5n@�Jz]l'j�A.T��N;9�S���v��Av|���+�/��O�Ƀ?�>�\K�E��Q�s\�>��k������s�7d�?�o�"@��v5f����U��<�����ל�cvhT�H�z��C(mQ���B�B`\��ZU3���!�q��"A�����m��*W�O!�����R�����HB!���C��������l0�ԁ��ͭH�
:��QO�9�j�;289$�C��T�EH���5�Pp��ݎ�E7���$P�	���:Ǽq���D���X�z�s���1��|s��^W֖W1��)%��X�Q)��>�
A
-�����zAx���]�9��MɈ�:��&H�t%1����N���#�$\=�%N�u�Z\�Z �y�����������8�U��b��M�[688x@[�ot:��k1@��n�+�߷wͅ�?�/�	��d�.0�@�e�K��/�Z�O�2��^�����@���&9|�qj#@ρ	v���R�Lݼ�6��ڇ������~�,��J D/�s�d��"� Fs�B P'�D���6�����T�g�M�z��7	W�Z���c�LB�mhz����I]��j
-�ȑ����M���ʖ-[�����Nh�+�<w���裏.����*n�s@K"�|�5����oe��M����/��[�8�����V�:��������,_��� ����kȉ�í���!���s2e�/(

�2⼒���^`�$���B��+���9Wj�e@|�_�����������o;��}7}�>��	��'����Z��l�Ҁ�����]�B-�����m	p���/�e�J�1c_M ��Y�RB���Ј���n���1q�ĸ�����I�CCC�#����
-i�V!�n�l!1�$	�J-=��v�D���o�n_�sV��|B���=��u7�s'������������=u��\J��b7������9In�:��'��b
-r� ߐ���;�&j' �&�E�|��`1��}�5���QC�y��"��RJ��v�)��CJ4k4W	"Pg�$/Ee�B��|�r_c�Yr�Fʾ���-.�h��|�s��������P	�zA2�T� +�V������6$)zAVU�Zq�Ch������������U���_��F���ZGk:�E]zAU��
���0�+
AJ|Ae����_�D�q�z���������� ��#�!PK>�P@W��Ѻn�Z|AL�_`���i�����%��@�n|��z���������f6\o�����;��k���T���I���y��yQ�[TΣ�_$#��S�B��B�g���-��i�ᣫ~5����d`��x�譅���e�l�`e{�}l�s�.������~cT��s'��!�իR�.�ݚN����c��:���Բ�R=ߕ	HO�v<�@����e�h9w��	ٵ�sB�O"����W�B��E yhbp�s��:ԧ��u����@HCe{�֟�A���M�(��.`�iCL�,C3��[�#���������������0��c��D�lS]6����\nyW����jue��Zυlj����'�C�Z��3Ʋp�%>BZ��ٮ!0�2�{���y��o\9�=����
_&&W�!t�obԦc�����bb�f��Z᠞H�u�G/��*���0�o^�B��y�ѱM�����]L�f__��d4�����������F�����	�GT����c��F3p	�����wON����3�Fgx��{��Qf`��t_�F�$������/�	�۰�~ȥ��N�a�����k������k]+����C��`��A��?��0	2�P+�~�����������4��q��o�V�R9�
-�E��݇@���gP�@�8�@�ٙ@�U�/31q�W;2�T������w��Z϶N ��m��.�$&΀:�e�P�1w���}@�]^'�V3�Ε:o��rG����������@�����K�<z��Ҹ������q���E�.@hp�����o9�!�|�e��ϳ�@�C����¥���m��U/�΋�ڻ�݅�'4��W�s����AC��́Z�
-,�i�fo�@k~�ٳgo��}��������������=00P�k�	�1xJE��\�|��kC/���^[�c����Col��۞+O��#�bŊ��0u|m��ޭ���P��ܲ�4Z�q	�Z>�&s�v9�/ר{�@s6�c4�Vy&ߪ��N�5;�j*|��U�U�|��>�����t�v�@q�
�G6�������0����\F�aYo)�^;w��I�����[�'���>�>�<S7�c��������M����L�
-���LBj�␭��9�y�U�j�}���n.��!�v5��Tqc�^�%qY�78�.<�W��
�9�ه`�� Z��J�
Eۺ�Zs��F�k��*�c{�V_[�?�ׅ.�?]A�s�4ʓ,��j�6>(�AE}%Ӯ��D���Rj�D�u��)�I�X�6������m��w�Q����1�]�0{7[���2.�h`S��M�����������R~)o�2����v��������L+��ݼAz��~k^���=���t�|��+7��z�Y�������UW
�<����x��ҵ���=�����~�~��+eK�
-��2���ڭ��Fݻ����iO�nw������9p��w�'��E;.��x� x�s����O;!
r�g�A�:`�9�l��I
�eُ=����e�SϏj������ۼo���o�p׻yo��E��	�E�e����.n�Ndi�&�{M�^pW�d�o��z�^[�_��>���cz��o)�
&_���Ŗ���E/�7 u������X�O��\Z����tzH������������v�u�6��R�4�����b�����R��/^�.|Q7�^�J^��\�u%��zA�����QL[�=SF�h�^ �i��y`��Y^Z���-�J�nP�[����1��u��5���@�N�#�D ����BR�t�O�
-�}-�ә�
-ҕϏ��nې�|�2����vwxխ��>S\�J��e]��Ң���Z�SB`���%��FU]�5d�ǥ�ן[W����T�@�����ȥ'Ė��lGi�EL��������P�/@|�R<��/@|�_�{��"S�g%�����_PF0w�����W׃�D��;{|Alٗ���yk_�������� +�^ ��7�h	�5�z24�@
-.�`ψ/0>~��Ct�˦H}��t:�To��/�/p�ҥ���t����X-��S�U��~��=n��\��
v��C7������ԭ+D�d'�Oj=�@s�������)?َ*�
�t�
-�������P
-�������6d�������U��{wk���n+�e˖���F
l���r��\G���T:����Ͽ�^o7u����ߜuX���RG�|��ya�<i�����l����p3^u����n��%|c댤�'�����*�9�2_����Z#h��.���Φm5[�?�n����6�6�&�'���'y��~xxx�Fh~>���w�|�


�e���q׃��3}�1��
-���h^N���okH>%��ƺܬ����i�Z���4.Xn����S����5
�J�pBJH[D�3A|;w;v��V�L��*�>�����h(�-H���?-v|�؆�����	�jnD�Fu2{��_-=����|�E����?�����������T���<����䈶�j��e��`���G��P����hat3;�98. �;�W��KW��$`w�j�9���򸳁@حG������ݘc:�@*!g}�\.�O��;�|�Yc.���:>�G������>(Ͷ��4"P��@ِ��=ɐv�ӂ@#C0-hn6�Q�E@�[�4�fH;.�{ KB�=���@l�|k���
-�����8.v�NЩ���9�jX�4�.��k���ح��"�o�ff
-�k����%v���k4伐}JsR������@���s�?���{'�X?��?�M���Rb� �?����
M������;T�u\
-L#�g�!��;�-�؀�r����u	��{vAJׄJ;����W�?�2�p	N�sn7|�����!�`H�����I@�{�8
K��_qɏf!��w�m��W^�U����S۩����nx~W��������St�Mک����]0Iz�+�(�vh������������088x��GK��%A����Z��В`�EΡ51u��ĕ����D���X�J����ʫ�=����M��z�&��ֱL�ץ�=���59��^��wj!��?�MY/�L٠9�Q��b҇UmOe�@����T凵 #���B���sA�l�k|xx�%�
-��G����Llbr�:�Ng��0����d^2~�gr��%ϊ���N�9s�c�E�;}�ݞWL��J=���8Q&7q���#\�E(��0W&�M7ǻ��Ae�p�z��nz��ʕ+_�ԋ#�OAYR�hgxH��e�)Tz���m�@���7�u�e�^ۿ �����������
-I'�������3.?��y��t�u��]����Tw�$1u�����phW&P�[��D���,������$r��J"�k��l[F{h�@Ab͞�pm�,f(�N@o�:�����2vU0Z�KR<|��J�h�Z�s�A�]�0������h|�
9��x��u�2)���y{�u�i��<wơZN�$���ƌ�����:;��@�S����jAL�p��g��Ot�M����]b�\uo4���J	hM�hK���E��'��:�쁔*�B�}s�h%1�N����������3���Ti��/@|�_��� ����/�n����������}��� ����/@|�_��� ����	���������n�!�r��Y*W/X��*����o�N���ϟ?�\20%�B*)Ey��=<�aj蓮ݛ�uk���1���d�y@i��ڢւ��%Y�w���U1��b�K!u=։�{���n�K���0n}��-zM��TU���z]�7��1����T�C�ʢ�9+

��������j�����4��N|p�K2
�>�]F�V����by�r�����c�9��'�e}���R�h�1����m�����K�2u�B>�=�:���.����]��d2x���2�/�_�x�~����
-###ϵ�����=0u��J���[��\2&2ߨB@�zzؽ:��a������4�P|'��ު�������޷�=���SJ2�[�G��Gb&�;��7�F6'����)�4�[�9�|�w�ME2p�8�+^�r��<D�yZ�D�C�J8��
-����z�ܒ��� ���r#��&*W3�j��0�������kL�S�!�����.��iDs����~h�k�m�8�M�+B�8��8z�
-y��!�����������p U�'(�;Z?8��~NE�
-�?K;Y�r�J�Y!
�YfYי=�����Nl�Y�'?���k:ɋ�Z�O_�Ė�O9&��U���<�.�e�b�[B���k;/t�}�"���>o�b�,�yDCW��tm-j;o�!�
]M?�g+�F�<.�I�?K:��*z���>�~����ΛBV>�6��}⼘
-�D�.(��B����+�9/�� u^����U�	�'�_[<Ah}�8������� 	.�ފ����?��Z��\h�8}|���z��<M�i�LF~��Qkt���d[N>��}���Ʃ�܈\e-�xϘ�+*��L�meW-��+�����>E[�R4ݐ�E��J �P��	:y��ԯz���<��)�9�,�i7�k�NBA>I��Q���K���������ұ_��'R��
-j�:��<$R�>;���+/"*;�]�<��\K�������"�����=���
�wS�50b{���3:;���u�V�>qT6-]I��d���g�-����������
�i��.����
-c`���	�`�)4�J�!5�z�=`5A����he�uC�8=s\��F�.{�Q�/��������xM/�-"�����%hDN)3��u?:i�k9~��~V�6)�2��+^@�D���q�Pb��F0�@��!�l�m�R@�F�5��*=f���Yo|�Bx ����86/�~�.˞�2��0��j����`�.#����/�J=C �IU~U�������������z����@/�^���z����������`f����������������������������,8蠃�SJ2�N8a�����TL�dK�.�՘�������L�~�U�S7����;�R�	,Z�h�����z�9����c
-���n�;�F]�0��Y�����K��@WK?O��S��Y	��U�f!���������������8���������IEND�B`�
\ No newline at end of file
+���
IHDR��� ��	�����N:��5�IDATx^�	�vWY�Ѷjűu	֊V]b�e��x��~�&_���Ơ����C��|jpI.m��8���.�D�8���$�X!*���Z��$}���x���}�>�����zr�������}sﳿ����_0��ju������{vvvւ���޳�;�i�?��_����9�^�誏���FfKbkkk����ӝ�&�Y����j��Z�
�����2յ�g0&�����'�n5�}W��:�����x��Uq�W|�x1��W=EW����N�`_�>F��{�$ݻj�\xᅟu�=�|���3u<�-�����,
+��:uj�
+��-��x��j�
+�[��/���x�h��5�;�\|�=���`/r3n���\mf#P�C�v�`�� 'O�\����3g�Y�f�fvO��+�.���ͬX�k|��i�]�CH���,ʹs�>���ީ:����,���Ա��Jx
�����߫��׿ۊ�W�E�����W�-�
���o��[�_�!��8qb-�������AA?�9s�G�VLay�ZQ�h�5=I}L�|OBlww��HJL����(�ѷ��Z���	������8�?S���+@�HH���&4K�8��G��d׃��/T�j��X��BX7>{��ת^5CP]���'�_����N���Uo><���hs�x��7���q��V�$�_V�	Ir���V_��	��'h�W_�0��	�4��s�� |�	���Z�GY������U�b�ȳ�o5H�g��p����
+�z��[l��OD�<��$�xի¯��nJ����U12��v���W����z�|���.T�*���d�T��G��l����Շ�~5\̚/1u��zM�S�o5x'�@C��]�9��Ǐ_�ɮk���6�:�<W�����'�T�%����#����
�'� � �`P)Ay�W��շ������X�V�S	�pL�'cN_�YVȋ�~2� Y�d/V�Y� o`0�pU�Ea鶩�bƯR������*�IX�cUo1N�<�4_!G[u���g����y�����!X�k��J��>MP�E����7����ds�����`���Kp���	�΢Xw���u�����:�q���/�r�'Uo1l�8%[/;kŪ3;��Ή�N����$'���-�34g	�Bl{~I�'C�5�5�p*� � ������'دjo��	���/˿��5����s�c&s���<��~�3
+s�|�����/��Dg�h��x=�7��{�C����m�hoo����a��_mן3�7rf�zgnA~U��;[��V‘�Ͷ�k�fA��R��b43n# x&l���<Q�D`M­�-������ς������[w�~?I��O3����wCJ�W�j���&_�e��T��Q��R��Jy���_i3x��[�c_�~f_�g�����5�?�n,�0(�������+0>3�E����s��E�����{����?�q��}��5_��/'^mo_e	���?�d�|���w���%�l������!��8�SAR�s�p�4˿R��0'?e����g	R�3hd��r;v���slV���;Ŀ�Z��L~y{�Ƀ � � ���ժ=�0�MǕ���w�8�����:>TJY�l�w���h�Tu�*ǚ�?�wWBoz��7P��3^!�M���:��Z{PE-�x���y�=#o�Y7����)�ğ0	&�kB~O�g�ޖ�2�������[�_Q�ٱ��π
+8u������i/�_��,���r�n���9�;{��v}��7�^�3
+s��s�y��v�Ǭ��$�ԍۏx��G|�܋��I�x����oP=$J���۾�x_G����u�C,ٷ��A���r����wI��M�~�رO�q���\X�;]՜[ٮ��ώ�	��{炁�c�+��l7�yw���X��C��C��F� � � X�M��-����[��^Tc�w�-�S�}�[� �71 �M�5��Ą����y'����=����u�pY2����ӧ?�u}@��Fh�sbb��˜/�i�KH�>`���OLT��M��?�
+pڝ���	z�^��@	���u���3����Ĝ�������_��Ĝ�ƺ�*3_�����>��o�t;W!!˞�X�%��,sbb��B�>th��'d�sx7K�n/�W&��sbb�ެ�������x#ӿ�Q���91I%
+[����kys�=1����R,Du��f��z/��XЗ"0�kNL� � � ���R�?��o������z���z��UCG�v��xL�M��%�Hի�A�����N�-�oQ�jP�T�j��ת�j�z��UL�%Y��X�ת��TT��`M{|�����+P��V6�N�u�Yh*⬌����z��=-��0<|ԟ�F��K	���T�����k�j�����د�~/)}�C?C������c!�V��U��˿�����T�0I�@Tg����%p��[��/�Җ9s��?����j��������Ē�֯������$�V˹s�>I�
�f�����rX�G�y�\��F����	^sb/�m�1��!๶�aI��$r��_�����&�?��<?%^'%^G�d�K@�
+��pj� � � �{'�������7��OE�����y�[�������j�Z��p��W�?������G��r����Q������M����_�¿�v�Q��YcK����s�A�%��FTǠ�۴o����&��t�+Em���}�V�j{�K��@��������V[d�UΉ�N�F������ 
+	TdW��-���G����_r�
�Q3U)�~��{�hJ0�}%���TL�VŇ,�P;�Q�ƶ��w\�-�c�ׇ�,�㟪^��'O�p�yU���z�Tn��>��OWPli��:%��v?{K�{T'�>f�����x��X:5K�p�)a6/��/��/V�,4Bpۊkt����gо�q��d�}{7
�ɋu�o�?��Ylٞ����a�����M��ߏ��c�5Ίt�K���G�ON���<e���^��@NJ�;w.�Os� � �`#���ꅿ�����'��I�1�U����O���Щ�������������0�ki3Kp4�zq��o�O��,IБ��@`&�Z�~Zǫ�{��b��u<��e��tS��'����Ş����^�H��䋎�Dx�����YJ�A�?��z�����%Q
+�Yi�]�;cH�J�$�7����((����3\���4����=Q��~�ҭ��R�� ����K	�(���>	�6C�j?��T���ڷ_����L���`���/ßj?��T���ڷ@�k�j�������������j|@
�����7� � hɝ��㼀�L���!	��8/h��2�~������xJP�Ӿ8/��8/�N��4���pI��R��xx&���dN���1�$(>�R�%��>�OBǽ���Ov0�~�������S�';�j?��=�~�����L��\�j�AA�}������;w��8[���h���O����B������G4��#/a6�or=	Svww��:9L�=U����M��'��z��<\�7�����W˜�W:���K?[u	>���jI=Cu���j��mS�ի�2+�^�i���>�k���B�;��:��8����`���p�:�l���W�ՙDP�?W���^FoP�x����9��o>}0 �Ϛ����,��������_��>	�٫�j3+�yح�-�?+���C<h��  ��m��,������ �d5m��J<F�'��%�1���x 9�������Ds�:f �����q�x�1�7�9�e�%���	}$����ς=�!�^�]�!���KQm(x[W�����t�9�~�ϭ�#�zbU�L�q�y/t�D��A�����_m:0[�ɏ�ƚ���t��{���I�k�����/+۳���S��د�1s�uL��gv�Nǎ@E[�kt�����1��;_�1���/�L�m���O���������!�$����>�����/���v=�f_~��d�U�㞓#��?Z��X�/b�b��̫^˦��Ɔr����,� � ��9��&��eؔ>D������
��okB���,������ň��@(��p:�⼠I ��$� �� � ��~��%W~��d���e�?;�T0���1�o���Vδ$���ovvH�M���/+�4HI�>���vS�_�n��N��8�:��ͫ���شU�,)��n�R�x[�~=���L����X(Ve:�j�Պ���'�֦PJ��Nվ�8����A�O��X��w�k�w�K	��K�K
+��E��j<~��%Q}�w�`_K� L�����:���PJ��J+T�俨��/���CI��F�k��x}��}5P�
+����Y�'����J3�P�$ԯI����V)�&�$}���>�w�z?�j{��g���h����:��t?E�o5��#�ɸ�*9~�x�� � ���v�TH���8/�N����?�j�Պ���{�KSJ�t��K�K
+��E��
+W~��%Q}�w�`_!Q� L�uB/��	t()���V�D�QA�y_��}���)�%����J5P�
+��k�����J3�P�$ԯI ��`%�}�(q^AA�8�{���YR4^5�[4^�A�ln�x�`n�xA]��E�uP��E�A�B�O@ƈ�o�j�D�}�1m�trc]��R;�騶_�Sz?Y�[R4~���<���A
��t�%�[4^5�[4^�A�ln�x�`n�xAAAТ��r�}5�%IVɴ��@�����
+�l���� F�N����e���Sq֠ӯ���f3�<o3�sd�g�-��i�4���p� (���X�~t`�-H֊Y��}'O�|�����2(��|�v�fd㰤��c�,�z��e�db>n��f�|Et6N� a�f�S�3�T�l�����c߅�i���Z��%�OJL��z����X���#tP''6�B�e���Q���n}�WuRb���a���Ig�]�N(Xf[�/���u�vW���[�<3�"�M��4�N��@������$X���;�C|�5~��V�!��M@�	�̟��
+��W�{t��{p�������j��?�+���ˉ�� � � 
*������M�>X�����z��o����i�Y!O	����-��,޹O"����>��x?;LL�7�b	�-P�%OV>�� ,2�hU�R0)���_k�����?9����Ft| ����+��T�>�p/�u��Q�W�i�	��A|ߨ-������?�~�T���~6|~ui��m7
+����#	��V��0���ЇR�h�^S�πO��
+�����q�H�@4�����$� � ����>��,��H�����tl#X�P-;s��tl#X��V����,�������=���Y�<�ۯ�/��/��	�d1��yEkw�8�����l^��m�
������m���I�ܣ$������6�O�m��ƌۖ�ӵ[��o��S����}���ά	�%ˉ�|�������|4r�*�D@�O����}ZG,b
+#{��݂x�����Ch�7����+�-�v�LZ�ZlK:	��*j?lAS�=?[�0�K.�d�,�u�m����xb���|dq��+���%��������4ؤJ���3p�رe~$+a�oB'N�8??��
+�ڬ����ܞ�'β�AAAL���|��GZN�5'�����{�x�>�\Bj��TB����01���%�@E�|�:`�VL����`RگX��}�P��t�Z~��?I��p/kD��'P��<G�ߢ�}'��׊�f��FQ��?G��0��+�;<<Lo�Xtr�ΰ���S�g�����=�jV`1f+>��}}4,���A��>���>�z�E�}|B|Vx_��X���o�{E��� � � �o���{~�s�E��"��Y<��ϼG0���:&T+�ˢ�H���O=^}ۏ�n4t���^����%<��:ے+�{��>	��|�)h�$�evBg������Xп��>��&ꟁ�]˘��uF������x������{M���	�������|
+�U�o;pz^K��͌�9���
+p<%�%�e�k��O%���v�ф6�F��o���=� � � >~�A�/^}�v<%�������^''���-���-/����R��:�6�F�vpeA�m����a�C�DJ0Ƥ%P+>��x��:������ۺCD�u�4>T���x4���%���-/���R�j4�h�P�F�,9%�?�ܧ�x��n��KII��~ � � ��c����ߗ�:(�+�c���`��1�������h�yn�xP�T#
+�L���ɶ�����0ġO"%c҃��DJ�E�E�l,4��[�'�o0>>Tt�ʉ�L)@I��`��PQA-@�)U[�Fs�����8/� � � �o������ߧ~F��n/}��g4�V��h�q���`4Zp�K4N&՘�"�����z)�8YjB|)�:'�:� %^G�Y���շu+R�~��4�g߸�[�`С�~�QGcE��hzN��5�[4^(�yAAAAP������)�c�����Ѩ�ZQ?�Qǵ�~�,Zx�K4N5��Ȅ+�l�^�h�,j��DJ0Ƥ'��R�H�סh���%��ױ�~�I%��jE�V��Ɗ��F��t���R�j4�h�P�� � � ���x��ǔ]W�՗���=���o��x����~����&϶�gZ�������j}w��OF�푗�ϙ��dl��hο�fv�ص%�U�PBA���'�S�::J%��U�zڿ1J+�8\1����T�K�.eS�oaT
�շ������{���X����g�%*��+�z-�9�����5�����6��\!�eu݆���t��|�59��x;u^#>�Gگ��ޗ��g���s�Q�t�8R,F{�>Ծ�֑��&NԾ3P+c�Ծ�}���N�T_E�[������}��>O:��DvFAAAC�?�O������:��M�A[�;�R{���A)�����=E����n"啘
+W+%}[��_��c^}ۮ�-�@&@R8�rhc�-@���\{�-���ѧz�•��̃�c�n���U�NC�����L�n
Pب�J�/�Y�l58�j%��@Z�`L�[l�n5(	l~:zX~\���oI�$5#�I����[�R�I%�(ǎkF�u<� � � (�ʶ+�g��_��:�/�6����yDT�̀�}}b:�_�[0[5p�ٕ���`L�gA��VGR	`9}E��>�݂mW�fP��>�O"���S?G�N�3�[���A�8[M��yOȾS���K�)�9�9��`�Td���޾��
��S�[�Y�3V�XB�����{����z_�9IM�P��5Te47\	�zAA�F��s�ﯨc��:��dW!="��������;	`r�v���R�@�����=���ڿ1���o�H�a��P��z��N�:9?��^�5PN\��[qΏ�m��@u�۔ڥ����U`�~�M�N��M��o��R�U��z��Klcl|Ɗ.}�"�ge1,؝��|�QAA�aP�Gy�)������T��ok9ߕ��11��|aZ���
+(���N�?jϑK`c��X��~,�/���.��-H�xSK	��ɭ���l�c�+�*��\��rz�Q}��>�O��:?�4�&��S$����x�Ne�;Ut>��\��Q{H�x^T�;����T���q�I@���wsq�ĉu�_E�� � �`vR�V-����?������ݑ��F����&���ޯ������d������~	���cE�{����?_�K�F�@q�
+�
���z��䀮/ѦDmڒl*	\�>��.��o&ъ��*�����Rm	�J�l�m[�5��MnPCo��F���u=o{�j����j�-x%�}�:��m��{�/�!F�n�>S��NP�`;UnC_J>T7+�=P?�g�@���lUo6��샧V@�a�:A0<Pxi���Uu���M�y�����)�$��4z�/CS�9��������d:oD�Xk���oTgch�hߊ��ʔ}[|6��}���b+����X��$�oh|��վ�����ڌe�wlo�W���l-�g�j�G� ���I�l�]�H�
��H�H�S�d.��Ja�~�����Y�/ArR�;����}&��>*I�:	�&쏴�f��WJ���tr���vAAA5(�i�����2՟_OU�U4��Mޡ��� ,Ŧ��M����=���M���ό}�$j���Ŕo���u��w�4zɶ����w�
+���X���g!�m�}6۷%�~;Љ�O%7����O�:�%W��o��@��[ͽ"�L�������T����}��ώ��~	���E���%կvꗔ��(ٗ��
+J����+C�ߗ��Ɠ���.���w꽢�z���d�����R�(�{�	���mO�+������+��x�6���G�WJ�8g��{��{�����R*�5�=D�	���28�C�q=����^Q��&������s	X������}jP{�{���0�����oV1?sBW�?":�%xM`0�p=B�h"�goR�H� � ���v�(����F��	�TUBk��9/(�������>
R��O��b�77���y���Vȫ��{^��P\���:!�3�Jnb�X��@��V+$V��+8.N)k��U�R�<8�P�-4�~�i�Z���R��E��Bi�DѾ��-�񒾎�}�Ձ�+����>��B�a)a���?�a����}�����{{���
+h�x�CIu��Ý���������j��_%��*޾����8W�b?�~����M@
���׸�k�?4���[u�6N��
+:!�O�3W�J�=Vٳ"�~�������������
+=/���Ǐ� 	� � Jl�����G�T[l�=/�����N|� AuK�@��jŁ,巚{E���|A1�%��xY�@ɾ4�Q�
+
+W����WJ�*8�0�V}�+���u���b_�p�����E��Nj
+(H��O�/�pK��W9�:~�8�/�9�D3O���}��x�*������ � 6�vs^����l伀5__�OU�'�:/��ܹ����H����t^�����(�����8�j�ʿ�����w;���ڿZ����X:����&ց3���T��VH�@5�Wp\�R���P��lSt����OC�'� >P����XJ�4^�h_R(��(ڗtm��OѾ�}k?ђ,�?\�������Ce�}1åNj
+K��/*�0�7>վStVJ�گgPr��8��e��*y�1�?�j{�G��z?������LOg�ʶ���1�[�?W��}}^�\!� � ���r�j�jφ���y͌o��*�h��~TQ�[�%�\���sp���[�f��+��:M��&دomm�Ʈ����Z�o��I���]�	4�����`3|����h_v�eT�E��f
+�P�E�e~�ov8K��^��Z�q��:s��-���R6���B�7��_R�E��~�r�b䷨�"��z�`o�������.���S��%�Qx�p3o���ș�}xx����Z�c�G�g�K�ϳ���mڗł�h�&��T]��|ў�����	6�/u,	ip<���V]�_�7��E[���~��`�	��~�����>��ې��cA	���xpb+��7���|��u���ZQ?@u,��P��� I%����>]ugG�~ض��%����l���+q߼�@���f�����q{�rod�O�g�رc����Ol�;-���?� � �`�R�����e���Y�=��^�K�G�o�^TY�&T�o�l�����[���J�g\�?;�*>jX��^-�-��
+��Y��_�^g���̸�._�?;�@گ�C���W����| �W��k�9�f<7��r���zN�?�R�������P�������韝\�K�]f'�����M�o����s0���/�T�����gARe�\����gm�"��e���i�S���'�JHǽ�*����ݿ�q���X�������D.;�ׄ��Z�59�j�ӫE��`Yti�n�^ӧW�%��4�;�z�O��V;�꫿# ;.s6�����))�� � �N�]�D['8��:ޢJ����ܳLQ���N�?�
+��$�_���+~��'���/o.P���`(�o��_*P�v$������������ޗ����){�{���d�pn�H��N�"��d9�Ztis��q����ޗ�g'(�?;���?Y��������@�/���f�럝\ Mt1r	��[l�fd���1���	'(׿& �#�R}}�m��޽�a�8�E�ub^��??P	l��"珫��Y�Ztis�T�[�d7x`�8nFl��K���S-ϳ����w>�4J9�}����~GV�W/� � q�̙��$��,K���}�������>�g�\۪���Q08�Y�I:����jd���x�I	 8K�h�x
Zʭ��|lp��T����`�
+؃�t�-��=W'��z�sП�gA�c�A�E�v��R7�1�����*�{Fn�{ڼJ^�u<%��@��2������ ���Kʗks}��9YRp���~���a>1�{۔�^�@�c�;_��Z�N�&�B�O��r�ئX�W}b��.�@�A+�T��'O�|�Q�jߥ����]�?x|��c�DLj����l��ly��K�j������y۔�^���o}�Cg~�'p�W|����ڟ�d��g�^ф��,�wX�[�9BiF�9�����(1����?��	PR��\ۗ�uL�dQ��q_.!^5NAAt������^�V�|
(�O@���=����N������'�nrc�fs�,I��/.
a��:�Ǭ�����-�LJB�{c�}٫��%:W�g
�����,��?�.|f�������|�HѶ=���xJ�:�ʩ����^����'�G9gK���/Q�LbI���9YR���(�q�[��3�sܯH��E
�:>H����8;�z>	�
���bA�6g^�>|�
+��<�3T��ޢ��.��j��@���1�+Aǩ�І��~��y�^R��s&:��|���C����r���3���h��s����,%VAs�JnBYj�LW��)�	u(��*�
xI`��
.���%U~ϵ�\��4Nu�����U�AA�$��p�*����d�����k>)g�lp�����_��|lp�{-�apN	��N|����2{�E؎����m��>*����0	֓U?�/ٞ��4�������M�H͒y�5�%�#�f��*�!,�@������N��*���Z��c'�:���s	�q� � ��C���׏v|��v����؎�4LNb�x&%��������v��C��$�����[����|�߁3�K>h|�v'>_��/�
+��Wr�R�d�~L)M�CiF�T�l��HC�opY���(��{���z?�q��C︯?��'� � >��_D��~�I�뷷��l�n������V�Ǩ�llmm=�9A�4庶�e�A�}���9z�8�o���c�^����9y{��ߢ0�����M�{{{�[Č?��3��B�hlW�����-0b��q�B���g���/�R��L�E�J�n���^*{�U8�z5�|���êײ���mj�Q�Z��;T_��,�Uٞ��Uox�������t�[�Z2�\���W�`1Ӷ�2�[C%����������%�>MS�&��V�!�
+�~���i�S�5~�(��
+���k�1�[C�vpŃs�ĉg��4x3�m�[c���/�&�z��={����^T��ܹs���|�����
���������fl����ՠ~ �f�%��A����cǾR���������7U/�-�7�1�P���gI�=�׋�:V?�����h�dR�v�a"��U/����]�k�	�mA~���0��t�w���~��?
-��H��U��&/��čC�iܧ�q�������8���p3�e��z����%:��
+��ߚ����y���.��`��?��Y�/�����Un��Dp�J�v��C��R=������ڮ1/�9�y ����_���W�����6� � ���˪��ׯ:9�\�o)�z�uꈞ���?���7��W�����6!��+7;|�Or6C��,5�>���הn��ϾS�W%����>�h����r���ܘ�C�P���?(��a�j
����b	̭�Nh����kE��`������bz�
+֫5h
+�E=�@W�<��׾~�����}�HU�+���>���T��KQ`1����?(��R똅L�WZ�!����+P�@���������	
q���ת�@�گ�N��*��ھ��c5�����;���9T�\?�te� � � ���s��m�����:mz�?��E�����Y�����>(�l[����W�PM��/�?{{{��:jQ�ꪫ>�zZ�'a���AP��շ5��D��&OT�՘��X���K�*N��ۚ�`O�C�?�l{_�N��3%�1�ߧ1���0@����o^���ls\�c��\���>�X):N%�q���XY�2�K�b��*۾k���oY߻TNj%u���Ŝ��(��3��{�پE'�{�-b�;��d]�xU����}���ȏ�!��2	��䰠W��0�W�x5��W`Hd��e�$,��X	{�=bL�Il&�~$;~��S�/� � � Fs���
�+��mT=X��Y��/���>�Y��&|D�)����/g�3I$��'�3�hP$����g�&�c5U0^!�*�{@��f]^g�X%��%r���b��㜤�xUiy��;�)}��%�L�(���۾���|��9�c�Z��������8ζ�9� 4V3�A���˜����y�wF�U	�#���/C�F��b���C
(��߈L�$+�0���U'E��&��o�[�-?���_��9\����?#:��~�L��x5X:���a&�@2��j�AAAA�F�4u�8/8"q^�	V*�؎��g��z�&�|�l�yAAR	bfg��<�����Ɖ���v*�� � � �`Ӝ����>"/���}D}�G���G��V|Qs�XY���<��c9}e�W�M�G��rY���� � � ��=�A�L�7�K/����������o0_|�ڙ��MѠ^`��c��u�
+l��`��G�3E��`.����N�ض��<�9Ϲg�x�I���v2Ŷ��:Òx�I�n�}�L�ma�DgXo;�1u2Ŷ�Nt�%񶓘�d�m����je�� � � � ����8���:5�����IEND�B`�
\ No newline at end of file
diff --git a/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js b/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js
index b093fface508dee8e6fb5ba77d7b206d95f48232..676182bfaa2ca65bd7c351a7390b3306055373ef 100644
--- a/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js
+++ b/web/core/assets/vendor/ckeditor/plugins/table/dialogs/table.js
@@ -2,20 +2,20 @@
  Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-(function(){function v(a){for(var f=0,n=0,l=0,p,e=a.$.rows.length;l<e;l++){p=a.$.rows[l];for(var d=f=0,b,c=p.cells.length;d<c;d++)b=p.cells[d],f+=b.colSpan;f>n&&(n=f)}return n}function r(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer().call(this,f)&&0<f);f||(alert(a),this.select());return f}}function q(a,f){var n=function(e){return new CKEDITOR.dom.element(e,a.document)},q=a.editable(),p=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?
-310:280,onLoad:function(){var e=this,a=e.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),c=e.getContentElement("info","txtWidth");c&&c.setValue(a,!0);a=this.getStyle("height","");(c=e.getContentElement("info","txtHeight"))&&c.setValue(a,!0)})},onShow:function(){var e=a.getSelection(),d=e.getRanges(),b,c=this.getContentElement("info","txtRows"),g=this.getContentElement("info","txtCols"),t=this.getContentElement("info","txtWidth"),m=this.getContentElement("info",
-"txtHeight");"tableProperties"==f&&((e=e.getSelectedElement())&&e.is("table")?b=e:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),b=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=b);b?(this.setupContent(b),c&&c.disable(),g&&g.disable()):(c&&c.enable(),g&&g.enable());t&&t.onChange();m&&m.onChange()},onOk:function(){var e=a.getSelection(),d=this._.selectedElement&&e.createBookmarks(),b=this._.selectedElement||n("table"),c={};this.commitContent(c,
-b);if(c.info){c=c.info;if(!this._.selectedElement)for(var g=b.append(n("tbody")),f=parseInt(c.txtRows,10)||0,m=parseInt(c.txtCols,10)||0,k=0;k<f;k++)for(var h=g.append(n("tr")),l=0;l<m;l++)h.append(n("td")).appendBogus();f=c.selHeaders;if(!b.$.tHead&&("row"==f||"both"==f)){h=b.getElementsByTag("thead").getItem(0);g=b.getElementsByTag("tbody").getItem(0);m=g.getElementsByTag("tr").getItem(0);h||(h=new CKEDITOR.dom.element("thead"),h.insertBefore(g));for(k=0;k<m.getChildCount();k++)g=m.getChild(k),
-g.type!=CKEDITOR.NODE_ELEMENT||g.data("cke-bookmark")||(g.renameNode("th"),g.setAttribute("scope","col"));h.append(m.remove())}if(null!==b.$.tHead&&"row"!=f&&"both"!=f){h=new CKEDITOR.dom.element(b.$.tHead);g=b.getElementsByTag("tbody").getItem(0);for(l=g.getFirst();0<h.getChildCount();){m=h.getFirst();for(k=0;k<m.getChildCount();k++)g=m.getChild(k),g.type==CKEDITOR.NODE_ELEMENT&&(g.renameNode("td"),g.removeAttribute("scope"));m.insertBefore(l)}h.remove()}if(!this.hasColumnHeaders&&("col"==f||"both"==
-f))for(h=0;h<b.$.rows.length;h++)g=new CKEDITOR.dom.element(b.$.rows[h].cells[0]),g.renameNode("th"),g.setAttribute("scope","row");if(this.hasColumnHeaders&&"col"!=f&&"both"!=f)for(k=0;k<b.$.rows.length;k++)h=new CKEDITOR.dom.element(b.$.rows[k]),"tbody"==h.getParent().getName()&&(g=new CKEDITOR.dom.element(h.$.cells[0]),g.renameNode("td"),g.removeAttribute("scope"));c.txtHeight?b.setStyle("height",c.txtHeight):b.removeStyle("height");c.txtWidth?b.setStyle("width",c.txtWidth):b.removeStyle("width");
-b.getAttribute("style")||b.removeAttribute("style")}if(this._.selectedElement)try{e.selectBookmarks(d)}catch(p){}else a.insertElement(b),setTimeout(function(){var e=new CKEDITOR.dom.element(b.$.rows[0].cells[0]),c=a.createRange();c.moveToPosition(e,CKEDITOR.POSITION_AFTER_START);c.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,
-required:!0,controlStyle:"width:5em",validate:r(a.lang.table.invalidRows),setup:function(e){this.setValue(e.$.rows.length)},commit:l},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:r(a.lang.table.invalidCols),setup:function(e){this.setValue(v(e))},commit:l},{type:"html",html:"\x26nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,
-"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(e){var a=this.getDialog();a.hasColumnHeaders=!0;for(var b=0;b<e.$.rows.length;b++){var c=e.$.rows[b].cells[0];if(c&&"th"!=c.nodeName.toLowerCase()){a.hasColumnHeaders=!1;break}}null!==e.$.tHead?this.setValue(a.hasColumnHeaders?"both":"row"):this.setValue(a.hasColumnHeaders?"col":"")},commit:l},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,
+(function(){function w(a){for(var f=0,p=0,n=0,q,e=a.$.rows.length;n<e;n++){q=a.$.rows[n];for(var d=f=0,b,c=q.cells.length;d<c;d++)b=q.cells[d],f+=b.colSpan;f>p&&(p=f)}return p}function t(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer().call(this,f)&&0<f);f||(alert(a),this.select());return f}}function r(a,f){var p=function(e){return new CKEDITOR.dom.element(e,a.document)},r=a.editable(),q=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?
+310:280,onLoad:function(){var e=this,a=e.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),c=e.getContentElement("info","txtWidth");c&&c.setValue(a,!0);a=this.getStyle("height","");(c=e.getContentElement("info","txtHeight"))&&c.setValue(a,!0)})},onShow:function(){var e=a.getSelection(),d=e.getRanges(),b,c=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),u=this.getContentElement("info","txtWidth"),l=this.getContentElement("info",
+"txtHeight");"tableProperties"==f&&((e=e.getSelectedElement())&&e.is("table")?b=e:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),b=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=b);b?(this.setupContent(b),c&&c.disable(),h&&h.disable()):(c&&c.enable(),h&&h.enable());u&&u.onChange();l&&l.onChange()},onOk:function(){var e=a.getSelection(),d=this._.selectedElement&&e.createBookmarks(),b=this._.selectedElement||p("table"),c={};this.commitContent(c,
+b);if(c.info){c=c.info;if(!this._.selectedElement)for(var h=b.append(p("tbody")),f=parseInt(c.txtRows,10)||0,l=parseInt(c.txtCols,10)||0,k=0;k<f;k++)for(var g=h.append(p("tr")),m=0;m<l;m++)g.append(p("td")).appendBogus();f=c.selHeaders;if(!b.$.tHead&&("row"==f||"both"==f)){g=b.getElementsByTag("thead").getItem(0);h=b.getElementsByTag("tbody").getItem(0);l=h.getElementsByTag("tr").getItem(0);g||(g=new CKEDITOR.dom.element("thead"),g.insertBefore(h));for(k=0;k<l.getChildCount();k++)h=l.getChild(k),
+h.type!=CKEDITOR.NODE_ELEMENT||h.data("cke-bookmark")||(h.renameNode("th"),h.setAttribute("scope","col"));g.append(l.remove())}if(null!==b.$.tHead&&"row"!=f&&"both"!=f){g=new CKEDITOR.dom.element(b.$.tHead);for(h=b.getElementsByTag("tbody").getItem(0);0<g.getChildCount();){l=g.getFirst();for(k=0;k<l.getChildCount();k++)m=l.getChild(k),m.type==CKEDITOR.NODE_ELEMENT&&(m.renameNode("td"),m.removeAttribute("scope"));h.append(l,!0)}g.remove()}if(!this.hasColumnHeaders&&("col"==f||"both"==f))for(g=0;g<
+b.$.rows.length;g++)m=new CKEDITOR.dom.element(b.$.rows[g].cells[0]),m.renameNode("th"),m.setAttribute("scope","row");if(this.hasColumnHeaders&&"col"!=f&&"both"!=f)for(k=0;k<b.$.rows.length;k++)g=new CKEDITOR.dom.element(b.$.rows[k]),"tbody"==g.getParent().getName()&&(m=new CKEDITOR.dom.element(g.$.cells[0]),m.renameNode("td"),m.removeAttribute("scope"));c.txtHeight?b.setStyle("height",c.txtHeight):b.removeStyle("height");c.txtWidth?b.setStyle("width",c.txtWidth):b.removeStyle("width");b.getAttribute("style")||
+b.removeAttribute("style")}if(this._.selectedElement)try{e.selectBookmarks(d)}catch(n){}else a.insertElement(b),setTimeout(function(){var e=new CKEDITOR.dom.element(b.$.rows[0].cells[0]),c=a.createRange();c.moveToPosition(e,CKEDITOR.POSITION_AFTER_START);c.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,
+controlStyle:"width:5em",validate:t(a.lang.table.invalidRows),setup:function(e){this.setValue(e.$.rows.length)},commit:n},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:t(a.lang.table.invalidCols),setup:function(e){this.setValue(w(e))},commit:n},{type:"html",html:"\x26nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],
+[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(e){var a=this.getDialog();a.hasColumnHeaders=!0;for(var b=0;b<e.$.rows.length;b++){var c=e.$.rows[b].cells[0];if(c&&"th"!=c.nodeName.toLowerCase()){a.hasColumnHeaders=!1;break}}null!==e.$.tHead?this.setValue(a.hasColumnHeaders?"both":"row"):this.setValue(a.hasColumnHeaders?"col":"")},commit:n},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,
 controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")||"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.left,"left"],[a.lang.common.center,"center"],[a.lang.common.right,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||
-"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]},{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>q.getSize("width")?"100%":500:0,getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",
-a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("width",this.getValue())},setup:function(a){a=a.getStyle("width");this.setValue(a)},commit:l}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:u,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",
-a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:l}]},{type:"html",html:"\x26nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),
+"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]},{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>r.getSize("width")?"100%":500:0,getValue:v,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",
+a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("width",this.getValue())},setup:function(a){a=a.getStyle("width");this.setValue(a)},commit:n}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:v,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",
+a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:n}]},{type:"html",html:"\x26nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),
 setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing",this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,
 d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right",html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){a=a.getItem(0);var d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),
 this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var b=this.getValue(),c=d.getElementsByTag("caption");if(b)0<c.count()?(c=c.getItem(0),c.setHtml("")):(c=new CKEDITOR.dom.element("caption",a.document),d.append(c,!0)),c.append(new CKEDITOR.dom.text(b,a.document));else if(0<c.count())for(b=c.count()-1;0<=b;b--)c.getItem(b).remove()}}},{type:"text",id:"txtSummary",bidi:!0,requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||
-"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()):d.removeAttribute("summary")}}]}]},p&&p.createAdvancedTab(a,null,"table")]}}var u=CKEDITOR.tools.cssLength,l=function(a){var f=this.id;a.info||(a.info={});a.info[f]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return q(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return q(a,"tableProperties")})})();
\ No newline at end of file
+"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()):d.removeAttribute("summary")}}]}]},q&&q.createAdvancedTab(a,null,"table")]}}var v=CKEDITOR.tools.cssLength,n=function(a){var f=this.id;a.info||(a.info={});a.info[f]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return r(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return r(a,"tableProperties")})})();
\ No newline at end of file
diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
index 5d4cfd1facc694855724bbfc155cc3cba5887d07..342e77c1b98b3e49e1e01e48d7c5329846447a7a 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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}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}.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=J24I) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J24I) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J24I) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J24I) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J24I) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J24I) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J24I) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J24I) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J24I) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J24I) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J24I) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J24I) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J24I) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J24I) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J24I) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J24I) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J24I) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J24I) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J24I) 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}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}.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=J3PE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J3PE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J3PE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J3PE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J3PE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J3PE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J3PE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J3PE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J3PE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J3PE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J3PE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J3PE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J3PE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J3PE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J3PE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J3PE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -2256px!important}
\ No newline at end of file
diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
index 2fa0ac4f39ff04b82a9b8ed77931ffb67b3c2414..8d266d000e96a6a3d277bd3a3d53ba9d20bbef11 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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}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}.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=J24I) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J24I) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J24I) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J24I) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J24I) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J24I) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J24I) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J24I) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J24I) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J24I) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J24I) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J24I) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J24I) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J24I) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J24I) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J24I) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J24I) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J24I) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J24I) 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}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}.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=J3PE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J3PE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J3PE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J3PE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J3PE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J3PE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J3PE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J3PE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J3PE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J3PE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J3PE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J3PE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J3PE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J3PE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J3PE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J3PE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J3PE) 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/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
index 64ec323288832a3c2eb631ffb0e34e090bc461ef..b2d299b9cdf3cbb68454143bcf3e3b277aee21ec 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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}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}.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=J24I) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J24I) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J24I) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J24I) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J24I) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J24I) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J24I) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J24I) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J24I) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J24I) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J24I) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J24I) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J24I) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J24I) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J24I) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J24I) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J24I) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J24I) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J24I) 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}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}.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=J3PE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J3PE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J3PE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J3PE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J3PE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J3PE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J3PE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J3PE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J3PE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J3PE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J3PE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J3PE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J3PE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J3PE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J3PE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J3PE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J3PE) 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/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
index be897b453b2ae09e223ae7b473b6080e2abb855d..bc6f3b77bee290713d4ba1e8965de08fd0aea7fc 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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}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}.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=J24I) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J24I) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J24I) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J24I) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J24I) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J24I) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J24I) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J24I) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J24I) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J24I) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J24I) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J24I) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J24I) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J24I) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J24I) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J24I) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J24I) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J24I) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J24I) 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}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}.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=J3PE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J3PE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J3PE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J3PE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J3PE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J3PE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J3PE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J3PE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J3PE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J3PE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J3PE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J3PE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J3PE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J3PE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J3PE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J3PE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J3PE) 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/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
index f9a51f6a3b9c1c62c6b8d4b0323eaeda149526ff..092a2103500e39357831719a074ed6e6cc2ee1df 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2019, 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}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}.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=J24I) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J24I) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J24I) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J24I) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J24I) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J24I) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J24I) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J24I) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J24I) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J24I) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J24I) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J24I) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J24I) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J24I) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J24I) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J24I) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J24I) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J24I) 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=J24I) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J24I) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J24I) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J24I) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J24I) 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=J24I) 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=J24I) 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=J24I) 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=J24I) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J24I) 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}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}.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=J3PE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=J3PE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=J3PE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=J3PE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=J3PE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=J3PE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=J3PE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=J3PE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=J3PE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=J3PE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=J3PE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=J3PE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=J3PE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=J3PE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=J3PE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=J3PE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=J3PE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=J3PE) 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=J3PE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=J3PE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=J3PE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) 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=J3PE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=J3PE) 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/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons.png b/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons.png
index cf5548c7b0fc1518a7f18edebdfd836a0a4ffe32..331a155f7e77d608bcecc95060556417af6da4b2 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons.png
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons.png
@@ -1,12 +1,30 @@
 �PNG
 
-���
IHDR������������1��QIDATx��]��U^
-Q�*�5���mPK��VYw�;�ٙ�I7ݭ�55�ڤ�H�H;ؘ��"5�hֈ����J()M��PL�>(h(�!��$3�;��ܽs�������Knf��=���s�{���}}�B.�۽v��:OgGGG�zgf�FFFt�/��t���d&$��� MV��{%!��ĉ�������*���J5źFhU�$��h�y�T��3��3jK]�2�$Ԧt_��� ������4x�w����+��B�S�c5�"�������@��E�	{(
-{}�П
��H8�%�w��^.i��%���D0w	 s^D�$���K�b�R�J<&�����RZ�Qu@��;^�b���B�Q���f��%_
���q�wW��H,�}��@����.�Y"��|�e�:�`��`�;J�2�CCC�F
��I�m���r6�4J%M>�����SƝI�gL���������C��rK�q@$hn0H���:آ�|L�S�a^P�����}K��f/���'yc^���(�ܐ�Q�T~:���^���~��\.��2�흱T*��U7>��*�$M��Q�V/��7zk�*;��]�@��X�'�x�`���
���l�dk��ჺι8lذ��:�̝��c�9q����	�Hua@���.R��j��d;�m��Z�1N���ھ�I��I������N���������WՍ�իY���X�&s�X�M"�Fb��{�!��R���`������G|�e��P�L�J���"Hv��w���/�vy�c�-Ԅ�Y_b
-�yS��O'?*e�i������#y�0�'UT�������$���t�X,�p�F����t�5��1O_��o���a��W�[o�0P
-����49����ѕ�'�~���\�:G<z�dSenݺu��e���9�����"]橩�x��6/�.���j')�z�d�|���&:���1C|7U�$l��Ʃ��`�>���'�t��{�bB>�$f��<�8�-�R{�!M���ׅ�Z�*�E�+����x��^���d�)�ט��7��ݟ����.�f�:�/S���#��
R��r�@���x�3e�,{�;($\�T^gy6i�Wk���+Tk֬Y=n�fS���G��\q�')�)���R+���c/��b�$g���D:"U�\���"��Zm�e�&�C�N*L��&�\�)juJ��u.�*�G��/�����`��p=�x��^�/���"�9�R�4*���΄��s��H��a��v�R�XB&ԝ�%��LJS�d
-�m����LJ�Fk@n:�i<-���x��^�/�@昞���$h0=�,1��ڛ��Е���-��484c�C�B����� ^C��F	��P(�I�=�����*�������gu�G���V���~[3N~�T��Fw$����N��0�#Z�g�g���
�ŗt�LT��o�u@����`xiж:�~�[��pB����M_j�8k&E�6{�&X���Qu�A�uУ�����Z6Vn�Д�|��<_0j����ZnH��1��Y�2)�וu�5����:H� �:��~��@��$�����BE�� cT��7&?�Y~qVj����J����I�ؙ���/r�n-��j��|!��:o��Τ��(�ʝw��/���bnqEpC�sx�:��`z>���4$q�N~V}F�~��j��W�7c��d��2g�(
��lꚮ���̋�Y��|��z����U��Ii�+{j�"O.����,f�Z��*��3�w�#q}�N[4#���
6�����2������KR!#�ּ��A�Q��?��
-�N%�S��ewF�.v:���JL�+����n,u�Cs?���;-���+����:P(v��J��V֝��w�Y���.��EH��,�1�#eڕ��	��2�oߺ<l����v�]�')�����(lǍl+�W��DV>K�Xi�������ni	�\R?��^���6��k���zί�e���i�6W4������=8_Hl�nw�������}�����]�
������� ;&���W�N��$#���r+���d4�i���U*���b��U�����	@��VI��b*�@e�8z\U~��/���c��O�f�����^�/�����������ե�I��놆8��\������$�9>�z�\���R�:�ry����pA@���G�BaPh�~_3�����,%�A]b�fV� C
\���`lll�m�-z�Q���������b���٘������~mEh
-F@��������?|�_K4P���m�r�%�V6θ��\���WXyA�t\^��g1���|>����\����>���Ӓ����S=,��?"{"*�aot�'�Xy����#ǝ�F�ɯ��,$��N
H�f?|��?Ͷ�'^�]L}����[��Z.`m��>�
-����2͝�7n���G��ca<8;�N\ �!H�����#!�p�g�$�+w�O8����+2gX5`����i��yބ���q��	��B9!/s8�0_�|������0_�|�Z�R������}�A)�������k�(?!J�1�+}N<�J>��F�ϯtĠ٤ЪR�,T�y�������C����<���Ź�;/oR�ғ
n2i�g�I{^�V[ ��f�I�y�ƍ�K�mѕoL�0	����*��_�2?�~�Z��n�ur�Y�߾��h�W��_I���j�+�o.��W0���V�K��^f�u��-���`��5��>cA��J�t%��F�[e4X��R�y��9�˝ьwQ����W���[\/�J���$b�R6�����V.�
-a_ 2U"�ӱǹ����HZ�zu�֑��m05��ܠN���I����L�0NP�,s�ƌ��{�u歷��us�/��|�J,�'x���x�Ǚ�7U��z�6B�|}t3�||rG����^�/���8�H�#�|�ҥK�)�orr��o߾�����_���144�M6,/s���}������W.���6�l�����$�d��AFk��+<o���D�4�Fk��;00�A#���,I�Zb�Ł���/�6�!��`����IEND�B`�
\ No newline at end of file
+���
IHDR������������1��cIDATx^��U�$������
+%> 
+������vw�i���55[l1����"1!*���`�`���J
+A$�0(>@0�!�@�(����a�����;��7��G{~�a��=s���~��[����E�׻b|||��ݫW�ކ>Q8���[r?�PO;ٙ�LLL\D��L�ר$[1��8RМ�S�kK��Z@����&�S�iRڲ���8����2�G!�U`!���[�&��I(覲��h�7Pw�7�%hK2;;{��@/��Ľhˆ*y>��Y�����+�̇���	9�^'@ٵk�!S��~%΢;IU�\	9�%���H@�W�>��t>�ο#	��0��$�djj�X����$y@'��g0�^�@�W%�����LI@[�k��F�xJX�R��'n$z/Ę�V.R�ҽ��i`ӦMG�,,'�g�ׄ/�����}QIND[��+W+��-Z�.��і���v5ڲ��Jށ�$�lw�~
+����S��e�����R�H�*$����8N&�l0J�I=#�j����qJkA�����Ǖ�c�|kVU�uh�B*(����mi�A�(T�$^���������^+gff^BWfNOO�u���(����H�{����{1���]^+
+m{oŘ����+�)��./���8ΰ@�u7O[��G�N�����5�V��h_���>�E��\.&�C�(:Ir���
+��7R,]�ik;�t���Rp��D�<��s�=�0��wh_&H���}��k��}���q�׃���q=h�XH��� 
�����z�z��I�^r�
+��ic�E�.�R�6�_k_�q�2�iv^o�ij?������Z�k�<��7j}�b&��ߨ�	�oKՈ]�Z`wj}�8��@�%1ɕZ@������֍�?"\�15��ƎRUԄ��o���Oη��Pe�G��'V:J��8΁
+M�9zS�G��f͚SiZoF������6�Ї���v�hUe��Z�Ǖ}�kS{/�o>M��QE�	��qrrr�rx�;�_��ի�F=}]hE>��z��|��>��l۶��^f�]A��:�m\�e�G��ٴi�ae�/�6�nݺז��..����+�4[�&P�$O���棲�Y��:���w�!C/ZhQ���6;���G����%`�$נ�FS&eO;��8�"�oY	t[(��*���p���6��u�@ʞtHٓ){�!eO:��A�	�8Nw�.�}���S$X�+�n�/�!eO:��I��=鐲�5&�8Cݦ�NMM��z�V�ShUڍ���#�轞�sg�s	�l��Sf9�F����9R�'���=m)�C��ު�]���}���X�A����0��U��@�F�w�7BAO���D�@{��(��2�G�'ݏK��:����({������l��������%�a~~�`>'�O꒩}#Ƀ���I�����%|)b��ϕ	�Kx�Y����xˁt�`R���q�����X&�}�\�$������3l��*-���^-�Gc>g�zti���v>oJ@�e�Q
S��5�L_S�L`��5&���H`G���g�����H`G��T@r�n+}�Z�{�@���>p����͘���
��kL*0����
+ic�Z��������������l߾}��`|w���`|w���`���E�,^���_��`|w���`|w���`�����J-�ʗ����X.��q��03�Y^3�\V����L�����%.>�fZ'�w��^��܎&����q��-c��+ݐ���(�%X%y�L@��ѹIj	(�萒Z�A�J�8N����Y��zRǥ�ٴ
+Е`������"g��?˞$�a��A��1�c6����v�����u���Z/��y�
+�X�W���V�����{�썕TA�X��u�]��
+�+i]�9���Gt�����kDVBM��]	V00V�q�M��d�:Y�l���
+�M��${�g?��Dj�@f��X�cM����U�~��ҙXk"�c������
+�/J+gfx��qZ�S5%�=Ag���`|���R���t{H	�wO�8�"277��uZ��٩I�qذa��XnJ7�������X���A��2,5%�`�^�9����z�aP���^�cЩI0vq�^,���l	�,.�[J0�{�q�"8[�Fj��5�K�`l:5	�..؛%S�-���`)���	���0}bbbϯ��D�	CΏ�����ǫ)(�����Y�����n�&��{ս����a�X���س��uh�T
�Y6f�X�dT
���8�7
-��_:?C>&ۙ:>ܙ�Ɔ
+L}6�/a���nc��*dV`��|	��d�3Lf�<��L��10�K�]A�$bc�=��W!�X��
+b��8ξ&wڊ�ֵ�L�[c&hC�VUC@� �O�K01�K�
+��6t��qp�ϙ��2e�|i*h�>�Xk��D+{�
+�Yh��8���r3���*#���j�-'At2E��199y�iT>"⫍?��*&�p6�b�dltD6t}+�,D����Vn=�g���e�kY���!�e|ޔ��ǜ�2��k*#��5	X�l]�$�ڱ])А�
+4��"u�]sD��]K@��<���J@�G��
+�7|jm���w,;��VO`��5&���H`G��s��"��
+t�+P�Q,q4�-�W��9�)K�/���M	�y���@;�+����TѶ(ڶE�v�hj��y�9�X�}���	�q�Ƥ`	쨐6����?P�m���@Ѷ-�</��y�q�����wB�Ÿ
+�TN�I����LLJդ��t}�w��ξ�Ld&4����^�z�Iha�X%�ړp�����H�'�t��\-[��=	��C�˺A����p�j߼|��C�]�z�p�$:>X�T[@zl�-�ѦE$�ﲪ˂=΁��%��������;I��y��q����G������{>u,�����I,M$�%�f���J���!u,���J�f�~���"r�F�Q~�	�Xn�,��I$Гijjj���ek	>�r��G��MG���ne�IW����Z�\�	��p���	r�&�w�%�G`P-7bK8�
�<Pk�ne�/Xb�M&���Эz5��Zп����UM�\c�T0M�e���h�������?�#UU�c���:�M�|�˫�������>����� :�����Ы�/���m<�e�76&�#%��$+��p��ij�_�6p�zg��x���p��(��֣_E��D�ؐ+�8CުZx�E������3/���є�I&I%`8I�rr0Q?4�^�/��*����i���m�_
1��_m�6/���B��A�|Y��#X/{��U����r)~����%ܪ������'��~5�@{�Dy��C�UD
@ԏ
����3���B3Q?4��y�����3$୪%�[�t�tn|��4%`�IR	N���L�
���y��"���3�LOO�A���t�+
+�a�&���:�����%�S�(�Ü�\�ߣm��[��Pe������kF2\�3]����:������H%��f��2�_Z;�|GQ��}�?��ΏUp�i�(��L������
+z�ίK6o�|��j}���֔��If�mtt��L�m+����(��̎�K-��D��T��[A����?���P������9��H�.�9�@�
+�PU��(k׮=�J�8KޞmeI`�K�.j��E
���!W���"�̹��!W5�ꢆ\���`R�q���2���x�Q�E�-���z՟���{��HΣ����9�c�ѴD�{(����K�G�@~Z9���@D~#N�{�$;��F�e���NP�t#��R�9�3�4M�,da�EmY�u���݄���xOЋ)/��_�k>X���VP�c$�57�xO�`����2�^��M��{��U���z�3���elZ�;�H����sւ҄^���/b^�����u�ʩ ���H�%��H�s�p���/t���7.�رc �ؑ�����+W��AZ8����+;�nݺ�.2233�^�"��P	�o߾�F8���r�
+�XYy���pLK������WPĮX�b�
+�XI�=�$H0U�a�ҥsg���/�6�u�Do����IEND�B`�
\ No newline at end of file
diff --git a/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons_hidpi.png b/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons_hidpi.png
index 9547434aee1bdd3b25b319413d8ac4a17c531e35..1979dd167ea54095b328ad3ca96850e7546b56fe 100644
--- a/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons_hidpi.png
+++ b/web/core/assets/vendor/ckeditor/skins/moono-lisa/icons_hidpi.png
@@ -1,39 +1,53 @@
 �PNG
 
-���
IHDR��� ��	�����N:��*IDATx��]�eEy^A#"|P���%FEE�G2��w治0d�uɺ(�5���u�ĀE�*�@H�����e@y�F��@T�Y�l���[������>ݧ��3��}U]�ι���Nw�3��_�ϚT@���2�`����*�}��=������&o����Rn�n���5Rٌ̹B
�Bb�����7o�T�����1s�=ϼ��R����8#q�<���c�X��uxxx����ҵ%wȿp�EO�]��ʕ+_h������*�Su�$�����#HW���-z����3L���7p�6J�>)�ѹs��@���ƨ�[�+��1�bŊ��]#	б7�f����ibK�.gW<Q��/jkiP7e�Z���Ӎ�9s��*��5n���Ϋ1��4��ؒ%K�u‘����-t���x2�QC��F6###��Ɖ�C�74����W̄��ߎ�N��A�5n�^h(>��?�7j���[%�*�#@�b���ٳg�*�?���G��/f������`�����'|�x���tl��~5��J����2�Z�r��yw�"�`aXw�&Z���a��<[�F5���,	e������y��޼�z��'A���5���/^����s��N���]�ҹ7�s
-�?�F�����8j�42���
��[�U���Z�FH�3�s���%�'H�?��L@q\2d# �w��c��2z����9��9/��sH�N.��<���2zľ[��M��:����)�=A`�R�KM�����wE,�p����ּ�ݰ�2��0}u;���B��ܸ�w��~�IWm�+����$t)D��I����Uf"���+o^���<X��(��N�J���M�L�"��o���������������'�|�e5��t�DZ�v`?Z�������#���uυ;����d��t�n������F`
-;�1s��9�{�ۈ%��j0��1���'�!ʊ��n��ϒO���Sin�����>��ǿ���D`[�?;���nc�/^�Z鮝={�p���G�K��.u�����u��x3��A�%�E�4<_�N�6R*�S����������8�~��i�	��Q����t��L���+����x.�V�1������_V�y9��1� K�����n�G��/�g�jz�2�{��,~C�K
�̀z}Y�"mi?]����vZ��u���W<)��X����x��
ȥ�E�LDי@�چ���q���-�s�H*>�6XEK&����ꗆ���ض�4�+&�d|E-?��Or�


����R����P�K����zO �6rǐ��[�q-�H<�8Tn�*_I�r�%�,D�����?��K���+�+Ж����H�>LGe!x?]��]�T矒z@����|%�;Abl�!�I"@�|��oX�hqEɛ���������F!�ׇ�c��?N��/�������������t���[��_�p�C�9900�d�S*�U�y�?�]�q�ԱC9og-5r����`ƟRrϘ��d�d�^�҉������*��)D�L���cJ)��rG���a���k�-���.��Kߨ��@c��ko��s��U�q;�K�o��ٗ�m|L3D=�mz��A�\��q��]윟�����&v�ӚnP����S�9Q�whD�^$��ez��$��=d�sp�TAY�x�K�K�����{n2�\ #�]��! 
!�lo�@-��.f�H���	���<�hm���������Y�._��g��4#Cc�.����C��`{�C �!���=	�b�b	�z�6��v��+g�q�bb\q�T@�e�b|��ڞ!�������z�:���S���?�o3޲|�������wxR�*&��O�����M1�Ʒ���ʕׯ�����7L��WL�Ѓ.�w�	x�cܖ��e|�t���V�m|L['N�M��
��2~�c��]윟8�ߔ��f���Y<�2S?5z���}���9m;�B�p2z���(&���������@4�T?7n|��|��F&��v�K*��9.9�nI���1�n2x�<�ȿ�2�n<��}~�<�����rY��|2v�<?�@��Z��IC��ZP�� ��m2wQ��qzܦ샜F F���ؑ� �%`Vb��R-)�Rw�RY����I(<���_�!<f	[G6���R�������X�lȸ���}����y��Z��<�������ʮ=퇆�^i�9�A]���(@�q������	�>�g�����;fu���J\�Z�[oA-_R�����4޿$;"cT~K��+��|xb�K���!���'A��������������]�`�Ӆ�����7̣_џ���
-��l5�����ի�#��p�ehh訲6/^��#��M��
-g倝��/��g����V�.�8p��']Ʃ��\���
-��ǔʮ|3R|�)&��a/s٫m�����L�k�@@枉�5�O�4�s�{���1w�ܿ�6J��}���QzI����H�YƼ��Km<�	���s��'�B3B�LRu_����@��n����y"���JT٤�����d�����w����Mf,���*�Wα�q�}�৹c��>2�8չ�_�dɫ����V��P3c��暿�j׳�lL��΂�>V��5���T<޲6ZQ�D�_me[NL�
-�r���/�]ydd���6�������
-�g�
�q��~ZV�}l];:��d'r����K�~��8���ul��Y�&.1���0�D���|���BcC �Yv*��T?��TL{e�[�+~v4�+��NG�����lb)S[kl{�n7�D��X7+����6gd!�-5��I�A���`$�n����)�]��.T/���U�%ïJ���L�$��u7��HM���.hZH�7������g�?K�r-�w��ϒ�b|�d���������N@/�^���z����@/�^Pw��@/�^���������ؽ��vyfJF[0YZ�T��͠���<]�9k����V�&�=SG�Z�d�	�CSB`T��������^OD 㫬"“ڜp�	/r�1q�<	�}%R�$M"��A��Ij
-1?ˑgL9w���1��%=<z�(������N"@����q�{��N�3�I!tA�'"�Fw��-����>�5Մ���j���	��L#�t�җ���$e�����?$��E�zes����Y��q���}n-Ƈ���[h[Q�ϩ'����l=M�>EW��LH�9�z�|�|T**d��lb�B�f`<u�op�K�uO/}ӱ���f��`�L�&�~�m���o�!c�k6�w%ȡ���ӱ����M���C����NDO-㇅�b���k����%=w��.��[��c�9����1{�҈��6���b	��"`R��@�t^�]a�gj���秺>��O+#p?�|���yj���)4�� �#�+V�M�����<��!=�m�M���<.�ēt���o	�`;���,�����������^���z�����^01�@/�^���z���������f.�W����u����k� 0)Q�L���5x7o����jᒽG�;���j�qW�`O����O����e�^2�u�uF��_�X���]_������7L�lG^�zb��v�$0�{ �i�k�Nf�Q�-�J�$'�y�����y�J33���י�'���'�e�	)Q|^,W�܋��g]Pz���IqJ	��@홙bRC�<�!H" =�Ux��@JB��(KZ�#)N�������-*m	��=η��ԃeW�H^"���̢�#/QRVW��ؒ��(-)RL���?r������P��@/�
-x��QL�@/�^���z���lO@/p�j�^������P/N:��:��'�`����E�4[&b�J��������R_��i����7��C�r��Y0��70�����������!�-�e���K�s����*���+��$�O�}`�޳n��V2��T��_�J�� ]�|fم�a�K@n�#�!�@mC����u�s�̹�7�sL�(U���^��4�i'5n@�Jz]l'j�A.T��N;9�S���v��Av|���+�/��O�Ƀ?�>�\K�E��Q�s\�>��k������s�7d�?�o�"@��v5f����U��<�����ל�cvhT�H�z��C(mQ���B�B`\��ZU3���!�q��"A�����m��*W�O!�����R�����HB!���C��������l0�ԁ��ͭH�
:��QO�9�j�;289$�C��T�EH���5�Pp��ݎ�E7���$P�	���:Ǽq���D���X�z�s���1��|s��^W֖W1��)%��X�Q)��>�
A
-�����zAx���]�9��MɈ�:��&H�t%1����N���#�$\=�%N�u�Z\�Z �y�����������8�U��b��M�[688x@[�ot:��k1@��n�+�߷wͅ�?�/�	��d�.0�@�e�K��/�Z�O�2��^�����@���&9|�qj#@ρ	v���R�Lݼ�6��ڇ������~�,��J D/�s�d��"� Fs�B P'�D���6�����T�g�M�z��7	W�Z���c�LB�mhz����I]��j
-�ȑ����M���ʖ-[�����Nh�+�<w���裏.����*n�s@K"�|�5����oe��M����/��[�8�����V�:��������,_��� ����kȉ�í���!���s2e�/(

�2⼒���^`�$���B��+���9Wj�e@|�_�����������o;��}7}�>��	��'����Z��l�Ҁ�����]�B-�����m	p���/�e�J�1c_M ��Y�RB���Ј���n���1q�ĸ�����I�CCC�#����
-i�V!�n�l!1�$	�J-=��v�D���o�n_�sV��|B���=��u7�s'������������=u��\J��b7������9In�:��'��b
-r� ߐ���;�&j' �&�E�|��`1��}�5���QC�y��"��RJ��v�)��CJ4k4W	"Pg�$/Ee�B��|�r_c�Yr�Fʾ���-.�h��|�s��������P	�zA2�T� +�V������6$)zAVU�Zq�Ch������������U���_��F���ZGk:�E]zAU��
���0�+
AJ|Ae����_�D�q�z���������� ��#�!PK>�P@W��Ѻn�Z|AL�_`���i�����%��@�n|��z���������f6\o�����;��k���T���I���y��yQ�[TΣ�_$#��S�B��B�g���-��i�ᣫ~5����d`��x�譅���e�l�`e{�}l�s�.������~cT��s'��!�իR�.�ݚN����c��:���Բ�R=ߕ	HO�v<�@����e�h9w��	ٵ�sB�O"����W�B��E yhbp�s��:ԧ��u����@HCe{�֟�A���M�(��.`�iCL�,C3��[�#���������������0��c��D�lS]6����\nyW����jue��Zυlj����'�C�Z��3Ʋp�%>BZ��ٮ!0�2�{���y��o\9�=����
_&&W�!t�obԦc�����bb�f��Z᠞H�u�G/��*���0�o^�B��y�ѱM�����]L�f__��d4�����������F�����	�GT����c��F3p	�����wON����3�Fgx��{��Qf`��t_�F�$������/�	�۰�~ȥ��N�a�����k������k]+����C��`��A��?��0	2�P+�~�����������4��q��o�V�R9�
-�E��݇@���gP�@�8�@�ٙ@�U�/31q�W;2�T������w��Z϶N ��m��.�$&΀:�e�P�1w���}@�]^'�V3�Ε:o��rG����������@�����K�<z��Ҹ������q���E�.@hp�����o9�!�|�e��ϳ�@�C����¥���m��U/�΋�ڻ�݅�'4��W�s����AC��́Z�
-,�i�fo�@k~�ٳgo��}��������������=00P�k�	�1xJE��\�|��kC/���^[�c����Col��۞+O��#�bŊ��0u|m��ޭ���P��ܲ�4Z�q	�Z>�&s�v9�/ר{�@s6�c4�Vy&ߪ��N�5;�j*|��U�U�|��>�����t�v�@q�
�G6�������0����\F�aYo)�^;w��I�����[�'���>�>�<S7�c��������M����L�
-���LBj�␭��9�y�U�j�}���n.��!�v5��Tqc�^�%qY�78�.<�W��
�9�ه`�� Z��J�
Eۺ�Zs��F�k��*�c{�V_[�?�ׅ.�?]A�s�4ʓ,��j�6>(�AE}%Ӯ��D���Rj�D�u��)�I�X�6������m��w�Q����1�]�0{7[���2.�h`S��M�����������R~)o�2����v��������L+��ݼAz��~k^���=���t�|��+7��z�Y�������UW
�<����x��ҵ���=�����~�~��+eK�
-��2���ڭ��Fݻ����iO�nw������9p��w�'��E;.��x� x�s����O;!
r�g�A�:`�9�l��I
�eُ=����e�SϏj������ۼo���o�p׻yo��E��	�E�e����.n�Ndi�&�{M�^pW�d�o��z�^[�_��>���cz��o)�
&_���Ŗ���E/�7 u������X�O��\Z����tzH������������v�u�6��R�4�����b�����R��/^�.|Q7�^�J^��\�u%��zA�����QL[�=SF�h�^ �i��y`��Y^Z���-�J�nP�[����1��u��5���@�N�#�D ����BR�t�O�
-�}-�ә�
-ҕϏ��nې�|�2����vwxխ��>S\�J��e]��Ң���Z�SB`���%��FU]�5d�ǥ�ן[W����T�@�����ȥ'Ė��lGi�EL��������P�/@|�R<��/@|�_�{��"S�g%�����_PF0w�����W׃�D��;{|Alٗ���yk_�������� +�^ ��7�h	�5�z24�@
-.�`ψ/0>~��Ct�˦H}��t:�To��/�/p�ҥ���t����X-��S�U��~��=n��\��
v��C7������ԭ+D�d'�Oj=�@s�������)?َ*�
�t�
-�������P
-�������6d�������U��{wk���n+�e˖���F
l���r��\G���T:����Ͽ�^o7u����ߜuX���RG�|��ya�<i�����l����p3^u����n��%|c댤�'�����*�9�2_����Z#h��.���Φm5[�?�n����6�6�&�'���'y��~xxx�Fh~>���w�|�


�e���q׃��3}�1��
-���h^N���okH>%��ƺܬ����i�Z���4.Xn����S����5
�J�pBJH[D�3A|;w;v��V�L��*�>�����h(�-H���?-v|�؆�����	�jnD�Fu2{��_-=����|�E����?�����������T���<����䈶�j��e��`���G��P����hat3;�98. �;�W��KW��$`w�j�9���򸳁@حG������ݘc:�@*!g}�\.�O��;�|�Yc.���:>�G������>(Ͷ��4"P��@ِ��=ɐv�ӂ@#C0-hn6�Q�E@�[�4�fH;.�{ KB�=���@l�|k���
-�����8.v�NЩ���9�jX�4�.��k���ح��"�o�ff
-�k����%v���k4伐}JsR������@���s�?���{'�X?��?�M���Rb� �?����
M������;T�u\
-L#�g�!��;�-�؀�r����u	��{vAJׄJ;����W�?�2�p	N�sn7|�����!�`H�����I@�{�8
K��_qɏf!��w�m��W^�U����S۩����nx~W��������St�Mک����]0Iz�+�(�vh������������088x��GK��%A����Z��В`�EΡ51u��ĕ����D���X�J����ʫ�=����M��z�&��ֱL�ץ�=���59��^��wj!��?�MY/�L٠9�Q��b҇UmOe�@����T凵 #���B���sA�l�k|xx�%�
-��G����Llbr�:�Ng��0����d^2~�gr��%ϊ���N�9s�c�E�;}�ݞWL��J=���8Q&7q���#\�E(��0W&�M7ǻ��Ae�p�z��nz��ʕ+_�ԋ#�OAYR�hgxH��e�)Tz���m�@���7�u�e�^ۿ �����������
-I'�������3.?��y��t�u��]����Tw�$1u�����phW&P�[��D���,������$r��J"�k��l[F{h�@Ab͞�pm�,f(�N@o�:�����2vU0Z�KR<|��J�h�Z�s�A�]�0������h|�
9��x��u�2)���y{�u�i��<wơZN�$���ƌ�����:;��@�S����jAL�p��g��Ot�M����]b�\uo4���J	hM�hK���E��'��:�쁔*�B�}s�h%1�N����������3���Ti��/@|�_��� ����/�n����������}��� ����/@|�_��� ����	���������n�!�r��Y*W/X��*����o�N���ϟ?�\20%�B*)Ey��=<�aj蓮ݛ�uk���1���d�y@i��ڢւ��%Y�w���U1��b�K!u=։�{���n�K���0n}��-zM��TU���z]�7��1����T�C�ʢ�9+

��������j�����4��N|p�K2
�>�]F�V����by�r�����c�9��'�e}���R�h�1����m�����K�2u�B>�=�:���.����]��d2x���2�/�_�x�~����
-###ϵ�����=0u��J���[��\2&2ߨB@�zzؽ:��a������4�P|'��ު�������޷�=���SJ2�[�G��Gb&�;��7�F6'����)�4�[�9�|�w�ME2p�8�+^�r��<D�yZ�D�C�J8��
-����z�ܒ��� ���r#��&*W3�j��0�������kL�S�!�����.��iDs����~h�k�m�8�M�+B�8��8z�
-y��!�����������p U�'(�;Z?8��~NE�
-�?K;Y�r�J�Y!
�YfYי=�����Nl�Y�'?���k:ɋ�Z�O_�Ė�O9&��U���<�.�e�b�[B���k;/t�}�"���>o�b�,�yDCW��tm-j;o�!�
]M?�g+�F�<.�I�?K:��*z���>�~����ΛBV>�6��}⼘
-�D�.(��B����+�9/�� u^����U�	�'�_[<Ah}�8������� 	.�ފ����?��Z��\h�8}|���z��<M�i�LF~��Qkt���d[N>��}���Ʃ�܈\e-�xϘ�+*��L�meW-��+�����>E[�R4ݐ�E��J �P��	:y��ԯz���<��)�9�,�i7�k�NBA>I��Q���K���������ұ_��'R��
-j�:��<$R�>;���+/"*;�]�<��\K�������"�����=���
�wS�50b{���3:;���u�V�>qT6-]I��d���g�-����������
�i��.����
-c`���	�`�)4�J�!5�z�=`5A����he�uC�8=s\��F�.{�Q�/��������xM/�-"�����%hDN)3��u?:i�k9~��~V�6)�2��+^@�D���q�Pb��F0�@��!�l�m�R@�F�5��*=f���Yo|�Bx ����86/�~�.˞�2��0��j����`�.#����/�J=C �IU~U�������������z����@/�^���z����������`f����������������������������,8蠃�SJ2�N8a�����TL�dK�.�՘�������L�~�U�S7����;�R�	,Z�h�����z�9����c
-���n�;�F]�0��Y�����K��@WK?O��S��Y	��U�f!���������������8���������IEND�B`�
\ No newline at end of file
+���
IHDR��� ��	�����N:��5�IDATx^�	�vWY�Ѷjűu	֊V]b�e��x��~�&_���Ơ����C��|jpI.m��8���.�D�8���$�X!*���Z��$}���x���}�>�����zr�������}sﳿ����_0��ju������{vvvւ���޳�;�i�?��_����9�^�誏���FfKbkkk����ӝ�&�Y����j��Z�
�����2յ�g0&�����'�n5�}W��:�����x��Uq�W|�x1��W=EW����N�`_�>F��{�$ݻj�\xᅟu�=�|���3u<�-�����,
+��:uj�
+��-��x��j�
+�[��/���x�h��5�;�\|�=���`/r3n���\mf#P�C�v�`�� 'O�\����3g�Y�f�fvO��+�.���ͬX�k|��i�]�CH���,ʹs�>���ީ:����,���Ա��Jx
�����߫��׿ۊ�W�E�����W�-�
���o��[�_�!��8qb-�������AA?�9s�G�VLay�ZQ�h�5=I}L�|OBlww��HJL����(�ѷ��Z���	������8�?S���+@�HH���&4K�8��G��d׃��/T�j��X��BX7>{��ת^5CP]���'�_����N���Uo><���hs�x��7���q��V�$�_V�	Ir���V_��	��'h�W_�0��	�4��s�� |�	���Z�GY������U�b�ȳ�o5H�g��p����
+�z��[l��OD�<��$�xի¯��nJ����U12��v���W����z�|���.T�*���d�T��G��l����Շ�~5\̚/1u��zM�S�o5x'�@C��]�9��Ǐ_�ɮk���6�:�<W�����'�T�%����#����
�'� � �`P)Ay�W��շ������X�V�S	�pL�'cN_�YVȋ�~2� Y�d/V�Y� o`0�pU�Ea鶩�bƯR������*�IX�cUo1N�<�4_!G[u���g����y�����!X�k��J��>MP�E����7����ds�����`���Kp���	�΢Xw���u�����:�q���/�r�'Uo1l�8%[/;kŪ3;��Ή�N����$'���-�34g	�Bl{~I�'C�5�5�p*� � ������'دjo��	���/˿��5����s�c&s���<��~�3
+s�|�����/��Dg�h��x=�7��{�C����m�hoo����a��_mן3�7rf�zgnA~U��;[��V‘�Ͷ�k�fA��R��b43n# x&l���<Q�D`M­�-������ς������[w�~?I��O3����wCJ�W�j���&_�e��T��Q��R��Jy���_i3x��[�c_�~f_�g�����5�?�n,�0(�������+0>3�E����s��E�����{����?�q��}��5_��/'^mo_e	���?�d�|���w���%�l������!��8�SAR�s�p�4˿R��0'?e����g	R�3hd��r;v���slV���;Ŀ�Z��L~y{�Ƀ � � ���ժ=�0�MǕ���w�8�����:>TJY�l�w���h�Tu�*ǚ�?�wWBoz��7P��3^!�M���:��Z{PE-�x���y�=#o�Y7����)�ğ0	&�kB~O�g�ޖ�2�������[�_Q�ٱ��π
+8u������i/�_��,���r�n���9�;{��v}��7�^�3
+s��s�y��v�Ǭ��$�ԍۏx��G|�܋��I�x����oP=$J���۾�x_G����u�C,ٷ��A���r����wI��M�~�رO�q���\X�;]՜[ٮ��ώ�	��{炁�c�+��l7�yw���X��C��C��F� � � X�M��-����[��^Tc�w�-�S�}�[� �71 �M�5��Ą����y'����=����u�pY2����ӧ?�u}@��Fh�sbb��˜/�i�KH�>`���OLT��M��?�
+pڝ���	z�^��@	���u���3����Ĝ�������_��Ĝ�ƺ�*3_�����>��o�t;W!!˞�X�%��,sbb��B�>th��'d�sx7K�n/�W&��sbb�ެ�������x#ӿ�Q���91I%
+[����kys�=1����R,Du��f��z/��XЗ"0�kNL� � � ���R�?��o������z���z��UCG�v��xL�M��%�Hի�A�����N�-�oQ�jP�T�j��ת�j�z��UL�%Y��X�ת��TT��`M{|�����+P��V6�N�u�Yh*⬌����z��=-��0<|ԟ�F��K	���T�����k�j�����د�~/)}�C?C������c!�V��U��˿�����T�0I�@Tg����%p��[��/�Җ9s��?����j��������Ē�֯������$�V˹s�>I�
�f�����rX�G�y�\��F����	^sb/�m�1��!๶�aI��$r��_�����&�?��<?%^'%^G�d�K@�
+��pj� � � �{'�������7��OE�����y�[�������j�Z��p��W�?������G��r����Q������M����_�¿�v�Q��YcK����s�A�%��FTǠ�۴o����&��t�+Em���}�V�j{�K��@��������V[d�UΉ�N�F������ 
+	TdW��-���G����_r�
�Q3U)�~��{�hJ0�}%���TL�VŇ,�P;�Q�ƶ��w\�-�c�ׇ�,�㟪^��'O�p�yU���z�Tn��>��OWPli��:%��v?{K�{T'�>f�����x��X:5K�p�)a6/��/��/V�,4Bpۊkt����gо�q��d�}{7
�ɋu�o�?��Ylٞ����a�����M��ߏ��c�5Ίt�K���G�ON���<e���^��@NJ�;w.�Os� � �`#���ꅿ�����'��I�1�U����O���Щ�������������0�ki3Kp4�zq��o�O��,IБ��@`&�Z�~Zǫ�{��b��u<��e��tS��'����Ş����^�H��䋎�Dx�����YJ�A�?��z�����%Q
+�Yi�]�;cH�J�$�7����((����3\���4����=Q��~�ҭ��R�� ����K	�(���>	�6C�j?��T���ڷ_����L���`���/ßj?��T���ڷ@�k�j�������������j|@
�����7� � hɝ��㼀�L���!	��8/h��2�~������xJP�Ӿ8/��8/�N��4���pI��R��xx&���dN���1�$(>�R�%��>�OBǽ���Ov0�~�������S�';�j?��=�~�����L��\�j�AA�}������;w��8[���h���O����B������G4��#/a6�or=	Svww��:9L�=U����M��'��z��<\�7�����W˜�W:���K?[u	>���jI=Cu���j��mS�ի�2+�^�i���>�k���B�;��:��8����`���p�:�l���W�ՙDP�?W���^FoP�x����9��o>}0 �Ϛ����,��������_��>	�٫�j3+�yح�-�?+���C<h��  ��m��,������ �d5m��J<F�'��%�1���x 9�������Ds�:f �����q�x�1�7�9�e�%���	}$����ς=�!�^�]�!���KQm(x[W�����t�9�~�ϭ�#�zbU�L�q�y/t�D��A�����_m:0[�ɏ�ƚ���t��{���I�k�����/+۳���S��د�1s�uL��gv�Nǎ@E[�kt�����1��;_�1���/�L�m���O���������!�$����>�����/���v=�f_~��d�U�㞓#��?Z��X�/b�b��̫^˦��Ɔr����,� � ��9��&��eؔ>D������
��okB���,������ň��@(��p:�⼠I ��$� �� � ��~��%W~��d���e�?;�T0���1�o���Vδ$���ovvH�M���/+�4HI�>���vS�_�n��N��8�:��ͫ���شU�,)��n�R�x[�~=���L����X(Ve:�j�Պ���'�֦PJ��Nվ�8����A�O��X��w�k�w�K	��K�K
+��E��j<~��%Q}�w�`_K� L�����:���PJ��J+T�俨��/���CI��F�k��x}��}5P�
+����Y�'����J3�P�$ԯI����V)�&�$}���>�w�z?�j{��g���h����:��t?E�o5��#�ɸ�*9~�x�� � ���v�TH���8/�N����?�j�Պ���{�KSJ�t��K�K
+��E��
+W~��%Q}�w�`_!Q� L�uB/��	t()���V�D�QA�y_��}���)�%����J5P�
+��k�����J3�P�$ԯI ��`%�}�(q^AA�8�{���YR4^5�[4^�A�ln�x�`n�xA]��E�uP��E�A�B�O@ƈ�o�j�D�}�1m�trc]��R;�騶_�Sz?Y�[R4~���<���A
��t�%�[4^5�[4^�A�ln�x�`n�xAAAТ��r�}5�%IVɴ��@�����
+�l���� F�N����e���Sq֠ӯ���f3�<o3�sd�g�-��i�4���p� (���X�~t`�-H֊Y��}'O�|�����2(��|�v�fd㰤��c�,�z��e�db>n��f�|Et6N� a�f�S�3�T�l�����c߅�i���Z��%�OJL��z����X���#tP''6�B�e���Q���n}�WuRb���a���Ig�]�N(Xf[�/���u�vW���[�<3�"�M��4�N��@������$X���;�C|�5~��V�!��M@�	�̟��
+��W�{t��{p�������j��?�+���ˉ�� � � 
*������M�>X�����z��o����i�Y!O	����-��,޹O"����>��x?;LL�7�b	�-P�%OV>�� ,2�hU�R0)���_k�����?9����Ft| ����+��T�>�p/�u��Q�W�i�	��A|ߨ-������?�~�T���~6|~ui��m7
+����#	��V��0���ЇR�h�^S�πO��
+�����q�H�@4�����$� � ����>��,��H�����tl#X�P-;s��tl#X��V����,�������=���Y�<�ۯ�/��/��	�d1��yEkw�8�����l^��m�
������m���I�ܣ$������6�O�m��ƌۖ�ӵ[��o��S����}���ά	�%ˉ�|�������|4r�*�D@�O����}ZG,b
+#{��݂x�����Ch�7����+�-�v�LZ�ZlK:	��*j?lAS�=?[�0�K.�d�,�u�m����xb���|dq��+���%��������4ؤJ���3p�رe~$+a�oB'N�8??��
+�ڬ����ܞ�'β�AAAL���|��GZN�5'�����{�x�>�\Bj��TB����01���%�@E�|�:`�VL����`RگX��}�P��t�Z~��?I��p/kD��'P��<G�ߢ�}'��׊�f��FQ��?G��0��+�;<<Lo�Xtr�ΰ���S�g�����=�jV`1f+>��}}4,���A��>���>�z�E�}|B|Vx_��X���o�{E��� � � �o���{~�s�E��"��Y<��ϼG0���:&T+�ˢ�H���O=^}ۏ�n4t���^����%<��:ے+�{��>	��|�)h�$�evBg������Xп��>��&ꟁ�]˘��uF������x������{M���	�������|
+�U�o;pz^K��͌�9���
+p<%�%�e�k��O%���v�ф6�F��o���=� � � >~�A�/^}�v<%�������^''���-���-/����R��:�6�F�vpeA�m����a�C�DJ0Ƥ%P+>��x��:������ۺCD�u�4>T���x4���%���-/���R�j4�h�P�F�,9%�?�ܧ�x��n��KII��~ � � ��c����ߗ�:(�+�c���`��1�������h�yn�xP�T#
+�L���ɶ�����0ġO"%c҃��DJ�E�E�l,4��[�'�o0>>Tt�ʉ�L)@I��`��PQA-@�)U[�Fs�����8/� � � �o������ߧ~F��n/}��g4�V��h�q���`4Zp�K4N&՘�"�����z)�8YjB|)�:'�:� %^G�Y���շu+R�~��4�g߸�[�`С�~�QGcE��hzN��5�[4^(�yAAAAP������)�c�����Ѩ�ZQ?�Qǵ�~�,Zx�K4N5��Ȅ+�l�^�h�,j��DJ0Ƥ'��R�H�סh���%��ױ�~�I%��jE�V��Ɗ��F��t���R�j4�h�P�� � � ���x��ǔ]W�՗���=���o��x����~����&϶�gZ�������j}w��OF�푗�ϙ��dl��hο�fv�ص%�U�PBA���'�S�::J%��U�zڿ1J+�8\1����T�K�.eS�oaT
�շ������{���X����g�%*��+�z-�9�����5�����6��\!�eu݆���t��|�59��x;u^#>�Gگ��ޗ��g���s�Q�t�8R,F{�>Ծ�֑��&NԾ3P+c�Ծ�}���N�T_E�[������}��>O:��DvFAAAC�?�O������:��M�A[�;�R{���A)�����=E����n"啘
+W+%}[��_��c^}ۮ�-�@&@R8�rhc�-@���\{�-���ѧz�•��̃�c�n���U�NC�����L�n
Pب�J�/�Y�l58�j%��@Z�`L�[l�n5(	l~:zX~\���oI�$5#�I����[�R�I%�(ǎkF�u<� � � (�ʶ+�g��_��:�/�6����yDT�̀�}}b:�_�[0[5p�ٕ���`L�gA��VGR	`9}E��>�݂mW�fP��>�O"���S?G�N�3�[���A�8[M��yOȾS���K�)�9�9��`�Td���޾��
��S�[�Y�3V�XB�����{����z_�9IM�P��5Te47\	�zAA�F��s�ﯨc��:��dW!="��������;	`r�v���R�@�����=���ڿ1���o�H�a��P��z��N�:9?��^�5PN\��[qΏ�m��@u�۔ڥ����U`�~�M�N��M��o��R�U��z��Klcl|Ɗ.}�"�ge1,؝��|�QAA�aP�Gy�)������T��ok9ߕ��11��|aZ���
+(���N�?jϑK`c��X��~,�/���.��-H�xSK	��ɭ���l�c�+�*��\��rz�Q}��>�O��:?�4�&��S$����x�Ne�;Ut>��\��Q{H�x^T�;����T���q�I@���wsq�ĉu�_E�� � �`vR�V-����?������ݑ��F����&���ޯ������d������~	���cE�{����?_�K�F�@q�
+�
���z��䀮/ѦDmڒl*	\�>��.��o&ъ��*�����Rm	�J�l�m[�5��MnPCo��F���u=o{�j����j�-x%�}�:��m��{�/�!F�n�>S��NP�`;UnC_J>T7+�=P?�g�@���lUo6��샧V@�a�:A0<Pxi���Uu���M�y�����)�$��4z�/CS�9��������d:oD�Xk���oTgch�hߊ��ʔ}[|6��}���b+����X��$�oh|��վ�����ڌe�wlo�W���l-�g�j�G� ���I�l�]�H�
��H�H�S�d.��Ja�~�����Y�/ArR�;����}&��>*I�:	�&쏴�f��WJ���tr���vAAA5(�i�����2՟_OU�U4��Mޡ��� ,Ŧ��M����=���M���ό}�$j���Ŕo���u��w�4zɶ����w�
+���X���g!�m�}6۷%�~;Љ�O%7����O�:�%W��o��@��[ͽ"�L�������T����}��ώ��~	���E���%կvꗔ��(ٗ��
+J����+C�ߗ��Ɠ���.���w꽢�z���d�����R�(�{�	���mO�+������+��x�6���G�WJ�8g��{��{�����R*�5�=D�	���28�C�q=����^Q��&������s	X������}jP{�{���0�����oV1?sBW�?":�%xM`0�p=B�h"�goR�H� � ���v�(����F��	�TUBk��9/(�������>
R��O��b�77���y���Vȫ��{^��P\���:!�3�Jnb�X��@��V+$V��+8.N)k��U�R�<8�P�-4�~�i�Z���R��E��Bi�DѾ��-�񒾎�}�Ձ�+����>��B�a)a���?�a����}�����{{���
+h�x�CIu��Ý���������j��_%��*޾����8W�b?�~����M@
���׸�k�?4���[u�6N��
+:!�O�3W�J�=Vٳ"�~�������������
+=/���Ǐ� 	� � Jl�����G�T[l�=/�����N|� AuK�@��jŁ,巚{E���|A1�%��xY�@ɾ4�Q�
+
+W����WJ�*8�0�V}�+���u���b_�p�����E��Nj
+(H��O�/�pK��W9�:~�8�/�9�D3O���}��x�*������ � 6�vs^����l伀5__�OU�'�:/��ܹ����H����t^�����(�����8�j�ʿ�����w;���ڿZ����X:����&ց3���T��VH�@5�Wp\�R���P��lSt����OC�'� >P����XJ�4^�h_R(��(ڗtm��OѾ�}k?ђ,�?\�������Ce�}1åNj
+K��/*�0�7>վStVJ�گgPr��8��e��*y�1�?�j{�G��z?������LOg�ʶ���1�[�?W��}}^�\!� � ���r�j�jφ���y͌o��*�h��~TQ�[�%�\���sp���[�f��+��:M��&دomm�Ʈ����Z�o��I���]�	4�����`3|����h_v�eT�E��f
+�P�E�e~�ov8K��^��Z�q��:s��-���R6���B�7��_R�E��~�r�b䷨�"��z�`o�������.���S��%�Qx�p3o���ș�}xx����Z�c�G�g�K�ϳ���mڗł�h�&��T]��|ў�����	6�/u,	ip<���V]�_�7��E[���~��`�	��~�����>��ې��cA	���xpb+��7���|��u���ZQ?@u,��P��� I%����>]ugG�~ض��%����l���+q߼�@���f�����q{�rod�O�g�رc����Ol�;-���?� � �`�R�����e���Y�=��^�K�G�o�^TY�&T�o�l�����[���J�g\�?;�*>jX��^-�-��
+��Y��_�^g���̸�._�?;�@گ�C���W����| �W��k�9�f<7��r���zN�?�R�������P�������韝\�K�]f'�����M�o����s0���/�T�����gARe�\����gm�"��e���i�S���'�JHǽ�*����ݿ�q���X�������D.;�ׄ��Z�59�j�ӫE��`Yti�n�^ӧW�%��4�;�z�O��V;�꫿# ;.s6�����))�� � �N�]�D['8��:ޢJ����ܳLQ���N�?�
+��$�_���+~��'���/o.P���`(�o��_*P�v$������������ޗ����){�{���d�pn�H��N�"��d9�Ztis��q����ޗ�g'(�?;���?Y��������@�/���f�럝\ Mt1r	��[l�fd���1���	'(׿& �#�R}}�m��޽�a�8�E�ub^��??P	l��"珫��Y�Ztis�T�[�d7x`�8nFl��K���S-ϳ����w>�4J9�}����~GV�W/� � q�̙��$��,K���}�������>�g�\۪���Q08�Y�I:����jd���x�I	 8K�h�x
Zʭ��|lp��T����`�
+؃�t�-��=W'��z�sП�gA�c�A�E�v��R7�1�����*�{Fn�{ڼJ^�u<%��@��2������ ���Kʗks}��9YRp���~���a>1�{۔�^�@�c�;_��Z�N�&�B�O��r�ئX�W}b��.�@�A+�T��'O�|�Q�jߥ����]�?x|��c�DLj����l��ly��K�j������y۔�^���o}�Cg~�'p�W|����ڟ�d��g�^ф��,�wX�[�9BiF�9�����(1����?��	PR��\ۗ�uL�dQ��q_.!^5NAAt������^�V�|
(�O@���=����N������'�nrc�fs�,I��/.
a��:�Ǭ�����-�LJB�{c�}٫��%:W�g
�����,��?�.|f�������|�HѶ=���xJ�:�ʩ����^����'�G9gK���/Q�LbI���9YR���(�q�[��3�sܯH��E
�:>H����8;�z>	�
���bA�6g^�>|�
+��<�3T��ޢ��.��j��@���1�+Aǩ�І��~��y�^R��s&:��|���C����r���3���h��s����,%VAs�JnBYj�LW��)�	u(��*�
xI`��
.���%U~ϵ�\��4Nu�����U�AA�$��p�*����d�����k>)g�lp�����_��|lp�{-�apN	��N|����2{�E؎����m��>*����0	֓U?�/ٞ��4�������M�H͒y�5�%�#�f��*�!,�@������N��*���Z��c'�:���s	�q� � ��C���׏v|��v����؎�4LNb�x&%��������v��C��$�����[����|�߁3�K>h|�v'>_��/�
+��Wr�R�d�~L)M�CiF�T�l��HC�opY���(��{���z?�q��C︯?��'� � >��_D��~�I�뷷��l�n������V�Ǩ�llmm=�9A�4庶�e�A�}���9z�8�o���c�^����9y{��ߢ0�����M�{{{�[Č?��3��B�hlW�����-0b��q�B���g���/�R��L�E�J�n���^*{�U8�z5�|���êײ���mj�Q�Z��;T_��,�Uٞ��Uox�������t�[�Z2�\���W�`1Ӷ�2�[C%����������%�>MS�&��V�!�
+�~���i�S�5~�(��
+���k�1�[C�vpŃs�ĉg��4x3�m�[c���/�&�z��={����^T��ܹs���|�����
���������fl����ՠ~ �f�%��A����cǾR���������7U/�-�7�1�P���gI�=�׋�:V?�����h�dR�v�a"��U/����]�k�	�mA~���0��t�w���~��?
-��H��U��&/��čC�iܧ�q�������8���p3�e��z����%:��
+��ߚ����y���.��`��?��Y�/�����Un��Dp�J�v��C��R=������ڮ1/�9�y ����_���W�����6� � ���˪��ׯ:9�\�o)�z�uꈞ���?���7��W�����6!��+7;|�Or6C��,5�>���הn��ϾS�W%����>�h����r���ܘ�C�P���?(��a�j
����b	̭�Nh����kE��`������bz�
+֫5h
+�E=�@W�<��׾~�����}�HU�+���>���T��KQ`1����?(��R똅L�WZ�!����+P�@���������	
q���ת�@�گ�N��*��ھ��c5�����;���9T�\?�te� � � ���s��m�����:mz�?��E�����Y�����>(�l[����W�PM��/�?{{{��:jQ�ꪫ>�zZ�'a���AP��շ5��D��&OT�՘��X���K�*N��ۚ�`O�C�?�l{_�N��3%�1�ߧ1���0@����o^���ls\�c��\���>�X):N%�q���XY�2�K�b��*۾k���oY߻TNj%u���Ŝ��(��3��{�پE'�{�-b�;��d]�xU����}���ȏ�!��2	��䰠W��0�W�x5��W`Hd��e�$,��X	{�=bL�Il&�~$;~��S�/� � � Fs���
�+��mT=X��Y��/���>�Y��&|D�)����/g�3I$��'�3�hP$����g�&�c5U0^!�*�{@��f]^g�X%��%r���b��㜤�xUiy��;�)}��%�L�(���۾���|��9�c�Z��������8ζ�9� 4V3�A���˜����y�wF�U	�#���/C�F��b���C
(��߈L�$+�0���U'E��&��o�[�-?���_��9\����?#:��~�L��x5X:���a&�@2��j�AAAA�F�4u�8/8"q^�	V*�؎��g��z�&�|�l�yAAR	bfg��<�����Ɖ���v*�� � � �`Ӝ����>"/���}D}�G���G��V|Qs�XY���<��c9}e�W�M�G��rY���� � � ��=�A�L�7�K/����������o0_|�ڙ��MѠ^`��c��u�
+l��`��G�3E��`.����N�ض��<�9Ϲg�x�I���v2Ŷ��:Òx�I�n�}�L�ma�DgXo;�1u2Ŷ�Nt�%񶓘�d�m����je�� � � � ����8���:5�����IEND�B`�
\ No newline at end of file
diff --git a/web/core/composer.json b/web/core/composer.json
index 020614462626257d9a627fc315b19b929948d3a9..48b445b82282e047ec4c7cab0338a4eb30172843 100644
--- a/web/core/composer.json
+++ b/web/core/composer.json
@@ -42,15 +42,16 @@
         "stack/builder": "^1.0",
         "egulias/email-validator": "^2.0",
         "masterminds/html5": "^2.1",
-        "symfony/psr-http-message-bridge": "^1.0",
+        "symfony/psr-http-message-bridge": "^1.1.2",
         "zendframework/zend-diactoros": "^1.1",
         "composer/semver": "^1.0",
         "paragonie/random_compat": "^1.0|^2.0|^9.99.99",
         "asm89/stack-cors": "^1.1",
-        "pear/archive_tar": "^1.4"
+        "pear/archive_tar": "^1.4.9"
     },
     "conflict": {
-        "drush/drush": "<8.1.10"
+        "drush/drush": "<8.1.10",
+        "symfony/dom-crawler": ">=4"
     },
     "require-dev": {
         "behat/mink": "1.7.x-dev",
diff --git a/web/core/core.libraries.yml b/web/core/core.libraries.yml
index 523559f8f2c88580e7cf26295e4579bf5449e769..d9025e5c96d814056c0fbe2a6e8f0aa59d99dbbc 100644
--- a/web/core/core.libraries.yml
+++ b/web/core/core.libraries.yml
@@ -24,10 +24,10 @@ classList:
 
 ckeditor:
   remote: https://github.com/ckeditor/ckeditor-dev
-  version: "4.11.3"
+  version: "4.11.4"
   license:
     name: GNU-GPL-2.0-or-later
-    url: https://github.com/ckeditor/ckeditor-dev/blob/4.11.3/LICENSE.md
+    url: https://github.com/ckeditor/ckeditor-dev/blob/4.11.4/LICENSE.md
     gpl-compatible: true
   js:
     assets/vendor/ckeditor/ckeditor.js: { preprocess: false, minified: true }
diff --git a/web/core/includes/install.core.inc b/web/core/includes/install.core.inc
index 48cc8fe50f922840566a4e8198d0a00c13759816..d4e51abc97400076ad1191d6c1989b9e58d1e299 100644
--- a/web/core/includes/install.core.inc
+++ b/web/core/includes/install.core.inc
@@ -426,10 +426,9 @@ function install_begin_request($class_loader, &$install_state) {
   }
   $GLOBALS['conf']['container_service_providers']['InstallerConfigOverride'] = 'Drupal\Core\Installer\ConfigOverride';
 
-  // Only allow dumping the container once the hash salt has been created. Note,
-  // InstallerKernel::createFromRequest() is not used because Settings is
+  // Note, InstallerKernel::createFromRequest() is not used because Settings is
   // already initialized.
-  $kernel = new InstallerKernel($environment, $class_loader, (bool) Settings::get('hash_salt', FALSE));
+  $kernel = new InstallerKernel($environment, $class_loader, FALSE);
   $kernel::bootEnvironment();
   $kernel->setSitePath($site_path);
   $kernel->boot();
@@ -758,7 +757,8 @@ function install_tasks($install_state) {
   // 'install_import_translations' task. Import when a non-English language is
   // available and selected. Also we will need translations even if the
   // installer language is English but there are other languages on the system.
-  $needs_translations = (count($install_state['translations']) > 1 && !empty($install_state['parameters']['langcode']) && $install_state['parameters']['langcode'] != 'en') || \Drupal::languageManager()->isMultilingual();
+  $locale_module_installed = \Drupal::moduleHandler()->moduleExists('locale');
+  $needs_translations = $locale_module_installed && ((count($install_state['translations']) > 1 && !empty($install_state['parameters']['langcode']) && $install_state['parameters']['langcode'] != 'en') || \Drupal::languageManager()->isMultilingual());
   // Determine whether a translation file must be downloaded during the
   // 'install_download_translation' task. Download when a non-English language
   // is selected, but no translation is yet in the translations directory.
diff --git a/web/core/includes/update.inc b/web/core/includes/update.inc
index 2021a6623144c3c1248610e05d3ad17cbffbc869..1299044427b29f814c8944444bd90978496cae15 100644
--- a/web/core/includes/update.inc
+++ b/web/core/includes/update.inc
@@ -58,8 +58,7 @@ function update_check_incompatibility($name, $type = 'module') {
     $file = $themes[$name];
   }
   if (!isset($file)
-      || !isset($file->info['core'])
-      || $file->info['core'] != \Drupal::CORE_COMPATIBILITY
+      || $file->info['core_incompatible']
       || version_compare(phpversion(), $file->info['php']) < 0) {
     return TRUE;
   }
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index 2ff03eff762e8c81e2590f93320074286034c837..1bc5ec0767d2398c6807e7b53f8602dd2198c017 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -82,7 +82,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.7.5';
+  const VERSION = '8.7.11';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Component/Utility/Random.php b/web/core/lib/Drupal/Component/Utility/Random.php
index d1f25ff36c62278b2ca64159b3e54900f567da59..467ac9731632a0eaee91b8249dec330b123727d9 100644
--- a/web/core/lib/Drupal/Component/Utility/Random.php
+++ b/web/core/lib/Drupal/Component/Utility/Random.php
@@ -264,8 +264,10 @@ public function paragraphs($paragraph_count = 12) {
    *
    * @param string $destination
    *   The absolute file path where the image should be stored.
-   * @param int $min_resolution
-   * @param int $max_resolution
+   * @param string $min_resolution
+   *   The minimum resolution for the image. For example, '400x300'.
+   * @param string $max_resolution
+   *   The maximum resolution for the image. For example, '800x600'.
    *
    * @return string
    *   Path to image file.
diff --git a/web/core/lib/Drupal/Core/Access/AccessResult.php b/web/core/lib/Drupal/Core/Access/AccessResult.php
index 3abbf331015bf4f4a03d8d5b6f8bfe0efd506481..078c8eed075071d5b5ec1f96f1cd06fcc33426c9 100644
--- a/web/core/lib/Drupal/Core/Access/AccessResult.php
+++ b/web/core/lib/Drupal/Core/Access/AccessResult.php
@@ -32,7 +32,7 @@ abstract class AccessResult implements AccessResultInterface, RefinableCacheable
    * Creates an AccessResultInterface object with isNeutral() === TRUE.
    *
    * @param string|null $reason
-   *   (optional) The reason why access is forbidden. Intended for developers,
+   *   (optional) The reason why access is neutral. Intended for developers,
    *   hence not translatable.
    *
    * @return \Drupal\Core\Access\AccessResultNeutral
diff --git a/web/core/lib/Drupal/Core/Ajax/AjaxResponse.php b/web/core/lib/Drupal/Core/Ajax/AjaxResponse.php
index 4d1c123348edea6f523dec32c6a604c88398321c..d8a485d91c90bb8c976d83251a202b9be52bf76e 100644
--- a/web/core/lib/Drupal/Core/Ajax/AjaxResponse.php
+++ b/web/core/lib/Drupal/Core/Ajax/AjaxResponse.php
@@ -58,8 +58,8 @@ public function addCommand(CommandInterface $command, $prepend = FALSE) {
   /**
    * Gets all AJAX commands.
    *
-   * @return \Drupal\Core\Ajax\CommandInterface[]
-   *   Returns all previously added AJAX commands.
+   * @return array
+   *   Returns render arrays for all previously added commands.
    */
   public function &getCommands() {
     return $this->commands;
diff --git a/web/core/lib/Drupal/Core/Archiver/Tar.php b/web/core/lib/Drupal/Core/Archiver/Tar.php
index 3b33dddfe4d3ef1643004a59840e99a1508c05a5..ecc62abd8f8ad22666d15c27ba4d7894524db848 100644
--- a/web/core/lib/Drupal/Core/Archiver/Tar.php
+++ b/web/core/lib/Drupal/Core/Archiver/Tar.php
@@ -54,10 +54,10 @@ public function remove($file_path) {
    */
   public function extract($path, array $files = []) {
     if ($files) {
-      $this->tar->extractList($files, $path);
+      $this->tar->extractList($files, $path, '', FALSE, FALSE);
     }
     else {
-      $this->tar->extract($path);
+      $this->tar->extract($path, FALSE, FALSE);
     }
 
     return $this;
diff --git a/web/core/lib/Drupal/Core/Composer/Composer.php b/web/core/lib/Drupal/Core/Composer/Composer.php
index acdf6faa9c2f80a30ae9313c00a8fa35e047be09..de79f7aab6a51c22c875a58269bd33d52281b3c7 100644
--- a/web/core/lib/Drupal/Core/Composer/Composer.php
+++ b/web/core/lib/Drupal/Core/Composer/Composer.php
@@ -71,7 +71,7 @@ class Composer {
     'symfony/validator' => ['Tests', 'Resources'],
     'symfony/yaml' => ['Tests'],
     'symfony-cmf/routing' => ['Test', 'Tests'],
-    'twig/twig' => ['doc', 'ext', 'test'],
+    'twig/twig' => ['doc', 'ext', 'test', 'tests'],
   ];
 
   /**
diff --git a/web/core/lib/Drupal/Core/Condition/ConditionManager.php b/web/core/lib/Drupal/Core/Condition/ConditionManager.php
index 89fe216a44131bca41eeda8158652bee4438389d..2bacf2a0e93328922ff25622f34f2c28240c9082 100644
--- a/web/core/lib/Drupal/Core/Condition/ConditionManager.php
+++ b/web/core/lib/Drupal/Core/Condition/ConditionManager.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Plugin\CategorizingPluginManagerInterface;
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Executable\ExecutableException;
 use Drupal\Core\Executable\ExecutableManagerInterface;
 use Drupal\Core\Executable\ExecutableInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -71,8 +72,11 @@ public function createInstance($plugin_id, array $configuration = []) {
    * {@inheritdoc}
    */
   public function execute(ExecutableInterface $condition) {
-    $result = $condition->evaluate();
-    return $condition->isNegated() ? !$result : $result;
+    if ($condition instanceof ConditionInterface) {
+      $result = $condition->evaluate();
+      return $condition->isNegated() ? !$result : $result;
+    }
+    throw new ExecutableException("This manager object can only execute condition plugins");
   }
 
 }
diff --git a/web/core/lib/Drupal/Core/Condition/ConditionPluginBase.php b/web/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
index b5134fb51dae1db1c3dc60b12a67ea5f31433cdc..48d6cc64faed72cae611b4c0e5780c529c8a922c 100644
--- a/web/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
+++ b/web/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
@@ -24,7 +24,7 @@ abstract class ConditionPluginBase extends ExecutablePluginBase implements Condi
   /**
    * The condition manager to proxy execute calls through.
    *
-   * @var \Drupal\Core\Executable\ExecutableInterface
+   * @var \Drupal\Core\Executable\ExecutableManagerInterface
    */
   protected $executableManager;
 
diff --git a/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php b/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
index 37e5fb1aa87ba8fb953aecc87ea372956a458fab..571b9914250ad7edf33f9771f474862242c03d0a 100644
--- a/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
+++ b/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityUpdater.php
@@ -11,8 +11,11 @@
  *
  * Use this in a post update function like so:
  * @code
- * // Update the dependencies of all Vocabulary configuration entities.
- * \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'taxonomy_vocabulary');
+ * // Ensure Taxonomy module installed before trying to update vocabularies.
+ * if (\Drupal::moduleHandler()->moduleExists('taxonomy')) {
+ *   // Update the dependencies of all Vocabulary configuration entities.
+ *   \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'taxonomy_vocabulary');
+ * }
  * @endcode
  *
  * The number of entities processed in each batch is determined by the
@@ -65,6 +68,9 @@ public static function create(ContainerInterface $container) {
    *   Stores information for batch updates.
    * @param string $entity_type_id
    *   The configuration entity type ID. For example, 'view' or 'vocabulary'.
+   *   The calling code should ensure that the entity type exists beforehand
+   *   (i.e., by checking that the entity type is defined or that the module
+   *   that provides it is installed).
    * @param callable $callback
    *   (optional) A callback to determine if a configuration entity should be
    *   saved. The callback will be passed each entity of the provided type that
diff --git a/web/core/lib/Drupal/Core/Database/StatementPrefetch.php b/web/core/lib/Drupal/Core/Database/StatementPrefetch.php
index fb7b0b4e0a03d2ae281ee64af5b66c57caf618fb..814653b3ce2bcded8ae0236d7236e0810c133d70 100644
--- a/web/core/lib/Drupal/Core/Database/StatementPrefetch.php
+++ b/web/core/lib/Drupal/Core/Database/StatementPrefetch.php
@@ -282,7 +282,7 @@ public function current() {
         case \PDO::FETCH_OBJ:
           return (object) $this->currentRow;
         case \PDO::FETCH_CLASS | \PDO::FETCH_CLASSTYPE:
-          $class_name = array_unshift($this->currentRow);
+          $class_name = array_shift($this->currentRow);
           // Deliberate no break.
         case \PDO::FETCH_CLASS:
           if (!isset($class_name)) {
diff --git a/web/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/web/core/lib/Drupal/Core/Datetime/Element/Datetime.php
index 118e8263fc347784349c979e4edfb382e9e7b9db..51d9266ec95e1db3827fdd259ad03dbcef3be171 100644
--- a/web/core/lib/Drupal/Core/Datetime/Element/Datetime.php
+++ b/web/core/lib/Drupal/Core/Datetime/Element/Datetime.php
@@ -397,7 +397,7 @@ public static function formatExample($format) {
    * The format is important because these elements will not work with any other
    * format.
    *
-   * @param string $element
+   * @param array $element
    *   The $element to assess.
    *
    * @return string
@@ -424,7 +424,7 @@ protected static function getHtml5DateFormat($element) {
    * The format is important because these elements will not work with any other
    * format.
    *
-   * @param string $element
+   * @param array $element
    *   The $element to assess.
    *
    * @return string
diff --git a/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php b/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php
index b3472a34c10d5a60a23a31d1f044696a8baa9799..def00d7b31d482a3ba12ff69f89b0bc19ade5d37 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityStorageBase.php
@@ -256,6 +256,7 @@ public function load($id) {
    */
   public function loadMultiple(array $ids = NULL) {
     $entities = [];
+    $preloaded_entities = [];
 
     // Create a new variable which is either a prepared version of the $ids
     // array for later comparison with the entity cache, or FALSE if no $ids
@@ -271,16 +272,23 @@ public function loadMultiple(array $ids = NULL) {
       $ids = array_keys(array_diff_key($flipped_ids, $entities));
     }
 
-    // Gather entities from a 'preload' method. This method can invoke a hook to
-    // be used by modules that need, for example, to swap the default revision
-    // of an entity with a different one. Even though the base entity storage
-    // class does not actually invoke any preload hooks, we need to call the
-    // method here so we can add the pre-loaded entity objects to the static
-    // cache below.
-    $preloaded_entities = $this->preLoad($ids);
+    // Try to gather any remaining entities from a 'preload' method. This method
+    // can invoke a hook to be used by modules that need, for example, to swap
+    // the default revision of an entity with a different one. Even though the
+    // base entity storage class does not actually invoke any preload hooks, we
+    // need to call the method here so we can add the pre-loaded entity objects
+    // to the static cache below. If all the entities were fetched from the
+    // static cache, skip this step.
+    if ($ids === NULL || $ids) {
+      $preloaded_entities = $this->preLoad($ids);
+    }
     if (!empty($preloaded_entities)) {
       $entities += $preloaded_entities;
 
+      // If any entities were pre-loaded, remove them from the IDs still to
+      // load.
+      $ids = array_keys(array_diff_key($flipped_ids, $entities));
+
       // Add pre-loaded entities to the cache.
       $this->setStaticCache($preloaded_entities);
     }
@@ -538,10 +546,7 @@ protected function doPostSave(EntityInterface $entity, $update) {
    * {@inheritdoc}
    */
   public function restore(EntityInterface $entity) {
-    // Allow code to run before saving.
-    $entity->preSave($this);
-
-    // The restore process does not invoke any post-save operations.
+    // The restore process does not invoke any pre or post-save operations.
     $this->doSave($entity->id(), $entity);
   }
 
diff --git a/web/core/lib/Drupal/Core/Entity/EntityStorageInterface.php b/web/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
index 0c776ab3b43b710b8dd445232ccba2a4a910a0df..f38f9452aeaa5baae43671e950a5762cab06bba8 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
@@ -158,8 +158,8 @@ public function save(EntityInterface $entity);
    * Restores a previously saved entity.
    *
    * Note that the entity is assumed to be in a valid state for the storage, so
-   * the restore process does not invoke any hooks, nor does it perform any
-   * post-save operations.
+   * the restore process does not invoke any hooks, nor does it perform any pre
+   * or post-save operations.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to restore.
@@ -168,6 +168,11 @@ public function save(EntityInterface $entity);
    *   In case of failures, an exception is thrown.
    *
    * @internal
+   *   This method should never be used to perform a regular entity save. Its
+   *   only use-case is to assist updating entity types when there are complex
+   *   schema changes, for example, to make them revisionable. Note that
+   *   overriding this method to fix data prior to restoring is a likely sign
+   *   that the current data is corrupt.
    */
   public function restore(EntityInterface $entity);
 
diff --git a/web/core/lib/Drupal/Core/Entity/EntityTypeListener.php b/web/core/lib/Drupal/Core/Entity/EntityTypeListener.php
index 0adcecfb6286d3ce56ee7e54475a1235b758d7c6..9ab4fab633f57ca0b56bcbc36e4cf190aa71433b 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityTypeListener.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityTypeListener.php
@@ -71,12 +71,13 @@ public function onEntityTypeCreate(EntityTypeInterface $entity_type) {
       $storage->onEntityTypeCreate($entity_type);
     }
 
-    $this->eventDispatcher->dispatch(EntityTypeEvents::CREATE, new EntityTypeEvent($entity_type));
-
     $this->entityLastInstalledSchemaRepository->setLastInstalledDefinition($entity_type);
     if ($entity_type->entityClassImplements(FieldableEntityInterface::class)) {
       $this->entityLastInstalledSchemaRepository->setLastInstalledFieldStorageDefinitions($entity_type_id, $this->entityFieldManager->getFieldStorageDefinitions($entity_type_id));
     }
+
+    $this->eventDispatcher->dispatch(EntityTypeEvents::CREATE, new EntityTypeEvent($entity_type));
+    $this->clearCachedDefinitions();
   }
 
   /**
@@ -94,9 +95,10 @@ public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeI
       $storage->onEntityTypeUpdate($entity_type, $original);
     }
 
-    $this->eventDispatcher->dispatch(EntityTypeEvents::UPDATE, new EntityTypeEvent($entity_type, $original));
-
     $this->entityLastInstalledSchemaRepository->setLastInstalledDefinition($entity_type);
+
+    $this->eventDispatcher->dispatch(EntityTypeEvents::UPDATE, new EntityTypeEvent($entity_type, $original));
+    $this->clearCachedDefinitions();
   }
 
   /**
@@ -116,9 +118,10 @@ public function onEntityTypeDelete(EntityTypeInterface $entity_type) {
       $storage->onEntityTypeDelete($entity_type);
     }
 
-    $this->eventDispatcher->dispatch(EntityTypeEvents::DELETE, new EntityTypeEvent($entity_type));
-
     $this->entityLastInstalledSchemaRepository->deleteLastInstalledDefinition($entity_type_id);
+
+    $this->eventDispatcher->dispatch(EntityTypeEvents::DELETE, new EntityTypeEvent($entity_type));
+    $this->clearCachedDefinitions();
   }
 
   /**
@@ -135,13 +138,22 @@ public function onFieldableEntityTypeUpdate(EntityTypeInterface $entity_type, En
     }
 
     if ($sandbox === NULL || (isset($sandbox['#finished']) && $sandbox['#finished'] == 1)) {
-      $this->eventDispatcher->dispatch(EntityTypeEvents::UPDATE, new EntityTypeEvent($entity_type, $original));
-
       $this->entityLastInstalledSchemaRepository->setLastInstalledDefinition($entity_type);
       if ($entity_type->entityClassImplements(FieldableEntityInterface::class)) {
         $this->entityLastInstalledSchemaRepository->setLastInstalledFieldStorageDefinitions($entity_type_id, $field_storage_definitions);
       }
+
+      $this->eventDispatcher->dispatch(EntityTypeEvents::UPDATE, new EntityTypeEvent($entity_type, $original));
+      $this->clearCachedDefinitions();
     }
   }
 
+  /**
+   * Clears necessary caches to apply entity/field definition updates.
+   */
+  protected function clearCachedDefinitions() {
+    $this->entityTypeManager->clearCachedDefinitions();
+    $this->entityFieldManager->clearCachedFieldDefinitions();
+  }
+
 }
diff --git a/web/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php b/web/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php
index 38ac960cc17a375b8adfe854d4a3ea06175cfbab..e5051b93181a478ee0303604c8d679df05070028 100644
--- a/web/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php
+++ b/web/core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php
@@ -98,11 +98,12 @@ public function getDerivativeDefinitions($base_plugin_definition) {
       ] + $base_plugin_definition;
 
       // Incorporate the bundles as entity:$entity_type:$bundle, if any.
-      foreach ($this->bundleInfoService->getBundleInfo($entity_type_id) as $bundle => $bundle_info) {
-        if ($bundle !== $entity_type_id) {
+      $bundle_info = $this->bundleInfoService->getBundleInfo($entity_type_id);
+      if (count($bundle_info) > 1 || $entity_type->getKey('bundle')) {
+        foreach ($bundle_info as $bundle => $info) {
           $this->derivatives[$entity_type_id . ':' . $bundle] = [
             'class' => $class,
-            'label' => $bundle_info['label'],
+            'label' => $info['label'],
             'constraints' => $this->derivatives[$entity_type_id]['constraints'],
           ] + $base_plugin_definition;
         }
diff --git a/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index edf338c9ee0975af1fac7036b71d5e72e5230dee..13cf216df20bc191bb18394232d8c5cd9e0f5092 100644
--- a/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/web/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -854,13 +854,9 @@ public function save(EntityInterface $entity) {
   public function restore(EntityInterface $entity) {
     $transaction = $this->database->startTransaction();
     try {
-      /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
-      // Allow code to run before saving.
-      $entity->preSave($this);
-      $this->invokeFieldMethod('preSave', $entity);
-
       // Insert the entity data in the base and data tables only for default
       // revisions.
+      /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
       if ($entity->isDefaultRevision()) {
         $record = $this->mapToStorageRecord($entity->getUntranslated(), $this->baseTable);
         $this->database
diff --git a/web/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php b/web/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php
index 25f1ac0f9a37790a7a9c30d3e01fc1fc9aced326..21c02d4de5b3e0ac9e9349a0ea28ad95a47dd80e 100644
--- a/web/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php
+++ b/web/core/lib/Drupal/Core/Entity/Sql/SqlFieldableEntityTypeListenerTrait.php
@@ -220,6 +220,9 @@ protected function copyData(EntityTypeInterface $entity_type, EntityTypeInterfac
       $sandbox['current_id'] = $identifier;
     }
 
+    // Reset the cache in order to free memory as we progress.
+    \Drupal::service('entity.memory_cache')->deleteAll();
+
     // Get an updated count of entities that still need to migrated to the new
     // storage.
     $missing = $this->database->select($table_name, 't')
diff --git a/web/core/lib/Drupal/Core/Extension/ExtensionList.php b/web/core/lib/Drupal/Core/Extension/ExtensionList.php
index dc20679cd2bcf76cbf3093f89cb5336551cb32d0..8fc8da0ca04515ce1abda73daaf5b245f03bc201 100644
--- a/web/core/lib/Drupal/Core/Extension/ExtensionList.php
+++ b/web/core/lib/Drupal/Core/Extension/ExtensionList.php
@@ -157,6 +157,8 @@ protected function getExtensionDiscovery() {
    * We don't reset statically added filenames, as it is a static cache which
    * logically can't change. This is done for performance reasons of the
    * installer.
+   *
+   * @return $this
    */
   public function reset() {
     $this->extensions = NULL;
diff --git a/web/core/lib/Drupal/Core/Extension/InfoParserDynamic.php b/web/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
index 9eb0a56e24df75be076942de2f3f1b3381754635..c5d74b20cb10062eaa6a2c6baa384fa7a4c641e2 100644
--- a/web/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
+++ b/web/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Core\Extension;
 
+use Composer\Semver\Semver;
 use Drupal\Component\Serialization\Exception\InvalidDataTypeException;
 use Drupal\Core\Serialization\Yaml;
 
@@ -10,6 +11,11 @@
  */
 class InfoParserDynamic implements InfoParserInterface {
 
+  /**
+   * The earliest Drupal version that supports the 'core_version_requirement'.
+   */
+  const FIRST_CORE_VERSION_REQUIREMENT_SUPPORTED_VERSION = '8.7.7';
+
   /**
    * {@inheritdoc}
    */
@@ -28,6 +34,40 @@ public function parse($filename) {
       if (!empty($missing_keys)) {
         throw new InfoParserException('Missing required keys (' . implode(', ', $missing_keys) . ') in ' . $filename);
       }
+      if ($parsed_info['type'] === 'profile' && isset($parsed_info['core_version_requirement'])) {
+        // @todo Support the 'core_version_requirement' key in profiles in
+        //   https://www.drupal.org/node/3070401.
+        throw new InfoParserException("The 'core_version_requirement' key is not supported in profiles in $filename");
+      }
+      if (!isset($parsed_info['core']) && !isset($parsed_info['core_version_requirement'])) {
+        throw new InfoParserException("The 'core' or the 'core_version_requirement' key must be present in " . $filename);
+      }
+      if (isset($parsed_info['core']) && !preg_match("/^\d\.x$/", $parsed_info['core'])) {
+        throw new InfoParserException("Invalid 'core' value \"{$parsed_info['core']}\" in " . $filename);
+      }
+      if (isset($parsed_info['core_version_requirement'])) {
+        $supports_pre_core_version_requirement_version = static::isConstraintSatisfiedByPreviousVersion($parsed_info['core_version_requirement'], static::FIRST_CORE_VERSION_REQUIREMENT_SUPPORTED_VERSION);
+        // If the 'core_version_requirement' constraint does not satisfy any
+        // Drupal 8 versions before 8.7.7 then 'core' cannot be set or it will
+        // effectively support all versions of Drupal 8 because
+        // 'core_version_requirement' will be ignored in previous versions.
+        if (!$supports_pre_core_version_requirement_version && isset($parsed_info['core'])) {
+          throw new InfoParserException("The 'core_version_requirement' constraint ({$parsed_info['core_version_requirement']}) requires the 'core' key not be set in " . $filename);
+        }
+        // 'core_version_requirement' can not be used to specify Drupal 8
+        // versions before 8.7.7 because these versions do not use the
+        // 'core_version_requirement' key. Do not throw the exception if the
+        // constraint also is satisfied by 8.0.0-alpha1 to allow constraints
+        // such as '^8' or '^8 || ^9'.
+        if ($supports_pre_core_version_requirement_version && !Semver::satisfies('8.0.0-alpha1', $parsed_info['core_version_requirement'])) {
+          throw new InfoParserException("The 'core_version_requirement' can not be used to specify compatibility for a specific version before " . static::FIRST_CORE_VERSION_REQUIREMENT_SUPPORTED_VERSION . " in $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'];
+      $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;
       }
@@ -60,7 +100,80 @@ public function parse($filename) {
    *   An array of required keys.
    */
   protected function getRequiredKeys() {
-    return ['type', 'core', 'name'];
+    return ['type', 'name'];
+  }
+
+  /**
+   * Determines if a constraint is satisfied by earlier versions of Drupal 8.
+   *
+   * @param string $constraint
+   *   A core semantic version constraint.
+   * @param string $version
+   *   A core version.
+   *
+   * @return bool
+   *   TRUE if the constraint is satisfied by a core version prior to the
+   *   provided version.
+   */
+  protected static function isConstraintSatisfiedByPreviousVersion($constraint, $version) {
+    static $evaluated_constraints = [];
+    // Any particular constraint and version combination only needs to be
+    // evaluated once.
+    if (!isset($evaluated_constraints[$constraint][$version])) {
+      $evaluated_constraints[$constraint][$version] = FALSE;
+      foreach (static::getAllPreviousCoreVersions($version) as $previous_version) {
+        if (Semver::satisfies($previous_version, $constraint)) {
+          $evaluated_constraints[$constraint][$version] = TRUE;
+          // The constraint only has to satisfy one previous version so break
+          // when the first one is found.
+          break;
+        }
+      }
+    }
+    return $evaluated_constraints[$constraint][$version];
+  }
+
+  /**
+   * Gets all the versions of Drupal 8 before a specific version.
+   *
+   * @param string $version
+   *   The version to get versions before.
+   *
+   * @return array
+   *   All of the applicable Drupal 8 releases.
+   */
+  protected static function getAllPreviousCoreVersions($version) {
+    static $versions_lists = [];
+    // Check if list of previous versions for the specified version has already
+    // been created.
+    if (empty($versions_lists[$version])) {
+      // Loop through all minor versions including 8.7.
+      foreach (range(0, 7) as $minor) {
+        // The largest patch number in a release was 17 in 8.6.17. Use 27 to
+        // leave room for future security releases.
+        foreach (range(0, 27) as $patch) {
+          $patch_version = "8.$minor.$patch";
+          if ($patch_version === $version) {
+            // Reverse the order of the versions so that they will be evaluated
+            // from the most recent versions first.
+            $versions_lists[$version] = array_reverse($versions_lists[$version]);
+            return $versions_lists[$version];
+          }
+          if ($patch === 0) {
+            // If this is a '0' patch release like '8.1.0' first create the
+            // pre-release versions such as '8.1.0-alpha1' and '8.1.0-rc1'.
+            foreach (['alpha', 'beta', 'rc'] as $prerelease) {
+              // The largest prerelease number was  in 8.0.0-beta16.
+              foreach (range(0, 16) as $prerelease_number) {
+                $versions_lists[$version][] = "$patch_version-$prerelease$prerelease_number";
+              }
+            }
+          }
+          $versions_lists[$version][] = $patch_version;
+        }
+      }
+    }
+    return $versions_lists[$version];
   }
 
 }
diff --git a/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php
index 86cc9bc44dea08bc998885470f2116d445099327..c28f71f8e2a2d8d1d578cbb4ce8a83136c46ebc0 100644
--- a/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php
+++ b/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php
@@ -81,9 +81,14 @@ public function addUninstallValidator(ModuleUninstallValidatorInterface $uninsta
    */
   public function install(array $module_list, $enable_dependencies = TRUE) {
     $extension_config = \Drupal::configFactory()->getEditable('core.extension');
+    // Get all module data so we can find dependencies and sort.
+    $module_data = system_rebuild_module_data();
+    foreach ($module_list as $module) {
+      if (!empty($module_data[$module]->info['core_incompatible'])) {
+        throw new MissingDependencyException("Unable to install modules: module '$module' is incompatible with this version of Drupal core.");
+      }
+    }
     if ($enable_dependencies) {
-      // Get all module data so we can find dependencies and sort.
-      $module_data = system_rebuild_module_data();
       $module_list = $module_list ? array_combine($module_list, $module_list) : [];
       if ($missing_modules = array_diff_key($module_list, $module_data)) {
         // One or more of the given modules doesn't exist.
@@ -108,6 +113,9 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
 
           // Skip already installed modules.
           if (!isset($module_list[$dependency]) && !isset($installed_modules[$dependency])) {
+            if ($module_data[$dependency]->info['core_incompatible']) {
+              throw new MissingDependencyException("Unable to install modules: module '$module'. Its dependency module '$dependency' is incompatible with this version of Drupal core.");
+            }
             $module_list[$dependency] = $dependency;
           }
         }
diff --git a/web/core/lib/Drupal/Core/Field/FieldStorageDefinitionListener.php b/web/core/lib/Drupal/Core/Field/FieldStorageDefinitionListener.php
index fda621b9291572737524ebba3a77fab3ebd8265d..b73f3411e5a243d00a35ede71c19de05757908ab 100644
--- a/web/core/lib/Drupal/Core/Field/FieldStorageDefinitionListener.php
+++ b/web/core/lib/Drupal/Core/Field/FieldStorageDefinitionListener.php
@@ -85,9 +85,9 @@ public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $
       $storage->onFieldStorageDefinitionCreate($storage_definition);
     }
 
-    $this->eventDispatcher->dispatch(FieldStorageDefinitionEvents::CREATE, new FieldStorageDefinitionEvent($storage_definition));
-
     $this->entityLastInstalledSchemaRepository->setLastInstalledFieldStorageDefinition($storage_definition);
+
+    $this->eventDispatcher->dispatch(FieldStorageDefinitionEvents::CREATE, new FieldStorageDefinitionEvent($storage_definition));
     $this->entityFieldManager->clearCachedFieldDefinitions();
   }
 
@@ -104,9 +104,9 @@ public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $
       $storage->onFieldStorageDefinitionUpdate($storage_definition, $original);
     }
 
-    $this->eventDispatcher->dispatch(FieldStorageDefinitionEvents::UPDATE, new FieldStorageDefinitionEvent($storage_definition, $original));
-
     $this->entityLastInstalledSchemaRepository->setLastInstalledFieldStorageDefinition($storage_definition);
+
+    $this->eventDispatcher->dispatch(FieldStorageDefinitionEvents::UPDATE, new FieldStorageDefinitionEvent($storage_definition, $original));
     $this->entityFieldManager->clearCachedFieldDefinitions();
   }
 
@@ -133,9 +133,9 @@ public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $
       $storage->onFieldStorageDefinitionDelete($storage_definition);
     }
 
-    $this->eventDispatcher->dispatch(FieldStorageDefinitionEvents::DELETE, new FieldStorageDefinitionEvent($storage_definition));
-
     $this->entityLastInstalledSchemaRepository->deleteLastInstalledFieldStorageDefinition($storage_definition);
+
+    $this->eventDispatcher->dispatch(FieldStorageDefinitionEvents::DELETE, new FieldStorageDefinitionEvent($storage_definition));
     $this->entityFieldManager->clearCachedFieldDefinitions();
   }
 
diff --git a/web/core/lib/Drupal/Core/Field/FormatterBase.php b/web/core/lib/Drupal/Core/Field/FormatterBase.php
index eec3438a5cbe466e83801cbdb80a41979f6c6511..b6cfd2f459a322f9648300e392bbe7b00232a818 100644
--- a/web/core/lib/Drupal/Core/Field/FormatterBase.php
+++ b/web/core/lib/Drupal/Core/Field/FormatterBase.php
@@ -100,6 +100,7 @@ public function view(FieldItemListInterface $items, $langcode = NULL) {
         '#items' => $items,
         '#formatter' => $this->getPluginId(),
         '#is_multiple' => $this->fieldDefinition->getFieldStorageDefinition()->isMultiple(),
+        '#third_party_settings' => $this->getThirdPartySettings(),
       ];
 
       $elements = array_merge($info, $elements);
diff --git a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index 493d6a4f67475e0ec205106f0360109485b149b3..cea4ecb7e97df59b15da53d70b436a6d6991d7ee 100644
--- a/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/web/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -28,7 +28,7 @@ class EntityReferenceAutocompleteWidget extends WidgetBase {
   public static function defaultSettings() {
     return [
       'match_operator' => 'CONTAINS',
-      'size' => '60',
+      'size' => 60,
       'placeholder' => '',
     ] + parent::defaultSettings();
   }
diff --git a/web/core/lib/Drupal/Core/Form/FormBuilder.php b/web/core/lib/Drupal/Core/Form/FormBuilder.php
index df716e3f8877e9575e1f23d1534f5d3da1aa9d19..4bf64196c82436a61fc06348fc0fd443c6ec40a2 100644
--- a/web/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/web/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -220,9 +220,9 @@ public function getForm($form_arg) {
   /**
    * {@inheritdoc}
    */
-  public function buildForm($form_id, FormStateInterface &$form_state) {
+  public function buildForm($form_arg, FormStateInterface &$form_state) {
     // Ensure the form ID is prepared.
-    $form_id = $this->getFormId($form_id, $form_state);
+    $form_id = $this->getFormId($form_arg, $form_state);
 
     $request = $this->requestStack->getCurrentRequest();
 
diff --git a/web/core/lib/Drupal/Core/Form/FormBuilderInterface.php b/web/core/lib/Drupal/Core/Form/FormBuilderInterface.php
index ca794379dbb5872612a830bfcb983a48f38564ac..6b6ed83046b0d27b43713a54c960f8207ae70288 100644
--- a/web/core/lib/Drupal/Core/Form/FormBuilderInterface.php
+++ b/web/core/lib/Drupal/Core/Form/FormBuilderInterface.php
@@ -68,7 +68,7 @@ public function getForm($form_arg);
    * previous page load. The form is then passed on for processing, validation,
    * and submission if there is proper input.
    *
-   * @param \Drupal\Core\Form\FormInterface|string $form_id
+   * @param \Drupal\Core\Form\FormInterface|string $form_arg
    *   The value must be one of the following:
    *   - The name of a class that implements \Drupal\Core\Form\FormInterface.
    *   - An instance of a class that implements \Drupal\Core\Form\FormInterface.
@@ -89,7 +89,7 @@ public function getForm($form_arg);
    *
    * @see self::redirectForm()
    */
-  public function buildForm($form_id, FormStateInterface &$form_state);
+  public function buildForm($form_arg, FormStateInterface &$form_state);
 
   /**
    * Constructs a new $form from the information in $form_state.
diff --git a/web/core/lib/Drupal/Core/Installer/InstallerKernel.php b/web/core/lib/Drupal/Core/Installer/InstallerKernel.php
index adeb5c53eed62b1935dcd43c079b8d10a6abbe45..4b5b6d19a8183312af4c2fd122158e9dcf2e13dd 100644
--- a/web/core/lib/Drupal/Core/Installer/InstallerKernel.php
+++ b/web/core/lib/Drupal/Core/Installer/InstallerKernel.php
@@ -15,6 +15,8 @@ class InstallerKernel extends DrupalKernel {
   protected function initializeContainer() {
     // Always force a container rebuild.
     $this->containerNeedsRebuild = TRUE;
+    // Ensure the InstallerKernel's container is not dumped.
+    $this->allowDumping = FALSE;
     $container = parent::initializeContainer();
     return $container;
   }
diff --git a/web/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php b/web/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
index eb564ee9ab8ac29334ba2a4c1057b2124e7c9720..5aee5cf0f22792cb1f64fd8d5090e3f20e0dffd5 100644
--- a/web/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
+++ b/web/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
@@ -49,13 +49,6 @@ class MenuLinkDefaultForm implements MenuLinkFormInterface, ContainerInjectionIn
    */
   protected $moduleHandler;
 
-  /**
-   * The module data from system_get_info().
-   *
-   * @var array
-   */
-  protected $moduleData;
-
   /**
    * Constructs a new \Drupal\Core\Menu\Form\MenuLinkDefaultForm.
    *
diff --git a/web/core/lib/Drupal/Core/Render/Element/Date.php b/web/core/lib/Drupal/Core/Render/Element/Date.php
index df56dd81f0a38ac00e2e171be6fc4840810edeec..dfaa3f076ae4976d57c9410d2fb6991ef424becd 100644
--- a/web/core/lib/Drupal/Core/Render/Element/Date.php
+++ b/web/core/lib/Drupal/Core/Render/Element/Date.php
@@ -16,7 +16,7 @@
  * $form['expiration'] = [
  *   '#type' => 'date',
  *   '#title' => $this->t('Content expiration'),
- *   '#default_value' => 2020-02-05',
+ *   '#default_value' => '2020-02-05',
  * ];
  * @endcode
  *
diff --git a/web/core/lib/Drupal/Core/Template/TwigExtension.php b/web/core/lib/Drupal/Core/Template/TwigExtension.php
index b7f51ecb1f395762326f9a06a19357f2b85798b5..db6e080b5f94e2a0feed77ab69619a32fdd5d8b7 100644
--- a/web/core/lib/Drupal/Core/Template/TwigExtension.php
+++ b/web/core/lib/Drupal/Core/Template/TwigExtension.php
@@ -249,8 +249,8 @@ public function getPath($name, $parameters = [], $options = []) {
    *   (optional) An associative array of additional options. The 'absolute'
    *   option is forced to be TRUE.
    *
-   * @return string
-   *   The generated absolute URL for the given route.
+   * @return array
+   *   A render array with generated absolute URL for the given route.
    *
    * @todo Add an option for scheme-relative URLs.
    */
diff --git a/web/core/lib/Drupal/Core/Test/RunTests/TestFileParser.php b/web/core/lib/Drupal/Core/Test/RunTests/TestFileParser.php
new file mode 100644
index 0000000000000000000000000000000000000000..afd92df5e428857e46d9713878b419dc59213d86
--- /dev/null
+++ b/web/core/lib/Drupal/Core/Test/RunTests/TestFileParser.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Drupal\Core\Test\RunTests;
+
+use Drupal\simpletest\TestBase;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * Parses class names from PHP files without loading them.
+ *
+ * @internal
+ */
+class TestFileParser {
+
+  /**
+   * Gets the classes from a PHP file.
+   *
+   * @param string $file
+   *   The path to the file to parse.
+   *
+   * @return string[]
+   *   Array of fully qualified class names within the PHP file.
+   */
+  public function getTestListFromFile($file) {
+    $test_list = $this->parseContents(file_get_contents($file));
+    return array_filter($test_list, function ($class) {
+      return (is_subclass_of($class, TestCase::class) || is_subclass_of($class, TestBase::class));
+    });
+  }
+
+  /**
+   * Parse class names out of PHP file contents.
+   *
+   * @param string $contents
+   *   The contents of a PHP file.
+   *
+   * @return string[]
+   *   Array of fully qualified class names within the PHP file contents.
+   */
+  protected function parseContents($contents) {
+    // Extract a potential namespace.
+    $namespace = FALSE;
+    if (preg_match('@^\s*namespace ([^ ;]+)@m', $contents, $matches)) {
+      $namespace = $matches[1];
+    }
+    $test_list = [];
+    // Extract all class names. Abstract classes are excluded on purpose.
+    preg_match_all('@^\s*(?!abstract\s+)(?:final\s+|\s*)class ([^ ]+)@m', $contents, $matches);
+    if (!$namespace) {
+      $test_list = $matches[1];
+    }
+    else {
+      foreach ($matches[1] as $class_name) {
+        $namespace_class = $namespace . '\\' . $class_name;
+        $test_list[] = $namespace_class;
+      }
+    }
+    return $test_list;
+  }
+
+}
diff --git a/web/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php b/web/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php
index 449996710eb60a9fa54d933801b7f2b713e9105d..90513008f30219138ed90ba14e66e7f3c283a3f8 100644
--- a/web/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php
+++ b/web/core/lib/Drupal/Core/TypedData/Validation/RecursiveContextualValidator.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Core\TypedData\Validation;
 
+use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
 use Drupal\Core\TypedData\ComplexDataInterface;
 use Drupal\Core\TypedData\ListInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
@@ -136,6 +137,7 @@ protected function validateNode(TypedDataInterface $data, $constraints = NULL, $
     // constraint validators, such that they do not have to care about Typed
     // Data.
     $value = $typed_data_manager->getCanonicalRepresentation($data);
+    $constraints_given = isset($constraints);
     $this->context->setNode($value, $data, $metadata, $property_path);
 
     if (isset($constraints) || !$this->context->isGroupValidated($cache_key, Constraint::DEFAULT_GROUP)) {
@@ -148,7 +150,10 @@ protected function validateNode(TypedDataInterface $data, $constraints = NULL, $
 
     // If the data is a list or complex data, validate the contained list items
     // or properties. However, do not recurse if the data is empty.
-    if (($data instanceof ListInterface || $data instanceof ComplexDataInterface) && !$data->isEmpty()) {
+    // Next, we do not recurse if given constraints are validated against an
+    // entity, since we should determine whether the entity matches the
+    // constraints and not whether the entity validates.
+    if (($data instanceof ListInterface || $data instanceof ComplexDataInterface) && !$data->isEmpty() && !($data instanceof EntityAdapter && $constraints_given)) {
       foreach ($data as $name => $property) {
         $this->validateNode($property);
       }
diff --git a/web/core/lib/Drupal/Core/Update/UpdateCompilerPass.php b/web/core/lib/Drupal/Core/Update/UpdateCompilerPass.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ac05886d0448ba4cc374ece5a0bbb8867f6f3da
--- /dev/null
+++ b/web/core/lib/Drupal/Core/Update/UpdateCompilerPass.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace Drupal\Core\Update;
+
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\DependencyInjection\Reference;
+
+/**
+ * Removes services with unmet dependencies.
+ *
+ * Updates can install new modules that add services that existing services now
+ * depend on. This compiler pass allows the update system to work in such cases.
+ */
+class UpdateCompilerPass implements CompilerPassInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ContainerBuilder $container) {
+    $process_aliases = FALSE;
+    // Loop over the defined services and remove any with unmet dependencies.
+    // The kernel cannot be booted if the container has such services. This
+    // allows modules to run their update hooks to enable newly added
+    // dependencies.
+    do {
+      $has_changed = FALSE;
+      foreach ($container->getDefinitions() as $key => $definition) {
+        foreach ($definition->getArguments() as $argument) {
+          if ($argument instanceof Reference) {
+            $argument_id = (string) $argument;
+            if (!$container->has($argument_id) && $argument->getInvalidBehavior() === ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) {
+              // If the container does not have the argument and would throw an
+              // exception, remove the service.
+              $container->removeDefinition($key);
+              $container->log($this, sprintf('Removed service "%s"; reason: depends on non-existent service "%s".', $key, $argument_id));
+              $has_changed = TRUE;
+              $process_aliases = TRUE;
+            }
+          }
+        }
+      }
+      // Repeat if services have been removed.
+    } while ($has_changed);
+
+    // Remove aliases to services that have been removed. This does not need to
+    // be part of the loop above because references to aliases have already been
+    // resolved by Symfony's ResolveReferencesToAliasesPass.
+    if ($process_aliases) {
+      foreach ($container->getAliases() as $key => $alias) {
+        $id = (string) $alias;
+        if (!$container->has($id)) {
+          $container->removeAlias($key);
+          $container->log($this, sprintf('Removed alias "%s"; reason: alias to non-existent service "%s".', $key, $id));
+        }
+      }
+    }
+  }
+
+}
diff --git a/web/core/lib/Drupal/Core/Update/UpdateServiceProvider.php b/web/core/lib/Drupal/Core/Update/UpdateServiceProvider.php
index 1971ef260ab26494f9942499b82a892cb66aa5ab..22c9131eb381ca935dd2fa33ffa809cffab36526 100644
--- a/web/core/lib/Drupal/Core/Update/UpdateServiceProvider.php
+++ b/web/core/lib/Drupal/Core/Update/UpdateServiceProvider.php
@@ -5,11 +5,12 @@
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\DependencyInjection\ServiceModifierInterface;
 use Drupal\Core\DependencyInjection\ServiceProviderInterface;
+use Symfony\Component\DependencyInjection\Compiler\PassConfig;
 use Symfony\Component\DependencyInjection\Definition;
 use Symfony\Component\DependencyInjection\Reference;
 
 /**
- * Ensures for some services that they don't cache.
+ * Customises the container for running updates.
  */
 class UpdateServiceProvider implements ServiceProviderInterface, ServiceModifierInterface {
 
@@ -19,12 +20,15 @@ class UpdateServiceProvider implements ServiceProviderInterface, ServiceModifier
   public function register(ContainerBuilder $container) {
     $definition = new Definition('Drupal\Core\Cache\NullBackend', ['null']);
     $container->setDefinition('cache.null', $definition);
+
+    $container->addCompilerPass(new UpdateCompilerPass(), PassConfig::TYPE_REMOVE, 128);
   }
 
   /**
    * {@inheritdoc}
    */
   public function alter(ContainerBuilder $container) {
+    // Ensures for some services that they don't cache.
     $null_cache_service = new Reference('cache.null');
 
     $definition = $container->getDefinition('asset.resolver');
diff --git a/web/core/modules/block_content/block_content.post_update.php b/web/core/modules/block_content/block_content.post_update.php
index daf5b0d4e44d0b8b37fa7a2657799cff1232eeba..db7f50460cb8365512a54c3c2174cf1ced176bc8 100644
--- a/web/core/modules/block_content/block_content.post_update.php
+++ b/web/core/modules/block_content/block_content.post_update.php
@@ -12,6 +12,11 @@
  * Adds a 'reusable' filter to all Custom Block views.
  */
 function block_content_post_update_add_views_reusable_filter(&$sandbox = NULL) {
+  // If Views is not installed, there is nothing to do.
+  if (!\Drupal::moduleHandler()->moduleExists('views')) {
+    return;
+  }
+
   $entity_type = \Drupal::entityTypeManager()->getDefinition('block_content');
   $storage = \Drupal::entityTypeManager()->getStorage('block_content');
 
diff --git a/web/core/modules/block_content/tests/src/Functional/Update/BlockContentReusableUpdateTest.php b/web/core/modules/block_content/tests/src/Functional/Update/BlockContentReusableUpdateTest.php
index fb261db70e0ae0b7e2f4e33adb3e791e436eb075..64eeadde57ad0099835751384d271df42670cd01 100644
--- a/web/core/modules/block_content/tests/src/Functional/Update/BlockContentReusableUpdateTest.php
+++ b/web/core/modules/block_content/tests/src/Functional/Update/BlockContentReusableUpdateTest.php
@@ -150,4 +150,12 @@ public function testReusableFieldAddition() {
     $assert_session->statusCodeEquals('403');
   }
 
+  /**
+   * Tests that the update succeeds even if Views is not installed.
+   */
+  public function testReusableFieldAdditionWithoutViews() {
+    $this->container->get('module_installer')->uninstall(['views']);
+    $this->runUpdates();
+  }
+
 }
diff --git a/web/core/modules/ckeditor/config/schema/ckeditor.schema.yml b/web/core/modules/ckeditor/config/schema/ckeditor.schema.yml
index 6bafb0de0619bb8d84953a6f213d4b0a45f57b5e..fcababfa0f25d52ab69d234cd5835e64a443b34d 100644
--- a/web/core/modules/ckeditor/config/schema/ckeditor.schema.yml
+++ b/web/core/modules/ckeditor/config/schema/ckeditor.schema.yml
@@ -48,5 +48,5 @@ ckeditor.plugin.stylescombo:
   label: 'Styles dropdown'
   mapping:
     styles:
-      type: string
+      type: label
       label: 'List of styles'
diff --git a/web/core/modules/ckeditor/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php b/web/core/modules/ckeditor/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php
index 1a1a5cebaa19135318b8a8278b34cf1049d6d810..82da82519a4e80726388a73bad140954d7f648da 100644
--- a/web/core/modules/ckeditor/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php
+++ b/web/core/modules/ckeditor/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php
@@ -9,6 +9,7 @@
 use Drupal\filter\Entity\FilterFormat;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\node\Entity\NodeType;
+use Drupal\Tests\ckeditor\Traits\CKEditorTestTrait;
 
 /**
  * Tests the integration of CKEditor.
@@ -17,6 +18,8 @@
  */
 class CKEditorIntegrationTest extends WebDriverTestBase {
 
+  use CKEditorTestTrait;
+
   /**
    * The account.
    *
@@ -160,7 +163,8 @@ public function testDrupalImageCaptionDialog() {
 
     // If the caption filter is disabled, its checkbox should be absent.
     $this->drupalGet('node/add/page');
-    $this->click('.cke_button__drupalimage');
+    $this->waitForEditor();
+    $this->pressEditorButton('drupalimage');
     $this->assertNotEmpty($web_assert->waitForElement('css', '.ui-dialog'));
     $web_assert->elementNotExists('css', '.ui-dialog input[name="attributes[hasCaption]"]');
 
@@ -170,9 +174,10 @@ public function testDrupalImageCaptionDialog() {
     ]);
     $this->filterFormat->save();
 
-    // If the caption filter is enabled,  its checkbox should be present.
+    // If the caption filter is enabled, its checkbox should be present.
     $this->drupalGet('node/add/page');
-    $this->click('.cke_button__drupalimage');
+    $this->waitForEditor();
+    $this->pressEditorButton('drupalimage');
     $this->assertNotEmpty($web_assert->waitForElement('css', '.ui-dialog'));
     $web_assert->elementExists('css', '.ui-dialog input[name="attributes[hasCaption]"]');
   }
diff --git a/web/core/modules/ckeditor/tests/src/Traits/CKEditorTestTrait.php b/web/core/modules/ckeditor/tests/src/Traits/CKEditorTestTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..24db1b14ae3d05e96e0985b5e2ebd55a1f2ef00b
--- /dev/null
+++ b/web/core/modules/ckeditor/tests/src/Traits/CKEditorTestTrait.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Drupal\Tests\ckeditor\Traits;
+
+/**
+ * Provides methods to test CKEditor.
+ *
+ * This trait is meant to be used only by functional JavaScript test classes.
+ */
+trait CKEditorTestTrait {
+
+  /**
+   * Waits for CKEditor to initialize.
+   *
+   * @param string $instance_id
+   *   The CKEditor instance ID.
+   * @param int $timeout
+   *   (optional) Timeout in milliseconds, defaults to 10000.
+   */
+  protected function waitForEditor($instance_id = 'edit-body-0-value', $timeout = 10000) {
+    $condition = <<<JS
+      (function() {
+        return (
+          typeof CKEDITOR !== 'undefined'
+          && typeof CKEDITOR.instances["$instance_id"] !== 'undefined'
+          && CKEDITOR.instances["$instance_id"].instanceReady
+        );
+      }());
+JS;
+
+    $this->getSession()->wait($timeout, $condition);
+  }
+
+  /**
+   * Assigns a name to the CKEditor iframe.
+   *
+   * @see \Behat\Mink\Session::switchToIFrame()
+   */
+  protected function assignNameToCkeditorIframe() {
+    $javascript = <<<JS
+(function(){
+  document.getElementsByClassName('cke_wysiwyg_frame')[0].id = 'ckeditor';
+})()
+JS;
+    $this->getSession()->evaluateScript($javascript);
+  }
+
+  /**
+   * 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) {
+    $this->getSession()->switchToIFrame();
+    $button = $this->assertSession()->waitForElementVisible('css', 'a.cke_button__' . $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->hasClass('cke_button_disabled'));
+    $this->assertSame('true', $button->getAttribute('aria-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->hasClass('cke_button_disabled'));
+    $this->assertSame('false', $button->getAttribute('aria-disabled'));
+  }
+
+}
diff --git a/web/core/modules/config/src/Form/ConfigImportForm.php b/web/core/modules/config/src/Form/ConfigImportForm.php
index 28852f24eaa93cf78e3233931bc5f1272be8e881..c07288ecb42d7261be322ee0248b1088c3121940 100644
--- a/web/core/modules/config/src/Form/ConfigImportForm.php
+++ b/web/core/modules/config/src/Form/ConfigImportForm.php
@@ -99,7 +99,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
         foreach ($archiver->listContent() as $file) {
           $files[] = $file['filename'];
         }
-        $archiver->extractList($files, config_get_config_directory(CONFIG_SYNC_DIRECTORY));
+        $archiver->extractList($files, config_get_config_directory(CONFIG_SYNC_DIRECTORY), '', FALSE, FALSE);
         $this->messenger()->addStatus($this->t('Your configuration files were successfully uploaded and are ready for import.'));
         $form_state->setRedirect('config.sync');
       }
diff --git a/web/core/modules/datetime/src/Plugin/migrate/field/DateField.php b/web/core/modules/datetime/src/Plugin/migrate/field/DateField.php
index 876c9da09b636bb4e30f91830aa5878d4150bcee..8bae1069090d235aad8f9d3b727bbce5438aa964 100644
--- a/web/core/modules/datetime/src/Plugin/migrate/field/DateField.php
+++ b/web/core/modules/datetime/src/Plugin/migrate/field/DateField.php
@@ -2,11 +2,14 @@
 
 namespace Drupal\datetime\Plugin\migrate\field;
 
+use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\MigrateException;
 use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
 
 /**
+ * Provides a field plugin for date and time fields.
+ *
  * @MigrateField(
  *   id = "datetime",
  *   type_map = {
@@ -45,19 +48,35 @@ public function getFieldWidgetMap() {
    * {@inheritdoc}
    */
   public function defineValueProcessPipeline(MigrationInterface $migration, $field_name, $data) {
+    $to_format = DateTimeItemInterface::DATETIME_STORAGE_FORMAT;
+    if (isset($data['field_definition']['data'])) {
+      $field_data = unserialize($data['field_definition']['data']);
+      if (isset($field_data['settings']['granularity'])) {
+        $granularity = $field_data['settings']['granularity'];
+        if ($granularity = $field_data['settings']['granularity'] &&
+          $granularity['hour'] === 0 &&
+          $granularity['minute'] === 0 &&
+          $granularity['second'] === 0) {
+
+          $to_format = DateTimeItemInterface::DATE_STORAGE_FORMAT;
+        }
+      }
+    }
+
     switch ($data['type']) {
       case 'date':
         $from_format = 'Y-m-d\TH:i:s';
-        $to_format = 'Y-m-d\TH:i:s';
         break;
+
       case 'datestamp':
         $from_format = 'U';
         $to_format = 'U';
         break;
+
       case 'datetime':
         $from_format = 'Y-m-d H:i:s';
-        $to_format = 'Y-m-d\TH:i:s';
         break;
+
       default:
         throw new MigrateException(sprintf('Field %s of type %s is an unknown date field type.', $field_name, var_export($data['type'], TRUE)));
     }
diff --git a/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldLegacyTest.php b/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldLegacyTest.php
index fb51066196c12a55c7f17adec0b03bd04564e93d..6aa08bced3941a0dcdbb63011e46a05728af9304 100644
--- a/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldLegacyTest.php
+++ b/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldLegacyTest.php
@@ -2,17 +2,29 @@
 
 namespace Drupal\Tests\datetime\Unit\Plugin\migrate\field;
 
+use Drupal\datetime\Plugin\migrate\field\DateField;
+use Drupal\migrate\MigrateException;
+use Drupal\Tests\UnitTestCase;
+
 /**
+ * Tests legacy methods on the date_field plugin.
+ *
  * @group migrate
  * @group legacy
  */
-class DateFieldLegacyTest extends DateFieldTest {
+class DateFieldLegacyTest extends UnitTestCase {
 
   /**
+   * Tests deprecation on calling processFieldValues().
+   *
    * @expectedDeprecation Deprecated in Drupal 8.6.0, to be removed before Drupal 9.0.0. Use defineValueProcessPipeline() instead. See https://www.drupal.org/node/2944598.
    */
-  public function testUnknownDateType($method = 'processFieldValues') {
-    parent::testUnknownDateType($method);
+  public function testUnknownDateType() {
+    $migration = $this->prophesize('Drupal\migrate\Plugin\MigrationInterface')->reveal();
+    $plugin = new DateField([], '', []);
+
+    $this->setExpectedException(MigrateException::class, "Field field_date of type 'timestamp' is an unknown date field type.");
+    $plugin->processFieldValues($migration, 'field_date', ['type' => 'timestamp']);
   }
 
 }
diff --git a/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldTest.php b/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldTest.php
index 500eac2307bb4ccfcc6400e6fa8486a83a8f2c3b..ae11fa0cdc24e8bfbe8c25bc252a7579aed7777b 100644
--- a/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldTest.php
+++ b/web/core/modules/datetime/tests/src/Unit/Plugin/migrate/field/DateFieldTest.php
@@ -7,19 +7,84 @@
 use Drupal\Tests\UnitTestCase;
 
 /**
+ * Provides unit tests for the DateField Plugin.
+ *
+ * @coversDefaultClass \Drupal\datetime\Plugin\migrate\field\DateField
+ *
  * @group migrate
  */
 class DateFieldTest extends UnitTestCase {
 
   /**
-   * Tests an Exception is thrown when the field type is not a known date type.
+   * Tests defineValueProcessPipeline.
+   *
+   * @covers ::defineValueProcessPipeline
+   *
+   * @dataProvider providerTestDefineValueProcessPipeline
    */
-  public function testUnknownDateType($method = 'defineValueProcessPipeline') {
-    $migration = $this->prophesize('Drupal\migrate\Plugin\MigrationInterface')->reveal();
+  public function testDefineValueProcessPipeline($data, $from_format, $to_format) {
+    $migration = $this->createMock('Drupal\migrate\Plugin\MigrationInterface');
+    $migration->expects($this->once())
+      ->method('mergeProcessOfProperty')
+      ->with('field_date', [
+        'plugin' => 'sub_process',
+        'source' => 'field_date',
+        'process' => [
+          'value' => [
+            'plugin' => 'format_date',
+            'from_format' => $from_format,
+            'to_format' => $to_format,
+            'source' => 'value',
+          ],
+        ],
+      ])
+      ->will($this->returnValue($migration));
+
+    $plugin = new DateField([], '', []);
+    $plugin->defineValueProcessPipeline($migration, 'field_date', $data);
+  }
+
+  /**
+   * Provides data for testDefineValueProcessPipeline().
+   */
+  public function providerTestDefineValueProcessPipeline() {
+    return [
+      [['type' => 'date'], 'Y-m-d\TH:i:s', 'Y-m-d\TH:i:s'],
+      [['type' => 'datestamp'], 'U', 'U'],
+      [['type' => 'datetime'], 'Y-m-d H:i:s', 'Y-m-d\TH:i:s'],
+      [
+        [
+          'type' => 'datetime',
+          'field_definition' => [
+            'data' => serialize([
+              'settings' => [
+                'granularity' => [
+                  'hour' => 0,
+                  'minute' => 0,
+                  'second' => 0,
+                ],
+              ],
+            ]),
+          ],
+        ],
+        'Y-m-d H:i:s',
+        'Y-m-d',
+      ],
+    ];
+  }
+
+  /**
+   * Tests invalid date types throw an exception.
+   *
+   * @covers ::defineValueProcessPipeline
+   */
+  public function testDefineValueProcessPipelineException() {
+    $migration = $this->createMock('Drupal\migrate\Plugin\MigrationInterface');
+
     $plugin = new DateField([], '', []);
 
-    $this->setExpectedException(MigrateException::class, "Field field_date of type 'timestamp' is an unknown date field type.");
-    $plugin->$method($migration, 'field_date', ['type' => 'timestamp']);
+    $this->setExpectedException(MigrateException::class, "Field field_date of type 'totoro' is an unknown date field type.");
+    $plugin->defineValueProcessPipeline($migration, 'field_date', ['type' => 'totoro']);
   }
 
 }
diff --git a/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php b/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
index dae922bb63059d6c3338783c7f0bd1fcfe2da2ed..a695760dfc1855a9ad75749c4cb109b340df4fa9 100644
--- a/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
+++ b/web/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
@@ -65,6 +65,16 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       $instance_settings['handler_settings'] = $field_settings['handler_settings'];
     }
 
+    // Get the labels for the list_boolean type.
+    if ($row->getSourceProperty('type') === 'list_boolean') {
+      if (isset($field_data['settings']['allowed_values'][1])) {
+        $instance_settings['on_label'] = $field_data['settings']['allowed_values'][1];
+      }
+      if (isset($field_data['settings']['allowed_values'][0])) {
+        $instance_settings['off_label'] = $field_data['settings']['allowed_values'][0];
+      }
+    }
+
     switch ($widget_type) {
       case 'image_image':
         $settings = $instance_settings;
diff --git a/web/core/modules/field/tests/src/Kernel/FieldFormatterTest.php b/web/core/modules/field/tests/src/Kernel/FieldFormatterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f61ea3ff3ad39a3aac17fe6e6e8cdccbd5672b10
--- /dev/null
+++ b/web/core/modules/field/tests/src/Kernel/FieldFormatterTest.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace Drupal\Tests\field\Kernel;
+
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\entity_test\Entity\EntityTestRev;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests for field formatters.
+ *
+ * @group field
+ */
+class FieldFormatterTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'field',
+    'text',
+    'entity_test',
+    'field_test',
+    'system',
+    'filter',
+    'user',
+  ];
+
+  /**
+   * The field's name.
+   *
+   * @var string
+   */
+  protected $fieldName;
+
+  /**
+   * The default display.
+   *
+   * @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface
+   */
+  protected $display;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Configure the theme system.
+    $this->installConfig(['system', 'field']);
+    $this->installEntitySchema('entity_test_rev');
+
+    $entity_type = 'entity_test_rev';
+    $bundle = $entity_type;
+    $this->fieldName = mb_strtolower($this->randomMachineName());
+
+    $field_storage = FieldStorageConfig::create([
+      'field_name' => $this->fieldName,
+      'entity_type' => $entity_type,
+      'type' => 'string',
+    ]);
+    $field_storage->save();
+
+    $instance = FieldConfig::create([
+      'field_storage' => $field_storage,
+      'bundle' => $bundle,
+      'label' => $this->randomMachineName(),
+    ]);
+    $instance->save();
+
+    $this->display = EntityViewDisplay::create([
+      'targetEntityType' => $entity_type,
+      'bundle' => $bundle,
+      'mode' => 'default',
+      'status' => TRUE,
+    ])->setComponent($this->fieldName, [
+      'type' => 'string',
+      'settings' => [],
+    ]);
+    $this->display->save();
+  }
+
+  /**
+   * Tests availability of third party settings in field render arrays.
+   */
+  public function testThirdPartySettings() {
+    $third_party_settings = [
+      'field_test' => [
+        'foo' => 'bar',
+      ],
+    ];
+    $component = $this->display->getComponent($this->fieldName);
+    $component['third_party_settings'] = $third_party_settings;
+    $this->display->setComponent($this->fieldName, $component)->save();
+    $entity = EntityTestRev::create([]);
+
+    $entity->{$this->fieldName}->value = $this->randomString();
+    $build = $entity->{$this->fieldName}->view('default');
+    $this->assertEquals($third_party_settings, $build['#third_party_settings']);
+  }
+
+}
diff --git a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index ab73909171aeba682551f15b0b139ac639a3092e..968519e47b3f2ce18462daaedabd34ef83687dfd 100644
--- a/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/web/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -150,6 +150,13 @@ public function testFieldInstances() {
     $this->assertNull($name_field);
     $description_field = FieldConfig::load('taxonomy_term.test_vocabulary.description_field');
     $this->assertNull($description_field);
+
+    $boolean_field = FieldConfig::load('node.test_content_type.field_boolean');
+    $expected_settings = [
+      'on_label' => '1',
+      'off_label' => 'Off',
+    ];
+    $this->assertSame($expected_settings, $boolean_field->get('settings'));
   }
 
   /**
diff --git a/web/core/modules/file/file.module b/web/core/modules/file/file.module
index d3508314a665ae48aae51a3855c02b63ace8fe91..5c49c211b7667b18f741a2533a81e4c735b7b514 100644
--- a/web/core/modules/file/file.module
+++ b/web/core/modules/file/file.module
@@ -974,7 +974,7 @@ function _file_save_upload_single(\SplFileInfo $file_info, $form_field_name, $va
   $values = [
     'uid' => $user->id(),
     'status' => 0,
-    'filename' => $file_info->getClientOriginalName(),
+    'filename' => trim($file_info->getClientOriginalName(), '.'),
     'uri' => $file_info->getRealPath(),
     'filesize' => $file_info->getSize(),
   ];
diff --git a/web/core/modules/file/tests/src/Functional/FileManagedFileElementTest.php b/web/core/modules/file/tests/src/Functional/FileManagedFileElementTest.php
index 7feaa507dab8464c1a80d86887608fe6db9325e8..0b6254d811628e78338c395baca61eeaac3c261a 100644
--- a/web/core/modules/file/tests/src/Functional/FileManagedFileElementTest.php
+++ b/web/core/modules/file/tests/src/Functional/FileManagedFileElementTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\file\Functional;
 
+use Drupal\file\Entity\File;
+
 /**
  * Tests the 'managed_file' element type.
  *
@@ -151,6 +153,21 @@ public function testManagedFileRemoved() {
     $this->assertRaw('The file referenced by the Managed <em>file &amp; butter</em> field does not exist.');
   }
 
+  /**
+   * Tests file names have leading . removed.
+   */
+  public function testFileNameTrim() {
+    file_put_contents('public://.leading-period.txt', $this->randomString(32));
+    $last_fid_prior = $this->getLastFileId();
+    $this->drupalPostForm('file/test/0/0/0', [
+      'files[file]' => \Drupal::service('file_system')->realpath('public://.leading-period.txt'),
+    ], t('Save'));
+    $next_fid = $this->getLastFileId();
+    $this->assertGreaterThan($last_fid_prior, $next_fid);
+    $file = File::load($next_fid);
+    $this->assertEquals('leading-period.txt', $file->getFilename());
+  }
+
   /**
    * Ensure a file entity can be saved when the file does not exist on disk.
    */
diff --git a/web/core/modules/image/image.module b/web/core/modules/image/image.module
index 4c0e8cca99347b23ebfd0f33dd12ac0053aaa725..770b6c621a5df7aeadbf8a2d3b36d52dce9528c8 100644
--- a/web/core/modules/image/image.module
+++ b/web/core/modules/image/image.module
@@ -275,7 +275,6 @@ function image_style_options($include_empty = TRUE) {
  *   - width: The width of the image.
  *   - height: The height of the image.
  *   - style_name: The name of the image style to be applied.
- *   - attributes: Additional attributes to apply to the image.
  *   - uri: URI of the source image before styling.
  *   - alt: The alternative text for text-based browsers. HTML 4 and XHTML 1.0
  *     always require an alt attribute. The HTML 5 draft allows the alt
@@ -289,7 +288,8 @@ function image_style_options($include_empty = TRUE) {
  *     - http://dev.w3.org/html5/spec/Overview.html#alt
  *   - title: The title text is displayed when the image is hovered in some
  *     popular browsers.
- *   - attributes: Associative array of attributes to be placed in the img tag.
+ *   - attributes: Associative array of additional attributes to be placed in
+ *     the img tag.
  */
 function template_preprocess_image_style(&$variables) {
   $style = ImageStyle::load($variables['style_name']);
diff --git a/web/core/modules/image/src/Entity/ImageStyle.php b/web/core/modules/image/src/Entity/ImageStyle.php
index 3baded7cee7325df83daed3c560445294fd1f20d..ada9ad189bbc0ab999f0e07d9f6a7134929675cf 100644
--- a/web/core/modules/image/src/Entity/ImageStyle.php
+++ b/web/core/modules/image/src/Entity/ImageStyle.php
@@ -182,7 +182,10 @@ public function buildUri($uri) {
       // source files not stored in the default scheme.
       if ($source_scheme != $default_scheme) {
         $class = $this->getStreamWrapperManager()->getClass($source_scheme);
-        $is_writable = $class::getType() & StreamWrapperInterface::WRITE;
+        $is_writable = NULL;
+        if ($class) {
+          $is_writable = $class::getType() & StreamWrapperInterface::WRITE;
+        }
 
         // Compute the derivative URI scheme. Derivatives created from writable
         // source stream wrappers will inherit the scheme. Derivatives created
diff --git a/web/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php b/web/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php
index 0d40769ae08f49fe58756f81cbda3dd056826714..c677ca37814568bd137750d26701ebc30c1216a9 100644
--- a/web/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php
+++ b/web/core/modules/image/src/Plugin/migrate/process/d6/ImageCacheActions.php
@@ -20,6 +20,9 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     $effects = [];
 
     foreach ($row->getSourceProperty('actions') as $action) {
+      if (empty($action['action'])) {
+        continue;
+      }
       $id = preg_replace('/^imagecache/', 'image', $action['action']);
 
       if ($id === 'image_crop') {
diff --git a/web/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php b/web/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
index 8a6673383996559fd6ccad33c9fa8e246876b150..183fac07306423eba3017d606152cab7494efc15 100644
--- a/web/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
+++ b/web/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
@@ -112,6 +112,12 @@ public function denormalize($data, $class, $format = NULL, array $context = [])
     // be expanded to an array of all properties, we special-case single-value
     // properties.
     if (!is_array($data)) {
+      // The NULL normalization means there is no value, hence we can return
+      // early. Note that this is not just an optimization but a necessity for
+      // field types without main properties (such as the "map" field type).
+      if ($data === NULL) {
+        return $data;
+      }
       $property_value = $data;
       $property_name = $item_definition->getMainPropertyName();
       $property_value_class = $property_definitions[$property_name]->getClass();
diff --git a/web/core/modules/jsonapi/src/ParamConverter/EntityUuidConverter.php b/web/core/modules/jsonapi/src/ParamConverter/EntityUuidConverter.php
index aeec4c5d44b52c9af7c9267f36ef5214bc6b17fa..75f7181796ff895e9911ae7b51925411ffcfdf36 100644
--- a/web/core/modules/jsonapi/src/ParamConverter/EntityUuidConverter.php
+++ b/web/core/modules/jsonapi/src/ParamConverter/EntityUuidConverter.php
@@ -2,11 +2,10 @@
 
 namespace Drupal\jsonapi\ParamConverter;
 
-use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\TranslatableInterface;
 use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\ParamConverter\EntityConverter;
-use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\jsonapi\Routing\Routes;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
@@ -62,7 +61,7 @@ public function convert($value, $definition, $name, array $defaults) {
       $entity = reset($entities);
       // If the entity type is translatable, ensure we return the proper
       // translation object for the current context.
-      if ($entity instanceof EntityInterface && $entity instanceof TranslatableInterface) {
+      if ($entity instanceof TranslatableInterface && $entity->isTranslatable()) {
         // @see https://www.drupal.org/project/drupal/issues/2624770
         $entity_repository = isset($this->entityRepository) ? $this->entityRepository : $this->entityManager;
         $entity = $entity_repository->getTranslationFromContext($entity, NULL, ['operation' => 'entity_upcast']);
diff --git a/web/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php b/web/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
index 995dfeed42f9a227e58689b4d308f72f476b58ca..ed52f2cd4f9ea238ea3980d4a9abcf8c51dd5482 100644
--- a/web/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
+++ b/web/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
@@ -102,7 +102,7 @@ public function all() {
       $resource_types = [];
       foreach ($this->entityTypeManager->getDefinitions() as $entity_type) {
         $resource_types = array_merge($resource_types, array_map(function ($bundle) use ($entity_type) {
-          return $this->createResourceType($entity_type, $bundle);
+          return $this->createResourceType($entity_type, (string) $bundle);
         }, array_keys($this->entityTypeBundleInfo->getBundleInfo($entity_type->id()))));
       }
       foreach ($resource_types as $resource_type) {
diff --git a/web/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalMultilingualTest.php b/web/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalMultilingualTest.php
index 16799ef6f44bbc5c2258c685cbe5758f307a520e..c7823eccbce6d972a9d9cde9c30c02d7f6c89901 100644
--- a/web/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalMultilingualTest.php
+++ b/web/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalMultilingualTest.php
@@ -26,6 +26,7 @@ class JsonApiFunctionalMultilingualTest extends JsonApiFunctionalTestBase {
    */
   public static $modules = [
     'language',
+    'content_translation',
   ];
 
   /**
@@ -46,6 +47,13 @@ protected function setUp() {
       ->set('url.prefixes.ca-fr', 'ca-fr')
       ->save();
 
+    ContentLanguageSettings::create([
+      'target_entity_type_id' => 'node',
+      'target_bundle' => 'article',
+    ])
+      ->setThirdPartySetting('content_translation', 'enabled', TRUE)
+      ->save();
+
     $this->createDefaultContent(5, 5, TRUE, TRUE, static::IS_MULTILINGUAL, FALSE);
   }
 
@@ -139,10 +147,8 @@ public function testPatchTranslation() {
 
     // Specifying a langcode is allowed once configured to be alterable. But
     // modifying the language of a non-default translation is still not allowed.
-    ContentLanguageSettings::create([
-      'target_entity_type_id' => 'node',
-      'target_bundle' => 'article',
-    ])->setLanguageAlterable(TRUE)
+    ContentLanguageSettings::loadByEntityTypeBundle('node', 'article')
+      ->setLanguageAlterable(TRUE)
       ->save();
     $response = $this->request('PATCH', Url::fromUri('base:/ca/jsonapi/node/article/' . $this->nodes[0]->uuid()), $request_options);
     $this->assertSame(500, $response->getStatusCode());
@@ -267,10 +273,8 @@ public function testPostTranslation() {
 
     // Specifying a langcode is allowed once configured to be alterable. Now an
     // entity can be created with the specified langcode.
-    ContentLanguageSettings::create([
-      'target_entity_type_id' => 'node',
-      'target_bundle' => 'article',
-    ])->setLanguageAlterable(TRUE)
+    ContentLanguageSettings::loadByEntityTypeBundle('node', 'article')
+      ->setLanguageAlterable(TRUE)
       ->save();
     $request_document['data']['attributes']['langcode'] = 'ca';
     $request_options[RequestOptions::BODY] = Json::encode($request_document);
diff --git a/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php b/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
index fde4ab22b6cbff5ab27b33332f80833081d5d160..011ce257ade5929052d684597ddcde61fd132bd2 100644
--- a/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
+++ b/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
@@ -6,9 +6,12 @@
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
 use Drupal\comment\Tests\CommentTestTrait;
 use Drupal\Component\Serialization\Json;
+use Drupal\Core\Entity\TranslatableInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Url;
 use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
+use Drupal\entity_test\Entity\EntityTest;
 use Drupal\entity_test\Entity\EntityTestMapField;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
@@ -873,19 +876,24 @@ public function testMapFieldTypeNormalizationFromIssue3040590() {
     $this->assertTrue($this->container->get('module_installer')->install(['entity_test'], TRUE), 'Installed modules.');
 
     // Create data.
-    $entity = EntityTestMapField::create([
+    $entity_a = EntityTestMapField::create([
+      'name' => 'A',
       'data' => [
         'foo' => 'bar',
         'baz' => 'qux',
       ],
     ]);
-    $entity->save();
+    $entity_a->save();
+    $entity_b = EntityTestMapField::create([
+      'name' => 'B',
+    ]);
+    $entity_b->save();
     $user = $this->drupalCreateUser([
       'administer entity_test content',
     ]);
 
     // Test.
-    $url = Url::fromUri(sprintf('internal:/jsonapi/entity_test_map_field/entity_test_map_field', $entity->uuid()));
+    $url = Url::fromUri('internal:/jsonapi/entity_test_map_field/entity_test_map_field?sort=drupal_internal__id');
     $request_options = [
       RequestOptions::AUTH => [$user->getUsername(), $user->pass_raw],
     ];
@@ -896,7 +904,8 @@ public function testMapFieldTypeNormalizationFromIssue3040590() {
       'foo' => 'bar',
       'baz' => 'qux',
     ], $data['data'][0]['attributes']['data']);
-    $entity->set('data', [
+    $this->assertNull($data['data'][1]['attributes']['data']);
+    $entity_a->set('data', [
       'foo' => 'bar',
     ])->save();
     $response = $this->request('GET', $url, $request_options);
@@ -990,4 +999,105 @@ public function testLeakedCacheMetadataViaRdfFromIssue3053827() {
     $this->assertSame(200, $response->getStatusCode());
   }
 
+  /**
+   * Ensure non-translatable entities can be PATCHed with an alternate language.
+   *
+   * @see https://www.drupal.org/project/drupal/issues/3043168
+   */
+  public function testNonTranslatableEntityUpdatesFromIssue3043168() {
+    // Enable write-mode.
+    $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE);
+    // Set the site language to Russian.
+    $this->config('system.site')->set('langcode', 'ru')->set('default_langcode', 'ru')->save(TRUE);
+    // Install a "custom" entity type that is not translatable.
+    $this->assertTrue($this->container->get('module_installer')->install(['entity_test'], TRUE), 'Installed modules.');
+    // Clear and rebuild caches and routes.
+    $this->rebuildAll();
+    // Create a test entity.
+    // @see \Drupal\language\DefaultLanguageItem
+    $entity = EntityTest::create([
+      'name' => 'Alexander',
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+    ]);
+    $entity->save();
+    // Ensure it is an instance of TranslatableInterface and that it is *not*
+    // translatable.
+    $this->assertInstanceOf(TranslatableInterface::class, $entity);
+    $this->assertFalse($entity->isTranslatable());
+    // Set up a test user with permission to view and update the test entity.
+    $user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
+    $request_options[RequestOptions::HEADERS]['Accept'] = 'application/vnd.api+json';
+    $request_options[RequestOptions::AUTH] = [
+      $user->getUsername(),
+      $user->pass_raw,
+    ];
+    // GET the test entity via JSON:API.
+    $entity_url = Url::fromUri('internal:/jsonapi/entity_test/entity_test/' . $entity->uuid());
+    $response = $this->request('GET', $entity_url, $request_options);
+    $this->assertSame(200, $response->getStatusCode());
+    $response_document = Json::decode($response->getBody());
+    // Ensure that the entity's langcode attribute is 'und'.
+    $this->assertSame(LanguageInterface::LANGCODE_NOT_SPECIFIED, $response_document['data']['attributes']['langcode']);
+    // Prepare to PATCH the entity via JSON:API.
+    $request_options[RequestOptions::HEADERS]['Content-Type'] = 'application/vnd.api+json';
+    $request_options[RequestOptions::JSON] = [
+      'data' => [
+        'type' => 'entity_test--entity_test',
+        'id' => $entity->uuid(),
+        'attributes' => [
+          'name' => 'Constantine',
+        ],
+      ],
+    ];
+    // Issue the PATCH request and verify that the test entity was successfully
+    // updated.
+    $response = $this->request('PATCH', $entity_url, $request_options);
+    $this->assertSame(200, $response->getStatusCode(), (string) $response->getBody());
+    $response_document = Json::decode($response->getBody());
+    // Ensure that the entity's langcode attribute is still 'und' and the name
+    // was successfully updated.
+    $this->assertSame(LanguageInterface::LANGCODE_NOT_SPECIFIED, $response_document['data']['attributes']['langcode']);
+    $this->assertSame('Constantine', $response_document['data']['attributes']['name']);
+  }
+
+  /**
+   * Ensure optional `@FieldType=map` fields are denormalized correctly.
+   */
+  public function testEmptyMapFieldTypeDenormalization() {
+    $this->config('jsonapi.settings')->set('read_only', FALSE)->save(TRUE);
+
+    // Set up data model.
+    $this->assertTrue($this->container->get('module_installer')->install(['entity_test'], TRUE), 'Installed modules.');
+
+    // Create data.
+    $entity = EntityTestMapField::create([
+      'name' => 'foo',
+    ]);
+    $entity->save();
+    $user = $this->drupalCreateUser([
+      'administer entity_test content',
+    ]);
+
+    // Test.
+    $url = Url::fromUri(sprintf('internal:/jsonapi/entity_test_map_field/entity_test_map_field/%s', $entity->uuid()));
+    $request_options = [
+      RequestOptions::AUTH => [$user->getAccountName(), $user->pass_raw],
+    ];
+    // Retrieve the current representation of the entity.
+    $response = $this->request('GET', $url, $request_options);
+    $this->assertSame(200, $response->getStatusCode());
+    $doc = Json::decode((string) $response->getBody());
+    // Modify the title. The @FieldType=map normalization is not changed. (The
+    // name of this field is confusingly also 'data'.)
+    $doc['data']['attributes']['name'] = 'bar';
+    $request_options[RequestOptions::HEADERS] = [
+      'Content-Type' => 'application/vnd.api+json',
+      'Accept' => 'application/vnd.api+json',
+    ];
+    $request_options[RequestOptions::BODY] = Json::encode($doc);
+    $response = $this->request('PATCH', $url, $request_options);
+    $this->assertSame(200, $response->getStatusCode());
+    $this->assertSame($doc['data']['attributes']['data'], Json::decode((string) $response->getBody())['data']['attributes']['data']);
+  }
+
 }
diff --git a/web/core/modules/jsonapi/tests/src/Kernel/ResourceType/ResourceTypeRepositoryTest.php b/web/core/modules/jsonapi/tests/src/Kernel/ResourceType/ResourceTypeRepositoryTest.php
index 34da1445a7ce74d2be698bb856fe70565f442219..ea6a3fcf18c00e0bced099c1dae4f017402a64a7 100644
--- a/web/core/modules/jsonapi/tests/src/Kernel/ResourceType/ResourceTypeRepositoryTest.php
+++ b/web/core/modules/jsonapi/tests/src/Kernel/ResourceType/ResourceTypeRepositoryTest.php
@@ -51,6 +51,9 @@ protected function setUp() {
     NodeType::create([
       'type' => 'page',
     ])->save();
+    NodeType::create([
+      'type' => '42',
+    ])->save();
 
     $this->resourceTypeRepository = $this->container->get('jsonapi.resource_type.repository');
   }
@@ -92,6 +95,7 @@ public function testGet($entity_type_id, $bundle, $entity_class) {
   public function getProvider() {
     return [
       ['node', 'article', 'Drupal\node\Entity\Node'],
+      ['node', '42', 'Drupal\node\Entity\Node'],
       ['node_type', 'node_type', 'Drupal\node\Entity\NodeType'],
       ['menu', 'menu', 'Drupal\system\Entity\Menu'],
     ];
diff --git a/web/core/modules/media/src/OEmbed/UrlResolver.php b/web/core/modules/media/src/OEmbed/UrlResolver.php
index f8d617414d85c7bedba4cd0886636c0c3395ee95..599bdcc8b7883a29815f808f3f139a3971f4b43d 100644
--- a/web/core/modules/media/src/OEmbed/UrlResolver.php
+++ b/web/core/modules/media/src/OEmbed/UrlResolver.php
@@ -173,7 +173,7 @@ public function getResourceUrl($url, $max_width = NULL, $max_height = NULL) {
     // provide extra parameters in the query string. For example, Instagram also
     // supports the 'omitscript' parameter.
     $this->moduleHandler->alter('oembed_resource_url', $parsed_url, $provider);
-    $resource_url = $parsed_url['path'] . '?' . UrlHelper::buildQuery($parsed_url['query']);
+    $resource_url = $parsed_url['path'] . '?' . rawurldecode(UrlHelper::buildQuery($parsed_url['query']));
 
     $this->urlCache[$url] = $resource_url;
     $this->cacheSet($cache_id, $resource_url);
diff --git a/web/core/modules/media/src/Plugin/Field/FieldFormatter/OEmbedFormatter.php b/web/core/modules/media/src/Plugin/Field/FieldFormatter/OEmbedFormatter.php
index 65d601eb63733bc263cde662644448ed072f4da7..c08c84f40ab21890118cc8ea16182c24d871afbd 100644
--- a/web/core/modules/media/src/Plugin/Field/FieldFormatter/OEmbedFormatter.php
+++ b/web/core/modules/media/src/Plugin/Field/FieldFormatter/OEmbedFormatter.php
@@ -229,6 +229,13 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
           ],
         ];
 
+        // An empty title attribute will disable title inheritance, so only
+        // add it if the resource has a title.
+        $title = $resource->getTitle();
+        if ($title) {
+          $element[$delta]['#attributes']['title'] = $title;
+        }
+
         CacheableMetadata::createFromObject($resource)
           ->addCacheTags($this->config->getCacheTags())
           ->applyTo($element[$delta]);
diff --git a/web/core/modules/media/tests/fixtures/oembed/video_vimeo-no-title.html b/web/core/modules/media/tests/fixtures/oembed/video_vimeo-no-title.html
new file mode 100644
index 0000000000000000000000000000000000000000..210151fa30c1d205c9a3ec0fc54b775bb2872917
--- /dev/null
+++ b/web/core/modules/media/tests/fixtures/oembed/video_vimeo-no-title.html
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html lang="de">
+<head>
+    <link rel="alternate" href="video_vimeo-no-title.json"
+          type="application/json+oembed" title="">
+</head>
+<body></body>
+</html>
diff --git a/web/core/modules/media/tests/fixtures/oembed/video_vimeo-no-title.json b/web/core/modules/media/tests/fixtures/oembed/video_vimeo-no-title.json
new file mode 100644
index 0000000000000000000000000000000000000000..a4e905685d2837f23b21285355e09b05243f3c79
--- /dev/null
+++ b/web/core/modules/media/tests/fixtures/oembed/video_vimeo-no-title.json
@@ -0,0 +1,16 @@
+{
+  "type": "video",
+  "version": "1.0",
+  "provider_name": "Vimeo",
+  "provider_url": "https:\/\/vimeo.com\/",
+  "title": "",
+  "author_name": "Tendenci - The Open Source AMS",
+  "author_url": "https:\/\/vimeo.com\/schipul",
+  "html": "<iframe width=\"480\">By the power of Greyskull, Vimeo works!</iframe>",
+  "width": 480,
+  "height": 360,
+  "description": "Special thanks to Tendenci, formerly Schipul for sponsoring this video with training, equipment and time. The open source way. All creative however was self directed by the individuals - A. Hughes (www.schipul.com\/ahughes) featuring QCait (www.schipul.com\/qcait) - Hands On Drupal\n\nDrupal is a free software package that allows an individual or a community of users to easily publish, manage and organize a wide variety of content on a website.\n\nNeed a little Drupal help or just want to geek out with us?  Visit our www.schipul.com\/drupal for more info - we'd love to connect!\n\nGo here for Drupal Common Terms and Suggested Modules : http:\/\/schipul.com\/en\/helpfiles\/v\/229",
+  "thumbnail_url": "internal:\/core\/misc\/druplicon.png",
+  "thumbnail_width": 295,
+  "thumbnail_height": 221
+}
diff --git a/web/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php b/web/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php
index eecc9cde5fb2533cb58c792e1cbc8de522c0e1de..2a0a0959586d1f1bcde997496f6a230f42299714 100644
--- a/web/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php
+++ b/web/core/modules/media/tests/src/Functional/FieldFormatter/OEmbedFormatterTest.php
@@ -58,20 +58,35 @@ public function providerRender() {
         [
           'iframe' => [
             'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
-            'width' => 480,
-            'height' => 360,
+            'width' => '480',
+            'height' => '360',
+            'title' => 'Drupal Rap Video - Schipulcon09',
           ],
         ],
       ],
       'Vimeo video, resized' => [
         'https://vimeo.com/7073899',
         'video_vimeo.json?maxwidth=100&maxheight=100',
-        ['max_width' => 100, 'max_height' => 100],
+        ['max_width' => '100', 'max_height' => '100'],
         [
           'iframe' => [
             'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
-            'width' => 100,
-            'height' => 100,
+            'width' => '100',
+            'height' => '100',
+            'title' => 'Drupal Rap Video - Schipulcon09',
+          ],
+        ],
+      ],
+      'Vimeo video, no title' => [
+        'https://vimeo.com/7073899',
+        'video_vimeo-no-title.json',
+        [],
+        [
+          'iframe' => [
+            'src' => '/media/oembed?url=https%3A//vimeo.com/7073899',
+            'width' => '480',
+            'height' => '360',
+            'title' => NULL,
           ],
         ],
       ],
@@ -82,8 +97,8 @@ public function providerRender() {
         [
           'iframe' => [
             'src' => '/media/oembed?url=https%3A//twitter.com/drupaldevdays/status/935643039741202432',
-            'width' => 550,
-            'height' => 360,
+            'width' => '550',
+            'height' => '360',
           ],
         ],
       ],
@@ -94,8 +109,8 @@ public function providerRender() {
         [
           'img' => [
             'src' => '/core/misc/druplicon.png',
-            'width' => 88,
-            'height' => 100,
+            'width' => '88',
+            'height' => '100',
           ],
         ],
       ],
@@ -171,8 +186,14 @@ public function testRender($url, $resource_url, array $formatter_settings, array
     $assert = $this->assertSession();
     $assert->statusCodeEquals(200);
     foreach ($selectors as $selector => $attributes) {
+      $element = $assert->elementExists('css', $selector);
       foreach ($attributes as $attribute => $value) {
-        $assert->elementAttributeContains('css', $selector, $attribute, $value);
+        if (isset($value)) {
+          $this->assertContains($value, $element->getAttribute($attribute));
+        }
+        else {
+          $this->assertFalse($element->hasAttribute($attribute));
+        }
       }
     }
   }
diff --git a/web/core/modules/media/tests/src/Functional/UrlResolverTest.php b/web/core/modules/media/tests/src/Functional/UrlResolverTest.php
index 1dfe5d6abee925765cf9479305cc13321b0e1aa9..5e4dfc35143bb45b9b8b38f92422b28afa652f19 100644
--- a/web/core/modules/media/tests/src/Functional/UrlResolverTest.php
+++ b/web/core/modules/media/tests/src/Functional/UrlResolverTest.php
@@ -35,15 +35,15 @@ public function providerEndpointMatching() {
     return [
       'match by endpoint: Twitter' => [
         'https://twitter.com/Dries/status/999985431595880448',
-        'https://publish.twitter.com/oembed?url=https%3A//twitter.com/Dries/status/999985431595880448',
+        'https://publish.twitter.com/oembed?url=https://twitter.com/Dries/status/999985431595880448',
       ],
       'match by endpoint: Vimeo' => [
         'https://vimeo.com/14782834',
-        'https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/14782834',
+        'https://vimeo.com/api/oembed.json?url=https://vimeo.com/14782834',
       ],
       'match by endpoint: CollegeHumor' => [
         'http://www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
-        'http://www.collegehumor.com/oembed.json?url=http%3A//www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
+        'http://www.collegehumor.com/oembed.json?url=http://www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
       ],
     ];
   }
diff --git a/web/core/modules/media/tests/src/Kernel/MediaSourceFileTest.php b/web/core/modules/media/tests/src/Kernel/MediaSourceFileTest.php
index c36f2b63975ffa952331c8ee809993aac7e583af..973e7522465d09f8ab498e8053a796a93079da14 100644
--- a/web/core/modules/media/tests/src/Kernel/MediaSourceFileTest.php
+++ b/web/core/modules/media/tests/src/Kernel/MediaSourceFileTest.php
@@ -27,4 +27,21 @@ public function testFileExtensionConstraint() {
     $this->assertCount(0, $result);
   }
 
+  /**
+   * Tests a media file can be deleted.
+   */
+  public function testFileDeletion() {
+    $mediaType = $this->createMediaType('file');
+    $media = $this->generateMedia('test.txt', $mediaType);
+    $media->save();
+
+    $source_field_name = $mediaType->getSource()
+      ->getSourceFieldDefinition($mediaType)
+      ->getName();
+    /** @var \Drupal\file\FileInterface $file */
+    $file = $media->get($source_field_name)->entity;
+    $file->delete();
+    $this->assertEmpty($this->container->get('entity_type.manager')->getStorage('file')->loadByProperties(['filename' => 'test.txt']));
+  }
+
 }
diff --git a/web/core/modules/media_library/src/Form/AddFormBase.php b/web/core/modules/media_library/src/Form/AddFormBase.php
index 56ff257648d500072eb46a5dd631094e67aefc3b..1445d36699a2053a6c2d79653fa079b1b2fd9b09 100644
--- a/web/core/modules/media_library/src/Form/AddFormBase.php
+++ b/web/core/modules/media_library/src/Form/AddFormBase.php
@@ -504,7 +504,12 @@ protected function processInputValues(array $source_field_values, array $form, F
     $form_state->set('media', array_values($media));
     // Save the selected items in the form state so they are remembered when an
     // item is removed.
-    $form_state->set('current_selection', array_filter(explode(',', $form_state->getValue('current_selection'))));
+    $media = $this->entityTypeManager->getStorage('media')
+      ->loadMultiple(explode(',', $form_state->getValue('current_selection')));
+    // Any ID can be passed to the form, so we have to check access.
+    $form_state->set('current_selection', array_filter($media, function ($media_item) {
+      return $media_item->access('view');
+    }));
     $form_state->setRebuild();
   }
 
@@ -798,13 +803,9 @@ protected function getSourceFieldName(MediaTypeInterface $media_type) {
    *   An array containing the pre-selected media items keyed by ID.
    */
   protected function getPreSelectedMediaItems(FormStateInterface $form_state) {
-    // Get the current selection from the form state.
+    // Get the pre-selected media items from the form state.
     // @see ::processInputValues()
-    $media_ids = $form_state->get('current_selection');
-    if (!$media_ids) {
-      return [];
-    }
-    return $this->entityTypeManager->getStorage('media')->loadMultiple($media_ids);
+    return $form_state->get('current_selection') ?: [];
   }
 
   /**
@@ -815,7 +816,7 @@ protected function getPreSelectedMediaItems(FormStateInterface $form_state) {
    *
    * @return \Drupal\media\MediaInterface[]
    *   An array containing the added media items keyed by delta. The media items
-   *   won't have an ID untill they are saved in ::submitForm().
+   *   won't have an ID until they are saved in ::submitForm().
    */
   protected function getAddedMediaItems(FormStateInterface $form_state) {
     return $form_state->get('media') ?: [];
diff --git a/web/core/modules/media_library/src/MediaLibraryState.php b/web/core/modules/media_library/src/MediaLibraryState.php
index 973fdf9cf9ad9cfec8593609d7fa9b149541bbf9..98f26122dfb97cc6846c7e11a7048ad02e865f8b 100644
--- a/web/core/modules/media_library/src/MediaLibraryState.php
+++ b/web/core/modules/media_library/src/MediaLibraryState.php
@@ -179,13 +179,19 @@ protected function validateRequiredParameters($opener_id, array $allowed_media_t
    */
   public function getHash() {
     // Create a hash from the required state parameters and the serialized
-    // optional opener-specific parameters.
+    // optional opener-specific parameters. Sort the allowed types and
+    // opener parameters so that differences in order do not result in
+    // different hashes.
+    $allowed_media_type_ids = array_values($this->getAllowedTypeIds());
+    sort($allowed_media_type_ids);
+    $opener_parameters = $this->getOpenerParameters();
+    ksort($opener_parameters);
     $hash = implode(':', [
       $this->getOpenerId(),
-      implode(':', $this->getAllowedTypeIds()),
+      implode(':', $allowed_media_type_ids),
       $this->getSelectedTypeId(),
       $this->getAvailableSlots(),
-      serialize($this->getOpenerParameters()),
+      serialize($opener_parameters),
     ]);
 
     return Crypt::hmacBase64($hash, \Drupal::service('private_key')->get() . Settings::getHashSalt());
diff --git a/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php b/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
index 419cf66174471211f477e45137d931c43fc46e57..3cd05e1082a777c8e7cd5bfa4e98438d9ea4d03a 100644
--- a/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
+++ b/web/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
@@ -146,7 +146,9 @@ protected function getAllowedMediaTypeIdsSorted() {
 
     // Get the configured media types from the field storage.
     $handler_settings = $this->getFieldSetting('handler_settings');
-    $allowed_media_type_ids = $handler_settings['target_bundles'];
+    // 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;
 
     // When there are no allowed media types, return the empty array.
     if ($allowed_media_type_ids === []) {
@@ -464,15 +466,19 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     // attribute is the same as $field_widget_id. The entity ID, entity type ID,
     // bundle, field name are used for access checking.
     $entity = $items->getEntity();
-    $state = MediaLibraryState::create('media_library.opener.field_widget', $allowed_media_type_ids, $selected_type_id, $remaining, [
+    $opener_parameters = [
       'field_widget_id' => $field_widget_id,
       'entity_type_id' => $entity->getEntityTypeId(),
       'bundle' => $entity->bundle(),
       'field_name' => $field_name,
-      // The entity ID needs to be a string to ensure that the media library
-      // state generates its tamper-proof hash in a consistent way.
-      'entity_id' => (string) $entity->id(),
-    ]);
+    ];
+    // Only add the entity ID when we actually have one. The entity ID needs to
+    // be a string to ensure that the media library state generates its
+    // tamper-proof hash in a consistent way.
+    if (!$entity->isNew()) {
+      $opener_parameters['entity_id'] = (string) $entity->id();
+    }
+    $state = MediaLibraryState::create('media_library.opener.field_widget', $allowed_media_type_ids, $selected_type_id, $remaining, $opener_parameters);
 
     // Add a button that will load the Media library in a modal using AJAX.
     $element['media_library_open_button'] = [
diff --git a/web/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php b/web/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php
index cbefde5417d9ec2380c32104710c4e10fa5ae0d4..a881a80978942896c0bd88adeb6525852f43588d 100644
--- a/web/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php
+++ b/web/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTest.php
@@ -324,6 +324,28 @@ public function testViewsAdmin() {
   public function testWidgetAccess() {
     $assert_session = $this->assertSession();
 
+    // Assert users can not select media items they do not have access to.
+    $unpublished_media = Media::create([
+      'name' => 'Mosquito',
+      'bundle' => 'type_one',
+      'field_media_test' => 'Mosquito',
+      'status' => FALSE,
+    ]);
+    $unpublished_media->save();
+    $unpublished_media_id = $unpublished_media->id();
+    // Visit a node create page.
+    $this->drupalGet('node/add/basic_page');
+    // Set the hidden value and trigger the mousedown event on the button via
+    // JavaScript since the field and button are hidden.
+    $this->getSession()->executeScript("jQuery('[data-media-library-widget-value=\"field_unlimited_media\"]').val('1,2,$unpublished_media_id')");
+    $this->getSession()->executeScript("jQuery('[data-media-library-widget-update=\"field_unlimited_media\"]').trigger('mousedown')");
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.media-library-item'));
+    // Assert the published items are selected and the unpublished item is not
+    // selected.
+    $assert_session->pageTextContains('Horse');
+    $assert_session->pageTextContains('Bear');
+    $assert_session->pageTextNotContains('Mosquito');
+
     $this->drupalLogout();
 
     $role = Role::load(RoleInterface::ANONYMOUS_ID);
@@ -547,66 +569,6 @@ public function testWidget() {
     $assert_session->pageTextContains('Bear');
     $page->find('css', '.ui-dialog-titlebar-close')->click();
 
-    // Assert the media library contains header links to switch between the grid
-    // and table display.
-    $assert_session->elementExists('css', '.media-library-open-button[name^="field_unlimited_media"]')->click();
-    $assert_session->assertWaitOnAjaxRequest();
-    $assert_session->elementExists('css', '.media-library-view .media-library-item--grid');
-    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--table');
-    // Assert the 'Apply filter' button is not moved to the button pane.
-    $button_pane = $assert_session->elementExists('css', '.ui-dialog-buttonpane');
-    $assert_session->buttonExists('Insert selected', $button_pane);
-    $assert_session->buttonNotExists('Apply filters', $button_pane);
-    $assert_session->linkExists('Grid');
-    $page->clickLink('Table');
-    // Assert the display change is correctly announced for screen readers.
-    $this->assertNotEmpty($assert_session->waitForText('Loading table view.'));
-    $this->assertNotEmpty($assert_session->waitForText('Changed to table view.'));
-    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.media-library-view .media-library-item--table'));
-    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--grid');
-    // Assert the 'Apply filter' button is not moved to the button pane.
-    $assert_session->buttonExists('Insert selected', $button_pane);
-    $assert_session->buttonNotExists('Apply filters', $button_pane);
-    $assert_session->pageTextContains('Dog');
-    $assert_session->pageTextContains('Bear');
-    $assert_session->pageTextNotContains('Turtle');
-    // Assert the exposed filters can be applied.
-    $page->fillField('Name', 'Dog');
-    $page->pressButton('Apply filters');
-    $assert_session->assertWaitOnAjaxRequest();
-    $assert_session->pageTextContains('Dog');
-    $assert_session->pageTextNotContains('Bear');
-    $assert_session->pageTextNotContains('Turtle');
-    $page->checkField('Select Dog');
-    $assert_session->linkExists('Table');
-    $page->clickLink('Grid');
-    // Assert the display change is correctly announced for screen readers.
-    $this->assertNotEmpty($assert_session->waitForText('Loading grid view.'));
-    $this->assertNotEmpty($assert_session->waitForText('Changed to grid view.'));
-    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.media-library-view .media-library-item--grid'));
-    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--table');
-    // Assert the exposed filters are persisted when changing display.
-    $this->assertSame('Dog', $page->findField('Name')->getValue());
-    $assert_session->pageTextContains('Dog');
-    $assert_session->pageTextNotContains('Bear');
-    $assert_session->pageTextNotContains('Turtle');
-    $assert_session->linkExists('Grid');
-    $assert_session->linkExists('Table');
-    // Select the item.
-    $assert_session->elementExists('css', '.ui-dialog-buttonpane')->pressButton('Insert selected');
-    $this->assertNotEmpty($assert_session->waitForText('Added one media item.'));
-    $assert_session->assertWaitOnAjaxRequest();
-    // Ensure that the selection completed successfully.
-    $assert_session->pageTextNotContains('Add or select media');
-    $assert_session->pageTextContains('Dog');
-    $assert_session->pageTextNotContains('Bear');
-    $assert_session->pageTextNotContains('Turtle');
-    // Clear the selection.
-    $assert_session->elementAttributeContains('css', '.media-library-item__remove', 'aria-label', 'Remove Dog');
-    $assert_session->elementExists('css', '.media-library-item__remove')->click();
-    $this->assertNotEmpty($assert_session->waitForText('Removed Dog.'));
-    $assert_session->assertWaitOnAjaxRequest();
-
     // Assert adding a single media item and removing it.
     $assert_session->elementExists('css', '.media-library-open-button[name^="field_twin_media"]')->click();
     $assert_session->assertWaitOnAjaxRequest();
@@ -856,6 +818,124 @@ public function testWidget() {
     $assert_session->pageTextNotContains('Snake');
   }
 
+  /**
+   * Tests that the views in the Media library's widget work as expected.
+   */
+  public function testWidgetViews() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    // Create more media items for use in selection. We want to have more than
+    // 24 items to trigger a pager in the widget view.
+    $media_names = [
+      'Goat',
+      'Sheep',
+      'Pig',
+      'Cow',
+      'Chicken',
+      'Duck',
+      'Donkey',
+      'Llama',
+      'Mouse',
+      'Goldfish',
+      'Rabbit',
+      'Turkey',
+      'Dove',
+      'Giraffe',
+      'Tiger',
+      'Hamster',
+      'Parrot',
+      'Monkey',
+      'Koala',
+      'Panda',
+      'Kangaroo',
+    ];
+
+    $time = time();
+    foreach ($media_names as $name) {
+      $entity = Media::create(['name' => $name, 'bundle' => 'type_one']);
+      $entity->setCreatedTime(++$time);
+      $entity->set('field_media_test', $name);
+      $entity->save();
+    }
+
+    $this->drupalGet('node/add/basic_page');
+
+    // Assert the media library contains header links to switch between the grid
+    // and table display.
+    $assert_session->elementExists('css', '.media-library-open-button[name^="field_unlimited_media"]')->click();
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->elementExists('css', '.media-library-view .media-library-item--grid');
+    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--table');
+    $assert_session->linkExists('Grid');
+    $assert_session->linkExists('Table');
+
+    // Assert the 'Apply filter' button is not moved to the button pane.
+    $button_pane = $assert_session->elementExists('css', '.ui-dialog-buttonpane');
+    $assert_session->buttonExists('Insert selected', $button_pane);
+    $assert_session->buttonNotExists('Apply filters', $button_pane);
+
+    // Assert the pager works as expected.
+    $assert_session->elementTextContains('css', '.media-library-view .pager__item.is-active', 'Page 1');
+    $assert_session->elementsCount('css', '.media-library-view .js-click-to-select-checkbox input', 24);
+    $page->clickLink('Next page');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->elementTextContains('css', '.media-library-view .pager__item.is-active', 'Page 2');
+    $assert_session->elementsCount('css', '.media-library-view .js-click-to-select-checkbox input', 1);
+    $page->clickLink('Previous page');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->elementTextContains('css', '.media-library-view .pager__item.is-active', 'Page 1');
+    $assert_session->elementsCount('css', '.media-library-view .js-click-to-select-checkbox input', 24);
+
+    // Assert the display change is correctly announced for screen readers.
+    $page->clickLink('Table');
+    $this->assertNotEmpty($assert_session->waitForText('Loading table view.'));
+    $this->assertNotEmpty($assert_session->waitForText('Changed to table view.'));
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.media-library-view .media-library-item--table'));
+    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--grid');
+
+    // Assert the 'Apply filter' button is not moved to the button pane.
+    $assert_session->buttonExists('Insert selected', $button_pane);
+    $assert_session->buttonNotExists('Apply filters', $button_pane);
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+
+    // Assert the exposed filters can be applied.
+    $page->fillField('Name', 'Dog');
+    $page->pressButton('Apply filters');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextNotContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+    $page->checkField('Select Dog');
+    $assert_session->linkExists('Table');
+    $page->clickLink('Grid');
+    // Assert the display change is correctly announced for screen readers.
+    $this->assertNotEmpty($assert_session->waitForText('Loading grid view.'));
+    $this->assertNotEmpty($assert_session->waitForText('Changed to grid view.'));
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.media-library-view .media-library-item--grid'));
+    $assert_session->elementNotExists('css', '.media-library-view .media-library-item--table');
+
+    // Assert the exposed filters are persisted when changing display.
+    $this->assertSame('Dog', $page->findField('Name')->getValue());
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextNotContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+    $assert_session->linkExists('Grid');
+    $assert_session->linkExists('Table');
+
+    // Select the item.
+    $assert_session->elementExists('css', '.ui-dialog-buttonpane')->pressButton('Insert selected');
+    $this->assertNotEmpty($assert_session->waitForText('Added one media item.'));
+    $assert_session->assertWaitOnAjaxRequest();
+    // Ensure that the selection completed successfully.
+    $assert_session->pageTextNotContains('Add or select media');
+    $assert_session->pageTextContains('Dog');
+    $assert_session->pageTextNotContains('Bear');
+    $assert_session->pageTextNotContains('Turtle');
+  }
+
   /**
    * Tests that the widget works as expected for anonymous users.
    */
@@ -1151,6 +1231,34 @@ public function testWidgetUpload() {
     $assert_session->pageTextNotContains('Add or select media');
     $assert_session->pageTextContains($file_system->basename($jpg_uri_2));
 
+    // Assert users can not select media items they do not have access to.
+    $unpublished_media = Media::create([
+      'name' => 'Mosquito',
+      'bundle' => 'type_one',
+      'field_media_test' => 'Mosquito',
+      'status' => FALSE,
+    ]);
+    $unpublished_media->save();
+    $unpublished_media_id = $unpublished_media->id();
+    $assert_session->elementExists('css', '.media-library-open-button[name^="field_unlimited_media"]')->click();
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->clickLink('Type Three');
+    $assert_session->assertWaitOnAjaxRequest();
+    // Set the hidden field with the current selection via JavaScript and upload
+    // a file.
+    $this->getSession()->executeScript("jQuery('.js-media-library-add-form-current-selection').val('1,2,$unpublished_media_id')");
+    $page->attachFileToField('Add files', $this->container->get('file_system')->realpath($png_uri_3));
+    $assert_session->assertWaitOnAjaxRequest();
+    // Assert the pre-selected items are shown.
+    $selection_area = $assert_session->elementExists('css', '.media-library-add-form__selected-media');
+    $assert_session->elementExists('css', 'summary', $selection_area)->click();
+    // Assert the published items are selected and the unpublished item is not
+    // selected.
+    $assert_session->pageTextContains('Horse');
+    $assert_session->pageTextContains('Bear');
+    $assert_session->pageTextNotContains('Mosquito');
+    $page->find('css', '.ui-dialog-titlebar-close')->click();
+
     // Assert we can also remove selected items from the selection area in the
     // upload form.
     $assert_session->elementExists('css', '.media-library-open-button[name^="field_unlimited_media"]')->click();
@@ -1503,4 +1611,36 @@ public function testWidgetOEmbed() {
     $assert_session->elementExists('css', '.media-library-menu');
   }
 
+  /**
+   * Tests field UI integration for media library widget.
+   */
+  public function testFieldUiIntegration() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $this->drupalCreateContentType(['type' => 'article']);
+    $user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer node fields',
+      'administer node form display',
+    ]);
+    $this->drupalLogin($user);
+
+    $this->drupalGet('/admin/structure/types/manage/article/fields/add-field');
+    $page->selectFieldOption('new_storage_type', 'field_ui:entity_reference:media');
+    $this->assertTrue($assert_session->waitForField('label'));
+    $page->fillField('label', 'Shatner');
+    $this->assertTrue($assert_session->waitForText('field_shatner'));
+    $page->pressButton('Save and continue');
+    $page->pressButton('Save field settings');
+    $assert_session->pageTextNotContains('Undefined index: target_bundles');
+    $page->checkField('settings[handler_settings][target_bundles][type_one]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->checkField('settings[handler_settings][target_bundles][type_two]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->checkField('settings[handler_settings][target_bundles][type_three]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save settings');
+    $assert_session->pageTextContains('Saved Shatner configuration.');
+  }
+
 }
diff --git a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php
index c9b5dd637c3099b19d69361db4fb3a500aa48a65..4e179ecb799f840680b4832ea8ed38f54e6f23b1 100644
--- a/web/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php
+++ b/web/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php
@@ -361,4 +361,28 @@ public function testOpenerParameters() {
     $this->assertSame(['foo' => 'baz'], $state->getOpenerParameters());
   }
 
+  /**
+   * Test that hash is unaffected by allowed media type order.
+   */
+  public function testHashUnaffectedByMediaTypeOrder() {
+    $state1 = MediaLibraryState::create('test', ['file', 'image'], 'image', 2);
+    $state2 = MediaLibraryState::create('test', ['image', 'file'], 'image', 2);
+    $this->assertSame($state1->getHash(), $state2->getHash());
+  }
+
+  /**
+   * Test that hash is unaffected by opener parameter order.
+   */
+  public function testHashUnaffectedByOpenerParamOrder() {
+    $state1 = MediaLibraryState::create('test', ['file'], 'file', -1, [
+      'foo' => 'baz',
+      'baz' => 'foo',
+    ]);
+    $state2 = MediaLibraryState::create('test', ['file'], 'file', -1, [
+      'baz' => 'foo',
+      'foo' => 'baz',
+    ]);
+    $this->assertSame($state1->getHash(), $state2->getHash());
+  }
+
 }
diff --git a/web/core/modules/migrate/src/Plugin/Migration.php b/web/core/modules/migrate/src/Plugin/Migration.php
index aa0c94c6c231d2907211492eba379d888d8dc58f..e9dd3696efdee1c7e53eb42ef2c849b4990b2ae8 100644
--- a/web/core/modules/migrate/src/Plugin/Migration.php
+++ b/web/core/modules/migrate/src/Plugin/Migration.php
@@ -277,7 +277,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     $this->destinationPluginManager = $destination_plugin_manager;
     $this->idMapPluginManager = $idmap_plugin_manager;
 
-    foreach (NestedArray::mergeDeep($plugin_definition, $configuration) as $key => $value) {
+    foreach (NestedArray::mergeDeepArray([$plugin_definition, $configuration], TRUE) as $key => $value) {
       $this->$key = $value;
     }
   }
diff --git a/web/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginConfigurationTest.php b/web/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginConfigurationTest.php
index 827af91ee61ae6640c3527bd6e23f674aca2e995..56cc1f3acbf500c2cff84e218b5a32bda7221fe3 100644
--- a/web/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginConfigurationTest.php
+++ b/web/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginConfigurationTest.php
@@ -20,6 +20,7 @@ class MigrationPluginConfigurationTest extends KernelTestBase {
     'migrate_drupal',
     // Test with a simple migration.
     'ban',
+    'locale',
   ];
 
   /**
@@ -27,9 +28,10 @@ class MigrationPluginConfigurationTest extends KernelTestBase {
    *
    * @dataProvider mergeProvider
    */
-  public function testConfigurationMerge($configuration, $expected) {
+  public function testConfigurationMerge($id, $configuration, $expected) {
     /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */
-    $migration = $this->container->get('plugin.manager.migration')->createInstance('d7_blocked_ips', $configuration);
+    $migration = $this->container->get('plugin.manager.migration')
+      ->createInstance($id, $configuration);
     $source_configuration = $migration->getSourceConfiguration();
     $this->assertEquals($expected, $source_configuration);
   }
@@ -42,6 +44,7 @@ public function mergeProvider() {
       // Tests adding new configuration to a migration.
       [
         // New configuration.
+        'd7_blocked_ips',
         [
           'source' => [
             'constants' => [
@@ -60,6 +63,7 @@ public function mergeProvider() {
       // Tests overriding pre-existing configuration in a migration.
       [
         // New configuration.
+        'd7_blocked_ips',
         [
           'source' => [
             'plugin' => 'a_different_plugin',
@@ -70,6 +74,29 @@ public function mergeProvider() {
           'plugin' => 'a_different_plugin',
         ],
       ],
+      // New configuration.
+      [
+        'locale_settings',
+        [
+          'source' => [
+            'plugin' => 'variable',
+            'variables' => [
+              'locale_cache_strings',
+              'locale_js_directory',
+            ],
+            'source_module' => 'locale',
+          ],
+        ],
+        // Expected final source and process configuration.
+        [
+          'plugin' => 'variable',
+          'variables' => [
+            'locale_cache_strings',
+            'locale_js_directory',
+          ],
+          'source_module' => 'locale',
+        ],
+      ],
     ];
   }
 
diff --git a/web/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/web/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index caa55b0e4c6d3b13d94075c57526a1a5034f636b..d256eda824963c96a9495abcb0eece68a6777cfd 100644
--- a/web/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/web/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -10645,6 +10645,14 @@
   'action' => 'imagecache_rotate',
   'data' => 'a:3:{s:7:"degrees";s:2:"55";s:6:"random";i:0;s:7:"bgcolor";s:0:"";}',
 ))
+  ->values(array(
+  'actionid' => '7',
+  'presetid' => '2',
+  'weight' => '0',
+  'module' => 'imagecache',
+  'action' => '',
+  'data' => 'a:3:{s:7:"degrees";s:2:"55";s:6:"random";i:0;s:7:"bgcolor";s:0:"";}',
+  ))
 ->execute();
 $connection->schema()->createTable('imagecache_preset', array(
   'fields' => array(
diff --git a/web/core/modules/node/src/NodeForm.php b/web/core/modules/node/src/NodeForm.php
index f5380846b7e18219e366180c429d75fc86ac73ff..9ae4c198dd0385acca171e33661b486d80337747 100644
--- a/web/core/modules/node/src/NodeForm.php
+++ b/web/core/modules/node/src/NodeForm.php
@@ -251,8 +251,9 @@ protected function actions(array $form, FormStateInterface $form_state) {
       '#submit' => ['::submitForm', '::preview'],
     ];
 
-    $element['delete']['#access'] = $node->access('delete');
-    $element['delete']['#weight'] = 100;
+    if (array_key_exists('delete', $element)) {
+      $element['delete']['#weight'] = 100;
+    }
 
     return $element;
   }
diff --git a/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php b/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
index 0e660060321586bceede88aa48ba61540ccfa81a..50898c04136ec9d3f3e7090ab4e3451cc9ec2e11 100644
--- a/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
+++ b/web/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
@@ -149,6 +149,9 @@ public function testNode() {
     $node = Node::load(1);
     $this->assertTrue($node->field_boolean->value);
     $this->assertEquals('99-99-99-99', $node->field_phone->value);
+    $this->assertSame('2015-01-20T04:15:00', $node->field_date->value);
+    $this->assertSame('2015-01-20', $node->field_date_without_time->value);
+    $this->assertSame('2015-01-20', $node->field_datetime_without_time->value);
     $this->assertEquals('1', $node->field_float->value);
     $this->assertEquals('5', $node->field_integer->value);
     $this->assertEquals('Some more text', $node->field_text_list[0]->value);
diff --git a/web/core/modules/options/src/Plugin/migrate/field/d6/OptionWidgetsField.php b/web/core/modules/options/src/Plugin/migrate/field/d6/OptionWidgetsField.php
index b6b5516aa002c2749818f5cbc421cb0a52119421..65de5e32acc34dc54d0cc7390bb317d4e9f2429d 100644
--- a/web/core/modules/options/src/Plugin/migrate/field/d6/OptionWidgetsField.php
+++ b/web/core/modules/options/src/Plugin/migrate/field/d6/OptionWidgetsField.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\options\Plugin\migrate\field\d7;
+namespace Drupal\options\Plugin\migrate\field\d6;
 
 use Drupal\migrate_drupal\Plugin\migrate\field\FieldPluginBase;
 
diff --git a/web/core/modules/system/js/system.date.es6.js b/web/core/modules/system/js/system.date.es6.js
index c011ddd99d68203aaa5df0ab0d476c510fe4e956..91b177309fc42c08bd60a89db579cc9ca68ba955 100644
--- a/web/core/modules/system/js/system.date.es6.js
+++ b/web/core/modules/system/js/system.date.es6.js
@@ -43,7 +43,7 @@
           (key, value) => (dateFormats[key] ? dateFormats[key] : value),
         );
 
-        $preview.html(dateString);
+        $preview.text(dateString);
         $target.toggleClass('js-hide', !dateString.length);
       }
 
diff --git a/web/core/modules/system/js/system.date.js b/web/core/modules/system/js/system.date.js
index 1c80ad7922ae7b457a2b36826311d5e04175c77f..785a5c65fb55d8675289b8d268f91c6b711859ba 100644
--- a/web/core/modules/system/js/system.date.js
+++ b/web/core/modules/system/js/system.date.js
@@ -25,7 +25,7 @@
           return dateFormats[key] ? dateFormats[key] : value;
         });
 
-        $preview.html(dateString);
+        $preview.text(dateString);
         $target.toggleClass('js-hide', !dateString.length);
       }
 
diff --git a/web/core/modules/system/src/Controller/SystemController.php b/web/core/modules/system/src/Controller/SystemController.php
index 106f4e291547f4197b50864ac814803441894756..e946261ba5514ca3efb32f9aedf4ffafb8407c68 100644
--- a/web/core/modules/system/src/Controller/SystemController.php
+++ b/web/core/modules/system/src/Controller/SystemController.php
@@ -222,8 +222,6 @@ public function themesPage() {
       }
 
       if (empty($theme->status)) {
-        // Ensure this theme is compatible with this version of core.
-        $theme->incompatible_core = !isset($theme->info['core']) || ($theme->info['core'] != \DRUPAL::CORE_COMPATIBILITY);
         // Require the 'content' region to make sure the main page
         // content has a common place in all themes.
         $theme->incompatible_region = !isset($theme->info['regions']['content']);
@@ -234,7 +232,7 @@ public function themesPage() {
         $theme->incompatible_engine = isset($theme->info['engine']) && !isset($theme->owner);
       }
       $theme->operations = [];
-      if (!empty($theme->status) || !$theme->incompatible_core && !$theme->incompatible_php && !$theme->incompatible_base && !$theme->incompatible_engine) {
+      if (!empty($theme->status) || !$theme->info['core_incompatible'] && !$theme->incompatible_php && !$theme->incompatible_base && !$theme->incompatible_engine) {
         // Create the operations links.
         $query['theme'] = $theme->getName();
         if ($this->themeAccess->checkAccess($theme->getName())) {
diff --git a/web/core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php b/web/core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php
index 50b3a57808d039042adf2707357248f72ace5fe2..a6a19d6d5a6caa41b94b9349735a52473148d84a 100644
--- a/web/core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php
+++ b/web/core/modules/system/src/EventSubscriber/AdminRouteSubscriber.php
@@ -17,7 +17,8 @@ class AdminRouteSubscriber extends RouteSubscriberBase {
    */
   protected function alterRoutes(RouteCollection $collection) {
     foreach ($collection->all() as $route) {
-      if (strpos($route->getPath(), '/admin') === 0 && !$route->hasOption('_admin_route') && static::isHtmlRoute($route)) {
+      $path = $route->getPath();
+      if (($path == '/admin' || strpos($path, '/admin/') === 0) && !$route->hasOption('_admin_route') && static::isHtmlRoute($route)) {
         $route->setOption('_admin_route', TRUE);
       }
     }
diff --git a/web/core/modules/system/src/Form/ModulesListForm.php b/web/core/modules/system/src/Form/ModulesListForm.php
index c2ade11b7a6d557d5d7f2796c98473830e4ed7d1..c8a1b8f4b535c3fe7a146d80e7ef4852887fdd35 100644
--- a/web/core/modules/system/src/Form/ModulesListForm.php
+++ b/web/core/modules/system/src/Form/ModulesListForm.php
@@ -281,10 +281,14 @@ protected function buildRow(array $modules, Extension $module, $distribution) {
     $reasons = [];
 
     // Check the core compatibility.
-    if ($module->info['core'] != \Drupal::CORE_COMPATIBILITY) {
+    if ($module->info['core_incompatible']) {
       $compatible = FALSE;
       $reasons[] = $this->t('This version is not compatible with Drupal @core_version and should be replaced.', [
-        '@core_version' => \Drupal::CORE_COMPATIBILITY,
+        '@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_version' => \Drupal::VERSION,
       ]);
     }
 
@@ -328,7 +332,7 @@ protected function buildRow(array $modules, Extension $module, $distribution) {
         }
         // Disable the checkbox if the dependency is incompatible with this
         // version of Drupal core.
-        elseif ($modules[$dependency]->info['core'] != \Drupal::CORE_COMPATIBILITY) {
+        elseif ($modules[$dependency]->info['core_incompatible']) {
           $row['#requires'][$dependency] = $this->t('@module (<span class="admin-missing">incompatible with</span> this version of Drupal core)', [
             '@module' => $name,
           ]);
diff --git a/web/core/modules/system/system.admin.inc b/web/core/modules/system/system.admin.inc
index 799869bbc3729acca42d8ce6cba73124600ac075..eea18b0ec9aa63df4b2177de302eddd9d0cd73ab 100644
--- a/web/core/modules/system/system.admin.inc
+++ b/web/core/modules/system/system.admin.inc
@@ -292,8 +292,8 @@ function template_preprocess_system_themes_page(&$variables) {
 
       // Make sure to provide feedback on compatibility.
       $current_theme['incompatible'] = '';
-      if (!empty($theme->incompatible_core)) {
-        $current_theme['incompatible'] = t("This theme is not compatible with Drupal @core_version. Check that the .info.yml file contains the correct 'core' value.", ['@core_version' => \Drupal::CORE_COMPATIBILITY]);
+      if (!empty($theme->info['core_incompatible'])) {
+        $current_theme['incompatible'] = t("This theme is not compatible with Drupal @core_version. Check that the .info.yml file contains a compatible 'core' or 'core_version_requirement' value.", ['@core_version' => \Drupal::VERSION]);
       }
       elseif (!empty($theme->incompatible_region)) {
         $current_theme['incompatible'] = t("This theme is missing a 'content' region.");
diff --git a/web/core/modules/system/templates/details.html.twig b/web/core/modules/system/templates/details.html.twig
index 5014deb7be4fb426900ab0fc4f464f4bf07c1f1a..20e4ea7193e3eb4fef12839c888d2d03b53284a7 100644
--- a/web/core/modules/system/templates/details.html.twig
+++ b/web/core/modules/system/templates/details.html.twig
@@ -7,6 +7,7 @@
  * - attributes: A list of HTML attributes for the details element.
  * - errors: (optional) Any errors for this details element, may not be set.
  * - title: (optional) The title of the element, may not be set.
+ * - summary_attributes: A list of HTML attributes for the summary element.
  * - description: (optional) The description of the element, may not be set.
  * - children: (optional) The children of the element, may not be set.
  * - value: (optional) The value of the element, may not be set.
diff --git a/web/core/modules/system/tests/fixtures/update/drupal-8.taxonomy-parent-multilingual-3066439.php b/web/core/modules/system/tests/fixtures/update/drupal-8.taxonomy-parent-multilingual-3066439.php
new file mode 100644
index 0000000000000000000000000000000000000000..caf941c99d12cb4a1062bf89a8442578f80acbe0
--- /dev/null
+++ b/web/core/modules/system/tests/fixtures/update/drupal-8.taxonomy-parent-multilingual-3066439.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains database additions to drupal-8.bare.standard.php.gz for testing the
+ * upgrade path of https://www.drupal.org/node/2455125.
+ */
+
+use Drupal\Component\Uuid\Php;
+use Drupal\Core\Database\Database;
+
+$connection = Database::getConnection();
+
+$uuid = new Php();
+
+$tids = [];
+
+for ($i = 0; $i < 60; $i++) {
+  $name = $this->randomString();
+
+  $tid = $connection->insert('taxonomy_term_data')
+    ->fields(['vid', 'uuid', 'langcode'])
+    ->values(['vid' => 'tags', 'uuid' => $uuid->generate(), 'langcode' => 'es'])
+    ->execute();
+
+  $connection->insert('taxonomy_term_field_data')
+    ->fields(['tid', 'vid', 'langcode', 'name', 'weight', 'changed', 'default_langcode'])
+    ->values(['tid' => $tid, 'vid' => 'tags', 'langcode' => 'en', 'name' => $name, 'weight' => 0, 'changed' => REQUEST_TIME, 'default_langcode' => 1])
+    ->execute();
+
+  $connection->insert('taxonomy_term_field_data')
+    ->fields(['tid', 'vid', 'langcode', 'name', 'weight', 'changed', 'default_langcode'])
+    ->values(['tid' => $tid, 'vid' => 'tags', 'langcode' => 'es', 'name' => $name . ' es', 'weight' => 0, 'changed' => REQUEST_TIME, 'default_langcode' => 0])
+    ->execute();
+
+  $tids[] = $tid;
+}
+
+$query = $connection->insert('taxonomy_term_hierarchy')->fields(['tid', 'parent']);
+
+$previous_tid = 0;
+foreach ($tids as $tid) {
+  $query->values(['tid' => $tid, 'parent' => $previous_tid]);
+  $previous_tid = $tid;
+}
+
+// Insert an extra record with no corresponding term.
+// See https://www.drupal.org/project/drupal/issues/2997982
+$query->values(['tid' => max($tids) + 1, 'parent' => 0]);
+
+$query->execute();
diff --git a/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-semver-update-n-enabled.php b/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-semver-update-n-enabled.php
new file mode 100644
index 0000000000000000000000000000000000000000..285b42c1ef423a0b0ef93eb5665fa4c39f069d05
--- /dev/null
+++ b/web/core/modules/system/tests/fixtures/update/drupal-8.update-test-semver-update-n-enabled.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Database to mimic the installation of the update_test_semver_update_n module.
+ */
+
+use Drupal\Core\Database\Database;
+
+$connection = Database::getConnection();
+
+// Set the schema version.
+$connection->merge('key_value')
+  ->condition('collection', 'system.schema')
+  ->condition('name', 'update_test_semver_update_n')
+  ->fields([
+    'collection' => 'system.schema',
+    'name' => 'update_test_semver_update_n',
+    'value' => 'i:8000;',
+  ])
+  ->execute();
+
+// Update core.extension.
+$extensions = $connection->select('config')
+  ->fields('config', ['data'])
+  ->condition('collection', '')
+  ->condition('name', 'core.extension')
+  ->execute()
+  ->fetchField();
+$extensions = unserialize($extensions);
+$extensions['module']['update_test_semver_update_n'] = 8000;
+$connection->update('config')
+  ->fields([
+    'data' => serialize($extensions),
+  ])
+  ->condition('collection', '')
+  ->condition('name', 'core.extension')
+  ->execute();
diff --git a/web/core/modules/system/tests/modules/database_test/database_test.install b/web/core/modules/system/tests/modules/database_test/database_test.install
index ab952c746ea995d51fbf8f57d5c00fafd5967ac0..e8094b2b2194a939683a0779ee60efdff92a20d2 100644
--- a/web/core/modules/system/tests/modules/database_test/database_test.install
+++ b/web/core/modules/system/tests/modules/database_test/database_test.install
@@ -54,6 +54,44 @@ function database_test_schema() {
     ],
   ];
 
+  $schema['test_classtype'] = [
+    'description' => 'A duplicate version of the test table, used for fetch_style PDO::FETCH_CLASSTYPE tests.',
+    'fields' => [
+      'classname' => [
+        'description' => "A custom class name",
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ],
+      'name' => [
+        'description' => "A person's name",
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ],
+      'age' => [
+        'description' => "The person's age",
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+      ],
+      'job' => [
+        'description' => "The person's job",
+        'type' => 'varchar_ascii',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ],
+    ],
+    'primary key' => ['job'],
+    'indexes' => [
+      'ages' => ['age'],
+    ],
+  ];
+
   // This is an alternate version of the same table that is structured the same
   // but has a non-serial Primary Key.
   $schema['test_people'] = [
diff --git a/web/core/modules/system/tests/modules/entity_test/entity_test.services.yml b/web/core/modules/system/tests/modules/entity_test/entity_test.services.yml
index 75e1bf33ce68cc68c392e4a6fe76d530f7354094..212de69c186f43748e2bc6d1a09ec7b6d95ac7b5 100644
--- a/web/core/modules/system/tests/modules/entity_test/entity_test.services.yml
+++ b/web/core/modules/system/tests/modules/entity_test/entity_test.services.yml
@@ -1,7 +1,7 @@
 services:
   entity_test.definition.subscriber:
     class: Drupal\entity_test\EntityTestDefinitionSubscriber
-    arguments: ['@state']
+    arguments: ['@state', '@entity.last_installed_schema.repository', '@entity_type.manager', '@entity_field.manager']
     tags:
       - { name: event_subscriber }
   cache_context.entity_test_view_grants:
diff --git a/web/core/modules/system/tests/modules/entity_test/src/EntityTestDefinitionSubscriber.php b/web/core/modules/system/tests/modules/entity_test/src/EntityTestDefinitionSubscriber.php
index 6cdceb6d9cc714d6ed3290e0739d83039a90ac3e..e96ebd406601cf987984e8f19ec5cfdf01c7c4f7 100644
--- a/web/core/modules/system/tests/modules/entity_test/src/EntityTestDefinitionSubscriber.php
+++ b/web/core/modules/system/tests/modules/entity_test/src/EntityTestDefinitionSubscriber.php
@@ -2,10 +2,13 @@
 
 namespace Drupal\entity_test;
 
+use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeEvents;
 use Drupal\Core\Entity\EntityTypeEventSubscriberTrait;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityTypeListenerInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Field\FieldStorageDefinitionEvents;
 use Drupal\Core\Field\FieldStorageDefinitionEventSubscriberTrait;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
@@ -28,6 +31,27 @@ class EntityTestDefinitionSubscriber implements EventSubscriberInterface, Entity
    */
   protected $state;
 
+  /**
+   * The last installed schema repository.
+   *
+   * @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface
+   */
+  protected $entityLastInstalledSchemaRepository;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * The entity field manager.
+   *
+   * @var \Drupal\Core\Entity\EntityFieldManagerInterface
+   */
+  protected $entityFieldManager;
+
   /**
    * Flag determining whether events should be tracked.
    *
@@ -35,11 +59,21 @@ class EntityTestDefinitionSubscriber implements EventSubscriberInterface, Entity
    */
   protected $trackEvents = FALSE;
 
+  /**
+   * Determines whether the live definitions should be updated.
+   *
+   * @var bool
+   */
+  protected $updateLiveDefinitions = FALSE;
+
   /**
    * {@inheritdoc}
    */
-  public function __construct(StateInterface $state) {
+  public function __construct(StateInterface $state, EntityLastInstalledSchemaRepositoryInterface $entity_last_installed_schema_repository, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager) {
     $this->state = $state;
+    $this->entityLastInstalledSchemaRepository = $entity_last_installed_schema_repository;
+    $this->entityTypeManager = $entity_type_manager;
+    $this->entityFieldManager = $entity_field_manager;
   }
 
   /**
@@ -53,14 +87,38 @@ public static function getSubscribedEvents() {
    * {@inheritdoc}
    */
   public function onEntityTypeCreate(EntityTypeInterface $entity_type) {
+    if ($this->entityLastInstalledSchemaRepository->getLastInstalledDefinition($entity_type->id())) {
+      $this->storeDefinitionUpdate(EntityTypeEvents::CREATE);
+    }
     $this->storeEvent(EntityTypeEvents::CREATE);
+
+    // Retrieve the live entity type definition in order to warm the static
+    // cache and then insert the new entity type definition, so we can test that
+    // the cache doesn't get stale after the event has fired.
+    if ($this->updateLiveDefinitions) {
+      $this->entityTypeManager->getDefinition($entity_type->id());
+      $this->state->set('entity_test_rev.entity_type', $entity_type);
+    }
   }
 
   /**
    * {@inheritdoc}
    */
   public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
+    $last_installed_definition = $this->entityLastInstalledSchemaRepository->getLastInstalledDefinition($entity_type->id());
+    if ((string) $last_installed_definition->getLabel() === 'Updated entity test rev') {
+      $this->storeDefinitionUpdate(EntityTypeEvents::UPDATE);
+    }
+
     $this->storeEvent(EntityTypeEvents::UPDATE);
+
+    // Retrieve the live entity type definition in order to warm the static
+    // cache and then insert the new entity type definition, so we can test that
+    // the cache doesn't get stale after the event has fired.
+    if ($this->updateLiveDefinitions) {
+      $this->entityTypeManager->getDefinition($entity_type->id());
+      $this->state->set('entity_test_rev.entity_type', $entity_type);
+    }
   }
 
   /**
@@ -74,28 +132,73 @@ public function onFieldableEntityTypeUpdate(EntityTypeInterface $entity_type, En
    * {@inheritdoc}
    */
   public function onEntityTypeDelete(EntityTypeInterface $entity_type) {
+    if (!$this->entityLastInstalledSchemaRepository->getLastInstalledDefinition($entity_type->id())) {
+      $this->storeDefinitionUpdate(EntityTypeEvents::DELETE);
+    }
     $this->storeEvent(EntityTypeEvents::DELETE);
+
+    // Retrieve the live entity type definition in order to warm the static
+    // cache and then delete the new entity type definition, so we can test that
+    // the cache doesn't get stale after the event has fired.
+    if ($this->updateLiveDefinitions) {
+      $this->entityTypeManager->getDefinition($entity_type->id());
+      $this->state->set('entity_test_rev.entity_type', '');
+    }
   }
 
   /**
    * {@inheritdoc}
    */
   public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) {
+    if (isset($this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($storage_definition->getTargetEntityTypeId())[$storage_definition->getName()])) {
+      $this->storeDefinitionUpdate(FieldStorageDefinitionEvents::CREATE);
+    }
     $this->storeEvent(FieldStorageDefinitionEvents::CREATE);
+
+    // Retrieve the live field storage definitions in order to warm the static
+    // cache and then insert the new storage definition, so we can test that the
+    // cache doesn't get stale after the event has fired.
+    if ($this->updateLiveDefinitions) {
+      $this->entityFieldManager->getFieldStorageDefinitions($storage_definition->getTargetEntityTypeId());
+      $this->state->set('entity_test_rev.additional_base_field_definitions', [$storage_definition->getName() => $storage_definition]);
+    }
   }
 
   /**
    * {@inheritdoc}
    */
   public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
+    $last_installed_definition = $this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($storage_definition->getTargetEntityTypeId())[$storage_definition->getName()];
+    if ((string) $last_installed_definition->getLabel() === 'Updated field storage test') {
+      $this->storeDefinitionUpdate(FieldStorageDefinitionEvents::UPDATE);
+    }
     $this->storeEvent(FieldStorageDefinitionEvents::UPDATE);
+
+    // Retrieve the live field storage definitions in order to warm the static
+    // cache and then insert the new storage definition, so we can test that the
+    // cache doesn't get stale after the event has fired.
+    if ($this->updateLiveDefinitions) {
+      $this->entityFieldManager->getFieldStorageDefinitions($storage_definition->getTargetEntityTypeId());
+      $this->state->set('entity_test_rev.additional_base_field_definitions', [$storage_definition->getName() => $storage_definition]);
+    }
   }
 
   /**
    * {@inheritdoc}
    */
   public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) {
+    if (!isset($this->entityLastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions($storage_definition->getTargetEntityTypeId())[$storage_definition->getName()])) {
+      $this->storeDefinitionUpdate(FieldStorageDefinitionEvents::DELETE);
+    }
     $this->storeEvent(FieldStorageDefinitionEvents::DELETE);
+
+    // Retrieve the live field storage definitions in order to warm the static
+    // cache and then remove the new storage definition, so we can test that the
+    // cache doesn't get stale after the event has fired.
+    if ($this->updateLiveDefinitions) {
+      $this->entityFieldManager->getFieldStorageDefinitions($storage_definition->getTargetEntityTypeId());
+      $this->state->set('entity_test_rev.additional_base_field_definitions', []);
+    }
   }
 
   /**
@@ -105,6 +208,13 @@ public function enableEventTracking() {
     $this->trackEvents = TRUE;
   }
 
+  /**
+   * Enables live definition updates.
+   */
+  public function enableLiveDefinitionUpdates() {
+    $this->updateLiveDefinitions = TRUE;
+  }
+
   /**
    * Checks whether an event has been dispatched.
    *
@@ -130,4 +240,30 @@ protected function storeEvent($event_name) {
     }
   }
 
+  /**
+   * Checks whether the installed definitions were updated before the event.
+   *
+   * @param string $event_name
+   *   The event name.
+   *
+   * @return bool
+   *   TRUE if the last installed entity type of field storage definitions have
+   *   been updated before the event was fired, FALSE otherwise.
+   */
+  public function hasDefinitionBeenUpdated($event_name) {
+    return (bool) $this->state->get($event_name . '_updated_definition');
+  }
+
+  /**
+   * Stores the installed definition state for the specified event.
+   *
+   * @param string $event_name
+   *   The event name.
+   */
+  protected function storeDefinitionUpdate($event_name) {
+    if ($this->trackEvents) {
+      $this->state->set($event_name . '_updated_definition', TRUE);
+    }
+  }
+
 }
diff --git a/web/core/modules/system/tests/modules/entity_test_update/entity_test_update.services.yml b/web/core/modules/system/tests/modules/entity_test_update/entity_test_update.services.yml
new file mode 100644
index 0000000000000000000000000000000000000000..45d1606daa946a9255baf641a79d40f7c71eb2e2
--- /dev/null
+++ b/web/core/modules/system/tests/modules/entity_test_update/entity_test_update.services.yml
@@ -0,0 +1,6 @@
+services:
+  entity_test_update.entity_schema_listener:
+    class: Drupal\entity_test_update\EventSubscriber\EntitySchemaSubscriber
+    arguments: ['@entity.definition_update_manager', '@state']
+    tags:
+      - { name: 'event_subscriber' }
diff --git a/web/core/modules/system/tests/modules/entity_test_update/src/Entity/EntityTestUpdate.php b/web/core/modules/system/tests/modules/entity_test_update/src/Entity/EntityTestUpdate.php
index 0a6c0cf4404a732fe8f7bd496199b4eca5978f65..87b7df1953b35b36bf83befbdc566a2fa4ab98b7 100644
--- a/web/core/modules/system/tests/modules/entity_test_update/src/Entity/EntityTestUpdate.php
+++ b/web/core/modules/system/tests/modules/entity_test_update/src/Entity/EntityTestUpdate.php
@@ -21,6 +21,7 @@
  *   label = @Translation("Test entity update"),
  *   handlers = {
  *     "storage_schema" = "Drupal\entity_test_update\EntityTestUpdateStorageSchema",
+ *     "storage" = "Drupal\entity_test_update\EntityTestUpdateStorage",
  *   },
  *   base_table = "entity_test_update",
  *   persistent_cache = FALSE,
@@ -46,17 +47,6 @@ public static function preCreate(EntityStorageInterface $storage, array &$values
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function preSave(EntityStorageInterface $storage) {
-    // Simulate an error during the 'restore' process of a test entity.
-    if (\Drupal::state()->get('entity_test_update.throw_exception', FALSE)) {
-      throw new \Exception('Peekaboo!');
-    }
-    parent::preSave($storage);
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/web/core/modules/system/tests/modules/entity_test_update/src/EntityTestUpdateStorage.php b/web/core/modules/system/tests/modules/entity_test_update/src/EntityTestUpdateStorage.php
new file mode 100644
index 0000000000000000000000000000000000000000..6bcf2e1ea151af4cc36ef52089b2603fd4984ba0
--- /dev/null
+++ b/web/core/modules/system/tests/modules/entity_test_update/src/EntityTestUpdateStorage.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\entity_test_update;
+
+use Drupal\Core\Entity\ContentEntityInterface;
+use Drupal\Core\Entity\Sql\SqlContentEntityStorage;
+
+/**
+ * Helper class for entity update testing.
+ *
+ * @see \Drupal\KernelTests\Core\Entity\FieldableEntityDefinitionUpdateTest::testFieldableEntityTypeUpdatesErrorHandling()
+ */
+class EntityTestUpdateStorage extends SqlContentEntityStorage {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function saveToDedicatedTables(ContentEntityInterface $entity, $update = TRUE, $names = []) {
+    // Simulate an error during the 'restore' process of a test entity.
+    if (\Drupal::state()->get('entity_test_update.throw_exception', FALSE)) {
+      throw new \Exception('Peekaboo!');
+    }
+    parent::saveToDedicatedTables($entity, $update, $names);
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php b/web/core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php
new file mode 100644
index 0000000000000000000000000000000000000000..37dac651e2c65c9f79e79e19fa14c012a3979a11
--- /dev/null
+++ b/web/core/modules/system/tests/modules/entity_test_update/src/EventSubscriber/EntitySchemaSubscriber.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace Drupal\entity_test_update\EventSubscriber;
+
+use Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface;
+use Drupal\Core\Entity\EntityTypeEventSubscriberTrait;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Entity\EntityTypeListenerInterface;
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Core\State\StateInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Defines a class for listening to entity schema changes.
+ */
+class EntitySchemaSubscriber implements EntityTypeListenerInterface, EventSubscriberInterface {
+
+  use EntityTypeEventSubscriberTrait;
+
+  /**
+   * The entity definition update manager.
+   *
+   * @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
+   */
+  protected $entityDefinitionUpdateManager;
+
+  /**
+   * The state service.
+   *
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
+  /**
+   * Constructs a new EntitySchemaSubscriber.
+   *
+   * @param \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface $entityDefinitionUpdateManager
+   *   The entity definition update manager.
+   * @param \Drupal\Core\State\StateInterface $state
+   *   The state service.
+   */
+  public function __construct(EntityDefinitionUpdateManagerInterface $entityDefinitionUpdateManager, StateInterface $state) {
+    $this->entityDefinitionUpdateManager = $entityDefinitionUpdateManager;
+    $this->state = $state;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    return static::getEntityTypeEvents();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeInterface $original) {
+    // Only add the new base field when a test needs it.
+    if (!$this->state->get('entity_test_update.install_new_base_field_during_update', FALSE)) {
+      return;
+    }
+
+    // Add a new base field when the entity type is updated.
+    $definitions = $this->state->get('entity_test_update.additional_base_field_definitions', []);
+    $definitions['new_base_field'] = BaseFieldDefinition::create('string')
+      ->setName('new_base_field')
+      ->setLabel(new TranslatableMarkup('A new base field'));
+    $this->state->set('entity_test_update.additional_base_field_definitions', $definitions);
+
+    $this->entityDefinitionUpdateManager->installFieldStorageDefinition('new_base_field', 'entity_test_update', 'entity_test_update', $definitions['new_base_field']);
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.info.yml b/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..eab08261b53c1cf6132e904008f76fd9b35542e3
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.info.yml
@@ -0,0 +1,8 @@
+name: 'New Dependency test'
+type: module
+description: 'Support module for update testing.'
+package: Testing
+version: VERSION
+core: 8.x
+dependencies:
+  - new_dependency_test_with_service
diff --git a/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.install b/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.install
new file mode 100644
index 0000000000000000000000000000000000000000..2ab3e6b498ced634607ee9f77321a39e4d8497ee
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.install
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the new_dependency_test module.
+ */
+
+/**
+ * Enable the new_dependency_test_with_service module.
+ */
+function new_dependency_test_update_8001() {
+  $services = [
+    'new_dependency_test.hard_dependency',
+    'new_dependency_test.optional_dependency',
+    'new_dependency_test.recursion',
+    'new_dependency_test.alias',
+    'new_dependency_test.alias_dependency',
+    'new_dependency_test.alias2',
+    'new_dependency_test.alias_dependency2',
+  ];
+
+  // Gather the state of the services prior to installing the
+  // new_dependency_test_with_service module.
+  \Drupal::state()->set(
+    'new_dependency_test_update_8001.decorated_service',
+    \Drupal::service('new_dependency_test.another_service')->isDecorated()
+  );
+
+  \Drupal::state()->set(
+    'new_dependency_test_update_8001.decorated_service_custom_inner',
+    \Drupal::service('new_dependency_test.another_service_two')->isDecorated()
+  );
+
+  $map = [];
+  foreach ($services as $id) {
+    $map[$id] = \Drupal::hasService($id);
+  }
+  \Drupal::state()->set('new_dependency_test_update_8001.has_before_install', $map);
+
+  // During the update hooks the container is cleaned up to contain only
+  // services that have their dependencies met. Core services are available.
+  \Drupal::getContainer()->get('module_installer')->install(['new_dependency_test_with_service']);
+
+  // Gather the state of the services after installing the
+  // new_dependency_test_with_service module.
+  $map = [];
+  foreach ($services as $id) {
+    $map[$id] = \Drupal::hasService($id);
+  }
+  \Drupal::state()->set('new_dependency_test_update_8001.has_after_install', $map);
+}
diff --git a/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.services.yml b/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.services.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a3283daea8d5d516d02fa03a192a55249b94d45d
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test/new_dependency_test.services.yml
@@ -0,0 +1,36 @@
+services:
+  new_dependency_test.alias2:
+    alias: new_dependency_test.alias_dependency
+  new_dependency_test.alias_dependency2:
+    class: Drupal\new_dependency_test\ServiceWithDependency
+    arguments: ['@new_dependency_test.alias2']
+  new_dependency_test.alias_dependency:
+    class: Drupal\new_dependency_test\ServiceWithDependency
+    arguments: ['@new_dependency_test.alias']
+  new_dependency_test.recursion:
+    class: Drupal\new_dependency_test\ServiceWithDependency
+    arguments: ['@new_dependency_test.hard_dependency']
+  new_dependency_test.alias:
+    alias: new_dependency_test.dependent
+  new_dependency_test.dependent:
+    class: Drupal\new_dependency_test\InjectedService
+    arguments: ['@new_dependency_test_with_service.service']
+  new_dependency_test.hard_dependency:
+    class: Drupal\new_dependency_test\ServiceWithDependency
+    arguments: ['@new_dependency_test.dependent']
+  new_dependency_test.optional_dependency:
+    class: Drupal\new_dependency_test\ServiceWithDependency
+    arguments: ['@?new_dependency_test.dependent']
+  new_dependency_test.another_service:
+    class: Drupal\new_dependency_test\Service
+  new_dependency_test.another_service.decorated:
+    class: Drupal\new_dependency_test\Service
+    decorates: new_dependency_test.another_service
+    arguments: ['@new_dependency_test.another_service.decorated.inner']
+  new_dependency_test.another_service_two:
+    class: Drupal\new_dependency_test\Service
+  new_dependency_test.another_service_two.decorated:
+    class: Drupal\new_dependency_test\Service
+    decorates: new_dependency_test.another_service_two
+    decoration_inner_name: new_dependency_test.foo
+    arguments: ['@new_dependency_test.foo']
diff --git a/web/core/modules/system/tests/modules/new_dependency_test/src/InjectedService.php b/web/core/modules/system/tests/modules/new_dependency_test/src/InjectedService.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f0b68bfaf4b3943de2d769a90dacf9083a6a79d
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test/src/InjectedService.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\new_dependency_test;
+
+use Drupal\new_dependency_test_with_service\NewService;
+
+/**
+ * Generic service with a dependency on a service defined in a new module.
+ */
+class InjectedService {
+
+  /**
+   * The injected service.
+   *
+   * @var \Drupal\new_dependency_test_with_service\NewService
+   */
+  protected $service;
+
+  /**
+   * InjectedService constructor.
+   *
+   * @param \Drupal\new_dependency_test_with_service\NewService $service
+   *   The service of the new module.
+   */
+  public function __construct(NewService $service) {
+    $this->service = $service;
+  }
+
+  /**
+   * Get the simple greeting from the service.
+   *
+   * @return string
+   *   The greeting.
+   */
+  public function greet() {
+    return $this->service->greet();
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/new_dependency_test/src/Service.php b/web/core/modules/system/tests/modules/new_dependency_test/src/Service.php
new file mode 100644
index 0000000000000000000000000000000000000000..413226ea4e0060a8fa55cd54a2b7c2ee25ee5d5d
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test/src/Service.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\new_dependency_test;
+
+/**
+ * A service that can decorated itself.
+ *
+ * @see new_dependency_test.services.yml
+ */
+class Service {
+
+  /**
+   * The decorated service.
+   *
+   * @var \Drupal\new_dependency_test\Service
+   */
+  protected $inner;
+
+  /**
+   * Service constructor.
+   *
+   * @param \Drupal\new_dependency_test\Service|null $inner
+   *   The service to decorate.
+   */
+  public function __construct(Service $inner = NULL) {
+    $this->inner = $inner;
+  }
+
+  /**
+   * Determines if the service is decorated.
+   *
+   * @return bool
+   *   TRUE if the services is decorated, FALSE if not.
+   */
+  public function isDecorated() {
+    return isset($this->inner);
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/new_dependency_test/src/ServiceWithDependency.php b/web/core/modules/system/tests/modules/new_dependency_test/src/ServiceWithDependency.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5c57d500e70878eeb8f653ee06a8e65ff9f5e68
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test/src/ServiceWithDependency.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Drupal\new_dependency_test;
+
+/**
+ * Service that gets the other service of the same module injected.
+ *
+ * This service indirectly depends on a not-yet-defined service.
+ */
+class ServiceWithDependency {
+
+  /**
+   * The injected service.
+   *
+   * @var \Drupal\new_dependency_test\InjectedService
+   */
+  protected $service;
+
+  /**
+   * ServiceWithDependency constructor.
+   *
+   * @param \Drupal\new_dependency_test\InjectedService|null $service
+   *   The service of the same module which has the new dependency.
+   */
+  public function __construct(InjectedService $service = NULL) {
+    $this->service = $service;
+  }
+
+  /**
+   * Gets a greeting from the injected service and adds to it.
+   *
+   * @return string
+   *   The greeting.
+   */
+  public function greet() {
+    if (isset($this->service)) {
+      return $this->service->greet() . ' World';
+    }
+    return 'Sorry, no service.';
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/new_dependency_test_with_service/new_dependency_test_with_service.info.yml b/web/core/modules/system/tests/modules/new_dependency_test_with_service/new_dependency_test_with_service.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5091a7f79d6a1948ea38c11795c8d2b0ea887df2
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test_with_service/new_dependency_test_with_service.info.yml
@@ -0,0 +1,6 @@
+name: 'New Dependency test with service'
+type: module
+description: 'Support module for update testing.'
+package: Testing
+version: VERSION
+core: 8.x
diff --git a/web/core/modules/system/tests/modules/new_dependency_test_with_service/new_dependency_test_with_service.services.yml b/web/core/modules/system/tests/modules/new_dependency_test_with_service/new_dependency_test_with_service.services.yml
new file mode 100644
index 0000000000000000000000000000000000000000..26ba284e29be822f859e05d8b6c003d6723ba417
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test_with_service/new_dependency_test_with_service.services.yml
@@ -0,0 +1,3 @@
+services:
+  new_dependency_test_with_service.service:
+    class: Drupal\new_dependency_test_with_service\NewService
diff --git a/web/core/modules/system/tests/modules/new_dependency_test_with_service/src/NewService.php b/web/core/modules/system/tests/modules/new_dependency_test_with_service/src/NewService.php
new file mode 100644
index 0000000000000000000000000000000000000000..6137fc2ecf78d392a405f9a10d7e4a50e4abd95b
--- /dev/null
+++ b/web/core/modules/system/tests/modules/new_dependency_test_with_service/src/NewService.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace Drupal\new_dependency_test_with_service;
+
+/**
+ * Generic service returning a greeting.
+ */
+class NewService {
+
+  /**
+   * Get a simple greeting.
+   *
+   * @return string
+   *   The greeting provided by the new service.
+   */
+  public function greet() {
+    return 'Hello';
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/system_core_incompatible_semver_test/system_core_incompatible_semver_test.info.yml b/web/core/modules/system/tests/modules/system_core_incompatible_semver_test/system_core_incompatible_semver_test.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..152d2a66ec1fd13fafc242dee331e799584f2974
--- /dev/null
+++ b/web/core/modules/system/tests/modules/system_core_incompatible_semver_test/system_core_incompatible_semver_test.info.yml
@@ -0,0 +1,6 @@
+name: 'System core incompatible semver test'
+type: module
+description: 'Support module for testing core incompatible semver.'
+package: Testing
+version: 1.0.0
+core_version_requirement: ^7
diff --git a/web/core/modules/system/tests/modules/system_core_semver_test/system_core_semver_test.info.yml b/web/core/modules/system/tests/modules/system_core_semver_test/system_core_semver_test.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..47eec87f489cd241c6b50eb460a5b22f1c228e44
--- /dev/null
+++ b/web/core/modules/system/tests/modules/system_core_semver_test/system_core_semver_test.info.yml
@@ -0,0 +1,6 @@
+name: 'System core ^8 version test'
+type: module
+description: 'Support module for testing core using semver.'
+package: Testing
+version: 1.0.0
+core_version_requirement: ^8
diff --git a/web/core/modules/system/tests/modules/system_incompatible_core_version_test_1x/system_incompatible_core_version_test_1x.info.yml b/web/core/modules/system/tests/modules/system_incompatible_core_version_test_1x/system_incompatible_core_version_test_1x.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f79d71dff855d01b0ff2b01d8fad7faa0538a23e
--- /dev/null
+++ b/web/core/modules/system/tests/modules/system_incompatible_core_version_test_1x/system_incompatible_core_version_test_1x.info.yml
@@ -0,0 +1,6 @@
+name: 'System incompatible core 1.x version test'
+type: module
+description: 'Support module for testing system core incompatibility.'
+package: Testing
+version: 1.0.0
+core: 1.x
diff --git a/web/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php b/web/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php
index cfd0f2f79679043a09dd78e0a99a12556ba68b80..629c6f423070315cc21b19709f61521039e61b39 100644
--- a/web/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php
+++ b/web/core/modules/system/tests/modules/system_test/src/Controller/SystemTestController.php
@@ -398,4 +398,12 @@ public function getCacheableResponseWithCustomCacheControl() {
     return new CacheableResponse('Foo', 200, ['Cache-Control' => 'bar']);
   }
 
+  /**
+   * Use a plain Symfony response object to output the current install_profile.
+   */
+  public function getInstallProfile() {
+    $install_profile = \Drupal::installProfile() ?: 'NONE';
+    return new Response('install_profile: ' . $install_profile);
+  }
+
 }
diff --git a/web/core/modules/system/tests/modules/system_test/system_test.module b/web/core/modules/system/tests/modules/system_test/system_test.module
index affc20ea4203897d4366138df7c91c96e8ced2b2..7f0ba88cd037144657d3a4952fd3e2a93c5009e3 100644
--- a/web/core/modules/system/tests/modules/system_test/system_test.module
+++ b/web/core/modules/system/tests/modules/system_test/system_test.module
@@ -71,6 +71,7 @@ function system_test_system_info_alter(&$info, Extension $file, $type) {
     'system_incompatible_core_version_dependencies_test',
     'system_incompatible_module_version_test',
     'system_incompatible_core_version_test',
+    'system_incompatible_core_version_test_1x',
   ])) {
     $info['hidden'] = FALSE;
   }
diff --git a/web/core/modules/system/tests/modules/system_test/system_test.routing.yml b/web/core/modules/system/tests/modules/system_test/system_test.routing.yml
index b47174faacfc377bd7e41f52c9c159e3d1fc18e0..521e7b2376ae3b0b1d1185ca479a70f4ca82b1a4 100644
--- a/web/core/modules/system/tests/modules/system_test/system_test.routing.yml
+++ b/web/core/modules/system/tests/modules/system_test/system_test.routing.yml
@@ -204,3 +204,10 @@ system_test.custom_cache_control:
     _controller: '\Drupal\system_test\Controller\SystemTestController::getCacheableResponseWithCustomCacheControl'
   requirements:
     _access: 'TRUE'
+
+system_test.install_profile:
+  path: '/system-test/get-install-profile'
+  defaults:
+    _controller: '\Drupal\system_test\Controller\SystemTestController::getInstallProfile'
+  requirements:
+    _access: 'TRUE'
diff --git a/web/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php b/web/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
index 8867b8ba29e1a85986a396df83347b1dae95a912..725c530472d4c11a99c8cfe8637ba25e39a160a7 100644
--- a/web/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
+++ b/web/core/modules/system/tests/modules/test_page_test/src/Controller/Test.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\test_page_test\Controller;
 
+use Drupal\Core\Render\Markup;
 use Drupal\Core\Url;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpKernel\Exception\HttpException;
@@ -116,6 +117,32 @@ public function renderPipeInLink() {
     return ['#markup' => '<a href="http://example.com">foo|bar|baz</a>'];
   }
 
+  public function escapedCharacters() {
+    return [
+      '#prefix' => '<div class="escaped">',
+      '#plain_text' => 'Escaped: <"\'&>',
+      '#suffix' => '</div>',
+    ];
+  }
+
+  public function escapedScript() {
+    return [
+      '#prefix' => '<div class="escaped">',
+      // We use #plain_text because #markup would be filtered and that is not
+      // being tested here.
+      '#plain_text' => "<script>alert('XSS');alert(\"XSS\");</script>",
+      '#suffix' => '</div>',
+    ];
+  }
+
+  public function unEscapedScript() {
+    return [
+      '#prefix' => '<div class="unescaped">',
+      '#markup' => Markup::create("<script>alert('Marked safe');alert(\"Marked safe\");</script>"),
+      '#suffix' => '</div>',
+    ];
+  }
+
   /**
    * Loads a page that does a redirect.
    *
diff --git a/web/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml b/web/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
index e64a88d003acc8eaad9de59689798ae53a203c7b..8579b78d063d7a376c08823b121e9243a0ab93cc 100644
--- a/web/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
+++ b/web/core/modules/system/tests/modules/test_page_test/test_page_test.routing.yml
@@ -83,6 +83,30 @@ test_page_test.field_xpath:
   requirements:
     _access: 'TRUE'
 
+test_page_test.escaped_characters:
+  path: '/test-escaped-characters'
+  defaults:
+    _controller: '\Drupal\test_page_test\Controller\Test::escapedCharacters'
+    code: 200
+  requirements:
+    _access: 'TRUE'
+
+test_page_test.escaped_script:
+  path: '/test-escaped-script'
+  defaults:
+    _controller: '\Drupal\test_page_test\Controller\Test::escapedScript'
+    code: 200
+  requirements:
+    _access: 'TRUE'
+
+test_page_test.unescaped_script:
+  path: '/test-unescaped-script'
+  defaults:
+    _controller: '\Drupal\test_page_test\Controller\Test::unescapedScript'
+    code: 200
+  requirements:
+    _access: 'TRUE'
+
 test_page_test.meta_refresh:
   path: '/test-meta-refresh'
   defaults:
diff --git a/web/core/modules/system/tests/modules/update_test_semver_update_n/update_test_semver_update_n.info.yml b/web/core/modules/system/tests/modules/update_test_semver_update_n/update_test_semver_update_n.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..74e908530d62195eb3d61816b8c02163e826f406
--- /dev/null
+++ b/web/core/modules/system/tests/modules/update_test_semver_update_n/update_test_semver_update_n.info.yml
@@ -0,0 +1,6 @@
+name: 'Update test hook_update_n semver'
+type: module
+description: 'Support module for update testing with core semver value.'
+package: Testing
+version: VERSION
+core_version_requirement: ^8
diff --git a/web/core/modules/system/tests/modules/update_test_semver_update_n/update_test_semver_update_n.install b/web/core/modules/system/tests/modules/update_test_semver_update_n/update_test_semver_update_n.install
new file mode 100644
index 0000000000000000000000000000000000000000..aacb595710cd0631309f4fe5bec3324846e2aee5
--- /dev/null
+++ b/web/core/modules/system/tests/modules/update_test_semver_update_n/update_test_semver_update_n.install
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * @file
+ * Update hooks for the update_test_semver_update_n module.
+ */
+
+/**
+ * Update 8001.
+ */
+function update_test_semver_update_n_update_8001() {
+  \Drupal::state()->set('update_test_semver_update_n_update_8001', 'Yes, I was run. Thanks for testing!');
+}
diff --git a/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php b/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php
index 52e4160cda9084f6d289c54ee9feda7d5c00b0b0..1e1b2fc579ff1b069434585bea0d191cceea860e 100644
--- a/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php
+++ b/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php
@@ -70,7 +70,7 @@ public function testModulesListFormWithInvalidInfoFile() {
 
     // Confirm that the error message is shown.
     $this->assertSession()
-      ->pageTextContains('Modules could not be listed due to an error: Missing required keys (core) in ' . $path . '/broken.info.yml');
+      ->pageTextContains("The 'core' or the 'core_version_requirement' key must be present in " . $path . '/broken.info.yml');
 
     // Check that the module filter text box is available.
     $this->assertTrue($this->xpath('//input[@name="text"]'));
diff --git a/web/core/modules/system/tests/src/Functional/Module/DependencyTest.php b/web/core/modules/system/tests/src/Functional/Module/DependencyTest.php
index d2938721a86173c9e29494c0871cbcef86b1584c..5fb18d7db5a684195b2ff9d87da3522a17395060 100644
--- a/web/core/modules/system/tests/src/Functional/Module/DependencyTest.php
+++ b/web/core/modules/system/tests/src/Functional/Module/DependencyTest.php
@@ -102,6 +102,29 @@ public function testIncompatiblePhpVersionDependency() {
     $this->assert(count($checkbox) == 1, 'Checkbox for the module is disabled.');
   }
 
+  /**
+   * Tests enabling modules with different core version specifications.
+   */
+  public function testCoreCompatibility() {
+    $assert_session = $this->assertSession();
+
+    // Test incompatible 'core_version_requirement'.
+    $this->drupalGet('admin/modules');
+    $assert_session->fieldDisabled('modules[system_incompatible_core_version_test_1x][enable]');
+    $assert_session->fieldDisabled('modules[system_core_incompatible_semver_test][enable]');
+
+    // Test compatible 'core_version_requirement' and compatible 'core'.
+    $this->drupalGet('admin/modules');
+    $assert_session->fieldEnabled('modules[common_test][enable]');
+    $assert_session->fieldEnabled('modules[system_core_semver_test][enable]');
+
+    // Ensure the modules can actually be installed.
+    $edit['modules[common_test][enable]'] = 'common_test';
+    $edit['modules[system_core_semver_test][enable]'] = 'system_core_semver_test';
+    $this->drupalPostForm('admin/modules', $edit, t('Install'));
+    $this->assertModules(['common_test', 'system_core_semver_test'], TRUE);
+  }
+
   /**
    * Tests enabling a module that depends on a module which fails hook_requirements().
    */
diff --git a/web/core/modules/system/tests/src/Functional/System/ThemeTest.php b/web/core/modules/system/tests/src/Functional/System/ThemeTest.php
index 1c69d7a3b6af565e4cff585a711f331053507fe0..e6e4675a37e3208ad8bc983ea839b462d4572820 100644
--- a/web/core/modules/system/tests/src/Functional/System/ThemeTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/ThemeTest.php
@@ -366,8 +366,11 @@ public function testInvalidTheme() {
     $this->assertText(t('This theme requires the base theme @base_theme to operate correctly.', ['@base_theme' => 'not_real_test_basetheme']));
     $this->assertText(t('This theme requires the base theme @base_theme to operate correctly.', ['@base_theme' => 'test_invalid_basetheme']));
     $this->assertText(t('This theme requires the theme engine @theme_engine to operate correctly.', ['@theme_engine' => 'not_real_engine']));
-    // Check for the error text of a theme with the wrong core version.
-    $this->assertText("This theme is not compatible with Drupal 8.x. Check that the .info.yml file contains the correct 'core' value.");
+    // Check for the error text of a theme with the wrong core version
+    // using 7.x and ^7.
+    $incompatible_core_message = 'This theme is not compatible with Drupal ' . \Drupal::VERSION . ". Check that the .info.yml file contains a compatible 'core' or 'core_version_requirement' value.";
+    $this->assertThemeIncompatibleText('Theme test with invalid core version', $incompatible_core_message);
+    $this->assertThemeIncompatibleText('Theme test with invalid semver core version', $incompatible_core_message);
     // Check for the error text of a theme without a content region.
     $this->assertText("This theme is missing a 'content' region.");
   }
@@ -436,24 +439,28 @@ public function testUninstallingThemes() {
    * Tests installing a theme and setting it as default.
    */
   public function testInstallAndSetAsDefault() {
-    $this->drupalGet('admin/appearance');
-    // Bartik is uninstalled in the test profile and has the third "Install and
-    // set as default" link.
-    $this->clickLink(t('Install and set as default'), 2);
-    // Test the confirmation message.
-    $this->assertText('Bartik is now the default theme.');
-    // Make sure Bartik is now set as the default theme in config.
-    $this->assertEqual($this->config('system.theme')->get('default'), 'bartik');
-
-    // This checks for a regression. See https://www.drupal.org/node/2498691.
-    $this->assertNoText('The bartik theme was not found.');
-
-    $themes = \Drupal::service('theme_handler')->rebuildThemeData();
-    $version = $themes['bartik']->info['version'];
-
-    // Confirm Bartik is indicated as the default theme.
-    $out = $this->getSession()->getPage()->getContent();
-    $this->assertTrue((bool) preg_match('/Bartik ' . preg_quote($version) . '\s{2,}\(default theme\)/', $out));
+    $themes = [
+      'bartik' => 'Bartik',
+      'test_core_semver' => 'Theme test with semver core version',
+    ];
+    foreach ($themes as $theme_machine_name => $theme_name) {
+      $this->drupalGet('admin/appearance');
+      $this->getSession()->getPage()->findLink("Install $theme_name as default theme")->click();
+      // Test the confirmation message.
+      $this->assertText("$theme_name is now the default theme.");
+      // Make sure the theme is now set as the default theme in config.
+      $this->assertEqual($this->config('system.theme')->get('default'), $theme_machine_name);
+
+      // This checks for a regression. See https://www.drupal.org/node/2498691.
+      $this->assertNoText("The $theme_machine_name theme was not found.");
+
+      $themes = \Drupal::service('theme_handler')->rebuildThemeData();
+      $version = $themes[$theme_machine_name]->info['version'];
+
+      // Confirm the theme is indicated as the default theme.
+      $out = $this->getSession()->getPage()->getContent();
+      $this->assertTrue((bool) preg_match("/$theme_name " . preg_quote($version) . '\s{2,}\(default theme\)/', $out));
+    }
   }
 
   /**
@@ -469,4 +476,16 @@ public function testThemeSettingsNoLogoNoFavicon() {
     $this->assertText('The configuration options have been saved.');
   }
 
+  /**
+   * Asserts that expected incompatibility text is displayed for a theme.
+   *
+   * @param string $theme_name
+   *   Theme name to select element on page. This can be a partial name.
+   * @param string $expected_text
+   *   The expected incompatibility text.
+   */
+  private function assertThemeIncompatibleText($theme_name, $expected_text) {
+    $this->assertSession()->elementExists('css', ".theme-info:contains(\"$theme_name\") .incompatible:contains(\"$expected_text\")");
+  }
+
 }
diff --git a/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php b/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..57a53278c4349bf6c31b906b809de6e2b1ebc363
--- /dev/null
+++ b/web/core/modules/system/tests/src/Functional/Update/UpdatePathNewDependencyTest.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Drupal\Tests\system\Functional\Update;
+
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
+
+/**
+ * Modules can introduce new dependencies and enable them in update hooks.
+ *
+ * @group system
+ * @group legacy
+ */
+class UpdatePathNewDependencyTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.6.0.bare.testing.php.gz',
+    ];
+  }
+
+  /**
+   * Test that a module can add services that depend on new modules.
+   */
+  public function testUpdateNewDependency() {
+    // The new_dependency_test before the update is just an empty info.yml file.
+    // The code of the new_dependency_test module is after the update and
+    // contains the dependency on the new_dependency_test_with_service module.
+    $extension_config = $this->container->get('config.factory')->getEditable('core.extension');
+    $extension_config
+      ->set('module.new_dependency_test', 0)
+      ->set('module', module_config_sort($extension_config->get('module')))
+      ->save(TRUE);
+    drupal_set_installed_schema_version('new_dependency_test', \Drupal::CORE_MINIMUM_SCHEMA_VERSION);
+
+    // Rebuild the container and test that the service with the optional unmet
+    // dependency is still available while the ones that fail are not.
+    try {
+      $this->rebuildContainer();
+      $this->fail('The container has services with unmet dependencies and should have failed to rebuild.');
+    }
+    catch (ServiceNotFoundException $exception) {
+      $this->assertEquals('The service "new_dependency_test.dependent" has a dependency on a non-existent service "new_dependency_test_with_service.service".', $exception->getMessage());
+    }
+
+    // Running the updates enables the dependency.
+    $this->runUpdates();
+
+    $this->assertTrue(array_key_exists('new_dependency_test', $this->container->get('config.factory')->get('core.extension')->get('module')));
+    $this->assertTrue(array_key_exists('new_dependency_test_with_service', $this->container->get('config.factory')->get('core.extension')->get('module')));
+
+    // Tests that the new services are available and working as expected.
+    $this->assertEquals('Hello', $this->container->get('new_dependency_test_with_service.service')->greet());
+    $this->assertEquals('Hello', $this->container->get('new_dependency_test.dependent')->greet());
+    $this->assertEquals('Hello', $this->container->get('new_dependency_test.alias')->greet());
+    $this->assertEquals('Hello World', $this->container->get('new_dependency_test.hard_dependency')->greet());
+    $this->assertEquals('Hello World', $this->container->get('new_dependency_test.optional_dependency')->greet());
+
+    // Tests that existing decorated services work as expected during update.
+    $this->assertTrue(\Drupal::state()->get('new_dependency_test_update_8001.decorated_service'), 'The new_dependency_test.another_service service is decorated');
+    $this->assertTrue(\Drupal::state()->get('new_dependency_test_update_8001.decorated_service_custom_inner'), 'The new_dependency_test.another_service_two service is decorated');
+
+    // Tests that services are available as expected.
+    $before_install = \Drupal::state()->get('new_dependency_test_update_8001.has_before_install', []);
+    $this->assertSame([
+      'new_dependency_test.hard_dependency' => FALSE,
+      'new_dependency_test.optional_dependency' => TRUE,
+      'new_dependency_test.recursion' => FALSE,
+      'new_dependency_test.alias' => FALSE,
+      'new_dependency_test.alias_dependency' => FALSE,
+      'new_dependency_test.alias2' => FALSE,
+      'new_dependency_test.alias_dependency2' => FALSE,
+    ], $before_install);
+
+    $after_install = \Drupal::state()->get('new_dependency_test_update_8001.has_after_install', []);
+    $this->assertSame([
+      'new_dependency_test.hard_dependency' => TRUE,
+      'new_dependency_test.optional_dependency' => TRUE,
+      'new_dependency_test.recursion' => TRUE,
+      'new_dependency_test.alias' => TRUE,
+      'new_dependency_test.alias_dependency' => TRUE,
+      'new_dependency_test.alias2' => TRUE,
+      'new_dependency_test.alias_dependency2' => TRUE,
+    ], $after_install);
+  }
+
+}
diff --git a/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php b/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..4a0c02b01e89e5d3c1e944aef702e07a66eca355
--- /dev/null
+++ b/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Drupal\Tests\system\FunctionalJavascript\System;
+
+use Drupal\Core\Datetime\Entity\DateFormat;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+
+/**
+ * Tests that date formats UI with JavaScript enabled.
+ *
+ * @group system
+ */
+class DateFormatTest extends WebDriverTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['block'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Create admin user and log in admin user.
+    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalPlaceBlock('local_actions_block');
+  }
+
+  /**
+   * Tests XSS via date format configuration.
+   */
+  public function testDateFormatXss() {
+    $page = $this->getSession()->getPage();
+    $assert = $this->assertSession();
+
+    $date_format = DateFormat::create([
+      'id' => 'xss_short',
+      'label' => 'XSS format',
+      'pattern' => '\<\s\c\r\i\p\t\>\a\l\e\r\t\(\"\X\S\S\")\;\<\/\s\c\r\i\p\t\>',
+    ]);
+    $date_format->save();
+    $this->drupalGet('admin/config/regional/date-time');
+    $assert->assertEscaped('<script>alert("XSS");</script>', 'The date format was properly escaped');
+    $this->drupalGet('admin/config/regional/date-time/formats/manage/xss_short');
+    $assert->assertEscaped('<script>alert("XSS");</script>', 'The date format was properly escaped');
+
+    // Add a new date format with HTML in it.
+    $this->drupalGet('admin/config/regional/date-time/formats/add');
+    $date_format = '& \<\e\m\>Y\<\/\e\m\>';
+    $page->fillField('date_format_pattern', $date_format);
+    $assert->waitForText('Displayed as');
+    $assert->assertEscaped('<em>' . date("Y") . '</em>');
+    $page->fillField('label', 'date_html_pattern');
+    // Wait for the machine name ID to be completed.
+    $assert->waitForLink('Edit');
+    $page->pressButton('Add format');
+    $assert->pageTextContains('Custom date format added.');
+    $assert->assertEscaped('<em>' . date("Y") . '</em>');
+  }
+
+}
diff --git a/web/core/modules/system/tests/src/Unit/Routing/AdminRouteSubscriberTest.php b/web/core/modules/system/tests/src/Unit/Routing/AdminRouteSubscriberTest.php
index 153391c419de48a64819276431e55693d326eeda..a02c7550d91729977079e89100b2ce0d366af492 100644
--- a/web/core/modules/system/tests/src/Unit/Routing/AdminRouteSubscriberTest.php
+++ b/web/core/modules/system/tests/src/Unit/Routing/AdminRouteSubscriberTest.php
@@ -38,6 +38,27 @@ public function providerTestAlterRoutes() {
       new Route('/admin/foo'),
       TRUE,
     ];
+    $data['admin only'] = [
+      new Route('/admin'),
+      TRUE,
+    ];
+    $data['admin in part of a word'] = [
+      new Route('/administration/foo'),
+      NULL,
+    ];
+    $data['admin in part of a word with admin_route option'] = [
+      (new Route('/administration/foo'))
+        ->setOption('_admin_route', TRUE),
+      TRUE,
+    ];
+    $data['admin not at the start of the path'] = [
+      new Route('/foo/admin/bar'),
+      NULL,
+    ];
+    $data['admin in part of a word not at the start of the path'] = [
+      new Route('/foo/administration/bar'),
+      NULL,
+    ];
     $data['admin option'] = [
       (new Route('/foo'))
         ->setOption('_admin_route', TRUE),
diff --git a/web/core/modules/system/tests/themes/test_core_semver/test_core_semver.info.yml b/web/core/modules/system/tests/themes/test_core_semver/test_core_semver.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4645badc2ac4ba4c5314f382132ba812e5a7caa8
--- /dev/null
+++ b/web/core/modules/system/tests/themes/test_core_semver/test_core_semver.info.yml
@@ -0,0 +1,5 @@
+name: 'Theme test with semver core version'
+type: theme
+description: 'Test theme which has semver core version.'
+version: VERSION
+core_version_requirement: ^8 || ^9
diff --git a/web/core/modules/system/tests/themes/test_invalid_core_semver/test_invalid_core_semver.info.yml b/web/core/modules/system/tests/themes/test_invalid_core_semver/test_invalid_core_semver.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a1e1c5a827252b90a57c7fc6b6175f307eac8f7f
--- /dev/null
+++ b/web/core/modules/system/tests/themes/test_invalid_core_semver/test_invalid_core_semver.info.yml
@@ -0,0 +1,5 @@
+name: 'Theme test with invalid semver core version'
+type: theme
+description: 'Test theme which has an invalid semver core version.'
+version: VERSION
+core_version_requirement: ^7
diff --git a/web/core/modules/taxonomy/taxonomy.install b/web/core/modules/taxonomy/taxonomy.install
index 00f2bacd0b4fd8579d0d23931b0f7680eaf98e85..bcf64aca5d58d02b02395f20543f09e90d2df510 100644
--- a/web/core/modules/taxonomy/taxonomy.install
+++ b/web/core/modules/taxonomy/taxonomy.install
@@ -5,6 +5,7 @@
  * Install, update and uninstall functions for the taxonomy module.
  */
 
+use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Site\Settings;
 
@@ -195,3 +196,55 @@ function taxonomy_update_8701() {
   $storage_definition = $entity_definition_update_manager->getFieldStorageDefinition('parent', 'taxonomy_term');
   $entity_definition_update_manager->updateFieldStorageDefinition($storage_definition);
 }
+
+/**
+ * Fix the parent field langcode data.
+ */
+function taxonomy_update_8702(&$sandbox) {
+  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+  $field_storage_definition = $definition_update_manager->getFieldStorageDefinition('parent', 'taxonomy_term');
+  $entity_type = $definition_update_manager->getEntityType('taxonomy_term');
+
+  // Only perform the update if:
+  // - The field is not translatable. It's possible that custom or contrib code
+  //   has overridden this.
+  // - The field is not revisionable. If it is then
+  //   taxonomy_post_update_make_taxonomy_term_revisionable() has already run
+  //   and this used to fix the parent field langcode data.
+  // - Terms are using a SQL-based storage class.
+  if (!$field_storage_definition->isTranslatable() &&
+      !$entity_type->isRevisionable() &&
+      is_subclass_of($entity_type->getStorageClass(), SqlEntityStorageInterface::class)
+  ) {
+    // taxonomy_update_8502() populated the langcode field of
+    // 'taxonomy_term__parent' using the term's langcode. However, the field is
+    // not translatable and, therefore, should use the term's default language.
+    $database = \Drupal::database();
+    $select = $database->select('taxonomy_term__parent', 'tp');
+    $select->join('taxonomy_term_field_data', 'tdf', 'tp.entity_id = tdf.tid AND tdf.langcode <> tp.langcode');
+    $select->fields('tp', ['entity_id'])
+      ->fields('tdf', ['tid', 'langcode'])
+      ->condition('tdf.default_langcode', 1);
+
+    if (!isset($sandbox['max'])) {
+      $count_query = clone $select;
+      $sandbox['max'] = $count_query->countQuery()->execute()->fetchField();
+      $sandbox['current'] = 0;
+    }
+
+    $result = $select->execute();
+    $processed = 0;
+    while ($row = $result->fetchAssoc()) {
+      $database->update('taxonomy_term__parent')
+        ->condition('entity_id', $row['tid'])
+        ->fields(['langcode' => $row['langcode']])
+        ->execute();
+      $sandbox['current']++;
+      $processed++;
+      if ($processed >= Settings::get('entity_update_batch_size', 50)) {
+        break;
+      }
+    }
+  }
+  $sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['current'] / $sandbox['max']);
+}
diff --git a/web/core/modules/taxonomy/taxonomy.post_update.php b/web/core/modules/taxonomy/taxonomy.post_update.php
index 69fbb3d8648e68e1a9cf6b112ad1d5d4ce435f96..bbeb74f3ffe396625697ca25fccc94f1900b1997 100644
--- a/web/core/modules/taxonomy/taxonomy.post_update.php
+++ b/web/core/modules/taxonomy/taxonomy.post_update.php
@@ -29,6 +29,11 @@ function taxonomy_post_update_clear_entity_bundle_field_definitions_cache() {
  * existing ones that were using the 'content_translation_status' field.
  */
 function taxonomy_post_update_handle_publishing_status_addition_in_views(&$sandbox = NULL) {
+  // If Views is not installed, there is nothing to do.
+  if (!\Drupal::moduleHandler()->moduleExists('views')) {
+    return;
+  }
+
   $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
   $entity_type = $definition_update_manager->getEntityType('taxonomy_term');
   $published_key = $entity_type->getKey('published');
diff --git a/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermParentMultilingualTest.php b/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermParentMultilingualTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..077a97af21e31feae10f4acc48f73cb2531d2c18
--- /dev/null
+++ b/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermParentMultilingualTest.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\Tests\taxonomy\Functional\Update;
+
+use Drupal\FunctionalTests\Update\UpdatePathTestBase;
+use Drupal\taxonomy\Entity\Term;
+use Drupal\user\Entity\User;
+
+/**
+ * Tests the upgrade path for taxonomy parents with multilingual terms.
+ *
+ * @group taxonomy
+ * @group Update
+ * @group legacy
+ */
+class TaxonomyTermParentMultilingualTest extends UpdatePathTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz',
+      __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.taxonomy-parent-multilingual-3066439.php',
+    ];
+  }
+
+  /**
+   * Tests taxonomy multilingual term parents update.
+   *
+   * @see taxonomy_update_8501()
+   * @see taxonomy_update_8502()
+   * @see taxonomy_update_8503()
+   * @see taxonomy_update_8702()
+   */
+  public function testMultilingualTermParentUpdate() {
+    // There are 65 terms in the database. Process them in groups of 30 to test
+    // batching.
+    $settings['entity_update_batch_size'] = (object) [
+      'value' => 30,
+      'required' => TRUE,
+    ];
+
+    $this->writeSettings($settings);
+    $this->runUpdates();
+
+    $term = Term::load(65);
+    $this->assertSame('64', $term->parent[0]->target_id);
+
+    // Term 2 should have the root parent.
+    $term = Term::load(2);
+    $this->assertSame('0', $term->parent[0]->target_id);
+
+    // Log in as user 1.
+    $account = User::load(1);
+    $account->passRaw = 'drupal';
+    $this->drupalLogin($account);
+
+    // Make sure our vocabulary exists.
+    $this->drupalGet('admin/structure/taxonomy/manage/test_vocabulary/overview');
+
+    // Make sure our terms exist.
+    $assert_session = $this->assertSession();
+    $assert_session->pageTextContains('Test root term');
+    $assert_session->pageTextContains('Test child term');
+
+    // Make sure the terms are still translated.
+    $this->drupalGet('taxonomy/term/2/translations');
+    $assert_session->linkExists('Test root term - Spanish');
+
+    $storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
+
+    // Check that the 'content_translation_status' field has been updated
+    // correctly.
+    /** @var \Drupal\taxonomy\TermInterface $term */
+    $term = $storage->load(2);
+    $translation = $term->getTranslation('es');
+    $this->assertTrue($translation->isPublished());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function replaceUser1() {
+    // Do not replace the user from our dump.
+  }
+
+}
diff --git a/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermUpdatePathTest.php b/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermUpdatePathTest.php
index 45e7e56a886d1f3cab7a7eb911cbedc4266b2227..b4426269473ff0aba40a7c13e21ea74555b54e6c 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermUpdatePathTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/Update/TaxonomyTermUpdatePathTest.php
@@ -89,6 +89,22 @@ public function testPublishable() {
     $this->assertEquals('Another message', (string) taxonomy_update_8601());
   }
 
+  /**
+   * Tests taxonomy term views updates succeed even if Views is not installed.
+   */
+  public function testPublishingStatusUpdateForTaxonomyTermViewsWithoutViews() {
+    // Uninstalling Views will trigger some activity in the menu tree storage
+    // system, which will cause errors until system_update_8001() is run. This
+    // is because, in the drupal-8.filled.standard database fixture used for
+    // this update test, the menu link titles are not serialized (this is what
+    // gets done by system_update_8001()). Since this method is not testing
+    // anything relating to menu links, it's OK to just truncate the menu_tree
+    // table before uninstalling Views.
+    $this->container->get('database')->truncate('menu_tree')->execute();
+    $this->container->get('module_installer')->uninstall(['views']);
+    $this->runUpdates();
+  }
+
   /**
    * Tests handling of the publishing status in taxonomy term views updates.
    *
diff --git a/web/core/modules/toolbar/src/Element/ToolbarItem.php b/web/core/modules/toolbar/src/Element/ToolbarItem.php
index 79cbed2d032e757f3bbb2e079081a44e16037c4f..6aec2d27120519574504a208457e22d6ff165095 100644
--- a/web/core/modules/toolbar/src/Element/ToolbarItem.php
+++ b/web/core/modules/toolbar/src/Element/ToolbarItem.php
@@ -56,7 +56,6 @@ public static function preRenderToolbarItem($element) {
       // Provide attributes necessary for trays.
       $attributes += [
         'data-toolbar-tray' => $id . '-tray',
-        'aria-owns' => $id . '-tray',
         'role' => 'button',
         'aria-pressed' => 'false',
       ];
diff --git a/web/core/modules/update/update.module b/web/core/modules/update/update.module
index c783d7e82bbdd9ea5dfe4e2cd542526b49c37ee2..8823b783be08a9b0b6518b214cc291083841fd55 100644
--- a/web/core/modules/update/update.module
+++ b/web/core/modules/update/update.module
@@ -696,7 +696,7 @@ function update_verify_update_archive($project, $archive_file, $directory) {
     $info = \Drupal::service('info_parser')->parse($file->uri);
 
     // If the module or theme is incompatible with Drupal core, set an error.
-    if (empty($info['core']) || $info['core'] != \Drupal::CORE_COMPATIBILITY) {
+    if ($info['core_incompatible']) {
       $incompatible[] = !empty($info['name']) ? $info['name'] : t('Unknown');
     }
     else {
@@ -716,7 +716,7 @@ function update_verify_update_archive($project, $archive_file, $directory) {
       '%archive_file contains a version of %names that is not compatible with Drupal @version.',
       '%archive_file contains versions of modules or themes that are not compatible with Drupal @version: %names',
       [
-        '@version' => \Drupal::CORE_COMPATIBILITY,
+        '@version' => \Drupal::VERSION,
         '%archive_file' => $file_system->basename($archive_file),
         '%names' => implode(', ', $incompatible),
       ]
diff --git a/web/core/modules/user/src/Plugin/views/access/Role.php b/web/core/modules/user/src/Plugin/views/access/Role.php
index d1fe8abcc240da01d30c3df81c39fc994e0b2d1b..67c0ba05385a5be386f43465d1e2acaaaf5f3d29 100644
--- a/web/core/modules/user/src/Plugin/views/access/Role.php
+++ b/web/core/modules/user/src/Plugin/views/access/Role.php
@@ -69,7 +69,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function access(AccountInterface $account) {
-    return array_intersect(array_filter($this->options['role']), $account->getRoles());
+    return !empty(array_intersect(array_filter($this->options['role']), $account->getRoles()));
   }
 
   /**
diff --git a/web/core/modules/user/tests/src/Functional/Views/AccessRoleTest.php b/web/core/modules/user/tests/src/Functional/Views/AccessRoleTest.php
index 7f847234aa2ddded69742e8e3fe892690cd55001..3b10b87b702a12818111b55e821c507945747696 100644
--- a/web/core/modules/user/tests/src/Functional/Views/AccessRoleTest.php
+++ b/web/core/modules/user/tests/src/Functional/Views/AccessRoleTest.php
@@ -50,8 +50,8 @@ public function testAccessRole() {
     $this->assertTrue($access_plugin instanceof Role, 'Make sure the right class got instantiated.');
 
     // Test the access() method on the access plugin.
-    $this->assertFalse($executable->display_handler->access($this->webUser));
-    $this->assertTrue($executable->display_handler->access($this->normalUser));
+    $this->assertSame(FALSE, $executable->display_handler->access($this->webUser));
+    $this->assertSame(TRUE, $executable->display_handler->access($this->normalUser));
 
     $this->drupalLogin($this->webUser);
     $this->drupalGet('test-role');
diff --git a/web/core/modules/views/src/EntityViewsData.php b/web/core/modules/views/src/EntityViewsData.php
index 8e51d6917458770a8d750692dcd07c7335aa0c87..6f2df437cf792338e97b54092de4c1a7ea062eb5 100644
--- a/web/core/modules/views/src/EntityViewsData.php
+++ b/web/core/modules/views/src/EntityViewsData.php
@@ -183,13 +183,15 @@ public function getViewsData() {
           'id' => 'entity_operations',
         ],
       ];
-      $data[$revision_table]['operations'] = [
-        'field' => [
-          'title' => $this->t('Operations links'),
-          'help' => $this->t('Provides links to perform entity operations.'),
-          'id' => 'entity_operations',
-        ],
-      ];
+      if ($revision_table) {
+        $data[$revision_table]['operations'] = [
+          'field' => [
+            'title' => $this->t('Operations links'),
+            'help' => $this->t('Provides links to perform entity operations.'),
+            'id' => 'entity_operations',
+          ],
+        ];
+      }
     }
 
     if ($this->entityType->hasViewBuilderClass()) {
diff --git a/web/core/modules/views/src/EventSubscriber/ViewsEntitySchemaSubscriber.php b/web/core/modules/views/src/EventSubscriber/ViewsEntitySchemaSubscriber.php
index 967714449bf955d52541394745f4cb06b4965644..85503cbcf59189b5f12c5854ac7ef798cf704449 100644
--- a/web/core/modules/views/src/EventSubscriber/ViewsEntitySchemaSubscriber.php
+++ b/web/core/modules/views/src/EventSubscriber/ViewsEntitySchemaSubscriber.php
@@ -306,7 +306,7 @@ protected function baseTableRename($all_views, $entity_type_id, $old_base_table,
       }
     }
 
-    $this->processHandlers($all_views, function (array &$handler_config, ViewEntityInterface $view) use ($entity_type_id, $old_base_table, $new_base_table) {
+    $this->processHandlers($all_views, function (&$handler_config, ViewEntityInterface $view) use ($entity_type_id, $old_base_table, $new_base_table) {
       if (isset($handler_config['entity_type']) && $handler_config['entity_type'] == $entity_type_id && $handler_config['table'] == $old_base_table) {
         $handler_config['table'] = $new_base_table;
         $view->set('_updated', TRUE);
@@ -334,7 +334,7 @@ protected function dataTableRename($all_views, $entity_type_id, $old_data_table,
       }
     }
 
-    $this->processHandlers($all_views, function (array &$handler_config, ViewEntityInterface $view) use ($entity_type_id, $old_data_table, $new_data_table) {
+    $this->processHandlers($all_views, function (&$handler_config, ViewEntityInterface $view) use ($entity_type_id, $old_data_table, $new_data_table) {
       if (isset($handler_config['entity_type']) && $handler_config['entity_type'] == $entity_type_id && $handler_config['table'] == $old_data_table) {
         $handler_config['table'] = $new_data_table;
         $view->set('_updated', TRUE);
@@ -365,7 +365,7 @@ protected function dataTableAddition($all_views, EntityTypeInterface $entity_typ
 
     $data_table = $new_data_table;
 
-    $this->processHandlers($all_views, function (array &$handler_config, ViewEntityInterface $view) use ($entity_type_id, $base_table, $data_table, $base_table_fields, $data_table_fields) {
+    $this->processHandlers($all_views, function (&$handler_config, ViewEntityInterface $view) use ($entity_type_id, $base_table, $data_table, $base_table_fields, $data_table_fields) {
       if (isset($handler_config['entity_type']) && isset($handler_config['entity_field']) && $handler_config['entity_type'] == $entity_type_id) {
         // Move all fields which just exists on the data table.
         if ($handler_config['table'] == $base_table && in_array($handler_config['entity_field'], $data_table_fields) && !in_array($handler_config['entity_field'], $base_table_fields)) {
@@ -390,7 +390,7 @@ protected function dataTableAddition($all_views, EntityTypeInterface $entity_typ
    */
   protected function dataTableRemoval($all_views, $entity_type_id, $old_data_table, $base_table) {
     // We move back the data table back to the base table.
-    $this->processHandlers($all_views, function (array &$handler_config, ViewEntityInterface $view) use ($entity_type_id, $old_data_table, $base_table) {
+    $this->processHandlers($all_views, function (&$handler_config, ViewEntityInterface $view) use ($entity_type_id, $old_data_table, $base_table) {
       if (isset($handler_config['entity_type']) && $handler_config['entity_type'] == $entity_type_id) {
         if ($handler_config['table'] == $old_data_table) {
           $handler_config['table'] = $base_table;
diff --git a/web/core/modules/views/src/Plugin/views/field/RenderedEntity.php b/web/core/modules/views/src/Plugin/views/field/RenderedEntity.php
index f70b03f5d958abbbde420eaff62b47fbe6dc216d..90e5469eae8b33bf789a441a182c3cc07c6ca13f 100644
--- a/web/core/modules/views/src/Plugin/views/field/RenderedEntity.php
+++ b/web/core/modules/views/src/Plugin/views/field/RenderedEntity.php
@@ -153,7 +153,7 @@ public function render(ResultRow $values) {
       $build['#access'] = $access;
       if ($access->isAllowed()) {
         $view_builder = $this->entityTypeManager->getViewBuilder($this->getEntityTypeId());
-        $build += $view_builder->view($entity, $this->options['view_mode']);
+        $build += $view_builder->view($entity, $this->options['view_mode'], $entity->language()->getId());
       }
     }
     return $build;
diff --git a/web/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_field_renderered_entity.yml b/web/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_field_renderered_entity.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8a04ba1f638f5ebee5261e8c4b27fef5089394f6
--- /dev/null
+++ b/web/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_entity_field_renderered_entity.yml
@@ -0,0 +1,211 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - core.entity_view_mode.node.default
+  module:
+    - node
+id: test_entity_field_renderered_entity
+label: test_entity_field_renderered_entity
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: 8.x
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: 0
+    display_options:
+      defaults:
+        fields: false
+        pager: false
+        sorts: false
+      pager:
+        options:
+          offset: 0
+        type: none
+      row:
+        type: fields
+      sorts:
+        nid:
+          id: nid
+          table: node_field_data
+          field: nid
+          relationship: none
+          group_type: group
+          admin_label: ''
+          order: ASC
+          exposed: false
+          expose:
+            label: ''
+          entity_type: node
+          entity_field: nid
+          plugin_id: standard
+        title:
+          id: title
+          table: node_field_data
+          field: title
+          plugin_id: standard
+          entity_type: node
+          entity_field: title
+      rendering_language: '***LANGUAGE_entity_translation***'
+      fields:
+        rendered_entity:
+          id: rendered_entity
+          table: node
+          field: rendered_entity
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: ''
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: false
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          view_mode: default
+          entity_type: node
+          plugin_id: rendered_entity
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
+  page_1:
+    display_plugin: page
+    id: page_1
+    display_title: Page
+    position: 1
+    display_options:
+      rendering_language: '***LANGUAGE_entity_translation***'
+      path: test_entity_field_renderered_entity/entity_translation
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
+  page_2:
+    display_plugin: page
+    id: page_2
+    display_title: Page
+    position: 2
+    display_options:
+      rendering_language: '***LANGUAGE_entity_default***'
+      path: test_entity_field_renderered_entity/entity_default
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
+  page_3:
+    display_plugin: page
+    id: page_3
+    display_title: Page
+    position: 3
+    display_options:
+      rendering_language: '***LANGUAGE_site_default***'
+      path: test_entity_field_renderered_entity/site_default
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
+  page_4:
+    display_plugin: page
+    id: page_4
+    display_title: Page
+    position: 4
+    display_options:
+      rendering_language: '***LANGUAGE_language_interface***'
+      path: test_entity_field_renderered_entity/language_interface
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
+  page_5:
+    display_plugin: page
+    id: page_5
+    display_title: Page
+    position: 5
+    display_options:
+      rendering_language: en
+      path: test_entity_field_renderered_entity/en
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
+  page_6:
+    display_plugin: page
+    id: page_6
+    display_title: Page
+    position: 6
+    display_options:
+      rendering_language: es
+      path: test_entity_field_renderered_entity/es
+      display_extenders: {  }
+    cache_metadata:
+      max-age: -1
+      contexts:
+        - 'languages:language_interface'
+        - 'user.node_grants:view'
+      tags:
+        - 'config:core.entity_view_display.node.article.default'
diff --git a/web/core/modules/views/tests/modules/views_test_config/views_test_config.module b/web/core/modules/views/tests/modules/views_test_config/views_test_config.module
new file mode 100644
index 0000000000000000000000000000000000000000..b631c47a9cf16f47e258ae3e7038269663e32d15
--- /dev/null
+++ b/web/core/modules/views/tests/modules/views_test_config/views_test_config.module
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Contains the "views_test_config" module main functionality.
+ */
+
+/**
+ * Implements hook_ENTITY_TYPE_load().
+ */
+function views_test_config_view_load(array $views) {
+  // Emulate a severely broken view: this kind of view configuration cannot be
+  // saved, it can likely be returned only by a corrupt active configuration.
+  $broken_view_id = \Drupal::state()->get('views_test_config.broken_view');
+  if (isset($views[$broken_view_id])) {
+    $display =& $views[$broken_view_id]->getDisplay('default');
+    $display['display_options']['fields']['id_broken'] = NULL;
+  }
+}
diff --git a/web/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php b/web/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5f04bc9208d7c569120343fb4f19ed6673f66e60
--- /dev/null
+++ b/web/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php
@@ -0,0 +1,292 @@
+<?php
+
+namespace Drupal\Tests\views\Functional\Entity;
+
+use Drupal\Core\Language\Language;
+use Drupal\Tests\views\Functional\ViewTestBase;
+use Symfony\Component\CssSelector\CssSelectorConverter;
+
+/**
+ * Tests the rendering of the 'rendered_entity' field and translations.
+ *
+ * @group views
+ */
+class FieldRenderedEntityTranslationTest extends ViewTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['language', 'locale', 'content_translation', 'node'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $testViews = ['test_entity_field_renderered_entity'];
+
+  /**
+   * The entity type manager service.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp($import_test_views);
+
+    $this->entityTypeManager = $this->container->get('entity_type.manager');
+
+    $node_type = $this->entityTypeManager->getStorage('node_type')->create([
+      'type' => 'article',
+      'label' => 'Article',
+    ]);
+    $node_type->save();
+
+    /** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */
+    $content_translation_manager = $this->container->get('content_translation.manager');
+
+    $content_translation_manager->setEnabled('node', 'article', TRUE);
+
+    $language = $this->entityTypeManager->getStorage('configurable_language')->create([
+      'id' => 'es',
+      'label' => 'Spanish',
+    ]);
+    $language->save();
+    // Rebuild the container to setup the language path processors.
+    $this->rebuildContainer();
+  }
+
+  /**
+   * Tests that different translation mechanisms can be used for base fields.
+   */
+  public function testTranslationRows() {
+    // First, an EN node with an ES translation.
+    /** @var \Drupal\node\NodeInterface $node */
+    $node = $this->entityTypeManager->getStorage('node')->create([
+      'type' => 'article',
+      'title' => 'example EN default',
+    ]);
+    $node->save();
+
+    $translation = $node->addTranslation('es');
+    $translation->title->value = 'example ES translation';
+    $translation->sticky->value = TRUE;
+    $translation->save();
+
+    // Next, an ES node with an EN translation.
+    $node = $this->entityTypeManager->getStorage('node')->create([
+      'type' => 'article',
+      'title' => 'example ES default',
+      'langcode' => 'es',
+    ]);
+    $node->save();
+
+    $translation = $node->addTranslation('en');
+    $translation->title->value = 'example EN translation';
+    $translation->sticky->value = TRUE;
+    $translation->save();
+
+    // Next an EN node with no translation.
+    $node = $this->entityTypeManager->getStorage('node')->create([
+      'type' => 'article',
+      'title' => 'example EN no translation',
+      'sticky' => FALSE,
+    ]);
+    $node->save();
+
+    // Next an ES node with no translation.
+    $node = $this->entityTypeManager->getStorage('node')->create([
+      'type' => 'article',
+      'title' => 'example ES no translation',
+      'sticky' => FALSE,
+      'langcode' => 'es',
+    ]);
+    $node->save();
+
+    // Views are sorted first by node id ascending, and then title ascending.
+    // Confirm each node and node translation renders in its own language.
+    $this->drupalGet('test_entity_field_renderered_entity/entity_translation');
+    $this->assertRows([
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example ES translation',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+
+    // Confirm each node and node translation renders in the default language of
+    // the node.
+    $this->drupalGet('test_entity_field_renderered_entity/entity_default');
+    $this->assertRows([
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+
+    // Confirm each node and node translation renders in the site's default
+    // language (en), with fallback if node does not have en content.
+    $this->drupalGet('test_entity_field_renderered_entity/site_default');
+    $this->assertRows([
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+
+    // Confirm each node and node translation renders in the site interface
+    // language (en), with fallback if node does not have en content.
+    $this->drupalGet('test_entity_field_renderered_entity/language_interface');
+    $this->assertRows([
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+
+    // Confirm each node and node translation renders in the site interface
+    // language (es), with fallback if node does not have es content.
+    $this->drupalGet('test_entity_field_renderered_entity/language_interface', ['language' => new Language(['id' => 'es'])]);
+    $this->assertRows([
+      [
+        'title' => 'example ES translation',
+      ],
+      [
+        'title' => 'example ES translation',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+
+    // Confirm each node and node translation renders in specified language en.
+    $this->drupalGet('test_entity_field_renderered_entity/en');
+    $this->assertRows([
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN default',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example EN translation',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+
+    // Confirm each node and node translation renders in specified language es.
+    $this->drupalGet('test_entity_field_renderered_entity/es');
+    $this->assertRows([
+      [
+        'title' => 'example ES translation',
+      ],
+      [
+        'title' => 'example ES translation',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example ES default',
+      ],
+      [
+        'title' => 'example EN no translation',
+      ],
+      [
+        'title' => 'example ES no translation',
+      ],
+    ]);
+  }
+
+  /**
+   * Ensures that the rendered results are working as expected.
+   *
+   * @param array $expected
+   *   The expected rows of the result.
+   */
+  protected function assertRows(array $expected = []) {
+    $actual = [];
+    $rows = $this->cssSelect('div.views-row');
+    foreach ($rows as $row) {
+      $actual[] = [
+        'title' => $row->find('xpath', (new CssSelectorConverter())->toXPath('h2 a .field--name-title'))->getText(),
+      ];
+    }
+    $this->assertEquals($actual, $expected);
+  }
+
+}
diff --git a/web/core/modules/views/tests/src/Functional/Update/ExposedFilterBlocksUpdateTest.php b/web/core/modules/views/tests/src/Functional/Update/ExposedFilterBlocksUpdateTest.php
index cd5e9544664341dcfab9423317b086b214cc78dd..a9a952670f3329533b1c1ae24f018ae5249b34d5 100644
--- a/web/core/modules/views/tests/src/Functional/Update/ExposedFilterBlocksUpdateTest.php
+++ b/web/core/modules/views/tests/src/Functional/Update/ExposedFilterBlocksUpdateTest.php
@@ -36,4 +36,18 @@ public function testViewsPostUpdateExposedFilterBlocks() {
     $this->assertEquals('0', $config['label_display']);
   }
 
+  /**
+   * Tests that the update succeeds even if Block is not installed.
+   */
+  public function testViewsPostUpdateExposedFilterBlocksWithoutBlock() {
+    // This block is created during the update process, but since we are
+    // uninstalling the Block module for this test, it will fail config schema
+    // validation. Since that's okay for the purposes of this test, just make
+    // the config schema checker ignore the block.
+    static::$configSchemaCheckerExclusions[] = 'block.block.seven_secondary_local_tasks';
+
+    $this->container->get('module_installer')->uninstall(['block']);
+    $this->runUpdates();
+  }
+
 }
diff --git a/web/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php b/web/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
index 0e85503e05a40c1cc4b2ffe96ccaed31a1236368..4a27c0fec1a0383c437104dd9e1d59ae42f72ecf 100644
--- a/web/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
+++ b/web/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
@@ -501,6 +501,25 @@ public function testViewSaveException() {
     ]);
   }
 
+  /**
+   * Tests that broken views are handled gracefully.
+   */
+  public function testBrokenView() {
+    $view_id = 'test_view_entity_test';
+    $this->state->set('views_test_config.broken_view', $view_id);
+    $this->updateEntityTypeToTranslatable(TRUE);
+
+    /** @var \Drupal\views\Entity\View $view */
+    $entity_storage = $this->entityTypeManager->getStorage('view');
+    $view = $entity_storage->load($view_id);
+
+    // The broken handler should have been removed.
+    $display = $view->getDisplay('default');
+    $this->assertFalse(isset($display['display_options']['fields']['id_broken']));
+
+    $this->assertUpdatedViews([$view_id]);
+  }
+
   /**
    * Gets a view and its display.
    *
diff --git a/web/core/modules/views/tests/src/Unit/EntityViewsDataTest.php b/web/core/modules/views/tests/src/Unit/EntityViewsDataTest.php
index c1d0cdff9a0ae733d02377f88a4315537171305a..6cb669496a4775346fbbee93fdcc6b2a274d7936 100644
--- a/web/core/modules/views/tests/src/Unit/EntityViewsDataTest.php
+++ b/web/core/modules/views/tests/src/Unit/EntityViewsDataTest.php
@@ -973,7 +973,36 @@ public function testGetViewsDataWithoutEntityOperations() {
   public function testGetViewsDataWithEntityOperations() {
     $this->baseEntityType->setListBuilderClass('\Drupal\Core\Entity\EntityListBuilder');
     $data = $this->viewsData->getViewsData();
-    $this->assertSame('entity_operations', $data[$this->baseEntityType->getBaseTable()]['operations']['field']['id']);
+
+    $tables = ['entity_test', 'entity_test_revision'];
+    $this->assertSame($tables, array_keys($data));
+    foreach ($tables as $table_name) {
+      $this->assertSame('entity_operations', $data[$table_name]['operations']['field']['id']);
+    }
+  }
+
+  /**
+   * @covers ::getViewsData
+   */
+  public function testGetViewsDataWithNonRevisionableEntityOperations() {
+    $this->baseEntityType->setListBuilderClass('\Drupal\Core\Entity\EntityListBuilder');
+
+    $entity_type_without_revisions = $this->baseEntityType;
+    $views_data = $this->viewsData;
+
+    $entity_type_keys = $entity_type_without_revisions->getKeys();
+    unset($entity_type_keys['revision']);
+
+    $entity_type_without_revisions->set('entity_keys', $entity_type_keys);
+    $views_data->setEntityType($entity_type_without_revisions);
+
+    $data = $views_data->getViewsData();
+
+    $tables = ['entity_test'];
+    $this->assertSame($tables, array_keys($data));
+    foreach ($tables as $table_name) {
+      $this->assertSame('entity_operations', $data[$table_name]['operations']['field']['id']);
+    }
   }
 
   /**
diff --git a/web/core/modules/views/views.post_update.php b/web/core/modules/views/views.post_update.php
index 30749fcba87d3a61749c8ee714237c997cc94393..c715ac7f543e8fe8dd33999d505ca55debbc0996 100644
--- a/web/core/modules/views/views.post_update.php
+++ b/web/core/modules/views/views.post_update.php
@@ -371,6 +371,11 @@ function views_post_update_table_display_cache_max_age(&$sandbox = NULL) {
  * Update exposed filter blocks label display to be disabled.
  */
 function views_post_update_exposed_filter_blocks_label_display(&$sandbox = NULL) {
+  // If Block is not installed, there's nothing to do.
+  if (!\Drupal::moduleHandler()->moduleExists('block')) {
+    return;
+  }
+
   \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'block', function ($block) {
     /** @var \Drupal\block\BlockInterface $block */
     if (strpos($block->getPluginId(), 'views_exposed_filter_block:') === 0) {
diff --git a/web/core/modules/workspaces/src/Form/WorkspaceActivateForm.php b/web/core/modules/workspaces/src/Form/WorkspaceActivateForm.php
index e55c47e4f3dc651218056fb6e4464eb6c1814a35..e16ec4d56f6fb2fc370fa39dcd6c9c3624e91d3a 100644
--- a/web/core/modules/workspaces/src/Form/WorkspaceActivateForm.php
+++ b/web/core/modules/workspaces/src/Form/WorkspaceActivateForm.php
@@ -107,7 +107,6 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     try {
       $this->workspaceManager->setActiveWorkspace($this->entity);
       $this->messenger->addMessage($this->t('%workspace_label is now the active workspace.', ['%workspace_label' => $this->entity->label()]));
-      $form_state->setRedirect('<front>');
     }
     catch (WorkspaceAccessException $e) {
       $this->messenger->addError($this->t('You do not have access to activate the %workspace_label workspace.', ['%workspace_label' => $this->entity->label()]));
diff --git a/web/core/modules/workspaces/src/ViewsQueryAlter.php b/web/core/modules/workspaces/src/ViewsQueryAlter.php
index 8ebf289d7cc47e915c87fd2b1121d31058bf66e0..8cc93710c93b1801f824066a86bfffe542de4c4a 100644
--- a/web/core/modules/workspaces/src/ViewsQueryAlter.php
+++ b/web/core/modules/workspaces/src/ViewsQueryAlter.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\views\Plugin\views\query\QueryPluginBase;
 use Drupal\views\Plugin\views\query\Sql;
 use Drupal\views\Plugin\ViewsHandlerManager;
@@ -55,6 +56,13 @@ class ViewsQueryAlter implements ContainerInjectionInterface {
    */
   protected $viewsJoinPluginManager;
 
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
   /**
    * Constructs a new ViewsQueryAlter instance.
    *
@@ -68,13 +76,16 @@ class ViewsQueryAlter implements ContainerInjectionInterface {
    *   The views data.
    * @param \Drupal\views\Plugin\ViewsHandlerManager $views_join_plugin_manager
    *   The views join plugin manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, WorkspaceManagerInterface $workspace_manager, ViewsData $views_data, ViewsHandlerManager $views_join_plugin_manager) {
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, WorkspaceManagerInterface $workspace_manager, ViewsData $views_data, ViewsHandlerManager $views_join_plugin_manager, LanguageManagerInterface $language_manager) {
     $this->entityTypeManager = $entity_type_manager;
     $this->entityFieldManager = $entity_field_manager;
     $this->workspaceManager = $workspace_manager;
     $this->viewsData = $views_data;
     $this->viewsJoinPluginManager = $views_join_plugin_manager;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -86,7 +97,8 @@ public static function create(ContainerInterface $container) {
       $container->get('entity_field.manager'),
       $container->get('workspaces.manager'),
       $container->get('views.views_data'),
-      $container->get('plugin.manager.views.join')
+      $container->get('plugin.manager.views.join'),
+      $container->get('language_manager')
     );
   }
 
@@ -335,7 +347,7 @@ protected function ensureRevisionTable(EntityTypeInterface $entity_type, Sql $qu
         // to modify the join and make sure that 'workspace_association' comes
         // first.
         if (empty($table_queue[$alias]['join']->workspace_adjusted)) {
-          $table_queue[$alias]['join'] = $this->getRevisionTableJoin($relationship, $base_revision_table, $revision_field, $workspace_association_table);
+          $table_queue[$alias]['join'] = $this->getRevisionTableJoin($relationship, $base_revision_table, $revision_field, $workspace_association_table, $entity_type);
           // We also have to ensure that our 'workspace_association' comes before
           // this.
           $this->moveEntityTable($query, $workspace_association_table, $alias);
@@ -346,7 +358,7 @@ protected function ensureRevisionTable(EntityTypeInterface $entity_type, Sql $qu
     }
 
     // Construct a new join.
-    $join = $this->getRevisionTableJoin($relationship, $base_revision_table, $revision_field, $workspace_association_table);
+    $join = $this->getRevisionTableJoin($relationship, $base_revision_table, $revision_field, $workspace_association_table, $entity_type);
     return $query->queueTable($base_revision_table, $relationship, $join);
   }
 
@@ -362,19 +374,27 @@ protected function ensureRevisionTable(EntityTypeInterface $entity_type, Sql $qu
    * @param string $workspace_association_table
    *   The alias of the 'workspace_association' table joined to the main entity
    *   table.
+   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+   *   The entity type that is being queried.
    *
    * @return \Drupal\views\Plugin\views\join\JoinPluginInterface
    *   An adjusted views join object to add to the query.
+   * @throws \Drupal\Component\Plugin\Exception\PluginException
    */
-  protected function getRevisionTableJoin($relationship, $table, $field, $workspace_association_table) {
+  protected function getRevisionTableJoin($relationship, $table, $field, $workspace_association_table, EntityTypeInterface $entity_type) {
     $definition = [
       'table' => $table,
       'field' => $field,
-      // Making this explicitly null allows the left table to be a formula.
+      // Making this explicitly NULL allows the left table to be a formula.
       'left_table' => NULL,
       'left_field' => "COALESCE($workspace_association_table.target_entity_revision_id, $relationship.$field)",
     ];
 
+    if ($entity_type->isTranslatable() && $this->languageManager->isMultilingual()) {
+      $langcode_field = $entity_type->getKey('langcode');
+      $definition['extra'] = "$table.$langcode_field = $relationship.$langcode_field";
+    }
+
     /** @var \Drupal\views\Plugin\views\join\JoinPluginInterface $join */
     $join = $this->viewsJoinPluginManager->createInstance('standard', $definition);
     $join->adjusted = TRUE;
diff --git a/web/core/modules/workspaces/src/WorkspaceListBuilder.php b/web/core/modules/workspaces/src/WorkspaceListBuilder.php
index 360c1e89e143fe5264ab313bce67828e8cfcb52f..9fbe60d998f09c94c45c63b81cc03a73d6436c48 100644
--- a/web/core/modules/workspaces/src/WorkspaceListBuilder.php
+++ b/web/core/modules/workspaces/src/WorkspaceListBuilder.php
@@ -208,7 +208,7 @@ protected function offCanvasRender(array &$build) {
     $rows = array_slice($build['table']['#rows'], 0, 5, TRUE);
     foreach ($rows as $id => $row) {
       if ($active_workspace->id() !== $id) {
-        $url = Url::fromRoute('entity.workspace.activate_form', ['workspace' => $id]);
+        $url = Url::fromRoute('entity.workspace.activate_form', ['workspace' => $id], ['query' => $this->getDestinationArray()]);
         $default_class = $id === WorkspaceInterface::DEFAULT_WORKSPACE ? 'workspaces__item--default' : 'workspaces__item--not-default';
         $items[] = [
           '#type' => 'link',
diff --git a/web/core/modules/workspaces/tests/src/FunctionalJavascript/WorkspaceToolbarIntegrationTest.php b/web/core/modules/workspaces/tests/src/FunctionalJavascript/WorkspaceToolbarIntegrationTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c0eb05728092af6d1c675bf65ac63d4b58d55e30
--- /dev/null
+++ b/web/core/modules/workspaces/tests/src/FunctionalJavascript/WorkspaceToolbarIntegrationTest.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Drupal\Tests\workspaces\FunctionalJavascript;
+
+use Drupal\Tests\system\FunctionalJavascript\OffCanvasTestBase;
+
+/**
+ * Tests workspace settings stray integration.
+ *
+ * @group workspaces
+ */
+class WorkspaceToolbarIntegrationTest extends OffCanvasTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['toolbar', 'workspaces'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $admin_user = $this->drupalCreateUser([
+      'administer workspaces',
+      'access toolbar',
+      'access administration pages',
+    ]);
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Test workspace canvas can be toggled with JavaScript.
+   */
+  public function testWorkspaceCanvasToggling() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Set size for horizontal toolbar.
+    $this->getSession()->resizeWindow(1200, 600);
+    $this->drupalGet('<front>');
+    // Wait for toolbar to appear.
+    $this->assertNotEmpty($assert_session->waitForElement('css', 'body.toolbar-horizontal'));
+
+    // Open workspace canvas.
+    $page->clickLink('Switch workspace');
+    $this->waitForOffCanvasToOpen('top');
+    $assert_session->elementExists('css', '.workspaces-dialog');
+
+    // Close Canvas.
+    $page->pressButton('Close');
+    $this->waitForOffCanvasToClose();
+    $assert_session->assertNoElementAfterWait('css', '.workspaces-dialog');
+  }
+
+  /**
+   * Test workspace switch and landing page behaviour.
+   */
+  public function testWorkspaceSwitch() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Wait for toolbar to appear.
+    $this->getSession()->resizeWindow(1200, 600);
+    $this->drupalGet('admin');
+
+    // Wait for toolbar to appear.
+    $this->assertNotEmpty($assert_session->waitForElement('css', 'body.toolbar-horizontal'));
+
+    // Open workspace canvas.
+    $page->clickLink('Switch workspace');
+    $this->waitForOffCanvasToOpen('top');
+
+    // Click 'stage' workspace and confirm switch.
+    $page->clickLink('Stage');
+    $this->assertElementVisibleAfterWait('css', '.workspace-activate-form.workspace-confirm-form');
+    $page->find('css', '.ui-dialog-buttonset .button--primary')->click();
+    $assert_session->waitForElementVisible('css', '.messages--status');
+
+    // Make sure we stay on same page after switch.
+    $assert_session->responseContains('<em class="placeholder">Stage</em> is now the active workspace.');
+    $assert_session->addressEquals('admin');
+  }
+
+}
diff --git a/web/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php b/web/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php
index 103605ed01c7bf219e2d98dd26b37dbac8c76cca..8dcbf1ada430b9fbd1cd2ca5e723b07a84fe42e8 100644
--- a/web/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php
+++ b/web/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Form\FormState;
 use Drupal\entity_test\Entity\EntityTestMulRevPub;
 use Drupal\KernelTests\KernelTestBase;
+use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\system\Form\SiteInformationForm;
 use Drupal\Tests\field\Traits\EntityReferenceTestTrait;
 use Drupal\Tests\node\Traits\ContentTypeCreationTrait;
@@ -62,6 +63,8 @@ class WorkspaceIntegrationTest extends KernelTestBase {
     'user',
     'system',
     'views',
+    'language',
+    'content_translation',
   ];
 
   /**
@@ -78,20 +81,29 @@ protected function setUp() {
     $this->installEntitySchema('node');
     $this->installEntitySchema('user');
 
-    $this->installConfig(['filter', 'node', 'system']);
+    $this->installConfig(['filter', 'node', 'system', 'language', 'content_translation']);
 
     $this->installSchema('system', ['key_value_expire', 'sequences']);
     $this->installSchema('node', ['node_access']);
 
+    $language = ConfigurableLanguage::createFromLangcode('de');
+    $language->save();
+
     $this->createContentType(['type' => 'page']);
 
     $this->setCurrentUser($this->createUser(['administer nodes']));
 
+    $this->container->get('content_translation.manager')->setEnabled('node', 'page', TRUE);
+
     // Create two nodes, a published and an unpublished one, so we can test the
     // behavior of the module with default/existing content.
     $this->createdTimestamp = \Drupal::time()->getRequestTime();
     $this->nodes[] = $this->createNode(['title' => 'live - 1 - r1 - published', 'created' => $this->createdTimestamp++, 'status' => TRUE]);
     $this->nodes[] = $this->createNode(['title' => 'live - 2 - r2 - unpublished', 'created' => $this->createdTimestamp++, 'status' => FALSE]);
+
+    $translation = $this->nodes[0]->addTranslation('de');
+    $translation->setTitle('live - 1 - r1 - published - de');
+    $translation->save();
   }
 
   /**
@@ -693,6 +705,18 @@ protected function assertEntityLoad(array $expected_values, $entity_type_id) {
       $this->assertEquals($expected_default_revision[$published_key], $entities[$entity_id]->isPublished());
     }
 
+    // Check loading entities one by one. It is important to do these checks
+    // after the "multiple load" ones above so we can test with a fully warmed
+    // static cache.
+    foreach ($expected_default_revisions as $expected_default_revision) {
+      $entity_id = $expected_default_revision[$id_key];
+      $entities = $this->entityTypeManager->getStorage($entity_type_id)->loadMultiple([$entity_id]);
+      $this->assertCount(1, $entities);
+      $this->assertEquals($expected_default_revision[$revision_key], $entities[$entity_id]->getRevisionId());
+      $this->assertEquals($expected_default_revision[$label_key], $entities[$entity_id]->label());
+      $this->assertEquals($expected_default_revision[$published_key], $entities[$entity_id]->isPublished());
+    }
+
     // Check \Drupal\Core\Entity\EntityStorageInterface::loadUnchanged().
     foreach ($expected_default_revisions as $expected_default_revision) {
       /** @var \Drupal\Core\Entity\RevisionableInterface|\Drupal\Core\Entity\EntityPublishedInterface $entity */
diff --git a/web/core/modules/workspaces/workspaces.module b/web/core/modules/workspaces/workspaces.module
index c080ec431868803f8c904e6bef80230388390df9..817edc47da3fddf408451ff35246ef721b877e4c 100644
--- a/web/core/modules/workspaces/workspaces.module
+++ b/web/core/modules/workspaces/workspaces.module
@@ -152,7 +152,6 @@ function workspaces_cron() {
  * Implements hook_toolbar().
  */
 function workspaces_toolbar() {
-  $items = [];
   $items['workspace'] = [
     '#cache' => [
       'contexts' => [
@@ -160,7 +159,6 @@ function workspaces_toolbar() {
       ],
     ],
   ];
-
   $current_user = \Drupal::currentUser();
   if (!$current_user->hasPermission('administer workspaces')
     && !$current_user->hasPermission('view own workspace')
@@ -176,7 +174,7 @@ function workspaces_toolbar() {
     'tab' => [
       '#type' => 'link',
       '#title' => $active_workspace->label(),
-      '#url' => $active_workspace->toUrl('collection'),
+      '#url' => $active_workspace->toUrl('collection', ['query' => \Drupal::destination()->getAsArray()]),
       '#attributes' => [
         'title' => t('Switch workspace'),
         'class' => ['use-ajax', 'toolbar-icon', 'toolbar-icon-workspace'],
diff --git a/web/core/package.json b/web/core/package.json
index 36add66e61937d5bc86f7d81a9280197f602d512..e89fbbc06b5934cbd96e21bb8fcc07e83ec7a26c 100644
--- a/web/core/package.json
+++ b/web/core/package.json
@@ -26,7 +26,7 @@
     "babel-preset-env": "^1.4.0",
     "chalk": "^2.3.0",
     "chokidar": "^2.0.0",
-    "chromedriver": "^2.35.0",
+    "chromedriver": "^75.1.0",
     "cross-env": "^5.1.3",
     "dotenv-safe": "^5.0.1",
     "eslint": "^4.19.1",
@@ -39,12 +39,12 @@
     "glob": "^7.1.2",
     "minimist": "^1.2.0",
     "mkdirp": "^0.5.1",
-    "nightwatch": "^0.9.20",
+    "nightwatch": "^1.2.1",
     "prettier": "^1.14.0",
     "stylelint": "^9.10.1",
     "stylelint-checkstyle-formatter": "^0.1.1",
     "stylelint-config-standard": "^18.2.0",
-    "stylelint-no-browser-hacks": "^1.1.0"
+    "stylelint-no-browser-hacks": "^1.2.1"
   },
   "//": "'development is the default environment, and legacy is for transpiling the old jQuery codebase",
   "babel": {
diff --git a/web/core/phpunit.xml.dist b/web/core/phpunit.xml.dist
index 4f81a2d5333ed73f9c49d89ee04082769cfbb9fe..6f2b27aebf5f14d5f5be05db26d5e5c9a5381a6c 100644
--- a/web/core/phpunit.xml.dist
+++ b/web/core/phpunit.xml.dist
@@ -31,9 +31,13 @@
     <!-- To disable deprecation testing completely uncomment the next line. -->
     <!-- <env name="SYMFONY_DEPRECATIONS_HELPER" value="disabled"/> -->
     <!-- Example for changing the driver class for mink tests MINK_DRIVER_CLASS value: 'Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver' -->
+    <env name="MINK_DRIVER_CLASS" value=''/>
     <!-- Example for changing the driver args to mink tests MINK_DRIVER_ARGS value: '["http://127.0.0.1:8510"]' -->
+    <env name="MINK_DRIVER_ARGS" value=''/>
     <!-- Example for changing the driver args to phantomjs tests MINK_DRIVER_ARGS_PHANTOMJS value: '["http://127.0.0.1:8510"]' -->
-    <!-- Example for changing the driver args to webdriver tests MINK_DRIVER_ARGS_WEBDRIVER value: '["firefox", null, "http://localhost:4444/wd/hub"]' -->
+    <env name="MINK_DRIVER_ARGS_PHANTOMJS" value=''/>
+    <!-- Example for changing the driver args to webdriver tests MINK_DRIVER_ARGS_WEBDRIVER value: '["chrome", { "chromeOptions": { "w3c": false } }, "http://localhost:4444/wd/hub"]' For using the Firefox browser, replace "chrome" with "firefox" -->
+    <env name="MINK_DRIVER_ARGS_WEBDRIVER" value=''/>
   </php>
   <testsuites>
     <testsuite name="unit">
diff --git a/web/core/profiles/demo_umami/themes/umami/umami.theme b/web/core/profiles/demo_umami/themes/umami/umami.theme
index 7528b4ee340586172c377df6c7e2e684b830c3dc..58ac9ed6adad2b198af92a94ba9caad6e1094823 100644
--- a/web/core/profiles/demo_umami/themes/umami/umami.theme
+++ b/web/core/profiles/demo_umami/themes/umami/umami.theme
@@ -53,7 +53,7 @@ function umami_preprocess_block(&$variables) {
 }
 
 /**
- * Implements hook_theme_suggestions_HOOK_alter() for form templates.
+ * Implements hook_theme_suggestions_HOOK_alter() for block templates.
  */
 function umami_theme_suggestions_block_alter(array &$suggestions, array $variables) {
   // Block suggestions for custom block bundles.
diff --git a/web/core/scripts/run-tests.sh b/web/core/scripts/run-tests.sh
index 42bc5e8b6c14ff32b2e3f070d15158073f564e9d..e18eb840afbe09efddd8d018354d65b41326079e 100755
--- a/web/core/scripts/run-tests.sh
+++ b/web/core/scripts/run-tests.sh
@@ -15,6 +15,7 @@
 use Drupal\Core\File\Exception\FileException;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\StreamWrapper\PublicStream;
+use Drupal\Core\Test\RunTests\TestFileParser;
 use Drupal\Core\Test\TestDatabase;
 use Drupal\Core\Test\TestRunnerKernel;
 use Drupal\simpletest\Form\SimpletestResultsForm;
@@ -1063,31 +1064,13 @@ function simpletest_script_get_test_list() {
     }
     elseif ($args['file']) {
       // Extract test case class names from specified files.
+      $parser = new TestFileParser();
       foreach ($args['test_names'] as $file) {
         if (!file_exists($file)) {
           simpletest_script_print_error('File not found: ' . $file);
           exit(SIMPLETEST_SCRIPT_EXIT_FAILURE);
         }
-        $content = file_get_contents($file);
-        // Extract a potential namespace.
-        $namespace = FALSE;
-        if (preg_match('@^namespace ([^ ;]+)@m', $content, $matches)) {
-          $namespace = $matches[1];
-        }
-        // Extract all class names.
-        // Abstract classes are excluded on purpose.
-        preg_match_all('@^class ([^ ]+)@m', $content, $matches);
-        if (!$namespace) {
-          $test_list = array_merge($test_list, $matches[1]);
-        }
-        else {
-          foreach ($matches[1] as $class_name) {
-            $namespace_class = $namespace . '\\' . $class_name;
-            if (is_subclass_of($namespace_class, '\Drupal\simpletest\TestBase') || is_subclass_of($namespace_class, TestCase::class)) {
-              $test_list[] = $namespace_class;
-            }
-          }
-        }
+        $test_list = array_merge($test_list, $parser->getTestListFromFile($file));
       }
     }
     elseif ($args['directory']) {
@@ -1121,27 +1104,9 @@ function simpletest_script_get_test_list() {
           $files[$filename] = $filename;
         }
       }
+      $parser = new TestFileParser();
       foreach ($files as $file) {
-        $content = file_get_contents($file);
-        // Extract a potential namespace.
-        $namespace = FALSE;
-        if (preg_match('@^\s*namespace ([^ ;]+)@m', $content, $matches)) {
-          $namespace = $matches[1];
-        }
-        // Extract all class names.
-        // Abstract classes are excluded on purpose.
-        preg_match_all('@^\s*class ([^ ]+)@m', $content, $matches);
-        if (!$namespace) {
-          $test_list = array_merge($test_list, $matches[1]);
-        }
-        else {
-          foreach ($matches[1] as $class_name) {
-            $namespace_class = $namespace . '\\' . $class_name;
-            if (is_subclass_of($namespace_class, '\Drupal\simpletest\TestBase') || is_subclass_of($namespace_class, TestCase::class)) {
-              $test_list[] = $namespace_class;
-            }
-          }
-        }
+        $test_list = array_merge($test_list, $parser->getTestListFromFile($file));
       }
     }
     else {
diff --git a/web/core/tests/Drupal/FunctionalJavascriptTests/BrowserWithJavascriptTest.php b/web/core/tests/Drupal/FunctionalJavascriptTests/BrowserWithJavascriptTest.php
index 98a3b9726228d06c1b4a838621a1523922b3e049..8667b8296dbbf688f8ab9fe7ae544949964abb9e 100644
--- a/web/core/tests/Drupal/FunctionalJavascriptTests/BrowserWithJavascriptTest.php
+++ b/web/core/tests/Drupal/FunctionalJavascriptTests/BrowserWithJavascriptTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\FunctionalJavascriptTests;
 
+use Behat\Mink\Driver\GoutteDriver;
+
 /**
  * Tests if we can execute JavaScript in the browser.
  *
@@ -9,6 +11,13 @@
  */
 class BrowserWithJavascriptTest extends WebDriverTestBase {
 
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['test_page_test'];
+
   public function testJavascript() {
     $this->drupalGet('<front>');
     $session = $this->getSession();
@@ -60,4 +69,93 @@ public function testCreateScreenshot() {
     $this->assertFileExists('public://screenshot.jpg');
   }
 
+  /**
+   * Tests assertEscaped() and assertUnescaped().
+   *
+   * @see \Drupal\Tests\WebAssert::assertNoEscaped()
+   * @see \Drupal\Tests\WebAssert::assertEscaped()
+   */
+  public function testEscapingAssertions() {
+    $assert = $this->assertSession();
+
+    $this->drupalGet('test-escaped-characters');
+    $assert->assertNoEscaped('<div class="escaped">');
+    $assert->responseContains('<div class="escaped">');
+    $assert->assertEscaped('Escaped: <"\'&>');
+
+    $this->drupalGet('test-escaped-script');
+    $assert->assertNoEscaped('<div class="escaped">');
+    $assert->responseContains('<div class="escaped">');
+    $assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>");
+
+    $this->drupalGetWithAlert('test-unescaped-script');
+    $assert->assertNoEscaped('<div class="unescaped">');
+    $assert->responseContains('<div class="unescaped">');
+    $assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
+    $assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
+  }
+
+  /**
+   * Retrieves a Drupal path or an absolute path.
+   *
+   * @param string|\Drupal\Core\Url $path
+   *   Drupal path or URL to load into Mink controlled browser.
+   * @param array $options
+   *   (optional) Options to be forwarded to the url generator.
+   * @param string[] $headers
+   *   An array containing additional HTTP request headers, the array keys are
+   *   the header names and the array values the header values. This is useful
+   *   to set for example the "Accept-Language" header for requesting the page
+   *   in a different language. Note that not all headers are supported, for
+   *   example the "Accept" header is always overridden by the browser. For
+   *   testing REST APIs it is recommended to obtain a separate HTTP client
+   *   using getHttpClient() and performing requests that way.
+   *
+   * @return string
+   *   The retrieved HTML string, also available as $this->getRawContent()
+   *
+   * @see \Drupal\Tests\BrowserTestBase::getHttpClient()
+   */
+  protected function drupalGetWithAlert($path, array $options = [], array $headers = []) {
+    $options['absolute'] = TRUE;
+    $url = $this->buildUrl($path, $options);
+
+    $session = $this->getSession();
+
+    $this->prepareRequest();
+    foreach ($headers as $header_name => $header_value) {
+      $session->setRequestHeader($header_name, $header_value);
+    }
+
+    $session->visit($url);
+
+    // There are 2 alerts to accept before we can get the content of the page.
+    $session->getDriver()->getWebdriverSession()->accept_alert();
+    $session->getDriver()->getWebdriverSession()->accept_alert();
+
+    $out = $session->getPage()->getContent();
+
+    // Ensure that any changes to variables in the other thread are picked up.
+    $this->refreshVariables();
+
+    // Replace original page output with new output from redirected page(s).
+    if ($new = $this->checkForMetaRefresh()) {
+      $out = $new;
+      // We are finished with all meta refresh redirects, so reset the counter.
+      $this->metaRefreshCount = 0;
+    }
+
+    // Log only for JavascriptTestBase tests because for Goutte we log with
+    // ::getResponseLogHandler.
+    if ($this->htmlOutputEnabled && !($this->getSession()->getDriver() instanceof GoutteDriver)) {
+      $html_output = 'GET request to: ' . $url .
+        '<hr />Ending URL: ' . $this->getSession()->getCurrentUrl();
+      $html_output .= '<hr />' . $out;
+      $html_output .= $this->getHtmlOutputHeaders();
+      $this->htmlOutput($html_output);
+    }
+
+    return $out;
+  }
+
 }
diff --git a/web/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php b/web/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php
index d0b9c2953f5b6b501736f4d1223d35a613204e3f..77054b76ddd82f26fd2efd2fc33590db20d88fcc 100644
--- a/web/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php
+++ b/web/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceAutocompleteWidgetTest.php
@@ -49,14 +49,18 @@ public function testEntityReferenceAutocompleteWidget() {
     // operator.
     $field_name = 'field_test';
     $this->createEntityReferenceField('node', 'page', $field_name, $field_name, 'node', 'default', ['target_bundles' => ['page']]);
-    entity_get_form_display('node', 'page', 'default')
-      ->setComponent($field_name, [
+    $form_display = entity_get_form_display('node', 'page', 'default');
+    $form_display->setComponent($field_name, [
         'type' => 'entity_reference_autocomplete',
         'settings' => [
           'match_operator' => 'CONTAINS',
         ],
-      ])
-      ->save();
+      ]);
+    // To satisfy config schema, the size setting must be an integer, not just
+    // a numeric value. See https://www.drupal.org/node/2885441.
+    $this->assertInternalType('integer', $form_display->getComponent($field_name)['settings']['size']);
+    $form_display->save();
+    $this->assertInternalType('integer', $form_display->getComponent($field_name)['settings']['size']);
 
     // Visit the node add page.
     $this->drupalGet('node/add/page');
diff --git a/web/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php b/web/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php
index 92f40091ef39b8d563b4f9dcaef35fa0f32b165a..e72bda06e264fa41c4e978c4c0226f460385a5b5 100644
--- a/web/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php
+++ b/web/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php
@@ -387,6 +387,51 @@ function t(r, lx, ly) {
     return $this->session->evaluateScript($full_javascript_visibility_test);
   }
 
+  /**
+   * Passes if the raw text IS NOT found escaped on the loaded page.
+   *
+   * Raw text refers to the raw HTML that the page generated.
+   *
+   * @param string $raw
+   *   Raw (HTML) string to look for.
+   */
+  public function assertNoEscaped($raw) {
+    $this->responseNotContains($this->escapeHtml($raw));
+  }
+
+  /**
+   * Passes if the raw text IS found escaped on the loaded page.
+   *
+   * Raw text refers to the raw HTML that the page generated.
+   *
+   * @param string $raw
+   *   Raw (HTML) string to look for.
+   */
+  public function assertEscaped($raw) {
+    $this->responseContains($this->escapeHtml($raw));
+  }
+
+  /**
+   * Escapes HTML for testing.
+   *
+   * Drupal's Html::escape() uses the ENT_QUOTES flag with htmlspecialchars() to
+   * escape both single and double quotes. With JavascriptTestBase testing the
+   * browser is automatically converting &quot; and &#039; to double and single
+   * quotes respectively therefore we can not escape them when testing for
+   * escaped HTML.
+   *
+   * @param $raw
+   *   The raw string to escape.
+   *
+   * @return string
+   *   The string with escaped HTML.
+   *
+   * @see Drupal\Component\Utility\Html::escape()
+   */
+  protected function escapeHtml($raw) {
+    return htmlspecialchars($raw, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8');
+  }
+
   /**
    * Asserts that no matching element exists on the page after a wait.
    *
diff --git a/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverCurlService.php b/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverCurlService.php
index 13991afd5da6f60b13198e282bc1790afa2ca4cf..eb2eb301f36e9e6c0abdfdb0b8b2a676eeb5e2ab 100644
--- a/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverCurlService.php
+++ b/web/core/tests/Drupal/FunctionalJavascriptTests/WebDriverCurlService.php
@@ -42,6 +42,11 @@ public function execute($requestMethod, $url, $parameters = NULL, $extraOptions
             }
             else {
               $customHeaders[] = 'Content-Length: 0';
+
+              // Suppress "Transfer-Encoding: chunked" header automatically
+              // added by cURL that causes a 400 bad request (bad
+              // content-length).
+              $customHeaders[] = 'Transfer-Encoding:';
             }
 
             // Suppress "Expect: 100-continue" header automatically added by
@@ -62,6 +67,11 @@ public function execute($requestMethod, $url, $parameters = NULL, $extraOptions
             }
             else {
               $customHeaders[] = 'Content-Length: 0';
+
+              // Suppress "Transfer-Encoding: chunked" header automatically
+              // added by cURL that causes a 400 bad request (bad
+              // content-length).
+              $customHeaders[] = 'Transfer-Encoding:';
             }
 
             // Suppress "Expect: 100-continue" header automatically added by
diff --git a/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php b/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
index 6c1bd8be50fcbe33e6a1b3cc45aeff34706461ad..11e8980f759a593a2752d4a6254378b43f239808 100644
--- a/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php
@@ -707,4 +707,30 @@ public function testHtkey() {
     $this->assertSession()->statusCodeEquals(403);
   }
 
+  /**
+   * Tests assertEscaped() and assertUnescaped().
+   *
+   * @see \Drupal\Tests\WebAssert::assertNoEscaped()
+   * @see \Drupal\Tests\WebAssert::assertEscaped()
+   */
+  public function testEscapingAssertions() {
+    $assert = $this->assertSession();
+
+    $this->drupalGet('test-escaped-characters');
+    $assert->assertNoEscaped('<div class="escaped">');
+    $assert->responseContains('<div class="escaped">');
+    $assert->assertEscaped('Escaped: <"\'&>');
+
+    $this->drupalGet('test-escaped-script');
+    $assert->assertNoEscaped('<div class="escaped">');
+    $assert->responseContains('<div class="escaped">');
+    $assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>");
+
+    $this->drupalGet('test-unescaped-script');
+    $assert->assertNoEscaped('<div class="unescaped">');
+    $assert->responseContains('<div class="unescaped">');
+    $assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
+    $assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
+  }
+
 }
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerNonEnglishProfileWithoutLocaleModuleTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerNonEnglishProfileWithoutLocaleModuleTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..54a9fc13361f4ad4f4c3118f0a8425730698e0e3
--- /dev/null
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerNonEnglishProfileWithoutLocaleModuleTest.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\FunctionalTests\Installer;
+
+use Drupal\Core\Serialization\Yaml;
+
+/**
+ * Tests installing a profile with non-English language and no locale module.
+ *
+ * @group Installer
+ */
+class InstallerNonEnglishProfileWithoutLocaleModuleTest extends InstallerTestBase {
+
+  /**
+   * The testing profile name.
+   *
+   * @var string
+   */
+  const PROFILE = 'testing_with_language_without_locale';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $profile = self::PROFILE;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareEnvironment() {
+    parent::prepareEnvironment();
+
+    // Create a self::PROFILE testing profile that depends on the 'language'
+    // module but not on 'locale' module.
+    $profile_info = [
+      'type' => 'profile',
+      'core' => \Drupal::CORE_COMPATIBILITY,
+      'name' => 'Test with language but without locale',
+      'install' => ['language'],
+    ];
+
+    // File API functions are not available yet.
+    $profile_dir = "{$this->root}/{$this->siteDirectory}/profiles/" . self::PROFILE;
+    $profile_config_dir = "$profile_dir/config/install";
+    mkdir($profile_config_dir, 0777, TRUE);
+    $profile_info_file = $profile_dir . '/' . static::PROFILE . '.info.yml';
+    file_put_contents($profile_info_file, Yaml::encode($profile_info));
+
+    // Copy a non-English language config YAML to be installed with the profile.
+    copy($this->root . '/core/profiles/testing_multilingual/config/install/language.entity.de.yml', $profile_config_dir . '/language.entity.de.yml');
+  }
+
+  /**
+   * Tests installing a profile with non-English language and no locale module.
+   */
+  public function testNonEnglishProfileWithoutLocaleModule() {
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertUrl('user/1');
+    // Confirm that we are logged-in after installation.
+    $this->assertText($this->rootUser->getAccountName());
+
+    // Verify that the confirmation message appears.
+    require_once $this->root . '/core/includes/install.inc';
+    $this->assertRaw(t('Congratulations, you installed @drupal!', [
+      '@drupal' => drupal_install_profile_distribution_name(),
+    ]));
+
+    $this->assertFalse(\Drupal::service('module_handler')->moduleExists('locale'), 'The Locale module is not installed.');
+    $this->assertTrue(\Drupal::service('module_handler')->moduleExists('language'), 'The Language module is installed.');
+    $this->assertTrue(\Drupal::languageManager()->isMultilingual(), 'The language manager is multi-lingual.');
+  }
+
+}
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerPostInstallTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerPostInstallTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..80e2840fa88117c18188f966dc531b5b4c595684
--- /dev/null
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerPostInstallTest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Drupal\FunctionalTests\Installer;
+
+/**
+ * Tests re-visiting the installer after a successful installation.
+ *
+ * @group Installer
+ */
+class InstallerPostInstallTest extends InstallerTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $profile = 'minimal';
+
+  /**
+   * Confirms that visiting the installer does not break things post-install.
+   */
+  public function testVisitInstallerPostInstall() {
+    \Drupal::service('module_installer')->install(['system_test']);
+    // Clear caches to ensure that system_test's routes are available.
+    $this->resetAll();
+    // Confirm that the install_profile is correct.
+    $this->drupalGet('/system-test/get-install-profile');
+    $this->assertText('minimal');
+    // Make an anonymous visit to the installer
+    $this->drupalLogout();
+    $this->visitInstaller();
+    // Ensure that the install profile is still correct.
+    $this->drupalGet('/system-test/get-install-profile');
+    $this->assertText('minimal');
+  }
+
+}
diff --git a/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php b/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php
index 942cb886ad24276749c37f030b520b477bd47726..504eb96ab96941c49c043c7eda34e8fa0596fdab 100644
--- a/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBaseTest.php
@@ -26,6 +26,7 @@ protected function setDatabaseDumpFiles() {
     $this->databaseDumpFiles = [
       __DIR__ . '/../../../../modules/system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
       __DIR__ . '/../../../../modules/system/tests/fixtures/update/drupal-8.update-test-schema-enabled.php',
+      __DIR__ . '/../../../../modules/system/tests/fixtures/update/drupal-8.update-test-semver-update-n-enabled.php',
     ];
   }
 
@@ -99,8 +100,11 @@ public function testUpdateHookN() {
 
     // Ensure schema has changed.
     $this->assertEqual(drupal_get_installed_schema_version('update_test_schema', TRUE), 8001);
+    $this->assertEqual(drupal_get_installed_schema_version('update_test_semver_update_n', TRUE), 8001);
     // Ensure the index was added for column a.
     $this->assertTrue($connection->schema()->indexExists('update_test_schema_table', 'test'), 'Version 8001 of the update_test_schema module is installed.');
+    // Ensure update_test_semver_update_n_update_8001 was run.
+    $this->assertEquals(\Drupal::state()->get('update_test_semver_update_n_update_8001'), 'Yes, I was run. Thanks for testing!');
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseTestBase.php b/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseTestBase.php
index 784bfd6189a4079d5f6add46bc7b4755b47ed980..ae468c686a9bb3b02c4400d28e6556c059a182ee 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseTestBase.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Database/DatabaseTestBase.php
@@ -27,6 +27,7 @@ protected function setUp() {
     $this->connection = Database::getConnection();
     $this->installSchema('database_test', [
       'test',
+      'test_classtype',
       'test_people',
       'test_people_copy',
       'test_one_blob',
@@ -100,6 +101,15 @@ public static function addSampleData() {
       ])
       ->execute();
 
+    $connection->insert('test_classtype')
+      ->fields([
+        'classname' => 'Drupal\Tests\system\Functional\Database\FakeRecord',
+        'name' => 'Kay',
+        'age' => 26,
+        'job' => 'Web Developer',
+      ])
+      ->execute();
+
     $connection->insert('test_people')
       ->fields([
         'name' => 'Meredith',
diff --git a/web/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php b/web/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php
index dbb9ab0e2fb98ad2fdb5d697c4ca1a73b78bee54..caf33ad1104ce2345c87db91bcb6bfb641ec39d0 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php
@@ -80,6 +80,27 @@ public function testQueryFetchClass() {
     $this->assertIdentical(count($records), 1, 'There is only one record.');
   }
 
+  /**
+   * Confirms that we can fetch a record into a new instance of a custom class.
+   * The name of the class is determined from a value of the first column.
+   *
+   * @see \Drupal\Tests\system\Functional\Database\FakeRecord
+   */
+  public function testQueryFetchClasstype() {
+    $records = [];
+    $result = $this->connection->query('SELECT classname, name, job FROM {test_classtype} WHERE age = :age', [':age' => 26], ['fetch' => \PDO::FETCH_CLASS | \PDO::FETCH_CLASSTYPE]);
+    foreach ($result as $record) {
+      $records[] = $record;
+      if ($this->assertTrue($record instanceof FakeRecord, 'Record is an object of class FakeRecord.')) {
+        $this->assertSame('Kay', $record->name, 'Kay is found.');
+        $this->assertSame('Web Developer', $record->job, 'A 26 year old Web Developer.');
+      }
+      $this->assertFalse(isset($record->classname), 'Classname field not found, as intended.');
+    }
+
+    $this->assertCount(1, $records, 'There is only one record.');
+  }
+
   /**
    * Confirms that we can fetch a record into an indexed array explicitly.
    */
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php
index 2690b09b78e3568cc4281a89dd711409c0f1c548..8907b23f32b828165cee9e49d927960673607826 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDefinitionUpdateTest.php
@@ -14,6 +14,8 @@
 use Drupal\Core\Field\FieldException;
 use Drupal\Core\Field\FieldStorageDefinitionEvents;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\entity_test\FieldStorageDefinition;
 use Drupal\entity_test_update\Entity\EntityTestUpdate;
 use Drupal\Tests\system\Functional\Entity\Traits\EntityDefinitionTestTrait;
 
@@ -35,6 +37,13 @@ class EntityDefinitionUpdateTest extends EntityKernelTestBase {
    */
   protected $entityDefinitionUpdateManager;
 
+  /**
+   * The entity field manager.
+   *
+   * @var \Drupal\Core\Entity\EntityFieldManagerInterface
+   */
+  protected $entityFieldManager;
+
   /**
    * The database connection.
    *
@@ -55,6 +64,7 @@ class EntityDefinitionUpdateTest extends EntityKernelTestBase {
   protected function setUp() {
     parent::setUp();
     $this->entityDefinitionUpdateManager = $this->container->get('entity.definition_update_manager');
+    $this->entityFieldManager = $this->container->get('entity_field.manager');
     $this->database = $this->container->get('database');
 
     // Install every entity type's schema that wasn't installed in the parent
@@ -833,30 +843,74 @@ public function testDefinitionEvents() {
     /** @var \Drupal\entity_test\EntityTestDefinitionSubscriber $event_subscriber */
     $event_subscriber = $this->container->get('entity_test.definition.subscriber');
     $event_subscriber->enableEventTracking();
+    $event_subscriber->enableLiveDefinitionUpdates();
 
     // Test field storage definition events.
-    $storage_definition = current(\Drupal::service('entity_field.manager')->getFieldStorageDefinitions('entity_test_rev'));
-    $this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::DELETE), 'Entity type delete was not dispatched yet.');
-    \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionDelete($storage_definition);
-    $this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::DELETE), 'Entity type delete event successfully dispatched.');
+    $storage_definition = FieldStorageDefinition::create('string')
+      ->setName('field_storage_test')
+      ->setLabel(new TranslatableMarkup('Field storage test'))
+      ->setTargetEntityTypeId('entity_test_rev');
+
     $this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::CREATE), 'Entity type create was not dispatched yet.');
     \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionCreate($storage_definition);
     $this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::CREATE), 'Entity type create event successfully dispatched.');
+    $this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(FieldStorageDefinitionEvents::CREATE), 'Last installed field storage definition was created before the event was fired.');
+
+    // Check that the newly added field can be retrieved from the live field
+    // storage definitions.
+    $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions('entity_test_rev');
+    $this->assertArrayHasKey('field_storage_test', $field_storage_definitions);
+
+    $updated_storage_definition = clone $storage_definition;
+    $updated_storage_definition->setLabel(new TranslatableMarkup('Updated field storage test'));
     $this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::UPDATE), 'Entity type update was not dispatched yet.');
-    \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionUpdate($storage_definition, $storage_definition);
+    \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionUpdate($updated_storage_definition, $storage_definition);
     $this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::UPDATE), 'Entity type update event successfully dispatched.');
+    $this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(FieldStorageDefinitionEvents::UPDATE), 'Last installed field storage definition was updated before the event was fired.');
+
+    // Check that the updated field can be retrieved from the live field storage
+    // definitions.
+    $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions('entity_test_rev');
+    $this->assertEquals(new TranslatableMarkup('Updated field storage test'), $field_storage_definitions['field_storage_test']->getLabel());
+
+    $this->assertFalse($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::DELETE), 'Entity type delete was not dispatched yet.');
+    \Drupal::service('field_storage_definition.listener')->onFieldStorageDefinitionDelete($storage_definition);
+    $this->assertTrue($event_subscriber->hasEventFired(FieldStorageDefinitionEvents::DELETE), 'Entity type delete event successfully dispatched.');
+    $this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(FieldStorageDefinitionEvents::DELETE), 'Last installed field storage definition was deleted before the event was fired.');
+
+    // Check that the deleted field can no longer be retrieved from the live
+    // field storage definitions.
+    $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions('entity_test_rev');
+    $this->assertArrayNotHasKey('field_storage_test', $field_storage_definitions);
 
     // Test entity type events.
     $entity_type = $this->entityTypeManager->getDefinition('entity_test_rev');
+
     $this->assertFalse($event_subscriber->hasEventFired(EntityTypeEvents::CREATE), 'Entity type create was not dispatched yet.');
     \Drupal::service('entity_type.listener')->onEntityTypeCreate($entity_type);
     $this->assertTrue($event_subscriber->hasEventFired(EntityTypeEvents::CREATE), 'Entity type create event successfully dispatched.');
+    $this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(EntityTypeEvents::CREATE), 'Last installed entity type definition was created before the event was fired.');
+
+    $updated_entity_type = clone $entity_type;
+    $updated_entity_type->set('label', new TranslatableMarkup('Updated entity test rev'));
     $this->assertFalse($event_subscriber->hasEventFired(EntityTypeEvents::UPDATE), 'Entity type update was not dispatched yet.');
-    \Drupal::service('entity_type.listener')->onEntityTypeUpdate($entity_type, $entity_type);
+    \Drupal::service('entity_type.listener')->onEntityTypeUpdate($updated_entity_type, $entity_type);
     $this->assertTrue($event_subscriber->hasEventFired(EntityTypeEvents::UPDATE), 'Entity type update event successfully dispatched.');
+    $this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(EntityTypeEvents::UPDATE), 'Last installed entity type definition was updated before the event was fired.');
+
+    // Check that the updated definition can be retrieved from the live entity
+    // type definitions.
+    $entity_type = $this->entityTypeManager->getDefinition('entity_test_rev');
+    $this->assertEquals(new TranslatableMarkup('Updated entity test rev'), $entity_type->getLabel());
+
     $this->assertFalse($event_subscriber->hasEventFired(EntityTypeEvents::DELETE), 'Entity type delete was not dispatched yet.');
     \Drupal::service('entity_type.listener')->onEntityTypeDelete($entity_type);
     $this->assertTrue($event_subscriber->hasEventFired(EntityTypeEvents::DELETE), 'Entity type delete event successfully dispatched.');
+    $this->assertTrue($event_subscriber->hasDefinitionBeenUpdated(EntityTypeEvents::DELETE), 'Last installed entity type definition was deleted before the event was fired.');
+
+    // Check that the deleted entity type can no longer be retrieved from the
+    // live entity type definitions.
+    $this->assertNull($this->entityTypeManager->getDefinition('entity_test_rev', FALSE));
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDeriverTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDeriverTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5de1a0e9f2fcbb2a9ab6d20775ae0d6a0ef3834d
--- /dev/null
+++ b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityDeriverTest.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Entity;
+
+use Drupal\comment\Entity\CommentType;
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\node\Entity\NodeType;
+
+/**
+ * Tests EntityDeriver functionality.
+ *
+ * @coversDefaultClass \Drupal\Core\Entity\Plugin\DataType\Deriver\EntityDeriver
+ *
+ * @group Entity
+ */
+class EntityDeriverTest extends KernelTestBase {
+
+  /**
+   * The typed data manager to use.
+   *
+   * @var \Drupal\Core\TypedData\TypedDataManagerInterface
+   */
+  protected $typedDataManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'system',
+    'field',
+    'user',
+    'node',
+    'comment',
+    'entity_test',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setup();
+
+    $this->installEntitySchema('comment');
+    NodeType::create(['type' => 'article', 'name' => 'Article'])->save();
+    CommentType::create([
+      'id' => 'comment',
+      'name' => 'Default comment',
+      'target_entity_type_id' => 'node',
+    ])->save();
+    entity_test_create_bundle('foo', NULL, 'entity_test_no_bundle');
+    entity_test_create_bundle('entity_test_no_bundle', NULL, 'entity_test_no_bundle');
+    $this->typedDataManager = $this->container->get('typed_data_manager');
+  }
+
+  /**
+   * Tests that types are derived for entity types with and without bundles.
+   *
+   * @dataProvider derivativesProvider
+   */
+  public function testDerivatives($data_type, $expect_exception) {
+    if ($expect_exception) {
+      $this->setExpectedException(PluginNotFoundException::class);
+    }
+    $this->typedDataManager->createDataDefinition($data_type);
+  }
+
+  /**
+   * Provides test data for ::testDerivatives().
+   */
+  public function derivativesProvider() {
+    return [
+      'unbundleable entity type with no bundle type' => ['entity:user', FALSE],
+      'unbundleable entity type with bundle type' => ['entity:user:user', TRUE],
+      'bundleable entity type with no bundle type' => ['entity:node', FALSE],
+      'bundleable entity type with bundle type' => [
+        'entity:node:article',
+        FALSE,
+      ],
+      'bundleable entity type with bundle type with matching name' => [
+        'entity:comment:comment',
+        FALSE,
+      ],
+      'unbundleable entity type with entity_test_entity_bundle_info()-generated bundle type' => [
+        'entity:entity_test_no_bundle:foo',
+        FALSE,
+      ],
+      'unbundleable entity type with entity_test_entity_bundle_info()-generated bundle type with matching name' => [
+        'entity:entity_test_no_bundle:entity_test_no_bundle',
+        FALSE,
+      ],
+    ];
+  }
+
+}
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php
index d0c01bccb5d8727121da0d42885539df5c443a3d..1b5677a4d3ec92e46cac33edea5802aff39d91b0 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Entity/EntityTypedDataDefinitionTest.php
@@ -151,6 +151,7 @@ public function testEntityDefinitionIsInternal($internal, $expected) {
 
     $entity_type = $this->prophesize(EntityTypeInterface::class);
     $entity_type->entityClassImplements(ConfigEntityInterface::class)->willReturn(FALSE);
+    $entity_type->getKey('bundle')->willReturn(FALSE);
     $entity_type->getLabel()->willReturn($this->randomString());
     $entity_type->getConstraints()->willReturn([]);
     $entity_type->isInternal()->willReturn($internal);
diff --git a/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php b/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php
index d9a50feb65b009e1faeb5ea61280a84baa1075e7..4c79af8de6f972a32caebdcc85ccbfa5ba3eb0a6 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php
@@ -150,13 +150,17 @@ public function testFieldableEntityTypeUpdates($initial_rev, $initial_mul, $new_
       $this->assertEntityData($initial_rev, $initial_mul);
     }
 
+    // Enable the creation of a new base field during a fieldable entity type
+    // update.
+    $this->state->set('entity_test_update.install_new_base_field_during_update', TRUE);
+
     // Simulate a batch run since we are converting the entities one by one.
     $sandbox = [];
     do {
       $this->entityDefinitionUpdateManager->updateFieldableEntityType($updated_entity_type, $updated_field_storage_definitions, $sandbox);
     } while ($sandbox['#finished'] != 1);
 
-    $this->assertEntityTypeSchema($new_rev, $new_mul);
+    $this->assertEntityTypeSchema($new_rev, $new_mul, TRUE);
     $this->assertEntityData($initial_rev, $initial_mul);
 
     $change_list = $this->entityDefinitionUpdateManager->getChangeList();
@@ -426,8 +430,20 @@ protected function assertEntityData($revisionable, $translatable) {
    *   Whether the entity type is revisionable or not.
    * @param bool $translatable
    *   Whether the entity type is translatable or not.
+   * @param bool $new_base_field
+   *   (optional) Whether a new base field was added as part of the update.
+   *   Defaults to FALSE.
    */
-  protected function assertEntityTypeSchema($revisionable, $translatable) {
+  protected function assertEntityTypeSchema($revisionable, $translatable, $new_base_field = FALSE) {
+    // 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) {
+      $this->assertNotNull($field_storage_definition);
+    }
+    else {
+      $this->assertNull($field_storage_definition);
+    }
+
     if ($revisionable && $translatable) {
       $this->assertRevisionableAndTranslatable();
     }
diff --git a/web/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php b/web/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php
index 7ffe65c9fc33392bf7b6420f5596cc2b0f78346f..5e7bbc002a2ca380391a81363de6c59c42630c34 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Extension/ModuleInstallerTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\KernelTests\Core\Extension;
 
 use Drupal\Core\Database\Database;
+use Drupal\Core\Extension\MissingDependencyException;
 use Drupal\KernelTests\KernelTestBase;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
 
@@ -94,4 +95,58 @@ public function testKernelRebuildDuringHookInstall() {
     $this->assertTrue($module_installer->install(['module_test']));
   }
 
+  /**
+   * Tests install with a module with an invalid core version constraint.
+   *
+   * @dataProvider providerTestInvalidCoreInstall
+   * @covers ::install
+   */
+  public function testInvalidCoreInstall($module_name, $install_dependencies) {
+    $this->setExpectedException(MissingDependencyException::class, "Unable to install modules: module '$module_name' is incompatible with this version of Drupal core.");
+    $this->container->get('module_installer')->install([$module_name], $install_dependencies);
+  }
+
+  /**
+   * Dataprovider for testInvalidCoreInstall().
+   */
+  public function providerTestInvalidCoreInstall() {
+    return [
+      'no dependencies system_incompatible_core_version_test_1x' => [
+        'system_incompatible_core_version_test_1x',
+        FALSE,
+      ],
+      'install_dependencies system_incompatible_core_version_test_1x' => [
+        'system_incompatible_core_version_test_1x',
+        TRUE,
+      ],
+      'no dependencies system_core_incompatible_semver_test' => [
+        'system_core_incompatible_semver_test',
+        FALSE,
+      ],
+      'install_dependencies system_core_incompatible_semver_test' => [
+        'system_core_incompatible_semver_test',
+        TRUE,
+      ],
+    ];
+  }
+
+  /**
+   * Tests install with a dependency with an invalid core version constraint.
+   *
+   * @covers ::install
+   */
+  public function testDependencyInvalidCoreInstall() {
+    $this->setExpectedException(MissingDependencyException::class, "Unable to install modules: module 'system_incompatible_core_version_dependencies_test'. Its dependency module 'system_incompatible_core_version_test' is incompatible with this version of Drupal core.");
+    $this->container->get('module_installer')->install(['system_incompatible_core_version_dependencies_test']);
+  }
+
+  /**
+   * Tests no dependencies install with a dependency with invalid core.
+   *
+   * @covers ::install
+   */
+  public function testDependencyInvalidCoreInstallNoDependencies() {
+    $this->assertTrue($this->container->get('module_installer')->install(['system_incompatible_core_version_dependencies_test'], FALSE));
+  }
+
 }
diff --git a/web/core/tests/Drupal/KernelTests/Core/TypedData/RecursiveContextualValidatorTest.php b/web/core/tests/Drupal/KernelTests/Core/TypedData/RecursiveContextualValidatorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f60b399073808298eae04df2d27be20e8cbc4315
--- /dev/null
+++ b/web/core/tests/Drupal/KernelTests/Core/TypedData/RecursiveContextualValidatorTest.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace Drupal\KernelTests\Core\TypedData;
+
+use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
+use Drupal\entity_test\Entity\EntityTest;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @coversDefaultClass \Drupal\Core\TypedData\Validation\RecursiveContextualValidator
+ * @group Validation
+ */
+class RecursiveContextualValidatorTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'entity_test',
+    'user',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('user');
+    $this->installEntitySchema('entity_test');
+  }
+
+  /**
+   * Tests recursive validation against given constraints against an entity.
+   */
+  public function testRecursiveValidate() {
+    $entity = EntityTest::create();
+    $adapter = EntityAdapter::createFromEntity($entity);
+    // This would trigger the ValidReferenceConstraint due to EntityTest
+    // defaulting uid to 1, which doesn't exist. Ensure that we don't get a
+    // violation for that.
+    $this->assertCount(0, \Drupal::typedDataManager()->getValidator()->validate($adapter, $adapter->getConstraints()));
+  }
+
+}
diff --git a/web/core/tests/Drupal/Nightwatch/Commands/drupalCreateUser.js b/web/core/tests/Drupal/Nightwatch/Commands/drupalCreateUser.js
index 0b81be3366b94df3a6b5ecaa20d0a0c596b6ccb2..1c907f912b64ce7d945b3bbaab295078604fc8a0 100644
--- a/web/core/tests/Drupal/Nightwatch/Commands/drupalCreateUser.js
+++ b/web/core/tests/Drupal/Nightwatch/Commands/drupalCreateUser.js
@@ -10,7 +10,7 @@
  * @param {array} [settings.permissions=[]]
  *   The list of permissions granted for the user.
  * @param {function} callback
- *   A callback which will be called, when the creating the use is finished.
+ *   A callback which will be called when creating the user is finished.
  * @return {object}
  *   The drupalCreateUser command.
  */
@@ -48,7 +48,7 @@ exports.command = function drupalCreateUser(
       .assert.containsText(
         '.messages',
         'Created a new user account',
-        `User "${name}" was created succesfully.`,
+        `User "${name}" was created successfully.`,
       );
   });
 
diff --git a/web/core/tests/Drupal/Nightwatch/Commands/drupalInstall.js b/web/core/tests/Drupal/Nightwatch/Commands/drupalInstall.js
index c5a4b4655195649fffb66de7bbda91b1a61c49ae..afc600a589fb7a5beb13b34810e3a8335ff8a3be 100644
--- a/web/core/tests/Drupal/Nightwatch/Commands/drupalInstall.js
+++ b/web/core/tests/Drupal/Nightwatch/Commands/drupalInstall.js
@@ -25,14 +25,12 @@ exports.command = function drupalInstall({ setupFile = '' } = {}, callback) {
         : '';
     const install = execSync(
       commandAsWebserver(
-        `php ./scripts/test-site.php install ${setupFile} --base-url ${
-          process.env.DRUPAL_TEST_BASE_URL
-        } ${dbOption} --json`,
+        `php ./scripts/test-site.php install ${setupFile} --base-url ${process.env.DRUPAL_TEST_BASE_URL} ${dbOption} --json`,
       ),
     );
     const installData = JSON.parse(install.toString());
-    this.drupalDbPrefix = installData.db_prefix;
-    this.drupalSitePath = installData.site_path;
+    this.globals.drupalDbPrefix = installData.db_prefix;
+    this.globals.drupalSitePath = installData.site_path;
     const url = new URL(process.env.DRUPAL_TEST_BASE_URL);
     this.url(process.env.DRUPAL_TEST_BASE_URL).setCookie({
       name: 'SIMPLETEST_USER_AGENT',
diff --git a/web/core/tests/Drupal/Nightwatch/Commands/drupalLoginAsAdmin.js b/web/core/tests/Drupal/Nightwatch/Commands/drupalLoginAsAdmin.js
index 864b904bcfea82945de85d8705c32715a3047f1c..6295f1bacc45d6ac3b7674c4119a85bb8a163bed 100644
--- a/web/core/tests/Drupal/Nightwatch/Commands/drupalLoginAsAdmin.js
+++ b/web/core/tests/Drupal/Nightwatch/Commands/drupalLoginAsAdmin.js
@@ -18,9 +18,7 @@ exports.command = function drupalLoginAsAdmin(callback) {
     }
     const userLink = execSync(
       commandAsWebserver(
-        `php ./scripts/test-site.php user-login 1 --site-path ${
-          this.drupalSitePath
-        }`,
+        `php ./scripts/test-site.php user-login 1 --site-path ${this.globals.drupalSitePath}`,
       ),
     );
 
diff --git a/web/core/tests/Drupal/Nightwatch/Commands/drupalUninstall.js b/web/core/tests/Drupal/Nightwatch/Commands/drupalUninstall.js
index 6766cdcb1efe1cebe60fad51d293a24b19a1b9fa..2a48ae94df3d1ecc87954a87cbef64aef7f59dc1 100644
--- a/web/core/tests/Drupal/Nightwatch/Commands/drupalUninstall.js
+++ b/web/core/tests/Drupal/Nightwatch/Commands/drupalUninstall.js
@@ -11,7 +11,7 @@ import { commandAsWebserver } from '../globals';
  */
 exports.command = function drupalUninstal(callback) {
   const self = this;
-  const prefix = self.drupalDbPrefix;
+  const prefix = this.globals.drupalDbPrefix;
 
   // Check for any existing errors, because running this will cause Nightwatch to hang.
   if (!this.currentTest.results.errors && !this.currentTest.results.failed) {
diff --git a/web/core/tests/Drupal/Nightwatch/Commands/drupalUserIsLoggedIn.js b/web/core/tests/Drupal/Nightwatch/Commands/drupalUserIsLoggedIn.js
index 47ca4f7aa3011098d4798821a4a6cc67d423b6b1..e0cde167a5b3c09e457d005f41bd5c6f66a157e0 100644
--- a/web/core/tests/Drupal/Nightwatch/Commands/drupalUserIsLoggedIn.js
+++ b/web/core/tests/Drupal/Nightwatch/Commands/drupalUserIsLoggedIn.js
@@ -10,7 +10,7 @@ exports.command = function drupalUserIsLoggedIn(callback) {
   if (typeof callback === 'function') {
     this.getCookies(cookies => {
       const sessionExists = cookies.value.some(cookie =>
-        cookie.name.match(/^SESS/),
+        cookie.name.match(/^S?SESS/),
       );
 
       callback.call(this, sessionExists);
diff --git a/web/core/tests/Drupal/Nightwatch/globals.js b/web/core/tests/Drupal/Nightwatch/globals.js
index ffa83502eedbec396d7debd297c84c721a08a319..411b0381a315e3726e93767d89b9b03d341de4ba 100644
--- a/web/core/tests/Drupal/Nightwatch/globals.js
+++ b/web/core/tests/Drupal/Nightwatch/globals.js
@@ -5,13 +5,16 @@ import mkdirp from 'mkdirp';
 import chromedriver from 'chromedriver';
 import nightwatchSettings from './nightwatch.conf';
 
-const commandAsWebserver = command => {
+export const commandAsWebserver = command => {
   if (process.env.DRUPAL_TEST_WEBSERVER_USER) {
     return `sudo -u ${process.env.DRUPAL_TEST_WEBSERVER_USER} ${command}`;
   }
   return command;
 };
 
+export const drupalDbPrefix = null;
+export const drupalSitePath = null;
+
 module.exports = {
   before: done => {
     if (JSON.parse(process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART)) {
@@ -35,9 +38,7 @@ module.exports = {
     ) {
       const resultPath = path.join(
         __dirname,
-        `../../../${nightwatchSettings.output_folder}/consoleLogs/${
-          browser.currentTest.module
-        }`,
+        `../../../${nightwatchSettings.output_folder}/consoleLogs/${browser.currentTest.module}`,
       );
       const status =
         browser.currentTest.results.errors > 0 ||
diff --git a/web/core/tests/Drupal/Nightwatch/nightwatch.conf.js b/web/core/tests/Drupal/Nightwatch/nightwatch.conf.js
index 7f4cb83529b8ef86640294b0b9c246b9562d1a44..27c3b49bdf60f399fef9314429a3ed72539654fa 100644
--- a/web/core/tests/Drupal/Nightwatch/nightwatch.conf.js
+++ b/web/core/tests/Drupal/Nightwatch/nightwatch.conf.js
@@ -47,7 +47,7 @@ module.exports = {
   custom_commands_path: collectedFolders.Commands,
   custom_assertions_path: collectedFolders.Assertions,
   page_objects_path: collectedFolders.Pages,
-  globals_path: 'tests/Drupal/Nightwatch/globals.js',
+  globals_path: 'globals.js',
   selenium: {
     start_process: false,
   },
@@ -60,6 +60,31 @@ module.exports = {
         browserName: 'chrome',
         acceptSslCerts: true,
         chromeOptions: {
+          w3c: false,
+          args: process.env.DRUPAL_TEST_WEBDRIVER_CHROME_ARGS
+            ? process.env.DRUPAL_TEST_WEBDRIVER_CHROME_ARGS.split(' ')
+            : [],
+        },
+      },
+      screenshots: {
+        enabled: true,
+        on_failure: true,
+        on_error: true,
+        path: `${process.env.DRUPAL_NIGHTWATCH_OUTPUT}/screenshots`,
+      },
+      end_session_on_fail: false,
+    },
+    local: {
+      webdriver: {
+        start_process: process.env.DRUPAL_TEST_CHROMEDRIVER_AUTOSTART,
+        port: process.env.DRUPAL_TEST_WEBDRIVER_PORT,
+        server_path: 'node_modules/.bin/chromedriver',
+      },
+      desiredCapabilities: {
+        browserName: 'chrome',
+        acceptSslCerts: true,
+        chromeOptions: {
+          w3c: false,
           args: process.env.DRUPAL_TEST_WEBDRIVER_CHROME_ARGS
             ? process.env.DRUPAL_TEST_WEBDRIVER_CHROME_ARGS.split(' ')
             : [],
diff --git a/web/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php b/web/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
index 796a916db9b607ce586340d2c198e44f91e64d23..a636e3658353a81b955b2dd028be71a85526e596 100644
--- a/web/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\Core\Extension;
 
 use Drupal\Core\Extension\InfoParser;
+use Drupal\Core\Extension\InfoParserException;
 use Drupal\Tests\UnitTestCase;
 use org\bovigo\vfs\vfsStream;
 
@@ -96,10 +97,207 @@ public function testInfoParserMissingKeys() {
       ],
     ]);
     $filename = vfsStream::url('modules/fixtures/missing_keys.info.txt');
-    $this->setExpectedException('\Drupal\Core\Extension\InfoParserException', 'Missing required keys (type, core, name) in vfs://modules/fixtures/missing_keys.info.txt');
+    $this->setExpectedException(InfoParserException::class, 'Missing required keys (type, name) in vfs://modules/fixtures/missing_keys.info.txt');
     $this->infoParser->parse($filename);
   }
 
+  /**
+   * Tests that missing 'core' and 'core_version_requirement' keys are detected.
+   *
+   * @covers ::parse
+   */
+  public function testMissingCoreCoreVersionRequirement() {
+    $missing_core_and_core_version_requirement = <<<MISSING_CORE_AND_CORE_VERSION_REQUIREMENT
+# info.yml for testing core and core_version_requirement.
+package: Core
+version: VERSION
+type: module
+name: Skynet
+dependencies:
+  - self_awareness
+MISSING_CORE_AND_CORE_VERSION_REQUIREMENT;
+
+    vfsStream::setup('modules');
+    vfsStream::create([
+      'fixtures' => [
+        'missing_core_and_core_version_requirement.info.txt' => $missing_core_and_core_version_requirement,
+        'missing_core_and_core_version_requirement-duplicate.info.txt' => $missing_core_and_core_version_requirement,
+      ],
+    ]);
+    $exception_message = "The 'core' or the 'core_version_requirement' key must be present in vfs://modules/fixtures/missing_core_and_core_version_requirement";
+    // Set the expected exception for the 2nd call to parse().
+    $this->setExpectedException(InfoParserException::class, "$exception_message-duplicate.info.txt");
+
+    try {
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/missing_core_and_core_version_requirement.info.txt'));
+    }
+    catch (InfoParserException $exception) {
+      $this->assertSame("$exception_message.info.txt", $exception->getMessage());
+
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/missing_core_and_core_version_requirement-duplicate.info.txt'));
+    }
+  }
+
+  /**
+   * Tests that 'core_version_requirement: ^8.8' is valid with no 'core' key.
+   *
+   * @covers ::parse
+   */
+  public function testCoreVersionRequirement88() {
+    $core_version_requirement = <<<BOTH_CORE_VERSION_REQUIREMENT
+# info.yml for testing core and core_version_requirement keys.
+package: Core
+core_version_requirement: ^8.8
+version: VERSION
+type: module
+name: Module for That
+dependencies:
+  - field
+BOTH_CORE_VERSION_REQUIREMENT;
+
+    vfsStream::setup('modules');
+    foreach (['1', '2'] as $file_delta) {
+      $filename = "core_version_requirement-$file_delta.info.txt";
+      vfsStream::create([
+        'fixtures' => [
+          $filename => $core_version_requirement,
+        ],
+      ]);
+      $info_values = $this->infoParser->parse(vfsStream::url("modules/fixtures/$filename"));
+      $this->assertSame($info_values['core_version_requirement'], '^8.8', "Expected core_version_requirement for file: $filename");
+    }
+  }
+
+  /**
+   * Tests that 'core_version_requirement: ^8.8' is invalid with a 'core' key.
+   *
+   * @covers ::parse
+   */
+  public function testCoreCoreVersionRequirement88() {
+    $core_and_core_version_requirement_88 = <<<BOTH_CORE_CORE_VERSION_REQUIREMENT_88
+# info.yml for testing core and core_version_requirement keys.
+package: Core
+core: 8.x
+core_version_requirement: ^8.8
+version: VERSION
+type: module
+name: Form auto submitter
+dependencies:
+  - field
+BOTH_CORE_CORE_VERSION_REQUIREMENT_88;
+
+    vfsStream::setup('modules');
+    vfsStream::create([
+      'fixtures' => [
+        'core_and_core_version_requirement_88.info.txt' => $core_and_core_version_requirement_88,
+        'core_and_core_version_requirement_88-duplicate.info.txt' => $core_and_core_version_requirement_88,
+      ],
+    ]);
+    $exception_message = "The 'core_version_requirement' constraint (^8.8) requires the 'core' key not be set in vfs://modules/fixtures/core_and_core_version_requirement_88";
+    // Set the expected exception for the 2nd call to parse().
+    $this->setExpectedException(InfoParserException::class, "$exception_message-duplicate.info.txt");
+    try {
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/core_and_core_version_requirement_88.info.txt'));
+    }
+    catch (InfoParserException $exception) {
+      $this->assertSame("$exception_message.info.txt", $exception->getMessage());
+
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/core_and_core_version_requirement_88-duplicate.info.txt'));
+    }
+  }
+
+  /**
+   * Tests a invalid 'core' key.
+   *
+   * @covers ::parse
+   */
+  public function testInvalidCore() {
+    $invalid_core = <<<INVALID_CORE
+# info.yml for testing invalid core key.
+package: Core
+core: ^8
+version: VERSION
+type: module
+name: Llama or Alpaca
+description: Tells whether an image is of a Llama or Alpaca
+dependencies:
+  - llama_detector
+  - alpaca_detector
+INVALID_CORE;
+
+    vfsStream::setup('modules');
+    vfsStream::create([
+      'fixtures' => [
+        'invalid_core.info.txt' => $invalid_core,
+        'invalid_core-duplicate.info.txt' => $invalid_core,
+      ],
+    ]);
+    $exception_message = "Invalid 'core' value \"^8\" in vfs://modules/fixtures/invalid_core";
+    // Set the expected exception for the 2nd call to parse().
+    $this->setExpectedException(InfoParserException::class, "$exception_message-duplicate.info.txt");
+
+    try {
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/invalid_core.info.txt'));
+    }
+    catch (InfoParserException $exception) {
+      $this->assertSame("$exception_message.info.txt", $exception->getMessage());
+
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/invalid_core-duplicate.info.txt'));
+    }
+  }
+
+  /**
+   * Tests a invalid 'core_version_requirement'.
+   *
+   * @covers ::parse
+   *
+   * @dataProvider providerCoreVersionRequirementInvalid
+   */
+  public function testCoreVersionRequirementInvalid($test_case, $constraint) {
+    $invalid_core_version_requirement = <<<INVALID_CORE_VERSION_REQUIREMENT
+# info.yml for core_version_requirement validation.
+name: Gracie Evaluator
+description: 'Determines if Gracie is a "Good Dog". The answer is always "Yes".'
+package: Core
+type: module
+version: VERSION
+core_version_requirement: '$constraint'
+dependencies:
+  - goodness_api
+INVALID_CORE_VERSION_REQUIREMENT;
+
+    vfsStream::setup('modules');
+    vfsStream::create([
+      'fixtures' => [
+        "invalid_core_version_requirement-$test_case.info.txt" => $invalid_core_version_requirement,
+        "invalid_core_version_requirement-$test_case-duplicate.info.txt" => $invalid_core_version_requirement,
+      ],
+    ]);
+    $exception_message = "The 'core_version_requirement' can not be used to specify compatibility for a specific version before 8.7.7 in vfs://modules/fixtures/invalid_core_version_requirement-$test_case";
+    // Set the expected exception for the 2nd call to parse().
+    $this->setExpectedException(InfoParserException::class, "$exception_message-duplicate.info.txt");
+    try {
+      $this->infoParser->parse(vfsStream::url("modules/fixtures/invalid_core_version_requirement-$test_case.info.txt"));
+    }
+    catch (InfoParserException $exception) {
+      $this->assertSame("$exception_message.info.txt", $exception->getMessage());
+
+      $this->infoParser->parse(vfsStream::url("modules/fixtures/invalid_core_version_requirement-$test_case-duplicate.info.txt"));
+    }
+  }
+
+  /**
+   * Dataprovider for testCoreVersionRequirementInvalid().
+   */
+  public function providerCoreVersionRequirementInvalid() {
+    return [
+      '8.0.0-alpha2' => ['alpha2', '8.0.0-alpha2'],
+      '8.6.0-rc1' => ['rc1', '8.6.0-rc1'],
+      '^8.7' => ['8_7', '^8.7'],
+      '>8.6.3' => ['gt8_6_3', '>8.6.3'],
+    ];
+  }
+
   /**
    * Tests that missing required key is detected.
    *
@@ -121,11 +319,19 @@ public function testInfoParserMissingKey() {
     vfsStream::create([
       'fixtures' => [
         'missing_key.info.txt' => $missing_key,
+        'missing_key-duplicate.info.txt' => $missing_key,
       ],
     ]);
-    $filename = vfsStream::url('modules/fixtures/missing_key.info.txt');
-    $this->setExpectedException('\Drupal\Core\Extension\InfoParserException', 'Missing required keys (type) in vfs://modules/fixtures/missing_key.info.txt');
-    $this->infoParser->parse($filename);
+    try {
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/missing_key.info.txt'));
+    }
+    catch (InfoParserException $exception) {
+      $this->assertSame('Missing required keys (type) in vfs://modules/fixtures/missing_key.info.txt', $exception->getMessage());
+
+      $this->setExpectedException(InfoParserException::class, 'Missing required keys (type) in vfs://modules/fixtures/missing_key-duplicate.info.txt');
+      $this->infoParser->parse(vfsStream::url('modules/fixtures/missing_key-duplicate.info.txt'));
+    }
+
   }
 
   /**
@@ -144,16 +350,127 @@ public function testInfoParserCommonInfo() {
 double_colon: dummyClassName::method
 COMMONTEST;
 
+    vfsStream::setup('modules');
+
+    foreach (['1', '2'] as $file_delta) {
+      $filename = "common_test-$file_delta.info.txt";
+      vfsStream::create([
+        'fixtures' => [
+          $filename => $common,
+        ],
+      ]);
+      $info_values = $this->infoParser->parse(vfsStream::url("modules/fixtures/$filename"));
+      $this->assertEquals($info_values['simple_string'], 'A simple string', 'Simple string value was parsed correctly.');
+      $this->assertEquals($info_values['version'], \Drupal::VERSION, 'Constant value was parsed correctly.');
+      $this->assertEquals($info_values['double_colon'], 'dummyClassName::method', 'Value containing double-colon was parsed correctly.');
+      $this->assertSame('8.x', $info_values['core']);
+      $this->assertFalse(isset($info_values['core_version_requirement']));
+      $this->assertFalse($info_values['core_incompatible']);
+    }
+  }
+
+  /**
+   * @covers ::parse
+   *
+   * @dataProvider providerCoreIncompatibility
+   */
+  public function testCoreIncompatibility($test_case, $constraint, $expected) {
+    $core_incompatibility = <<<CORE_INCOMPATIBILITY
+core_version_requirement: $constraint
+name: common_test
+type: module
+description: 'testing info file parsing'
+simple_string: 'A simple string'
+version: "VERSION"
+double_colon: dummyClassName::method
+CORE_INCOMPATIBILITY;
+
+    vfsStream::setup('modules');
+    foreach (['1', '2'] as $file_delta) {
+      $filename = "core_incompatible-$test_case-$file_delta.info.txt";
+      vfsStream::create([
+        'fixtures' => [
+          $filename => $core_incompatibility,
+        ],
+      ]);
+      $info_values = $this->infoParser->parse(vfsStream::url("modules/fixtures/$filename"));
+      $this->assertSame($expected, $info_values['core_incompatible'], "core_incompatible correct in file: $filename");
+    }
+  }
+
+  /**
+   * Dataprovider for testCoreIncompatibility().
+   */
+  public function providerCoreIncompatibility() {
+    list($major, $minor) = explode('.', \Drupal::VERSION);
+
+    $next_minor = $minor + 1;
+    $next_major = $major + 1;
+    return [
+      'next_minor' => [
+        'next_minor',
+        "^$major.$next_minor",
+        TRUE,
+      ],
+      'current_major_next_major' => [
+        'current_major_next_major',
+        "^$major || ^$next_major",
+        FALSE,
+      ],
+      'previous_major_next_major' => [
+        'previous_major_next_major',
+        "^1 || ^$next_major",
+        TRUE,
+      ],
+    ];
+  }
+
+  /**
+   * Test a profile info file with the 'core_version_requirement' key.
+   */
+  public function testInvalidProfile() {
+    $profile = <<<PROFILE_TEST
+core: 8.x
+core_version_requirement: ^8
+name: The Perfect Profile
+type: profile
+description: 'This profile makes Drupal perfect. You should have no complaints.'
+PROFILE_TEST;
+
+    vfsStream::setup('profiles');
+    vfsStream::create([
+      'fixtures' => [
+        'invalid_profile.info.txt' => $profile,
+      ],
+    ]);
+    $this->setExpectedException(InfoParserException::class, "The 'core_version_requirement' key is not supported in profiles in vfs://profiles/fixtures/invalid_profile.info.txt");
+    $this->infoParser->parse(vfsStream::url('profiles/fixtures/invalid_profile.info.txt'));
+  }
+
+  /**
+   * Tests the exception for an unparsable 'core_version_requirement' value.
+   *
+   * @covers ::parse
+   */
+  public function testUnparsableCoreVersionRequirement() {
+    $unparsable_core_version_requirement = <<<UNPARSABLE_CORE_VERSION_REQUIREMENT
+# info.yml for testing invalid core_version_requirement value.
+name: Not this module
+description: 'Not the module you are looking for.'
+package: Core
+type: module
+version: VERSION
+core_version_requirement: not-this-version
+UNPARSABLE_CORE_VERSION_REQUIREMENT;
+
     vfsStream::setup('modules');
     vfsStream::create([
       'fixtures' => [
-        'common_test.info.txt' => $common,
+        'unparsable_core_version_requirement.info.txt' => $unparsable_core_version_requirement,
       ],
     ]);
-    $info_values = $this->infoParser->parse(vfsStream::url('modules/fixtures/common_test.info.txt'));
-    $this->assertEquals($info_values['simple_string'], 'A simple string', 'Simple string value was parsed correctly.');
-    $this->assertEquals($info_values['version'], \Drupal::VERSION, 'Constant value was parsed correctly.');
-    $this->assertEquals($info_values['double_colon'], 'dummyClassName::method', 'Value containing double-colon was parsed correctly.');
+    $this->setExpectedException(\UnexpectedValueException::class, 'Could not parse version constraint not-this-version: Invalid version string "not-this-version"');
+    $this->infoParser->parse(vfsStream::url('modules/fixtures/unparsable_core_version_requirement.info.txt'));
   }
 
 }
diff --git a/web/core/tests/Drupal/Tests/Core/Test/RunTests/TestFileParserTest.php b/web/core/tests/Drupal/Tests/Core/Test/RunTests/TestFileParserTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ba0f83c489afc8f38b7a16f43382cce2b8041bc
--- /dev/null
+++ b/web/core/tests/Drupal/Tests/Core/Test/RunTests/TestFileParserTest.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Drupal\Tests\Core\Test\RunTests;
+
+use Drupal\Core\Test\RunTests\TestFileParser;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\Core\Test\RunTests\TestFileParser
+ * @group Test
+ * @group RunTests
+ */
+class TestFileParserTest extends UnitTestCase {
+
+  public function provideTestFileContents() {
+    return [
+      'empty' => [[], ''],
+      'no-namespace' => [['ConcreteClass'],
+       <<< 'NO_NAMESPACE'
+<?php
+
+class ConcreteClass {}
+NO_NAMESPACE
+      ],
+      'concrete' => [['Namespace\Is\Complex\ConcreteClass'],
+       <<< 'CONCRETE_CLASS'
+<?php
+
+namespace Namespace\Is\Complex;
+
+class ConcreteClass {}
+CONCRETE_CLASS
+      ],
+      'abstract' => [[],
+       <<< 'ABSTRACT_CLASS'
+<?php
+namespace Namespace\Is\Complex;
+
+abstract class AbstractClass {}
+ABSTRACT_CLASS
+      ],
+      'final' => [['Namespace\Is\Complex\FinalClass'],
+       <<< 'FINAL_CLASS'
+<?php
+namespace Namespace\Is\Complex;
+
+final class FinalClass {}
+FINAL_CLASS
+      ],
+      'compound_declarations' => [[
+        'Namespace\Is\Complex\FinalClass',
+        'Namespace\Is\Complex\AnotherClass',
+      ],
+       <<< 'COMPOUND'
+<?php
+namespace Namespace\Is\Complex;
+
+final class FinalClass {}
+
+class AnotherClass {}
+COMPOUND
+      ],
+    ];
+  }
+
+  /**
+   * @covers ::parseContents
+   * @dataProvider provideTestFileContents
+   */
+  public function testParseContents($expected, $contents) {
+    $parser = new TestFileParser();
+
+    $ref_parse = new \ReflectionMethod($parser, 'parseContents');
+    $ref_parse->setAccessible(TRUE);
+
+    $this->assertSame($expected, $ref_parse->invoke($parser, $contents));
+  }
+
+  /**
+   * @covers ::getTestListFromFile
+   */
+  public function testGetTestListFromFile() {
+    $parser = new TestFileParser();
+    $this->assertArrayEquals(
+      ['Drupal\Tests\Core\Test\RunTests\TestFileParserTest'],
+      $parser->getTestListFromFile(__FILE__)
+    );
+    // This WebTestBase test will eventually move, so we'll need to update it.
+    $this->assertArrayEquals(
+      ['Drupal\simpletest\Tests\TimeZoneTest'],
+      $parser->getTestListFromFile(__DIR__ . '/../../../../../../modules/simpletest/src/Tests/TimeZoneTest.php')
+    );
+    // Not a test.
+    $this->assertEmpty(
+      $parser->getTestListFromFile(__DIR__ . '/../../../AssertHelperTrait.php')
+    );
+  }
+
+}
diff --git a/web/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php b/web/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
index 9f60b3394d7e7ae547284863b20e3350fe691802..77ee37b26fabc908fd2dfe134d33d40a98fc33a4 100644
--- a/web/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
+++ b/web/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
@@ -144,6 +144,9 @@ public static function getSkippedDeprecations() {
       // higher
       'The "Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory" class is deprecated since symfony/psr-http-message-bridge 1.2, use PsrHttpFactory instead.',
       'The "psr7.http_message_factory" service relies on the deprecated "Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory" class. It should either be deprecated or its implementation upgraded.',
+      // This deprecation comes from behat/mink-browserkit-driver when updating
+      // symfony/browser-kit to 4.3+.
+      'The "Symfony\Component\BrowserKit\Response::getStatus()" method is deprecated since Symfony 4.3, use getStatusCode() instead.',
     ];
   }
 
diff --git a/web/core/tests/Drupal/Tests/WebAssert.php b/web/core/tests/Drupal/Tests/WebAssert.php
index 4f7a7d292c5e3dcb4c175dbaacf42b366e35bf3f..f37cc70db7aa0fac972c3ae81f7f7a03d35387c8 100644
--- a/web/core/tests/Drupal/Tests/WebAssert.php
+++ b/web/core/tests/Drupal/Tests/WebAssert.php
@@ -491,6 +491,35 @@ public function fieldDisabled($field, TraversableElement $container = NULL) {
     return $node;
   }
 
+  /**
+   * Checks that a given form field element is enabled.
+   *
+   * @param string $field
+   *   One of id|name|label|value for the field.
+   * @param \Behat\Mink\Element\TraversableElement $container
+   *   (optional) The document to check against. Defaults to the current page.
+   *
+   * @return \Behat\Mink\Element\NodeElement
+   *   The matching element.
+   *
+   * @throws \Behat\Mink\Exception\ElementNotFoundException
+   * @throws \Behat\Mink\Exception\ExpectationException
+   */
+  public function fieldEnabled($field, TraversableElement $container = NULL) {
+    $container = $container ?: $this->session->getPage();
+    $node = $container->findField($field);
+
+    if ($node === NULL) {
+      throw new ElementNotFoundException($this->session->getDriver(), 'field', 'id|name|label|value', $field);
+    }
+
+    if ($node->hasAttribute('disabled')) {
+      throw new ExpectationException("Field $field is not enabled", $this->session->getDriver());
+    }
+
+    return $node;
+  }
+
   /**
    * Checks that specific hidden field exists.
    *
diff --git a/web/core/tests/README.md b/web/core/tests/README.md
index 4682b065c173ded06d99222c3f22ffb5a0bbd47e..a6a50164fef3d83f367c107325be2d199f77664d 100644
--- a/web/core/tests/README.md
+++ b/web/core/tests/README.md
@@ -78,14 +78,17 @@ chromedriver using port 4444, and keep it running:
   `composer run-script drupal-phpunit-upgrade`
 * Install [Node.js](https://nodejs.org/en/download/) and
   [yarn](https://yarnpkg.com/en/docs/install). The versions required are
-  specificed inside core/package.json in the `engines` field
+  specified inside core/package.json in the `engines` field. You can use
+  [nvm](https://github.com/nvm-sh/nvm) and [yvm](https://github.com/tophat/yvm)
+  to manage your local versions of these.
 * Install
   [Google Chrome](https://www.google.com/chrome/browser/desktop/index.html)
 * Inside the `core` folder, run `yarn install`
 * Configure the nightwatch settings by copying `.env.example` to `.env` and
   editing as necessary.
 * Ensure you have a web server running (as instructed in `.env`)
-* Again inside the `core` folder, run `yarn test:nightwatch` to run the tests.
+* Again inside the `core` folder, run `yarn test:nightwatch --env local` to run
+  the tests.
   By default this will output reports to `core/reports`
 * Nightwatch will run tests for core, as well as contrib and custom modules and
   themes. It will search for tests located under folders with the pattern
diff --git a/web/core/themes/classy/templates/form/details.html.twig b/web/core/themes/classy/templates/form/details.html.twig
index 24366c3d9683a7f4889e7bebf4c84040b85afa2c..c554096da9d785597c6e1e2c317e940002430981 100644
--- a/web/core/themes/classy/templates/form/details.html.twig
+++ b/web/core/themes/classy/templates/form/details.html.twig
@@ -7,6 +7,7 @@
  * - attributes: A list of HTML attributes for the details element.
  * - errors: (optional) Any errors for this details element, may not be set.
  * - title: (optional) The title of the element, may not be set.
+ * - summary_attributes: A list of HTML attributes for the summary element.
  * - description: (optional) The description of the element, may not be set.
  * - children: (optional) The children of the element, may not be set.
  * - value: (optional) The value of the element, may not be set.
diff --git a/web/core/themes/seven/css/components/vertical-tabs.css b/web/core/themes/seven/css/components/vertical-tabs.css
index 06396b0c6389cf8c1f735357f93fbe30a9e3c44c..07c2ca0d10f3a65a5db12dc870ed241646115bf0 100644
--- a/web/core/themes/seven/css/components/vertical-tabs.css
+++ b/web/core/themes/seven/css/components/vertical-tabs.css
@@ -5,7 +5,6 @@
 
 .vertical-tabs {
   position: relative;
-  overflow: hidden;
   margin: 10px 0;
   border: 1px solid #bdbdbd;
   border-radius: 4px;
@@ -16,6 +15,7 @@
   width: 240px;
   margin: 0 -100% -1px 0; /* LTR */
   padding: 0;
+  list-style-type: none;
   border-bottom: 1px solid #ccc;
   line-height: 1;
 }
@@ -37,6 +37,13 @@
 .vertical-tabs__menu-item.last {
   border-bottom: none;
 }
+.vertical-tabs__menu-item.first a {
+  border-top-left-radius: 4px; /* LTR */
+}
+[dir="rtl"] .vertical-tabs__menu-item.first a {
+  border-top-left-radius: 0;
+  border-top-right-radius: 4px;
+}
 [dir="rtl"] .vertical-tabs__menu-item.is-selected {
   border-right: none;
   border-left: 1px solid #fcfcfa;
@@ -93,11 +100,14 @@
   margin: 0 0 0 240px; /* LTR */
   padding: 10px 15px 10px 15px;
   border-left: 1px solid #a6a5a1; /* LTR */
+  border-top-right-radius: 4px; /* LTR */
+  border-bottom-right-radius: 4px; /* LTR */
 }
 [dir="rtl"] .vertical-tabs__panes {
   margin: 0 240px 0 0;
   border-right: 1px solid #a6a5a1;
   border-left: none;
+  border-radius: 4px 0 0 4px;
 }
 .vertical-tabs__panes:after {
   display: table;
diff --git a/web/core/themes/seven/templates/details.html.twig b/web/core/themes/seven/templates/details.html.twig
index 4a1004fef9ac53c6a9ecce4c99a02bd4fbd53832..8e30421eacaa292bbce2eb670c9b3c46b215049f 100644
--- a/web/core/themes/seven/templates/details.html.twig
+++ b/web/core/themes/seven/templates/details.html.twig
@@ -7,6 +7,7 @@
  * - attributes: A list of HTML attributes for the details element.
  * - errors: (optional) Any errors for this details element, may not be set.
  * - title: (optional) The title of the element, may not be set.
+ * - summary_attributes: A list of HTML attributes for the summary element.
  * - description: (optional) The description of the element, may not be set.
  * - children: (optional) The children of the element, may not be set.
  * - value: (optional) The value of the element, may not be set.
diff --git a/web/core/themes/stable/templates/form/details.html.twig b/web/core/themes/stable/templates/form/details.html.twig
index ccd2796016c2e3dd7a43a5fe1745f67105b5ef6f..19879959273d62c9821f9b7cad0f723f16a62e17 100644
--- a/web/core/themes/stable/templates/form/details.html.twig
+++ b/web/core/themes/stable/templates/form/details.html.twig
@@ -7,6 +7,7 @@
  * - attributes: A list of HTML attributes for the details element.
  * - errors: (optional) Any errors for this details element, may not be set.
  * - title: (optional) The title of the element, may not be set.
+ * - summary_attributes: A list of HTML attributes for the summary element.
  * - description: (optional) The description of the element, may not be set.
  * - children: (optional) The children of the element, may not be set.
  * - value: (optional) The value of the element, may not be set.
diff --git a/web/core/yarn.lock b/web/core/yarn.lock
index 76ffaf7c05525e2d58ed8118f468b1145a3aeef7..8b75f8ea0ce40bdf1800bbdd14d91044a9cd578a 100644
--- a/web/core/yarn.lock
+++ b/web/core/yarn.lock
@@ -2,72 +2,41 @@
 # yarn lockfile v1
 
 
-"@babel/code-frame@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
-  integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+  integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
   dependencies:
     "@babel/highlight" "^7.0.0"
 
-"@babel/core@>=7.1.0":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b"
-  integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.3.4"
-    "@babel/helpers" "^7.2.0"
-    "@babel/parser" "^7.3.4"
-    "@babel/template" "^7.2.2"
-    "@babel/traverse" "^7.3.4"
-    "@babel/types" "^7.3.4"
-    convert-source-map "^1.1.0"
-    debug "^4.1.0"
-    json5 "^2.1.0"
-    lodash "^4.17.11"
-    resolve "^1.3.2"
-    semver "^5.4.1"
-    source-map "^0.5.0"
-
-"@babel/core@^7.0.0-beta.42":
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687"
-  integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.2.2"
-    "@babel/helpers" "^7.2.0"
-    "@babel/parser" "^7.2.2"
-    "@babel/template" "^7.2.2"
-    "@babel/traverse" "^7.2.2"
-    "@babel/types" "^7.2.2"
+"@babel/core@>=7.2.2":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
+  integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
+  dependencies:
+    "@babel/code-frame" "^7.5.5"
+    "@babel/generator" "^7.5.5"
+    "@babel/helpers" "^7.5.5"
+    "@babel/parser" "^7.5.5"
+    "@babel/template" "^7.4.4"
+    "@babel/traverse" "^7.5.5"
+    "@babel/types" "^7.5.5"
     convert-source-map "^1.1.0"
     debug "^4.1.0"
     json5 "^2.1.0"
-    lodash "^4.17.10"
+    lodash "^4.17.13"
     resolve "^1.3.2"
     semver "^5.4.1"
     source-map "^0.5.0"
 
-"@babel/generator@^7.2.2":
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc"
-  integrity sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==
-  dependencies:
-    "@babel/types" "^7.2.2"
-    jsesc "^2.5.1"
-    lodash "^4.17.10"
-    source-map "^0.5.0"
-    trim-right "^1.0.1"
-
-"@babel/generator@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e"
-  integrity sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==
+"@babel/generator@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
+  integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
   dependencies:
-    "@babel/types" "^7.3.4"
+    "@babel/types" "^7.5.5"
     jsesc "^2.5.1"
-    lodash "^4.17.11"
+    lodash "^4.17.13"
     source-map "^0.5.0"
     trim-right "^1.0.1"
 
@@ -87,96 +56,74 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
-"@babel/helper-split-export-declaration@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813"
-  integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
+"@babel/helper-split-export-declaration@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
+  integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
   dependencies:
-    "@babel/types" "^7.0.0"
+    "@babel/types" "^7.4.4"
 
-"@babel/helpers@^7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.2.0.tgz#8335f3140f3144270dc63c4732a4f8b0a50b7a21"
-  integrity sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==
+"@babel/helpers@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e"
+  integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==
   dependencies:
-    "@babel/template" "^7.1.2"
-    "@babel/traverse" "^7.1.5"
-    "@babel/types" "^7.2.0"
+    "@babel/template" "^7.4.4"
+    "@babel/traverse" "^7.5.5"
+    "@babel/types" "^7.5.5"
 
 "@babel/highlight@^7.0.0":
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
-  integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+  version "7.5.0"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+  integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
   dependencies:
     chalk "^2.0.0"
     esutils "^2.0.2"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.2.2", "@babel/parser@^7.2.3":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489"
-  integrity sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==
+"@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
+  integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
 
-"@babel/parser@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c"
-  integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==
-
-"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2":
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
-  integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==
+"@babel/runtime@^7.4.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
+  integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
   dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/parser" "^7.2.2"
-    "@babel/types" "^7.2.2"
+    regenerator-runtime "^0.13.2"
 
-"@babel/traverse@^7.0.0-beta.42", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2":
-  version "7.2.3"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8"
-  integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==
+"@babel/template@^7.1.0", "@babel/template@^7.4.4":
+  version "7.4.4"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
+  integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
   dependencies:
     "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.2.2"
-    "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-split-export-declaration" "^7.0.0"
-    "@babel/parser" "^7.2.3"
-    "@babel/types" "^7.2.2"
-    debug "^4.1.0"
-    globals "^11.1.0"
-    lodash "^4.17.10"
+    "@babel/parser" "^7.4.4"
+    "@babel/types" "^7.4.4"
 
-"@babel/traverse@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06"
-  integrity sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==
+"@babel/traverse@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
+  integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
   dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.3.4"
+    "@babel/code-frame" "^7.5.5"
+    "@babel/generator" "^7.5.5"
     "@babel/helper-function-name" "^7.1.0"
-    "@babel/helper-split-export-declaration" "^7.0.0"
-    "@babel/parser" "^7.3.4"
-    "@babel/types" "^7.3.4"
+    "@babel/helper-split-export-declaration" "^7.4.4"
+    "@babel/parser" "^7.5.5"
+    "@babel/types" "^7.5.5"
     debug "^4.1.0"
     globals "^11.1.0"
-    lodash "^4.17.11"
+    lodash "^4.17.13"
 
-"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2":
-  version "7.2.2"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e"
-  integrity sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==
+"@babel/types@^7.0.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
+  version "7.5.5"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
+  integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
   dependencies:
     esutils "^2.0.2"
-    lodash "^4.17.10"
-    to-fast-properties "^2.0.0"
-
-"@babel/types@^7.3.4":
-  version "7.3.4"
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed"
-  integrity sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==
-  dependencies:
-    esutils "^2.0.2"
-    lodash "^4.17.11"
+    lodash "^4.17.13"
     to-fast-properties "^2.0.0"
 
 "@mrmlnc/readdir-enhanced@^2.2.1":
@@ -212,9 +159,14 @@
   integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
 
 "@types/node@*":
-  version "11.11.0"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.0.tgz#070e9ce7c90e727aca0e0c14e470f9a93ffe9390"
-  integrity sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==
+  version "12.7.3"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.3.tgz#27b3f40addaf2f580459fdb405222685542f907a"
+  integrity sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ==
+
+"@types/node@^8.0.7":
+  version "8.10.53"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.53.tgz#5fa08eef810b08b2c03073e360b54f7bad899db1"
+  integrity sha512-aOmXdv1a1/vYUn1OT1CED8ftbkmmYbKhKGSyMDeJiidLvKRKvZUQOdXwG/wcNY7T1Qb0XTlVdiYjIq00U7pLrQ==
 
 "@types/unist@*", "@types/unist@^2.0.0":
   version "2.0.3"
@@ -246,46 +198,53 @@ abbrev@1:
 acorn-jsx@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
   dependencies:
     acorn "^3.0.4"
 
 acorn@^3.0.4:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
 
 acorn@^5.5.0:
-  version "5.5.3"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
+  version "5.7.3"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+  integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
 
-agent-base@2:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
+agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
+  integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
   dependencies:
-    extend "~3.0.0"
-    semver "~5.0.1"
+    es6-promisify "^5.0.0"
+
+agent-base@~4.2.1:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
+  integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
+  dependencies:
+    es6-promisify "^5.0.0"
 
 ajv-keywords@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+  integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
 
-ajv-keywords@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
-  integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
-
-ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
+ajv@^5.2.3, ajv@^5.3.0:
   version "5.5.2"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+  integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
   dependencies:
     co "^4.6.0"
     fast-deep-equal "^1.0.0"
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.3.0"
 
-ajv@^6.0.1, ajv@^6.6.1:
-  version "6.6.2"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d"
-  integrity sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==
+ajv@^6.10.2, ajv@^6.5.5:
+  version "6.10.2"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
+  integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
   dependencies:
     fast-deep-equal "^2.0.1"
     fast-json-stable-stringify "^2.0.0"
@@ -293,8 +252,9 @@ ajv@^6.0.1, ajv@^6.6.1:
     uri-js "^4.2.2"
 
 ansi-escapes@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+  integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
 
 ansi-regex@^2.0.0:
   version "2.1.1"
@@ -351,26 +311,20 @@ argparse@^1.0.7:
   dependencies:
     sprintf-js "~1.0.2"
 
-aria-query@^0.7.0:
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e"
+aria-query@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
+  integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
   dependencies:
     ast-types-flow "0.0.7"
     commander "^2.11.0"
 
-arr-diff@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
-  integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
-  dependencies:
-    arr-flatten "^1.0.1"
-
 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.0.1, arr-flatten@^1.1.0:
+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==
@@ -388,6 +342,7 @@ array-find-index@^1.0.1:
 array-includes@^3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+  integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
   dependencies:
     define-properties "^1.1.2"
     es-abstract "^1.7.0"
@@ -404,11 +359,6 @@ array-uniq@^1.0.1:
   resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
   integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
 
-array-unique@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-
 array-unique@^0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
@@ -420,29 +370,41 @@ arrify@^1.0.1:
   integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
 
 asn1@~0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+  dependencies:
+    safer-buffer "~2.1.0"
 
 assert-plus@1.0.0, assert-plus@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
 
 assertion-error@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b"
+  integrity sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=
+
+assertion-error@^1.1.0:
+  version "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:
+ast-types-flow@0.0.7, 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"
+  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
 
 ast-types@0.x.x:
-  version "0.11.3"
-  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8"
+  version "0.13.2"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48"
+  integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==
 
 astral-regex@^1.0.0:
   version "1.0.0"
@@ -457,53 +419,47 @@ async-each@^1.0.1:
 asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
 
 atob@^2.1.1:
   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@^8.0.0:
-  version "8.6.5"
-  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9"
-  integrity sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==
-  dependencies:
-    browserslist "^3.2.8"
-    caniuse-lite "^1.0.30000864"
-    normalize-range "^0.1.2"
-    num2fraction "^1.2.2"
-    postcss "^6.0.23"
-    postcss-value-parser "^3.2.3"
-
 autoprefixer@^9.0.0:
-  version "9.4.4"
-  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.4.tgz#40c42b335bdb22efe8cd80389ca82ffb5e32d68d"
-  integrity sha512-7tpjBadJyHKf+gOJEmKhZIksWxdZCSrnKbbTJNsw+/zX9+f//DLELRQPWjjjVoDbbWlCuNRkN7RfmZwDVgWMLw==
+  version "9.6.1"
+  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47"
+  integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==
   dependencies:
-    browserslist "^4.3.7"
-    caniuse-lite "^1.0.30000926"
+    browserslist "^4.6.3"
+    caniuse-lite "^1.0.30000980"
+    chalk "^2.4.2"
     normalize-range "^0.1.2"
     num2fraction "^1.2.2"
-    postcss "^7.0.7"
-    postcss-value-parser "^3.3.1"
+    postcss "^7.0.17"
+    postcss-value-parser "^4.0.0"
 
 aws-sign2@~0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
 
-aws4@^1.6.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
+aws4@^1.8.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+  integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
 
-axobject-query@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
+axobject-query@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9"
+  integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==
   dependencies:
     ast-types-flow "0.0.7"
 
 babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
   dependencies:
     chalk "^1.1.3"
     esutils "^2.0.2"
@@ -512,6 +468,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
 babel-core@^6.26.0:
   version "6.26.3"
   resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
+  integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
   dependencies:
     babel-code-frame "^6.26.0"
     babel-generator "^6.26.0"
@@ -536,6 +493,7 @@ babel-core@^6.26.0:
 babel-generator@^6.26.0:
   version "6.26.1"
   resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+  integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
   dependencies:
     babel-messages "^6.23.0"
     babel-runtime "^6.26.0"
@@ -549,6 +507,7 @@ babel-generator@^6.26.0:
 babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+  integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
   dependencies:
     babel-helper-explode-assignable-expression "^6.24.1"
     babel-runtime "^6.22.0"
@@ -557,6 +516,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
 babel-helper-call-delegate@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+  integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
   dependencies:
     babel-helper-hoist-variables "^6.24.1"
     babel-runtime "^6.22.0"
@@ -566,6 +526,7 @@ babel-helper-call-delegate@^6.24.1:
 babel-helper-define-map@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+  integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-runtime "^6.26.0"
@@ -575,6 +536,7 @@ babel-helper-define-map@^6.24.1:
 babel-helper-explode-assignable-expression@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+  integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
   dependencies:
     babel-runtime "^6.22.0"
     babel-traverse "^6.24.1"
@@ -583,6 +545,7 @@ babel-helper-explode-assignable-expression@^6.24.1:
 babel-helper-function-name@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+  integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
   dependencies:
     babel-helper-get-function-arity "^6.24.1"
     babel-runtime "^6.22.0"
@@ -593,6 +556,7 @@ babel-helper-function-name@^6.24.1:
 babel-helper-get-function-arity@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+  integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -600,6 +564,7 @@ babel-helper-get-function-arity@^6.24.1:
 babel-helper-hoist-variables@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+  integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -607,6 +572,7 @@ babel-helper-hoist-variables@^6.24.1:
 babel-helper-optimise-call-expression@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+  integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -614,6 +580,7 @@ babel-helper-optimise-call-expression@^6.24.1:
 babel-helper-regex@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+  integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=
   dependencies:
     babel-runtime "^6.26.0"
     babel-types "^6.26.0"
@@ -622,6 +589,7 @@ babel-helper-regex@^6.24.1:
 babel-helper-remap-async-to-generator@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+  integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-runtime "^6.22.0"
@@ -632,6 +600,7 @@ babel-helper-remap-async-to-generator@^6.24.1:
 babel-helper-replace-supers@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+  integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
   dependencies:
     babel-helper-optimise-call-expression "^6.24.1"
     babel-messages "^6.23.0"
@@ -643,6 +612,7 @@ babel-helper-replace-supers@^6.24.1:
 babel-helpers@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+  integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
   dependencies:
     babel-runtime "^6.22.0"
     babel-template "^6.24.1"
@@ -650,34 +620,41 @@ babel-helpers@^6.24.1:
 babel-messages@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+  integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-add-header-comment@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/babel-plugin-add-header-comment/-/babel-plugin-add-header-comment-1.0.3.tgz#511c4901062640d5a480b4ac3edd6944195850ec"
+  integrity sha1-URxJAQYmQNWkgLSsPt1pRBlYUOw=
 
 babel-plugin-check-es2015-constants@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+  integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-syntax-async-functions@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+  integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
 
 babel-plugin-syntax-exponentiation-operator@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+  integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
 
 babel-plugin-syntax-trailing-function-commas@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+  integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
 
 babel-plugin-transform-async-to-generator@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+  integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=
   dependencies:
     babel-helper-remap-async-to-generator "^6.24.1"
     babel-plugin-syntax-async-functions "^6.8.0"
@@ -686,18 +663,21 @@ babel-plugin-transform-async-to-generator@^6.22.0:
 babel-plugin-transform-es2015-arrow-functions@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+  integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+  integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-block-scoping@^6.23.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+  integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
   dependencies:
     babel-runtime "^6.26.0"
     babel-template "^6.26.0"
@@ -708,6 +688,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0:
 babel-plugin-transform-es2015-classes@^6.23.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+  integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
   dependencies:
     babel-helper-define-map "^6.24.1"
     babel-helper-function-name "^6.24.1"
@@ -722,6 +703,7 @@ babel-plugin-transform-es2015-classes@^6.23.0:
 babel-plugin-transform-es2015-computed-properties@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+  integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
   dependencies:
     babel-runtime "^6.22.0"
     babel-template "^6.24.1"
@@ -729,12 +711,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0:
 babel-plugin-transform-es2015-destructuring@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+  integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+  integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -742,12 +726,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
 babel-plugin-transform-es2015-for-of@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+  integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-function-name@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+  integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-runtime "^6.22.0"
@@ -756,12 +742,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0:
 babel-plugin-transform-es2015-literals@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+  integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+  integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=
   dependencies:
     babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
     babel-runtime "^6.22.0"
@@ -770,6 +758,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015
 babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
   version "6.26.2"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
+  integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
   dependencies:
     babel-plugin-transform-strict-mode "^6.24.1"
     babel-runtime "^6.26.0"
@@ -779,6 +768,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e
 babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+  integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=
   dependencies:
     babel-helper-hoist-variables "^6.24.1"
     babel-runtime "^6.22.0"
@@ -787,6 +777,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
 babel-plugin-transform-es2015-modules-umd@^6.23.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+  integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg=
   dependencies:
     babel-plugin-transform-es2015-modules-amd "^6.24.1"
     babel-runtime "^6.22.0"
@@ -795,6 +786,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0:
 babel-plugin-transform-es2015-object-super@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+  integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40=
   dependencies:
     babel-helper-replace-supers "^6.24.1"
     babel-runtime "^6.22.0"
@@ -802,6 +794,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0:
 babel-plugin-transform-es2015-parameters@^6.23.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+  integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
   dependencies:
     babel-helper-call-delegate "^6.24.1"
     babel-helper-get-function-arity "^6.24.1"
@@ -813,6 +806,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0:
 babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+  integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -820,12 +814,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
 babel-plugin-transform-es2015-spread@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+  integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-sticky-regex@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+  integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw=
   dependencies:
     babel-helper-regex "^6.24.1"
     babel-runtime "^6.22.0"
@@ -834,18 +830,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0:
 babel-plugin-transform-es2015-template-literals@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+  integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+  integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-unicode-regex@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+  integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek=
   dependencies:
     babel-helper-regex "^6.24.1"
     babel-runtime "^6.22.0"
@@ -854,6 +853,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0:
 babel-plugin-transform-exponentiation-operator@^6.22.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+  integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
   dependencies:
     babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
     babel-plugin-syntax-exponentiation-operator "^6.8.0"
@@ -862,19 +862,22 @@ babel-plugin-transform-exponentiation-operator@^6.22.0:
 babel-plugin-transform-regenerator@^6.22.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+  integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
   dependencies:
     regenerator-transform "^0.10.0"
 
 babel-plugin-transform-strict-mode@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+  integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
 
 babel-preset-env@^1.4.0:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
+  integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==
   dependencies:
     babel-plugin-check-es2015-constants "^6.22.0"
     babel-plugin-syntax-trailing-function-commas "^6.22.0"
@@ -903,13 +906,14 @@ babel-preset-env@^1.4.0:
     babel-plugin-transform-es2015-unicode-regex "^6.22.0"
     babel-plugin-transform-exponentiation-operator "^6.22.0"
     babel-plugin-transform-regenerator "^6.22.0"
-    browserslist "^2.1.2"
+    browserslist "^3.2.6"
     invariant "^2.2.2"
     semver "^5.3.0"
 
 babel-register@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+  integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
   dependencies:
     babel-core "^6.26.0"
     babel-runtime "^6.26.0"
@@ -922,6 +926,7 @@ babel-register@^6.26.0:
 babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
   dependencies:
     core-js "^2.4.0"
     regenerator-runtime "^0.11.0"
@@ -929,6 +934,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
 babel-template@^6.24.1, babel-template@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+  integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
   dependencies:
     babel-runtime "^6.26.0"
     babel-traverse "^6.26.0"
@@ -939,6 +945,7 @@ babel-template@^6.24.1, babel-template@^6.26.0:
 babel-traverse@^6.24.1, babel-traverse@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+  integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
   dependencies:
     babel-code-frame "^6.26.0"
     babel-messages "^6.23.0"
@@ -953,6 +960,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0:
 babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+  integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
   dependencies:
     babel-runtime "^6.26.0"
     esutils "^2.0.2"
@@ -962,16 +970,12 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
 babylon@^6.18.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
-
-babylon@^7.0.0-beta.42:
-  version "7.0.0-beta.47"
-  resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80"
-  integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==
+  integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
 
 bail@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3"
-  integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b"
+  integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==
 
 balanced-match@^1.0.0:
   version "1.0.0"
@@ -992,8 +996,9 @@ base@^0.11.1:
     pascalcase "^0.1.1"
 
 bcrypt-pbkdf@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
   dependencies:
     tweetnacl "^0.14.3"
 
@@ -1002,19 +1007,7 @@ binary-extensions@^1.0.0:
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
   integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
 
-boom@4.x.x:
-  version "4.3.1"
-  resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
-  dependencies:
-    hoek "4.x.x"
-
-boom@5.x.x:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
-  dependencies:
-    hoek "4.x.x"
-
-brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+brace-expansion@^1.1.7:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
   integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
@@ -1022,15 +1015,6 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
-braces@^1.8.2:
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
-  integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
-  dependencies:
-    expand-range "^1.8.1"
-    preserve "^0.2.0"
-    repeat-element "^1.1.2"
-
 braces@^2.3.1, braces@^2.3.2:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@@ -1047,25 +1031,20 @@ braces@^2.3.1, braces@^2.3.2:
     split-string "^3.0.2"
     to-regex "^3.0.1"
 
-browser-stdout@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+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@^1.1.3:
   version "1.7.7"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+  integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
   dependencies:
     caniuse-db "^1.0.30000639"
     electron-to-chromium "^1.2.7"
 
-browserslist@^2.1.2:
-  version "2.11.3"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2"
-  dependencies:
-    caniuse-lite "^1.0.30000792"
-    electron-to-chromium "^1.3.30"
-
-browserslist@^3.2.8:
+browserslist@^3.2.6:
   version "3.2.8"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
   integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==
@@ -1073,27 +1052,24 @@ browserslist@^3.2.8:
     caniuse-lite "^1.0.30000844"
     electron-to-chromium "^1.3.47"
 
-browserslist@^4.3.7:
-  version "4.3.7"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.7.tgz#f1de479a6466ea47a0a26dcc725e7504817e624a"
-  integrity sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ==
+browserslist@^4.6.3:
+  version "4.6.6"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453"
+  integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==
   dependencies:
-    caniuse-lite "^1.0.30000925"
-    electron-to-chromium "^1.3.96"
-    node-releases "^1.1.3"
+    caniuse-lite "^1.0.30000984"
+    electron-to-chromium "^1.3.191"
+    node-releases "^1.1.25"
 
 buffer-from@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
-
-builtin-modules@^1.0.0:
   version "1.1.1"
-  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-  integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
 
-bytes@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+bytes@3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+  integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
 
 cache-base@^1.0.1:
   version "1.0.1"
@@ -1125,6 +1101,7 @@ caller-callsite@^2.0.0:
 caller-path@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+  integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
   dependencies:
     callsites "^0.2.0"
 
@@ -1138,6 +1115,7 @@ caller-path@^2.0.0:
 callsites@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+  integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
 
 callsites@^2.0.0:
   version "2.0.0"
@@ -1159,30 +1137,29 @@ camelcase@^4.1.0:
   integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
 
 caniuse-db@^1.0.30000639:
-  version "1.0.30000832"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000832.tgz#afe34c9f7c62139fd1c607db2ab7308bbb6a5158"
-
-caniuse-lite@^1.0.30000792:
-  version "1.0.30000832"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000832.tgz#22a277f1d623774cc9aea2f7c1a65cb1603c63b8"
+  version "1.0.30000989"
+  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000989.tgz#bd8dd2789725685054a2c5ef95804f9e6e50fb32"
+  integrity sha512-5pkU/t9nueoBgELZOCpK+wN4wK6MkIz1Q9lGZSgLwg4xR8EhLY9r0qj6T2bUI8Cq9pGbioEar+Zqgosk5fpbjg==
 
-caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000925, caniuse-lite@^1.0.30000926:
-  version "1.0.30000927"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000927.tgz#114a9de4ff1e01f5790fe578ecd93421c7524665"
-  integrity sha512-ogq4NbUWf1uG/j66k0AmiO3GjqJAlQyF8n4w8a954cbCyFKmYGvRtgz6qkq2fWuduTXHibX7GyYL5Pg58Aks2g==
+caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000984:
+  version "1.0.30000989"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9"
+  integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==
 
 caseless@~0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
 
 ccount@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff"
-  integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386"
+  integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==
 
-chai-nightwatch@~0.1.x:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.1.1.tgz#1ca56de768d3c0868fe7fc2f4d32c2fe894e6be9"
+chai-nightwatch@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.3.0.tgz#a3506a81942fbed6aed9e0a914ae32be187f9735"
+  integrity sha512-NHpHLKQO0M7uNVJ10qlPIzHN9+6f873kYh6dYAn291a1CVESrrH6crbTJwZ3376trtzb6HPa80QYt3gMTL1o4g==
   dependencies:
     assertion-error "1.0.0"
     deep-eql "0.1.3"
@@ -1198,7 +1175,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, 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==
@@ -1207,42 +1184,35 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
-chalk@^2.3.0:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
 character-entities-html4@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610"
-  integrity sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef"
+  integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==
 
 character-entities-legacy@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c"
-  integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4"
+  integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==
 
 character-entities@^1.0.0:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363"
-  integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6"
+  integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==
 
 character-reference-invalid@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed"
-  integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85"
+  integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==
 
 chardet@^0.4.0:
   version "0.4.2"
   resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+  integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
 
 chokidar@^2.0.0:
-  version "2.1.6"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
-  integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==
+  version "2.1.8"
+  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+  integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
   dependencies:
     anymatch "^2.0.0"
     async-each "^1.0.1"
@@ -1259,19 +1229,20 @@ chokidar@^2.0.0:
     fsevents "^1.2.7"
 
 chownr@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
-  integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
+  integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
 
-chromedriver@^2.35.0:
-  version "2.38.3"
-  resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.38.3.tgz#a432a254bc9ed1faa6edfa67cf5d1135aa2468d6"
+chromedriver@^75.1.0:
+  version "75.1.0"
+  resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-75.1.0.tgz#edfef5d7a9b16b6f8a12ddb58cbac76ae52732fd"
+  integrity sha512-N2P0fg6FS4c+tTG0R7cCOD5qiVo+E6uAz6xVjmbZesYv1xs1iGdcCUo0IqOY+ppD/4OOObG+XWV1CFWXT6UIgA==
   dependencies:
-    del "^3.0.0"
-    extract-zip "^1.6.6"
-    kew "^0.7.0"
+    del "^4.1.1"
+    extract-zip "^1.6.7"
     mkdirp "^0.5.1"
-    request "^2.85.0"
+    request "^2.88.0"
+    tcp-port-used "^1.0.1"
 
 circular-json@^0.3.1:
   version "0.3.3"
@@ -1291,12 +1262,14 @@ class-utils@^0.3.5:
 cli-cursor@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+  integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
   dependencies:
     restore-cursor "^2.0.0"
 
 cli-width@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+  integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
 
 clone-regexp@^1.0.0:
   version "1.0.1"
@@ -1309,10 +1282,7 @@ clone-regexp@^1.0.0:
 co@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-co@~3.0.6:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda"
+  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
 
 code-point-at@^1.0.0:
   version "1.1.0"
@@ -1320,9 +1290,9 @@ code-point-at@^1.0.0:
   integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
 
 collapse-white-space@^1.0.2:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091"
-  integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a"
+  integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==
 
 collection-visit@^1.0.0:
   version "1.0.0"
@@ -1344,21 +1314,22 @@ color-name@1.1.3:
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
   integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
 
-combined-stream@1.0.6, combined-stream@~1.0.5:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
+combined-stream@^1.0.6, 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==
   dependencies:
     delayed-stream "~1.0.0"
 
-commander@2.9.0:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
-  dependencies:
-    graceful-readlink ">= 1.0.0"
-
-commander@^2.11.0:
+commander@2.15.1:
   version "2.15.1"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
+  integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
+
+commander@^2.11.0:
+  version "2.20.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+  integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
 
 component-emitter@^1.2.1:
   version "1.3.0"
@@ -1370,23 +1341,21 @@ concat-map@0.0.1:
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
 
-concat-stream@1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
-  dependencies:
-    inherits "^2.0.3"
-    readable-stream "^2.2.2"
-    typedarray "^0.0.6"
-
-concat-stream@^1.6.0:
+concat-stream@1.6.2, concat-stream@^1.6.0:
   version "1.6.2"
   resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
   dependencies:
     buffer-from "^1.0.0"
     inherits "^2.0.3"
     readable-stream "^2.2.2"
     typedarray "^0.0.6"
 
+confusing-browser-globals@^1.0.5:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz#93ffec1f82a6e2bf2bc36769cc3a92fa20e502f3"
+  integrity sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==
+
 console-control-strings@^1.0.0, console-control-strings@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
@@ -1395,72 +1364,67 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
 contains-path@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+  integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
 
-convert-source-map@^1.1.0:
+convert-source-map@^1.1.0, convert-source-map@^1.5.1:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
   integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
   dependencies:
     safe-buffer "~5.1.1"
 
-convert-source-map@^1.5.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
-
 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@^2.4.0, core-js@^2.5.0:
-  version "2.5.5"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b"
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2"
+  integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==
 
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
   integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
 
-cosmiconfig@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
-  integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==
-  dependencies:
-    is-directory "^0.3.1"
-    js-yaml "^3.9.0"
-    parse-json "^4.0.0"
-    require-from-string "^2.0.1"
-
 cosmiconfig@^5.0.0:
-  version "5.0.7"
-  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04"
-  integrity sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==
+  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.9.0"
+    js-yaml "^3.13.1"
     parse-json "^4.0.0"
 
 cross-env@^5.1.3:
-  version "5.1.4"
-  resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.4.tgz#f61c14291f7cc653bb86457002ea80a04699d022"
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2"
+  integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==
   dependencies:
-    cross-spawn "^5.1.0"
+    cross-spawn "^6.0.5"
     is-windows "^1.0.0"
 
 cross-spawn@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+  integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
   dependencies:
     lru-cache "^4.0.1"
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cryptiles@3.x.x:
-  version "3.1.2"
-  resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
   dependencies:
-    boom "5.x.x"
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
 
 currently-unhandled@^0.4.1:
   version "0.4.1"
@@ -1469,46 +1433,60 @@ currently-unhandled@^0.4.1:
   dependencies:
     array-find-index "^1.0.1"
 
-damerau-levenshtein@^1.0.0:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
+damerau-levenshtein@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414"
+  integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==
 
 dashdash@^1.12.0:
   version "1.14.1"
   resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
   dependencies:
     assert-plus "^1.0.0"
 
-data-uri-to-buffer@1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835"
+data-uri-to-buffer@2:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.1.tgz#ca8f56fe38b1fd329473e9d1b4a9afcd8ce1c045"
+  integrity sha512-OkVVLrerfAKZlW2ZZ3Ve2y65jgiWqBKsTfUIAFbn8nVbPcCZg6l6gikKlEYv0kXcmzqGm6mFq/Jf2vriuEkv8A==
+  dependencies:
+    "@types/node" "^8.0.7"
 
-debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, 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==
   dependencies:
     ms "2.0.0"
 
-debug@2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
-  dependencies:
-    ms "0.7.1"
-
-debug@^3.0.0, debug@^3.1.0, debug@^3.2.6:
-  version "3.2.6"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
-  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+debug@3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
   dependencies:
-    ms "^2.1.1"
+    ms "2.0.0"
 
-debug@^4.0.0, debug@^4.1.0:
+debug@4, debug@^4.0.0, debug@^4.1.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
   integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
   dependencies:
     ms "^2.1.1"
 
+debug@4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
+  integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^3.1.0, debug@^3.2.6:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  dependencies:
+    ms "^2.1.1"
+
 decamelize-keys@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
@@ -1530,6 +1508,7 @@ decode-uri-component@^0.2.0:
 deep-eql@0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
+  integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=
   dependencies:
     type-detect "0.1.1"
 
@@ -1538,16 +1517,17 @@ deep-extend@^0.6.0:
   resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
   integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
 
-deep-is@~0.1.3:
+deep-is@^0.1.3, deep-is@~0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
 
-define-properties@^1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+define-properties@^1.1.2, define-properties@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+  integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
   dependencies:
-    foreach "^2.0.5"
-    object-keys "^1.0.8"
+    object-keys "^1.0.12"
 
 define-property@^0.2.5:
   version "0.2.5"
@@ -1571,41 +1551,47 @@ define-property@^2.0.2:
     is-descriptor "^1.0.2"
     isobject "^3.0.1"
 
-degenerator@~1.0.2:
+degenerator@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095"
+  integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=
   dependencies:
     ast-types "0.x.x"
     escodegen "1.x.x"
     esprima "3.x.x"
 
-del@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+del@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+  integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
   dependencies:
+    "@types/glob" "^7.1.1"
     globby "^6.1.0"
-    is-path-cwd "^1.0.0"
-    is-path-in-cwd "^1.0.0"
-    p-map "^1.1.1"
-    pify "^3.0.0"
-    rimraf "^2.2.8"
+    is-path-cwd "^2.0.0"
+    is-path-in-cwd "^2.0.0"
+    p-map "^2.0.0"
+    pify "^4.0.1"
+    rimraf "^2.6.3"
 
 delayed-stream@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
 
 delegates@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
   integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
 
-depd@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+depd@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
 
 detect-indent@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+  integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
   dependencies:
     repeating "^2.0.0"
 
@@ -1614,19 +1600,12 @@ detect-libc@^1.0.2:
   resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
   integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
 
-diff@1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
-
-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"
+diff@3.5.0:
+  version "3.5.0"
+  resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+  integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
 
-dir-glob@^2.2.1:
+dir-glob@^2.2.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
   integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
@@ -1636,6 +1615,7 @@ dir-glob@^2.2.1:
 doctrine@1.5.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+  integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
   dependencies:
     esutils "^2.0.2"
     isarray "^1.0.0"
@@ -1643,26 +1623,27 @@ doctrine@1.5.0:
 doctrine@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
   dependencies:
     esutils "^2.0.2"
 
 dom-serializer@0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
-  integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb"
+  integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==
   dependencies:
-    domelementtype "~1.1.1"
-    entities "~1.1.1"
+    domelementtype "^2.0.1"
+    entities "^2.0.0"
 
-domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
+domelementtype@1, domelementtype@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
   integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
 
-domelementtype@~1.1.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-  integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
+domelementtype@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+  integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
 
 domhandler@^2.3.0:
   version "2.4.2"
@@ -1689,86 +1670,92 @@ dot-prop@^4.1.1:
 dotenv-safe@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/dotenv-safe/-/dotenv-safe-5.0.1.tgz#8c4a79b8978fd4271b3d8ef17be2b2f04588af71"
+  integrity sha512-NiS92uLQHKThcQIB4pNEQHLaosz+O1VaJ1yuBaZNj0BASGpQliSzfPKgaoFs/WvE+p8pS9STXOMW30b5uxBZog==
   dependencies:
     dotenv "^5.0.0"
 
+dotenv@7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c"
+  integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==
+
 dotenv@^5.0.0:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef"
+  integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==
 
 ecc-jsbn@~0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
   dependencies:
     jsbn "~0.1.0"
+    safer-buffer "^2.1.0"
 
-ejs@2.5.7:
-  version "2.5.7"
-  resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a"
-
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
-  version "1.3.44"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.44.tgz#ef6b150a60d523082388cadad88085ecd2fd4684"
-
-electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.96:
-  version "1.3.100"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.100.tgz#899fb088def210aee6b838a47655bbb299190e13"
-  integrity sha512-cEUzis2g/RatrVf8x26L8lK5VEls1AGnLHk6msluBUg/NTB4wcXzExTsGscFq+Vs4WBBU2zbLLySvD4C0C3hwg==
+ejs@^2.5.9:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.2.tgz#3a32c63d1cd16d11266cd4703b14fec4e74ab4f6"
+  integrity sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==
 
-emoji-regex@^6.1.0:
-  version "6.5.1"
-  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.47:
+  version "1.3.245"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.245.tgz#1829c45165853c37f74e9f6736546917f78a03d4"
+  integrity sha512-W1Tjm8VhabzYmiqLUD/sT/KTKkvZ8QpSkbTfLELBrFdnrolfkCgcbxFE3NXAxL5xedWXF74wWn0j6oVrgBdemw==
 
-emoji-regex@^7.0.1:
+emoji-regex@^7.0.1, emoji-regex@^7.0.2:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
   integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
 
-entities@^1.1.1, entities@~1.1.1:
+entities@^1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
   integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
 
-error-ex@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
-  dependencies:
-    is-arrayish "^0.2.1"
+entities@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
+  integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
 
-error-ex@^1.3.1:
+error-ex@^1.2.0, error-ex@^1.3.1:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
   integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
   dependencies:
     is-arrayish "^0.2.1"
 
-es-abstract@^1.6.1:
-  version "1.12.0"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
+es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.7.0:
+  version "1.13.0"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+  integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
   dependencies:
-    es-to-primitive "^1.1.1"
+    es-to-primitive "^1.2.0"
     function-bind "^1.1.1"
-    has "^1.0.1"
-    is-callable "^1.1.3"
+    has "^1.0.3"
+    is-callable "^1.1.4"
     is-regex "^1.0.4"
+    object-keys "^1.0.12"
 
-es-abstract@^1.7.0:
-  version "1.11.0"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681"
+es-to-primitive@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+  integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
   dependencies:
-    es-to-primitive "^1.1.1"
-    function-bind "^1.1.1"
-    has "^1.0.1"
-    is-callable "^1.1.3"
-    is-regex "^1.0.4"
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
 
-es-to-primitive@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+es6-promise@^4.0.3:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+  integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
+es6-promisify@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+  integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
   dependencies:
-    is-callable "^1.1.1"
-    is-date-object "^1.0.1"
-    is-symbol "^1.0.1"
+    es6-promise "^4.0.3"
 
 escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
   version "1.0.5"
@@ -1776,8 +1763,9 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
   integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
 
 escodegen@1.x.x:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2"
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
+  integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==
   dependencies:
     esprima "^3.1.3"
     estraverse "^4.2.0"
@@ -1786,103 +1774,119 @@ escodegen@1.x.x:
   optionalDependencies:
     source-map "~0.6.1"
 
-eslint-config-airbnb-base@^13.0.0:
-  version "13.0.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.0.0.tgz#2ee6279c4891128e49d6445b24aa13c2d1a21450"
+eslint-config-airbnb-base@^13.2.0:
+  version "13.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943"
+  integrity sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w==
   dependencies:
-    eslint-restricted-globals "^0.1.1"
+    confusing-browser-globals "^1.0.5"
     object.assign "^4.1.0"
-    object.entries "^1.0.4"
+    object.entries "^1.1.0"
 
 eslint-config-airbnb@^17.0.0:
-  version "17.0.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.0.0.tgz#1bb8c4255483320bb68c3b614f71ae6058b0b2db"
+  version "17.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz#2272e0b86bb1e2b138cdf88d07a3b6f4cda3d626"
+  integrity sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg==
   dependencies:
-    eslint-config-airbnb-base "^13.0.0"
+    eslint-config-airbnb-base "^13.2.0"
     object.assign "^4.1.0"
-    object.entries "^1.0.4"
+    object.entries "^1.1.0"
 
 eslint-config-prettier@^2.9.0:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3"
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b"
+  integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA==
   dependencies:
     get-stdin "^5.0.1"
 
-eslint-import-resolver-node@^0.3.1:
+eslint-import-resolver-node@^0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+  integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
   dependencies:
     debug "^2.6.9"
     resolve "^1.5.0"
 
-eslint-module-utils@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746"
+eslint-module-utils@^2.4.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c"
+  integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==
   dependencies:
     debug "^2.6.8"
-    pkg-dir "^1.0.0"
+    pkg-dir "^2.0.0"
 
 eslint-plugin-import@^2.13.0:
-  version "2.13.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz#df24f241175e312d91662dc91ca84064caec14ed"
+  version "2.18.2"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6"
+  integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==
   dependencies:
+    array-includes "^3.0.3"
     contains-path "^0.1.0"
-    debug "^2.6.8"
+    debug "^2.6.9"
     doctrine "1.5.0"
-    eslint-import-resolver-node "^0.3.1"
-    eslint-module-utils "^2.2.0"
-    has "^1.0.1"
-    lodash "^4.17.4"
-    minimatch "^3.0.3"
+    eslint-import-resolver-node "^0.3.2"
+    eslint-module-utils "^2.4.0"
+    has "^1.0.3"
+    minimatch "^3.0.4"
+    object.values "^1.1.0"
     read-pkg-up "^2.0.0"
-    resolve "^1.6.0"
+    resolve "^1.11.0"
 
 eslint-plugin-jsx-a11y@^6.0.3:
-  version "6.0.3"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5"
+  version "6.2.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
+  integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==
   dependencies:
-    aria-query "^0.7.0"
+    "@babel/runtime" "^7.4.5"
+    aria-query "^3.0.0"
     array-includes "^3.0.3"
-    ast-types-flow "0.0.7"
-    axobject-query "^0.1.0"
-    damerau-levenshtein "^1.0.0"
-    emoji-regex "^6.1.0"
-    jsx-ast-utils "^2.0.0"
+    ast-types-flow "^0.0.7"
+    axobject-query "^2.0.2"
+    damerau-levenshtein "^1.0.4"
+    emoji-regex "^7.0.2"
+    has "^1.0.3"
+    jsx-ast-utils "^2.2.1"
 
 eslint-plugin-prettier@^2.6.2:
-  version "2.6.2"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz#71998c60aedfa2141f7bfcbf9d1c459bf98b4fad"
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904"
+  integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==
   dependencies:
     fast-diff "^1.1.1"
     jest-docblock "^21.0.0"
 
 eslint-plugin-react@^7.10.0:
-  version "7.10.0"
-  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz#af5c1fef31c4704db02098f9be18202993828b50"
+  version "7.14.3"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13"
+  integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==
   dependencies:
+    array-includes "^3.0.3"
     doctrine "^2.1.0"
     has "^1.0.3"
-    jsx-ast-utils "^2.0.1"
-    prop-types "^15.6.2"
-
-eslint-restricted-globals@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
+    jsx-ast-utils "^2.1.0"
+    object.entries "^1.1.0"
+    object.fromentries "^2.0.0"
+    object.values "^1.1.0"
+    prop-types "^15.7.2"
+    resolve "^1.10.1"
 
 eslint-scope@^3.7.1:
-  version "3.7.1"
-  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
+  version "3.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
+  integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
   dependencies:
     esrecurse "^4.1.0"
     estraverse "^4.1.1"
 
 eslint-visitor-keys@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+  integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
 
 eslint@^4.19.1:
   version "4.19.1"
   resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
+  integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==
   dependencies:
     ajv "^5.3.0"
     babel-code-frame "^6.22.0"
@@ -1926,6 +1930,7 @@ eslint@^4.19.1:
 espree@^3.5.4:
   version "3.5.4"
   resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+  integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
   dependencies:
     acorn "^5.5.0"
     acorn-jsx "^3.0.0"
@@ -1933,6 +1938,7 @@ espree@^3.5.4:
 esprima@3.x.x, esprima@^3.1.3:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+  integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
 
 esprima@^4.0.0:
   version "4.0.1"
@@ -1942,23 +1948,26 @@ esprima@^4.0.0:
 esquery@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+  integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
   dependencies:
     estraverse "^4.0.0"
 
 esrecurse@^4.1.0:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+  integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
   dependencies:
     estraverse "^4.1.0"
 
 estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
 
 esutils@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-  integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 
 execall@^1.0.0:
   version "1.0.0"
@@ -1967,13 +1976,6 @@ execall@^1.0.0:
   dependencies:
     clone-regexp "^1.0.0"
 
-expand-brackets@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
-  integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
-  dependencies:
-    is-posix-bracket "^0.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"
@@ -1987,13 +1989,6 @@ expand-brackets@^2.1.4:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-expand-range@^1.8.1:
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
-  integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
-  dependencies:
-    fill-range "^2.1.0"
-
 extend-shallow@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -2009,11 +2004,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
     assign-symbols "^1.0.0"
     is-extendable "^1.0.1"
 
-extend@3, extend@~3.0.0, extend@~3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-extend@^3.0.0:
+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==
@@ -2021,18 +2012,12 @@ extend@^3.0.0:
 external-editor@^2.0.4:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+  integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
   dependencies:
     chardet "^0.4.0"
     iconv-lite "^0.4.17"
     tmp "^0.0.33"
 
-extglob@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
-  integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
-  dependencies:
-    is-extglob "^1.0.0"
-
 extglob@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -2047,22 +2032,25 @@ extglob@^2.0.4:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
-extract-zip@^1.6.6:
-  version "1.6.6"
-  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c"
+extract-zip@^1.6.7:
+  version "1.6.7"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
+  integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=
   dependencies:
-    concat-stream "1.6.0"
+    concat-stream "1.6.2"
     debug "2.6.9"
-    mkdirp "0.5.0"
+    mkdirp "0.5.1"
     yauzl "2.4.1"
 
 extsprintf@1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
 
 extsprintf@^1.2.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
 
 fast-deep-equal@^1.0.0:
   version "1.1.0"
@@ -2075,13 +2063,14 @@ fast-deep-equal@^2.0.1:
   integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
 
 fast-diff@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+  integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
 
-fast-glob@^2.0.2, fast-glob@^2.2.6:
-  version "2.2.6"
-  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295"
-  integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==
+fast-glob@^2.2.6:
+  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"
@@ -2098,16 +2087,19 @@ fast-json-stable-stringify@^2.0.0:
 fast-levenshtein@~2.0.4:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
 
 fd-slicer@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+  integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=
   dependencies:
     pend "~1.2.0"
 
 figures@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+  integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
   dependencies:
     escape-string-regexp "^1.0.5"
 
@@ -2129,22 +2121,7 @@ file-entry-cache@^4.0.0:
 file-uri-to-path@1:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
-
-filename-regex@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-  integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
-
-fill-range@^2.1.0:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
-  integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
-  dependencies:
-    is-number "^2.1.0"
-    isobject "^2.0.0"
-    randomatic "^3.0.0"
-    repeat-element "^1.1.2"
-    repeat-string "^1.5.2"
+  integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
 
 fill-range@^4.0.0:
   version "4.0.0"
@@ -2156,14 +2133,7 @@ fill-range@^4.0.0:
     repeat-string "^1.6.1"
     to-regex-range "^2.1.0"
 
-find-up@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
-  dependencies:
-    path-exists "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-find-up@^2.0.0:
+find-up@^2.0.0, find-up@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
   integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
@@ -2190,40 +2160,32 @@ flat-cache@^2.0.1:
     write "1.0.3"
 
 flatted@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
-  integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+  integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
 
 flatten@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+  integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=
 
-for-in@^1.0.1, for-in@^1.0.2:
+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=
 
-for-own@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
-  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
-  dependencies:
-    for-in "^1.0.1"
-
-foreach@^2.0.5:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
-
 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@~2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
+form-data@~2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
   dependencies:
     asynckit "^0.4.0"
-    combined-stream "1.0.6"
+    combined-stream "^1.0.6"
     mime-types "^2.1.12"
 
 fragment-cache@^0.2.1:
@@ -2256,21 +2218,25 @@ fsevents@^1.2.7:
 ftp@~0.3.10:
   version "0.3.10"
   resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
+  integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
   dependencies:
     readable-stream "1.1.x"
     xregexp "2.0.0"
 
-function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
+function-bind@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 
 functional-red-black-tree@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
 
 gather-stream@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/gather-stream/-/gather-stream-1.0.0.tgz#b33994af457a8115700d410f317733cbe7a0904b"
+  integrity sha1-szmUr0V6gRVwDUEPMXczy+egkEs=
 
 gauge@~2.7.3:
   version "2.7.4"
@@ -2289,22 +2255,24 @@ gauge@~2.7.3:
 get-stdin@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+  integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=
 
 get-stdin@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
   integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
 
-get-uri@2:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59"
+get-uri@^2.0.0:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.3.tgz#fa13352269781d75162c6fc813c9e905323fbab5"
+  integrity sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw==
   dependencies:
-    data-uri-to-buffer "1"
-    debug "2"
-    extend "3"
+    data-uri-to-buffer "2"
+    debug "4"
+    extend "~3.0.2"
     file-uri-to-path "1"
     ftp "~0.3.10"
-    readable-stream "2"
+    readable-stream "3"
 
 get-value@^2.0.3, get-value@^2.0.6:
   version "2.0.6"
@@ -2314,24 +2282,10 @@ get-value@^2.0.3, get-value@^2.0.6:
 getpass@^0.1.1:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
   dependencies:
     assert-plus "^1.0.0"
 
-glob-base@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
-  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
-  dependencies:
-    glob-parent "^2.0.0"
-    is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
-  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
-  dependencies:
-    is-glob "^2.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"
@@ -2345,21 +2299,10 @@ glob-to-regexp@^0.3.0:
   resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
   integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
 
-glob@7.0.5:
-  version "7.0.5"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.2"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@^7.0.3, glob@^7.1.3:
-  version "7.1.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
-  integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+glob@7.1.2:
+  version "7.1.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+  integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -2368,9 +2311,10 @@ glob@^7.0.3, glob@^7.1.3:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.1.2:
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+glob@^7.0.3, glob@^7.1.2, glob@^7.1.3:
+  version "7.1.4"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+  integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -2395,22 +2339,20 @@ global-prefix@^3.0.0:
     kind-of "^6.0.2"
     which "^1.3.1"
 
-globals@^11.0.1:
-  version "11.7.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673"
-
-globals@^11.1.0:
-  version "11.9.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249"
-  integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==
+globals@^11.0.1, globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
 globals@^9.18.0:
   version "9.18.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+  integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
 
 globby@^6.1.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
   dependencies:
     array-union "^1.0.1"
     glob "^7.0.3"
@@ -2418,27 +2360,14 @@ globby@^6.1.0:
     pify "^2.0.0"
     pinkie-promise "^2.0.0"
 
-globby@^8.0.0:
-  version "8.0.1"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50"
-  integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==
-  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"
-
 globby@^9.0.0:
-  version "9.1.0"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-9.1.0.tgz#e90f4d5134109e6d855abdd31bdb1b085428592e"
-  integrity sha512-VtYjhHr7ncls724Of5W6Kaahz0ag7dB4G62/2HsN+xEKG6SrPzM1AJMerGxQTwJGnN9reeyxdvXbuZYpfssCvg==
+  version "9.2.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
+  integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==
   dependencies:
     "@types/glob" "^7.1.1"
     array-union "^1.0.2"
-    dir-glob "^2.2.1"
+    dir-glob "^2.2.2"
     fast-glob "^2.2.6"
     glob "^7.1.3"
     ignore "^4.0.3"
@@ -2451,34 +2380,33 @@ globjoin@^0.1.4:
   integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=
 
 gonzales-pe@^4.2.3:
-  version "4.2.3"
-  resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2"
-  integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==
+  version "4.2.4"
+  resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.4.tgz#356ae36a312c46fe0f1026dd6cb539039f8500d2"
+  integrity sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ==
   dependencies:
     minimist "1.1.x"
 
 graceful-fs@^4.1.11, graceful-fs@^4.1.2:
-  version "4.1.15"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
-  integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-
-"graceful-readlink@>= 1.0.0":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
+  integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
 
-growl@1.9.2:
-  version "1.9.2"
-  resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+growl@1.10.5:
+  version "1.10.5"
+  resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+  integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
 
 har-schema@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
 
-har-validator@~5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+har-validator@~5.1.0:
+  version "5.1.3"
+  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+  integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
   dependencies:
-    ajv "^5.1.0"
+    ajv "^6.5.5"
     har-schema "^2.0.0"
 
 has-ansi@^2.0.0:
@@ -2501,6 +2429,7 @@ has-flag@^3.0.0:
 has-symbols@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+  integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
 
 has-unicode@^2.0.0:
   version "2.0.1"
@@ -2538,42 +2467,30 @@ has-values@^1.0.0:
     is-number "^3.0.0"
     kind-of "^4.0.0"
 
-has@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
-  dependencies:
-    function-bind "^1.0.2"
-
-has@^1.0.3:
+has@^1.0.1, 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==
   dependencies:
     function-bind "^1.1.1"
 
-hawk@~6.0.2:
-  version "6.0.2"
-  resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
-  dependencies:
-    boom "4.x.x"
-    cryptiles "3.x.x"
-    hoek "4.x.x"
-    sntp "2.x.x"
-
-hoek@4.x.x:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
+he@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+  integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
 
 home-or-tmp@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+  integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
   dependencies:
     os-homedir "^1.0.0"
     os-tmpdir "^1.0.1"
 
 hosted-git-info@^2.1.4:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
-  integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+  version "2.8.4"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
+  integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==
 
 html-tags@^2.0.0:
   version "2.0.0"
@@ -2592,62 +2509,43 @@ htmlparser2@^3.10.0:
     inherits "^2.0.1"
     readable-stream "^3.1.1"
 
-htmlparser2@^3.9.2:
-  version "3.10.0"
-  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464"
-  integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==
+http-errors@1.7.3:
+  version "1.7.3"
+  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+  integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
   dependencies:
-    domelementtype "^1.3.0"
-    domhandler "^2.3.0"
-    domutils "^1.5.1"
-    entities "^1.1.1"
-    inherits "^2.0.1"
-    readable-stream "^3.0.6"
+    depd "~1.1.2"
+    inherits "2.0.4"
+    setprototypeof "1.1.1"
+    statuses ">= 1.5.0 < 2"
+    toidentifier "1.0.0"
 
-http-errors@1.6.2:
-  version "1.6.2"
-  resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
-  dependencies:
-    depd "1.1.1"
-    inherits "2.0.3"
-    setprototypeof "1.0.3"
-    statuses ">= 1.3.1 < 2"
-
-http-proxy-agent@1:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a"
+http-proxy-agent@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
+  integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
   dependencies:
-    agent-base "2"
-    debug "2"
-    extend "3"
+    agent-base "4"
+    debug "3.1.0"
 
 http-signature@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
   dependencies:
     assert-plus "^1.0.0"
     jsprim "^1.2.2"
     sshpk "^1.7.0"
 
-https-proxy-agent@1:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
-  dependencies:
-    agent-base "2"
-    debug "2"
-    extend "3"
-
-iconv-lite@0.4.19:
-  version "0.4.19"
-  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
-
-iconv-lite@^0.4.17:
-  version "0.4.23"
-  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
+https-proxy-agent@^2.2.1:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz#271ea8e90f836ac9f119daccd39c19ff7dfb0793"
+  integrity sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==
   dependencies:
-    safer-buffer ">= 2.1.2 < 3"
+    agent-base "^4.3.0"
+    debug "^3.1.0"
 
-iconv-lite@^0.4.4:
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
   integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -2661,7 +2559,7 @@ ignore-walk@^3.0.1:
   dependencies:
     minimatch "^3.0.4"
 
-ignore@^3.3.3, ignore@^3.3.5:
+ignore@^3.3.3:
   version "3.3.10"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
   integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
@@ -2672,9 +2570,9 @@ ignore@^4.0.3:
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
 ignore@^5.0.4:
-  version "5.0.4"
-  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45"
-  integrity sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
+  integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
 
 import-fresh@^2.0.0:
   version "2.0.0"
@@ -2712,18 +2610,20 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 
 ini@^1.3.5, ini@~1.3.0:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+  integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
 
 inquirer@^3.0.6:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+  integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
   dependencies:
     ansi-escapes "^3.0.0"
     chalk "^2.0.0"
@@ -2743,20 +2643,24 @@ inquirer@^3.0.6:
 invariant@^2.2.2:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+  integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
   dependencies:
     loose-envify "^1.0.0"
 
-ip@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590"
+ip-regex@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+  integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
 
-ip@^1.1.4:
+ip@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+  integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
 
 irregular-plurals@^1.0.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766"
+  integrity sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=
 
 is-accessor-descriptor@^0.1.6:
   version "0.1.6"
@@ -2773,9 +2677,9 @@ is-accessor-descriptor@^1.0.0:
     kind-of "^6.0.0"
 
 is-alphabetical@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41"
-  integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8"
+  integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==
 
 is-alphanumeric@^1.0.0:
   version "1.0.0"
@@ -2783,9 +2687,9 @@ is-alphanumeric@^1.0.0:
   integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
 
 is-alphanumerical@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40"
-  integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c"
+  integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==
   dependencies:
     is-alphabetical "^1.0.0"
     is-decimal "^1.0.0"
@@ -2802,7 +2706,7 @@ is-binary-path@^1.0.0:
   dependencies:
     binary-extensions "^1.0.0"
 
-is-buffer@^1.1.4, is-buffer@^1.1.5:
+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==
@@ -2812,16 +2716,10 @@ is-buffer@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
   integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==
 
-is-builtin-module@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
-  integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
-  dependencies:
-    builtin-modules "^1.0.0"
-
-is-callable@^1.1.1, is-callable@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+is-callable@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+  integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
 
 is-data-descriptor@^0.1.4:
   version "0.1.4"
@@ -2840,11 +2738,12 @@ is-data-descriptor@^1.0.0:
 is-date-object@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+  integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
 
 is-decimal@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff"
-  integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7"
+  integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==
 
 is-descriptor@^0.1.0:
   version "0.1.6"
@@ -2869,18 +2768,6 @@ is-directory@^0.3.1:
   resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
   integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
 
-is-dotfile@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
-
-is-equal-shallow@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
-  integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
-  dependencies:
-    is-primitive "^2.0.0"
-
 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"
@@ -2893,11 +2780,6 @@ is-extendable@^1.0.1:
   dependencies:
     is-plain-object "^2.0.4"
 
-is-extglob@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-
 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"
@@ -2906,6 +2788,7 @@ is-extglob@^2.1.0, is-extglob@^2.1.1:
 is-finite@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+  integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
   dependencies:
     number-is-nan "^1.0.0"
 
@@ -2921,13 +2804,6 @@ is-fullwidth-code-point@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
   integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
 
-is-glob@^2.0.0, is-glob@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
-  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
-  dependencies:
-    is-extglob "^1.0.0"
-
 is-glob@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -2943,16 +2819,9 @@ is-glob@^4.0.0:
     is-extglob "^2.1.1"
 
 is-hexadecimal@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835"
-  integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==
-
-is-number@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
-  integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
-  dependencies:
-    kind-of "^3.0.2"
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee"
+  integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==
 
 is-number@^3.0.0:
   version "3.0.0"
@@ -2961,64 +2830,51 @@ is-number@^3.0.0:
   dependencies:
     kind-of "^3.0.2"
 
-is-number@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
-  integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-
 is-obj@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
   integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
 
-is-path-cwd@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-  integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+is-path-cwd@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+  integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
 
-is-path-in-cwd@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
-  integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+is-path-in-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+  integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
   dependencies:
-    is-path-inside "^1.0.0"
+    is-path-inside "^2.1.0"
 
-is-path-inside@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
-  integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+is-path-inside@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+  integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
   dependencies:
-    path-is-inside "^1.0.1"
+    path-is-inside "^1.0.2"
 
 is-plain-obj@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
   integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
 
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, 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-posix-bracket@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-  integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-
-is-primitive@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-  integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-
 is-promise@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+  integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
 
 is-regex@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+  integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
   dependencies:
     has "^1.0.1"
 
@@ -3030,24 +2886,34 @@ is-regexp@^1.0.0:
 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-supported-regexp-flag@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca"
   integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==
 
-is-symbol@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+is-symbol@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+  integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+  dependencies:
+    has-symbols "^1.0.0"
 
 is-typedarray@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-url@^1.2.2:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+  integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
 
 is-whitespace-character@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed"
-  integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac"
+  integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==
 
 is-windows@^1.0.0, is-windows@^1.0.2:
   version "1.0.2"
@@ -3055,13 +2921,23 @@ is-windows@^1.0.0, is-windows@^1.0.2:
   integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
 
 is-word-character@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553"
-  integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa"
+  integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==
+
+is2@2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.1.tgz#8ac355644840921ce435d94f05d3a94634d3481a"
+  integrity sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==
+  dependencies:
+    deep-is "^0.1.3"
+    ip-regex "^2.1.0"
+    is-url "^1.2.2"
 
 isarray@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
 
 isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
   version "1.0.0"
@@ -3071,6 +2947,7 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
 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@^2.0.0:
   version "2.1.0"
@@ -3087,36 +2964,32 @@ isobject@^3.0.0, isobject@^3.0.1:
 isstream@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
 
 jest-docblock@^21.0.0:
   version "21.2.0"
   resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
+  integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==
 
 js-base64@^2.1.9:
-  version "2.5.0"
-  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz#42255ba183ab67ce59a0dee640afdc00ab5ae93e"
-  integrity sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g==
-
-js-tokens@^3.0.0, js-tokens@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
+  integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
 
 "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
   integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
 
-js-yaml@^3.9.0:
-  version "3.12.1"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
-  integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^4.0.0"
+js-tokens@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
 
-js-yaml@^3.9.1:
-  version "3.12.0"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
+js-yaml@^3.13.1, js-yaml@^3.9.1:
+  version "3.13.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+  integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
   dependencies:
     argparse "^1.0.7"
     esprima "^4.0.0"
@@ -3124,10 +2997,12 @@ js-yaml@^3.9.1:
 jsbn@~0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
 
 jsesc@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+  integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
 
 jsesc@^2.5.1:
   version "2.5.2"
@@ -3137,6 +3012,7 @@ jsesc@^2.5.1:
 jsesc@~0.5.0:
   version "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:
   version "1.0.2"
@@ -3156,22 +3032,22 @@ json-schema-traverse@^0.4.1:
 json-schema@0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
 
 json-stable-stringify-without-jsonify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
 
 json-stringify-safe@~5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-json3@3.3.2:
-  version "3.3.2"
-  resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
 
 json5@^0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+  integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
 
 json5@^2.1.0:
   version "2.1.0"
@@ -3183,21 +3059,20 @@ json5@^2.1.0:
 jsprim@^1.2.2:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
   dependencies:
     assert-plus "1.0.0"
     extsprintf "1.3.0"
     json-schema "0.2.3"
     verror "1.10.0"
 
-jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
+jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb"
+  integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==
   dependencies:
     array-includes "^3.0.3"
-
-kew@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+    object.assign "^4.1.0"
 
 kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
   version "3.2.2"
@@ -3228,11 +3103,6 @@ known-css-properties@^0.11.0:
   resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.11.0.tgz#0da784f115ea77c76b81536d7052e90ee6c86a8a"
   integrity sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==
 
-known-css-properties@^0.6.0:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.6.1.tgz#31b5123ad03d8d1a3f36bd4155459c981173478b"
-  integrity sha512-nQRpMcHm1cQ6gmztdvLcIvxocznSMqH/y6XtERrWrHaymOYdDGroRqetJvJycxGEr1aakXiigDgn7JnzuXlk6A==
-
 leven@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
@@ -3241,6 +3111,7 @@ leven@^2.1.0:
 levn@^0.3.0, levn@~0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
   dependencies:
     prelude-ls "~1.1.2"
     type-check "~0.3.2"
@@ -3248,6 +3119,7 @@ levn@^0.3.0, levn@~0.3.0:
 load-json-file@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+  integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
   dependencies:
     graceful-fs "^4.1.2"
     parse-json "^2.2.0"
@@ -3275,14 +3147,17 @@ locate-path@^2.0.0:
 lodash._arraycopy@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
+  integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=
 
 lodash._arrayeach@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
+  integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754=
 
 lodash._baseassign@^3.0.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+  integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
   dependencies:
     lodash._basecopy "^3.0.0"
     lodash.keys "^3.0.0"
@@ -3290,6 +3165,7 @@ lodash._baseassign@^3.0.0:
 lodash._baseclone@^3.0.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7"
+  integrity sha1-MDUZv2OT/n5C802LYw73eU41Qrc=
   dependencies:
     lodash._arraycopy "^3.0.0"
     lodash._arrayeach "^3.0.0"
@@ -3298,113 +3174,78 @@ lodash._baseclone@^3.0.0:
     lodash.isarray "^3.0.0"
     lodash.keys "^3.0.0"
 
-lodash._baseclone@^4.0.0:
-  version "4.5.7"
-  resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-4.5.7.tgz#ce42ade08384ef5d62fa77c30f61a46e686f8434"
-
 lodash._basecopy@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
-
-lodash._basecreate@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+  integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
 
 lodash._basefor@^3.0.0:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
+  integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=
 
 lodash._bindcallback@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+  integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
 
 lodash._getnative@^3.0.0:
   version "3.9.1"
   resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+  integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
 
 lodash._isiterateecall@^3.0.0:
   version "3.0.9"
   resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
-
-lodash._stack@^4.0.0:
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/lodash._stack/-/lodash._stack-4.1.3.tgz#751aa76c1b964b047e76d14fc72a093fcb5e2dd0"
+  integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
 
 lodash.clone@3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043"
+  integrity sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=
   dependencies:
     lodash._baseclone "^3.0.0"
     lodash._bindcallback "^3.0.0"
     lodash._isiterateecall "^3.0.0"
 
-lodash.create@3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
-  dependencies:
-    lodash._baseassign "^3.0.0"
-    lodash._basecreate "^3.0.0"
-    lodash._isiterateecall "^3.0.0"
-
-lodash.defaultsdeep@4.3.2:
-  version "4.3.2"
-  resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.3.2.tgz#6c1a586e6c5647b0e64e2d798141b8836158be8a"
-  dependencies:
-    lodash._baseclone "^4.0.0"
-    lodash._stack "^4.0.0"
-    lodash.isplainobject "^4.0.0"
-    lodash.keysin "^4.0.0"
-    lodash.mergewith "^4.0.0"
-    lodash.rest "^4.0.0"
+lodash.defaultsdeep@^4.6.1:
+  version "4.6.1"
+  resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
+  integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
 
 lodash.isarguments@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+  integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
 
 lodash.isarray@^3.0.0:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-
-lodash.isplainobject@^4.0.0:
-  version "4.0.6"
-  resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+  integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
 
 lodash.keys@^3.0.0:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+  integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
   dependencies:
     lodash._getnative "^3.0.0"
     lodash.isarguments "^3.0.0"
     lodash.isarray "^3.0.0"
 
-lodash.keysin@^4.0.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-4.2.0.tgz#8cc3fb35c2d94acc443a1863e02fa40799ea6f28"
-
-lodash.mergewith@^4.0.0:
-  version "4.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
-
-lodash.rest@^4.0.0:
-  version "4.0.5"
-  resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa"
-
-lodash@4.17.4:
-  version "4.17.4"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+lodash.merge@^4.6.2:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
-lodash@^4.1.0, lodash@^4.3.0:
-  version "4.17.10"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
-
-lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4:
-  version "4.17.11"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
-  integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+lodash@^4.1.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0:
+  version "4.17.15"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
 
 log-symbols@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+  integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
   dependencies:
     chalk "^1.0.0"
 
@@ -3416,23 +3257,17 @@ log-symbols@^2.0.0, log-symbols@^2.2.0:
     chalk "^2.0.1"
 
 longest-streak@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e"
-  integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105"
+  integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==
 
-loose-envify@^1.0.0:
+loose-envify@^1.0.0, loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
   integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
   dependencies:
     js-tokens "^3.0.0 || ^4.0.0"
 
-loose-envify@^1.3.1:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
-  dependencies:
-    js-tokens "^3.0.0"
-
 loud-rejection@^1.0.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
@@ -3441,17 +3276,14 @@ loud-rejection@^1.0.0:
     currently-unhandled "^0.4.1"
     signal-exit "^3.0.0"
 
-lru-cache@^4.0.1:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f"
+lru-cache@^4.0.1, lru-cache@^4.1.2:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
   dependencies:
     pseudomap "^1.0.2"
     yallist "^2.1.2"
 
-lru-cache@~2.6.5:
-  version "2.6.5"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5"
-
 map-cache@^0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
@@ -3475,47 +3307,27 @@ map-visit@^1.0.0:
     object-visit "^1.0.0"
 
 markdown-escapes@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122"
-  integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5"
+  integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==
 
 markdown-table@^1.1.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786"
-  integrity sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==
-
-math-random@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
-  integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w=
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60"
+  integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==
 
 mathml-tag-names@^2.0.1:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz#490b70e062ee24636536e3d9481e333733d00f2c"
-  integrity sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc"
+  integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==
 
 mdast-util-compact@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649"
-  integrity sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz#98a25cc8a7865761a41477b3a87d1dcef0b1e79d"
+  integrity sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==
   dependencies:
     unist-util-visit "^1.1.0"
 
-meow@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
-  integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
-  dependencies:
-    camelcase-keys "^4.0.0"
-    decamelize-keys "^1.0.0"
-    loud-rejection "^1.0.0"
-    minimist "^1.1.3"
-    minimist-options "^3.0.1"
-    normalize-package-data "^2.3.4"
-    read-pkg-up "^3.0.0"
-    redent "^2.0.0"
-    trim-newlines "^2.0.0"
-
 meow@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4"
@@ -3532,32 +3344,14 @@ meow@^5.0.0:
     yargs-parser "^10.0.0"
 
 merge2@^1.2.3:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
-  integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
-
-micromatch@^2.3.11:
-  version "2.3.11"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
-  integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
-  dependencies:
-    arr-diff "^2.0.0"
-    array-unique "^0.2.1"
-    braces "^1.8.2"
-    expand-brackets "^0.1.4"
-    extglob "^0.3.1"
-    filename-regex "^2.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.1"
-    kind-of "^3.0.2"
-    normalize-path "^2.0.1"
-    object.omit "^2.0.0"
-    parse-glob "^3.0.4"
-    regex-cache "^0.4.2"
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3"
+  integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==
 
 micromatch@^3.1.10, micromatch@^3.1.4:
   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"
@@ -3573,27 +3367,24 @@ micromatch@^3.1.10, micromatch@^3.1.4:
     snapdragon "^0.8.1"
     to-regex "^3.0.2"
 
-mime-db@~1.33.0:
-  version "1.33.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+mime-db@1.40.0:
+  version "1.40.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+  integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
 
-mime-types@^2.1.12, mime-types@~2.1.17:
-  version "2.1.18"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+mime-types@^2.1.12, mime-types@~2.1.19:
+  version "2.1.24"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+  integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
   dependencies:
-    mime-db "~1.33.0"
+    mime-db "1.40.0"
 
 mimic-fn@^1.0.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+  integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
 
-minimatch@3.0.3:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
-  dependencies:
-    brace-expansion "^1.0.0"
-
-minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -3618,18 +3409,20 @@ minimist@1.1.x:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
   integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
 
-minimist@^1.1.3, minimist@^1.2.0:
+minimist@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
 
 minimist@~0.0.1:
   version "0.0.10"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+  integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
 
 minipass@^2.2.1, minipass@^2.3.5:
-  version "2.3.5"
-  resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
-  integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857"
+  integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q==
   dependencies:
     safe-buffer "^5.1.2"
     yallist "^3.0.0"
@@ -3642,48 +3435,41 @@ minizlib@^1.2.1:
     minipass "^2.2.1"
 
 mixin-deep@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
-  integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+  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.0:
-  version "0.5.0"
-  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
-  dependencies:
-    minimist "0.0.8"
-
 mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
   dependencies:
     minimist "0.0.8"
 
 mkpath@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d"
+  integrity sha1-67Opd+evHGg65v2hK1Raa6bFhT0=
 
-mocha-nightwatch@3.2.2:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/mocha-nightwatch/-/mocha-nightwatch-3.2.2.tgz#91bcb9b3bde057dd7677c78125e491e58d66647c"
+mocha@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
+  integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
   dependencies:
-    browser-stdout "1.3.0"
-    commander "2.9.0"
-    debug "2.2.0"
-    diff "1.4.0"
+    browser-stdout "1.3.1"
+    commander "2.15.1"
+    debug "3.1.0"
+    diff "3.5.0"
     escape-string-regexp "1.0.5"
-    glob "7.0.5"
-    growl "1.9.2"
-    json3 "3.3.2"
-    lodash.create "3.1.1"
+    glob "7.1.2"
+    growl "1.10.5"
+    he "1.1.1"
+    minimatch "3.0.4"
     mkdirp "0.5.1"
-    supports-color "3.1.2"
-
-ms@0.7.1:
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+    supports-color "5.4.0"
 
 ms@2.0.0:
   version "2.0.0"
@@ -3691,13 +3477,14 @@ ms@2.0.0:
   integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
 
 ms@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
-  integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
 
 mute-stream@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+  integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
 
 nan@^2.12.1:
   version "2.14.0"
@@ -3724,6 +3511,7 @@ nanomatch@^1.2.9:
 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=
 
 needle@^2.2.1:
   version "2.4.0"
@@ -3734,24 +3522,34 @@ needle@^2.2.1:
     iconv-lite "^0.4.4"
     sax "^1.2.4"
 
-netmask@~1.0.4:
+netmask@^1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
+  integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=
+
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
 
-nightwatch@^0.9.20:
-  version "0.9.21"
-  resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-0.9.21.tgz#9e794a7514b4fd5f46602d368e50515232ab9e90"
+nightwatch@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-1.2.1.tgz#25cb8f54473fd18714bfb99cc160a58e76cbdfa7"
+  integrity sha512-y9ihK6Xmo6A32B6zG4XlWumF5f6gIE5QQP54o4PHpnjC4+CA9xwVMtXZL6QlnNYlqS0n34Pk/wpvKL2znjCh0g==
   dependencies:
-    chai-nightwatch "~0.1.x"
-    ejs "2.5.7"
+    assertion-error "^1.1.0"
+    chai-nightwatch "^0.3.0"
+    dotenv "7.0.0"
+    ejs "^2.5.9"
     lodash.clone "3.0.3"
-    lodash.defaultsdeep "4.3.2"
-    minimatch "3.0.3"
+    lodash.defaultsdeep "^4.6.1"
+    lodash.merge "^4.6.2"
+    minimatch "3.0.4"
     mkpath "1.0.0"
-    mocha-nightwatch "3.2.2"
-    optimist "0.6.1"
-    proxy-agent "2.0.0"
-    q "1.4.1"
+    optimist "^0.6.1"
+    proxy-agent "^3.0.0"
+  optionalDependencies:
+    mocha "^5.2.0"
 
 node-pre-gyp@^0.12.0:
   version "0.12.0"
@@ -3769,10 +3567,10 @@ node-pre-gyp@^0.12.0:
     semver "^5.3.0"
     tar "^4"
 
-node-releases@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.3.tgz#aad9ce0dcb98129c753f772c0aa01360fb90fbd2"
-  integrity sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==
+node-releases@^1.1.25:
+  version "1.1.28"
+  resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.28.tgz#503c3c70d0e4732b84e7aaa2925fbdde10482d4a"
+  integrity sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g==
   dependencies:
     semver "^5.3.0"
 
@@ -3785,18 +3583,19 @@ nopt@^4.0.1:
     osenv "^0.1.4"
 
 normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
-  integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
+  version "2.5.0"
+  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+  integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
   dependencies:
     hosted-git-info "^2.1.4"
-    is-builtin-module "^1.0.0"
+    resolve "^1.10.0"
     semver "2 || 3 || 4 || 5"
     validate-npm-package-license "^3.0.1"
 
-normalize-path@^2.0.1, normalize-path@^2.1.1:
+normalize-path@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
   dependencies:
     remove-trailing-separator "^1.0.1"
 
@@ -3821,9 +3620,9 @@ npm-bundled@^1.0.1:
   integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
 
 npm-packlist@^1.1.6:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
-  integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
+  integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
   dependencies:
     ignore-walk "^3.0.1"
     npm-bundled "^1.0.1"
@@ -3848,13 +3647,15 @@ number-is-nan@^1.0.0:
   resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
   integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
 
-oauth-sign@~0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+oauth-sign@~0.9.0:
+  version "0.9.0"
+  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
 
 object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
   version "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"
@@ -3865,9 +3666,10 @@ object-copy@^0.1.0:
     define-property "^0.2.5"
     kind-of "^3.0.3"
 
-object-keys@^1.0.11, object-keys@^1.0.8:
-  version "1.0.11"
-  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+object-keys@^1.0.11, object-keys@^1.0.12:
+  version "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"
@@ -3879,28 +3681,32 @@ object-visit@^1.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"
+  integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
   dependencies:
     define-properties "^1.1.2"
     function-bind "^1.1.1"
     has-symbols "^1.0.0"
     object-keys "^1.0.11"
 
-object.entries@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
+object.entries@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519"
+  integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==
   dependencies:
-    define-properties "^1.1.2"
-    es-abstract "^1.6.1"
-    function-bind "^1.1.0"
-    has "^1.0.1"
+    define-properties "^1.1.3"
+    es-abstract "^1.12.0"
+    function-bind "^1.1.1"
+    has "^1.0.3"
 
-object.omit@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
-  integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+object.fromentries@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab"
+  integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==
   dependencies:
-    for-own "^0.1.4"
-    is-extendable "^0.1.1"
+    define-properties "^1.1.2"
+    es-abstract "^1.11.0"
+    function-bind "^1.1.1"
+    has "^1.0.1"
 
 object.pick@^1.3.0:
   version "1.3.0"
@@ -3909,6 +3715,16 @@ object.pick@^1.3.0:
   dependencies:
     isobject "^3.0.1"
 
+object.values@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
+  integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.12.0"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+
 once@^1.3.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -3919,12 +3735,14 @@ once@^1.3.0:
 onetime@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+  integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
   dependencies:
     mimic-fn "^1.0.0"
 
-optimist@0.6.1:
+optimist@^0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
   dependencies:
     minimist "~0.0.1"
     wordwrap "~0.0.2"
@@ -3932,6 +3750,7 @@ optimist@0.6.1:
 optionator@^0.8.1, optionator@^0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+  integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
   dependencies:
     deep-is "~0.1.3"
     fast-levenshtein "~2.0.4"
@@ -3948,6 +3767,7 @@ os-homedir@^1.0.0:
 os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
 
 osenv@^0.1.4:
   version "0.1.5"
@@ -3971,43 +3791,45 @@ p-locate@^2.0.0:
   dependencies:
     p-limit "^1.1.0"
 
-p-map@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+p-map@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+  integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
 
 p-try@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
   integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
 
-pac-proxy-agent@1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d"
-  dependencies:
-    agent-base "2"
-    debug "2"
-    extend "3"
-    get-uri "2"
-    http-proxy-agent "1"
-    https-proxy-agent "1"
-    pac-resolver "~2.0.0"
-    raw-body "2"
-    socks-proxy-agent "2"
-
-pac-resolver@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd"
+pac-proxy-agent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz#11d578b72a164ad74bf9d5bac9ff462a38282432"
+  integrity sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q==
+  dependencies:
+    agent-base "^4.2.0"
+    debug "^3.1.0"
+    get-uri "^2.0.0"
+    http-proxy-agent "^2.1.0"
+    https-proxy-agent "^2.2.1"
+    pac-resolver "^3.0.0"
+    raw-body "^2.2.0"
+    socks-proxy-agent "^4.0.1"
+
+pac-resolver@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26"
+  integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==
   dependencies:
-    co "~3.0.6"
-    degenerator "~1.0.2"
-    ip "1.0.1"
-    netmask "~1.0.4"
-    thunkify "~2.1.1"
+    co "^4.6.0"
+    degenerator "^1.0.4"
+    ip "^1.1.5"
+    netmask "^1.0.6"
+    thunkify "^2.1.2"
 
 parse-entities@^1.0.2, parse-entities@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4"
-  integrity sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+  integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
   dependencies:
     character-entities "^1.0.0"
     character-entities-legacy "^1.0.0"
@@ -4016,19 +3838,10 @@ parse-entities@^1.0.2, parse-entities@^1.1.0:
     is-decimal "^1.0.0"
     is-hexadecimal "^1.0.0"
 
-parse-glob@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
-  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
-  dependencies:
-    glob-base "^0.3.0"
-    is-dotfile "^1.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.0"
-
 parse-json@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
   dependencies:
     error-ex "^1.2.0"
 
@@ -4050,12 +3863,6 @@ path-dirname@^1.0.0:
   resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
   integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
 
-path-exists@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
-  dependencies:
-    pinkie-promise "^2.0.0"
-
 path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -4064,13 +3871,19 @@ path-exists@^3.0.0:
 path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
 
-path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+path-is-inside@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
   integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
 
-path-parse@^1.0.5, path-parse@^1.0.6:
+path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
   integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
@@ -4078,6 +3891,7 @@ path-parse@^1.0.5, path-parse@^1.0.6:
 path-type@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+  integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
   dependencies:
     pify "^2.0.0"
 
@@ -4091,10 +3905,12 @@ path-type@^3.0.0:
 pend@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
 
 performance-now@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
 
 pify@^2.0.0:
   version "2.3.0"
@@ -4123,39 +3939,30 @@ pinkie@^2.0.0:
   resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
   integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
 
-pkg-dir@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+pkg-dir@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+  integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
   dependencies:
-    find-up "^1.0.0"
+    find-up "^2.1.0"
 
 plur@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
+  integrity sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=
   dependencies:
     irregular-plurals "^1.0.0"
 
 pluralize@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+  integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
 
 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-html@^0.18.0:
-  version "0.18.0"
-  resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.18.0.tgz#992a84117cc56f9f28915fbadba576489641e652"
-  integrity sha512-7llFZ5hlINmUu/8iUBIXCTZ4OMyGB+NBeb7jDadXrH9g+hpcUEBhZv3rjqesmOsHNC3bITqx1EkVz77RuHJygw==
-  dependencies:
-    "@babel/core" "^7.0.0-beta.42"
-    "@babel/traverse" "^7.0.0-beta.42"
-    babylon "^7.0.0-beta.42"
-    htmlparser2 "^3.9.2"
-    remark "^9.0.0"
-    unist-util-find-all-after "^1.0.1"
-
 postcss-html@^0.36.0:
   version "0.36.0"
   resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204"
@@ -4164,25 +3971,18 @@ postcss-html@^0.36.0:
     htmlparser2 "^3.10.0"
 
 postcss-jsx@^0.36.0:
-  version "0.36.0"
-  resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.0.tgz#b7685ed3d070a175ef0aa48f83d9015bd772c82d"
-  integrity sha512-/lWOSXSX5jlITCKFkuYU2WLFdrncZmjSVyNpHAunEgirZXLwI8RjU556e3Uz4mv0WVHnJA9d3JWb36lK9Yx99g==
+  version "0.36.3"
+  resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.3.tgz#c91113eae2935a1c94f00353b788ece9acae3f46"
+  integrity sha512-yV8Ndo6KzU8eho5mCn7LoLUGPkXrRXRjhMpX4AaYJ9wLJPv099xbtpbRQ8FrPnzVxb/cuMebbPR7LweSt+hTfA==
   dependencies:
-    "@babel/core" ">=7.1.0"
-
-postcss-less@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.5.tgz#a6f0ce180cf3797eeee1d4adc0e9e6d6db665609"
-  integrity sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A==
-  dependencies:
-    postcss "^5.2.16"
+    "@babel/core" ">=7.2.2"
 
 postcss-less@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc"
-  integrity sha512-+fDH2A9zV8B4gFu3Idhq8ma09/mMBXXc03T2lL9CHjBQqKrfUit+TrQrnojc6Y4k7N4E+tyE1Uj5U1tcoKtXLQ==
+  version "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.3"
+    postcss "^7.0.14"
 
 postcss-markdown@^0.36.0:
   version "0.36.0"
@@ -4200,22 +4000,13 @@ postcss-media-query-parser@^0.2.3:
 postcss-reporter@^1.3.3:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-1.4.1.tgz#c136f0a5b161915f379dd3765c61075f7e7b9af2"
+  integrity sha1-wTbwpbFhkV83ndN2XGEHX357mvI=
   dependencies:
     chalk "^1.0.0"
     lodash "^4.1.0"
     log-symbols "^1.0.2"
     postcss "^5.0.0"
 
-postcss-reporter@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3"
-  integrity sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==
-  dependencies:
-    chalk "^2.0.1"
-    lodash "^4.17.4"
-    log-symbols "^2.0.0"
-    postcss "^6.0.8"
-
 postcss-reporter@^6.0.0:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f"
@@ -4231,13 +4022,6 @@ postcss-resolve-nested-selector@^0.1.1:
   resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
   integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=
 
-postcss-safe-parser@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142"
-  integrity sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=
-  dependencies:
-    postcss "^6.0.6"
-
 postcss-safe-parser@^4.0.0:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea"
@@ -4245,7 +4029,7 @@ postcss-safe-parser@^4.0.0:
   dependencies:
     postcss "^7.0.0"
 
-postcss-sass@^0.3.0, postcss-sass@^0.3.5:
+postcss-sass@^0.3.5:
   version "0.3.5"
   resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c"
   integrity sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==
@@ -4253,13 +4037,6 @@ postcss-sass@^0.3.0, postcss-sass@^0.3.5:
     gonzales-pe "^4.2.3"
     postcss "^7.0.1"
 
-postcss-scss@^1.0.2:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.6.tgz#ab903f3bb20161bc177896462293a53d4bff5f7a"
-  integrity sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww==
-  dependencies:
-    postcss "^6.0.23"
-
 postcss-scss@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1"
@@ -4270,6 +4047,7 @@ postcss-scss@^2.0.0:
 postcss-selector-parser@^2.0.0:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+  integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=
   dependencies:
     flatten "^1.0.2"
     indexes-of "^1.0.1"
@@ -4289,42 +4067,30 @@ postcss-syntax@^0.36.2:
   resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c"
   integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==
 
-postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1:
+postcss-value-parser@^3.3.0:
   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==
 
-postcss@^5.0.0, postcss@^5.0.18, postcss@^5.2.16:
+postcss-value-parser@^4.0.0:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9"
+  integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==
+
+postcss@^5.0.0, postcss@^5.0.18:
   version "5.2.18"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+  integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
   dependencies:
     chalk "^1.1.3"
     js-base64 "^2.1.9"
     source-map "^0.5.6"
     supports-color "^3.2.3"
 
-postcss@^6.0.14, postcss@^6.0.16, postcss@^6.0.23, postcss@^6.0.6, postcss@^6.0.8:
-  version "6.0.23"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
-  integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
-  dependencies:
-    chalk "^2.4.1"
-    source-map "^0.6.1"
-    supports-color "^5.4.0"
-
-postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.7:
-  version "7.0.8"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.8.tgz#2a3c5f2bdd00240cd0d0901fd998347c93d36696"
-  integrity sha512-WudsIzuTKRw9IInRTPBgVXJ7DKR26HT09Rxp0g3w0Fqh3TUtYICcUmvC0xURj04o3vdcDtnjCAUCECg/p341iQ==
-  dependencies:
-    chalk "^2.4.2"
-    source-map "^0.6.1"
-    supports-color "^6.0.0"
-
-postcss@^7.0.13:
-  version "7.0.14"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5"
-  integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.7:
+  version "7.0.17"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f"
+  integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==
   dependencies:
     chalk "^2.4.2"
     source-map "^0.6.1"
@@ -4333,91 +4099,94 @@ postcss@^7.0.13:
 prelude-ls@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-preserve@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-  integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 
 prettier@^1.14.0:
-  version "1.14.0"
-  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.0.tgz#847c235522035fd988100f1f43cf20a7d24f9372"
+  version "1.18.2"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
+  integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==
 
 private@^0.1.6, private@^0.1.8:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+  integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
 
 process-nextick-args@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
-  integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+  integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
 
 progress@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 
-prop-types@^15.6.2:
-  version "15.6.2"
-  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
+prop-types@^15.7.2:
+  version "15.7.2"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+  integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
   dependencies:
-    loose-envify "^1.3.1"
+    loose-envify "^1.4.0"
     object-assign "^4.1.1"
+    react-is "^16.8.1"
 
-proxy-agent@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499"
+proxy-agent@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.0.tgz#3cf86ee911c94874de4359f37efd9de25157c113"
+  integrity sha512-IkbZL4ClW3wwBL/ABFD2zJ8iP84CY0uKMvBPk/OceQe/cEjrxzN1pMHsLwhbzUoRhG9QbSxYC+Z7LBkTiBNvrA==
   dependencies:
-    agent-base "2"
-    debug "2"
-    extend "3"
-    http-proxy-agent "1"
-    https-proxy-agent "1"
-    lru-cache "~2.6.5"
-    pac-proxy-agent "1"
-    socks-proxy-agent "2"
+    agent-base "^4.2.0"
+    debug "^3.1.0"
+    http-proxy-agent "^2.1.0"
+    https-proxy-agent "^2.2.1"
+    lru-cache "^4.1.2"
+    pac-proxy-agent "^3.0.0"
+    proxy-from-env "^1.0.0"
+    socks-proxy-agent "^4.0.1"
+
+proxy-from-env@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
+  integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=
 
 pseudomap@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd"
+  integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==
 
 punycode@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+  integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
 
 punycode@^2.1.0:
   version "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.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
-
-qs@~6.5.1:
+qs@~6.5.2:
   version "6.5.2"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
 
 quick-lru@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
   integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
 
-randomatic@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
-  integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
-  dependencies:
-    is-number "^4.0.0"
-    kind-of "^6.0.0"
-    math-random "^1.0.1"
-
-raw-body@2:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+raw-body@^2.2.0:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
+  integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
   dependencies:
-    bytes "3.0.0"
-    http-errors "1.6.2"
-    iconv-lite "0.4.19"
+    bytes "3.1.0"
+    http-errors "1.7.3"
+    iconv-lite "0.4.24"
     unpipe "1.0.0"
 
 rc@^1.2.7:
@@ -4430,15 +4199,22 @@ rc@^1.2.7:
     minimist "^1.2.0"
     strip-json-comments "~2.0.1"
 
+react-is@^16.8.1:
+  version "16.9.0"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
+  integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
+
 read-file-stdin@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61"
+  integrity sha1-JezP86FTtoCa+ssj7hU4fbng7mE=
   dependencies:
     gather-stream "^1.0.0"
 
 read-pkg-up@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+  integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
   dependencies:
     find-up "^2.0.0"
     read-pkg "^2.0.0"
@@ -4454,6 +4230,7 @@ read-pkg-up@^3.0.0:
 read-pkg@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+  integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
   dependencies:
     load-json-file "^2.0.0"
     normalize-package-data "^2.3.2"
@@ -4471,15 +4248,26 @@ read-pkg@^3.0.0:
 readable-stream@1.1.x:
   version "1.1.14"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+  integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
   dependencies:
     core-util-is "~1.0.0"
     inherits "~2.0.1"
     isarray "0.0.1"
     string_decoder "~0.10.x"
 
-readable-stream@2, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2:
+readable-stream@3, readable-stream@^3.1.1:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
+  integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+  integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
   dependencies:
     core-util-is "~1.0.0"
     inherits "~2.0.3"
@@ -4489,24 +4277,6 @@ readable-stream@2, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stre
     string_decoder "~1.1.1"
     util-deprecate "~1.0.1"
 
-readable-stream@^3.0.6:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06"
-  integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
-readable-stream@^3.1.1:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d"
-  integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
 readdirp@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
@@ -4525,28 +4295,29 @@ redent@^2.0.0:
     strip-indent "^2.0.0"
 
 regenerate@^1.2.1:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+  integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
 
 regenerator-runtime@^0.11.0:
   version "0.11.1"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.2:
+  version "0.13.3"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+  integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
 
 regenerator-transform@^0.10.0:
   version "0.10.1"
   resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+  integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
   dependencies:
     babel-runtime "^6.18.0"
     babel-types "^6.19.0"
     private "^0.1.6"
 
-regex-cache@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
-  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
-  dependencies:
-    is-equal-shallow "^0.1.3"
-
 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"
@@ -4558,10 +4329,12 @@ regex-not@^1.0.0, regex-not@^1.0.2:
 regexpp@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"
+  integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==
 
 regexpu-core@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+  integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
   dependencies:
     regenerate "^1.2.1"
     regjsgen "^0.2.0"
@@ -4570,34 +4343,15 @@ regexpu-core@^2.0.0:
 regjsgen@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+  integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
 
 regjsparser@^0.1.4:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+  integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
   dependencies:
     jsesc "~0.5.0"
 
-remark-parse@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95"
-  integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==
-  dependencies:
-    collapse-white-space "^1.0.2"
-    is-alphabetical "^1.0.0"
-    is-decimal "^1.0.0"
-    is-whitespace-character "^1.0.0"
-    is-word-character "^1.0.0"
-    markdown-escapes "^1.0.0"
-    parse-entities "^1.1.0"
-    repeat-string "^1.5.4"
-    state-toggle "^1.0.0"
-    trim "0.0.1"
-    trim-trailing-lines "^1.0.0"
-    unherit "^1.0.4"
-    unist-util-remove-position "^1.0.0"
-    vfile-location "^2.0.0"
-    xtend "^4.0.1"
-
 remark-parse@^6.0.0:
   version "6.0.3"
   resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a"
@@ -4619,26 +4373,6 @@ remark-parse@^6.0.0:
     vfile-location "^2.0.0"
     xtend "^4.0.1"
 
-remark-stringify@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba"
-  integrity sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==
-  dependencies:
-    ccount "^1.0.0"
-    is-alphanumeric "^1.0.0"
-    is-decimal "^1.0.0"
-    is-whitespace-character "^1.0.0"
-    longest-streak "^2.0.1"
-    markdown-escapes "^1.0.0"
-    markdown-table "^1.1.0"
-    mdast-util-compact "^1.0.0"
-    parse-entities "^1.0.2"
-    repeat-string "^1.5.4"
-    state-toggle "^1.0.0"
-    stringify-entities "^1.0.1"
-    unherit "^1.0.4"
-    xtend "^4.0.1"
-
 remark-stringify@^6.0.0:
   version "6.0.4"
   resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088"
@@ -4668,15 +4402,6 @@ remark@^10.0.1:
     remark-stringify "^6.0.0"
     unified "^7.0.0"
 
-remark@^9.0.0:
-  version "9.0.0"
-  resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60"
-  integrity sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==
-  dependencies:
-    remark-parse "^5.0.0"
-    remark-stringify "^5.0.0"
-    unified "^6.0.0"
-
 remove-trailing-separator@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
@@ -4687,7 +4412,7 @@ repeat-element@^1.1.2:
   resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
   integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
 
-repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
+repeat-string@^1.5.4, repeat-string@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
   integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
@@ -4695,6 +4420,7 @@ repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
 repeating@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+  integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
   dependencies:
     is-finite "^1.0.0"
 
@@ -4703,41 +4429,36 @@ replace-ext@1.0.0:
   resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
   integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
 
-request@^2.85.0:
-  version "2.85.0"
-  resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa"
+request@^2.88.0:
+  version "2.88.0"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+  integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
   dependencies:
     aws-sign2 "~0.7.0"
-    aws4 "^1.6.0"
+    aws4 "^1.8.0"
     caseless "~0.12.0"
-    combined-stream "~1.0.5"
-    extend "~3.0.1"
+    combined-stream "~1.0.6"
+    extend "~3.0.2"
     forever-agent "~0.6.1"
-    form-data "~2.3.1"
-    har-validator "~5.0.3"
-    hawk "~6.0.2"
+    form-data "~2.3.2"
+    har-validator "~5.1.0"
     http-signature "~1.2.0"
     is-typedarray "~1.0.0"
     isstream "~0.1.2"
     json-stringify-safe "~5.0.1"
-    mime-types "~2.1.17"
-    oauth-sign "~0.8.2"
+    mime-types "~2.1.19"
+    oauth-sign "~0.9.0"
     performance-now "^2.1.0"
-    qs "~6.5.1"
-    safe-buffer "^5.1.1"
-    stringstream "~0.0.5"
-    tough-cookie "~2.3.3"
+    qs "~6.5.2"
+    safe-buffer "^5.1.2"
+    tough-cookie "~2.4.3"
     tunnel-agent "^0.6.0"
-    uuid "^3.1.0"
-
-require-from-string@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
-  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+    uuid "^3.3.2"
 
 require-uncached@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+  integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
   dependencies:
     caller-path "^0.1.0"
     resolve-from "^1.0.0"
@@ -4745,6 +4466,7 @@ require-uncached@^1.0.3:
 resolve-from@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+  integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
 
 resolve-from@^3.0.0:
   version "3.0.0"
@@ -4761,22 +4483,17 @@ resolve-url@^0.2.1:
   resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
   integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
 
-resolve@^1.3.2:
-  version "1.9.0"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06"
-  integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==
+resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
+  integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
   dependencies:
     path-parse "^1.0.6"
 
-resolve@^1.5.0, resolve@^1.6.0:
-  version "1.7.1"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3"
-  dependencies:
-    path-parse "^1.0.5"
-
 restore-cursor@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+  integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
   dependencies:
     onetime "^2.0.0"
     signal-exit "^3.0.2"
@@ -4786,32 +4503,48 @@ ret@~0.1.10:
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
   integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
 
-rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.6.1, rimraf@~2.6.2:
+rimraf@2.6.3, rimraf@~2.6.2:
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
   integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
   dependencies:
     glob "^7.1.3"
 
+rimraf@^2.6.1, rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
 run-async@^2.2.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+  integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
   dependencies:
     is-promise "^2.1.0"
 
 rx-lite-aggregates@^4.0.8:
   version "4.0.8"
   resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+  integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
   dependencies:
     rx-lite "*"
 
 rx-lite@*, rx-lite@^4.0.8:
   version "4.0.8"
   resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+  integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+  integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
 
-safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
 safe-regex@^1.1.0:
   version "1.1.0"
@@ -4820,67 +4553,52 @@ safe-regex@^1.1.0:
   dependencies:
     ret "~0.1.10"
 
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", 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==
 
-"semver@2 || 3 || 4 || 5", semver@^5.4.1:
-  version "5.6.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
-  integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-
-semver@^5.3.0:
-  version "5.7.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
-  integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-
-semver@~5.0.1:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 
 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@^0.4.3:
-  version "0.4.3"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
-  integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.1"
-    to-object-path "^0.3.0"
-
-set-value@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
-  integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+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.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+setprototypeof@1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+  integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
 
 shebang-command@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
   dependencies:
     shebang-regex "^1.0.0"
 
 shebang-regex@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+  integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
 
 signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
@@ -4904,18 +4622,19 @@ slice-ansi@1.0.0:
   dependencies:
     is-fullwidth-code-point "^2.0.0"
 
-slice-ansi@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7"
-  integrity sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==
+slice-ansi@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+  integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
   dependencies:
     ansi-styles "^3.2.0"
     astral-regex "^1.0.0"
     is-fullwidth-code-point "^2.0.0"
 
-smart-buffer@^1.0.13:
-  version "1.1.15"
-  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"
+smart-buffer@4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d"
+  integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==
 
 snapdragon-node@^2.0.1:
   version "2.1.1"
@@ -4947,26 +4666,21 @@ snapdragon@^0.8.1:
     source-map-resolve "^0.5.0"
     use "^3.1.0"
 
-sntp@2.x.x:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
-  dependencies:
-    hoek "4.x.x"
-
-socks-proxy-agent@2:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3"
+socks-proxy-agent@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386"
+  integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==
   dependencies:
-    agent-base "2"
-    extend "3"
-    socks "~1.1.5"
+    agent-base "~4.2.1"
+    socks "~2.3.2"
 
-socks@~1.1.5:
-  version "1.1.10"
-  resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a"
+socks@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e"
+  integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==
   dependencies:
-    ip "^1.1.4"
-    smart-buffer "^1.0.13"
+    ip "^1.1.5"
+    smart-buffer "4.0.2"
 
 source-map-resolve@^0.5.0:
   version "0.5.2"
@@ -4982,6 +4696,7 @@ source-map-resolve@^0.5.0:
 source-map-support@^0.4.15:
   version "0.4.18"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+  integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
   dependencies:
     source-map "^0.5.6"
 
@@ -4993,10 +4708,12 @@ source-map-url@^0.4.0:
 source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
 
 source-map@^0.6.1, source-map@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
 
 spdx-correct@^3.0.0:
   version "3.1.0"
@@ -5020,14 +4737,9 @@ spdx-expression-parse@^3.0.0:
     spdx-license-ids "^3.0.0"
 
 spdx-license-ids@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e"
-  integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
-
-specificity@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42"
-  integrity sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+  integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
 
 specificity@^0.4.1:
   version "0.4.1"
@@ -5047,23 +4759,24 @@ sprintf-js@~1.0.2:
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
 sshpk@^1.7.0:
-  version "1.14.1"
-  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb"
+  version "1.16.1"
+  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
   dependencies:
     asn1 "~0.2.3"
     assert-plus "^1.0.0"
-    dashdash "^1.12.0"
-    getpass "^0.1.1"
-  optionalDependencies:
     bcrypt-pbkdf "^1.0.0"
+    dashdash "^1.12.0"
     ecc-jsbn "~0.1.1"
+    getpass "^0.1.1"
     jsbn "~0.1.0"
+    safer-buffer "^2.0.2"
     tweetnacl "~0.14.0"
 
 state-toggle@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a"
-  integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc"
+  integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==
 
 static-extend@^0.1.1:
   version "0.1.2"
@@ -5073,9 +4786,10 @@ static-extend@^0.1.1:
     define-property "^0.2.5"
     object-copy "^0.1.0"
 
-"statuses@>= 1.3.1 < 2":
+"statuses@>= 1.5.0 < 2":
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+  integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
 
 string-width@^1.0.1:
   version "1.0.2"
@@ -5104,15 +4818,16 @@ string-width@^3.0.0:
     strip-ansi "^5.1.0"
 
 string_decoder@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
-  integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
   dependencies:
-    safe-buffer "~5.1.0"
+    safe-buffer "~5.2.0"
 
 string_decoder@~0.10.x:
   version "0.10.31"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+  integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
 
 string_decoder@~1.1.1:
   version "1.1.1"
@@ -5131,10 +4846,6 @@ stringify-entities@^1.0.1:
     is-alphanumerical "^1.0.0"
     is-hexadecimal "^1.0.0"
 
-stringstream@~0.0.5:
-  version "0.0.5"
-  resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
 strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -5150,9 +4861,9 @@ strip-ansi@^4.0.0:
     ansi-regex "^3.0.0"
 
 strip-ansi@^5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4"
-  integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
   dependencies:
     ansi-regex "^4.1.0"
 
@@ -5179,6 +4890,7 @@ style-search@^0.1.0:
 stylehacks@^2.3:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-2.3.2.tgz#64c83e0438a68c9edf449e8c552a7d9ab6009b0b"
+  integrity sha1-ZMg+BDimjJ7fRJ6MVSp9mrYAmws=
   dependencies:
     browserslist "^1.1.3"
     chalk "^1.1.1"
@@ -5193,75 +4905,33 @@ stylehacks@^2.3:
     write-file-stdout "0.0.2"
 
 stylelint-checkstyle-formatter@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/stylelint-checkstyle-formatter/-/stylelint-checkstyle-formatter-0.1.1.tgz#9d650e892bc30c6037341dc951e3dbafd13d0d67"
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/stylelint-checkstyle-formatter/-/stylelint-checkstyle-formatter-0.1.2.tgz#a127d97d352ec0e98229945db9768a65e1a89ca5"
+  integrity sha512-bePbF16ei9dCza2SlExRCGYMLVWsw0uQ2WJ5bakuL7lyprlENWz5/3qCZpneRMsFJkq+qtYuvomMoY/VI3AbPw==
   dependencies:
-    lodash "4.17.4"
+    lodash "^4.17.10"
 
-stylelint-config-recommended@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858"
+stylelint-config-recommended@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz#46ab139db4a0e7151fd5f94af155512886c96d3f"
+  integrity sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA==
 
 stylelint-config-standard@^18.2.0:
-  version "18.2.0"
-  resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz#6283149aba7f64f18731aef8f0abfb35cf619e06"
+  version "18.3.0"
+  resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.3.0.tgz#a2a1b788d2cf876c013feaff8ae276117a1befa7"
+  integrity sha512-Tdc/TFeddjjy64LvjPau9SsfVRexmTFqUhnMBrzz07J4p2dVQtmpncRF/o8yZn8ugA3Ut43E6o1GtjX80TFytw==
   dependencies:
-    stylelint-config-recommended "^2.1.0"
+    stylelint-config-recommended "^2.2.0"
 
-stylelint-no-browser-hacks@^1.1.0:
+stylelint-no-browser-hacks@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/stylelint-no-browser-hacks/-/stylelint-no-browser-hacks-1.2.1.tgz#c6ae1a53d04d3a8d32de40b6e9b6dec3ec607dea"
+  integrity sha512-lPcqHx3e/WnrXdw0wdnKtcjcSCAYEXjwSitXRw0OQ2qPF+iLyDFoarbn4qcw38Uuu7q29fhj+w2mECLM0fUOlw==
   dependencies:
     stylehacks "^2.3"
     stylelint "^9.1"
 
-stylelint@^9.1:
-  version "9.2.0"
-  resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.2.0.tgz#f77a82518106074c1a795e962fd780da2c8af43b"
-  dependencies:
-    autoprefixer "^8.0.0"
-    balanced-match "^1.0.0"
-    chalk "^2.0.1"
-    cosmiconfig "^4.0.0"
-    debug "^3.0.0"
-    execall "^1.0.0"
-    file-entry-cache "^2.0.0"
-    get-stdin "^6.0.0"
-    globby "^8.0.0"
-    globjoin "^0.1.4"
-    html-tags "^2.0.0"
-    ignore "^3.3.3"
-    import-lazy "^3.1.0"
-    imurmurhash "^0.1.4"
-    known-css-properties "^0.6.0"
-    lodash "^4.17.4"
-    log-symbols "^2.0.0"
-    mathml-tag-names "^2.0.1"
-    meow "^4.0.0"
-    micromatch "^2.3.11"
-    normalize-selector "^0.2.0"
-    pify "^3.0.0"
-    postcss "^6.0.16"
-    postcss-html "^0.18.0"
-    postcss-less "^1.1.5"
-    postcss-media-query-parser "^0.2.3"
-    postcss-reporter "^5.0.0"
-    postcss-resolve-nested-selector "^0.1.1"
-    postcss-safe-parser "^3.0.1"
-    postcss-sass "^0.3.0"
-    postcss-scss "^1.0.2"
-    postcss-selector-parser "^3.1.0"
-    postcss-value-parser "^3.3.0"
-    resolve-from "^4.0.0"
-    signal-exit "^3.0.2"
-    specificity "^0.3.1"
-    string-width "^2.1.0"
-    style-search "^0.1.0"
-    sugarss "^1.0.0"
-    svg-tags "^1.0.0"
-    table "^4.0.1"
-
-stylelint@^9.10.1:
+stylelint@^9.1, stylelint@^9.10.1:
   version "9.10.1"
   resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d"
   integrity sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==
@@ -5314,13 +4984,6 @@ stylelint@^9.10.1:
     svg-tags "^1.0.0"
     table "^5.0.0"
 
-sugarss@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44"
-  integrity sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==
-  dependencies:
-    postcss "^6.0.14"
-
 sugarss@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
@@ -5328,11 +4991,12 @@ sugarss@^2.0.0:
   dependencies:
     postcss "^7.0.2"
 
-supports-color@3.1.2:
-  version "3.1.2"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+supports-color@5.4.0:
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+  integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
   dependencies:
-    has-flag "^1.0.0"
+    has-flag "^3.0.0"
 
 supports-color@^2.0.0:
   version "2.0.0"
@@ -5346,20 +5010,13 @@ supports-color@^3.2.3:
   dependencies:
     has-flag "^1.0.0"
 
-supports-color@^5.3.0, supports-color@^5.4.0:
+supports-color@^5.3.0:
   version "5.5.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
   integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
   dependencies:
     has-flag "^3.0.0"
 
-supports-color@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
-  integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==
-  dependencies:
-    has-flag "^3.0.0"
-
 supports-color@^6.1.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
@@ -5375,6 +5032,7 @@ svg-tags@^1.0.0:
 table@4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+  integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==
   dependencies:
     ajv "^5.2.3"
     ajv-keywords "^2.1.0"
@@ -5383,27 +5041,15 @@ table@4.0.2:
     slice-ansi "1.0.0"
     string-width "^2.1.1"
 
-table@^4.0.1:
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
-  integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==
-  dependencies:
-    ajv "^6.0.1"
-    ajv-keywords "^3.0.0"
-    chalk "^2.1.0"
-    lodash "^4.17.4"
-    slice-ansi "1.0.0"
-    string-width "^2.1.1"
-
 table@^5.0.0:
-  version "5.1.1"
-  resolved "https://registry.yarnpkg.com/table/-/table-5.1.1.tgz#92030192f1b7b51b6eeab23ed416862e47b70837"
-  integrity sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==
+  version "5.4.6"
+  resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+  integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
   dependencies:
-    ajv "^6.6.1"
-    lodash "^4.17.11"
-    slice-ansi "2.0.0"
-    string-width "^2.1.1"
+    ajv "^6.10.2"
+    lodash "^4.17.14"
+    slice-ansi "^2.1.0"
+    string-width "^3.0.0"
 
 tar@^4:
   version "4.4.10"
@@ -5418,27 +5064,40 @@ tar@^4:
     safe-buffer "^5.1.2"
     yallist "^3.0.3"
 
+tcp-port-used@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.1.tgz#46061078e2d38c73979a2c2c12b5a674e6689d70"
+  integrity sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==
+  dependencies:
+    debug "4.1.0"
+    is2 "2.0.1"
+
 text-table@^0.2.0, text-table@~0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
 
 through@^2.3.6:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
 
-thunkify@~2.1.1:
+thunkify@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
+  integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=
 
 tmp@^0.0.33:
   version "0.0.33"
   resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+  integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
   dependencies:
     os-tmpdir "~1.0.2"
 
 to-fast-properties@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+  integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
 
 to-fast-properties@^2.0.0:
   version "2.0.0"
@@ -5470,10 +5129,17 @@ to-regex@^3.0.1, to-regex@^3.0.2:
     regex-not "^1.0.2"
     safe-regex "^1.1.0"
 
-tough-cookie@~2.3.3:
-  version "2.3.4"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+toidentifier@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+  integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+tough-cookie@~2.4.3:
+  version "2.4.3"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+  integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
   dependencies:
+    psl "^1.1.24"
     punycode "^1.4.1"
 
 trim-newlines@^2.0.0:
@@ -5487,9 +5153,9 @@ trim-right@^1.0.1:
   integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
 
 trim-trailing-lines@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9"
-  integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a"
+  integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==
 
 trim@0.0.1:
   version "0.0.1"
@@ -5497,54 +5163,47 @@ trim@0.0.1:
   integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
 
 trough@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24"
-  integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e"
+  integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==
 
 tunnel-agent@^0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
   dependencies:
     safe-buffer "^5.0.1"
 
 tweetnacl@^0.14.3, tweetnacl@~0.14.0:
   version "0.14.5"
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
 
 type-check@~0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
   dependencies:
     prelude-ls "~1.1.2"
 
 type-detect@0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
+  integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI=
 
 typedarray@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
 
 unherit@^1.0.4:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c"
-  integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449"
+  integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==
   dependencies:
     inherits "^2.0.1"
     xtend "^4.0.1"
 
-unified@^6.0.0:
-  version "6.2.0"
-  resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba"
-  integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==
-  dependencies:
-    bail "^1.0.0"
-    extend "^3.0.0"
-    is-plain-obj "^1.1.0"
-    trough "^1.0.0"
-    vfile "^2.0.0"
-    x-is-string "^0.1.0"
-
 unified@^7.0.0:
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13"
@@ -5560,36 +5219,36 @@ unified@^7.0.0:
     x-is-string "^0.1.0"
 
 union-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
-  integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+  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 "^0.4.3"
+    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=
 
-unist-util-find-all-after@^1.0.1, unist-util-find-all-after@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d"
-  integrity sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w==
+unist-util-find-all-after@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.4.tgz#2eeaba818fd98492d69c44f9bee52c6a25282eef"
+  integrity sha512-CaxvMjTd+yF93BKLJvZnEfqdM7fgEACsIpQqz8vIj9CJnUb9VpyymFS3tg6TCtgrF7vfCJBF5jbT2Ox9CBRYRQ==
   dependencies:
-    unist-util-is "^2.0.0"
+    unist-util-is "^3.0.0"
 
-unist-util-is@^2.0.0, unist-util-is@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db"
-  integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==
+unist-util-is@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+  integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
 
 unist-util-remove-position@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb"
-  integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972"
+  integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==
   dependencies:
     unist-util-visit "^1.1.0"
 
@@ -5599,22 +5258,23 @@ unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1:
   integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
 
 unist-util-visit-parents@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217"
-  integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+  integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
   dependencies:
-    unist-util-is "^2.1.2"
+    unist-util-is "^3.0.0"
 
 unist-util-visit@^1.1.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1"
-  integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+  integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
   dependencies:
     unist-util-visit-parents "^2.0.0"
 
 unpipe@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
 
 unset-value@^1.0.0:
   version "1.0.0"
@@ -5651,9 +5311,10 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
   integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
 
-uuid@^3.1.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+uuid@^3.3.2:
+  version "3.3.3"
+  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
+  integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
 
 validate-npm-package-license@^3.0.1:
   version "3.0.4"
@@ -5666,15 +5327,16 @@ validate-npm-package-license@^3.0.1:
 verror@1.10.0:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
   dependencies:
     assert-plus "^1.0.0"
     core-util-is "1.0.2"
     extsprintf "^1.2.0"
 
 vfile-location@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55"
-  integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2"
+  integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==
 
 vfile-message@^1.0.0:
   version "1.1.1"
@@ -5683,16 +5345,6 @@ vfile-message@^1.0.0:
   dependencies:
     unist-util-stringify-position "^1.1.1"
 
-vfile@^2.0.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a"
-  integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==
-  dependencies:
-    is-buffer "^1.1.4"
-    replace-ext "1.0.0"
-    unist-util-stringify-position "^1.0.0"
-    vfile-message "^1.0.0"
-
 vfile@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803"
@@ -5703,13 +5355,7 @@ vfile@^3.0.0:
     unist-util-stringify-position "^1.0.0"
     vfile-message "^1.0.0"
 
-which@^1.2.9:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
-  dependencies:
-    isexe "^2.0.0"
-
-which@^1.3.1:
+which@^1.2.9, which@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -5726,10 +5372,12 @@ wide-align@^1.1.0:
 wordwrap@~0.0.2:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
 
 wordwrap@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
 
 wrappy@1:
   version "1.0.2"
@@ -5739,6 +5387,7 @@ wrappy@1:
 write-file-stdout@0.0.2:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1"
+  integrity sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=
 
 write@1.0.3:
   version "1.0.3"
@@ -5762,15 +5411,17 @@ x-is-string@^0.1.0:
 xregexp@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
+  integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
 
 xtend@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-  integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
 
 yallist@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
 
 yallist@^3.0.0, yallist@^3.0.3:
   version "3.0.3"
@@ -5787,5 +5438,6 @@ yargs-parser@^10.0.0:
 yauzl@2.4.1:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+  integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=
   dependencies:
     fd-slicer "~1.0.1"