reverted: --- b/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php +++ a/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php @@ -320,7 +320,7 @@ reset($seps); $pt1 = $seps[0]; while ($pt2 = next($seps)) { + $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]); - $this->_compareseq($pt1[0], $pt2[0], $pt1[1], $pt2[1]); $pt1 = $pt2; } } diff -u b/core/modules/views/tests/src/Unit/EntityViewsDataTest.php b/core/modules/views/tests/src/Unit/EntityViewsDataTest.php --- b/core/modules/views/tests/src/Unit/EntityViewsDataTest.php +++ b/core/modules/views/tests/src/Unit/EntityViewsDataTest.php @@ -296,9 +296,7 @@ $this->assertCount(1, $revision_field_data['table']['join']); $this->assertEquals([ 'entity_test_mul_property_data' => [ - 'left_field' => 'revision_id', - 'field' => 'revision_id', - 'type' => 'INNER', + 'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER' ], ], $revision_field_data['table']['join']); @@ -306,9 +304,7 @@ $this->assertCount(1, $revision_base_data['table']['join']); $this->assertEquals([ 'entity_test_mulrev_property_revision' => [ - 'left_field' => 'revision_id', - 'field' => 'revision_id', - 'type' => 'INNER', + 'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER' ], ], $revision_base_data['table']['join']); @@ -343,9 +339,7 @@ $this->assertCount(1, $revision_field_data['table']['join']); $this->assertEquals([ 'entity_test_mulrev_field_data' => [ - 'left_field' => 'revision_id', - 'field' => 'revision_id', - 'type' => 'INNER', + 'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER' ], ], $revision_field_data['table']['join']); @@ -353,9 +347,7 @@ $this->assertCount(1, $revision_base_data['table']['join']); $this->assertEquals([ 'entity_test_mulrev_property_revision' => [ - 'left_field' => 'revision_id', - 'field' => 'revision_id', - 'type' => 'INNER', + 'left_field' => 'revision_id', 'field' => 'revision_id', 'type' => 'INNER' ], ], $revision_base_data['table']['join']); $this->assertFalse(isset($data['data_table'])); @@ -537,11 +529,10 @@ 'left_field' => 'id', 'field' => 'entity_id', 'extra' => [[ - 'field' => 'deleted', - 'value' => 0, - 'numeric' => TRUE, - ], - ], + 'field' => 'deleted', + 'value' => 0, + 'numeric' => TRUE, + ]], ], $data['entity_test__string']['table']['join']['entity_test']); } @@ -692,11 +683,10 @@ 'left_field' => 'id', 'field' => 'entity_id', 'extra' => [[ - 'field' => 'deleted', - 'value' => 0, - 'numeric' => TRUE, - ], - ], + 'field' => 'deleted', + 'value' => 0, + 'numeric' => TRUE, + ]], ], $data['entity_test_mul__string']['table']['join']['entity_test_mul']); } @@ -878,11 +868,10 @@ 'left_field' => 'id', 'field' => 'entity_id', 'extra' => [[ - 'field' => 'deleted', - 'value' => 0, - 'numeric' => TRUE, - ], - ], + 'field' => 'deleted', + 'value' => 0, + 'numeric' => TRUE, + ]], ], $data['entity_test_mulrev__string']['table']['join']['entity_test_mulrev_property_data']); $this->assertStringField($data['entity_test_mulrev_revision__string']['string']); @@ -891,11 +880,10 @@ 'left_field' => 'revision_id', 'field' => 'entity_id', 'extra' => [[ - 'field' => 'deleted', - 'value' => 0, - 'numeric' => TRUE, - ], - ], + 'field' => 'deleted', + 'value' => 0, + 'numeric' => TRUE, + ]], ], $data['entity_test_mulrev_revision__string']['table']['join']['entity_test_mulrev_property_revision']); } diff -u b/core/phpcs.xml.dist b/core/phpcs.xml.dist --- b/core/phpcs.xml.dist +++ b/core/phpcs.xml.dist @@ -88,8 +88,8 @@ - + @@ -104,7 +104,6 @@ - @@ -115,7 +114,6 @@ - @@ -146,6 +144,9 @@ + 0 @@ -173,55 +174,6 @@ - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - - - 0 - - - 0 - diff -u b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php --- b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php @@ -362,9 +362,7 @@ public function providerTestToUrlUriCallback() { $test_cases = []; - $uri_callback = function () { - return Url::fromRoute(''); - }; + $uri_callback = function () { return Url::fromRoute(''); }; $test_cases['uri_callback'] = [[], $uri_callback]; $test_cases['bundle_uri_callback'] = [['uri_callback' => $uri_callback], NULL]; diff -u b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php --- b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php @@ -164,11 +164,9 @@ $route ->setDefault('bundle_parameter', 'the_bundle_entity_type_id') ->setRequirement('_entity_create_access', 'the_entity_type_id:{the_bundle_entity_type_id}') - ->setOption('parameters', [ - 'the_bundle_entity_type_id' => [ - 'type' => 'entity:the_bundle_entity_type_id', - ], - ]); + ->setOption('parameters', ['the_bundle_entity_type_id' => [ + 'type' => 'entity:the_bundle_entity_type_id', + ]]); $data['add_form_bundle_entity_id_key_type_null'] = [clone $route, $entity_type5->reveal(), $bundle_entity_type->reveal()]; $entity_type6 = $this->getEntityType($entity_type5); @@ -186,12 +184,10 @@ $route // Unset the 'the_entity_type_id' requirement. ->setRequirements(['_entity_create_access' => $route->getRequirement('_entity_create_access')]) - ->setOption('parameters', [ - 'the_bundle_entity_type_id' => [ - 'type' => 'entity:the_bundle_entity_type_id', - 'with_config_overrides' => TRUE, - ], - ]); + ->setOption('parameters', ['the_bundle_entity_type_id' => [ + 'type' => 'entity:the_bundle_entity_type_id', + 'with_config_overrides' => TRUE, + ]]); $data['add_form_bundle_entity_id_key_type_integer'] = [clone $route, $entity_type7->reveal(), $bundle_entity_type->reveal(), $field_storage_definition->reveal()]; return $data; only in patch2: unchanged: --- a/composer.lock +++ b/composer.lock @@ -60,16 +60,16 @@ }, { "name": "composer/installers", - "version": "v1.4.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b" + "reference": "d78064c68299743e0161004f2de3a0204e33b804" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b", - "reference": "9ce17fb70e9a38dd8acff0636a29f5cf4d575c1b", + "url": "https://api.github.com/repos/composer/installers/zipball/d78064c68299743e0161004f2de3a0204e33b804", + "reference": "d78064c68299743e0161004f2de3a0204e33b804", "shasum": "" }, "require": { @@ -111,17 +111,12 @@ "keywords": [ "Craft", "Dolibarr", - "Eliasis", "Hurad", "ImageCMS", - "Kanboard", - "Lan Management System", "MODX Evo", "Mautic", - "Maya", "OXID", "Plentymarkets", - "Porto", "RadPHP", "SMF", "Thelia", @@ -139,24 +134,20 @@ "croogo", "dokuwiki", "drupal", - "eZ Platform", "elgg", "expressionengine", "fuelphp", "grav", "installer", - "itop", "joomla", "kohana", "laravel", - "lavalite", "lithium", "magento", "mako", "mediawiki", "modulework", "moodle", - "osclass", "phpbb", "piwik", "ppi", @@ -165,7 +156,6 @@ "roundcube", "shopware", "silverstripe", - "sydes", "symfony", "typo3", "wordpress", @@ -173,7 +163,7 @@ "zend", "zikula" ], - "time": "2017-08-09T07:53:48+00:00" + "time": "2016-08-13T20:53:52+00:00" }, { "name": "composer/semver", @@ -751,16 +741,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.0", + "version": "6.2.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", - "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8d6c6cc55186db87b7dc5009827429ba4e9dc006", + "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006", "shasum": "" }, "require": { @@ -770,12 +760,9 @@ }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", + "phpunit/phpunit": "^4.0", "psr/log": "^1.0" }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, "type": "library", "extra": { "branch-alias": { @@ -812,7 +799,7 @@ "rest", "web service" ], - "time": "2017-06-22T18:50:49+00:00" + "time": "2017-02-28T22:50:30+00:00" }, { "name": "guzzlehttp/promises", @@ -932,16 +919,16 @@ }, { "name": "masterminds/html5", - "version": "2.3.0", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "2c37c6c520b995b761674de3be8455a381679067" + "reference": "7866e93dcf0245de22378414e0c2c7350abc45af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/2c37c6c520b995b761674de3be8455a381679067", - "reference": "2c37c6c520b995b761674de3be8455a381679067", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/7866e93dcf0245de22378414e0c2c7350abc45af", + "reference": "7866e93dcf0245de22378414e0c2c7350abc45af", "shasum": "" }, "require": { @@ -993,7 +980,7 @@ "serializer", "xml" ], - "time": "2017-09-04T12:26:28+00:00" + "time": "2016-09-22T11:01:11+00:00" }, { "name": "paragonie/random_compat", @@ -1191,16 +1178,16 @@ }, { "name": "symfony-cmf/routing", - "version": "1.4.1", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony-cmf/routing.git", - "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac" + "url": "https://github.com/symfony-cmf/Routing.git", + "reference": "b93704ca098334f56e9b317932f21a4362e620db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony-cmf/routing/zipball/fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", - "reference": "fb1e7f85ff8c6866238b7e73a490a0a0243ae8ac", + "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/b93704ca098334f56e9b317932f21a4362e620db", + "reference": "b93704ca098334f56e9b317932f21a4362e620db", "shasum": "" }, "require": { @@ -1246,7 +1233,7 @@ "database", "routing" ], - "time": "2017-05-09T08:10:41+00:00" + "time": "2016-03-31T09:11:39+00:00" }, { "name": "symfony/class-loader", @@ -2319,16 +2306,16 @@ }, { "name": "wikimedia/composer-merge-plugin", - "version": "v1.4.1", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100" + "reference": "ca453f9f13d8b05f86f20ea10be992a782e6f78c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/81c6ac72a24a67383419c7eb9aa2b3437f2ab100", - "reference": "81c6ac72a24a67383419c7eb9aa2b3437f2ab100", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/ca453f9f13d8b05f86f20ea10be992a782e6f78c", + "reference": "ca453f9f13d8b05f86f20ea10be992a782e6f78c", "shasum": "" }, "require": { @@ -2364,20 +2351,20 @@ } ], "description": "Composer plugin to merge multiple composer.json files", - "time": "2017-04-25T02:31:25+00:00" + "time": "2017-03-13T16:52:55+00:00" }, { "name": "zendframework/zend-diactoros", - "version": "1.4.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "424a840dc3bedcdeea510b42e056c77c2d6c4bef" + "reference": "b03f285a333f51e58c95cce54109a4a9ed691436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/424a840dc3bedcdeea510b42e056c77c2d6c4bef", - "reference": "424a840dc3bedcdeea510b42e056c77c2d6c4bef", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/b03f285a333f51e58c95cce54109a4a9ed691436", + "reference": "b03f285a333f51e58c95cce54109a4a9ed691436", "shasum": "" }, "require": { @@ -2416,7 +2403,7 @@ "psr", "psr-7" ], - "time": "2017-08-17T21:21:00+00:00" + "time": "2017-04-06T16:18:34+00:00" }, { "name": "zendframework/zend-escaper", @@ -3041,16 +3028,16 @@ }, { "name": "mikey179/vfsStream", - "version": "v1.6.5", + "version": "v1.6.4", "source": { "type": "git", "url": "https://github.com/mikey179/vfsStream.git", - "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145" + "reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", - "reference": "d5fec95f541d4d71c4823bb5e30cf9b9e5b96145", + "url": "https://api.github.com/repos/mikey179/vfsStream/zipball/0247f57b2245e8ad2e689d7cee754b45fbabd592", + "reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592", "shasum": "" }, "require": { @@ -3083,7 +3070,7 @@ ], "description": "Virtual file system to mock the real file system in unit tests.", "homepage": "http://vfs.bovigo.org/", - "time": "2017-08-01T08:02:14+00:00" + "time": "2016-07-18T14:02:57+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -3447,16 +3434,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.36", + "version": "4.8.35", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", - "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", "shasum": "" }, "require": { @@ -3515,7 +3502,7 @@ "testing", "xunit" ], - "time": "2017-06-21T08:07:12+00:00" + "time": "2017-02-06T05:18:07+00:00" }, { "name": "phpunit/phpunit-mock-objects", only in patch2: unchanged: --- a/core/core.link_relation_types.yml +++ b/core/core.link_relation_types.yml @@ -3,9 +3,6 @@ add-form: uri: https://drupal.org/link-relations/add-form description: A form where a resource of this type can be created. -add-page: - uri: https://drupal.org/link-relations/add-page - description: A page where a resource of this type and related types can be created. delete-form: uri: https://drupal.org/link-relations/delete-form description: A form where a resource of this type can be deleted. only in patch2: unchanged: --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -754,7 +754,8 @@ function install_tasks($install_state) { 'run' => $install_state['settings_verified'] ? INSTALL_TASK_SKIP : INSTALL_TASK_RUN_IF_NOT_COMPLETED, 'function' => 'Drupal\Core\Installer\Form\SiteSettingsForm', ], - 'install_write_profile' => [], + 'install_write_profile' => [ + ], 'install_verify_database_ready' => [ 'run' => $install_state['database_ready'] ? INSTALL_TASK_SKIP : INSTALL_TASK_RUN_IF_NOT_COMPLETED, ], @@ -769,8 +770,10 @@ function install_tasks($install_state) { 'display_name' => t('Install site'), 'type' => 'batch', ], - 'install_profile_themes' => [], - 'install_install_profile' => [], + 'install_profile_themes' => [ + ], + 'install_install_profile' => [ + ], 'install_import_translations' => [ 'display_name' => t('Set up translations'), 'display' => $needs_translations, @@ -810,7 +813,8 @@ function install_tasks($install_state) { 'type' => 'batch', 'run' => $needs_translations ? INSTALL_TASK_RUN_IF_NOT_COMPLETED : INSTALL_TASK_SKIP, ], - 'install_finished' => [], + 'install_finished' => [ + ], ]; // Allow the installation profile to modify the full list of tasks. only in patch2: unchanged: --- a/core/lib/Drupal/Component/Gettext/PoStreamWriter.php +++ b/core/lib/Drupal/Component/Gettext/PoStreamWriter.php @@ -104,7 +104,7 @@ public function close() { * If writing the data is not possible. */ private function write($data) { - $result = fwrite($this->_fd, $data); + $result = fputs($this->_fd, $data); if ($result === FALSE) { throw new Exception('Unable to write data: ' . substr($data, 0, 20)); } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Plugin/Exception/ContextException.php +++ b/core/lib/Drupal/Component/Plugin/Exception/ContextException.php @@ -5,4 +5,4 @@ /** * An exception class to be thrown for context plugin exceptions. */ -class ContextException extends \Exception implements ExceptionInterface {} +class ContextException extends \Exception implements ExceptionInterface { } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Plugin/Exception/ExceptionInterface.php +++ b/core/lib/Drupal/Component/Plugin/Exception/ExceptionInterface.php @@ -5,4 +5,4 @@ /** * Exception interface for all exceptions thrown by the Plugin component. */ -interface ExceptionInterface {} +interface ExceptionInterface { } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Plugin/Exception/InvalidDecoratedMethod.php +++ b/core/lib/Drupal/Component/Plugin/Exception/InvalidDecoratedMethod.php @@ -8,4 +8,4 @@ * Exception thrown when a decorator's _call() method is triggered, but the * decorated object does not contain the requested method. */ -class InvalidDecoratedMethod extends BadMethodCallException implements ExceptionInterface {} +class InvalidDecoratedMethod extends BadMethodCallException implements ExceptionInterface { } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Plugin/Exception/InvalidDeriverException.php +++ b/core/lib/Drupal/Component/Plugin/Exception/InvalidDeriverException.php @@ -5,4 +5,4 @@ /** * Exception to be thrown if a plugin tries to use an invalid deriver. */ -class InvalidDeriverException extends PluginException {} +class InvalidDeriverException extends PluginException { } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Plugin/Exception/MapperExceptionInterface.php +++ b/core/lib/Drupal/Component/Plugin/Exception/MapperExceptionInterface.php @@ -8,4 +8,4 @@ * Extended interface for exceptions thrown specifically by the Mapper subsystem * within the Plugin component. */ -interface MapperExceptionInterface extends ExceptionInterface {} +interface MapperExceptionInterface extends ExceptionInterface { } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Plugin/Exception/PluginException.php +++ b/core/lib/Drupal/Component/Plugin/Exception/PluginException.php @@ -6,4 +6,4 @@ * Generic Plugin exception class to be thrown when no more specific class * is applicable. */ -class PluginException extends \Exception implements ExceptionInterface {} +class PluginException extends \Exception implements ExceptionInterface { } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Utility/NestedArray.php +++ b/core/lib/Drupal/Component/Utility/NestedArray.php @@ -328,7 +328,7 @@ public static function mergeDeepArray(array $arrays, $preserve_integer_keys = FA // Renumber integer keys as array_merge_recursive() does unless // $preserve_integer_keys is set to TRUE. Note that PHP automatically // converts array keys that are integer strings (e.g., '1') to integers. - if (is_int($key) && !$preserve_integer_keys) { + if (is_integer($key) && !$preserve_integer_keys) { $result[] = $value; } // Recurse when both values are arrays. only in patch2: unchanged: --- a/core/lib/Drupal/Component/Utility/Number.php +++ b/core/lib/Drupal/Component/Utility/Number.php @@ -50,7 +50,7 @@ public static function validStep($value, $step, $offset = 0.0) { // can't be represented with single precision floats are acceptable. The // fractional part of a float has 24 bits. That means remainders smaller than // $step * 2^-24 are acceptable. - $computed_acceptable_error = (double) ($step / pow(2.0, 24)); + $computed_acceptable_error = (double)($step / pow(2.0, 24)); return $computed_acceptable_error >= $remainder || $remainder >= ($step - $computed_acceptable_error); } only in patch2: unchanged: --- a/core/lib/Drupal/Component/Utility/Random.php +++ b/core/lib/Drupal/Component/Utility/Random.php @@ -143,9 +143,7 @@ public function word($length) { $vowels = ["a", "e", "i", "o", "u"]; $cons = ["b", "c", "d", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "u", "v", "w", "tr", - "cr", "br", "fr", "th", "dr", "ch", "ph", "wr", "st", "sp", "sw", "pr", - "sl", "cl", "sh", - ]; + "cr", "br", "fr", "th", "dr", "ch", "ph", "wr", "st", "sp", "sw", "pr", "sl", "cl", "sh"]; $num_vowels = count($vowels); $num_cons = count($cons); @@ -221,8 +219,7 @@ public function sentences($min_word_count, $capitalize = FALSE) { "utrum", "uxor", "valde", "valetudo", "validus", "vel", "velit", "veniam", "venio", "vereor", "vero", "verto", "vicis", "vindico", "virtus", "voco", "volutpat", "vulpes", "vulputate", "wisi", "ymo", - "zelus", - ]; + "zelus"]; $dictionary_flipped = array_flip($dictionary); $greeking = ''; only in patch2: unchanged: --- a/core/lib/Drupal/Component/Utility/UrlHelper.php +++ b/core/lib/Drupal/Component/Utility/UrlHelper.php @@ -148,11 +148,6 @@ public static function parse($url) { $scheme_delimiter_position = strpos($url, '://'); $query_delimiter_position = strpos($url, '?'); if ($scheme_delimiter_position !== FALSE && ($query_delimiter_position === FALSE || $scheme_delimiter_position < $query_delimiter_position)) { - // Split off the fragment, if any. - if (strpos($url, '#') !== FALSE) { - list($url, $options['fragment']) = explode('#', $url, 2); - } - // Split off everything before the query string into 'path'. $parts = explode('?', $url); @@ -163,7 +158,12 @@ public static function parse($url) { } // If there is a query string, transform it into keyed query parameters. if (isset($parts[1])) { - parse_str($parts[1], $options['query']); + $query_parts = explode('#', $parts[1]); + parse_str($query_parts[0], $options['query']); + // Take over the fragment, if there is any. + if (isset($query_parts[1])) { + $options['fragment'] = $query_parts[1]; + } } } // Internal URLs. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Block/MessagesBlockPluginInterface.php +++ b/core/lib/Drupal/Core/Block/MessagesBlockPluginInterface.php @@ -12,4 +12,4 @@ * * @ingroup block_api */ -interface MessagesBlockPluginInterface extends BlockPluginInterface {} +interface MessagesBlockPluginInterface extends BlockPluginInterface { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Config/ConfigManager.php +++ b/core/lib/Drupal/Core/Config/ConfigManager.php @@ -452,9 +452,7 @@ protected function callOnDependencyRemoval(ConfigEntityInterface $entity, array // Key the entity arrays by config dependency name to make searching easy. foreach (['config', 'content'] as $dependency_type) { $affected_dependencies[$dependency_type] = array_combine( - array_map(function ($entity) { - return $entity->getConfigDependencyName(); - }, $affected_dependencies[$dependency_type]), + array_map(function ($entity) { return $entity->getConfigDependencyName(); }, $affected_dependencies[$dependency_type]), $affected_dependencies[$dependency_type] ); } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Config/DatabaseStorage.php +++ b/core/lib/Drupal/Core/Config/DatabaseStorage.php @@ -318,8 +318,7 @@ public function getCollectionName() { public function getAllCollectionNames() { try { return $this->connection->query('SELECT DISTINCT collection FROM {' . $this->connection->escapeTable($this->table) . '} WHERE collection <> :collection ORDER by collection', [ - ':collection' => StorageInterface::DEFAULT_COLLECTION, - ] + ':collection' => StorageInterface::DEFAULT_COLLECTION] )->fetchCol(); } catch (\Exception $e) { only in patch2: unchanged: --- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php @@ -317,13 +317,6 @@ protected function has($id, EntityInterface $entity) { } /** - * {@inheritdoc} - */ - public function hasData() { - return (bool) $this->configFactory->listAll($this->getPrefix()); - } - - /** * Gets entities from the static cache. * * @param array $ids only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Connection.php +++ b/core/lib/Drupal/Core/Database/Connection.php @@ -187,7 +187,7 @@ public function __construct(\PDO $connection, array $connection_options) { * @return \PDO * A \PDO object. */ - public static function open(array &$connection_options = []) {} + public static function open(array &$connection_options = []) { } /** * Destroys this Connection object. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Delete.php @@ -7,4 +7,4 @@ /** * MySQL implementation of \Drupal\Core\Database\Query\Delete. */ -class Delete extends QueryDelete {} +class Delete extends QueryDelete { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Merge.php @@ -7,4 +7,4 @@ /** * MySQL implementation of \Drupal\Core\Database\Query\Merge. */ -class Merge extends QueryMerge {} +class Merge extends QueryMerge { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php @@ -226,9 +226,6 @@ protected function processField($field) { return $field; } - /** - * {@inheritdoc} - */ public function getFieldTypeMap() { // Put :normal last so it gets preserved by array_flip. This makes // it much easier for modules (such as schema.module) to map @@ -369,9 +366,6 @@ protected function createKeySql($fields) { return implode(', ', $return); } - /** - * {@inheritdoc} - */ public function renameTable($table, $new_name) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot rename @table to @table_new: table @table doesn't exist.", ['@table' => $table, '@table_new' => $new_name])); @@ -384,9 +378,6 @@ public function renameTable($table, $new_name) { return $this->connection->query('ALTER TABLE {' . $table . '} RENAME TO `' . $info['table'] . '`'); } - /** - * {@inheritdoc} - */ public function dropTable($table) { if (!$this->tableExists($table)) { return FALSE; @@ -396,9 +387,6 @@ public function dropTable($table) { return TRUE; } - /** - * {@inheritdoc} - */ public function addField($table, $field, $spec, $keys_new = []) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", ['@field' => $field, '@table' => $table])); @@ -444,9 +432,6 @@ public function addField($table, $field, $spec, $keys_new = []) { } } - /** - * {@inheritdoc} - */ public function dropField($table, $field) { if (!$this->fieldExists($table, $field)) { return FALSE; @@ -456,9 +441,6 @@ public function dropField($table, $field) { return TRUE; } - /** - * {@inheritdoc} - */ public function fieldSetDefault($table, $field, $default) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); @@ -467,9 +449,6 @@ public function fieldSetDefault($table, $field, $default) { $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` SET DEFAULT ' . $this->escapeDefaultValue($default)); } - /** - * {@inheritdoc} - */ public function fieldSetNoDefault($table, $field) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); @@ -478,9 +457,6 @@ public function fieldSetNoDefault($table, $field) { $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN `' . $field . '` DROP DEFAULT'); } - /** - * {@inheritdoc} - */ public function indexExists($table, $name) { // Returns one row for each column in the index. Result is string or FALSE. // Details at http://dev.mysql.com/doc/refman/5.0/en/show-index.html @@ -488,9 +464,6 @@ public function indexExists($table, $name) { return isset($row['Key_name']); } - /** - * {@inheritdoc} - */ public function addPrimaryKey($table, $fields) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add primary key to table @table: table doesn't exist.", ['@table' => $table])); @@ -502,9 +475,6 @@ public function addPrimaryKey($table, $fields) { $this->connection->query('ALTER TABLE {' . $table . '} ADD PRIMARY KEY (' . $this->createKeySql($fields) . ')'); } - /** - * {@inheritdoc} - */ public function dropPrimaryKey($table) { if (!$this->indexExists($table, 'PRIMARY')) { return FALSE; @@ -514,9 +484,6 @@ public function dropPrimaryKey($table) { return TRUE; } - /** - * {@inheritdoc} - */ public function addUniqueKey($table, $name, $fields) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add unique key @name to table @table: table doesn't exist.", ['@table' => $table, '@name' => $name])); @@ -528,9 +495,6 @@ public function addUniqueKey($table, $name, $fields) { $this->connection->query('ALTER TABLE {' . $table . '} ADD UNIQUE KEY `' . $name . '` (' . $this->createKeySql($fields) . ')'); } - /** - * {@inheritdoc} - */ public function dropUniqueKey($table, $name) { if (!$this->indexExists($table, $name)) { return FALSE; @@ -557,9 +521,6 @@ public function addIndex($table, $name, $fields, array $spec) { $this->connection->query('ALTER TABLE {' . $table . '} ADD INDEX `' . $name . '` (' . $this->createKeySql($indexes[$name]) . ')'); } - /** - * {@inheritdoc} - */ public function dropIndex($table, $name) { if (!$this->indexExists($table, $name)) { return FALSE; @@ -569,9 +530,6 @@ public function dropIndex($table, $name) { return TRUE; } - /** - * {@inheritdoc} - */ public function changeField($table, $field, $field_new, $spec, $keys_new = []) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot change the definition of field @table.@name: field doesn't exist.", ['@table' => $table, '@name' => $field])); @@ -587,9 +545,6 @@ public function changeField($table, $field, $field_new, $spec, $keys_new = []) { $this->connection->query($sql); } - /** - * {@inheritdoc} - */ public function prepareComment($comment, $length = NULL) { // Truncate comment to maximum comment length. if (isset($length)) { @@ -619,9 +574,6 @@ public function getComment($table, $column = NULL) { return preg_replace('/; InnoDB free:.*$/', '', $comment); } - /** - * {@inheritdoc} - */ public function tableExists($table) { // The information_schema table is very slow to query under MySQL 5.0. // Instead, we try to select from the table in question. If it fails, @@ -639,9 +591,6 @@ public function tableExists($table) { } } - /** - * {@inheritdoc} - */ public function fieldExists($table, $column) { // The information_schema table is very slow to query under MySQL 5.0. // Instead, we try to select from the table and field in question. If it only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Select.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Select.php @@ -7,4 +7,4 @@ /** * MySQL implementation of \Drupal\Core\Database\Query\Select. */ -class Select extends QuerySelect {} +class Select extends QuerySelect { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Transaction.php @@ -7,4 +7,4 @@ /** * MySQL implementation of \Drupal\Core\Database\Transaction. */ -class Transaction extends DatabaseTransaction {} +class Transaction extends DatabaseTransaction { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Truncate.php @@ -7,4 +7,4 @@ /** * MySQL implementation of \Drupal\Core\Database\Query\Truncate. */ -class Truncate extends QueryTruncate {} +class Truncate extends QueryTruncate { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/mysql/Update.php +++ b/core/lib/Drupal/Core/Database/Driver/mysql/Update.php @@ -7,4 +7,4 @@ /** * MySQL implementation of \Drupal\Core\Database\Query\Update. */ -class Update extends QueryUpdate {} +class Update extends QueryUpdate { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php @@ -54,21 +54,20 @@ class Connection extends DatabaseConnection { * @see http://www.postgresql.org/docs/9.4/static/sql-keywords-appendix.html */ protected $postgresqlReservedKeyWords = ['all', 'analyse', 'analyze', 'and', - 'any', 'array', 'as', 'asc', 'asymmetric', 'authorization', 'binary', 'both', - 'case', 'cast', 'check', 'collate', 'collation', 'column', 'concurrently', - 'constraint', 'create', 'cross', 'current_catalog', 'current_date', - 'current_role', 'current_schema', 'current_time', 'current_timestamp', - 'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else', - 'end', 'except', 'false', 'fetch', 'for', 'foreign', 'freeze', 'from', 'full', - 'grant', 'group', 'having', 'ilike', 'in', 'initially', 'inner', 'intersect', - 'into', 'is', 'isnull', 'join', 'lateral', 'leading', 'left', 'like', 'limit', - 'localtime', 'localtimestamp', 'natural', 'not', 'notnull', 'null', 'offset', - 'on', 'only', 'or', 'order', 'outer', 'over', 'overlaps', 'placing', - 'primary', 'references', 'returning', 'right', 'select', 'session_user', - 'similar', 'some', 'symmetric', 'table', 'then', 'to', 'trailing', 'true', - 'union', 'unique', 'user', 'using', 'variadic', 'verbose', 'when', 'where', - 'window', 'with', - ]; + 'any', 'array', 'as', 'asc', 'asymmetric', 'authorization', 'binary', 'both', + 'case', 'cast', 'check', 'collate', 'collation', 'column', 'concurrently', + 'constraint', 'create', 'cross', 'current_catalog', 'current_date', + 'current_role', 'current_schema', 'current_time', 'current_timestamp', + 'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else', + 'end', 'except', 'false', 'fetch', 'for', 'foreign', 'freeze', 'from', 'full', + 'grant', 'group', 'having', 'ilike', 'in', 'initially', 'inner', 'intersect', + 'into', 'is', 'isnull', 'join', 'lateral', 'leading', 'left', 'like', 'limit', + 'localtime', 'localtimestamp', 'natural', 'not', 'notnull', 'null', 'offset', + 'on', 'only', 'or', 'order', 'outer', 'over', 'overlaps', 'placing', + 'primary', 'references', 'returning', 'right', 'select', 'session_user', + 'similar', 'some', 'symmetric', 'table', 'then', 'to', 'trailing', 'true', + 'union', 'unique', 'user', 'using', 'variadic', 'verbose', 'when', 'where', + 'window', 'with']; /** * Constructs a connection object. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php @@ -66,7 +66,7 @@ public function execute() { // used twice. However, trying to insert a value into a serial // column should only be done in very rare cases and is not thread // safe by definition. - $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int) $serial_value]); + $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int)$serial_value]); } } } @@ -128,9 +128,7 @@ public function __toString() { // Default fields are always placed first for consistency. $insert_fields = array_merge($this->defaultFields, $this->insertFields); - $insert_fields = array_map(function($f) { - return $this->connection->escapeField($f); - }, $insert_fields); + $insert_fields = array_map(function($f) { return $this->connection->escapeField($f); }, $insert_fields); // If we're selecting from a SelectQuery, finish building the query and // pass it back, as any remaining options are irrelevant. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Install/Tasks.php @@ -254,7 +254,7 @@ public function initializeDatabase() { \'SELECT random();\' LANGUAGE \'sql\'', [], - ['allow_delimiter_in_query' => TRUE ] + [ 'allow_delimiter_in_query' => TRUE ] ); } @@ -263,7 +263,7 @@ public function initializeDatabase() { \'SELECT array_to_string((string_to_array($1, $2)) [1:$3], $2);\' LANGUAGE \'sql\'', [], - ['allow_delimiter_in_query' => TRUE ] + [ 'allow_delimiter_in_query' => TRUE ] ); } $connection->query('SELECT pg_advisory_unlock(1)'); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Merge.php @@ -7,4 +7,4 @@ /** * PostgreSQL implementation of \Drupal\Core\Database\Query\Merge. */ -class Merge extends QueryMerge {} +class Merge extends QueryMerge { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/NativeUpsert.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/NativeUpsert.php @@ -60,7 +60,7 @@ public function execute() { // used twice. However, trying to insert a value into a serial // column should only be done in very rare cases and is not thread // safe by definition. - $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int) $serial_value]); + $this->connection->query("SELECT setval('" . $table_information->sequences[$index] . "', GREATEST(MAX(" . $serial_field . "), :serial_value)) FROM {" . $this->table . "}", [':serial_value' => (int)$serial_value]); } } } @@ -100,9 +100,7 @@ public function __toString() { // Default fields are always placed first for consistency. $insert_fields = array_merge($this->defaultFields, $this->insertFields); - $insert_fields = array_map(function($f) { - return $this->connection->escapeField($f); - }, $insert_fields); + $insert_fields = array_map(function($f) { return $this->connection->escapeField($f); }, $insert_fields); $query = $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $insert_fields) . ') VALUES '; only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php @@ -383,7 +383,8 @@ protected function processField($field) { } /** - * {@inheritdoc} + * This maps a generic data type in combination with its data size + * to the engine-specific data type. */ public function getFieldTypeMap() { // Put :normal last so it gets preserved by array_flip. This makes @@ -470,9 +471,6 @@ public function tableExists($table) { return (bool) $this->connection->query("SELECT 1 FROM pg_tables WHERE schemaname = :schema AND tablename = :table", [':schema' => $prefixInfo['schema'], ':table' => $prefixInfo['table']])->fetchField(); } - /** - * {@inheritdoc} - */ public function renameTable($table, $new_name) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot rename @table to @table_new: table @table doesn't exist.", ['@table' => $table, '@table_new' => $new_name])); @@ -527,9 +525,6 @@ public function renameTable($table, $new_name) { $this->resetTableInformation($table); } - /** - * {@inheritdoc} - */ public function dropTable($table) { if (!$this->tableExists($table)) { return FALSE; @@ -540,9 +535,6 @@ public function dropTable($table) { return TRUE; } - /** - * {@inheritdoc} - */ public function addField($table, $field, $spec, $new_keys = []) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", ['@field' => $field, '@table' => $table])); @@ -591,9 +583,6 @@ public function addField($table, $field, $spec, $new_keys = []) { $this->resetTableInformation($table); } - /** - * {@inheritdoc} - */ public function dropField($table, $field) { if (!$this->fieldExists($table, $field)) { return FALSE; @@ -604,9 +593,6 @@ public function dropField($table, $field) { return TRUE; } - /** - * {@inheritdoc} - */ public function fieldSetDefault($table, $field, $default) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); @@ -617,9 +603,6 @@ public function fieldSetDefault($table, $field, $default) { $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" SET DEFAULT ' . $default); } - /** - * {@inheritdoc} - */ public function fieldSetNoDefault($table, $field) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); @@ -628,9 +611,6 @@ public function fieldSetNoDefault($table, $field) { $this->connection->query('ALTER TABLE {' . $table . '} ALTER COLUMN "' . $field . '" DROP DEFAULT'); } - /** - * {@inheritdoc} - */ public function indexExists($table, $name) { // Details http://www.postgresql.org/docs/9.1/interactive/view-pg-indexes.html $index_name = $this->ensureIdentifiersLength($table, $name, 'idx'); @@ -671,9 +651,6 @@ public function constraintExists($table, $name) { return (bool) $this->connection->query("SELECT 1 FROM pg_constraint WHERE conname = '$constraint_name'")->fetchField(); } - /** - * {@inheritdoc} - */ public function addPrimaryKey($table, $fields) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add primary key to table @table: table doesn't exist.", ['@table' => $table])); @@ -686,9 +663,6 @@ public function addPrimaryKey($table, $fields) { $this->resetTableInformation($table); } - /** - * {@inheritdoc} - */ public function dropPrimaryKey($table) { if (!$this->constraintExists($table, 'pkey')) { return FALSE; @@ -699,9 +673,6 @@ public function dropPrimaryKey($table) { return TRUE; } - /** - * {@inheritdoc} - */ public function addUniqueKey($table, $name, $fields) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add unique key @name to table @table: table doesn't exist.", ['@table' => $table, '@name' => $name])); @@ -714,9 +685,6 @@ public function addUniqueKey($table, $name, $fields) { $this->resetTableInformation($table); } - /** - * {@inheritdoc} - */ public function dropUniqueKey($table, $name) { if (!$this->constraintExists($table, $name . '__key')) { return FALSE; @@ -742,9 +710,6 @@ public function addIndex($table, $name, $fields, array $spec) { $this->resetTableInformation($table); } - /** - * {@inheritdoc} - */ public function dropIndex($table, $name) { if (!$this->indexExists($table, $name)) { return FALSE; @@ -755,9 +720,6 @@ public function dropIndex($table, $name) { return TRUE; } - /** - * {@inheritdoc} - */ public function changeField($table, $field, $field_new, $spec, $new_keys = []) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot change the definition of field @table.@name: field doesn't exist.", ['@table' => $table, '@name' => $field])); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php +++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Transaction.php @@ -7,4 +7,4 @@ /** * PostgreSQL implementation of \Drupal\Core\Database\Transaction. */ -class Transaction extends DatabaseTransaction {} +class Transaction extends DatabaseTransaction { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php +++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Delete.php @@ -7,4 +7,4 @@ /** * SQLite implementation of \Drupal\Core\Database\Query\Delete. */ -class Delete extends QueryDelete {} +class Delete extends QueryDelete { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php +++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Merge.php @@ -7,4 +7,4 @@ /** * SQLite implementation of \Drupal\Core\Database\Query\Merge. */ -class Merge extends QueryMerge {} +class Merge extends QueryMerge { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php +++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php @@ -22,9 +22,6 @@ class Schema extends DatabaseSchema { */ protected $defaultSchema = 'main'; - /** - * {@inheritdoc} - */ public function tableExists($table) { $info = $this->getPrefixInfo($table); @@ -32,9 +29,6 @@ public function tableExists($table) { return (bool) $this->connection->query('SELECT 1 FROM ' . $info['schema'] . '.sqlite_master WHERE type = :type AND name = :name', [':type' => 'table', ':name' => $info['table']])->fetchField(); } - /** - * {@inheritdoc} - */ public function fieldExists($table, $column) { $schema = $this->introspectSchema($table); return !empty($schema['fields'][$column]); @@ -207,7 +201,8 @@ protected function createFieldSql($name, $spec) { } /** - * {@inheritdoc} + * This maps a generic data type in combination with its data size + * to the engine-specific data type. */ public function getFieldTypeMap() { // Put :normal last so it gets preserved by array_flip. This makes @@ -252,9 +247,6 @@ public function getFieldTypeMap() { return $map; } - /** - * {@inheritdoc} - */ public function renameTable($table, $new_name) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot rename @table to @table_new: table @table doesn't exist.", ['@table' => $table, '@table_new' => $new_name])); @@ -292,9 +284,6 @@ public function renameTable($table, $new_name) { } } - /** - * {@inheritdoc} - */ public function dropTable($table) { if (!$this->tableExists($table)) { return FALSE; @@ -304,9 +293,6 @@ public function dropTable($table) { return TRUE; } - /** - * {@inheritdoc} - */ public function addField($table, $field, $specification, $keys_new = []) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add field @table.@field: table doesn't exist.", ['@field' => $field, '@table' => $table])); @@ -514,9 +500,6 @@ protected function introspectSchema($table) { return $schema; } - /** - * {@inheritdoc} - */ public function dropField($table, $field) { if (!$this->fieldExists($table, $field)) { return FALSE; @@ -548,9 +531,6 @@ public function dropField($table, $field) { return TRUE; } - /** - * {@inheritdoc} - */ public function changeField($table, $field, $field_new, $spec, $keys_new = []) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot change the definition of field @table.@name: field doesn't exist.", ['@table' => $table, '@name' => $field])); @@ -634,18 +614,12 @@ public function addIndex($table, $name, $fields, array $spec) { } } - /** - * {@inheritdoc} - */ public function indexExists($table, $name) { $info = $this->getPrefixInfo($table); return $this->connection->query('PRAGMA ' . $info['schema'] . '.index_info(' . $info['table'] . '_' . $name . ')')->fetchField() != ''; } - /** - * {@inheritdoc} - */ public function dropIndex($table, $name) { if (!$this->indexExists($table, $name)) { return FALSE; @@ -657,9 +631,6 @@ public function dropIndex($table, $name) { return TRUE; } - /** - * {@inheritdoc} - */ public function addUniqueKey($table, $name, $fields) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add unique key @name to table @table: table doesn't exist.", ['@table' => $table, '@name' => $name])); @@ -675,9 +646,6 @@ public function addUniqueKey($table, $name, $fields) { } } - /** - * {@inheritdoc} - */ public function dropUniqueKey($table, $name) { if (!$this->indexExists($table, $name)) { return FALSE; @@ -689,9 +657,6 @@ public function dropUniqueKey($table, $name) { return TRUE; } - /** - * {@inheritdoc} - */ public function addPrimaryKey($table, $fields) { if (!$this->tableExists($table)) { throw new SchemaObjectDoesNotExistException(t("Cannot add primary key to table @table: table doesn't exist.", ['@table' => $table])); @@ -708,9 +673,6 @@ public function addPrimaryKey($table, $fields) { $this->alterTable($table, $old_schema, $new_schema); } - /** - * {@inheritdoc} - */ public function dropPrimaryKey($table) { $old_schema = $this->introspectSchema($table); $new_schema = $old_schema; @@ -724,9 +686,6 @@ public function dropPrimaryKey($table) { return TRUE; } - /** - * {@inheritdoc} - */ public function fieldSetDefault($table, $field, $default) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot set default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); @@ -739,9 +698,6 @@ public function fieldSetDefault($table, $field, $default) { $this->alterTable($table, $old_schema, $new_schema); } - /** - * {@inheritdoc} - */ public function fieldSetNoDefault($table, $field) { if (!$this->fieldExists($table, $field)) { throw new SchemaObjectDoesNotExistException(t("Cannot remove default value of field @table.@field: field doesn't exist.", ['@table' => $table, '@field' => $field])); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php +++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Transaction.php @@ -7,4 +7,4 @@ /** * SQLite implementation of \Drupal\Core\Database\Transaction. */ -class Transaction extends DatabaseTransaction {} +class Transaction extends DatabaseTransaction { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php +++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php @@ -7,4 +7,4 @@ /** * SQLite implementation of \Drupal\Core\Database\Query\Update. */ -class Update extends QueryUpdate {} +class Update extends QueryUpdate { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/IntegrityConstraintViolationException.php +++ b/core/lib/Drupal/Core/Database/IntegrityConstraintViolationException.php @@ -8,4 +8,4 @@ * This exception is thrown e.g. when trying to insert a row that would violate * a unique key constraint. */ -class IntegrityConstraintViolationException extends \RuntimeException implements DatabaseException {} +class IntegrityConstraintViolationException extends \RuntimeException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/InvalidQueryException.php +++ b/core/lib/Drupal/Core/Database/InvalidQueryException.php @@ -8,4 +8,4 @@ * This exception is thrown e.g. when trying to have an IN condition with an * empty array. */ -class InvalidQueryException extends \InvalidArgumentException implements DatabaseException {} +class InvalidQueryException extends \InvalidArgumentException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/Query/Select.php +++ b/core/lib/Drupal/Core/Database/Query/Select.php @@ -156,14 +156,14 @@ public function hasTag($tag) { * {@inheritdoc} */ public function hasAllTags() { - return !(boolean) array_diff(func_get_args(), array_keys($this->alterTags)); + return !(boolean)array_diff(func_get_args(), array_keys($this->alterTags)); } /** * {@inheritdoc} */ public function hasAnyTag() { - return (boolean) array_intersect(func_get_args(), array_keys($this->alterTags)); + return (boolean)array_intersect(func_get_args(), array_keys($this->alterTags)); } /** only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/SchemaException.php +++ b/core/lib/Drupal/Core/Database/SchemaException.php @@ -5,4 +5,4 @@ /** * Base exception for Schema-related errors. */ -class SchemaException extends \RuntimeException implements DatabaseException {} +class SchemaException extends \RuntimeException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/SchemaObjectDoesNotExistException.php +++ b/core/lib/Drupal/Core/Database/SchemaObjectDoesNotExistException.php @@ -9,4 +9,4 @@ * modify a database table, field, or index that does not currently exist in * the database schema. */ -class SchemaObjectDoesNotExistException extends SchemaException implements DatabaseException {} +class SchemaObjectDoesNotExistException extends SchemaException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/SchemaObjectExistsException.php +++ b/core/lib/Drupal/Core/Database/SchemaObjectExistsException.php @@ -9,4 +9,4 @@ * create a new database table, field, or index that already exists in the * database schema. */ -class SchemaObjectExistsException extends SchemaException implements DatabaseException {} +class SchemaObjectExistsException extends SchemaException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/TransactionCommitFailedException.php +++ b/core/lib/Drupal/Core/Database/TransactionCommitFailedException.php @@ -5,4 +5,4 @@ /** * Exception thrown when a commit() function fails. */ -class TransactionCommitFailedException extends TransactionException implements DatabaseException {} +class TransactionCommitFailedException extends TransactionException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/TransactionException.php +++ b/core/lib/Drupal/Core/Database/TransactionException.php @@ -5,4 +5,4 @@ /** * Exception thrown by an error in a database transaction. */ -class TransactionException extends \RuntimeException implements DatabaseException {} +class TransactionException extends \RuntimeException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/TransactionExplicitCommitNotAllowedException.php +++ b/core/lib/Drupal/Core/Database/TransactionExplicitCommitNotAllowedException.php @@ -8,4 +8,4 @@ * This exception will be thrown when the PDO connection commit() is called. * Code should never call this method directly. */ -class TransactionExplicitCommitNotAllowedException extends TransactionException implements DatabaseException {} +class TransactionExplicitCommitNotAllowedException extends TransactionException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/TransactionNameNonUniqueException.php +++ b/core/lib/Drupal/Core/Database/TransactionNameNonUniqueException.php @@ -5,4 +5,4 @@ /** * Exception thrown when a savepoint or transaction name occurs twice. */ -class TransactionNameNonUniqueException extends TransactionException implements DatabaseException {} +class TransactionNameNonUniqueException extends TransactionException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/TransactionNoActiveException.php +++ b/core/lib/Drupal/Core/Database/TransactionNoActiveException.php @@ -5,4 +5,4 @@ /** * Exception for when popTransaction() is called with no active transaction. */ -class TransactionNoActiveException extends TransactionException implements DatabaseException {} +class TransactionNoActiveException extends TransactionException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Database/TransactionOutOfOrderException.php +++ b/core/lib/Drupal/Core/Database/TransactionOutOfOrderException.php @@ -5,4 +5,4 @@ /** * Exception thrown when a rollBack() resulted in other active transactions being rolled-back. */ -class TransactionOutOfOrderException extends TransactionException implements DatabaseException {} +class TransactionOutOfOrderException extends TransactionException implements DatabaseException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Diff/DiffFormatter.php +++ b/core/lib/Drupal/Core/Diff/DiffFormatter.php @@ -192,7 +192,7 @@ protected function _changed($orig, $closing) { // Notice that WordLevelDiff returns HTML-escaped output. Hence, we will be // calling addedLine/deletedLine without HTML-escaping. while ($line = array_shift($del)) { - $aline = array_shift($add ); + $aline = array_shift( $add ); $this->rows[] = array_merge($this->deletedLine($line), isset($aline) ? $this->addedLine($aline) : $this->emptyLine()); } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php @@ -916,9 +916,7 @@ public function getTranslationStatus($langcode) { * {@inheritdoc} */ public function getTranslationLanguages($include_default = TRUE) { - $translations = array_filter($this->translations, function($translation) { - return $translation['status']; - }); + $translations = array_filter($this->translations, function($translation) { return $translation['status']; }); unset($translations[LanguageInterface::LANGCODE_DEFAULT]); if ($include_default) { only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/ContentEntityForm.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityForm.php @@ -127,15 +127,6 @@ public function form(array $form, FormStateInterface $form_state) { $this->addRevisionableFormFields($form); } - $form['footer'] = [ - '#type' => 'container', - '#weight' => 99, - '#attributes' => [ - 'class' => ['entity-content-form-footer'] - ], - '#optional' => TRUE, - ]; - return $form; } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php @@ -65,6 +65,16 @@ public static function createInstance(ContainerInterface $container, EntityTypeI /** * {@inheritdoc} */ + public function hasData() { + return (bool) $this->getQuery() + ->accessCheck(FALSE) + ->range(0, 1) + ->execute(); + } + + /** + * {@inheritdoc} + */ protected function doCreate(array $values) { // We have to determine the bundle first. $bundle = FALSE; @@ -80,40 +90,6 @@ protected function doCreate(array $values) { } /** - * {@inheritdoc} - */ - public function createWithSampleValues($bundle = FALSE, array $values = []) { - // ID and revision should never have sample values generated for them. - $forbidden_keys = [ - $this->entityType->getKey('id'), - ]; - if ($revision_key = $this->entityType->getKey('revision')) { - $forbidden_keys[] = $revision_key; - } - if ($bundle_key = $this->entityType->getKey('bundle')) { - if (!$bundle) { - throw new EntityStorageException("No entity bundle was specified"); - } - if (!array_key_exists($bundle, $this->entityManager->getBundleInfo($this->entityTypeId))) { - throw new EntityStorageException(sprintf("Missing entity bundle. The \"%s\" bundle does not exist", $bundle)); - } - $values[$bundle_key] = $bundle; - // Bundle is already set - $forbidden_keys[] = $bundle_key; - } - // Forbid sample generation on any keys whose values were submitted. - $forbidden_keys = array_merge($forbidden_keys, array_keys($values)); - /** @var \Drupal\Core\Entity\FieldableEntityInterface $entity */ - $entity = $this->create($values); - foreach ($entity as $field_name => $value) { - if (!in_array($field_name, $forbidden_keys, TRUE)) { - $entity->get($field_name)->generateSampleItems(); - } - } - return $entity; - } - - /** * Initializes field values. * * @param \Drupal\Core\Entity\ContentEntityInterface $entity @@ -153,12 +129,8 @@ protected function initFieldValues(ContentEntityInterface $entity, array $values */ public function createTranslation(ContentEntityInterface $entity, $langcode, array $values = []) { $translation = $entity->getTranslation($langcode); - $definitions = array_filter($translation->getFieldDefinitions(), function(FieldDefinitionInterface $definition) { - return $definition->isTranslatable(); - }); - $field_names = array_map(function(FieldDefinitionInterface $definition) { - return $definition->getName(); - }, $definitions); + $definitions = array_filter($translation->getFieldDefinitions(), function(FieldDefinitionInterface $definition) { return $definition->isTranslatable(); }); + $field_names = array_map(function(FieldDefinitionInterface $definition) { return $definition->getName(); }, $definitions); $values[$this->langcodeKey] = $langcode; $values[$this->getEntityType()->getKey('default_langcode')] = FALSE; $this->initFieldValues($translation, $values, $field_names); @@ -169,32 +141,32 @@ public function createTranslation(ContentEntityInterface $entity, $langcode, arr /** * {@inheritdoc} */ - public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) {} + public function onFieldStorageDefinitionCreate(FieldStorageDefinitionInterface $storage_definition) { } /** * {@inheritdoc} */ - public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {} + public function onFieldStorageDefinitionUpdate(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) { } /** * {@inheritdoc} */ - public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) {} + public function onFieldStorageDefinitionDelete(FieldStorageDefinitionInterface $storage_definition) { } /** * {@inheritdoc} */ - public function onFieldDefinitionCreate(FieldDefinitionInterface $field_definition) {} + public function onFieldDefinitionCreate(FieldDefinitionInterface $field_definition) { } /** * {@inheritdoc} */ - public function onFieldDefinitionUpdate(FieldDefinitionInterface $field_definition, FieldDefinitionInterface $original) {} + public function onFieldDefinitionUpdate(FieldDefinitionInterface $field_definition, FieldDefinitionInterface $original) { } /** * {@inheritdoc} */ - public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definition) {} + public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definition) { } /** * {@inheritdoc} @@ -238,7 +210,7 @@ public function purgeFieldData(FieldDefinitionInterface $field_definition, $batc /** * {@inheritdoc} */ - public function finalizePurge(FieldStorageDefinitionInterface $storage_definition) {} + public function finalizePurge(FieldStorageDefinitionInterface $storage_definition) { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/ContentEntityStorageInterface.php +++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageInterface.php @@ -23,21 +23,4 @@ */ public function createTranslation(ContentEntityInterface $entity, $langcode, array $values = []); - - /** - * Creates an entity with sample field values. - * - * @param string|bool $bundle - * (optional) The entity bundle. - * @param array $values - * (optional) Any default values to use during generation. - * - * @return \Drupal\Core\Entity\FieldableEntityInterface - * A fieldable content entity. - * - * @throws \Drupal\Core\Entity\EntityStorageException - * Thrown if the bundle does not exist or was needed but not specified. - */ - public function createWithSampleValues($bundle = FALSE, array $values = []); - } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/DynamicallyFieldableEntityStorageInterface.php +++ b/core/lib/Drupal/Core/Entity/DynamicallyFieldableEntityStorageInterface.php @@ -19,6 +19,14 @@ interface DynamicallyFieldableEntityStorageInterface extends FieldableEntityStorageInterface, FieldStorageDefinitionListenerInterface, FieldDefinitionListenerInterface { /** + * Determines if the storage contains any data. + * + * @return bool + * TRUE if the storage contains data, FALSE if not. + */ + public function hasData(); + + /** * Purges a batch of field data. * * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityMalformedException.php +++ b/core/lib/Drupal/Core/Entity/EntityMalformedException.php @@ -5,4 +5,4 @@ /** * Defines an exception thrown when a malformed entity is passed. */ -class EntityMalformedException extends \Exception {} +class EntityMalformedException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php +++ b/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php @@ -32,13 +32,11 @@ public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity throw new UnsupportedEntityTypeDefinitionException('The entity type ' . $entity_type->id() . ' does not have a "published" entity key.'); } - return [ - $entity_type->getKey('published') => BaseFieldDefinition::create('boolean') - ->setLabel(new TranslatableMarkup('Published')) - ->setRevisionable(TRUE) - ->setTranslatable(TRUE) - ->setDefaultValue(TRUE), - ]; + return [$entity_type->getKey('published') => BaseFieldDefinition::create('boolean') + ->setLabel(new TranslatableMarkup('Published')) + ->setRevisionable(TRUE) + ->setTranslatable(TRUE) + ->setDefaultValue(TRUE)]; } /** only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php +++ b/core/lib/Drupal/Core/Entity/EntityReferenceSelection/SelectionPluginBase.php @@ -81,17 +81,17 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta /** * {@inheritdoc} */ - public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {} + public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ - public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {} + public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ - public function entityQueryAlter(SelectInterface $query) {} + public function entityQueryAlter(SelectInterface $query) { } /** * Moves the backward compatibility level configurations in the right place. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityStorageBase.php +++ b/core/lib/Drupal/Core/Entity/EntityStorageBase.php @@ -508,16 +508,6 @@ public function loadByProperties(array $values = []) { /** * {@inheritdoc} */ - public function hasData() { - return (bool) $this->getQuery() - ->accessCheck(FALSE) - ->range(0, 1) - ->execute(); - } - - /** - * {@inheritdoc} - */ public function getQuery($conjunction = 'AND') { // Access the service directly rather than entity.query factory so the // storage's current entity type is used. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityStorageException.php +++ b/core/lib/Drupal/Core/Entity/EntityStorageException.php @@ -5,4 +5,4 @@ /** * Defines an exception thrown when storage operations fail. */ -class EntityStorageException extends \Exception {} +class EntityStorageException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityStorageInterface.php +++ b/core/lib/Drupal/Core/Entity/EntityStorageInterface.php @@ -143,14 +143,6 @@ public function delete(array $entities); public function save(EntityInterface $entity); /** - * Determines if the storage contains any data. - * - * @return bool - * TRUE if the storage contains data, FALSE if not. - */ - public function hasData(); - - /** * Gets an entity query instance. * * @param string $conjunction only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -337,7 +337,7 @@ public function buildComponents(array &$build, array $entities, array $displays, * @param string $view_mode * The view mode that should be used to prepare the entity. */ - protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {} + protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Exception/EntityTypeIdLengthException.php +++ b/core/lib/Drupal/Core/Entity/Exception/EntityTypeIdLengthException.php @@ -5,4 +5,4 @@ /** * Defines an exception thrown when an entity ID is too long. */ -class EntityTypeIdLengthException extends \Exception {} +class EntityTypeIdLengthException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php +++ b/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php @@ -5,4 +5,4 @@ /** * Defines an exception thrown when an entity type definition is invalid. */ -class UnsupportedEntityTypeDefinitionException extends \Exception {} +class UnsupportedEntityTypeDefinitionException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueContentEntityStorage.php @@ -18,9 +18,4 @@ public function createTranslation(ContentEntityInterface $entity, $langcode, arr // https://www.drupal.org/node/2618436. } - /** - * {@inheritdoc} - */ - public function createWithSampleValues($bundle = FALSE, array $values = []) {} - } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/KeyValueStore/KeyValueEntityStorage.php @@ -190,13 +190,6 @@ protected function has($id, EntityInterface $entity) { /** * {@inheritdoc} */ - public function hasData() { - return (bool) $this->keyValueStore->getAll(); - } - - /** - * {@inheritdoc} - */ protected function getQueryServiceName() { return 'entity.query.keyvalue'; } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php +++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php @@ -46,7 +46,7 @@ class EntityAdapter extends TypedData implements \IteratorAggregate, ComplexData public static function createFromEntity(EntityInterface $entity) { $definition = EntityDataDefinition::create() ->setEntityTypeId($entity->getEntityTypeId()) - ->setBundles([$entity->bundle() ]); + ->setBundles([ $entity->bundle() ]); $instance = new static($definition); $instance->setValue($entity); return $instance; only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php +++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php @@ -6,4 +6,4 @@ * @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0. * Use \Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection */ -class SelectionBase extends DefaultSelection {} +class SelectionBase extends DefaultSelection { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php +++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/ValidReferenceConstraintValidator.php @@ -121,29 +121,16 @@ public function validate($value, Constraint $constraint) { // Add violations on deltas with a target_id that is not valid. if ($target_ids) { - // Get a list of pre-existing references. - $previously_referenced_ids = []; - if ($value->getParent() && ($entity = $value->getEntity()) && !$entity->isNew()) { - $existing_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id()); - foreach ($existing_entity->{$value->getFieldDefinition()->getName()}->getValue() as $item) { - $previously_referenced_ids[$item['target_id']] = $item['target_id']; - } - } - $valid_target_ids = $handler->validateReferenceableEntities($target_ids); if ($invalid_target_ids = array_diff($target_ids, $valid_target_ids)) { // For accuracy of the error message, differentiate non-referenceable // and non-existent entities. - $existing_entities = $this->entityTypeManager->getStorage($target_type_id)->loadMultiple($invalid_target_ids); + $target_type = $this->entityTypeManager->getDefinition($target_type_id); + $existing_ids = $this->entityTypeManager->getStorage($target_type_id)->getQuery() + ->condition($target_type->getKey('id'), $invalid_target_ids, 'IN') + ->execute(); foreach ($invalid_target_ids as $delta => $target_id) { - // Check if any of the invalid existing references are simply not - // accessible by the user, in which case they need to be excluded from - // validation - if (isset($previously_referenced_ids[$target_id]) && isset($existing_entities[$target_id]) && !$existing_entities[$target_id]->access('view')) { - continue; - } - - $message = isset($existing_entities[$target_id]) ? $constraint->message : $constraint->nonExistingMessage; + $message = in_array($target_id, $existing_ids) ? $constraint->message : $constraint->nonExistingMessage; $this->context->buildViolation($message) ->setParameter('%type', $target_type_id) ->setParameter('%id', $target_id) only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Query/QueryBase.php +++ b/core/lib/Drupal/Core/Entity/Query/QueryBase.php @@ -348,14 +348,14 @@ public function hasTag($tag) { * {@inheritdoc} */ public function hasAllTags() { - return !(boolean) array_diff(func_get_args(), array_keys($this->alterTags)); + return !(boolean)array_diff(func_get_args(), array_keys($this->alterTags)); } /** * {@inheritdoc} */ public function hasAnyTag() { - return (boolean) array_intersect(func_get_args(), array_keys($this->alterTags)); + return (boolean)array_intersect(func_get_args(), array_keys($this->alterTags)); } /** only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Query/QueryException.php +++ b/core/lib/Drupal/Core/Entity/Query/QueryException.php @@ -9,4 +9,4 @@ * conditions, and will raise a QueryException when an unsupported * condition was specified. */ -class QueryException extends \Exception {} +class QueryException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php +++ b/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php @@ -172,7 +172,7 @@ protected function result() { } $return = []; foreach ($this->sqlQuery->execute() as $row) { - $return[] = (array) $row; + $return[] = (array)$row; } return $return; } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php +++ b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php @@ -8,7 +8,6 @@ use Drupal\Core\Entity\Sql\SqlEntityStorageInterface; use Drupal\Core\Entity\Sql\TableMappingInterface; use Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface; -use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\TypedData\DataReferenceDefinitionInterface; /** @@ -274,7 +273,7 @@ public function addField($field, $type, $langcode) { $entity_type = $this->entityManager->getDefinition($entity_type_id); $field_storage_definitions = $this->entityManager->getFieldStorageDefinitions($entity_type_id); // Add the new entity base table using the table and sql column. - $base_table = $this->addNextBaseTable($entity_type, $table, $sql_column, $field_storage); + $base_table = $this->addNextBaseTable($entity_type, $table, $sql_column); $propertyDefinitions = []; $key++; $index_prefix .= "$next_index_prefix."; @@ -396,13 +395,11 @@ protected function getTableMapping($table, $entity_type_id) { * This is the table being joined, in the above example, {users}. * @param string $sql_column * This is the SQL column in the existing table being joined to. - * @param \Drupal\Core\Field\FieldStorageDefinitionInterface $field_storage - * The field storage definition for the field referencing this column. * * @return string * The alias of the next entity table joined in. */ - protected function addNextBaseTable(EntityType $entity_type, $table, $sql_column, FieldStorageDefinitionInterface $field_storage) { + protected function addNextBaseTable(EntityType $entity_type, $table, $sql_column) { $join_condition = '%alias.' . $entity_type->getKey('id') . " = $table.$sql_column"; return $this->sqlQuery->leftJoin($entity_type->getBaseTable(), NULL, $join_condition); } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php +++ b/core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php @@ -296,15 +296,9 @@ public function requiresDedicatedTableStorage(FieldStorageDefinitionInterface $s */ public function getDedicatedTableNames() { $table_mapping = $this; - $definitions = array_filter($this->fieldStorageDefinitions, function($definition) use ($table_mapping) { - return $table_mapping->requiresDedicatedTableStorage($definition); - }); - $data_tables = array_map(function($definition) use ($table_mapping) { - return $table_mapping->getDedicatedDataTableName($definition); - }, $definitions); - $revision_tables = array_map(function($definition) use ($table_mapping) { - return $table_mapping->getDedicatedRevisionTableName($definition); - }, $definitions); + $definitions = array_filter($this->fieldStorageDefinitions, function($definition) use ($table_mapping) { return $table_mapping->requiresDedicatedTableStorage($definition); }); + $data_tables = array_map(function($definition) use ($table_mapping) { return $table_mapping->getDedicatedDataTableName($definition); }, $definitions); + $revision_tables = array_map(function($definition) use ($table_mapping) { return $table_mapping->getDedicatedRevisionTableName($definition); }, $definitions); $dedicated_tables = array_merge(array_values($data_tables), array_values($revision_tables)); return $dedicated_tables; } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -1540,12 +1540,12 @@ public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definiti /** * {@inheritdoc} */ - public function onBundleCreate($bundle, $entity_type_id) {} + public function onBundleCreate($bundle, $entity_type_id) { } /** * {@inheritdoc} */ - public function onBundleDelete($bundle, $entity_type_id) {} + public function onBundleDelete($bundle, $entity_type_id) { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php @@ -1529,9 +1529,7 @@ protected function createEntitySchemaIndexes(array $entity_schema, FieldStorageD // involving them. Only indexes for which all columns exist are // actually created. $create = FALSE; - $specifier_columns = array_map(function($item) { - return is_string($item) ? $item : reset($item); - }, $specifier); + $specifier_columns = array_map(function($item) { return is_string($item) ? $item : reset($item); }, $specifier); if (!isset($column_names) || array_intersect($specifier_columns, $column_names)) { $create = TRUE; foreach ($specifier_columns as $specifier_column_name) { @@ -1580,9 +1578,7 @@ protected function deleteEntitySchemaIndexes(array $entity_schema_data, FieldSto foreach ($index_keys as $key => $drop_method) { if (!empty($schema[$key])) { foreach ($schema[$key] as $name => $specifier) { - $specifier_columns = array_map(function($item) { - return is_string($item) ? $item : reset($item); - }, $specifier); + $specifier_columns = array_map(function($item) { return is_string($item) ? $item : reset($item); }, $specifier); if (!isset($column_names) || array_intersect($specifier_columns, $column_names)) { $schema_handler->{$drop_method}($table_name, $name); } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php @@ -346,9 +346,7 @@ protected function copyData(array &$sandbox) { * An array of updated field storage definitions. */ protected function updateFieldStorageDefinitionsToRevisionable(ContentEntityTypeInterface $entity_type, array $storage_definitions, array $fields_to_update = [], $update_cached_definitions = TRUE) { - $updated_storage_definitions = array_map(function ($storage_definition) { - return clone $storage_definition; - }, $storage_definitions); + $updated_storage_definitions = array_map(function ($storage_definition) { return clone $storage_definition; }, $storage_definitions); // Update the 'langcode' field manually, as it is configured in the base // content entity field definitions. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Extension/ExtensionNameLengthException.php +++ b/core/lib/Drupal/Core/Extension/ExtensionNameLengthException.php @@ -5,4 +5,4 @@ /** * Exception thrown when the extension's name length exceeds the allowed maximum. */ -class ExtensionNameLengthException extends \Exception {} +class ExtensionNameLengthException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Extension/ModuleUninstallValidatorException.php +++ b/core/lib/Drupal/Core/Extension/ModuleUninstallValidatorException.php @@ -5,4 +5,4 @@ /** * Defines an exception thrown when uninstalling a module that did not validate. */ -class ModuleUninstallValidatorException extends \InvalidArgumentException {} +class ModuleUninstallValidatorException extends \InvalidArgumentException { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Extension/module.api.php +++ b/core/lib/Drupal/Core/Extension/module.api.php @@ -449,7 +449,8 @@ function hook_install_tasks(&$install_state) { // tasks are complete, with a link to reload the current page and therefore // pass on to the final Drupal installation tasks when the user is ready to // do so). - 'myprofile_final_site_setup' => [], + 'myprofile_final_site_setup' => [ + ], ]; return $tasks; } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Field/FieldItemBase.php +++ b/core/lib/Drupal/Core/Field/FieldItemBase.php @@ -191,27 +191,27 @@ public function view($display_options = []) { /** * {@inheritdoc} */ - public function preSave() {} + public function preSave() { } /** * {@inheritdoc} */ - public function postSave($update) {} + public function postSave($update) { } /** * {@inheritdoc} */ - public function delete() {} + public function delete() { } /** * {@inheritdoc} */ - public static function generateSampleValue(FieldDefinitionInterface $field_definition) {} + public static function generateSampleValue(FieldDefinitionInterface $field_definition) { } /** * {@inheritdoc} */ - public function deleteRevision() {} + public function deleteRevision() { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/lib/Drupal/Core/Field/FieldItemList.php +++ b/core/lib/Drupal/Core/Field/FieldItemList.php @@ -259,7 +259,7 @@ public function view($display_options = []) { */ public function generateSampleItems($count = 1) { $field_definition = $this->getFieldDefinition(); - $field_type_class = $field_definition->getItemDefinition()->getClass(); + $field_type_class = \Drupal::service('plugin.manager.field.field_type')->getPluginClass($field_definition->getType()); for ($delta = 0; $delta < $count; $delta++) { $values[$delta] = $field_type_class::generateSampleValue($field_definition); } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Field/FormatterBase.php +++ b/core/lib/Drupal/Core/Field/FormatterBase.php @@ -125,7 +125,7 @@ public function settingsSummary() { /** * {@inheritdoc} */ - public function prepareView(array $entities_items) {} + public function prepareView(array $entities_items) { } /** * Returns the array of field settings. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php @@ -193,6 +193,6 @@ protected function sanitizeLabel(&$label) { * @return string|null * Either a label of the empty option, or NULL. */ - protected function getEmptyLabel() {} + protected function getEmptyLabel() { } } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Flood/MemoryBackend.php +++ b/core/lib/Drupal/Core/Flood/MemoryBackend.php @@ -61,9 +61,6 @@ public function isAllowed($name, $threshold, $window = 3600, $identifier = NULL) if (!isset($identifier)) { $identifier = $this->requestStack->getCurrentRequest()->getClientIp(); } - if (!isset($this->events[$name][$identifier])) { - return $threshold > 0; - } $limit = microtime(TRUE) - $window; $number = count(array_filter($this->events[$name][$identifier], function ($timestamp) use ($limit) { return $timestamp > $limit; only in patch2: unchanged: --- a/core/lib/Drupal/Core/Form/FormState.php +++ b/core/lib/Drupal/Core/Form/FormState.php @@ -1186,7 +1186,7 @@ public function setCleanValueKeys(array $cleanValueKeys) { */ public function addCleanValueKey($cleanValueKey) { $keys = $this->getCleanValueKeys(); - $this->setCleanValueKeys(array_merge((array) $keys, [$cleanValueKey])); + $this->setCleanValueKeys(array_merge((array)$keys, [$cleanValueKey])); return $this; } only in patch2: unchanged: --- a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php +++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php @@ -73,7 +73,7 @@ public function __construct(array $configuration, $plugin_id, array $plugin_defi /** * {@inheritdoc} */ - public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {} + public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/lib/Drupal/Core/KeyValueStore/NullStorageExpirable.php +++ b/core/lib/Drupal/Core/KeyValueStore/NullStorageExpirable.php @@ -59,17 +59,17 @@ public function getAll() { /** * {@inheritdoc} */ - public function set($key, $value) {} + public function set($key, $value) { } /** * {@inheritdoc} */ - public function setIfNotExists($key, $value) {} + public function setIfNotExists($key, $value) { } /** * {@inheritdoc} */ - public function setMultiple(array $data) {} + public function setMultiple(array $data) { } /** * {@inheritdoc} @@ -80,17 +80,17 @@ public function rename($key, $new_key) { /** * {@inheritdoc} */ - public function delete($key) {} + public function delete($key) { } /** * {@inheritdoc} */ - public function deleteMultiple(array $keys) {} + public function deleteMultiple(array $keys) { } /** * {@inheritdoc} */ - public function deleteAll() {} + public function deleteAll() { } /** * {@inheritdoc} @@ -102,16 +102,16 @@ public function getCollectionName() { /** * {@inheritdoc} */ - public function setMultipleWithExpire(array $data, $expire) {} + public function setMultipleWithExpire(array $data, $expire) { } /** * {@inheritdoc} */ - public function setWithExpire($key, $value, $expire) {} + public function setWithExpire($key, $value, $expire) { } /** * {@inheritdoc} */ - public function setWithExpireIfNotExists($key, $value, $expire) {} + public function setWithExpireIfNotExists($key, $value, $expire) { } } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Mail/MailFormatHelper.php +++ b/core/lib/Drupal/Core/Mail/MailFormatHelper.php @@ -106,8 +106,7 @@ public static function htmlToText($string, $allowed_tags = NULL) { if (empty(static::$supportedTags)) { static::$supportedTags = ['a', 'em', 'i', 'strong', 'b', 'br', 'p', 'blockquote', 'ul', 'ol', 'li', 'dl', 'dt', 'dd', 'h1', 'h2', 'h3', - 'h4', 'h5', 'h6', 'hr', - ]; + 'h4', 'h5', 'h6', 'hr']; } // Make sure only supported tags are kept. only in patch2: unchanged: --- a/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php +++ b/core/lib/Drupal/Core/Mail/Plugin/Mail/PhpMail.php @@ -75,7 +75,7 @@ public function mail(array $message) { $mail_body = preg_replace('@\r?\n@', $line_endings, $message['body']); // For headers, PHP's API suggests that we use CRLF normally, // but some MTAs incorrectly replace LF with CRLF. See #234403. - $mail_headers = implode("\n", $mimeheaders); + $mail_headers = join("\n", $mimeheaders); $request = \Drupal::request(); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php +++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php @@ -234,7 +234,7 @@ public function getLocalTasksForRoute($route_name) { if ($base_routes) { // Find all the plugins with the same root and that are at the top // level or that have a visible parent. - foreach ($definitions as $plugin_id => $task_info) { + foreach ($definitions as $plugin_id => $task_info) { if (!empty($base_routes[$task_info['base_route']]) && (empty($task_info['parent_id']) || !empty($parents[$task_info['parent_id']]))) { // Concat '> ' with root ID for the parent of top-level tabs. $parent = empty($task_info['parent_id']) ? '> ' . $task_info['base_route'] : $task_info['parent_id']; only in patch2: unchanged: --- a/core/lib/Drupal/Core/Render/HtmlResponse.php +++ b/core/lib/Drupal/Core/Render/HtmlResponse.php @@ -31,11 +31,9 @@ public function setContent($content) { // A render array can automatically be converted to a string and set the // necessary metadata. if (is_array($content) && (isset($content['#markup']))) { - $content += [ - '#attached' => [ - 'html_response_attachment_placeholders' => [], - 'placeholders' => [], - ], + $content += ['#attached' => [ + 'html_response_attachment_placeholders' => [], + 'placeholders' => []], ]; $this->addCacheableDependency(CacheableMetadata::createFromRenderArray($content)); $this->setAttachments($content['#attached']); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Render/Renderer.php +++ b/core/lib/Drupal/Core/Render/Renderer.php @@ -309,9 +309,7 @@ protected function doRender(&$elements, $is_root_call = FALSE) { if (count($elements['#lazy_builder']) !== 2) { throw new \DomainException('The #lazy_builder property must have an array as a value, containing two values: the callback, and the arguments for the callback.'); } - if (count($elements['#lazy_builder'][1]) !== count(array_filter($elements['#lazy_builder'][1], function($v) { - return is_null($v) || is_scalar($v); - }))) { + if (count($elements['#lazy_builder'][1]) !== count(array_filter($elements['#lazy_builder'][1], function($v) { return is_null($v) || is_scalar($v); }))) { throw new \DomainException("A #lazy_builder callback's context may only contain scalar values or NULL."); } $children = Element::children($elements); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Routing/GeneratorNotInitializedException.php +++ b/core/lib/Drupal/Core/Routing/GeneratorNotInitializedException.php @@ -5,4 +5,4 @@ /** * Class for exceptions thrown when the generator has not been initialized. */ -class GeneratorNotInitializedException extends \Exception {} +class GeneratorNotInitializedException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Routing/RouteProvider.php +++ b/core/lib/Drupal/Core/Routing/RouteProvider.php @@ -347,8 +347,7 @@ protected function getRoutesByPath($path) { // dump the route pattern without those optional parts. try { $routes = $this->connection->query("SELECT name, route, fit FROM {" . $this->connection->escapeTable($this->tableName) . "} WHERE pattern_outline IN ( :patterns[] ) AND number_parts >= :count_parts", [ - ':patterns[]' => $ancestors, - ':count_parts' => count($parts), + ':patterns[]' => $ancestors, ':count_parts' => count($parts), ]) ->fetchAll(\PDO::FETCH_ASSOC); } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Utility/UpdateException.php +++ b/core/lib/Drupal/Core/Utility/UpdateException.php @@ -5,4 +5,4 @@ /** * Exception class used to throw error if a module update fails. */ -class UpdateException extends \Exception {} +class UpdateException extends \Exception { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php +++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/IsNullConstraint.php @@ -15,4 +15,4 @@ * type = false * ) */ -class IsNullConstraint extends IsNull {} +class IsNullConstraint extends IsNull { } only in patch2: unchanged: --- a/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraint.php +++ b/core/lib/Drupal/Core/Validation/Plugin/Validation/Constraint/NotNullConstraint.php @@ -15,4 +15,4 @@ * type = false * ) */ -class NotNullConstraint extends NotNull {} +class NotNullConstraint extends NotNull { } only in patch2: unchanged: --- a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php +++ b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php @@ -84,13 +84,11 @@ public function fetch(FeedInterface $feed) { /** @var \Psr\Http\Message\UriInterface $actual_uri */ $actual_uri = NULL; - $response = $this->httpClientFactory->fromOptions([ - 'allow_redirects' => [ - 'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $uri) use (&$actual_uri) { - $actual_uri = (string) $uri; - } - ], - ])->send($request); + $response = $this->httpClientFactory->fromOptions(['allow_redirects' => [ + 'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $uri) use (&$actual_uri) { + $actual_uri = (string) $uri; + } + ]])->send($request); // In case of a 304 Not Modified, there is no new content, so return // FALSE. only in patch2: unchanged: --- a/core/modules/big_pipe/tests/modules/big_pipe_test/src/Form/BigPipeTestForm.php +++ b/core/modules/big_pipe/tests/modules/big_pipe_test/src/Form/BigPipeTestForm.php @@ -35,6 +35,6 @@ public function buildForm(array $form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function submitForm(array &$form, FormStateInterface $form_state) {} + public function submitForm(array &$form, FormStateInterface $form_state) { } } only in patch2: unchanged: --- a/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php +++ b/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php @@ -374,9 +374,7 @@ protected function assertBigPipePlaceholders(array $expected_big_pipe_placeholde } ksort($placeholder_positions, SORT_NUMERIC); $this->assertEqual(array_keys($expected_big_pipe_placeholders), array_values($placeholder_positions)); - $placeholders = array_map(function(NodeElement $element) { - return $element->getAttribute('data-big-pipe-placeholder-id'); - }, $this->cssSelect('[data-big-pipe-placeholder-id]')); + $placeholders = array_map(function(NodeElement $element) { return $element->getAttribute('data-big-pipe-placeholder-id'); }, $this->cssSelect('[data-big-pipe-placeholder-id]')); $this->assertEqual(count($expected_big_pipe_placeholders), count(array_unique($placeholders))); $expected_big_pipe_placeholders_with_replacements = []; foreach ($expected_big_pipe_placeholder_stream_order as $big_pipe_placeholder_id) { only in patch2: unchanged: --- a/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php +++ b/core/modules/big_pipe/tests/src/Unit/Render/Placeholder/BigPipeStrategyTest.php @@ -83,29 +83,25 @@ public function placeholdersProvider() { '_no_big_pipe present, no session, no-JS cookie present' => [$placeholders, 'GET', TRUE, FALSE, TRUE, []], '_no_big_pipe present, session, no-JS cookie absent' => [$placeholders, 'GET', TRUE, TRUE, FALSE, []], '_no_big_pipe present, session, no-JS cookie present' => [$placeholders, 'GET', TRUE, TRUE, TRUE, []], - '_no_big_pipe absent, session, no-JS cookie absent: (JS-powered) BigPipe placeholder used for HTML placeholders' => [ - $placeholders, 'GET', FALSE, TRUE, FALSE, [ - $cases['html']->placeholder => $cases['html']->bigPipePlaceholderRenderArray, - $cases['html_attribute_value']->placeholder => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray, - $cases['html_attribute_value_subset']->placeholder => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray, - $cases['edge_case__invalid_html']->placeholder => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray, - $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipePlaceholderRenderArray, - $cases['exception__lazy_builder']->placeholder => $cases['exception__lazy_builder']->bigPipePlaceholderRenderArray, - $cases['exception__embedded_response']->placeholder => $cases['exception__embedded_response']->bigPipePlaceholderRenderArray, - ], - ], + '_no_big_pipe absent, session, no-JS cookie absent: (JS-powered) BigPipe placeholder used for HTML placeholders' => [$placeholders, 'GET', FALSE, TRUE, FALSE, [ + $cases['html']->placeholder => $cases['html']->bigPipePlaceholderRenderArray, + $cases['html_attribute_value']->placeholder => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray, + $cases['html_attribute_value_subset']->placeholder => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray, + $cases['edge_case__invalid_html']->placeholder => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray, + $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipePlaceholderRenderArray, + $cases['exception__lazy_builder']->placeholder => $cases['exception__lazy_builder']->bigPipePlaceholderRenderArray, + $cases['exception__embedded_response']->placeholder => $cases['exception__embedded_response']->bigPipePlaceholderRenderArray, + ]], '_no_big_pipe absent, session, no-JS cookie absent: (JS-powered) BigPipe placeholder used for HTML placeholders — but unsafe method' => [$placeholders, 'POST', FALSE, TRUE, FALSE, []], - '_no_big_pipe absent, session, no-JS cookie present: no-JS BigPipe placeholder used for HTML placeholders' => [ - $placeholders, 'GET', FALSE, TRUE, TRUE, [ - $cases['html']->placeholder => $cases['html']->bigPipeNoJsPlaceholderRenderArray, - $cases['html_attribute_value']->placeholder => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray, - $cases['html_attribute_value_subset']->placeholder => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray, - $cases['edge_case__invalid_html']->placeholder => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray, - $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipeNoJsPlaceholderRenderArray, - $cases['exception__lazy_builder']->placeholder => $cases['exception__lazy_builder']->bigPipeNoJsPlaceholderRenderArray, - $cases['exception__embedded_response']->placeholder => $cases['exception__embedded_response']->bigPipeNoJsPlaceholderRenderArray, - ], - ], + '_no_big_pipe absent, session, no-JS cookie present: no-JS BigPipe placeholder used for HTML placeholders' => [$placeholders, 'GET', FALSE, TRUE, TRUE, [ + $cases['html']->placeholder => $cases['html']->bigPipeNoJsPlaceholderRenderArray, + $cases['html_attribute_value']->placeholder => $cases['html_attribute_value']->bigPipeNoJsPlaceholderRenderArray, + $cases['html_attribute_value_subset']->placeholder => $cases['html_attribute_value_subset']->bigPipeNoJsPlaceholderRenderArray, + $cases['edge_case__invalid_html']->placeholder => $cases['edge_case__invalid_html']->bigPipeNoJsPlaceholderRenderArray, + $cases['edge_case__html_non_lazy_builder']->placeholder => $cases['edge_case__html_non_lazy_builder']->bigPipeNoJsPlaceholderRenderArray, + $cases['exception__lazy_builder']->placeholder => $cases['exception__lazy_builder']->bigPipeNoJsPlaceholderRenderArray, + $cases['exception__embedded_response']->placeholder => $cases['exception__embedded_response']->bigPipeNoJsPlaceholderRenderArray, + ]], '_no_big_pipe absent, session, no-JS cookie present: no-JS BigPipe placeholder used for HTML placeholders — but unsafe method' => [$placeholders, 'POST', FALSE, TRUE, TRUE, []], ]; } only in patch2: unchanged: --- a/core/modules/block/src/Plugin/migrate/source/Block.php +++ b/core/modules/block/src/Plugin/migrate/source/Block.php @@ -84,7 +84,7 @@ public function fields() { return [ 'bid' => $this->t('The block numeric identifier.'), 'module' => $this->t('The module providing the block.'), - 'delta' => $this->t("The block's delta."), + 'delta' => $this->t('The block\'s delta.'), 'theme' => $this->t('Which theme the block is placed in.'), 'status' => $this->t('Whether or not the block is enabled.'), 'weight' => $this->t('Weight of the block for ordering within regions.'), only in patch2: unchanged: --- a/core/modules/block/tests/src/Functional/BlockTest.php +++ b/core/modules/block/tests/src/Functional/BlockTest.php @@ -336,7 +336,7 @@ public function moveBlockToRegion(array $block, $region) { $this->drupalPostForm('admin/structure/block', $edit, t('Save blocks')); // Confirm that the block was moved to the proper region. - $this->assertText(t('The block settings have been updated.'), format_string('Block successfully moved to %region_name region.', ['%region_name' => $region])); + $this->assertText(t('The block settings have been updated.'), format_string('Block successfully moved to %region_name region.', [ '%region_name' => $region])); // Confirm that the block is being displayed. $this->drupalGet(''); only in patch2: unchanged: --- a/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php +++ b/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php @@ -267,7 +267,7 @@ public function testBlockRendering() { $result = $this->xpath('//div[contains(@class, "region-sidebar-first")]/div[contains(@class, "block-views")]/h2'); $this->assertTrue(empty($result), 'The title is not visible.'); - $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:system.site', 'config:views.view.test_view_block', 'http_response', 'rendered'])); + $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:system.site', 'config:views.view.test_view_block' , 'http_response', 'rendered'])); } /** @@ -293,7 +293,7 @@ public function testBlockEmptyRendering() { $this->assertEqual(0, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]'))); // Ensure that the view cacheability metadata is propagated even, for an // empty block. - $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block', 'http_response', 'rendered'])); + $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'http_response', 'rendered'])); $this->assertCacheContexts(['url.query_args:_wrapper_format']); // Add a header displayed on empty result. @@ -311,7 +311,7 @@ public function testBlockEmptyRendering() { $this->drupalGet($url); $this->assertEqual(1, count($this->xpath('//div[contains(@class, "block-views-blocktest-view-block-block-1")]'))); - $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block', 'http_response', 'rendered'])); + $this->assertCacheTags(array_merge($block->getCacheTags(), ['block_view', 'config:block_list', 'config:views.view.test_view_block' , 'http_response', 'rendered'])); $this->assertCacheContexts(['url.query_args:_wrapper_format']); // Hide the header on empty results. only in patch2: unchanged: --- a/core/modules/block/tests/src/Unit/BlockFormTest.php +++ b/core/modules/block/tests/src/Unit/BlockFormTest.php @@ -3,8 +3,6 @@ namespace Drupal\Tests\block\Unit; use Drupal\block\BlockForm; -use Drupal\block\Entity\Block; -use Drupal\Core\Block\BlockBase; use Drupal\Core\Plugin\PluginFormFactoryInterface; use Drupal\Tests\UnitTestCase; @@ -85,32 +83,6 @@ protected function setUp() { } /** - * Mocks a block with a block plugin. - * - * @param string $machine_name - * The machine name of the block plugin. - * - * @return \Drupal\block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject - * The mocked block. - */ - protected function getBlockMockWithMachineName($machine_name) { - $plugin = $this->getMockBuilder(BlockBase::class) - ->disableOriginalConstructor() - ->getMock(); - $plugin->expects($this->any()) - ->method('getMachineNameSuggestion') - ->will($this->returnValue($machine_name)); - - $block = $this->getMockBuilder(Block::class) - ->disableOriginalConstructor() - ->getMock(); - $block->expects($this->any()) - ->method('getPlugin') - ->will($this->returnValue($plugin)); - return $block; - } - - /** * Tests the unique machine name generator. * * @see \Drupal\block\BlockForm::getUniqueMachineName() only in patch2: unchanged: --- a/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php +++ b/core/modules/block/tests/src/Unit/Menu/BlockLocalTasksTest.php @@ -16,9 +16,9 @@ protected function setUp() { $this->directoryList = ['block' => 'core/modules/block']; parent::setUp(); - $config_factory = $this->getConfigFactoryStub([ - 'system.theme' => ['default' => 'test_c'], - ]); + $config_factory = $this->getConfigFactoryStub(['system.theme' => [ + 'default' => 'test_c', + ]]); $themes = []; $themes['test_a'] = (object) [ only in patch2: unchanged: --- a/core/modules/block_content/block_content.install +++ b/core/modules/block_content/block_content.install @@ -6,23 +6,6 @@ */ use Drupal\Core\Field\BaseFieldDefinition; -use Drupal\Core\StringTranslation\TranslatableMarkup; - -/** - * Implements hook_update_dependencies(). - */ -function block_content_update_dependencies() { - // The update function that adds the status field must run after - // content_translation_update_8400() which fixes NULL values for the - // 'content_translation_status' field. - if (\Drupal::moduleHandler()->moduleExists('content_translation')) { - $dependencies['block_content'][8400] = [ - 'content_translation' => 8400, - ]; - - return $dependencies; - } -} /** * Add 'revision_translation_affected' field to 'block_content' entities. @@ -87,54 +70,5 @@ function block_content_update_8300() { $entity_type = $definition_update_manager->getEntityType('block_content'); $entity_type->set('revision_data_table', 'block_content_field_revision'); $definition_update_manager->updateEntityType($entity_type); -} - -/** - * Add a publishing status field for block_content entities. - */ -function block_content_update_8400() { - $definition_update_manager = \Drupal::entityDefinitionUpdateManager(); - - // Add the published entity key to the block_content entity type. - $entity_type = $definition_update_manager->getEntityType('block_content'); - $entity_keys = $entity_type->getKeys(); - $entity_keys['published'] = 'status'; - $entity_type->set('entity_keys', $entity_keys); - $definition_update_manager->updateEntityType($entity_type); - - // Add the publishing status field to the block_content entity type. - $status = BaseFieldDefinition::create('boolean') - ->setLabel(new TranslatableMarkup('Publishing status')) - ->setDescription(new TranslatableMarkup('A boolean indicating the published state.')) - ->setRevisionable(TRUE) - ->setTranslatable(TRUE) - ->setDefaultValue(TRUE); - - $has_content_translation_status_field = \Drupal::moduleHandler()->moduleExists('content_translation') && $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content'); - if ($has_content_translation_status_field) { - $status->setInitialValueFromField('content_translation_status'); - } - else { - $status->setInitialValue(TRUE); - } - $definition_update_manager->installFieldStorageDefinition('status', 'block_content', 'block_content', $status); - - // Uninstall the 'content_translation_status' field if needed. - $database = \Drupal::database(); - if ($has_content_translation_status_field) { - // First we have to remove the field data. - $database->update($entity_type->getDataTable()) - ->fields(['content_translation_status' => NULL]) - ->execute(); - - // A site may have disabled revisionability for this entity type. - if ($entity_type->isRevisionable()) { - $database->update($entity_type->getRevisionDataTable()) - ->fields(['content_translation_status' => NULL]) - ->execute(); - } - $content_translation_status = $definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content'); - $definition_update_manager->uninstallFieldStorageDefinition($content_translation_status); - } } only in patch2: unchanged: --- a/core/modules/block_content/src/BlockContentAccessControlHandler.php +++ b/core/modules/block_content/src/BlockContentAccessControlHandler.php @@ -19,8 +19,7 @@ class BlockContentAccessControlHandler extends EntityAccessControlHandler { */ protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { if ($operation === 'view') { - return AccessResult::allowedIf($entity->isPublished())->addCacheableDependency($entity) - ->orIf(AccessResult::allowedIfHasPermission($account, 'administer blocks')); + return AccessResult::allowed(); } return parent::checkAccess($entity, $operation, $account); } only in patch2: unchanged: --- a/core/modules/block_content/src/BlockContentInterface.php +++ b/core/modules/block_content/src/BlockContentInterface.php @@ -4,13 +4,12 @@ use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\EntityChangedInterface; -use Drupal\Core\Entity\EntityPublishedInterface; use Drupal\Core\Entity\RevisionLogInterface; /** * Provides an interface defining a custom block entity. */ -interface BlockContentInterface extends ContentEntityInterface, EntityChangedInterface, RevisionLogInterface, EntityPublishedInterface { +interface BlockContentInterface extends ContentEntityInterface, EntityChangedInterface, RevisionLogInterface { /** * Returns the block revision log message. only in patch2: unchanged: --- a/core/modules/block_content/src/Entity/BlockContent.php +++ b/core/modules/block_content/src/Entity/BlockContent.php @@ -2,7 +2,8 @@ namespace Drupal\block_content\Entity; -use Drupal\Core\Entity\EditorialContentEntityBase; +use Drupal\Core\Entity\ContentEntityBase; +use Drupal\Core\Entity\EntityChangedTrait; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; @@ -50,8 +51,7 @@ * "bundle" = "type", * "label" = "info", * "langcode" = "langcode", - * "uuid" = "uuid", - * "published" = "status", + * "uuid" = "uuid" * }, * revision_metadata_keys = { * "revision_user" = "revision_user", @@ -68,7 +68,9 @@ * caching. * See https://www.drupal.org/node/2284917#comment-9132521 for more information. */ -class BlockContent extends EditorialContentEntityBase implements BlockContentInterface { +class BlockContent extends ContentEntityBase implements BlockContentInterface { + + use EntityChangedTrait; /** * The theme the block is being created in. @@ -172,8 +174,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields['type']->setLabel(t('Block type')) ->setDescription(t('The block type.')); - $fields['revision_log']->setDescription(t('The log entry explaining the changes in this revision.')); - $fields['info'] = BaseFieldDefinition::create('string') ->setLabel(t('Block description')) ->setDescription(t('A brief description of your block.')) @@ -187,12 +187,35 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->setDisplayConfigurable('form', TRUE) ->addConstraint('UniqueField', []); + $fields['revision_log'] = BaseFieldDefinition::create('string_long') + ->setLabel(t('Revision log message')) + ->setDescription(t('The log entry explaining the changes in this revision.')) + ->setRevisionable(TRUE) + ->setDisplayOptions('form', [ + 'type' => 'string_textarea', + 'weight' => 25, + 'settings' => [ + 'rows' => 4, + ], + ]); + $fields['changed'] = BaseFieldDefinition::create('changed') ->setLabel(t('Changed')) ->setDescription(t('The time that the custom block was last edited.')) ->setTranslatable(TRUE) ->setRevisionable(TRUE); + $fields['revision_created'] = BaseFieldDefinition::create('created') + ->setLabel(t('Revision create time')) + ->setDescription(t('The time that the current revision was created.')) + ->setRevisionable(TRUE); + + $fields['revision_user'] = BaseFieldDefinition::create('entity_reference') + ->setLabel(t('Revision user')) + ->setDescription(t('The user ID of the author of the current revision.')) + ->setSetting('target_type', 'user') + ->setRevisionable(TRUE); + return $fields; } only in patch2: unchanged: --- a/core/modules/block_content/tests/src/Functional/UnpublishedBlockTest.php +++ /dev/null @@ -1,47 +0,0 @@ - 'Test block', - 'type' => 'basic', - ]); - $block_content->save(); - - $this->placeBlock('block_content:' . $block_content->uuid()); - - $this->drupalGet(''); - $page = $this->getSession()->getPage(); - $this->assertTrue($page->has('css', '.block-block-content' . $block_content->uuid())); - - $block_content->setPublished(FALSE); - $block_content->save(); - - $this->drupalGet(''); - $page = $this->getSession()->getPage(); - $this->assertFalse($page->has('css', '.block-block-content' . $block_content->uuid())); - } - -} only in patch2: unchanged: --- a/core/modules/block_content/tests/src/Functional/Update/BlockContentUpdateTest.php +++ b/core/modules/block_content/tests/src/Functional/Update/BlockContentUpdateTest.php @@ -43,27 +43,4 @@ public function testSimpleUpdates() { $this->assertEqual('block_content_field_revision', $entity_type->getRevisionDataTable()); } - /** - * Tests adding a status field to the block content entity type. - * - * @see block_content_update_8400() - */ - public function testStatusFieldAddition() { - $schema = \Drupal::database()->schema(); - $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); - - // Run updates. - $this->runUpdates(); - - // Check that the field exists and has the correct label. - $updated_field = $entity_definition_update_manager->getFieldStorageDefinition('status', 'block_content'); - $this->assertEqual('Publishing status', $updated_field->getLabel()); - - $content_translation_status = $entity_definition_update_manager->getFieldStorageDefinition('content_translation_status', 'block_content'); - $this->assertNull($content_translation_status); - - $this->assertFalse($schema->fieldExists('block_content_field_revision', 'content_translation_status')); - $this->assertFalse($schema->fieldExists('block_content_field_data', 'content_translation_status')); - } - } only in patch2: unchanged: --- a/core/modules/block_content/tests/src/Unit/Menu/BlockContentLocalTasksTest.php +++ b/core/modules/block_content/tests/src/Unit/Menu/BlockContentLocalTasksTest.php @@ -19,9 +19,9 @@ protected function setUp() { ]; parent::setUp(); - $config_factory = $this->getConfigFactoryStub([ - 'system.theme' => ['default' => 'test_c'], - ]); + $config_factory = $this->getConfigFactoryStub(['system.theme' => [ + 'default' => 'test_c', + ]]); $themes = []; $themes['test_a'] = (object) [ only in patch2: unchanged: --- a/core/modules/ckeditor/ckeditor.module +++ b/core/modules/ckeditor/ckeditor.module @@ -17,7 +17,7 @@ function ckeditor_help($route_name, RouteMatchInterface $route_match) { case 'help.page.ckeditor': $output = ''; $output .= '

' . t('About') . '

'; - $output .= '

' . t('The CKEditor module provides a highly-accessible, highly-usable visual text editor and adds a toolbar to text fields. Users can use buttons to format content and to create semantically correct and valid HTML. The CKEditor module uses the framework provided by the Text Editor module. It requires JavaScript to be enabled in the browser. For more information, see the online documentation for the CKEditor module and the CKEditor website.', [':doc_url' => 'https://www.drupal.org/documentation/modules/ckeditor', ':cke_url' => 'http://ckeditor.com', ':text_editor' => \Drupal::url('help.page', ['name' => 'editor'])]) . '

'; + $output .= '

' . t('The CKEditor module provides a highly-accessible, highly-usable visual text editor and adds a toolbar to text fields. Users can use buttons to format content and to create semantically correct and valid HTML. The CKEditor module uses the framework provided by the Text Editor module. It requires JavaScript to be enabled in the browser. For more information, see the online documentation for the CKEditor module and the CKEditor website.', [ ':doc_url' => 'https://www.drupal.org/documentation/modules/ckeditor', ':cke_url' => 'http://ckeditor.com', ':text_editor' => \Drupal::url('help.page', ['name' => 'editor'])]) . '

'; $output .= '

' . t('Uses') . '

'; $output .= '
'; $output .= '
' . t('Enabling CKEditor for individual text formats') . '
'; @@ -29,7 +29,7 @@ function ckeditor_help($route_name, RouteMatchInterface $route_match) { $output .= '
' . t('Toggling between formatted text and HTML source') . '
'; $output .= '
' . t('If the Source button is available in the toolbar, users can click this button to disable the visual editor and edit the HTML source directly. After toggling back, the visual editor uses the allowed HTML tags to format the text — independent of whether buttons for these tags are available in the toolbar. If the text format is set to limit the use of HTML tags, then all excluded tags will be stripped out of the HTML source when the user toggles back to the text editor.') . '
'; $output .= '
' . t('Check my spelling as I type') . '
'; - $output .= '
' . t("By default, CKEditor is configured to leverage your browser's spell check capability. Make sure your browser's spell checker is enabled in your browser's settings. To access suggested corrections for misspelled words, it may be necessary to hold the Control or command (Mac) key while right-clicking the misspelling.") . '
'; + $output .= '
' . t('By default, CKEditor is configured to leverage your browser\'s spell check capability. Make sure your browser\'s spell checker is enabled in your browser\'s settings. To access suggested corrections for misspelled words, it may be necessary to hold the Control or command (Mac) key while right-clicking the misspelling.') . '
'; $output .= '
' . t('Accessibility features') . '
'; $output .= '
' . t('The built in WYSIWYG editor (CKEditor) comes with a number of accessibility features. CKEditor comes with built in keyboard shortcuts, which can be beneficial for both power users and keyboard only users.', [':features' => 'http://docs.ckeditor.com/#!/guide/dev_a11y', ':shortcuts' => 'http://docs.ckeditor.com/#!/guide/dev_shortcuts']) . '
'; $output .= '
' . t('Generating accessible content') . '
'; only in patch2: unchanged: --- a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php +++ b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php @@ -101,9 +101,7 @@ public function validateStylesValue(array $element, FormStateInterface $form_sta $form_state->setError($element, $this->t('The provided list of styles is syntactically incorrect.')); } else { - $style_names = array_map(function ($style) { - return $style['name']; - }, $styles_setting); + $style_names = array_map(function ($style) { return $style['name']; }, $styles_setting); if (count($style_names) !== count(array_unique($style_names))) { $form_state->setError($element, $this->t('Each style must have a unique label.')); } only in patch2: unchanged: --- a/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php +++ b/core/modules/ckeditor/tests/modules/src/Kernel/CKEditorTest.php @@ -479,7 +479,7 @@ protected function getDefaultToolbarConfig() { ], [ 'name' => 'Tools', - 'items' => ['Source'], + 'items' => ['Source', ], ], '/', ]; only in patch2: unchanged: --- a/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php +++ b/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php @@ -101,17 +101,13 @@ public function testLoading() { list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck(); $ckeditor_plugin = $this->container->get('plugin.manager.editor')->createInstance('ckeditor'); $editor = Editor::load('filtered_html'); - $expected = [ - 'formats' => [ - 'filtered_html' => [ - 'format' => 'filtered_html', - 'editor' => 'ckeditor', - 'editorSettings' => $this->castSafeStrings($ckeditor_plugin->getJSSettings($editor)), - 'editorSupportsContentFiltering' => TRUE, - 'isXssSafe' => FALSE, - ], - ], - ]; + $expected = ['formats' => ['filtered_html' => [ + 'format' => 'filtered_html', + 'editor' => 'ckeditor', + 'editorSettings' => $this->castSafeStrings($ckeditor_plugin->getJSSettings($editor)), + 'editorSupportsContentFiltering' => TRUE, + 'isXssSafe' => FALSE, + ]]]; $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page."); $this->assertIdentical($expected, $this->castSafeStrings($settings['editor']), "Text Editor module's JavaScript settings on the page are correct."); $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.'); @@ -142,9 +138,7 @@ public function testLoading() { 'editorSettings' => $this->castSafeStrings($ckeditor_plugin->getJSSettings($editor)), 'editorSupportsContentFiltering' => TRUE, 'isXssSafe' => FALSE, - ], - ], - ]; + ]]]; $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page."); $this->assertIdentical($expected, $this->castSafeStrings($settings['editor']), "Text Editor module's JavaScript settings on the page are correct."); $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.'); only in patch2: unchanged: --- a/core/modules/color/color.module +++ b/core/modules/color/color.module @@ -28,7 +28,7 @@ function color_help($route_name, RouteMatchInterface $route_match) { $output .= '
'; $output .= '
' . t('Changing colors') . '
'; $output .= '

' . t('To change the color settings, select the Settings link for your theme on the Appearance page. If the color picker does not appear then the theme is not compatible with the Color module.', [':appearance' => \Drupal::url('system.themes_page')]) . '

'; - $output .= '

' . t("The Color module saves a modified copy of the theme's specified stylesheets in the files directory. If you make any manual changes to your theme's stylesheet, you must save your color settings again, even if you haven't changed the colors. This step is required because the module stylesheets in the files directory need to be recreated to reflect your changes.") . '

'; + $output .= '

' . t('The Color module saves a modified copy of the theme\'s specified stylesheets in the files directory. If you make any manual changes to your theme\'s stylesheet, you must save your color settings again, even if you haven\'t changed the colors. This step is required because the module stylesheets in the files directory need to be recreated to reflect your changes.') . '

'; $output .= '
'; return $output; } @@ -80,7 +80,7 @@ function color_library_info_alter(&$libraries, $extension) { if (isset($libraries[$name]['css'])) { // Override stylesheets. foreach ($libraries[$name]['css'] as $category => $css_assets) { - foreach ($css_assets as $path => $metadata) { + foreach ($css_assets as $path => $metadata) { // Loop over the path array with recolored CSS files to find matching // paths which could replace the non-recolored paths. foreach ($color_paths as $color_path) { only in patch2: unchanged: --- a/core/modules/color/tests/src/Functional/ColorTest.php +++ b/core/modules/color/tests/src/Functional/ColorTest.php @@ -117,7 +117,7 @@ public function _testColor($theme, $test_values) { $stylesheets = $this->config('color.theme.' . $theme)->get('stylesheets'); foreach ($stylesheets as $stylesheet) { $this->assertPattern('|' . file_url_transform_relative(file_create_url($stylesheet)) . '|', 'Make sure the color stylesheet is included in the content. (' . $theme . ')'); - $stylesheet_content = implode("\n", file($stylesheet)); + $stylesheet_content = join("\n", file($stylesheet)); $this->assertTrue(strpos($stylesheet_content, 'color: #123456') !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')'); } @@ -129,7 +129,7 @@ public function _testColor($theme, $test_values) { $this->drupalGet(''); $stylesheets = $this->config('color.theme.' . $theme)->get('stylesheets'); foreach ($stylesheets as $stylesheet) { - $stylesheet_content = implode("\n", file($stylesheet)); + $stylesheet_content = join("\n", file($stylesheet)); $this->assertTrue(strpos($stylesheet_content, 'color: ' . $test_values['scheme_color']) !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')'); } @@ -141,7 +141,7 @@ public function _testColor($theme, $test_values) { $stylesheets = \Drupal::state()->get('drupal_css_cache_files') ?: []; $stylesheet_content = ''; foreach ($stylesheets as $uri) { - $stylesheet_content .= implode("\n", file(drupal_realpath($uri))); + $stylesheet_content .= join("\n", file(drupal_realpath($uri))); } $this->assertTrue(strpos($stylesheet_content, 'public://') === FALSE, 'Make sure the color paths have been translated to local paths. (' . $theme . ')'); $config->set('css.preprocess', 0); only in patch2: unchanged: --- a/core/modules/comment/src/CommentViewBuilder.php +++ b/core/modules/comment/src/CommentViewBuilder.php @@ -126,15 +126,12 @@ public function buildComponents(array &$build, array $entities, array $displays, $display = $displays[$entity->bundle()]; if ($display->getComponent('links')) { $build[$id]['links'] = [ - '#lazy_builder' => [ - 'comment.lazy_builders:renderLinks', - [ - $entity->id(), - $view_mode, - $entity->language()->getId(), - !empty($entity->in_preview), - ], - ], + '#lazy_builder' => ['comment.lazy_builders:renderLinks', [ + $entity->id(), + $view_mode, + $entity->language()->getId(), + !empty($entity->in_preview), + ]], '#create_placeholder' => TRUE, ]; } only in patch2: unchanged: --- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php +++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php @@ -192,15 +192,12 @@ public function viewElements(FieldItemListInterface $items, $langcode) { $elements['#cache']['contexts'][] = 'user.roles'; if ($this->currentUser->hasPermission('post comments')) { $output['comment_form'] = [ - '#lazy_builder' => [ - 'comment.lazy_builders:renderForm', - [ - $entity->getEntityTypeId(), - $entity->id(), - $field_name, - $this->getFieldSetting('comment_type'), - ], - ], + '#lazy_builder' => ['comment.lazy_builders:renderForm', [ + $entity->getEntityTypeId(), + $entity->id(), + $field_name, + $this->getFieldSetting('comment_type'), + ]], '#create_placeholder' => TRUE, ]; } only in patch2: unchanged: --- a/core/modules/comment/src/Plugin/migrate/source/d6/Comment.php +++ b/core/modules/comment/src/Plugin/migrate/source/d6/Comment.php @@ -21,9 +21,8 @@ class Comment extends DrupalSqlBase { public function query() { $query = $this->select('comments', 'c') ->fields('c', ['cid', 'pid', 'nid', 'uid', 'subject', - 'comment', 'hostname', 'timestamp', 'status', 'thread', 'name', - 'mail', 'homepage', 'format', - ]); + 'comment', 'hostname', 'timestamp', 'status', 'thread', 'name', + 'mail', 'homepage', 'format']); $query->innerJoin('node', 'n', 'c.nid = n.nid'); $query->fields('n', ['type']); $query->orderBy('c.timestamp'); only in patch2: unchanged: --- a/core/modules/comment/src/Plugin/views/wizard/Comment.php +++ b/core/modules/comment/src/Plugin/views/wizard/Comment.php @@ -28,6 +28,14 @@ class Comment extends WizardPluginBase { * Set default values for the filters. */ protected $filters = [ + 'status' => [ + 'value' => TRUE, + 'table' => 'comment_field_data', + 'field' => 'status', + 'plugin_id' => 'boolean', + 'entity_type' => 'comment', + 'entity_field' => 'status', + ], 'status_node' => [ 'value' => TRUE, 'table' => 'node_field_data', only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentActionsTest.php +++ b/core/modules/comment/src/Tests/CommentActionsTest.php @@ -1,6 +1,6 @@ drupalPostForm($this->node->urlInfo(), $edit, t('Preview')); // Cannot use assertRaw here since both title and body are in the form. - $preview = (string) $this->cssSelect('.preview')[0]->getHtml(); + $preview = (string) $this->cssSelect('.preview')[0]->asXML(); $this->assertTrue(strpos($preview, $title) !== FALSE, 'Anonymous user can preview comment title.'); $this->assertTrue(strpos($preview, $body) !== FALSE, 'Anonymous user can preview comment body.'); @@ -56,7 +56,7 @@ public function testAnonymous() { $edit['comment_body[0][value]'] = $body; $this->drupalPostForm($this->node->urlInfo(), $edit, t('Preview')); // Cannot use assertRaw here since both title and body are in the form. - $preview = (string) $this->cssSelect('.preview')[0]->getHtml(); + $preview = (string) $this->cssSelect('.preview')[0]->asXML(); $this->assertTrue(strpos($preview, $title) !== FALSE, 'Anonymous user can preview comment title.'); $this->assertTrue(strpos($preview, $body) !== FALSE, 'Anonymous user can preview comment body.'); user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, ['skip comment approval']); only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentBlockTest.php +++ b/core/modules/comment/src/Tests/CommentBlockTest.php @@ -1,6 +1,6 @@ drupalGet($this->node->urlInfo()); $element = $this->cssSelect('article.js-comment > div'); // Get last child element. - $element = end($element); - $this->assertIdentical($element->getTagName(), 'div', 'Last element is comment body.'); + $element = end($element[0]); + $this->assertIdentical($element[0]->getName(), 'div', 'Last element is comment body.'); // Change weight to make links go after comment body. entity_get_display('comment', 'comment', 'default') @@ -118,8 +118,8 @@ public function testCommentLinks() { $this->drupalGet($this->node->urlInfo()); $element = $this->cssSelect('article.js-comment > div'); // Get last child element. - $element = end($element); - $this->assertNotEmpty($element->find('css', 'ul.links'), 'Last element is comment links.'); + $element = end($element[0]); + $this->assertIdentical($element[0]->getName(), 'ul', 'Last element is comment links.'); // Make sure we can hide node links. entity_get_display('node', $this->node->bundle(), 'default') only in patch2: unchanged: --- a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php +++ b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php @@ -129,12 +129,10 @@ public function testCommentNewCommentsIndicator() { $response = $this->renderNewCommentsNodeLinks([$this->node->id()]); $this->assertResponse(200); $json = Json::decode($response); - $expected = [ - $this->node->id() => [ - 'new_comment_count' => 1, - 'first_new_comment_link' => $this->node->url('canonical', ['fragment' => 'new']), - ], - ]; + $expected = [$this->node->id() => [ + 'new_comment_count' => 1, + 'first_new_comment_link' => $this->node->url('canonical', ['fragment' => 'new']), + ]]; $this->assertIdentical($expected, $json); // Failing to specify node IDs for the endpoint should return a 404. only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentNodeAccessTest.php +++ b/core/modules/comment/src/Tests/CommentNodeAccessTest.php @@ -1,6 +1,6 @@ getURL(), $match); // Get comment. - if ($contact !== TRUE) {// If true then attempting to find error message. + if ($contact !== TRUE) { // If true then attempting to find error message. if ($subject) { $this->assertText($subject, 'Comment subject posted.'); } @@ -274,7 +273,7 @@ public function testCommentFunctionality() { // Test breadcrumb on comment add page. $this->drupalGet('comment/reply/entity_test/' . $this->entity->id() . '/comment'); $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a'; - $this->assertEqual(current($this->xpath($xpath))->getText(), $this->entity->label(), 'Last breadcrumb item is equal to node title on comment reply page.'); + $this->assertEqual(current($this->xpath($xpath)), $this->entity->label(), 'Last breadcrumb item is equal to node title on comment reply page.'); // Post a comment. /** @var \Drupal\comment\CommentInterface $comment1 */ @@ -284,17 +283,17 @@ public function testCommentFunctionality() { // Test breadcrumb on comment reply page. $this->drupalGet('comment/reply/entity_test/' . $this->entity->id() . '/comment/' . $comment1->id()); $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a'; - $this->assertEqual(current($this->xpath($xpath))->getText(), $comment1->getSubject(), 'Last breadcrumb item is equal to comment title on comment reply page.'); + $this->assertEqual(current($this->xpath($xpath)), $comment1->getSubject(), 'Last breadcrumb item is equal to comment title on comment reply page.'); // Test breadcrumb on comment edit page. $this->drupalGet('comment/' . $comment1->id() . '/edit'); $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a'; - $this->assertEqual(current($this->xpath($xpath))->getText(), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on edit page.'); + $this->assertEqual(current($this->xpath($xpath)), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on edit page.'); // Test breadcrumb on comment delete page. $this->drupalGet('comment/' . $comment1->id() . '/delete'); $xpath = '//nav[@class="breadcrumb"]/ol/li[last()]/a'; - $this->assertEqual(current($this->xpath($xpath))->getText(), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on delete confirm page.'); + $this->assertEqual(current($this->xpath($xpath)), $comment1->getSubject(), 'Last breadcrumb item is equal to comment subject on delete confirm page.'); // Unpublish the comment. $this->performCommentOperation($comment1, 'unpublish'); only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentPreviewTest.php +++ b/core/modules/comment/src/Tests/CommentPreviewTest.php @@ -1,12 +1,11 @@ assertFieldByName('comment_body[0][value]', $edit['comment_body[0][value]'], 'Comment field displayed.'); // Store the content of this page. + $content = $this->getRawContent(); $this->drupalPostForm(NULL, [], 'Save'); $this->assertText('Your comment has been posted.'); $elements = $this->xpath('//section[contains(@class, "comment-wrapper")]/article'); $this->assertEqual(1, count($elements)); - // Go back and re-submit the form. - $this->getSession()->getDriver()->back(); + // Reset the content of the page to simulate the browser's back button, and + // re-submit the form. + $this->setRawContent($content); + $this->drupalPostForm(NULL, [], 'Save'); $this->assertText('Your comment has been posted.'); $elements = $this->xpath('//section[contains(@class, "comment-wrapper")]/article'); $this->assertEqual(2, count($elements)); @@ -175,11 +173,11 @@ public function testCommentEditPreviewSave() { // Submit the form using the displayed values. $displayed = []; - $displayed['subject[0][value]'] = current($this->xpath("//input[@id='edit-subject-0-value']"))->getValue(); - $displayed['comment_body[0][value]'] = current($this->xpath("//textarea[@id='edit-comment-body-0-value']"))->getValue(); - $displayed['uid'] = current($this->xpath("//input[@id='edit-uid']"))->getValue(); - $displayed['date[date]'] = current($this->xpath("//input[@id='edit-date-date']"))->getValue(); - $displayed['date[time]'] = current($this->xpath("//input[@id='edit-date-time']"))->getValue(); + $displayed['subject[0][value]'] = (string) current($this->xpath("//input[@id='edit-subject-0-value']/@value")); + $displayed['comment_body[0][value]'] = (string) current($this->xpath("//textarea[@id='edit-comment-body-0-value']")); + $displayed['uid'] = (string) current($this->xpath("//input[@id='edit-uid']/@value")); + $displayed['date[date]'] = (string) current($this->xpath("//input[@id='edit-date-date']/@value")); + $displayed['date[time]'] = (string) current($this->xpath("//input[@id='edit-date-time']/@value")); $this->drupalPostForm('comment/' . $comment->id() . '/edit', $displayed, t('Save')); // Check that the saved comment is still correct. only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentRssTest.php +++ b/core/modules/comment/src/Tests/CommentRssTest.php @@ -1,6 +1,6 @@ getURL(), $match); // Get comment. - if ($contact !== TRUE) {// If true then attempting to find error message. + if ($contact !== TRUE) { // If true then attempting to find error message. if ($subject) { $this->assertText($subject, 'Comment subject posted.'); } @@ -199,12 +192,12 @@ public function commentExists(CommentInterface $comment = NULL, $reply = FALSE) } $comment_title = $comment_element[0]->xpath('div/h3/a'); - if (empty($comment_title) || ((string) $comment_title[0]) !== $comment->getSubject()) { + if (empty($comment_title) || ((string)$comment_title[0]) !== $comment->getSubject()) { return FALSE; } $comment_body = $comment_element[0]->xpath('div/div/p'); - if (empty($comment_body) || ((string) $comment_body[0]) !== $comment->comment_body->value) { + if (empty($comment_body) || ((string)$comment_body[0]) !== $comment->comment_body->value) { return FALSE; } only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentThreadingTest.php +++ b/core/modules/comment/src/Tests/CommentThreadingTest.php @@ -1,6 +1,6 @@ assertPattern('|]*>]*>' . $subject_text . '|', 'Comment title is rendered in h3 when title populated.'); // Tests that the comment's title link is the permalink of the comment. $comment_permalink = $this->cssSelect('.permalink'); - $comment_permalink = $comment_permalink[0]->getAttribute('href'); + $comment_permalink = (string) $comment_permalink[0]['href']; // Tests that the comment's title link contains the url fragment. $this->assertTrue(strpos($comment_permalink, '#comment-' . $comment1->id()), "The comment's title link contains the url fragment."); $this->assertEqual($comment1->permalink()->toString(), $comment_permalink, "The comment's title has the correct link."); only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentTokenReplaceTest.php +++ b/core/modules/comment/src/Tests/CommentTokenReplaceTest.php @@ -1,6 +1,6 @@ postComment($this->node, $this->randomMachineName(), $this->randomMachineName(), TRUE); $this->drupalGet('admin/content/comment'); $this->assertText($this->adminUser->label()); - $this->drupalGet($node_comment->toUrl('edit-form')); + $this->drupalGet($node_comment->toUrl('edit-form')->toString()); $edit = [ 'comment_body[0][value]' => $this->randomMachineName(), ]; only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php +++ b/core/modules/comment/src/Tests/Views/CommentFieldFilterTest.php @@ -1,6 +1,6 @@ drupalLogin($this->drupalCreateUser(['access comments'])); // Add two new languages. only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/CommentFieldNameTest.php +++ b/core/modules/comment/src/Tests/Views/CommentFieldNameTest.php @@ -1,6 +1,6 @@ addDefaultCommentField('node', 'page', $this->fieldName); $this->customComment = Comment::create([ 'entity_id' => $this->nodeUserCommented->id(), only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/CommentOperationsTest.php +++ b/core/modules/comment/src/Tests/Views/CommentOperationsTest.php @@ -1,6 +1,6 @@ 0, @@ -51,7 +51,7 @@ protected function setUp($import_test_views = TRUE) { * Test comment row. */ public function testCommentRestExport() { - $this->drupalGet(sprintf('node/%d/comments', $this->nodeUserCommented->id()), ['query' => ['_format' => 'hal_json']]); + $this->drupalGetWithFormat(sprintf('node/%d/comments', $this->nodeUserCommented->id()), 'hal_json'); $this->assertResponse(200); $contents = Json::decode($this->getRawContent()); $this->assertEqual($contents[0]['subject'], 'How much wood would a woodchuck chuck'); only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/CommentRowTest.php +++ b/core/modules/comment/src/Tests/Views/CommentRowTest.php @@ -1,6 +1,6 @@ drupalCreateContentType(); @@ -130,7 +130,7 @@ public function testBlockDisplay() { $this->assertIdenticalResultset($view, $expected_result, $map); // Check the number of results given by the display is the expected. - $this->assertEqual(count($view->result), $this->blockDisplayResults, + $this->assertEqual(sizeof($view->result), $this->blockDisplayResults, format_string('There are exactly @results comments. Expected @expected', ['@results' => count($view->result), '@expected' => $this->blockDisplayResults] ) only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/FilterUserUIDTest.php +++ b/core/modules/comment/src/Tests/Views/FilterUserUIDTest.php @@ -1,6 +1,6 @@ drupalGet('test-comment-rss'); - // Because the response is XML we can't use the page which depends on an - // HTML tag being present. - $result = $this->getSession()->getDriver()->find('//item'); + $result = $this->xpath('//item'); $this->assertEqual(count($result), 1, 'Just one comment was found in the rss output.'); - $this->assertEqual($result[0]->find('xpath', '//pubDate')->getHtml(), gmdate('r', $this->comment->getCreatedTime()), 'The right pubDate appears in the rss output.'); + $this->assertEqual($result[0]->pubdate, gmdate('r', $this->comment->getCreatedTime()), 'The right pubDate appears in the rss output.'); } } only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/WizardTest.php +++ b/core/modules/comment/src/Tests/Views/WizardTest.php @@ -1,10 +1,10 @@ drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]); // Add comment field to page node type. $this->addDefaultCommentField('node', 'page'); @@ -63,7 +63,7 @@ public function testCommentWizard() { foreach ($fields as $field) { $items = $this->getAllOptions($field); foreach ($items as $item) { - $options[] = $item->getValue(); + $options[] = $item->attributes()->value; } } $expected_options = ['entity:comment', 'fields']; only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/CommentTestBase.php +++ /dev/null @@ -1,402 +0,0 @@ -drupalCreateContentType(['type' => 'article', 'name' => t('Article')]); - } - - // Create two test users. - $this->adminUser = $this->drupalCreateUser([ - 'administer content types', - 'administer comments', - 'administer comment types', - 'administer comment fields', - 'administer comment display', - 'skip comment approval', - 'post comments', - 'access comments', - // Usernames aren't shown in comment edit form autocomplete unless this - // permission is granted. - 'access user profiles', - 'access content', - ]); - $this->webUser = $this->drupalCreateUser([ - 'access comments', - 'post comments', - 'create article content', - 'edit own comments', - 'skip comment approval', - 'access content', - ]); - - // Create comment field on article. - $this->addDefaultCommentField('node', 'article'); - - // Create a test node authored by the web user. - $this->node = $this->drupalCreateNode(['type' => 'article', 'promote' => 1, 'uid' => $this->webUser->id()]); - $this->drupalPlaceBlock('local_tasks_block'); - } - - /** - * Posts a comment. - * - * @param \Drupal\Core\Entity\EntityInterface|null $entity - * Node to post comment on or NULL to post to the previously loaded page. - * @param string $comment - * Comment body. - * @param string $subject - * Comment subject. - * @param string $contact - * Set to NULL for no contact info, TRUE to ignore success checking, and - * array of values to set contact info. - * @param string $field_name - * (optional) Field name through which the comment should be posted. - * Defaults to 'comment'. - * - * @return \Drupal\comment\CommentInterface|null - * The posted comment or NULL when posted comment was not found. - */ - public function postComment($entity, $comment, $subject = '', $contact = NULL, $field_name = 'comment') { - $edit = []; - $edit['comment_body[0][value]'] = $comment; - - if ($entity !== NULL) { - $field = FieldConfig::loadByName($entity->getEntityTypeId(), $entity->bundle(), $field_name); - } - else { - $field = FieldConfig::loadByName('node', 'article', $field_name); - } - $preview_mode = $field->getSetting('preview'); - - // Must get the page before we test for fields. - if ($entity !== NULL) { - $this->drupalGet('comment/reply/' . $entity->getEntityTypeId() . '/' . $entity->id() . '/' . $field_name); - } - - // Determine the visibility of subject form field. - if (entity_get_form_display('comment', 'comment', 'default')->getComponent('subject')) { - // Subject input allowed. - $edit['subject[0][value]'] = $subject; - } - else { - $this->assertNoFieldByName('subject[0][value]', '', 'Subject field not found.'); - } - - if ($contact !== NULL && is_array($contact)) { - $edit += $contact; - } - switch ($preview_mode) { - case DRUPAL_REQUIRED: - // Preview required so no save button should be found. - $this->assertNoFieldByName('op', t('Save'), 'Save button not found.'); - $this->drupalPostForm(NULL, $edit, t('Preview')); - // Don't break here so that we can test post-preview field presence and - // function below. - case DRUPAL_OPTIONAL: - $this->assertFieldByName('op', t('Preview'), 'Preview button found.'); - $this->assertFieldByName('op', t('Save'), 'Save button found.'); - $this->drupalPostForm(NULL, $edit, t('Save')); - break; - - case DRUPAL_DISABLED: - $this->assertNoFieldByName('op', t('Preview'), 'Preview button not found.'); - $this->assertFieldByName('op', t('Save'), 'Save button found.'); - $this->drupalPostForm(NULL, $edit, t('Save')); - break; - } - $match = []; - // Get comment ID - preg_match('/#comment-([0-9]+)/', $this->getURL(), $match); - - // Get comment. - if ($contact !== TRUE) {// If true then attempting to find error message. - if ($subject) { - $this->assertText($subject, 'Comment subject posted.'); - } - $this->assertText($comment, 'Comment body posted.'); - $this->assertTrue((!empty($match) && !empty($match[1])), 'Comment id found.'); - } - - if (isset($match[1])) { - \Drupal::entityManager()->getStorage('comment')->resetCache([$match[1]]); - return Comment::load($match[1]); - } - } - - /** - * Checks current page for specified comment. - * - * @param \Drupal\comment\CommentInterface $comment - * The comment object. - * @param bool $reply - * Boolean indicating whether the comment is a reply to another comment. - * - * @return bool - * Boolean indicating whether the comment was found. - */ - public function commentExists(CommentInterface $comment = NULL, $reply = FALSE) { - if ($comment) { - $comment_element = $this->cssSelect('.comment-wrapper ' . ($reply ? '.indented ' : '') . '#comment-' . $comment->id() . ' ~ article'); - if (empty($comment_element)) { - return FALSE; - } - - $comment_title = $comment_element[0]->find('xpath', 'div/h3/a'); - if (empty($comment_title) || $comment_title->getText() !== $comment->getSubject()) { - return FALSE; - } - - $comment_body = $comment_element[0]->find('xpath', 'div/div/p'); - if (empty($comment_body) || $comment_body->getText() !== $comment->comment_body->value) { - return FALSE; - } - - return TRUE; - } - else { - return FALSE; - } - } - - /** - * Deletes a comment. - * - * @param \Drupal\comment\CommentInterface $comment - * Comment to delete. - */ - public function deleteComment(CommentInterface $comment) { - $this->drupalPostForm('comment/' . $comment->id() . '/delete', [], t('Delete')); - $this->assertText(t('The comment and all its replies have been deleted.'), 'Comment deleted.'); - } - - /** - * Sets the value governing whether the subject field should be enabled. - * - * @param bool $enabled - * Boolean specifying whether the subject field should be enabled. - */ - public function setCommentSubject($enabled) { - $form_display = entity_get_form_display('comment', 'comment', 'default'); - if ($enabled) { - $form_display->setComponent('subject', [ - 'type' => 'string_textfield', - ]); - } - else { - $form_display->removeComponent('subject'); - } - $form_display->save(); - // Display status message. - $this->pass('Comment subject ' . ($enabled ? 'enabled' : 'disabled') . '.'); - } - - /** - * Sets the value governing the previewing mode for the comment form. - * - * @param int $mode - * The preview mode: DRUPAL_DISABLED, DRUPAL_OPTIONAL or DRUPAL_REQUIRED. - * @param string $field_name - * (optional) Field name through which the comment should be posted. - * Defaults to 'comment'. - */ - public function setCommentPreview($mode, $field_name = 'comment') { - switch ($mode) { - case DRUPAL_DISABLED: - $mode_text = 'disabled'; - break; - - case DRUPAL_OPTIONAL: - $mode_text = 'optional'; - break; - - case DRUPAL_REQUIRED: - $mode_text = 'required'; - break; - } - $this->setCommentSettings('preview', $mode, format_string('Comment preview @mode_text.', ['@mode_text' => $mode_text]), $field_name); - } - - /** - * Sets the value governing whether the comment form is on its own page. - * - * @param bool $enabled - * TRUE if the comment form should be displayed on the same page as the - * comments; FALSE if it should be displayed on its own page. - * @param string $field_name - * (optional) Field name through which the comment should be posted. - * Defaults to 'comment'. - */ - public function setCommentForm($enabled, $field_name = 'comment') { - $this->setCommentSettings('form_location', ($enabled ? CommentItemInterface::FORM_BELOW : CommentItemInterface::FORM_SEPARATE_PAGE), 'Comment controls ' . ($enabled ? 'enabled' : 'disabled') . '.', $field_name); - } - - /** - * Sets the value governing restrictions on anonymous comments. - * - * @param int $level - * The level of the contact information allowed for anonymous comments: - * - 0: No contact information allowed. - * - 1: Contact information allowed but not required. - * - 2: Contact information required. - */ - public function setCommentAnonymous($level) { - $this->setCommentSettings('anonymous', $level, format_string('Anonymous commenting set to level @level.', ['@level' => $level])); - } - - /** - * Sets the value specifying the default number of comments per page. - * - * @param int $number - * Comments per page value. - * @param string $field_name - * (optional) Field name through which the comment should be posted. - * Defaults to 'comment'. - */ - public function setCommentsPerPage($number, $field_name = 'comment') { - $this->setCommentSettings('per_page', $number, format_string('Number of comments per page set to @number.', ['@number' => $number]), $field_name); - } - - /** - * Sets a comment settings variable for the article content type. - * - * @param string $name - * Name of variable. - * @param string $value - * Value of variable. - * @param string $message - * Status message to display. - * @param string $field_name - * (optional) Field name through which the comment should be posted. - * Defaults to 'comment'. - */ - public function setCommentSettings($name, $value, $message, $field_name = 'comment') { - $field = FieldConfig::loadByName('node', 'article', $field_name); - $field->setSetting($name, $value); - $field->save(); - // Display status message. - $this->pass($message); - } - - /** - * Checks whether the commenter's contact information is displayed. - * - * @return bool - * Contact info is available. - */ - public function commentContactInfoAvailable() { - return preg_match('/(input).*?(name="name").*?(input).*?(name="mail").*?(input).*?(name="homepage")/s', $this->getRawContent()); - } - - /** - * Performs the specified operation on the specified comment. - * - * @param \Drupal\comment\CommentInterface $comment - * Comment to perform operation on. - * @param string $operation - * Operation to perform. - * @param bool $approval - * Operation is found on approval page. - */ - public function performCommentOperation(CommentInterface $comment, $operation, $approval = FALSE) { - $edit = []; - $edit['operation'] = $operation; - $edit['comments[' . $comment->id() . ']'] = TRUE; - $this->drupalPostForm('admin/content/comment' . ($approval ? '/approval' : ''), $edit, t('Update')); - - if ($operation == 'delete') { - $this->drupalPostForm(NULL, [], t('Delete')); - $this->assertRaw(\Drupal::translation()->formatPlural(1, 'Deleted 1 comment.', 'Deleted @count comments.'), format_string('Operation "@operation" was performed on comment.', ['@operation' => $operation])); - } - else { - $this->assertText(t('The update has been performed.'), format_string('Operation "@operation" was performed on comment.', ['@operation' => $operation])); - } - } - - /** - * Gets the comment ID for an unapproved comment. - * - * @param string $subject - * Comment subject to find. - * - * @return int - * Comment id. - */ - public function getUnapprovedComment($subject) { - $this->drupalGet('admin/content/comment/approval'); - preg_match('/href="(.*?)#comment-([^"]+)"(.*?)>(' . $subject . ')/', $this->getRawContent(), $match); - - return $match[2]; - } - - /** - * Creates a comment comment type (bundle). - * - * @param string $label - * The comment type label. - * - * @return \Drupal\comment\Entity\CommentType - * Created comment type. - */ - protected function createCommentType($label) { - $bundle = CommentType::create([ - 'id' => $label, - 'label' => $label, - 'description' => '', - 'target_entity_type_id' => 'node', - ]); - $bundle->save(); - return $bundle; - } - -} only in patch2: unchanged: --- a/core/modules/comment/tests/src/Functional/Views/CommentTestBase.php +++ /dev/null @@ -1,90 +0,0 @@ -account = $this->drupalCreateUser(['skip comment approval']); - $this->account2 = $this->drupalCreateUser(); - $this->drupalLogin($this->account); - - $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]); - $this->addDefaultCommentField('node', 'page'); - - $this->nodeUserPosted = $this->drupalCreateNode(); - $this->nodeUserCommented = $this->drupalCreateNode(['uid' => $this->account2->id()]); - - $comment = [ - 'uid' => $this->loggedInUser->id(), - 'entity_id' => $this->nodeUserCommented->id(), - 'entity_type' => 'node', - 'field_name' => 'comment', - 'subject' => 'How much wood would a woodchuck chuck', - 'cid' => '', - 'pid' => '', - 'mail' => 'someone@example.com', - ]; - $this->comment = Comment::create($comment); - $this->comment->save(); - } - -} only in patch2: unchanged: --- a/core/modules/config/src/Tests/ConfigEntityTest.php +++ b/core/modules/config/src/Tests/ConfigEntityTest.php @@ -147,8 +147,8 @@ public function testCRUD() { try { $id_length_config_test->save(); $this->pass(SafeMarkup::format("config_test entity with ID length @length was saved.", [ - '@length' => strlen($id_length_config_test->id()), - ])); + '@length' => strlen($id_length_config_test->id())] + )); } catch (ConfigEntityIdLengthException $e) { $this->fail($e->getMessage()); only in patch2: unchanged: --- a/core/modules/config/tests/config_override_test/src/ConfigOverriderLowPriority.php +++ b/core/modules/config/tests/config_override_test/src/ConfigOverriderLowPriority.php @@ -18,13 +18,13 @@ public function loadOverrides($names) { $overrides = []; if (!empty($GLOBALS['config_test_run_module_overrides'])) { if (in_array('system.site', $names)) { - $overrides = [ - 'system.site' => [ + $overrides = ['system.site' => + [ 'name' => 'Should not apply because of higher priority listener', // This override should apply because it is not overridden by the // higher priority listener. 'slogan' => 'Yay for overrides!', - ], + ] ]; } } only in patch2: unchanged: --- a/core/modules/config_translation/tests/src/Unit/ConfigMapperManagerTest.php +++ b/core/modules/config_translation/tests/src/Unit/ConfigMapperManagerTest.php @@ -88,52 +88,44 @@ public function providerTestHasTranslatable() { [$this->getElement(['aaa' => 'bbb']), FALSE], [$this->getElement(['translatable' => FALSE]), FALSE], [$this->getElement(['translatable' => TRUE]), TRUE], - [$this->getNestedElement([$this->getElement([])]), FALSE], - [$this->getNestedElement([$this->getElement(['translatable' => TRUE])]), TRUE], - [ + [$this->getNestedElement([ + $this->getElement([]), + ]), FALSE], + [$this->getNestedElement([ + $this->getElement(['translatable' => TRUE]), + ]), TRUE], + [$this->getNestedElement([ + $this->getElement(['aaa' => 'bbb']), + $this->getElement(['ccc' => 'ddd']), + $this->getElement(['eee' => 'fff']), + ]), FALSE], + [$this->getNestedElement([ + $this->getElement(['aaa' => 'bbb']), + $this->getElement(['ccc' => 'ddd']), + $this->getElement(['translatable' => TRUE]), + ]), TRUE], + [$this->getNestedElement([ + $this->getElement(['aaa' => 'bbb']), $this->getNestedElement([ - $this->getElement(['aaa' => 'bbb']), $this->getElement(['ccc' => 'ddd']), $this->getElement(['eee' => 'fff']), ]), - FALSE, - ], - [ $this->getNestedElement([ - $this->getElement(['aaa' => 'bbb']), - $this->getElement(['ccc' => 'ddd']), - $this->getElement(['translatable' => TRUE]), + $this->getElement(['ggg' => 'hhh']), + $this->getElement(['iii' => 'jjj']), ]), - TRUE, - ], - [ + ]), FALSE], + [$this->getNestedElement([ + $this->getElement(['aaa' => 'bbb']), $this->getNestedElement([ - $this->getElement(['aaa' => 'bbb']), - $this->getNestedElement([ - $this->getElement(['ccc' => 'ddd']), - $this->getElement(['eee' => 'fff']), - ]), - $this->getNestedElement([ - $this->getElement(['ggg' => 'hhh']), - $this->getElement(['iii' => 'jjj']), - ]), + $this->getElement(['ccc' => 'ddd']), + $this->getElement(['eee' => 'fff']), ]), - FALSE - ], - [ $this->getNestedElement([ - $this->getElement(['aaa' => 'bbb']), - $this->getNestedElement([ - $this->getElement(['ccc' => 'ddd']), - $this->getElement(['eee' => 'fff']), - ]), - $this->getNestedElement([ - $this->getElement(['ggg' => 'hhh']), - $this->getElement(['translatable' => TRUE]), - ]), + $this->getElement(['ggg' => 'hhh']), + $this->getElement(['translatable' => TRUE]), ]), - TRUE, - ], + ]), TRUE], ]; } only in patch2: unchanged: --- a/core/modules/contact/src/ContactFormAccessControlHandler.php +++ b/core/modules/contact/src/ContactFormAccessControlHandler.php @@ -20,12 +20,12 @@ class ContactFormAccessControlHandler extends EntityAccessControlHandler { protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { if ($operation == 'view') { // Do not allow access personal form via site-wide route. - return AccessResult::allowedIfHasPermission($account, 'access site-wide contact form')->andIf(AccessResult::allowedIf($entity->id() !== 'personal')); + return AccessResult::allowedIf($account->hasPermission('access site-wide contact form') && $entity->id() !== 'personal')->cachePerPermissions(); } elseif ($operation == 'delete' || $operation == 'update') { // Do not allow the 'personal' form to be deleted, as it's used for // the personal contact form. - return AccessResult::allowedIfHasPermission($account, 'administer contact forms')->andIf(AccessResult::allowedIf($entity->id() !== 'personal')); + return AccessResult::allowedIf($account->hasPermission('administer contact forms') && $entity->id() !== 'personal')->cachePerPermissions(); } return parent::checkAccess($entity, $operation, $account); only in patch2: unchanged: --- a/core/modules/contact/src/Controller/ContactController.php +++ b/core/modules/contact/src/Controller/ContactController.php @@ -65,8 +65,7 @@ public function contactSitePage(ContactFormInterface $contact_form = NULL) { if (empty($contact_form)) { if ($this->currentUser()->hasPermission('administer contact forms')) { drupal_set_message($this->t('The contact form has not been configured. Add one or more forms .', [ - ':add' => $this->url('contact.form_add'), - ]), 'error'); + ':add' => $this->url('contact.form_add')]), 'error'); return []; } else { only in patch2: unchanged: --- a/core/modules/contact/src/Entity/Message.php +++ b/core/modules/contact/src/Entity/Message.php @@ -108,7 +108,7 @@ public function setMessage($message) { * {@inheritdoc} */ public function copySender() { - return (bool) $this->get('copy')->value; + return (bool)$this->get('copy')->value; } /** only in patch2: unchanged: --- a/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php +++ b/core/modules/content_moderation/src/ParamConverter/EntityRevisionConverter.php @@ -75,7 +75,7 @@ protected function isEditFormPage(Route $route) { return FALSE; } $entity_type = $this->entityManager->getDefinition($entity_type_id); - return in_array($operation, ['default', 'edit']) && $entity_type && $entity_type->isRevisionable(); + return $operation == 'edit' && $entity_type && $entity_type->isRevisionable(); } } only in patch2: unchanged: --- a/core/modules/content_moderation/tests/src/Kernel/EntityRevisionConverterTest.php +++ b/core/modules/content_moderation/tests/src/Kernel/EntityRevisionConverterTest.php @@ -3,7 +3,6 @@ namespace Drupal\Tests\content_moderation\Kernel; use Drupal\entity_test\Entity\EntityTest; -use Drupal\entity_test\Entity\EntityTestRev; use Drupal\KernelTests\KernelTestBase; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; @@ -25,38 +24,19 @@ class EntityRevisionConverterTest extends KernelTestBase { ]; /** - * The entity type manager. - * - * @var \Drupal\Core\Entity\EntityTypeManagerInterface - */ - protected $entityTypeManager; - - /** - * The router without access checks. - * - * @var \Symfony\Component\Routing\RouterInterface - */ - protected $router; - - /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->installEntitySchema('entity_test'); - $this->installEntitySchema('entity_test_rev'); $this->installEntitySchema('node'); $this->installEntitySchema('user'); $this->installEntitySchema('content_moderation_state'); $this->installSchema('system', 'router'); $this->installSchema('system', 'sequences'); $this->installSchema('node', 'node_access'); - $this->installConfig(['content_moderation']); \Drupal::service('router.builder')->rebuild(); - - $this->entityTypeManager = $this->container->get('entity_type.manager'); - $this->router = $this->container->get('router.no_access_checks'); } /** @@ -69,43 +49,19 @@ public function testConvertNonRevisionableEntityType() { $entity_test->save(); - $result = $this->router->match('/entity_test/' . $entity_test->id()); + /** @var \Symfony\Component\Routing\RouterInterface $router */ + $router = \Drupal::service('router.no_access_checks'); + $result = $router->match('/entity_test/' . $entity_test->id()); $this->assertInstanceOf(EntityTest::class, $result['entity_test']); $this->assertEquals($entity_test->getRevisionId(), $result['entity_test']->getRevisionId()); } /** - * @covers ::applies - */ - public function testConvertNoEditFormHandler() { - $workflow = Workflow::load('editorial'); - $workflow->getTypePlugin()->addEntityTypeAndBundle('entity_test_rev', 'entity_test_rev'); - $workflow->save(); - - $entity_test_rev = EntityTestRev::create([ - 'name' => 'Default Revision', - 'moderation_state' => 'published', - ]); - $entity_test_rev->save(); - - $entity_test_rev->name = 'Pending revision'; - $entity_test_rev->moderation_state = 'draft'; - $entity_test_rev->save(); - - // Ensure the entity type does not provide an explicit 'edit' form class. - $definition = $this->entityTypeManager->getDefinition($entity_test_rev->getEntityTypeId()); - $this->assertNull($definition->getFormClass('edit')); - - // Ensure the revision converter is invoked for the edit route. - $result = $this->router->match("/entity_test_rev/manage/{$entity_test_rev->id()}/edit"); - $this->assertEquals($entity_test_rev->getRevisionId(), $result['entity_test_rev']->getRevisionId()); - } - - /** * @covers ::convert */ public function testConvertWithRevisionableEntityType() { + $this->installConfig(['content_moderation']); $node_type = NodeType::create([ 'type' => 'article', ]); @@ -133,7 +89,9 @@ public function testConvertWithRevisionableEntityType() { $node->save(); $revision_ids[] = $node->getRevisionId(); - $result = $this->router->match('/node/' . $node->id() . '/edit'); + /** @var \Symfony\Component\Routing\RouterInterface $router */ + $router = \Drupal::service('router.no_access_checks'); + $result = $router->match('/node/' . $node->id() . '/edit'); $this->assertInstanceOf(Node::class, $result['node']); $this->assertEquals($revision_ids[2], $result['node']->getRevisionId()); only in patch2: unchanged: --- a/core/modules/content_translation/content_translation.install +++ b/core/modules/content_translation/content_translation.install @@ -59,7 +59,6 @@ function content_translation_update_8400() { $entity_type_manager = \Drupal::entityTypeManager(); $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); - $entity_type_manager->clearCachedDefinitions(); foreach ($content_translation_manager->getSupportedEntityTypes() as $entity_type_id => $entity_type_definition) { $storage = $entity_type_manager->getStorage($entity_type_id); if ($storage instanceof SqlEntityStorageInterface) { only in patch2: unchanged: --- a/core/modules/content_translation/src/Controller/ContentTranslationController.php +++ b/core/modules/content_translation/src/Controller/ContentTranslationController.php @@ -196,16 +196,14 @@ public function overview(RouteMatchInterface $route_match, $entity_type_id = NUL if (isset($links['edit'])) { $links['edit']['title'] = $this->t('Edit'); } - $status = [ - 'data' => [ - '#type' => 'inline_template', - '#template' => '{% if status %}{{ "Published"|t }}{% else %}{{ "Not published"|t }}{% endif %}{% if outdated %} {{ "outdated"|t }}{% endif %}', - '#context' => [ - 'status' => $metadata->isPublished(), - 'outdated' => $metadata->isOutdated(), - ], + $status = ['data' => [ + '#type' => 'inline_template', + '#template' => '{% if status %}{{ "Published"|t }}{% else %}{{ "Not published"|t }}{% endif %}{% if outdated %} {{ "outdated"|t }}{% endif %}', + '#context' => [ + 'status' => $metadata->isPublished(), + 'outdated' => $metadata->isOutdated(), ], - ]; + ]]; if ($is_original) { $language_name = $this->t('@language_name (Original language)', ['@language_name' => $language_name]); only in patch2: unchanged: --- a/core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php +++ b/core/modules/content_translation/tests/src/Kernel/ContentTranslationSyncUnitTest.php @@ -181,21 +181,13 @@ public function testMultipleSyncedValues() { // their delta. $delta_callbacks = [ // Continuous field values: all values are equal. - function($delta) { - return TRUE; - }, + function($delta) { return TRUE; }, // Alternated field values: only the even ones are equal. - function($delta) { - return $delta % 2 !== 0; - }, + function($delta) { return $delta % 2 !== 0; }, // Sparse field values: only the "middle" ones are equal. - function($delta) { - return $delta === 1 || $delta === 2; - }, + function($delta) { return $delta === 1 || $delta === 2; }, // Sparse field values: only the "extreme" ones are equal. - function($delta) { - return $delta === 0 || $delta === 3; - }, + function($delta) { return $delta === 0 || $delta === 3; }, ]; foreach ($delta_callbacks as $delta_callback) { only in patch2: unchanged: --- a/core/modules/content_translation/tests/src/Unit/Menu/ContentTranslationLocalTasksTest.php +++ b/core/modules/content_translation/tests/src/Unit/Menu/ContentTranslationLocalTasksTest.php @@ -49,30 +49,20 @@ public function testBlockAdminDisplay($route, $expected) { */ public function providerTestBlockAdminDisplay() { return [ - [ + ['entity.node.canonical', [[ + 'content_translation.local_tasks:entity.node.content_translation_overview', 'entity.node.canonical', - [ - [ - 'content_translation.local_tasks:entity.node.content_translation_overview', - 'entity.node.canonical', - 'entity.node.edit_form', - 'entity.node.delete_form', - 'entity.node.version_history', - ], - ], - ], - [ - 'entity.node.content_translation_overview', - [ - [ - 'content_translation.local_tasks:entity.node.content_translation_overview', - 'entity.node.canonical', - 'entity.node.edit_form', - 'entity.node.delete_form', - 'entity.node.version_history', - ], - ], - ], + 'entity.node.edit_form', + 'entity.node.delete_form', + 'entity.node.version_history', + ]]], + ['entity.node.content_translation_overview', [[ + 'content_translation.local_tasks:entity.node.content_translation_overview', + 'entity.node.canonical', + 'entity.node.edit_form', + 'entity.node.delete_form', + 'entity.node.version_history', + ]]], ]; } only in patch2: unchanged: --- a/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php +++ b/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php @@ -148,6 +148,6 @@ public function render(ResultRow $values) { /** * {@inheritdoc} */ - public function query() {} + public function query() { } } only in patch2: unchanged: --- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.info.yml +++ /dev/null @@ -1,8 +0,0 @@ -name: 'Contextual Test' -type: module -description: 'Provides test contextual links.' -package: Testing -version: VERSION -core: 8.x -dependencies: - - contextual only in patch2: unchanged: --- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.links.contextual.yml +++ /dev/null @@ -1,4 +0,0 @@ -contextual_test: - title: 'Test Link' - route_name: 'contextual_test' - group: 'contextual_test' only in patch2: unchanged: --- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.module +++ /dev/null @@ -1,17 +0,0 @@ - [], - ]; -} only in patch2: unchanged: --- a/core/modules/contextual/tests/modules/contextual_test/contextual_test.routing.yml +++ /dev/null @@ -1,6 +0,0 @@ -contextual_test: - path: '/contextual-tests' - defaults: - _controller: '\Drupal\contextual_test\Controller\TestController::render' - requirements: - _access: 'TRUE' only in patch2: unchanged: --- a/core/modules/contextual/tests/modules/contextual_test/src/Controller/TestController.php +++ /dev/null @@ -1,23 +0,0 @@ - 'markup', - '#markup' => 'Everything is contextual!', - ]; - } - -} only in patch2: unchanged: --- a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinkClickTrait.php +++ /dev/null @@ -1,46 +0,0 @@ -toggleContextualTriggerVisibility($selector); - } - - $element = $this->getSession()->getPage()->find('css', $selector); - $element->find('css', '.contextual button')->press(); - $element->findLink($link_locator)->click(); - - if ($force_visible) { - $this->toggleContextualTriggerVisibility($selector); - } - } - - /** - * Toggles the visibility of a contextual trigger. - * - * @param string $selector - * The selector for the element that contains the contextual link. - */ - protected function toggleContextualTriggerVisibility($selector) { - // Hovering over the element itself with should be enough, but does not - // work. Manually remove the visually-hidden class. - $this->getSession()->executeScript("jQuery('{$selector} .contextual .trigger').toggleClass('visually-hidden');"); - } - -} only in patch2: unchanged: --- a/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php +++ b/core/modules/contextual/tests/src/FunctionalJavascript/ContextualLinksTest.php @@ -12,8 +12,6 @@ */ class ContextualLinksTest extends JavascriptTestBase { - use ContextualLinkClickTrait; - /** * {@inheritdoc} */ @@ -25,7 +23,6 @@ class ContextualLinksTest extends JavascriptTestBase { protected function setUp() { parent::setUp(); - $this->drupalLogin($this->createUser(['access contextual links'])); $this->placeBlock('system_branding_block', ['id' => 'branding']); } @@ -33,6 +30,10 @@ protected function setUp() { * Tests the visibility of contextual links. */ public function testContextualLinksVisibility() { + $this->drupalLogin($this->drupalCreateUser([ + 'access contextual links' + ])); + $this->drupalGet('user'); $contextualLinks = $this->assertSession()->waitForElement('css', '.contextual button'); $this->assertEmpty($contextualLinks); @@ -58,27 +59,4 @@ public function testContextualLinksVisibility() { $this->assertNotEmpty($contextualLinks); } - /** - * Test clicking contextual links. - */ - public function testContextualLinksClick() { - $this->container->get('module_installer')->install(['contextual_test']); - // Test clicking contextual link without toolbar. - $this->drupalGet('user'); - $this->assertSession()->assertWaitOnAjaxRequest(); - $this->clickContextualLink('#block-branding', 'Test Link'); - $this->assertSession()->pageTextContains('Everything is contextual!'); - - // Test clicking contextual link with toolbar. - $this->container->get('module_installer')->install(['toolbar']); - $this->grantPermissions(Role::load(Role::AUTHENTICATED_ID), ['access toolbar']); - $this->drupalGet('user'); - $this->assertSession()->assertWaitOnAjaxRequest(); - - // Click "Edit" in toolbar to show contextual links. - $this->getSession()->getPage()->find('css', '.contextual-toolbar-tab button')->press(); - $this->clickContextualLink('#block-branding', 'Test Link', FALSE); - $this->assertSession()->pageTextContains('Everything is contextual!'); - } - } only in patch2: unchanged: --- a/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php +++ b/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php @@ -44,7 +44,6 @@ public function testDateField() { foreach (static::$timezones as $timezone) { $this->setSiteTimezone($timezone); - $this->assertEquals($timezone, $this->config('system.date')->get('timezone.default'), 'Time zone set to ' . $timezone); // Display creation form. $this->drupalGet('entity_test/add'); @@ -118,12 +117,7 @@ public function testDateField() { $expected_iso = format_date($date->getTimestamp(), 'custom', 'Y-m-d\TH:i:s\Z', DATETIME_STORAGE_TIMEZONE); $output = $this->renderTestEntity($id); $expected_markup = ''; - $this->assertContains($expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [ - '%value' => $new_value, - '%expected' => $expected, - '%expected_iso' => $expected_iso, - '%timezone' => $timezone, - ])); + $this->assertContains($expected_markup, $output, SafeMarkup::format('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', ['%value' => $new_value, '%expected' => $expected, '%expected_iso' => $expected_iso])); break; } } @@ -137,10 +131,7 @@ public function testDateField() { ->save(); $expected = $date->format(DATETIME_DATE_STORAGE_FORMAT); $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, SafeMarkup::format('Formatted date field using plain format displayed as %expected.', ['%expected' => $expected])); // Verify that the 'datetime_custom' formatter works. $this->displayOptions['type'] = 'datetime_custom'; @@ -150,10 +141,7 @@ public function testDateField() { ->save(); $expected = $date->format($this->displayOptions['settings']['date_format']); $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using datetime_custom format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, SafeMarkup::format('Formatted date field using datetime_custom format displayed as %expected.', ['%expected' => $expected])); // Test that allowed markup in custom format is preserved and XSS is // removed. @@ -163,10 +151,7 @@ public function testDateField() { ->save(); $expected = '' . $date->format('m/d/Y') . 'alert(String.fromCharCode(88,83,83))'; $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected])); // Verify that the 'datetime_time_ago' formatter works for intervals in the // past. First update the test entity so that the date difference always @@ -193,10 +178,7 @@ public function testDateField() { '@interval' => $this->dateFormatter->formatTimeDiffSince($timestamp, ['granularity' => $this->displayOptions['settings']['granularity']]) ]); $output = $this->renderTestEntity($id); - $this->assertContains((string) $expected, $output, new FormattableMarkup('Formatted date field using datetime_time_ago format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains((string) $expected, $output, SafeMarkup::format('Formatted date field using datetime_time_ago format displayed as %expected.', ['%expected' => $expected])); // Verify that the 'datetime_time_ago' formatter works for intervals in the // future. First update the test entity so that the date difference always @@ -217,10 +199,7 @@ public function testDateField() { '@interval' => $this->dateFormatter->formatTimeDiffUntil($timestamp, ['granularity' => $this->displayOptions['settings']['granularity']]) ]); $output = $this->renderTestEntity($id); - $this->assertContains((string) $expected, $output, new FormattableMarkup('Formatted date field using datetime_time_ago format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains((string) $expected, $output, SafeMarkup::format('Formatted date field using datetime_time_ago format displayed as %expected.', ['%expected' => $expected])); } } @@ -594,48 +573,35 @@ public function testDatelistWidget() { protected function datelistDataProvider($field_label) { return [ // Nothing selected. - [ - ['year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''], - ["The $field_label date is required."], - ], + [['year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''], [ + "The $field_label date is required.", + ]], // Year only selected, validation error on Month, Day, Hour, Minute. - [ - ['year' => 2012, 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''], - [ - "The $field_label date is incomplete.", - 'A value must be selected for month.', - 'A value must be selected for day.', - 'A value must be selected for hour.', - 'A value must be selected for minute.', - ], - ], + [['year' => 2012, 'month' => '', 'day' => '', 'hour' => '', 'minute' => ''], [ + "The $field_label date is incomplete.", + 'A value must be selected for month.', + 'A value must be selected for day.', + 'A value must be selected for hour.', + 'A value must be selected for minute.', + ]], // Year and Month selected, validation error on Day, Hour, Minute. - [ - ['year' => 2012, 'month' => '12', 'day' => '', 'hour' => '', 'minute' => ''], - [ - "The $field_label date is incomplete.", - 'A value must be selected for day.', - 'A value must be selected for hour.', - 'A value must be selected for minute.', - ], - ], + [['year' => 2012, 'month' => '12', 'day' => '', 'hour' => '', 'minute' => ''], [ + "The $field_label date is incomplete.", + 'A value must be selected for day.', + 'A value must be selected for hour.', + 'A value must be selected for minute.', + ]], // Year, Month and Day selected, validation error on Hour, Minute. - [ - ['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '', 'minute' => ''], - [ - "The $field_label date is incomplete.", - 'A value must be selected for hour.', - 'A value must be selected for minute.', - ], - ], + [['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '', 'minute' => ''], [ + "The $field_label date is incomplete.", + 'A value must be selected for hour.', + 'A value must be selected for minute.', + ]], // Year, Month, Day and Hour selected, validation error on Minute only. - [ - ['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '0', 'minute' => ''], - [ - "The $field_label date is incomplete.", - 'A value must be selected for minute.', - ], - ], + [['year' => 2012, 'month' => '12', 'day' => '31', 'hour' => '0', 'minute' => ''], [ + "The $field_label date is incomplete.", + 'A value must be selected for minute.', + ]], ]; } @@ -667,7 +633,6 @@ public function testDefaultValue() { foreach (static::$timezones as $timezone) { $this->setSiteTimezone($timezone); - $this->assertEquals($timezone, $this->config('system.date')->get('timezone.default'), 'Time zone set to ' . $timezone); // Set now as default_value. $field_edit = [ only in patch2: unchanged: --- a/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php +++ b/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php @@ -53,7 +53,6 @@ public function testDateRangeField() { foreach (static::$timezones as $timezone) { $this->setSiteTimezone($timezone); - $this->assertEquals($timezone, $this->config('system.date')->get('timezone.default'), 'Time zone set to ' . $timezone); // Ensure field is set to a date-only field. $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATE); @@ -135,17 +134,15 @@ public function testDateRangeField() { $end_expected_iso = $this->dateFormatter->format($end_date->getTimestamp(), 'custom', 'Y-m-d\TH:i:s\Z', DATETIME_STORAGE_TIMEZONE); $end_expected_markup = ''; $output = $this->renderTestEntity($id); - $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [ + $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', [ '%value' => 'long', '%expected' => $start_expected, '%expected_iso' => $start_expected_iso, - '%timezone' => $timezone, ])); - $this->assertContains($end_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [ + $this->assertContains($end_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', [ '%value' => 'long', '%expected' => $end_expected, '%expected_iso' => $end_expected_iso, - '%timezone' => $timezone, ])); $this->assertContains(' THESEPARATOR ', $output, 'Found proper separator'); @@ -162,10 +159,7 @@ public function testDateRangeField() { ->save(); $expected = $start_date->format(DATETIME_DATE_STORAGE_FORMAT) . ' - ' . $end_date->format(DATETIME_DATE_STORAGE_FORMAT); $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected.', ['%expected' => $expected])); // Verify that the custom formatter works. $this->displayOptions['type'] = 'daterange_custom'; @@ -175,10 +169,7 @@ public function testDateRangeField() { ->save(); $expected = $start_date->format($this->displayOptions['settings']['date_format']) . ' - ' . $end_date->format($this->displayOptions['settings']['date_format']); $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected])); // Test that allowed markup in custom format is preserved and XSS is // removed. @@ -188,10 +179,7 @@ public function testDateRangeField() { ->save(); $expected = '' . $start_date->format('m/d/Y') . 'alert(String.fromCharCode(88,83,83)) - ' . $end_date->format('m/d/Y') . 'alert(String.fromCharCode(88,83,83))'; $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected])); // Test formatters when start date and end date are the same $this->drupalGet('entity_test/add'); @@ -230,13 +218,12 @@ public function testDateRangeField() { $start_expected_iso = $this->dateFormatter->format($start_date->getTimestamp(), 'custom', 'Y-m-d\TH:i:s\Z', DATETIME_STORAGE_TIMEZONE); $start_expected_markup = ''; $output = $this->renderTestEntity($id); - $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute in %timezone.', [ + $this->assertContains($start_expected_markup, $output, new FormattableMarkup('Formatted date field using %value format displayed as %expected with %expected_iso attribute.', [ '%value' => 'long', '%expected' => $start_expected, '%expected_iso' => $start_expected_iso, - '%timezone' => $timezone, ])); - $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page in ' . $timezone); + $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page'); // Verify that hook_entity_prepare_view can add attributes. // @see entity_test_entity_prepare_view() @@ -250,10 +237,7 @@ public function testDateRangeField() { ->save(); $expected = $start_date->format(DATETIME_DATE_STORAGE_FORMAT); $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using plain format displayed as %expected.', ['%expected' => $expected])); $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page'); $this->displayOptions['type'] = 'daterange_custom'; @@ -263,10 +247,7 @@ public function testDateRangeField() { ->save(); $expected = $start_date->format($this->displayOptions['settings']['date_format']); $output = $this->renderTestEntity($id); - $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected in %timezone.', [ - '%expected' => $expected, - '%timezone' => $timezone, - ])); + $this->assertContains($expected, $output, new FormattableMarkup('Formatted date field using daterange_custom format displayed as %expected.', ['%expected' => $expected])); $this->assertNotContains(' THESEPARATOR ', $output, 'Separator not found on page'); } } only in patch2: unchanged: --- a/core/modules/dblog/src/Controller/DbLogController.php +++ b/core/modules/dblog/src/Controller/DbLogController.php @@ -135,24 +135,20 @@ public function overview() { [ 'data' => $this->t('Type'), 'field' => 'w.type', - 'class' => [RESPONSIVE_PRIORITY_MEDIUM], - ], + 'class' => [RESPONSIVE_PRIORITY_MEDIUM]], [ 'data' => $this->t('Date'), 'field' => 'w.wid', 'sort' => 'desc', - 'class' => [RESPONSIVE_PRIORITY_LOW], - ], + 'class' => [RESPONSIVE_PRIORITY_LOW]], $this->t('Message'), [ 'data' => $this->t('User'), 'field' => 'ufd.name', - 'class' => [RESPONSIVE_PRIORITY_MEDIUM], - ], + 'class' => [RESPONSIVE_PRIORITY_MEDIUM]], [ 'data' => $this->t('Operations'), - 'class' => [RESPONSIVE_PRIORITY_LOW], - ], + 'class' => [RESPONSIVE_PRIORITY_LOW]], ]; $query = $this->database->select('watchdog', 'w') only in patch2: unchanged: --- a/core/modules/editor/src/Tests/EditorLoadingTest.php +++ b/core/modules/editor/src/Tests/EditorLoadingTest.php @@ -127,7 +127,7 @@ public function testLoading() { // - doesn't have access to the full_html text format, so: no text editor. $this->drupalLogin($this->normalUser); $this->drupalGet('node/add/article'); - list(, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body'); + list( , $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body'); $this->assertFalse($editor_settings_present, 'No Text Editor module settings.'); $this->assertFalse($editor_js_present, 'No Text Editor JavaScript.'); $this->assertTrue(count($body) === 1, 'A body field exists.'); @@ -140,17 +140,13 @@ public function testLoading() { $this->drupalLogin($this->privilegedUser); $this->drupalGet('node/add/article'); list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body'); - $expected = [ - 'formats' => [ - 'full_html' => [ - 'format' => 'full_html', - 'editor' => 'unicorn', - 'editorSettings' => ['ponyModeEnabled' => TRUE], - 'editorSupportsContentFiltering' => TRUE, - 'isXssSafe' => FALSE, - ], - ], - ]; + $expected = ['formats' => ['full_html' => [ + 'format' => 'full_html', + 'editor' => 'unicorn', + 'editorSettings' => ['ponyModeEnabled' => TRUE], + 'editorSupportsContentFiltering' => TRUE, + 'isXssSafe' => FALSE, + ]]]; $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page."); $this->assertIdentical($expected, $settings['editor'], "Text Editor module's JavaScript settings on the page are correct."); $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.'); @@ -178,17 +174,13 @@ public function testLoading() { $this->drupalLogin($this->untrustedUser); $this->drupalGet('node/add/article'); list($settings, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body'); - $expected = [ - 'formats' => [ - 'plain_text' => [ - 'format' => 'plain_text', - 'editor' => 'unicorn', - 'editorSettings' => ['ponyModeEnabled' => TRUE], - 'editorSupportsContentFiltering' => TRUE, - 'isXssSafe' => FALSE, - ], - ], - ]; + $expected = ['formats' => ['plain_text' => [ + 'format' => 'plain_text', + 'editor' => 'unicorn', + 'editorSettings' => ['ponyModeEnabled' => TRUE], + 'editorSupportsContentFiltering' => TRUE, + 'isXssSafe' => FALSE, + ]]]; $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page."); $this->assertIdentical($expected, $settings['editor'], "Text Editor module's JavaScript settings on the page are correct."); $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.'); @@ -210,7 +202,7 @@ public function testLoading() { // that (s)he is not allowed to use. The editor is still loaded. CKEditor, // for example, supports being loaded in a disabled state. $this->drupalGet('node/1/edit'); - list(, $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body'); + list( , $editor_settings_present, $editor_js_present, $body, $format_selector) = $this->getThingsToCheck('body'); $this->assertTrue($editor_settings_present, 'Text Editor module settings.'); $this->assertTrue($editor_js_present, 'Text Editor JavaScript.'); $this->assertTrue(count($body) === 1, 'A body field exists.'); @@ -249,7 +241,7 @@ public function testSupportedElementTypes() { // Assert the unicorn editor works with textfields. $this->drupalLogin($this->privilegedUser); $this->drupalGet('node/1/edit'); - list(, $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input'); + list( , $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input'); $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page."); $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.'); $this->assertTrue(count($field) === 1, 'A text field exists.'); @@ -265,7 +257,7 @@ public function testSupportedElementTypes() { ])->save(); $this->drupalGet('node/1/edit'); - list(, $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input'); + list( , $editor_settings_present, $editor_js_present, $field, $format_selector) = $this->getThingsToCheck('field-text', 'input'); $this->assertFalse($editor_settings_present, "Text Editor module's JavaScript settings are not on the page."); $this->assertFalse($editor_js_present, 'Text Editor JavaScript is not present.'); $this->assertTrue(count($field) === 1, 'A text field exists.'); only in patch2: unchanged: --- a/core/modules/editor/tests/src/Unit/EditorXssFilter/StandardTest.php +++ b/core/modules/editor/tests/src/Unit/EditorXssFilter/StandardTest.php @@ -364,11 +364,8 @@ public function providerTestFilterXss() { // IMG STYLE with expression. // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#IMG_STYLE_with_expression - $data[] = [ - 'exp/*', - 'exp/*', - ]; + $data[] = ['exp/*', 'exp/*']; // STYLE tag (Older versions of Netscape only). // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#STYLE_tag_.28Older_versions_of_Netscape_only.29 @@ -446,9 +443,7 @@ public function providerTestFilterXss() { // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Downlevel-Hidden_block $data[] = ['', - "\n alert('XSS');\n ", - ]; + ', "\n alert('XSS');\n "]; // BASE tag. // @see https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#BASE_tag only in patch2: unchanged: --- a/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php +++ b/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php @@ -12,4 +12,4 @@ * * @see \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem */ -class ConfigurableEntityReferenceItem extends EntityReferenceItem {} +class ConfigurableEntityReferenceItem extends EntityReferenceItem { } only in patch2: unchanged: --- a/core/modules/entity_reference/src/Plugin/views/display/EntityReference.php +++ b/core/modules/entity_reference/src/Plugin/views/display/EntityReference.php @@ -12,4 +12,4 @@ * * @see \Drupal\views\Plugin\views\display\EntityReference */ -class EntityReference extends ViewsEntityReference {} +class EntityReference extends ViewsEntityReference { } only in patch2: unchanged: --- a/core/modules/entity_reference/src/Plugin/views/row/EntityReference.php +++ b/core/modules/entity_reference/src/Plugin/views/row/EntityReference.php @@ -12,4 +12,4 @@ * * @see \Drupal\views\Plugin\views\row\EntityReference */ -class EntityReference extends ViewsEntityReference {} +class EntityReference extends ViewsEntityReference { } only in patch2: unchanged: --- a/core/modules/entity_reference/src/Plugin/views/style/EntityReference.php +++ b/core/modules/entity_reference/src/Plugin/views/style/EntityReference.php @@ -12,4 +12,4 @@ * * @see \Drupal\views\Plugin\views\style\EntityReference */ -class EntityReference extends ViewsEntityReference {} +class EntityReference extends ViewsEntityReference { } only in patch2: unchanged: --- a/core/modules/field/field.module +++ b/core/modules/field/field.module @@ -74,7 +74,7 @@ function field_help($route_name, RouteMatchInterface $route_match) { $output .= '

' . t('Terminology') . '

'; $output .= '
'; $output .= '
' . t('Entities and entity types') . '
'; - $output .= '
' . t("The website's content and configuration is managed using entities, which are grouped into entity types. Content entity types are the entity types for site content (such as the main site content, comments, custom blocks, taxonomy terms, and user accounts). Configuration entity types are used to store configuration information for your site, such as individual views in the Views module, and settings for your main site content types.") . '
'; + $output .= '
' . t('The website\'s content and configuration is managed using entities, which are grouped into entity types. Content entity types are the entity types for site content (such as the main site content, comments, custom blocks, taxonomy terms, and user accounts). Configuration entity types are used to store configuration information for your site, such as individual views in the Views module, and settings for your main site content types.') . '
'; $output .= '
' . t('Entity sub-types') . '
'; $output .= '
' . t('Some content entity types are further grouped into sub-types (for example, you could have article and page content types within the main site content entity type, and tag and category vocabularies within the taxonomy term entity type); other entity types, such as user accounts, do not have sub-types. Programmers use the term bundle for entity sub-types.') . '
'; $output .= '
' . t('Fields and field types') . '
'; only in patch2: unchanged: --- a/core/modules/field/src/Tests/Number/NumberFieldTest.php +++ b/core/modules/field/src/Tests/Number/NumberFieldTest.php @@ -45,7 +45,9 @@ public function testNumberDecimalField() { 'field_name' => $field_name, 'entity_type' => 'entity_test', 'type' => 'decimal', - 'settings' => ['precision' => 8, 'scale' => 4], + 'settings' => [ + 'precision' => 8, 'scale' => 4, + ] ])->save(); FieldConfig::create([ 'field_name' => $field_name, @@ -141,10 +143,8 @@ public function testNumberIntegerField() { 'entity_type' => 'entity_test', 'bundle' => 'entity_test', 'settings' => [ - 'min' => $minimum, - 'max' => $maximum, - 'prefix' => 'ThePrefix', - ], + 'min' => $minimum, 'max' => $maximum, 'prefix' => 'ThePrefix', + ] ])->save(); entity_get_form_display('entity_test', 'entity_test', 'default') only in patch2: unchanged: --- a/core/modules/field/tests/src/Kernel/FieldStorageCrudTest.php +++ b/core/modules/field/tests/src/Kernel/FieldStorageCrudTest.php @@ -433,9 +433,8 @@ public function testUpdateForbid() { 'type' => 'test_field', 'settings' => [ 'changeable' => 0, - 'unchangeable' => 0, - ], - ]); + 'unchangeable' => 0 + ]]); $field_storage->save(); $field_storage->setSetting('changeable', $field_storage->getSetting('changeable') + 1); try { only in patch2: unchanged: --- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php +++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php @@ -97,7 +97,7 @@ protected function setUp() { Database::getConnection('default', 'migrate') ->update('field_config_instance') ->fields([ - 'data' => serialize([ + 'data' => serialize( [ 'label' => 'Body', 'widget' => [ @@ -122,7 +122,9 @@ protected function setUp() { [ 'label' => 'hidden', 'type' => 'text_default', - 'settings' => [], + 'settings' => + [ + ], 'module' => 'text', 'weight' => 0, ], only in patch2: unchanged: --- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php +++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php @@ -194,9 +194,7 @@ public function testTextFieldInstances() { // message with the required steps to fix this. $migration = $this->getMigration('d7_field_instance'); $messages = $migration->getIdMap()->getMessageIterator()->fetchAll(); - $errors = array_map(function($message) { - return $message->message; - }, $messages); + $errors = array_map(function($message) {return $message->message;}, $messages); $this->assertCount(8, $errors); sort($errors); $message = 'Can\'t migrate source field field_text_long_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text'; only in patch2: unchanged: --- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php +++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php @@ -149,9 +149,7 @@ public function testTextFields() { // message with the required steps to fix this. $migration = $this->getMigration('d7_field'); $messages = $migration->getIdMap()->getMessageIterator()->fetchAll(); - $errors = array_map(function($message) { - return $message->message; - }, $messages); + $errors = array_map(function($message) {return $message->message;}, $messages); sort($errors); $this->assertCount(4, $errors); $this->assertEquals($errors[0], 'Can\'t migrate source field field_text_long_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text'); only in patch2: unchanged: --- a/core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php +++ b/core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php @@ -28,9 +28,9 @@ protected function setUp() { $this->createNode([ 'type' => 'article', 'title' => 'The node title', - 'body' => [ - ['value' => 'The node body'], - ], + 'body' => [[ + 'value' => 'The node body', + ]], ]); $this->drupalLogin($this->drupalCreateUser([ 'access administration pages', only in patch2: unchanged: --- a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php +++ b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php @@ -25,9 +25,9 @@ protected function setUp() { $entity = EntityTest::create([ 'name' => 'The name for this entity', - 'field_test_text' => [ - ['value' => 'The field test text value'], - ], + 'field_test_text' => [[ + 'value' => 'The field test text value', + ]], ]); $entity->save(); $this->drupalLogin($this->drupalCreateUser([ only in patch2: unchanged: --- a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php +++ b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php @@ -107,13 +107,11 @@ protected function getCardinalityForm() { '#parents' => [], '#type' => 'fieldset', '#title' => $this->t('Allowed number of values'), - '#attributes' => [ - 'class' => [ - 'container-inline', - 'fieldgroup', - 'form-composite', - ], - ], + '#attributes' => ['class' => [ + 'container-inline', + 'fieldgroup', + 'form-composite', + ]], ]; if ($enforced_cardinality = $this->getEnforcedCardinality()) { only in patch2: unchanged: --- a/core/modules/field_ui/tests/src/FunctionalJavascript/EntityDisplayTest.php +++ b/core/modules/field_ui/tests/src/FunctionalJavascript/EntityDisplayTest.php @@ -25,9 +25,9 @@ protected function setUp() { $entity = EntityTest::create([ 'name' => 'The name for this entity', - 'field_test_text' => [ - ['value' => 'The field test text value'], - ], + 'field_test_text' => [[ + 'value' => 'The field test text value', + ]], ]); $entity->save(); $this->drupalLogin($this->drupalCreateUser([ only in patch2: unchanged: --- a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php +++ b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php @@ -129,7 +129,7 @@ public function testEntityDisplayCRUDSort() { $display->save(); $components = array_keys($display->getComponents()); // The name field is not configurable so will be added automatically. - $expected = [0 => 'component_1', 1 => 'component_2', 2 => 'component_3', 'name']; + $expected = [ 0 => 'component_1', 1 => 'component_2', 2 => 'component_3', 'name']; $this->assertIdentical($components, $expected); } @@ -150,7 +150,7 @@ public function testEntityGetDisplay() { $display = entity_get_display('entity_test', 'entity_test', 'default'); $this->assertFalse($display->isNew()); $this->assertEqual($display->id(), 'entity_test.entity_test.default'); - $this->assertEqual($display->getComponent('component_1'), ['weight' => 10, 'settings' => [], 'third_party_settings' => [], 'region' => 'content']); + $this->assertEqual($display->getComponent('component_1'), [ 'weight' => 10, 'settings' => [], 'third_party_settings' => [], 'region' => 'content']); } /** only in patch2: unchanged: --- a/core/modules/file/file.module +++ b/core/modules/file/file.module @@ -1208,9 +1208,7 @@ function file_managed_file_save_upload($element, FormStateInterface $form_state) // Value callback expects FIDs to be keys. $files = array_filter($files); - $fids = array_map(function($file) { - return $file->id(); - }, $files); + $fids = array_map(function($file) { return $file->id(); }, $files); return empty($files) ? [] : array_combine($fids, $files); } only in patch2: unchanged: --- a/core/modules/file/src/FileAccessFormatterControlHandlerInterface.php +++ b/core/modules/file/src/FileAccessFormatterControlHandlerInterface.php @@ -22,4 +22,4 @@ * * @see \Drupal\file\Plugin\Field\FieldFormatter\FileFormatterBase::needsAccessCheck() */ -interface FileAccessFormatterControlHandlerInterface extends EntityAccessControlHandlerInterface {} +interface FileAccessFormatterControlHandlerInterface extends EntityAccessControlHandlerInterface { } only in patch2: unchanged: --- a/core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php +++ b/core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php @@ -13,7 +13,7 @@ class FileFieldItemList extends EntityReferenceFieldItemList { /** * {@inheritdoc} */ - public function defaultValuesForm(array &$form, FormStateInterface $form_state) {} + public function defaultValuesForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php +++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php @@ -333,7 +333,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin $file = file_save_data($data, $destination, FILE_EXISTS_ERROR); $values = [ 'target_id' => $file->id(), - 'display' => (int) $settings['display_default'], + 'display' => (int)$settings['display_default'], 'description' => $random->sentences(10), ]; return $values; only in patch2: unchanged: --- a/core/modules/file/src/Plugin/migrate/source/d6/UploadInstance.php +++ b/core/modules/file/src/Plugin/migrate/source/d6/UploadInstance.php @@ -25,9 +25,7 @@ protected function initializeIterator() { ->fields('nt', ['type']) ->execute() ->fetchCol(); - $variables = array_map(function($type) { - return 'upload_' . $type; - }, $node_types); + $variables = array_map(function($type) { return 'upload_' . $type; }, $node_types); $max_filesize = $this->variableGet('upload_uploadsize_default', 1); $max_filesize = $max_filesize ? $max_filesize . 'MB' : ''; only in patch2: unchanged: --- a/core/modules/file/tests/src/Kernel/Migrate/d7/FileMigrationSetupTrait.php +++ /dev/null @@ -1,38 +0,0 @@ -installSchema('file', ['file_usage']); - $this->installEntitySchema('file'); - $this->container->get('stream_wrapper_manager')->registerWrapper('public', PublicStream::class, StreamWrapperInterface::NORMAL); - - $fs = \Drupal::service('file_system'); - // The public file directory active during the test will serve as the - // root of the fictional Drupal 7 site we're migrating. - $fs->mkdir('public://sites/default/files', NULL, TRUE); - file_put_contents('public://sites/default/files/cube.jpeg', str_repeat('*', 3620)); - - /** @var \Drupal\migrate\Plugin\Migration $migration */ - $migration = $this->getMigration('d7_file'); - // Set the source plugin's source_base_path configuration value, which - // would normally be set by the user running the migration. - $source = $migration->getSourceConfiguration(); - $source['constants']['source_base_path'] = $fs->realpath('public://'); - $migration->set('source', $source); - $this->executeMigration($migration); - } - -} only in patch2: unchanged: --- a/core/modules/file/tests/src/Kernel/Migrate/d7/MigrateFileTest.php +++ b/core/modules/file/tests/src/Kernel/Migrate/d7/MigrateFileTest.php @@ -2,6 +2,7 @@ namespace Drupal\Tests\file\Kernel\Migrate\d7; +use Drupal\Core\StreamWrapper\StreamWrapperInterface; use Drupal\file\Entity\File; use Drupal\file\FileInterface; use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase; @@ -13,8 +14,6 @@ */ class MigrateFileTest extends MigrateDrupal7TestBase { - use FileMigrationSetupTrait; - public static $modules = ['file']; /** @@ -23,7 +22,23 @@ class MigrateFileTest extends MigrateDrupal7TestBase { protected function setUp() { parent::setUp(); - $this->fileMigrationSetup(); + $this->installEntitySchema('file'); + $this->container->get('stream_wrapper_manager')->registerWrapper('public', 'Drupal\Core\StreamWrapper\PublicStream', StreamWrapperInterface::NORMAL); + + $fs = \Drupal::service('file_system'); + // The public file directory active during the test will serve as the + // root of the fictional Drupal 7 site we're migrating. + $fs->mkdir('public://sites/default/files', NULL, TRUE); + file_put_contents('public://sites/default/files/cube.jpeg', str_repeat('*', 3620)); + + /** @var \Drupal\migrate\Plugin\Migration $migration */ + $migration = $this->getMigration('d7_file'); + // Set the source plugin's source_base_path configuration value, which + // would normally be set by the user running the migration. + $source = $migration->getSourceConfiguration(); + $source['constants']['source_base_path'] = $fs->realpath('public://'); + $migration->set('source', $source); + $this->executeMigration($migration); } /** only in patch2: unchanged: --- a/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FileUriTest.php +++ b/core/modules/file/tests/src/Unit/Plugin/migrate/process/d6/FileUriTest.php @@ -4,6 +4,7 @@ use Drupal\file\Plugin\migrate\process\d6\FileUri; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Row; use Drupal\Tests\migrate\Unit\MigrateTestCase; @@ -68,7 +69,7 @@ public function testTemporary() { } protected function doTransform(array $value) { - $executable = new MigrateExecutable($this->getMigration()); + $executable = new MigrateExecutable($this->getMigration(), new MigrateMessage()); $row = new Row(); return (new FileUri([], 'file_uri', [])) only in patch2: unchanged: --- a/core/modules/filter/src/Plugin/DataType/FilterFormat.php +++ b/core/modules/filter/src/Plugin/DataType/FilterFormat.php @@ -27,9 +27,7 @@ public function getPossibleValues(AccountInterface $account = NULL) { * {@inheritdoc} */ public function getPossibleOptions(AccountInterface $account = NULL) { - return array_map(function ($format) { - return $format->label(); - }, filter_formats()); + return array_map(function ($format) { return $format->label(); }, filter_formats()); } /** @@ -44,9 +42,7 @@ public function getSettableValues(AccountInterface $account = NULL) { */ public function getSettableOptions(AccountInterface $account = NULL) { // @todo: Avoid calling functions but move to injected dependencies. - return array_map(function ($format) { - return $format->label(); - }, filter_formats($account)); + return array_map(function ($format) { return $format->label(); }, filter_formats($account)); } } only in patch2: unchanged: --- a/core/modules/filter/src/Plugin/Filter/FilterHtml.php +++ b/core/modules/filter/src/Plugin/Filter/FilterHtml.php @@ -285,9 +285,7 @@ public function getHTMLRestrictions() { // allowed attribute values with a wildcard. A wildcard by itself // would mean whitelisting all possible attribute values. But in that // case, one would not specify an attribute value at all. - $allowed_attribute_values = array_filter($allowed_attribute_values, function ($value) use ($star_protector) { - return $value !== '*'; - }); + $allowed_attribute_values = array_filter($allowed_attribute_values, function ($value) use ($star_protector) { return $value !== '*'; }); if (empty($allowed_attribute_values)) { // If the value is the empty string all values are allowed. @@ -373,9 +371,7 @@ public function tips($long = FALSE) { 'q' => [$this->t('Quoted inline'), '' . $this->t('Quoted inline') . ''], // Assumes and describes tr, td, th. 'table' => [$this->t('Table'), '
' . $this->t('Table header') . '
' . $this->t('Table cell') . '
'], - 'tr' => NULL, - 'td' => NULL, - 'th' => NULL, + 'tr' => NULL, 'td' => NULL, 'th' => NULL, 'del' => [$this->t('Deleted'), '' . $this->t('Deleted') . ''], 'ins' => [$this->t('Inserted'), '' . $this->t('Inserted') . ''], // Assumes and describes li. @@ -384,8 +380,7 @@ public function tips($long = FALSE) { 'li' => NULL, // Assumes and describes dt and dd. 'dl' => [$this->t('Definition lists are similar to other HTML lists. <dl> begins the definition list, <dt> begins the definition term and <dd> begins the definition description.'), '
' . $this->t('First term') . '
' . $this->t('First definition') . '
' . $this->t('Second term') . '
' . $this->t('Second definition') . '
'], - 'dt' => NULL, - 'dd' => NULL, + 'dt' => NULL, 'dd' => NULL, 'h1' => [$this->t('Heading'), '

' . $this->t('Title') . '

'], 'h2' => [$this->t('Heading'), '

' . $this->t('Subtitle') . '

'], 'h3' => [$this->t('Heading'), '

' . $this->t('Subtitle three') . '

'], @@ -401,17 +396,19 @@ public function tips($long = FALSE) { ['data' => $tips[$tag][0], 'class' => ['description']], // The markup must be escaped because this is the example code for the // user. - [ - 'data' => [ + ['data' => + [ '#prefix' => '', '#plain_text' => $tips[$tag][1], - '#suffix' => '', + '#suffix' => '' ], - 'class' => ['type'], - ], + 'class' => ['type']], // The markup must not be escaped because this is the example output // for the user. - ['data' => ['#markup' => $tips[$tag][1]], 'class' => ['get']], + ['data' => + ['#markup' => $tips[$tag][1]], + 'class' => ['get'], + ], ]; } else { only in patch2: unchanged: --- a/core/modules/forum/forum.module +++ b/core/modules/forum/forum.module @@ -455,14 +455,11 @@ function template_preprocess_forums(&$variables) { $variables['topics'][$id]->title_link = \Drupal::l($topic->getTitle(), $topic->urlInfo()); $variables['topics'][$id]->message = ''; } - $forum_submitted = [ - '#theme' => 'forum_submitted', - '#topic' => (object) [ - 'uid' => $topic->getOwnerId(), - 'name' => $topic->getOwner()->getDisplayName(), - 'created' => $topic->getCreatedTime(), - ], - ]; + $forum_submitted = ['#theme' => 'forum_submitted', '#topic' => (object) [ + 'uid' => $topic->getOwnerId(), + 'name' => $topic->getOwner()->getDisplayName(), + 'created' => $topic->getCreatedTime(), + ]]; $variables['topics'][$id]->submitted = \Drupal::service('renderer')->render($forum_submitted); $forum_submitted = [ '#theme' => 'forum_submitted', only in patch2: unchanged: --- a/core/modules/forum/src/ForumIndexStorage.php +++ b/core/modules/forum/src/ForumIndexStorage.php @@ -103,7 +103,7 @@ public function updateIndex(NodeInterface $node) { ':status' => CommentInterface::PUBLISHED, ])->fetchObject(); $this->database->update('forum_index') - ->fields([ + ->fields( [ 'comment_count' => $count, 'last_comment_timestamp' => $last_reply->created, ]) @@ -114,7 +114,7 @@ public function updateIndex(NodeInterface $node) { // Comments do not exist. // @todo This should be actually filtering on the desired node language $this->database->update('forum_index') - ->fields([ + ->fields( [ 'comment_count' => 0, 'last_comment_timestamp' => $node->getCreatedTime(), ]) only in patch2: unchanged: --- a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonAnonTest.php +++ /dev/null @@ -1,74 +0,0 @@ -applyHalFieldNormalization($default_normalization); - - return $normalization + [ - '_links' => [ - 'self' => [ - 'href' => $this->baseUrl . '/block/1?_format=hal_json', - ], - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/block_content/basic', - ], - ], - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - return parent::getNormalizedPostEntity() + [ - '_links' => [ - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/block_content/basic', - ], - ], - ]; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedCacheContexts() { - // The 'url.site' cache context is added for '_links' in the response. - return Cache::mergeTags(parent::getExpectedCacheContexts(), ['url.site']); - } - -} only in patch2: unchanged: --- a/core/modules/hal/tests/src/Functional/EntityResource/BlockContent/BlockContentHalJsonBasicAuthTest.php +++ /dev/null @@ -1,24 +0,0 @@ -applyHalFieldNormalization($default_normalization); - - $file = File::load(1); - $thumbnail = File::load(2); - $author = User::load($this->entity->getOwnerId()); - return $normalization + [ - '_links' => [ - 'self' => [ - 'href' => $this->baseUrl . '/media/1?_format=hal_json', - ], - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/media/camelids', - ], - $this->baseUrl . '/rest/relation/media/camelids/field_media_file_1' => [ - [ - 'href' => $file->url(), - 'lang' => 'en', - ], - ], - $this->baseUrl . '/rest/relation/media/camelids/revision_user' => [ - [ - 'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json', - ], - ], - $this->baseUrl . '/rest/relation/media/camelids/thumbnail' => [ - [ - 'href' => $thumbnail->url(), - 'lang' => 'en', - ], - ], - $this->baseUrl . '/rest/relation/media/camelids/uid' => [ - [ - 'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json', - 'lang' => 'en', - ], - ], - ], - '_embedded' => [ - $this->baseUrl . '/rest/relation/media/camelids/field_media_file_1' => [ - [ - '_links' => [ - 'self' => [ - 'href' => $file->url(), - ], - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/file/file', - ], - ], - 'lang' => 'en', - 'uri' => [ - [ - 'value' => $file->url(), - ], - ], - 'uuid' => [ - [ - 'value' => $file->uuid(), - ], - ], - ], - ], - $this->baseUrl . '/rest/relation/media/camelids/revision_user' => [ - [ - '_links' => [ - 'self' => [ - 'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json', - ], - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/user/user', - ], - ], - 'uuid' => [ - [ - 'value' => $author->uuid(), - ], - ], - ], - ], - $this->baseUrl . '/rest/relation/media/camelids/thumbnail' => [ - [ - '_links' => [ - 'self' => [ - 'href' => $thumbnail->url(), - ], - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/file/file', - ], - ], - 'lang' => 'en', - 'uri' => [ - [ - 'value' => $thumbnail->url(), - ], - ], - 'uuid' => [ - [ - 'value' => $thumbnail->uuid(), - ], - ], - ], - ], - $this->baseUrl . '/rest/relation/media/camelids/uid' => [ - [ - '_links' => [ - 'self' => [ - 'href' => $this->baseUrl . '/user/' . $author->id() . '?_format=hal_json', - ], - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/user/user', - ], - ], - 'uuid' => [ - [ - 'value' => $author->uuid(), - ], - ], - 'lang' => 'en', - ], - ], - ], - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - return parent::getNormalizedPostEntity() + [ - '_links' => [ - 'type' => [ - 'href' => $this->baseUrl . '/rest/type/media/camelids', - ], - ], - ]; - } - -} only in patch2: unchanged: --- a/core/modules/hal/tests/src/Functional/EntityResource/Media/MediaHalJsonBasicAuthTest.php +++ /dev/null @@ -1,24 +0,0 @@ - [], + '_links' => [ + ], ]; try { $this->serializer->denormalize($data_with_no_type, $this->entityClass, $this->format); @@ -135,7 +136,7 @@ public function testMarkFieldForDeletion() { ], 'field_test_text' => [], ]; - $entity = $this->serializer->denormalize($data, get_class($entity), $this->format, ['target_instance' => $entity ]); + $entity = $this->serializer->denormalize($data, get_class($entity), $this->format, [ 'target_instance' => $entity ]); $this->assertEqual($entity->field_test_text->count(), 0); } only in patch2: unchanged: --- a/core/modules/hal/tests/src/Kernel/FileNormalizeTest.php +++ b/core/modules/hal/tests/src/Kernel/FileNormalizeTest.php @@ -44,7 +44,8 @@ public function testNormalize() { $expected_array = [ 'uri' => [ - ['value' => file_create_url($file->getFileUri())], + [ + 'value' => file_create_url($file->getFileUri())], ], ]; only in patch2: unchanged: --- a/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php +++ b/core/modules/hal/tests/src/Kernel/HalLinkManagerTest.php @@ -17,7 +17,7 @@ class HalLinkManagerTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = ['hal', 'hal_test', 'serialization', 'system', 'node', 'user', 'field']; + public static $modules = [ 'hal', 'hal_test', 'serialization', 'system', 'node', 'user', 'field']; /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/history/src/Controller/HistoryController.php +++ b/core/modules/history/src/Controller/HistoryController.php @@ -51,7 +51,7 @@ public function readNode(Request $request, NodeInterface $node) { // Update the history table, stating that this user viewed this node. history_write($node->id()); - return new JsonResponse((int) history_read($node->id())); + return new JsonResponse((int)history_read($node->id())); } } only in patch2: unchanged: --- a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php +++ b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php @@ -3,7 +3,6 @@ namespace Drupal\image\Plugin\Field\FieldType; use Drupal\Component\Utility\Random; -use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Form\FormStateInterface; @@ -314,18 +313,13 @@ public function preSave() { $height = $this->height; // Determine the dimensions if necessary. - if ($this->entity && $this->entity instanceof EntityInterface) { - if (empty($width) || empty($height)) { - $image = \Drupal::service('image.factory')->get($this->entity->getFileUri()); - if ($image->isValid()) { - $this->width = $image->getWidth(); - $this->height = $image->getHeight(); - } + if (empty($width) || empty($height)) { + $image = \Drupal::service('image.factory')->get($this->entity->getFileUri()); + if ($image->isValid()) { + $this->width = $image->getWidth(); + $this->height = $image->getHeight(); } } - else { - trigger_error(sprintf("Missing file with ID %s.", $this->target_id), E_USER_WARNING); - } } /** only in patch2: unchanged: --- a/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php +++ b/core/modules/image/src/Tests/ImageStylesPathAndUrlTest.php @@ -199,7 +199,7 @@ public function doImageStyleUrlAndPathTests($scheme, $clean_url = TRUE, $extra_s else { // Check for PNG-Signature (cf. http://www.libpng.org/pub/png/book/chapter08.html#png.ch08.div.2) in the // response body. - $this->assertNoRaw(chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10), 'No PNG signature found in the response body.'); + $this->assertNoRaw( chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10), 'No PNG signature found in the response body.'); } } else { only in patch2: unchanged: --- a/core/modules/image/tests/src/Kernel/ImageItemTest.php +++ b/core/modules/image/tests/src/Kernel/ImageItemTest.php @@ -2,7 +2,6 @@ namespace Drupal\Tests\image\Kernel; -use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Field\FieldItemInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FieldStorageDefinitionInterface; @@ -130,26 +129,4 @@ public function testImageItem() { $this->assertEqual($entity->image_test->entity->get('filemime')->value, 'image/jpeg'); } - /** - * Tests a malformed image. - */ - public function testImageItemMalformed() { - // Validate entity is an image and don't gather dimensions if it is not. - $entity = EntityTest::create(); - $entity->image_test = NULL; - $entity->image_test->target_id = 9999; - // PHPUnit re-throws E_USER_WARNING as an exception. - try { - $entity->save(); - $this->fail('Exception did not fail'); - } - catch (EntityStorageException $exception) { - $this->assertInstanceOf(\PHPUnit_Framework_Error_Warning::class, $exception->getPrevious()); - $this->assertEquals($exception->getMessage(), 'Missing file with ID 9999.'); - $this->assertEmpty($entity->image_test->width); - $this->assertEmpty($entity->image_test->height); - } - - } - } only in patch2: unchanged: --- a/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php +++ b/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php @@ -141,11 +141,9 @@ public function testInvalidCropValues() { $this->startCollectingMessages(); $this->executeMigration('d6_imagecache_presets'); - $this->assertEqual([ - 'error' => [ - 'The Drupal 8 image crop effect does not support numeric values for x and y offsets. Use keywords to set crop effect offsets instead.', - ], - ], $this->migrateMessages); + $this->assertEqual(['error' => [ + 'The Drupal 8 image crop effect does not support numeric values for x and y offsets. Use keywords to set crop effect offsets instead.' + ]], $this->migrateMessages); } /** only in patch2: unchanged: --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -43,15 +43,15 @@ function language_help($route_name, RouteMatchInterface $route_match) { $output .= '
' . t('Making a block visible per language') . '
'; $output .= '
' . t('If the Block module is enabled, then the Language module allows you to set the visibility of a block based on selected languages on the Block layout page.', [':blocks' => (\Drupal::moduleHandler()->moduleExists('block')) ? \Drupal::url('block.admin_display') : '#']) . '
'; $output .= '
' . t('Choosing user languages') . '
'; - $output .= '
' . t("Users can choose a Site language on their profile page. This language is used for email messages, and can be used by modules to determine a user's language. It can also be used for interface text, if the User method is enabled as a Detection and selection method (see below). Administrative users can choose a separate Administration pages language for the interface text on administration pages. This configuration is only available on the user's profile page if the Account administration pages method is enabled (see below).") . '
'; + $output .= '
' . t('Users can choose a Site language on their profile page. This language is used for email messages, and can be used by modules to determine a user\'s language. It can also be used for interface text, if the User method is enabled as a Detection and selection method (see below). Administrative users can choose a separate Administration pages language for the interface text on administration pages. This configuration is only available on the user\'s profile page if the Account administration pages method is enabled (see below).') . '
'; $output .= '
' . t('Language detection and selection') . '
'; $output .= '
' . t('The Detection and selection page provides several methods for deciding which language is used for displaying interface text. When a method detects and selects an interface language, then the following methods in the list are not applied. You can order them by importance, with your preferred method at the top of the list, followed by one or several fall-back methods.', [':detection' => \Drupal::url('language.negotiation')]); $output .= '
  • ' . t('URL sets the interface language based on a path prefix or domain (for example specifying de for German would result in URLs like example.com/de/contact). The default language does not require a path prefix, but can have one assigned as well. If the language detection is done by domain name, a domain needs to be specified for each language.') . '
  • '; $output .= '
  • ' . t('Session determines the interface language from a request or session parameter (for example example.com?language=de would set the interface language to German based on the use of de as the language parameter).') . '
  • '; - $output .= '
  • ' . t("User follows the language configuration set on the user's profile page.") . '
  • '; + $output .= '
  • ' . t('User follows the language configuration set on the user\'s profile page.') . '
  • '; $output .= '
  • ' . t('Browser sets the interface language based on the browser\'s language settings. Since browsers use different language codes to refer to the same languages, you can add and edit languages codes to map the browser language codes to the language codes used on your site.', [':language_list' => \Drupal::url('entity.configurable_language.collection')]) . '
  • '; $output .= '
  • ' . t('Account administration pages follows the configuration set as Administration pages language on the profile page of an administrative user. This method is similar to the User method, but only sets the interface text language on administration pages, independent of the interface text language on other pages.') . '
  • '; - $output .= '
  • ' . t("Selected language allows you to specify the site's default language or a specific language as the fall-back language. This method should be listed last.") . '
'; + $output .= '
  • ' . t('Selected language allows you to specify the site\'s default language or a specific language as the fall-back language. This method should be listed last.') . '
  • '; $output .= '
    '; return $output; only in patch2: unchanged: --- a/core/modules/language/tests/src/Kernel/Views/ArgumentLanguageTest.php +++ b/core/modules/language/tests/src/Kernel/Views/ArgumentLanguageTest.php @@ -35,9 +35,9 @@ public function testArgument() { ]); $this->executeView($view, [$langcode]); - $expected = [ - ['name' => $name], - ]; + $expected = [[ + 'name' => $name, + ]]; $this->assertIdenticalResultset($view, $expected, ['views_test_data_name' => 'name']); $view->destroy(); } only in patch2: unchanged: --- a/core/modules/language/tests/src/Kernel/Views/FilterLanguageTest.php +++ b/core/modules/language/tests/src/Kernel/Views/FilterLanguageTest.php @@ -36,9 +36,9 @@ public function testFilter() { ]); $this->executeView($view); - $expected = [ - ['name' => $name], - ]; + $expected = [[ + 'name' => $name, + ]]; $this->assertIdenticalResultset($view, $expected, ['views_test_data_name' => 'name']); $expected = [ only in patch2: unchanged: --- a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php +++ b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php @@ -135,7 +135,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin $values['title'] = mt_rand(0, 1) ? $random->sentences(4) : ''; break; } - $values['uri'] = 'http://www.' . $random->word($domain_length) . '.' . $tlds[mt_rand(0, (count($tlds) - 1))]; + $values['uri'] = 'http://www.' . $random->word($domain_length) . '.' . $tlds[mt_rand(0, (sizeof($tlds) - 1))]; } else { $values['uri'] = 'base:' . $random->name(mt_rand(1, 64)); only in patch2: unchanged: --- a/core/modules/link/src/Plugin/migrate/process/d6/CckLink.php +++ b/core/modules/link/src/Plugin/migrate/process/d6/CckLink.php @@ -14,4 +14,4 @@ * @deprecated in Drupal 8.3.x, to be removed before Drupal 9.0.x. Use * \Drupal\link\Plugin\migrate\process\d6\FieldLink instead. */ -class CckLink extends FieldLink {} +class CckLink extends FieldLink { } only in patch2: unchanged: --- a/core/modules/locale/locale.batch.inc +++ b/core/modules/locale/locale.batch.inc @@ -238,13 +238,11 @@ function locale_translation_http_check($uri) { $logger = \Drupal::logger('locale'); try { $actual_uri = NULL; - $response = \Drupal::service('http_client_factory')->fromOptions([ - 'allow_redirects' => [ - 'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $request_uri) use (&$actual_uri) { - $actual_uri = (string) $request_uri; - } - ], - ])->head($uri); + $response = \Drupal::service('http_client_factory')->fromOptions(['allow_redirects' => [ + 'on_redirect' => function(RequestInterface $request, ResponseInterface $response, UriInterface $request_uri) use (&$actual_uri) { + $actual_uri = (string) $request_uri; + } + ]])->head($uri); $result = []; // Return the effective URL if it differs from the requested. only in patch2: unchanged: --- a/core/modules/locale/src/Form/ImportForm.php +++ b/core/modules/locale/src/Form/ImportForm.php @@ -166,7 +166,7 @@ public function validateForm(array &$form, FormStateInterface $form_state) { * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { - $this->moduleHandler->loadInclude('locale', 'translation.inc'); + \Drupal::moduleHandler()->loadInclude('locale', 'translation.inc'); // Add language, if not yet supported. $language = $this->languageManager->getLanguage($form_state->getValue('langcode')); if (empty($language)) { @@ -185,6 +185,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) { batch_set($batch); // Create or update all configuration translations for this language. + \Drupal::moduleHandler()->loadInclude('locale', 'bulk.inc'); if ($batch = locale_config_batch_update_components($options, [$form_state->getValue('langcode')])) { batch_set($batch); } only in patch2: unchanged: --- a/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php +++ b/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php @@ -231,7 +231,7 @@ protected function assertNodeConfig($required, $optional) { } // Check the optional default configuration in node module. - $string = $this->storage->findString(['source' => 'No front page content has been created yet.
    Follow the User Guide to start building your site.', 'context' => '', 'type' => 'configuration']); + $string = $this->storage->findString(['source' => 'No front page content has been created yet.', 'context' => '', 'type' => 'configuration']); if ($optional) { $this->assertFalse($this->config('views.view.frontpage')->isNew()); $this->assertTrue($string, 'Node view text can be found with node and views modules.'); only in patch2: unchanged: --- a/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php +++ b/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php @@ -341,8 +341,7 @@ public function testConfigtranslationImportingPoFile() { // Import a .po file to translate. $this->importPoFile($this->getPoFileWithConfigDe(), [ - 'langcode' => $langcode, - ]); + 'langcode' => $langcode]); // Check that the 'Anonymous' string is translated. $config = \Drupal::languageManager()->getLanguageConfigOverride($langcode, 'user.settings'); only in patch2: unchanged: --- a/core/modules/media/src/Entity/Media.php +++ b/core/modules/media/src/Entity/Media.php @@ -152,7 +152,7 @@ public function getOwnerId() { * {@inheritdoc} */ public function setOwnerId($uid) { - return $this->set('uid', $uid); + $this->set('uid', $uid); } /** only in patch2: unchanged: --- a/core/modules/media/src/Plugin/views/wizard/Media.php +++ b/core/modules/media/src/Plugin/views/wizard/Media.php @@ -23,6 +23,22 @@ class Media extends WizardPluginBase { protected $createdColumn = 'media_field_data-created'; /** + * Set default values for the filters. + * + * @var array + */ + protected $filters = [ + 'status' => [ + 'value' => '1', + 'table' => 'media_field_data', + 'field' => 'status', + 'plugin_id' => 'boolean', + 'entity_type' => 'media', + 'entity_field' => 'status', + ], + ]; + + /** * {@inheritdoc} */ public function getAvailableSorts() { only in patch2: unchanged: --- a/core/modules/media/src/Plugin/views/wizard/MediaRevision.php +++ b/core/modules/media/src/Plugin/views/wizard/MediaRevision.php @@ -23,6 +23,22 @@ class MediaRevision extends WizardPluginBase { protected $createdColumn = 'media_field_revision-created'; /** + * Set default values for the filters. + * + * @var array + */ + protected $filters = [ + 'status' => [ + 'value' => '1', + 'table' => 'media_field_revision', + 'field' => 'status', + 'plugin_id' => 'boolean', + 'entity_type' => 'media', + 'entity_field' => 'status', + ], + ]; + + /** * {@inheritdoc} */ protected function defaultDisplayOptions() { only in patch2: unchanged: --- a/core/modules/media/tests/src/Kernel/MediaLinkRelationsTest.php +++ /dev/null @@ -1,27 +0,0 @@ -container->get('plugin.manager.link_relation_type'); - $media = Media::create(['bundle' => $this->testMediaType->id()]); - $media->save(); - foreach ($media->uriRelationships() as $relation_name) { - $this->assertTrue($link_relation_type_manager->hasDefinition($relation_name), "Link relationship '{$relation_name}' for Media entity"); - } - } - -} only in patch2: unchanged: --- a/core/modules/media/tests/src/Kernel/MediaTest.php +++ /dev/null @@ -1,23 +0,0 @@ - $this->testMediaType->id()]); - - $this->assertSame($media, $media->setOwnerId($this->user->id()), 'setOwnerId() method returns its own entity.'); - } - -} only in patch2: unchanged: --- a/core/modules/menu_ui/tests/src/Functional/MenuCacheTagsTest.php +++ b/core/modules/menu_ui/tests/src/Functional/MenuCacheTagsTest.php @@ -82,9 +82,9 @@ public function testMenuBlock() { 'parent' => '', 'title' => 'Alpaca', 'menu_name' => 'llama', - 'link' => [ - ['uri' => 'internal:/'], - ], + 'link' => [[ + 'uri' => 'internal:/', + ]], 'bundle' => 'menu_name', ]); $menu_link_2->save(); only in patch2: unchanged: --- a/core/modules/migrate/src/MigrateExecutable.php +++ b/core/modules/migrate/src/MigrateExecutable.php @@ -96,16 +96,16 @@ class MigrateExecutable implements MigrateExecutableInterface { * @param \Drupal\migrate\Plugin\MigrationInterface $migration * The migration to run. * @param \Drupal\migrate\MigrateMessageInterface $message - * (optional) The migrate message service. + * The migrate message service. * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher - * (optional) The event dispatcher. + * The event dispatcher. * * @throws \Drupal\migrate\MigrateException */ - public function __construct(MigrationInterface $migration, MigrateMessageInterface $message = NULL, EventDispatcherInterface $event_dispatcher = NULL) { + public function __construct(MigrationInterface $migration, MigrateMessageInterface $message, EventDispatcherInterface $event_dispatcher = NULL) { $this->migration = $migration; - $this->message = $message ?: new MigrateMessage(); - $this->migration->getIdMap()->setMessage($this->message); + $this->message = $message; + $this->migration->getIdMap()->setMessage($message); $this->eventDispatcher = $event_dispatcher; // Record the memory limit in bytes $limit = trim(ini_get('memory_limit')); only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php +++ b/core/modules/migrate/src/Plugin/migrate/process/DedupeEntity.php @@ -22,4 +22,4 @@ * * @see https://www.drupal.org/node/2873762 */ -class DedupeEntity extends MakeUniqueEntityField {} +class DedupeEntity extends MakeUniqueEntityField { } only in patch2: unchanged: --- a/core/modules/migrate/src/Plugin/migrate/process/Migration.php +++ b/core/modules/migrate/src/Plugin/migrate/process/Migration.php @@ -17,4 +17,4 @@ * @deprecated in Drupal 8.3.x and will be removed in Drupal 9.0.x. * Use \Drupal\migrate\Plugin\migrate\process\MigrationLookup instead. */ -class Migration extends MigrationLookup {} +class Migration extends MigrationLookup { } only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Functional/process/DownloadFunctionalTest.php +++ b/core/modules/migrate/tests/src/Functional/process/DownloadFunctionalTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\migrate\Functional\process; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\MigrateIdMapInterface; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\Tests\BrowserTestBase; @@ -50,7 +51,7 @@ public function testExceptionThrow() { $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); $result = $executable->import(); // Check that the migration has completed. only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php +++ b/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php @@ -5,6 +5,7 @@ use Drupal\KernelTests\KernelTestBase; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\migrate\destination\EntityContentBase; use Drupal\migrate\Plugin\MigrateIdMapInterface; use Drupal\migrate\Plugin\MigrationInterface; @@ -189,7 +190,7 @@ public function testEntityWithStringId() { ]; $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); $result = $executable->import(); $this->assertEquals(MigrationInterface::RESULT_COMPLETED, $result); only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php +++ b/core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php @@ -7,6 +7,7 @@ use Drupal\migrate\Event\MigrateMapSaveEvent; use Drupal\migrate\Event\MigratePostRowSaveEvent; use Drupal\migrate\Event\MigratePreRowSaveEvent; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Event\MigrateEvents; use Drupal\migrate\MigrateExecutable; use Drupal\KernelTests\KernelTestBase; @@ -75,7 +76,7 @@ public function testMigrateEvents() { $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); // As the import runs, events will be dispatched, recording the received // information in state. $executable->import(); only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/MigrateInterruptionTest.php +++ b/core/modules/migrate/tests/src/Kernel/MigrateInterruptionTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\migrate\Kernel; use Drupal\migrate\Event\MigratePostRowSaveEvent; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\Event\MigrateEvents; use Drupal\migrate\MigrateExecutable; @@ -55,7 +56,7 @@ public function testMigrateEvents() { $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); // When the import runs, the first row imported will trigger an // interruption. $result = $executable->import(); only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/MigrateSkipRowTest.php +++ b/core/modules/migrate/tests/src/Kernel/MigrateSkipRowTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\migrate\Kernel; use Drupal\KernelTests\KernelTestBase; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\MigrationInterface; use Drupal\migrate\MigrateExecutable; use Drupal\migrate\Plugin\MigrateIdMapInterface; @@ -49,7 +50,7 @@ public function testPrepareRowSkip() { $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); $result = $executable->import(); $this->assertEqual($result, MigrationInterface::RESULT_COMPLETED); @@ -84,7 +85,7 @@ public function testPrepareRowSkip() { ]; $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); $result = $executable->import(); $this->assertEquals($result, MigrationInterface::RESULT_COMPLETED); only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php +++ b/core/modules/migrate/tests/src/Kernel/MigrateSqlSourceTestBase.php @@ -39,9 +39,7 @@ protected function getDatabase(array $source_data) { ->createTable($table, [ // SQLite uses loose affinity typing, so it's OK for every field to // be a text field. - 'fields' => array_map(function() { - return ['type' => 'text']; - }, $pilot), + 'fields' => array_map(function() { return ['type' => 'text']; }, $pilot), ]); $fields = array_keys($pilot); only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php +++ b/core/modules/migrate/tests/src/Kernel/MigrateTestBase.php @@ -230,9 +230,7 @@ protected function mockFailure($migration, array $row, $status = MigrateIdMapInt $migration = $this->getMigration($migration); } /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */ - $destination = array_map(function() { - return NULL; - }, $migration->getDestinationPlugin()->getIds()); + $destination = array_map(function() { return NULL; }, $migration->getDestinationPlugin()->getIds()); $row = new Row($row, $migration->getSourcePlugin()->getIds()); $migration->getIdMap()->saveIdMapping($row, $destination, $status); } only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginListTest.php +++ b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationPluginListTest.php @@ -89,9 +89,7 @@ public function testGetDefinitions() { // Any database-based source plugins should fail a requirements test in the // absence of a source database connection (e.g., a connection with the // 'migrate' key). - $source_plugins = array_map(function ($migration_plugin) { - return $migration_plugin->getSourcePlugin(); - }, $migration_plugins); + $source_plugins = array_map(function ($migration_plugin) { return $migration_plugin->getSourcePlugin(); }, $migration_plugins); foreach ($source_plugins as $id => $source_plugin) { if ($source_plugin instanceof RequirementsInterface) { try { only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php +++ b/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php @@ -4,6 +4,7 @@ use Drupal\KernelTests\KernelTestBase; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\MigrationInterface; /** @@ -65,7 +66,7 @@ public function testMultipleValueExplode(array $source_data, array $expected_dat $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); $result = $executable->import(); // Migration needs to succeed before further assertions are made. only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php +++ b/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php @@ -4,6 +4,7 @@ use Drupal\KernelTests\KernelTestBase; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\MigrationInterface; /** @@ -93,7 +94,7 @@ public function testScalarAndMultipleValues(array $source_data, array $expected_ $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); - $executable = new MigrateExecutable($migration); + $executable = new MigrateExecutable($migration, new MigrateMessage()); $result = $executable->import(); // Migration needs to succeed before further assertions are made. only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Unit/MigrateTestCase.php +++ b/core/modules/migrate/tests/src/Unit/MigrateTestCase.php @@ -147,9 +147,7 @@ protected function getDatabase(array $database_contents, $connection_options = [ protected function createSchemaFromRow(array $row) { // SQLite uses loose ("affinity") typing, so it is OK for every column to be // a text field. - $fields = array_map(function() { - return ['type' => 'text']; - }, $row); + $fields = array_map(function() { return ['type' => 'text']; }, $row); return ['fields' => $fields]; } only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php +++ b/core/modules/migrate/tests/src/Unit/Plugin/migrate/destination/EntityContentBaseTest.php @@ -113,7 +113,7 @@ public function testUntranslatable() { $this->storage->getEntityType()->willReturn($entity_type->reveal()); $destination = new EntityTestDestination( - ['translations' => TRUE ], + [ 'translations' => TRUE ], '', [], $this->migration->reveal(), only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Unit/process/DedupeEntityTest.php +++ b/core/modules/migrate/tests/src/Unit/process/DedupeEntityTest.php @@ -166,9 +166,7 @@ protected function entityQueryExpects($count) { ->will($this->returnValue($this->entityQuery)); $this->entityQuery->expects($this->exactly($count + 1)) ->method('execute') - ->will($this->returnCallback(function () use (&$count) { - return $count--; - })); + ->will($this->returnCallback(function () use (&$count) { return $count--;})); } /** only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Unit/process/GetTest.php +++ b/core/modules/migrate/tests/src/Unit/process/GetTest.php @@ -48,9 +48,7 @@ public function testTransformSourceArray() { $this->plugin->setSource(['test1', 'test2']); $this->row->expects($this->exactly(2)) ->method('getSourceProperty') - ->will($this->returnCallback(function ($argument) use ($map) { - return $map[$argument]; - })); + ->will($this->returnCallback(function ($argument) use ($map) { return $map[$argument]; } )); $value = $this->plugin->transform(NULL, $this->migrateExecutable, $this->row, 'destinationproperty'); $this->assertSame($value, ['source_value1', 'source_value2']); } @@ -81,9 +79,7 @@ public function testTransformSourceArrayAt() { $this->plugin->setSource(['test1', '@@test2', '@@test3', 'test4']); $this->row->expects($this->exactly(4)) ->method('getSourceProperty') - ->will($this->returnCallback(function ($argument) use ($map) { - return $map[$argument]; - })); + ->will($this->returnCallback(function ($argument) use ($map) { return $map[$argument]; } )); $value = $this->plugin->transform(NULL, $this->migrateExecutable, $this->row, 'destinationproperty'); $this->assertSame($value, ['source_value1', 'source_value2', 'source_value3', 'source_value4']); } only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Unit/process/MakeUniqueEntityFieldTest.php +++ b/core/modules/migrate/tests/src/Unit/process/MakeUniqueEntityFieldTest.php @@ -165,9 +165,7 @@ protected function entityQueryExpects($count) { ->will($this->returnValue($this->entityQuery)); $this->entityQuery->expects($this->exactly($count + 1)) ->method('execute') - ->will($this->returnCallback(function () use (&$count) { - return $count--; - })); + ->will($this->returnCallback(function () use (&$count) { return $count--;})); } /** only in patch2: unchanged: --- a/core/modules/migrate/tests/src/Unit/process/UrlEncodeTest.php +++ b/core/modules/migrate/tests/src/Unit/process/UrlEncodeTest.php @@ -4,6 +4,7 @@ use Drupal\migrate\Plugin\migrate\process\UrlEncode; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Row; use Drupal\Tests\migrate\Unit\MigrateTestCase; @@ -55,7 +56,7 @@ public function testUrls($input, $output) { * Encoded URL. */ protected function doTransform($value) { - $executable = new MigrateExecutable($this->getMigration()); + $executable = new MigrateExecutable($this->getMigration(), new MigrateMessage()); $row = new Row(); return (new UrlEncode([], 'urlencode', [])) only in patch2: unchanged: --- a/core/modules/migrate_drupal/migrate_drupal.module +++ b/core/modules/migrate_drupal/migrate_drupal.module @@ -9,6 +9,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\migrate\Exception\RequirementsException; use Drupal\migrate\MigrateExecutable; +use Drupal\migrate\MigrateMessage; use Drupal\migrate\Plugin\RequirementsInterface; /** @@ -48,7 +49,7 @@ function migrate_drupal_migration_plugins_alter(&$definitions) { if ($source_plugin instanceof RequirementsInterface) { $source_plugin->checkRequirements(); } - $executable = new MigrateExecutable($vocabulary_migration); + $executable = new MigrateExecutable($vocabulary_migration, new MigrateMessage()); $process = ['vid' => $definitions['d6_taxonomy_vocabulary']['process']['vid']]; foreach ($source_plugin as $row) { $executable->processRow($row, $process); only in patch2: unchanged: --- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php +++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManager.php @@ -14,4 +14,4 @@ * * @ingroup migration */ -class MigrateCckFieldPluginManager extends MigrateFieldPluginManager implements MigrateCckFieldPluginManagerInterface {} +class MigrateCckFieldPluginManager extends MigrateFieldPluginManager implements MigrateCckFieldPluginManagerInterface { } only in patch2: unchanged: --- a/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManagerInterface.php +++ b/core/modules/migrate_drupal/src/Plugin/MigrateCckFieldPluginManagerInterface.php @@ -12,4 +12,4 @@ * * @see https://www.drupal.org/node/2751897 */ -interface MigrateCckFieldPluginManagerInterface extends MigrateFieldPluginManagerInterface {} +interface MigrateCckFieldPluginManagerInterface extends MigrateFieldPluginManagerInterface { } only in patch2: unchanged: --- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php +++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php @@ -150,10 +150,10 @@ public function fields() { 'owner' => t("A theme's 'parent'. Can be either a theme or an engine."), 'status' => t('Boolean indicating whether or not this item is enabled.'), 'throttle' => t('Boolean indicating whether this item is disabled when the throttle.module disables throttleable items.'), - 'bootstrap' => t("Boolean indicating whether this module is loaded during Drupal's early bootstrapping phase (e.g. even before the page cache is consulted)."), - 'schema_version' => t("The module's database schema version number."), - 'weight' => t("The order in which this module's hooks should be invoked."), - 'info' => t("A serialized array containing information from the module's .info file."), + 'bootstrap' => t('Boolean indicating whether this module is loaded during Drupal\'s early bootstrapping phase (e.g. even before the page cache is consulted).'), + 'schema_version' => t('The module\'s database schema version number.'), + 'weight' => t('The order in which this module\'s hooks should be invoked.'), + 'info' => t('A serialized array containing information from the module\'s .info file.'), ]; } only in patch2: unchanged: --- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php +++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php @@ -142,26 +142,16 @@ public function buildOverviewForm(array $form, FormStateInterface $form_state) { } else { $form['info_header'] = [ - '#markup' => '

    ' . $this->t('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8. See the Drupal site upgrades handbook for more information.', [ + '#markup' => '

    ' . $this->t('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.', [ ':url' => 'https://www.drupal.org/upgrade/migrate', ]), ]; - $legend[] = $this->t('Old site: the site you want to upgrade.'); - $legend[] = $this->t('New site: this empty Drupal 8 installation you will import the old site to.'); - - $form['legend'] = [ - '#theme' => 'item_list', - '#title' => $this->t('Definitions'), - '#list_type' => 'ul', - '#items' => $legend, - ]; - - $info[] = $this->t('You may need multiple tries for a successful upgrade so backup the database for this new site. The upgrade will change it and you may want to revert to its initial state.'); - $info[] = $this->t('Make sure that access to the database for the old site is available from this new site.'); - $info[] = $this->t('If the old site has private files, a copy of its files directory must also be accessible on the host of this new site.'); - $info[] = $this->t('Enable all modules on this new site that are enabled on the old site. For example, if the old site uses the book module, then enable the book module on this new site so that the existing data can be imported to it.'); - $info[] = $this->t('Do not add any content to the new site before upgrading. Any existing content is likely to be overwritten by the upgrade process. See the upgrade preparation guide.', [ + $info[] = $this->t('Back up the database for this site. Upgrade will change the database for this site.'); + $info[] = $this->t('Make sure that the host this site is on has access to the database for your previous site.'); + $info[] = $this->t('If your previous site has private files to be migrated, a copy of your files directory must be accessible on the host this site is on.'); + $info[] = $this->t('In general, enable all modules on this site that are enabled on the previous site. For example, if you have used the book module on the previous site then you must enable the book module on this site for that data to be available on this site.'); + $info[] = $this->t('Do not add any information on this site (including but not limited to user accounts, taxonomy terms, and node content) before upgrading. Any pre-existing information on the site risks being overwritten by the upgrade process. See the upgrade preparation guide for more information.', [ ':url' => 'https://www.drupal.org/docs/8/upgrade/preparing-an-upgrade#dont_create_content', ]); $info[] = $this->t('Put this site into maintenance mode.', [ @@ -170,13 +160,12 @@ public function buildOverviewForm(array $form, FormStateInterface $form_state) { $form['info'] = [ '#theme' => 'item_list', - '#title' => $this->t('Steps to prepare for the upgrade'), '#list_type' => 'ol', '#items' => $info, ]; $form['info_footer'] = [ - '#markup' => '

    ' . $this->t('The upgrade can take a long time. It is better to upgrade from a local copy of your site instead of directly from your live site.'), + '#markup' => '

    ' . $this->t('This upgrade can take a long time. It is better to import a local copy of your site instead of directly importing from your live site.'), ]; $validate = []; only in patch2: unchanged: --- a/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php +++ b/core/modules/migrate_drupal_ui/src/Tests/MigrateUpgradeTestBase.php @@ -119,7 +119,7 @@ protected function tearDown() { public function testMigrateUpgrade() { $connection_options = $this->sourceDatabase->getConnectionOptions(); $this->drupalGet('/upgrade'); - $this->assertText('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.'); + $this->assertText('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.'); $this->drupalPostForm(NULL, [], t('Continue')); $this->assertText('Provide credentials for the database of the Drupal site you want to upgrade.'); @@ -160,7 +160,7 @@ public function testMigrateUpgrade() { // Restart the upgrade process. $this->drupalGet('/upgrade'); - $this->assertText('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.'); + $this->assertText('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.'); $this->drupalPostForm(NULL, [], t('Continue')); $this->assertText('Provide credentials for the database of the Drupal site you want to upgrade.'); only in patch2: unchanged: --- a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php +++ b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeTestBase.php @@ -114,7 +114,7 @@ protected function tearDown() { public function testMigrateUpgrade() { $connection_options = $this->sourceDatabase->getConnectionOptions(); $this->drupalGet('/upgrade'); - $this->assertSession()->responseContains('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.'); + $this->assertText('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.'); $this->drupalPostForm(NULL, [], t('Continue')); $this->assertText('Provide credentials for the database of the Drupal site you want to upgrade.'); @@ -158,7 +158,7 @@ public function testMigrateUpgrade() { // Restart the upgrade process. $this->drupalGet('/upgrade'); - $this->assertSession()->responseContains('Upgrade a site by importing its database and files into a clean and empty new install of Drupal 8.'); + $this->assertSession()->pageTextContains('Upgrade a site by importing it into a clean and empty new install of Drupal 8. You will lose any existing configuration once you import your site into it. See the online documentation for Drupal site upgrades for more detailed information.'); $this->drupalPostForm(NULL, [], t('Continue')); $this->assertSession()->pageTextContains('Provide credentials for the database of the Drupal site you want to upgrade.'); only in patch2: unchanged: --- a/core/modules/node/config/optional/views.view.frontpage.yml +++ b/core/modules/node/config/optional/views.view.frontpage.yml @@ -28,7 +28,7 @@ display: empty: area_text_custom: admin_label: '' - content: 'No front page content has been created yet.
    Follow the User Guide to start building your site.' + content: 'No front page content has been created yet.' empty: true field: area_text_custom group_type: group only in patch2: unchanged: --- a/core/modules/node/src/Entity/NodeRouteProvider.php +++ b/core/modules/node/src/Entity/NodeRouteProvider.php @@ -15,7 +15,7 @@ class NodeRouteProvider implements EntityRouteProviderInterface { /** * {@inheritdoc} */ - public function getRoutes(EntityTypeInterface $entity_type) { + public function getRoutes( EntityTypeInterface $entity_type) { $route_collection = new RouteCollection(); $route = (new Route('/node/{node}')) ->addDefaults([ only in patch2: unchanged: --- a/core/modules/node/src/NodeForm.php +++ b/core/modules/node/src/NodeForm.php @@ -142,6 +142,13 @@ public function form(array $form, FormStateInterface $form_state) { '#wrapper_attributes' => ['class' => ['entity-meta__author']], ]; + $form['footer'] = [ + '#type' => 'container', + '#weight' => 99, + '#attributes' => [ + 'class' => ['node-form-footer'] + ] + ]; $form['status']['#group'] = 'footer'; // Node author information for administrators. only in patch2: unchanged: --- a/core/modules/node/src/NodeViewBuilder.php +++ b/core/modules/node/src/NodeViewBuilder.php @@ -29,14 +29,12 @@ public function buildComponents(array &$build, array $entities, array $displays, if ($display->getComponent('links')) { $build[$id]['links'] = [ - '#lazy_builder' => [ - get_called_class() . '::renderLinks', [ - $entity->id(), - $view_mode, - $entity->language()->getId(), - !empty($entity->in_preview), - ], - ], + '#lazy_builder' => [get_called_class() . '::renderLinks', [ + $entity->id(), + $view_mode, + $entity->language()->getId(), + !empty($entity->in_preview), + ]], ]; } only in patch2: unchanged: --- a/core/modules/node/src/Plugin/views/filter/Access.php +++ b/core/modules/node/src/Plugin/views/filter/Access.php @@ -15,8 +15,8 @@ */ class Access extends FilterPluginBase { - public function adminSummary() {} - protected function operatorForm(&$form, FormStateInterface $form_state) {} + public function adminSummary() { } + protected function operatorForm(&$form, FormStateInterface $form_state) { } public function canExpose() { return FALSE; } only in patch2: unchanged: --- a/core/modules/node/src/Plugin/views/filter/Status.php +++ b/core/modules/node/src/Plugin/views/filter/Status.php @@ -14,13 +14,11 @@ */ class Status extends FilterPluginBase { - public function adminSummary() {} + public function adminSummary() { } - protected function operatorForm(&$form, FormStateInterface $form_state) {} + protected function operatorForm(&$form, FormStateInterface $form_state) { } - public function canExpose() { - return FALSE; - } + public function canExpose() { return FALSE; } public function query() { $table = $this->ensureMyTable(); only in patch2: unchanged: --- a/core/modules/node/src/Plugin/views/wizard/Node.php +++ b/core/modules/node/src/Plugin/views/wizard/Node.php @@ -26,6 +26,20 @@ class Node extends WizardPluginBase { protected $createdColumn = 'node_field_data-created'; /** + * Set default values for the filters. + */ + protected $filters = [ + 'status' => [ + 'value' => TRUE, + 'table' => 'node_field_data', + 'field' => 'status', + 'plugin_id' => 'boolean', + 'entity_type' => 'node', + 'entity_field' => 'status', + ] + ]; + + /** * Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::getAvailableSorts(). * * @return array only in patch2: unchanged: --- a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php +++ b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php @@ -25,6 +25,20 @@ class NodeRevision extends WizardPluginBase { protected $createdColumn = 'changed'; /** + * Set default values for the filters. + */ + protected $filters = [ + 'status' => [ + 'value' => TRUE, + 'table' => 'node_field_revision', + 'field' => 'status', + 'plugin_id' => 'boolean', + 'entity_type' => 'node', + 'entity_field' => 'status', + ] + ]; + + /** * Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::rowStyleOptions(). * * Node revisions do not support full posts or teasers, so remove them. only in patch2: unchanged: --- a/core/modules/node/src/Tests/NodeRevisionsTest.php +++ b/core/modules/node/src/Tests/NodeRevisionsTest.php @@ -168,11 +168,9 @@ public function testRevisions() { // Confirm that revisions revert properly. $this->drupalPostForm("node/" . $node->id() . "/revisions/" . $nodes[1]->getRevisionid() . "/revert", [], t('Revert')); - $this->assertRaw(t('@type %title has been reverted to the revision from %revision-date.', [ - '@type' => 'Basic page', - '%title' => $nodes[1]->label(), - '%revision-date' => format_date($nodes[1]->getRevisionCreationTime()) - ]), 'Revision reverted.'); + $this->assertRaw(t('@type %title has been reverted to the revision from %revision-date.', + ['@type' => 'Basic page', '%title' => $nodes[1]->label(), + '%revision-date' => format_date($nodes[1]->getRevisionCreationTime())]), 'Revision reverted.'); $node_storage->resetCache([$node->id()]); $reverted_node = $node_storage->load($node->id()); $this->assertTrue(($nodes[1]->body->value == $reverted_node->body->value), 'Node reverted correctly.'); @@ -193,11 +191,9 @@ public function testRevisions() { // Confirm revisions delete properly. $this->drupalPostForm("node/" . $node->id() . "/revisions/" . $nodes[1]->getRevisionId() . "/delete", [], t('Delete')); - $this->assertRaw(t('Revision from %revision-date of @type %title has been deleted.', [ - '%revision-date' => format_date($nodes[1]->getRevisionCreationTime()), - '@type' => 'Basic page', - '%title' => $nodes[1]->label(), - ]), 'Revision deleted.'); + $this->assertRaw(t('Revision from %revision-date of @type %title has been deleted.', + ['%revision-date' => format_date($nodes[1]->getRevisionCreationTime()), + '@type' => 'Basic page', '%title' => $nodes[1]->label()]), 'Revision deleted.'); $this->assertTrue(db_query('SELECT COUNT(vid) FROM {node_revision} WHERE nid = :nid and vid = :vid', [':nid' => $node->id(), ':vid' => $nodes[1]->getRevisionId()])->fetchField() == 0, 'Revision not found.'); $this->assertTrue(db_query('SELECT COUNT(vid) FROM {node_field_revision} WHERE nid = :nid and vid = :vid', [':nid' => $node->id(), ':vid' => $nodes[1]->getRevisionId()])->fetchField() == 0, 'Field revision not found.'); only in patch2: unchanged: --- a/core/modules/node/tests/modules/node_test/node_test.module +++ b/core/modules/node/tests/modules/node_test/node_test.module @@ -156,7 +156,7 @@ function node_test_node_update(NodeInterface $node) { */ function node_test_entity_view_mode_alter(&$view_mode, EntityInterface $entity, $context) { // Only alter the view mode if we are on the test callback. - $change_view_mode = \Drupal::state()->get('node_test_change_view_mode') ?: ''; + $change_view_mode = \Drupal::state()->get( 'node_test_change_view_mode') ?: ''; if ($change_view_mode) { $view_mode = $change_view_mode; } only in patch2: unchanged: --- a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php +++ b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php @@ -114,7 +114,7 @@ public function testNodeAccessBasic() { $this->drupalPostForm('node/add/article', $edit, t('Save')); $node = $this->drupalGetNodeByTitle($edit['title[0][value]']); - $this->assertEqual($is_private, (int) $node->private->value, 'The private status of the node was properly set in the node_access_test table.'); + $this->assertEqual($is_private, (int)$node->private->value, 'The private status of the node was properly set in the node_access_test table.'); if ($is_private) { $private_nodes[] = $node->id(); } only in patch2: unchanged: --- a/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php +++ b/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php @@ -67,9 +67,9 @@ public function testNodeEditAccess() { // Create a private node (author may view, edit and delete, others may not). $node = $this->drupalCreateNode([ 'type' => 'article', - 'private' => [ - ['value' => TRUE], - ], + 'private' => [[ + 'value' => TRUE, + ]], 'uid' => $author->id(), ]); // Create an account that may view the private node, but not edit it. @@ -134,9 +134,9 @@ public function testNodeDeleteAccess() { // Create a private node (author may view, edit and delete, others may not). $private_node = $this->drupalCreateNode([ 'type' => 'article', - 'private' => [ - ['value' => TRUE], - ], + 'private' => [[ + 'value' => TRUE, + ]], 'uid' => $author->id(), ]); // Create an account that may view the private node, but not delete it. @@ -146,9 +146,9 @@ public function testNodeDeleteAccess() { // deleted by the author. $own_node = $this->drupalCreateNode([ 'type' => 'article', - 'private' => [ - ['value' => TRUE], - ], + 'private' => [[ + 'value' => TRUE, + ]], 'uid' => $account->id(), ]); $this->drupalLogin($account); only in patch2: unchanged: --- a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php +++ b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php @@ -54,12 +54,10 @@ protected function setUp($import_test_views = TRUE) { $this->drupalLogin($web_user); foreach ([0 => 'Public', 1 => 'Private'] as $is_private => $type) { $settings = [ - 'body' => [ - [ - 'value' => $type . ' node', - 'format' => filter_default_format(), - ], - ], + 'body' => [[ + 'value' => $type . ' node', + 'format' => filter_default_format(), + ]], 'title' => t('@private_public Article created by @user', ['@private_public' => $type, '@user' => $web_user->getUsername()]), 'type' => 'article', 'uid' => $web_user->id(), only in patch2: unchanged: --- a/core/modules/node/tests/src/Functional/Views/NodeRevisionWizardTest.php +++ b/core/modules/node/tests/src/Functional/Views/NodeRevisionWizardTest.php @@ -45,19 +45,16 @@ public function testViewAdd() { $view['show[wizard_key]'] = 'node_revision'; $this->drupalPostForm('admin/structure/views/add', $view, t('Save and edit')); - $view = Views::getView($view['id']); - $view->initHandlers(); + $view_storage_controller = \Drupal::entityManager()->getStorage('view'); + /** @var \Drupal\views\Entity\View $view */ + $view = $view_storage_controller->load($view['id']); - $this->assertEqual($view->getBaseTables(), ['node_field_revision' => TRUE, '#global' => TRUE]); + $this->assertEqual($view->get('base_table'), 'node_field_revision'); - // Check for the default filters. - $this->assertEqual($view->filter['status']->table, 'node_field_revision'); - $this->assertEqual($view->filter['status']->field, 'status'); - $this->assertTrue($view->filter['status']->value); + $executable = Views::executableFactory()->get($view); + $this->executeView($executable); - $this->executeView($view); - - $this->assertIdenticalResultset($view, [['vid' => 1], ['vid' => 3], ['vid' => 2], ['vid' => 4]], + $this->assertIdenticalResultset($executable, [['vid' => 1], ['vid' => 3], ['vid' => 2], ['vid' => 4]], ['vid' => 'vid']); } only in patch2: unchanged: --- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php +++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php @@ -2,7 +2,6 @@ namespace Drupal\Tests\node\Kernel\Migrate\d7; -use Drupal\Tests\file\Kernel\Migrate\d7\FileMigrationSetupTrait; use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase; use Drupal\node\Entity\Node; use Drupal\node\NodeInterface; @@ -14,8 +13,6 @@ */ class MigrateNodeTest extends MigrateDrupal7TestBase { - use FileMigrationSetupTrait; - /** * {@inheritdoc} */ @@ -23,7 +20,6 @@ class MigrateNodeTest extends MigrateDrupal7TestBase { 'content_translation', 'comment', 'datetime', - 'file', 'filter', 'image', 'language', @@ -41,11 +37,10 @@ class MigrateNodeTest extends MigrateDrupal7TestBase { protected function setUp() { parent::setUp(); - $this->fileMigrationSetup(); - $this->installEntitySchema('node'); $this->installEntitySchema('comment'); $this->installEntitySchema('taxonomy_term'); + $this->installEntitySchema('file'); $this->installConfig(static::$modules); $this->installSchema('node', ['node_access']); $this->installSchema('system', ['sequences']); only in patch2: unchanged: --- a/core/modules/node/tests/src/Traits/NodeCreationTrait.php +++ b/core/modules/node/tests/src/Traits/NodeCreationTrait.php @@ -67,12 +67,10 @@ public function getNodeByTitle($title, $reset = FALSE) { protected function createNode(array $settings = []) { // Populate defaults array. $settings += [ - 'body' => [ - [ - 'value' => $this->randomMachineName(32), - 'format' => filter_default_format(), - ], - ], + 'body' => [[ + 'value' => $this->randomMachineName(32), + 'format' => filter_default_format(), + ]], 'title' => $this->randomMachineName(8), 'type' => 'page', 'uid' => \Drupal::currentUser()->id(), only in patch2: unchanged: --- a/core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php +++ b/core/modules/options/src/Plugin/Field/FieldType/ListItemBase.php @@ -222,7 +222,7 @@ protected static function extractAllowedValues($string, $has_data) { * @return string * The error message if the specified value is invalid, NULL otherwise. */ - protected static function validateAllowedValue($option) {} + protected static function validateAllowedValue($option) { } /** * Generates a string representation of an array of 'allowed values'. only in patch2: unchanged: --- a/core/modules/options/tests/src/Functional/OptionsFieldUITest.php +++ b/core/modules/options/tests/src/Functional/OptionsFieldUITest.php @@ -94,7 +94,7 @@ public function testOptionsAllowedValuesInteger() { $node = $this->drupalCreateNode($settings); // Check that a flat list of values is rejected once the field has data. - $this->assertAllowedValuesInput("Zero\nOne", 'invalid input', 'Unkeyed lists are rejected once the field has data.'); + $this->assertAllowedValuesInput( "Zero\nOne", 'invalid input', 'Unkeyed lists are rejected once the field has data.'); // Check that values can be added but values in use cannot be removed. $string = "0|Zero\n1|One\n2|Two"; only in patch2: unchanged: --- a/core/modules/page_cache/src/StackMiddleware/PageCache.php +++ b/core/modules/page_cache/src/StackMiddleware/PageCache.php @@ -144,7 +144,7 @@ protected function lookup(Request $request, $type = self::MASTER_REQUEST, $catch if ($if_modified_since && $if_none_match && $if_none_match == $response->getEtag() // etag must match - && $if_modified_since == $last_modified->getTimestamp()) {// if-modified-since must match + && $if_modified_since == $last_modified->getTimestamp()) { // if-modified-since must match $response->setStatusCode(304); $response->setContent(NULL); only in patch2: unchanged: --- a/core/modules/page_cache/tests/modules/src/Form/TestForm.php +++ b/core/modules/page_cache/tests/modules/src/Form/TestForm.php @@ -25,6 +25,6 @@ public function buildForm(array $form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function submitForm(array &$form, FormStateInterface $form_state) {} + public function submitForm(array &$form, FormStateInterface $form_state) { } } only in patch2: unchanged: --- a/core/modules/path/src/Plugin/Field/FieldType/PathItem.php +++ b/core/modules/path/src/Plugin/Field/FieldType/PathItem.php @@ -114,14 +114,6 @@ public function set($property_name, $value, $notify = TRUE) { /** * {@inheritdoc} */ - public function get($property_name) { - $this->ensureLoaded(); - return parent::get($property_name); - } - - /** - * {@inheritdoc} - */ public function postSave($update) { if (!$update) { if ($this->alias) { only in patch2: unchanged: --- a/core/modules/path/tests/src/Kernel/PathItemTest.php +++ b/core/modules/path/tests/src/Kernel/PathItemTest.php @@ -70,9 +70,6 @@ public function testPathItem() { $loaded_node = $node_storage->load($node->id()); $this->assertFalse($loaded_node->get('path')->isEmpty()); $this->assertEquals('/foo', $loaded_node->get('path')->alias); - $node_storage->resetCache(); - $loaded_node = $node_storage->load($node->id()); - $this->assertEquals('/foo', $loaded_node->get('path')[0]->get('alias')->getValue()); $node_storage->resetCache(); $loaded_node = $node_storage->load($node->id()); only in patch2: unchanged: --- a/core/modules/responsive_image/responsive_image.module +++ b/core/modules/responsive_image/responsive_image.module @@ -40,7 +40,7 @@ function responsive_image_help($route_name, RouteMatchInterface $route_match) { case 'help.page.responsive_image': $output = ''; $output .= '

    ' . t('About') . '

    '; - $output .= '

    ' . t('The Responsive Image module provides an image formatter that allows browsers to select which image file to display based on media queries or which image file types the browser supports, using the HTML 5 picture and source elements and/or the sizes, srcset and type attributes. For more information, see the online documentation for the Responsive Image module.', [':responsive_image' => 'https://www.drupal.org/documentation/modules/responsive_image']) . '

    '; + $output .= '

    ' . t('The Responsive Image module provides an image formatter that allows browsers to select which image file to display based on media queries or which image file types the browser supports, using the HTML 5 picture and source elements and/or the sizes, srcset and type attributes. For more information, see the online documentation for the Responsive Image module.', [ ':responsive_image' => 'https://www.drupal.org/documentation/modules/responsive_image']) . '

    '; $output .= '

    ' . t('Uses') . '

    '; $output .= '
    '; $output .= '
    ' . t('Defining responsive image styles') . '
    '; only in patch2: unchanged: --- a/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php +++ b/core/modules/rest/src/EventSubscriber/ResourceResponseSubscriber.php @@ -79,7 +79,7 @@ public function onResponse(FilterResponseEvent $event) { * Determines the format to respond in. * * Respects the requested format if one is specified. However, it is common to - * forget to specify a response format in case of a POST or PATCH. Rather than + * forget to specify a request format in case of a POST or PATCH. Rather than * simply throwing an error, we apply the robustness principle: when POSTing * or PATCHing using a certain format, you probably expect a response in that * same format. @@ -94,35 +94,33 @@ public function onResponse(FilterResponseEvent $event) { */ public function getResponseFormat(RouteMatchInterface $route_match, Request $request) { $route = $route_match->getRouteObject(); - $acceptable_response_formats = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : []; - $acceptable_request_formats = $route->hasRequirement('_content_type_format') ? explode('|', $route->getRequirement('_content_type_format')) : []; - $acceptable_formats = $request->isMethodCacheable() ? $acceptable_response_formats : $acceptable_request_formats; + $acceptable_request_formats = $route->hasRequirement('_format') ? explode('|', $route->getRequirement('_format')) : []; + $acceptable_content_type_formats = $route->hasRequirement('_content_type_format') ? explode('|', $route->getRequirement('_content_type_format')) : []; + $acceptable_formats = $request->isMethodCacheable() ? $acceptable_request_formats : $acceptable_content_type_formats; $requested_format = $request->getRequestFormat(); $content_type_format = $request->getContentType(); - // If an acceptable response format is requested, then use that. Otherwise, - // including and particularly when the client forgot to specify a response - // format, then use heuristics to select the format that is most likely - // expected. - if (in_array($requested_format, $acceptable_response_formats, TRUE)) { + // If an acceptable format is requested, then use that. Otherwise, including + // and particularly when the client forgot to specify a format, then use + // heuristics to select the format that is most likely expected. + if (in_array($requested_format, $acceptable_formats)) { return $requested_format; } - // If a request body is present, then use the format corresponding to the // request body's Content-Type for the response, if it's an acceptable // format for the request. - if (!empty($request->getContent()) && in_array($content_type_format, $acceptable_request_formats, TRUE)) { + elseif (!empty($request->getContent()) && in_array($content_type_format, $acceptable_content_type_formats)) { return $content_type_format; } - // Otherwise, use the first acceptable format. - if (!empty($acceptable_formats)) { + elseif (!empty($acceptable_formats)) { return $acceptable_formats[0]; } - // Sometimes, there are no acceptable formats, e.g. DELETE routes. - return NULL; + else { + return NULL; + } } /** only in patch2: unchanged: --- a/core/modules/rest/src/Tests/RESTTestBase.php +++ b/core/modules/rest/src/Tests/RESTTestBase.php @@ -306,12 +306,10 @@ protected function entityValues($entity_type_id) { return [ 'name' => $this->randomMachineName(), 'user_id' => 1, - 'field_test_text' => [ - 0 => [ - 'value' => $this->randomString(), - 'format' => 'plain_text', - ], - ], + 'field_test_text' => [0 => [ + 'value' => $this->randomString(), + 'format' => 'plain_text', + ]], ]; case 'config_test': return [ only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/CookieResourceTestTrait.php +++ b/core/modules/rest/tests/src/Functional/CookieResourceTestTrait.php @@ -71,7 +71,7 @@ protected function initAuthentication() { $this->sessionCookie = explode(';', $response->getHeader('Set-Cookie')[0], 2)[0]; // Parse and store the CSRF token and logout token. - $data = $this->serializer->decode((string) $response->getBody(), static::$format); + $data = $this->serializer->decode((string)$response->getBody(), static::$format); $this->csrfToken = $data['csrf_token']; $this->logoutToken = $data['logout_token']; } only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/EntityResource/BlockContent/BlockContentJsonAnonTest.php +++ /dev/null @@ -1,24 +0,0 @@ -grantPermissionsToTestedRole(['administer blocks']); - } - - /** - * {@inheritdoc} - */ - protected function createEntity() { - if (!BlockContentType::load('basic')) { - $block_content_type = BlockContentType::create([ - 'id' => 'basic', - 'label' => 'basic', - 'revision' => TRUE, - ]); - $block_content_type->save(); - block_content_add_body_field($block_content_type->id()); - } - - // Create a "Llama" custom block. - $block_content = BlockContent::create([ - 'info' => 'Llama', - 'type' => 'basic', - 'body' => [ - 'value' => 'The name "llama" was adopted by European settlers from native Peruvians.', - 'format' => 'plain_text', - ], - ]) - ->setPublished(FALSE); - $block_content->save(); - return $block_content; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedNormalizedEntity() { - return [ - 'id' => [ - [ - 'value' => 1, - ], - ], - 'uuid' => [ - [ - 'value' => $this->entity->uuid(), - ], - ], - 'langcode' => [ - [ - 'value' => 'en', - ], - ], - 'type' => [ - [ - 'target_id' => 'basic', - 'target_type' => 'block_content_type', - 'target_uuid' => BlockContentType::load('basic')->uuid(), - ], - ], - 'info' => [ - [ - 'value' => 'Llama', - ], - ], - 'revision_log' => [], - 'changed' => [ - $this->formatExpectedTimestampItemValues($this->entity->getChangedTime()), - ], - 'revision_id' => [ - [ - 'value' => 1, - ], - ], - 'revision_created' => [ - $this->formatExpectedTimestampItemValues((int) $this->entity->getRevisionCreationTime()), - ], - 'revision_user' => [], - 'revision_translation_affected' => [ - [ - 'value' => TRUE, - ], - ], - 'default_langcode' => [ - [ - 'value' => TRUE, - ], - ], - 'body' => [ - [ - 'value' => 'The name "llama" was adopted by European settlers from native Peruvians.', - 'format' => 'plain_text', - 'summary' => NULL, - ], - ], - 'status' => [ - [ - 'value' => FALSE, - ], - ], - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - return [ - 'type' => [ - [ - 'target_id' => 'basic', - ], - ], - 'info' => [ - [ - 'value' => 'Dramallama', - ], - ], - ]; - } - - - /** - * {@inheritdoc} - */ - protected function getExpectedUnauthorizedAccessMessage($method) { - if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) { - return parent::getExpectedUnauthorizedAccessMessage($method); - } - - return parent::getExpectedUnauthorizedAccessMessage($method); - } - -} only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/EntityResource/ContactForm/ContactFormJsonAnonTest.php +++ /dev/null @@ -1,24 +0,0 @@ -grantPermissionsToTestedRole(['access site-wide contact form']); - default: - $this->grantPermissionsToTestedRole(['administer contact forms']); - } - } - - /** - * {@inheritdoc} - */ - protected function createEntity() { - $contact_form = ContactForm::create([ - 'id' => 'llama', - 'label' => 'Llama', - 'message' => 'Let us know what you think about llamas', - 'reply' => 'Llamas are indeed awesome!', - 'recipients' => [ - 'llama@example.com', - 'contact@example.com', - ], - ]); - $contact_form->save(); - - return $contact_form; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedNormalizedEntity() { - return [ - 'dependencies' => [], - 'id' => 'llama', - 'label' => 'Llama', - 'langcode' => 'en', - 'message' => 'Let us know what you think about llamas', - 'recipients' => [ - 'llama@example.com', - 'contact@example.com', - ], - 'redirect' => NULL, - 'reply' => 'Llamas are indeed awesome!', - 'status' => TRUE, - 'uuid' => $this->entity->uuid(), - 'weight' => 0, - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - // @todo Update in https://www.drupal.org/node/2300677. - } - - /** - * {@inheritdoc} - */ - protected function getExpectedUnauthorizedAccessMessage($method) { - if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) { - return parent::getExpectedUnauthorizedAccessMessage($method); - } - - return "The 'access site-wide contact form' permission is required."; - } - -} only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php +++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php @@ -1274,10 +1274,7 @@ protected function assertNormalizationEdgeCases($method, Url $url, array $reques */ protected function getEntityResourceUrl() { $has_canonical_url = $this->entity->hasLinkTemplate('canonical'); - // Note that the 'canonical' link relation type must be specified explicitly - // in the call to ::toUrl(). 'canonical' is the default for - // \Drupal\Core\Entity\Entity::toUrl(), but ConfigEntityBase overrides this. - return $has_canonical_url ? $this->entity->toUrl('canonical') : Url::fromUri('base:entity/' . static::$entityTypeId . '/' . $this->entity->id()); + return $has_canonical_url ? $this->entity->toUrl() : Url::fromUri('base:entity/' . static::$entityTypeId . '/' . $this->entity->id()); } /** only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/EntityResource/EntityTestBundle/EntityTestBundleJsonAnonTest.php +++ /dev/null @@ -1,24 +0,0 @@ -grantPermissionsToTestedRole(['administer entity_test_bundle content']); - } - - /** - * {@inheritdoc} - */ - protected function createEntity() { - $entity_test_bundle = EntityTestBundle::create([ - 'id' => 'camelids', - 'label' => 'Camelids', - 'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.', - ]); - $entity_test_bundle->save(); - - return $entity_test_bundle; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedNormalizedEntity() { - return [ - 'dependencies' => [], - 'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.', - 'id' => 'camelids', - 'label' => 'Camelids', - 'langcode' => 'en', - 'status' => TRUE, - 'uuid' => $this->entity->uuid(), - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - // @todo Update in https://www.drupal.org/node/2300677. - } - -} only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/EntityResource/Media/MediaJsonAnonTest.php +++ /dev/null @@ -1,24 +0,0 @@ -grantPermissionsToTestedRole(['view media']); - break; - - case 'POST': - $this->grantPermissionsToTestedRole(['create media']); - break; - - case 'PATCH': - $this->grantPermissionsToTestedRole(['update any media']); - break; - - case 'DELETE': - $this->grantPermissionsToTestedRole(['delete any media']); - break; - } - } - - /** - * {@inheritdoc} - */ - protected function createEntity() { - if (!MediaType::load('camelids')) { - // Create a "Camelids" media type. - $media_type = MediaType::create([ - 'name' => 'Camelids', - 'id' => 'camelids', - 'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.', - 'source' => 'file', - ]); - $media_type->save(); - // Create the source field. - $source_field = $media_type->getSource()->createSourceField($media_type); - $source_field->getFieldStorageDefinition()->save(); - $source_field->save(); - $media_type - ->set('source_configuration', [ - 'source_field' => $source_field->getName(), - ]) - ->save(); - } - - // Create a file to upload. - $file = File::create([ - 'uri' => 'public://llama.txt', - ]); - $file->setPermanent(); - $file->save(); - - // Create a "Llama" media item. - $media = Media::create([ - 'bundle' => 'camelids', - 'field_media_file_1' => [ - 'target_id' => $file->id(), - ], - ]); - $media - ->setName('Llama') - ->setPublished(TRUE) - ->setCreatedTime(123456789) - ->setOwnerId(static::$auth ? $this->account->id() : 0) - ->setRevisionUserId(static::$auth ? $this->account->id() : 0) - ->save(); - - return $media; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedNormalizedEntity() { - $file = File::load(1); - $thumbnail = File::load(2); - $author = User::load($this->entity->getOwnerId()); - return [ - 'mid' => [ - [ - 'value' => 1, - ], - ], - 'uuid' => [ - [ - 'value' => $this->entity->uuid(), - ], - ], - 'vid' => [ - [ - 'value' => 1, - ], - ], - 'langcode' => [ - [ - 'value' => 'en', - ], - ], - 'bundle' => [ - [ - 'target_id' => 'camelids', - 'target_type' => 'media_type', - 'target_uuid' => MediaType::load('camelids')->uuid(), - ], - ], - 'name' => [ - [ - 'value' => 'Llama', - ], - ], - 'field_media_file_1' => [ - [ - 'description' => NULL, - 'display' => NULL, - 'target_id' => (int) $file->id(), - 'target_type' => 'file', - 'target_uuid' => $file->uuid(), - 'url' => $file->url(), - ], - ], - 'thumbnail' => [ - [ - 'alt' => 'Thumbnail', - 'width' => 180, - 'height' => 180, - 'target_id' => (int) $thumbnail->id(), - 'target_type' => 'file', - 'target_uuid' => $thumbnail->uuid(), - 'title' => 'Llama', - 'url' => $thumbnail->url(), - ], - ], - 'status' => [ - [ - 'value' => TRUE, - ], - ], - 'created' => [ - $this->formatExpectedTimestampItemValues(123456789), - ], - 'changed' => [ - $this->formatExpectedTimestampItemValues($this->entity->getChangedTime()), - ], - 'revision_created' => [ - $this->formatExpectedTimestampItemValues((int) $this->entity->getRevisionCreationTime()), - ], - 'default_langcode' => [ - [ - 'value' => TRUE, - ], - ], - 'uid' => [ - [ - 'target_id' => (int) $author->id(), - 'target_type' => 'user', - 'target_uuid' => $author->uuid(), - 'url' => base_path() . 'user/' . $author->id(), - ], - ], - 'revision_user' => [ - [ - 'target_id' => (int) $author->id(), - 'target_type' => 'user', - 'target_uuid' => $author->uuid(), - 'url' => base_path() . 'user/' . $author->id(), - ], - ], - 'revision_log_message' => [], - 'revision_translation_affected' => [ - [ - 'value' => TRUE, - ], - ], - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - return [ - 'bundle' => [ - [ - 'target_id' => 'camelids', - ], - ], - 'name' => [ - [ - 'value' => 'Dramallama', - ], - ], - ]; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedUnauthorizedAccessMessage($method) { - if ($this->config('rest.settings')->get('bc_entity_resource_permissions')) { - return parent::getExpectedUnauthorizedAccessMessage($method); - } - - switch ($method) { - case 'GET'; - return "The 'view media' permission is required and the media item must be published."; - - case 'PATCH': - return 'You are not authorized to update this media entity of bundle camelids.'; - - case 'DELETE': - return 'You are not authorized to delete this media entity of bundle camelids.'; - - default: - return parent::getExpectedUnauthorizedAccessMessage($method); - } - } - - /** - * {@inheritdoc} - */ - public function testPost() { - $this->markTestSkipped('POSTing File Media items is not supported until https://www.drupal.org/node/1927648 is solved.'); - } - -} only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/EntityResource/MediaType/MediaTypeJsonAnonTest.php +++ /dev/null @@ -1,24 +0,0 @@ -grantPermissionsToTestedRole(['administer media types']); - } - - /** - * {@inheritdoc} - */ - protected function createEntity() { - // Create a "Camelids" media type. - $camelids = MediaType::create([ - 'name' => 'Camelids', - 'id' => 'camelids', - 'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.', - 'source' => 'file', - ]); - - $camelids->save(); - - return $camelids; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedNormalizedEntity() { - return [ - 'dependencies' => [], - 'description' => 'Camelids are large, strictly herbivorous animals with slender necks and long legs.', - 'field_map' => [], - 'id' => 'camelids', - 'label' => NULL, - 'langcode' => 'en', - 'new_revision' => FALSE, - 'queue_thumbnail_downloads' => FALSE, - 'source' => 'file', - 'source_configuration' => [ - 'source_field' => '', - ], - 'status' => TRUE, - 'uuid' => $this->entity->uuid(), - ]; - } - - /** - * {@inheritdoc} - */ - protected function getNormalizedPostEntity() { - // @todo Update in https://www.drupal.org/node/2300677. - } - -} only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/ResourceTest.php +++ b/core/modules/rest/tests/src/Functional/ResourceTest.php @@ -41,12 +41,10 @@ protected function setUp() { $this->entity = EntityTest::create([ 'name' => $this->randomMachineName(), 'user_id' => 1, - 'field_test_text' => [ - 0 => [ - 'value' => $this->randomString(), - 'format' => 'plain_text', - ], - ], + 'field_test_text' => [0 => [ + 'value' => $this->randomString(), + 'format' => 'plain_text', + ]], ]); $this->entity->save(); only in patch2: unchanged: --- a/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php +++ b/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php @@ -667,9 +667,7 @@ public function testFieldapiField() { $result = Json::decode($this->drupalGet('test/serialize/node-field', ['query' => ['_format' => 'json']])); $this->assertEqual(count($result[2]['body']), $node->body->count(), 'Expected count of values'); - $this->assertEqual($result[2]['body'], array_map(function($item) { - return $item['value']; - }, $node->body->getValue()), 'Expected raw body values found.'); + $this->assertEqual($result[2]['body'], array_map(function($item) { return $item['value']; }, $node->body->getValue()), 'Expected raw body values found.'); } /** only in patch2: unchanged: --- a/core/modules/rest/tests/src/Kernel/Entity/ConfigDependenciesTest.php +++ b/core/modules/rest/tests/src/Kernel/Entity/ConfigDependenciesTest.php @@ -30,9 +30,9 @@ public function testCalculateDependencies(array $configuration) { $rest_config = RestResourceConfig::create($configuration); $result = $config_dependencies->calculateDependencies($rest_config); - $this->assertEquals([ - 'module' => ['basic_auth', 'serialization', 'hal'], - ], $result); + $this->assertEquals(['module' => [ + 'basic_auth', 'serialization', 'hal', + ]], $result); } /** only in patch2: unchanged: --- a/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php +++ b/core/modules/rest/tests/src/Unit/EventSubscriber/ResourceResponseSubscriberTest.php @@ -78,7 +78,7 @@ public function providerTestSerialization() { * * @dataProvider providerTestResponseFormat */ - public function testResponseFormat($methods, array $supported_response_formats, array $supported_request_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { + public function testResponseFormat($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { foreach ($request_headers as $key => $value) { unset($request_headers[$key]); $key = strtoupper(str_replace('-', '_', $key)); @@ -92,10 +92,8 @@ public function testResponseFormat($methods, array $supported_response_formats, if ($request_format) { $request->setRequestFormat($request_format); } - - $route_requirements = $this->generateRouteRequirements($supported_response_formats, $supported_request_formats); - - $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], $route_requirements)); + $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format'; + $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], [$route_requirement_key_format => implode('|', $supported_formats)])); $resource_response_subscriber = new ResourceResponseSubscriber( $this->prophesize(SerializerInterface::class)->reveal(), @@ -115,7 +113,9 @@ public function testResponseFormat($methods, array $supported_response_formats, * * @dataProvider providerTestResponseFormat */ - public function testOnResponseWithCacheableResponse($methods, array $supported_response_formats, array $supported_request_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { + public function testOnResponseWithCacheableResponse($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { + $rest_config_name = $this->randomMachineName(); + foreach ($request_headers as $key => $value) { unset($request_headers[$key]); $key = strtoupper(str_replace('-', '_', $key)); @@ -129,10 +129,8 @@ public function testOnResponseWithCacheableResponse($methods, array $supported_r if ($request_format) { $request->setRequestFormat($request_format); } - - $route_requirements = $this->generateRouteRequirements($supported_response_formats, $supported_request_formats); - - $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], $route_requirements)); + $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format'; + $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $rest_config_name], [$route_requirement_key_format => implode('|', $supported_formats)])); // The RequestHandler must return a ResourceResponseInterface object. $handler_response = new ResourceResponse($method !== 'DELETE' ? ['REST' => 'Drupal'] : NULL); @@ -165,7 +163,9 @@ public function testOnResponseWithCacheableResponse($methods, array $supported_r * * @dataProvider providerTestResponseFormat */ - public function testOnResponseWithUncacheableResponse($methods, array $supported_response_formats, array $supported_request_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { + public function testOnResponseWithUncacheableResponse($methods, array $supported_formats, $request_format, array $request_headers, $request_body, $expected_response_format, $expected_response_content_type, $expected_response_content) { + $rest_config_name = $this->randomMachineName(); + foreach ($request_headers as $key => $value) { unset($request_headers[$key]); $key = strtoupper(str_replace('-', '_', $key)); @@ -179,10 +179,8 @@ public function testOnResponseWithUncacheableResponse($methods, array $supported if ($request_format) { $request->setRequestFormat($request_format); } - - $route_requirements = $this->generateRouteRequirements($supported_response_formats, $supported_request_formats); - - $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $this->randomMachineName()], $route_requirements)); + $route_requirement_key_format = $request->isMethodCacheable() ? '_format' : '_content_type_format'; + $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => $rest_config_name], [$route_requirement_key_format => implode('|', $supported_formats)])); // The RequestHandler must return a ResourceResponseInterface object. $handler_response = new ModifiedResourceResponse($method !== 'DELETE' ? ['REST' => 'Drupal'] : NULL); @@ -227,7 +225,6 @@ public function providerTestResponseFormat() { // @todo add 'HEAD' in https://www.drupal.org/node/2752325 ['GET'], ['xml', 'json'], - [], 'json', [], NULL, @@ -239,7 +236,6 @@ public function providerTestResponseFormat() { // @todo add 'HEAD' in https://www.drupal.org/node/2752325 ['GET'], ['xml', 'json'], - [], 'xml', [], NULL, @@ -251,7 +247,6 @@ public function providerTestResponseFormat() { // @todo add 'HEAD' in https://www.drupal.org/node/2752325 ['GET'], ['json', 'xml'], - [], FALSE, [], NULL, @@ -263,7 +258,6 @@ public function providerTestResponseFormat() { // @todo add 'HEAD' in https://www.drupal.org/node/2752325 ['GET'], ['xml', 'json'], - [], FALSE, [], NULL, @@ -277,7 +271,6 @@ public function providerTestResponseFormat() { 'unsafe methods with response (POST, PATCH): client requested no format, response should use request body format (JSON)' => [ ['POST', 'PATCH'], ['xml', 'json'], - ['xml', 'json'], FALSE, ['Content-Type' => 'application/json'], $json_encoded, @@ -288,7 +281,6 @@ public function providerTestResponseFormat() { 'unsafe methods with response (POST, PATCH): client requested no format, response should use request body format (XML)' => [ ['POST', 'PATCH'], ['xml', 'json'], - ['xml', 'json'], FALSE, ['Content-Type' => 'text/xml'], $xml_encoded, @@ -299,7 +291,6 @@ public function providerTestResponseFormat() { 'unsafe methods with response (POST, PATCH): client requested format other than request body format (JSON): response format should use requested format (XML)' => [ ['POST', 'PATCH'], ['xml', 'json'], - ['xml', 'json'], 'xml', ['Content-Type' => 'application/json'], $json_encoded, @@ -310,7 +301,6 @@ public function providerTestResponseFormat() { 'unsafe methods with response (POST, PATCH): client requested format other than request body format (XML), but is allowed for the request body (JSON)' => [ ['POST', 'PATCH'], ['xml', 'json'], - ['xml', 'json'], 'json', ['Content-Type' => 'text/xml'], $xml_encoded, @@ -318,35 +308,12 @@ public function providerTestResponseFormat() { 'application/json', $json_encoded, ], - 'unsafe methods with response (POST, PATCH): client requested format other than request body format when only XML is allowed as a content type format' => [ - ['POST', 'PATCH'], - ['xml'], - ['json'], - 'json', - ['Content-Type' => 'text/xml'], - $xml_encoded, - 'json', - 'application/json', - $json_encoded, - ], - 'unsafe methods with response (POST, PATCH): client requested format other than request body format when only JSON is allowed as a content type format' => [ - ['POST', 'PATCH'], - ['json'], - ['xml'], - 'xml', - ['Content-Type' => 'application/json'], - $json_encoded, - 'xml', - 'text/xml', - $xml_encoded, - ], ]; $unsafe_method_bodyless_test_cases = [ - 'unsafe methods without response bodies (DELETE): client requested no format, response should have no format' => [ + 'unsafe methods with response bodies (DELETE): client requested no format, response should have no format' => [ ['DELETE'], ['xml', 'json'], - ['xml', 'json'], FALSE, ['Content-Type' => 'application/json'], NULL, @@ -354,10 +321,9 @@ public function providerTestResponseFormat() { NULL, '', ], - 'unsafe methods without response bodies (DELETE): client requested format (XML), response should have no format' => [ + 'unsafe methods with response bodies (DELETE): client requested format (XML), response should have no format' => [ ['DELETE'], ['xml', 'json'], - ['xml', 'json'], 'xml', ['Content-Type' => 'application/json'], NULL, @@ -365,10 +331,9 @@ public function providerTestResponseFormat() { NULL, '', ], - 'unsafe methods without response bodies (DELETE): client requested format (JSON), response should have no format' => [ + 'unsafe methods with response bodies (DELETE): client requested format (JSON), response should have no format' => [ ['DELETE'], ['xml', 'json'], - ['xml', 'json'], 'json', ['Content-Type' => 'application/json'], NULL, @@ -403,26 +368,4 @@ protected function getFunctioningResourceResponseSubscriber(RouteMatchInterface return $resource_response_subscriber; } - /** - * Generates route requirements based on supported formats. - * - * @param array $supported_response_formats - * The supported response formats to add to the route requirements. - * @param array $supported_request_formats - * The supported request formats to add to the route requirements. - * - * @return array - * An array of route requirements. - */ - protected function generateRouteRequirements(array $supported_response_formats, array $supported_request_formats) { - $route_requirements = [ - '_format' => implode('|', $supported_response_formats), - ]; - if (!empty($supported_request_formats)) { - $route_requirements['_content_type_format'] = implode('|', $supported_request_formats); - } - - return $route_requirements; - } - } only in patch2: unchanged: --- a/core/modules/search/src/Plugin/SearchPluginBase.php +++ b/core/modules/search/src/Plugin/SearchPluginBase.php @@ -146,18 +146,16 @@ public function buildSearchUrlQuery(FormStateInterface $form_state) { public function getHelp() { // This default search help is appropriate for plugins like NodeSearch // that use the SearchQuery class. - $help = [ - 'list' => [ - '#theme' => 'item_list', - '#items' => [ - $this->t('Search looks for exact, case-insensitive keywords; keywords shorter than a minimum length are ignored.'), - $this->t('Use upper-case OR to get more results. Example: cat OR dog (content contains either "cat" or "dog").'), - $this->t('You can use upper-case AND to require all words, but this is the same as the default behavior. Example: cat AND dog (same as cat dog, content must contain both "cat" and "dog").'), - $this->t('Use quotes to search for a phrase. Example: "the cat eats mice".'), - $this->t('You can precede keywords by - to exclude them; you must still have at least one "positive" keyword. Example: cat -dog (content must contain cat and cannot contain dog).'), - ], + $help = ['list' => [ + '#theme' => 'item_list', + '#items' => [ + $this->t('Search looks for exact, case-insensitive keywords; keywords shorter than a minimum length are ignored.'), + $this->t('Use upper-case OR to get more results. Example: cat OR dog (content contains either "cat" or "dog").'), + $this->t('You can use upper-case AND to require all words, but this is the same as the default behavior. Example: cat AND dog (same as cat dog, content must contain both "cat" and "dog").'), + $this->t('Use quotes to search for a phrase. Example: "the cat eats mice".'), + $this->t('You can precede keywords by - to exclude them; you must still have at least one "positive" keyword. Example: cat -dog (content must contain cat and cannot contain dog).'), ], - ]; + ]]; return $help; } only in patch2: unchanged: --- a/core/modules/search/src/Plugin/views/argument/Search.php +++ b/core/modules/search/src/Plugin/views/argument/Search.php @@ -97,7 +97,7 @@ public function query($group_by = FALSE) { $search_dataset = $this->query->addTable('node_search_dataset'); $conditions = $this->searchQuery->conditions(); $condition_conditions =& $conditions->conditions(); - foreach ($condition_conditions as $key => &$condition) { + foreach ($condition_conditions as $key => &$condition) { // Make sure we just look at real conditions. if (is_numeric($key)) { // Replace the conditions with the table alias of views. only in patch2: unchanged: --- a/core/modules/search/src/Plugin/views/filter/Search.php +++ b/core/modules/search/src/Plugin/views/filter/Search.php @@ -172,7 +172,7 @@ public function query() { $search_dataset = $this->query->addTable('node_search_dataset'); $conditions = $this->searchQuery->conditions(); $condition_conditions =& $conditions->conditions(); - foreach ($condition_conditions as $key => &$condition) { + foreach ($condition_conditions as $key => &$condition) { // Make sure we just look at real conditions. if (is_numeric($key)) { // Replace the conditions with the table alias of views. only in patch2: unchanged: --- a/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php +++ b/core/modules/search/src/Tests/SearchConfigSettingsFormTest.php @@ -177,7 +177,7 @@ public function testSearchModuleDisabling() { $this->submitGetForm('node', $terms, t('Search')); $current = $this->getURL(); $expected = \Drupal::url('search.view_' . $entity->id(), [], ['query' => ['keys' => $info['keys']], 'absolute' => TRUE]); - $this->assertEqual($current, $expected, 'Block redirected to right search page'); + $this->assertEqual( $current, $expected, 'Block redirected to right search page'); // Try an invalid search path, which should 404. $this->drupalGet('search/not_a_plugin_path'); only in patch2: unchanged: --- a/core/modules/search/src/Tests/SearchNodeUpdateAndDeletionTest.php +++ b/core/modules/search/src/Tests/SearchNodeUpdateAndDeletionTest.php @@ -39,8 +39,7 @@ public function testSearchIndexUpdateOnNodeChange() { $node = $this->drupalCreateNode([ 'title' => 'Someone who says Ni!', 'body' => [['value' => "We are the knights who say Ni!"]], - 'type' => 'page', - ]); + 'type' => 'page']); $node_search_plugin = $this->container->get('plugin.manager.search')->createInstance('node_search'); // Update the search index. @@ -74,8 +73,7 @@ public function testSearchIndexUpdateOnNodeDeletion() { $node = $this->drupalCreateNode([ 'title' => 'No dragons here', 'body' => [['value' => 'Again: No dragons here']], - 'type' => 'page', - ]); + 'type' => 'page']); $node_search_plugin = $this->container->get('plugin.manager.search')->createInstance('node_search'); // Update the search index. only in patch2: unchanged: --- a/core/modules/search/src/Tests/SearchRankingTest.php +++ b/core/modules/search/src/Tests/SearchRankingTest.php @@ -53,9 +53,9 @@ public function testRankings() { foreach ($node_ranks as $node_rank) { $settings = [ 'type' => 'page', - 'comment' => [ - ['status' => CommentItemInterface::HIDDEN], - ], + 'comment' => [[ + 'status' => CommentItemInterface::HIDDEN, + ]], 'title' => 'Drupal rocks', 'body' => [['value' => "Drupal's search rocks"]], // Node is one day old. only in patch2: unchanged: --- a/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php +++ b/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php @@ -78,11 +78,16 @@ protected function setUp() { // After the third node, we don't care what the settings are. But we // need to have at least 5 to make sure the throttling is working // correctly. So, let's make 8 total. - [], - [], - [], - [], - [], + [ + ], + [ + ], + [ + ], + [ + ], + [ + ], ]; $this->searchableNodes = []; foreach ($nodes as $setting) { only in patch2: unchanged: --- a/core/modules/serialization/src/Tests/NormalizerTestBase.php +++ b/core/modules/serialization/src/Tests/NormalizerTestBase.php @@ -10,4 +10,4 @@ * @deprecated Scheduled for removal in Drupal 9.0.0. * Use \Drupal\Tests\serialization\Kernel\NormalizerTestBase instead. */ -abstract class NormalizerTestBase extends SerializationNormalizerTestBase {} +abstract class NormalizerTestBase extends SerializationNormalizerTestBase { } only in patch2: unchanged: --- a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php +++ b/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayBlockFormTest.php @@ -7,7 +7,6 @@ use Drupal\block_content\Entity\BlockContentType; use Drupal\settings_tray_test\Plugin\Block\SettingsTrayFormAnnotationIsClassBlock; use Drupal\settings_tray_test\Plugin\Block\SettingsTrayFormAnnotationNoneBlock; -use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait; use Drupal\user\Entity\Role; /** @@ -17,8 +16,6 @@ */ class SettingsTrayBlockFormTest extends SettingsTrayJavascriptTestBase { - use ContextualLinkClickTrait; - const TOOLBAR_EDIT_LINK_SELECTOR = '#toolbar-bar div.contextual-toolbar-tab button'; const LABEL_INPUT_SELECTOR = 'input[data-drupal-selector="edit-settings-label"]'; @@ -69,151 +66,144 @@ protected function setUp() { * * @dataProvider providerTestBlocks */ - public function testBlocks($theme, $block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) { + public function testBlocks($block_plugin, $new_page_text, $element_selector, $label_selector, $button_text, $toolbar_item) { $web_assert = $this->assertSession(); $page = $this->getSession()->getPage(); - $this->enableTheme($theme); - $block = $this->placeBlock($block_plugin); - $block_selector = str_replace('_', '-', $this->getBlockSelector($block)); - $block_id = $block->id(); - $this->drupalGet('user'); + foreach ($this->getTestThemes() as $theme) { + $this->enableTheme($theme); + $block = $this->placeBlock($block_plugin); + $block_selector = str_replace('_', '-', $this->getBlockSelector($block)); + $block_id = $block->id(); + $this->drupalGet('user'); - $link = $page->find('css', "$block_selector .contextual-links li a"); - $this->assertEquals('Quick edit', $link->getText(), "'Quick edit' is the first contextual link for the block."); - $this->assertContains("/admin/structure/block/manage/$block_id/off-canvas?destination=user/2", $link->getAttribute('href')); - - if (isset($toolbar_item)) { - // Check that you can open a toolbar tray and it will be closed after - // entering edit mode. - if ($element = $page->find('css', "#toolbar-administration a.is-active")) { - // If a tray was open from page load close it. - $element->click(); - $this->waitForNoElement("#toolbar-administration a.is-active"); + $link = $page->find('css', "$block_selector .contextual-links li a"); + $this->assertEquals('Quick edit', $link->getText(), "'Quick edit' is the first contextual link for the block."); + $this->assertContains("/admin/structure/block/manage/$block_id/off-canvas?destination=user/2", $link->getAttribute('href')); + + if (isset($toolbar_item)) { + // Check that you can open a toolbar tray and it will be closed after + // entering edit mode. + if ($element = $page->find('css', "#toolbar-administration a.is-active")) { + // If a tray was open from page load close it. + $element->click(); + $this->waitForNoElement("#toolbar-administration a.is-active"); + } + $page->find('css', $toolbar_item)->click(); + $this->assertElementVisibleAfterWait('css', "{$toolbar_item}.is-active"); + } + $this->enableEditMode(); + if (isset($toolbar_item)) { + $this->waitForNoElement("{$toolbar_item}.is-active"); + } + $this->openBlockForm($block_selector); + switch ($block_plugin) { + case 'system_powered_by_block': + // Confirm "Display Title" is not checked. + $web_assert->checkboxNotChecked('settings[label_display]'); + // Confirm Title is not visible. + $this->assertEquals($this->isLabelInputVisible(), FALSE, 'Label is not visible'); + $page->checkField('settings[label_display]'); + $this->assertEquals($this->isLabelInputVisible(), TRUE, 'Label is visible'); + // Fill out form, save the form. + $page->fillField('settings[label]', $new_page_text); + + break; + + case 'system_branding_block': + // Fill out form, save the form. + $page->fillField('settings[site_information][site_name]', $new_page_text); + break; + + case 'settings_tray_test_class': + $web_assert->elementExists('css', '[data-drupal-selector="edit-settings-some-setting"]'); + break; } - $page->find('css', $toolbar_item)->click(); - $this->assertElementVisibleAfterWait('css', "{$toolbar_item}.is-active"); - } - $this->enableEditMode(); - if (isset($toolbar_item)) { - $this->waitForNoElement("{$toolbar_item}.is-active"); - } - $this->openBlockForm($block_selector); - switch ($block_plugin) { - case 'system_powered_by_block': - // Confirm "Display Title" is not checked. - $web_assert->checkboxNotChecked('settings[label_display]'); - // Confirm Title is not visible. - $this->assertEquals($this->isLabelInputVisible(), FALSE, 'Label is not visible'); - $page->checkField('settings[label_display]'); - $this->assertEquals($this->isLabelInputVisible(), TRUE, 'Label is visible'); - // Fill out form, save the form. - $page->fillField('settings[label]', $new_page_text); - - break; - - case 'system_branding_block': - // Fill out form, save the form. - $page->fillField('settings[site_information][site_name]', $new_page_text); - break; - - case 'settings_tray_test_class': - $web_assert->elementExists('css', '[data-drupal-selector="edit-settings-some-setting"]'); - break; - } - if (isset($new_page_text)) { - $page->pressButton($button_text); - // Make sure the changes are present. - $new_page_text_locator = "$block_selector $label_selector:contains($new_page_text)"; - $this->assertElementVisibleAfterWait('css', $new_page_text_locator); - // The page is loaded with the new change but make sure page is - // completely loaded. - $this->assertPageLoadComplete(); - } + if (isset($new_page_text)) { + $page->pressButton($button_text); + // Make sure the changes are present. + $new_page_text_locator = "$block_selector $label_selector:contains($new_page_text)"; + $this->assertElementVisibleAfterWait('css', $new_page_text_locator); + $web_assert->assertWaitOnAjaxRequest(); + } - $this->openBlockForm($block_selector); + $this->openBlockForm($block_selector); - $this->disableEditMode(); - // Canvas should close when editing module is closed. - $this->waitForOffCanvasToClose(); + $this->disableEditMode(); + // Canvas should close when editing module is closed. + $this->waitForOffCanvasToClose(); - $this->enableEditMode(); + $this->enableEditMode(); - // Open block form by clicking a element inside the block. - // This confirms that default action for links and form elements is - // suppressed. - $this->openBlockForm("$block_selector {$element_selector}", $block_selector); - $web_assert->elementTextContains('css', '.contextual-toolbar-tab button', 'Editing'); - $web_assert->elementAttributeContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-settings-tray-edit-mode'); - // Simulate press the Escape key. - $this->getSession()->executeScript('jQuery("body").trigger(jQuery.Event("keyup", { keyCode: 27 }));'); - $this->waitForOffCanvasToClose(); - $this->getSession()->wait(100); - $this->assertEditModeDisabled(); - $web_assert->elementTextContains('css', '#drupal-live-announce', 'Exited edit mode.'); - $web_assert->elementTextNotContains('css', '.contextual-toolbar-tab button', 'Editing'); - $web_assert->elementAttributeNotContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-settings-tray-edit-mode'); + // Open block form by clicking a element inside the block. + // This confirms that default action for links and form elements is + // suppressed. + $this->openBlockForm("$block_selector {$element_selector}", $block_selector); + $web_assert->elementTextContains('css', '.contextual-toolbar-tab button', 'Editing'); + $web_assert->elementAttributeContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-settings-tray-edit-mode'); + // Simulate press the Escape key. + $this->getSession()->executeScript('jQuery("body").trigger(jQuery.Event("keyup", { keyCode: 27 }));'); + $this->waitForOffCanvasToClose(); + $this->getSession()->wait(100); + $this->assertEditModeDisabled(); + $web_assert->elementTextContains('css', '#drupal-live-announce', 'Exited edit mode.'); + $web_assert->elementTextNotContains('css', '.contextual-toolbar-tab button', 'Editing'); + $web_assert->elementAttributeNotContains('css', '.dialog-off-canvas__main-canvas', 'class', 'js-settings-tray-edit-mode'); + // Delete the block that was placed for the current theme. + $block->delete(); + } } /** * Dataprovider for testBlocks(). */ public function providerTestBlocks() { - $blocks = []; - foreach ($this->getTestThemes() as $theme) { - $blocks += [ - "$theme: block-powered" => [ - 'theme' => $theme, - 'block_plugin' => 'system_powered_by_block', - 'new_page_text' => 'Can you imagine anyone showing the label on this block', - 'element_selector' => 'span a', - 'label_selector' => 'h2', - 'button_text' => 'Save Powered by Drupal', - 'toolbar_item' => '#toolbar-item-user', - ], - "$theme: block-branding" => [ - 'theme' => $theme, - 'block_plugin' => 'system_branding_block', - 'new_page_text' => 'The site that will live a very short life', - 'element_selector' => "a[rel='home']:last-child", - 'label_selector' => "a[rel='home']:last-child", - 'button_text' => 'Save Site branding', - 'toolbar_item' => '#toolbar-item-administration', - ], - "$theme: block-search" => [ - 'theme' => $theme, - 'block_plugin' => 'search_form_block', - 'new_page_text' => NULL, - 'element_selector' => '#edit-submit', - 'label_selector' => 'h2', - 'button_text' => 'Save Search form', - 'toolbar_item' => NULL, - ], - // This is the functional JS test coverage accompanying - // \Drupal\Tests\settings_tray\Functional\SettingsTrayTest::testPossibleAnnotations(). - "$theme: " . SettingsTrayFormAnnotationIsClassBlock::class => [ - 'theme' => $theme, - 'block_plugin' => 'settings_tray_test_class', - 'new_page_text' => NULL, - 'element_selector' => 'span', - 'label_selector' => NULL, - 'button_text' => NULL, - 'toolbar_item' => NULL, - ], - // This is the functional JS test coverage accompanying - // \Drupal\Tests\settings_tray\Functional\SettingsTrayTest::testPossibleAnnotations(). - "$theme: " . SettingsTrayFormAnnotationNoneBlock::class => [ - 'theme' => $theme, - 'block_plugin' => 'settings_tray_test_none', - 'new_page_text' => NULL, - 'element_selector' => 'span', - 'label_selector' => NULL, - 'button_text' => NULL, - 'toolbar_item' => NULL, - ], - ]; - } - + $blocks = [ + 'block-powered' => [ + 'block_plugin' => 'system_powered_by_block', + 'new_page_text' => 'Can you imagine anyone showing the label on this block', + 'element_selector' => 'span a', + 'label_selector' => 'h2', + 'button_text' => 'Save Powered by Drupal', + 'toolbar_item' => '#toolbar-item-user', + ], + 'block-branding' => [ + 'block_plugin' => 'system_branding_block', + 'new_page_text' => 'The site that will live a very short life', + 'element_selector' => "a[rel='home']:last-child", + 'label_selector' => "a[rel='home']:last-child", + 'button_text' => 'Save Site branding', + 'toolbar_item' => '#toolbar-item-administration', + ], + 'block-search' => [ + 'block_plugin' => 'search_form_block', + 'new_page_text' => NULL, + 'element_selector' => '#edit-submit', + 'label_selector' => 'h2', + 'button_text' => 'Save Search form', + 'toolbar_item' => NULL, + ], + // This is the functional JS test coverage accompanying + // \Drupal\Tests\settings_tray\Functional\SettingsTrayTest::testPossibleAnnotations(). + SettingsTrayFormAnnotationIsClassBlock::class => [ + 'block_plugin' => 'settings_tray_test_class', + 'new_page_text' => NULL, + 'element_selector' => 'span', + 'label_selector' => NULL, + 'button_text' => NULL, + 'toolbar_item' => NULL, + ], + // This is the functional JS test coverage accompanying + // \Drupal\Tests\settings_tray\Functional\SettingsTrayTest::testPossibleAnnotations(). + SettingsTrayFormAnnotationNoneBlock::class => [ + 'block_plugin' => 'settings_tray_test_none', + 'new_page_text' => NULL, + 'element_selector' => 'span', + 'label_selector' => NULL, + 'button_text' => NULL, + 'toolbar_item' => NULL, + ], + ]; return $blocks; } only in patch2: unchanged: --- a/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayJavascriptTestBase.php +++ b/core/modules/settings_tray/tests/src/FunctionalJavascript/SettingsTrayJavascriptTestBase.php @@ -14,34 +14,12 @@ */ protected function drupalGet($path, array $options = [], array $headers = []) { $return = parent::drupalGet($path, $options, $headers); - $this->assertPageLoadComplete(); - return $return; - } - /** - * Assert the page is completely loaded. - * - * Ajax requests may happen after page loads. Also for users who have access - * to contextual links the contextual link placeholders will be filled after - * the page is received. - */ - protected function assertPageLoadComplete() { + // After the page loaded we need to additionally wait until the settings + // tray Ajax activity is done. $this->assertSession()->assertWaitOnAjaxRequest(); - if ($this->loggedInUser && $this->loggedInUser->hasPermission('access contextual links')) { - $this->assertAllContextualLinksLoaded(); - } - } - /** - * Assert all contextual link areas have be loaded. - * - * Contextual link placeholders will be filled after - * the page is received. - * - * @todo Move this function to https://www.drupal.org/node/2821724. - */ - protected function assertAllContextualLinksLoaded() { - $this->waitForNoElement('[data-contextual-id]:empty'); + return $return; } /** @@ -94,11 +72,53 @@ protected function getTray() { * (optional) Timeout in milliseconds, defaults to 10000. */ protected function waitForNoElement($selector, $timeout = 10000) { - $condition = "(typeof jQuery !== 'undefined' && jQuery('$selector').length === 0)"; + $condition = "(jQuery('$selector').length == 0)"; $this->assertJsCondition($condition, $timeout); } /** + * Clicks a contextual link. + * + * @todo Remove this function when related trait added in + * https://www.drupal.org/node/2821724. + * + * @param string $selector + * The selector for the element that contains the contextual link. + * @param string $link_locator + * The link id, title, or text. + * @param bool $force_visible + * If true then the button will be forced to visible so it can be clicked. + */ + protected function clickContextualLink($selector, $link_locator, $force_visible = TRUE) { + if ($force_visible) { + $this->toggleContextualTriggerVisibility($selector); + } + + $element = $this->getSession()->getPage()->find('css', $selector); + $element->find('css', '.contextual button')->press(); + $element->findLink($link_locator)->click(); + + if ($force_visible) { + $this->toggleContextualTriggerVisibility($selector); + } + } + + /** + * Toggles the visibility of a contextual trigger. + * + * @todo Remove this function when related trait added in + * https://www.drupal.org/node/2821724. + * + * @param string $selector + * The selector for the element that contains the contextual link. + */ + protected function toggleContextualTriggerVisibility($selector) { + // Hovering over the element itself with should be enough, but does not + // work. Manually remove the visually-hidden class. + $this->getSession()->executeScript("jQuery('{$selector} .contextual .trigger').toggleClass('visually-hidden');"); + } + + /** * Get themes to test. * * @return string[] only in patch2: unchanged: --- a/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php +++ b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php @@ -1,6 +1,6 @@ drupalLogin($this->drupalCreateUser(['access toolbar', 'access shortcuts', 'access content overview', 'administer content types'])); $this->drupalGet(Url::fromRoute('')); $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .toolbar-menu a'); - $this->assertEqual($shortcuts[0]->getText(), 'Add content'); - $this->assertEqual($shortcuts[1]->getText(), 'All content'); + $this->assertEqual((string) $shortcuts[0], 'Add content'); + $this->assertEqual((string) $shortcuts[1], 'All content'); foreach ($this->set->getShortcuts() as $shortcut) { $shortcut->setWeight($shortcut->getWeight() * -1)->save(); } $this->drupalGet(Url::fromRoute('')); $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .toolbar-menu a'); - $this->assertEqual($shortcuts[0]->getText(), 'All content'); - $this->assertEqual($shortcuts[1]->getText(), 'Add content'); + $this->assertEqual((string) $shortcuts[0], 'All content'); + $this->assertEqual((string) $shortcuts[1], 'Add content'); } /** only in patch2: unchanged: --- a/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php +++ b/core/modules/shortcut/src/Tests/ShortcutSetsTest.php @@ -1,6 +1,6 @@ $element) { - $this->assertEqual($element->getText(), $expected_items[$key]); + $this->assertEqual((string) $element[0], $expected_items[$key]); } // Look for test shortcuts in the table. only in patch2: unchanged: --- a/core/modules/shortcut/src/Tests/ShortcutTestBase.php +++ b/core/modules/shortcut/src/Tests/ShortcutTestBase.php @@ -2,8 +2,6 @@ namespace Drupal\shortcut\Tests; -@trigger_error(__NAMESPACE__ . '\ShortcutTestBase is deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. Instead, use \Drupal\Tests\shortcut\Functional\ShortcutTestBase, see https://www.drupal.org/node/2906736.', E_USER_DEPRECATED); - use Drupal\shortcut\Entity\Shortcut; use Drupal\shortcut\Entity\ShortcutSet; use Drupal\shortcut\ShortcutSetInterface; @@ -11,11 +9,6 @@ /** * Defines base class for shortcut test cases. - * - * @deprecated in Drupal 8.5.0 and will be removed before Drupal 9.0.0. - * Use \Drupal\Tests\shortcut\Functional\ShortcutTestBase. - * - * @see https://www.drupal.org/node/2906736 */ abstract class ShortcutTestBase extends WebTestBase { only in patch2: unchanged: --- a/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php +++ b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php @@ -1,6 +1,6 @@ profile != 'standard') { - // Create Basic page and Article node types. - $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']); - $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']); - - // Populate the default shortcut set. - $shortcut = Shortcut::create([ - 'shortcut_set' => 'default', - 'title' => t('Add content'), - 'weight' => -20, - 'link' => [ - 'uri' => 'internal:/node/add', - ], - ]); - $shortcut->save(); - - $shortcut = Shortcut::create([ - 'shortcut_set' => 'default', - 'title' => t('All content'), - 'weight' => -19, - 'link' => [ - 'uri' => 'internal:/admin/content', - ], - ]); - $shortcut->save(); - } - - // Create users. - $this->adminUser = $this->drupalCreateUser(['access toolbar', 'administer shortcuts', 'view the administration theme', 'create article content', 'create page content', 'access content overview', 'administer users', 'link to any page', 'edit any article content']); - $this->shortcutUser = $this->drupalCreateUser(['customize shortcut links', 'switch shortcut sets', 'access shortcuts', 'access content']); - - // Create a node. - $this->node = $this->drupalCreateNode(['type' => 'article']); - - // Log in as admin and grab the default shortcut set. - $this->drupalLogin($this->adminUser); - $this->set = ShortcutSet::load('default'); - \Drupal::entityManager()->getStorage('shortcut_set')->assignUser($this->set, $this->adminUser); - } - - /** - * Creates a generic shortcut set. - */ - public function generateShortcutSet($label = '', $id = NULL) { - $set = ShortcutSet::create([ - 'id' => isset($id) ? $id : strtolower($this->randomMachineName()), - 'label' => empty($label) ? $this->randomString() : $label, - ]); - $set->save(); - return $set; - } - - /** - * Extracts information from shortcut set links. - * - * @param \Drupal\shortcut\ShortcutSetInterface $set - * The shortcut set object to extract information from. - * @param string $key - * The array key indicating what information to extract from each link: - * - 'title': Extract shortcut titles. - * - 'link': Extract shortcut paths. - * - 'id': Extract the shortcut ID. - * - * @return array - * Array of the requested information from each link. - */ - public function getShortcutInformation(ShortcutSetInterface $set, $key) { - $info = []; - \Drupal::entityManager()->getStorage('shortcut')->resetCache(); - foreach ($set->getShortcuts() as $shortcut) { - if ($key == 'link') { - $info[] = $shortcut->link->uri; - } - else { - $info[] = $shortcut->{$key}->value; - } - } - return $info; - } - -} only in patch2: unchanged: --- a/core/modules/simpletest/simpletest.module +++ b/core/modules/simpletest/simpletest.module @@ -363,7 +363,7 @@ function simpletest_phpunit_run_command(array $unescaped_test_classnames, $phpun // exec in a subshell so that the environment is isolated when running tests // via the simpletest UI. - $ret = exec(implode(" ", $command), $output, $status); + $ret = exec(join($command, " "), $output, $status); chdir($old_cwd); putenv('SIMPLETEST_DB='); only in patch2: unchanged: --- a/core/modules/simpletest/src/Tests/SimpleTestTest.php +++ b/core/modules/simpletest/src/Tests/SimpleTestTest.php @@ -175,7 +175,7 @@ public function stubTest() { // along by the rethrow. assert(FALSE, 'Lorem Ipsum'); } - catch (\AssertionError $e ) { + catch ( \AssertionError $e ) { $this->assertEqual($e->getMessage(), 'Lorem Ipsum', 'Runtime assertions Enabled and running.'); } } only in patch2: unchanged: --- a/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php +++ b/core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php @@ -348,7 +348,8 @@ public function testGetTestClassesWithSelectedTypes() { $result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']); $this->assertCount(2, $result); $this->assertEquals([ - 'example' => [], + 'example' => [ + ], 'example2' => [ 'Drupal\Tests\test_module\Kernel\KernelExampleTest3' => [ 'name' => 'Drupal\Tests\test_module\Kernel\KernelExampleTest3', only in patch2: unchanged: --- a/core/modules/statistics/src/NodeStatisticsDatabaseStorage.php +++ b/core/modules/statistics/src/NodeStatisticsDatabaseStorage.php @@ -131,7 +131,7 @@ public function resetDayCount() { public function maxTotalCount() { $query = $this->connection->select('node_counter', 'nc'); $query->addExpression('MAX(totalcount)'); - $max_total_count = (int) $query->execute()->fetchField(); + $max_total_count = (int)$query->execute()->fetchField(); return $max_total_count; } only in patch2: unchanged: --- a/core/modules/system/src/Form/DateFormatDeleteForm.php +++ b/core/modules/system/src/Form/DateFormatDeleteForm.php @@ -43,8 +43,8 @@ public static function create(ContainerInterface $container) { public function getQuestion() { return t('Are you sure you want to delete the format %name : %format?', [ '%name' => $this->entity->label(), - '%format' => $this->dateFormatter->format(REQUEST_TIME, $this->entity->id()), - ]); + '%format' => $this->dateFormatter->format(REQUEST_TIME, $this->entity->id())] + ); } } only in patch2: unchanged: --- a/core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php +++ b/core/modules/system/src/Plugin/ImageToolkit/Operation/gd/Rotate.php @@ -45,7 +45,7 @@ protected function validateArguments(array $arguments) { // Validate or set background color argument. if (!empty($arguments['background'])) { // Validate the background color: Color::hexToRgb does so for us. - $background = Color::hexToRgb($arguments['background']) + ['alpha' => 0 ]; + $background = Color::hexToRgb($arguments['background']) + [ 'alpha' => 0 ]; } else { // Background color is not specified: use transparent white as background. only in patch2: unchanged: --- a/core/modules/system/src/Tests/Ajax/DialogTest.php +++ b/core/modules/system/src/Tests/Ajax/DialogTest.php @@ -175,12 +175,10 @@ public function testDialog() { 'edit-preview' => [ 'callback' => '::preview', 'event' => 'click', - 'url' => Url::fromRoute('ajax_test.dialog_form', [], [ - 'query' => [ + 'url' => Url::fromRoute('ajax_test.dialog_form', [], ['query' => [ MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_modal', FormBuilderInterface::AJAX_FORM_REQUEST => TRUE, - ], - ])->toString(), + ]])->toString(), 'dialogType' => 'ajax', 'submit' => [ '_triggering_element_name' => 'op', only in patch2: unchanged: --- a/core/modules/system/src/Tests/Database/FakeRecord.php +++ b/core/modules/system/src/Tests/Database/FakeRecord.php @@ -14,4 +14,4 @@ * @deprecated in Drupal 8.4.0 and will be removed before Drupal 9.0.0. Instead * use \Drupal\Tests\system\Functional\Database\FakeRecord. */ -class FakeRecord {} +class FakeRecord { } only in patch2: unchanged: --- a/core/modules/system/src/Tests/Form/ElementsTableSelectTest.php +++ b/core/modules/system/src/Tests/Form/ElementsTableSelectTest.php @@ -93,7 +93,7 @@ public function testTableselectColSpan() { // The first two body rows should each have 5 table cells: One for the // radio, one cell in the first column, one cell in the second column, // and two cells in the third column which has colspan 2. - for ($i = 0; $i <= 1; $i++) { + for ( $i = 0; $i <= 1; $i++) { $this->assertEqual(count($table_body[0]->tr[$i]->td), 5, format_string('There are five cells in row @row.', ['@row' => $i])); } // The third row should have 3 cells, one for the radio, one spanning the only in patch2: unchanged: --- a/core/modules/system/src/Tests/System/FloodTest.php +++ b/core/modules/system/src/Tests/System/FloodTest.php @@ -34,9 +34,8 @@ public function testCleanUp() { $window_expired = -1; $name = 'flood_test_cleanup'; - $flood = \Drupal::flood(); - $this->assertTrue($flood->isAllowed($name, $threshold)); // Register expired event. + $flood = \Drupal::flood(); $flood->register($name, $window_expired); // Verify event is not allowed. $this->assertFalse($flood->isAllowed($name, $threshold)); @@ -63,7 +62,6 @@ public function testMemoryBackend() { $request_stack = \Drupal::service('request_stack'); $flood = new MemoryBackend($request_stack); - $this->assertTrue($flood->isAllowed($name, $threshold)); // Register expired event. $flood->register($name, $window_expired); // Verify event is not allowed. @@ -92,7 +90,6 @@ public function testDatabaseBackend() { $connection = \Drupal::service('database'); $request_stack = \Drupal::service('request_stack'); $flood = new DatabaseBackend($connection, $request_stack); - $this->assertTrue($flood->isAllowed($name, $threshold)); // Register expired event. $flood->register($name, $window_expired); // Verify event is not allowed. only in patch2: unchanged: --- a/core/modules/system/src/Tests/System/PageTitleTest.php +++ b/core/modules/system/src/Tests/System/PageTitleTest.php @@ -113,9 +113,9 @@ public function testRoutingTitle() { $this->assertEqual('Test dynamic title', (string) $result[0]); // Set some custom translated strings. - $this->addCustomTranslations('en', [ - '' => ['Static title' => 'Static title translated'], - ]); + $this->addCustomTranslations('en', ['' => [ + 'Static title' => 'Static title translated' + ]]); $this->writeCustomTranslations(); // Ensure that the title got translated. only in patch2: unchanged: --- a/core/modules/system/src/Tests/Update/UpdatePathTestBase.php +++ b/core/modules/system/src/Tests/Update/UpdatePathTestBase.php @@ -243,14 +243,10 @@ protected function runUpdates() { } // The site might be broken at the time so logging in using the UI might // not work, so we use the API itself. - drupal_rewrite_settings([ - 'settings' => [ - 'update_free_access' => (object) [ - 'value' => TRUE, - 'required' => TRUE, - ], - ], - ]); + drupal_rewrite_settings(['settings' => ['update_free_access' => (object) [ + 'value' => TRUE, + 'required' => TRUE, + ]]]); $this->drupalGet($this->updateUrl); $this->clickLink(t('Continue')); only in patch2: unchanged: --- a/core/modules/system/system.install +++ b/core/modules/system/system.install @@ -897,7 +897,7 @@ function system_requirements($phase) { $requirements['trusted_host_patterns'] = [ 'title' => t('Trusted Host Settings'), 'value' => t('Enabled'), - 'description' => t('The trusted_host_patterns setting is set to allow %trusted_host_patterns', ['%trusted_host_patterns' => implode(', ', $trusted_host_patterns)]), + 'description' => t('The trusted_host_patterns setting is set to allow %trusted_host_patterns', ['%trusted_host_patterns' => join(', ', $trusted_host_patterns)]), ]; } } only in patch2: unchanged: --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -1383,7 +1383,7 @@ function system_time_zones($blank = NULL, $grouped = FALSE) { $city = array_pop($split); $region = array_shift($split); if (!empty($region)) { - $grouped_zones[$region][$key] = empty($split) ? $city : $city . ' (' . implode('/', $split) . ')'; + $grouped_zones[$region][$key] = empty($split) ? $city : $city . ' (' . join('/', $split) . ')'; } else { $grouped_zones[$key] = $value; only in patch2: unchanged: --- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php +++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php @@ -31,8 +31,7 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#options' => [ 'red' => 'red', 'green' => 'green', - 'blue' => 'blue', - ], + 'blue' => 'blue'], '#ajax' => [ 'callback' => [$object, 'selectCallback'], ], only in patch2: unchanged: --- a/core/modules/system/tests/modules/database_test/database_test.install +++ b/core/modules/system/tests/modules/database_test/database_test.install @@ -207,8 +207,7 @@ function database_test_schema() { 'type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE, - 'default' => 0, - ], + 'default' => 0], ], 'primary key' => ['id'], 'unique keys' => [ only in patch2: unchanged: --- a/core/modules/system/tests/modules/database_test/src/Controller/DatabaseTestController.php +++ b/core/modules/system/tests/modules/database_test/src/Controller/DatabaseTestController.php @@ -91,7 +91,7 @@ public function testTablesort() { 'tid' => ['data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'], 'pid' => ['data' => t('Person ID'), 'field' => 'pid'], 'task' => ['data' => t('Task'), 'field' => 'task'], - 'priority' => ['data' => t('Priority'), 'field' => 'priority'], + 'priority' => ['data' => t('Priority'), 'field' => 'priority', ], ]; $query = db_select('test_task', 't'); @@ -123,7 +123,7 @@ public function testTablesortFirst() { 'tid' => ['data' => t('Task ID'), 'field' => 'tid', 'sort' => 'desc'], 'pid' => ['data' => t('Person ID'), 'field' => 'pid'], 'task' => ['data' => t('Task'), 'field' => 'task'], - 'priority' => ['data' => t('Priority'), 'field' => 'priority'], + 'priority' => ['data' => t('Priority'), 'field' => 'priority', ], ]; $query = db_select('test_task', 't'); only in patch2: unchanged: --- a/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php +++ b/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php @@ -62,8 +62,7 @@ public function renderArray() { '#pre_render' => [function () { $elements = $this->earlyRenderContent(); return $elements; - } - ], + }], ]; } only in patch2: unchanged: --- a/core/modules/system/tests/modules/early_rendering_controller_test/src/TestDomainObject.php +++ b/core/modules/system/tests/modules/early_rendering_controller_test/src/TestDomainObject.php @@ -2,4 +2,4 @@ namespace Drupal\early_rendering_controller_test; -class TestDomainObject {} +class TestDomainObject { } only in patch2: unchanged: --- a/core/modules/system/tests/modules/entity_test_update/entity_test_update.module +++ b/core/modules/system/tests/modules/entity_test_update/entity_test_update.module @@ -103,15 +103,13 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr 'id' => $i, 'name' => $i, 'test_single_property' => $i . ' - test single property', - 'test_multiple_properties' => [ - [ - 'value1' => $i . ' - test multiple properties - value1', - 'value2' => $i . ' - test multiple properties - value2', - ], - ], + 'test_multiple_properties' => [[ + 'value1' => $i . ' - test multiple properties - value1', + 'value2' => $i . ' - test multiple properties - value2', + ]], 'test_single_property_multiple_values' => [ ['value' => $i . ' - test single property multiple values 0'], - ['value' => $i . ' - test single property multiple values 1'], + ['value' => $i . ' - test single property multiple values 1'] ], 'test_multiple_properties_multiple_values' => [ [ @@ -121,7 +119,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr [ 'value1' => $i . ' - test multiple properties multiple values - value1 1', 'value2' => $i . ' - test multiple properties multiple values - value2 1', - ], + ] ], 'test_non_rev_field' => $i . ' - test non-revisionable field', 'test_non_mul_field' => $i . ' - test non-translatable field', @@ -134,7 +132,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr [ 'value1' => $i . ' - field test configurable field - value1 1', 'value2' => $i . ' - field test configurable field - value2 1', - ], + ] ], 'test_entity_base_field_info' => $i . ' - test entity base field info', ]); @@ -143,15 +141,13 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr $entity->addTranslation('ro', [ 'name' => $i . ' - ro', 'test_single_property' => $i . ' - test single property - ro', - 'test_multiple_properties' => [ - [ - 'value1' => $i . ' - test multiple properties - value1 - ro', - 'value2' => $i . ' - test multiple properties - value2 - ro', - ], - ], + 'test_multiple_properties' => [[ + 'value1' => $i . ' - test multiple properties - value1 - ro', + 'value2' => $i . ' - test multiple properties - value2 - ro', + ]], 'test_single_property_multiple_values' => [ ['value' => $i . ' - test single property multiple values 0 - ro'], - ['value' => $i . ' - test single property multiple values 1 - ro'], + ['value' => $i . ' - test single property multiple values 1 - ro'] ], 'test_multiple_properties_multiple_values' => [ [ @@ -161,7 +157,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr [ 'value1' => $i . ' - test multiple properties multiple values - value1 1 - ro', 'value2' => $i . ' - test multiple properties multiple values - value2 1 - ro', - ], + ] ], 'test_non_rev_field' => $i . ' - test non-revisionable field - ro', 'field_test_configurable_field' => [ @@ -172,7 +168,7 @@ function _entity_test_update_create_test_entities($start = 1, $end = 50, $add_tr [ 'value1' => $i . ' - field test configurable field - value1 1 - ro', 'value2' => $i . ' - field test configurable field - value2 1 - ro', - ], + ] ], 'test_entity_base_field_info' => $i . ' - test entity base field info - ro', ]); only in patch2: unchanged: --- a/core/modules/system/tests/modules/form_test/src/Form/FormTestSelectForm.php +++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestSelectForm.php @@ -115,14 +115,6 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#multiple' => TRUE, ]; - $form['opt_groups'] = [ - '#type' => 'select', - '#options' => [ - 'optgroup_one' => ['one' => 'one', 'two' => 'two', 'three' => 'three', 'four' => 'four'], - 'optgroup_two' => ['five' => 'five', 'six' => 'six'], - ], - ]; - $form['submit'] = ['#type' => 'submit', '#value' => 'Submit']; return $form; } only in patch2: unchanged: --- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/DerivedToolkit.php +++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/DerivedToolkit.php @@ -10,4 +10,4 @@ * title = @Translation("A dummy toolkit, derivative of 'test'.") * ) */ -class DerivedToolkit extends TestToolkit {} +class DerivedToolkit extends TestToolkit { } only in patch2: unchanged: --- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Bar.php +++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Bar.php @@ -13,4 +13,4 @@ * description = @Translation("Bar.") * ) */ -class Bar extends OperationBase {} +class Bar extends OperationBase { } only in patch2: unchanged: --- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Foo.php +++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/Foo.php @@ -13,4 +13,4 @@ * description = @Translation("Foo.") * ) */ -class Foo extends OperationBase {} +class Foo extends OperationBase { } only in patch2: unchanged: --- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/FooDerived.php +++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/Operation/test/FooDerived.php @@ -13,4 +13,4 @@ * description = @Translation("Foo derived.") * ) */ -class FooDerived extends OperationBase {} +class FooDerived extends OperationBase { } only in patch2: unchanged: --- a/core/modules/system/tests/modules/keyvalue_test/keyvalue_test.module +++ b/core/modules/system/tests/modules/keyvalue_test/keyvalue_test.module @@ -14,6 +14,5 @@ function keyvalue_test_entity_type_alter(array &$entity_types) { $entity_types['entity_test_label']->setStorageClass('Drupal\Core\Entity\KeyValueStore\KeyValueContentEntityStorage'); $entity_keys = $entity_types['entity_test_label']->getKeys(); $entity_types['entity_test_label']->set('entity_keys', $entity_keys + ['uuid' => 'uuid']); - $entity_types['entity_test_label']->set('provider', 'keyvalue_test'); } } only in patch2: unchanged: --- a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php +++ b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php @@ -11,4 +11,4 @@ * color = "pink", * ) */ -class ExtendingNonInstalledClass extends YummyFruit {} +class ExtendingNonInstalledClass extends YummyFruit { } only in patch2: unchanged: --- a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/FruitInterface.php +++ b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/FruitInterface.php @@ -5,4 +5,4 @@ /** * Provides an interface for test plugins. */ -interface FruitInterface {} +interface FruitInterface { } only in patch2: unchanged: --- a/core/modules/system/tests/src/Functional/Theme/ThemeInfoTest.php +++ b/core/modules/system/tests/src/Functional/Theme/ThemeInfoTest.php @@ -66,11 +66,11 @@ public function testStylesheets() { // should work nevertheless. $this->drupalGet('theme-test/info/stylesheets'); - $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href' => "$base/base-add.css"])), "$base/base-add.css found"); - $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "base-remove.css"])), "base-remove.css not found"); + $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href' => "$base/base-add.css"])), "$base/base-add.css found"); + $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "base-remove.css"])), "base-remove.css not found"); - $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href' => "$sub/sub-add.css"])), "$sub/sub-add.css found"); - $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "sub-remove.css"])), "sub-remove.css not found"); + $this->assertIdentical(1, count($this->xpath('//link[contains(@href, :href)]', [':href' => "$sub/sub-add.css"])), "$sub/sub-add.css found"); + $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "sub-remove.css"])), "sub-remove.css not found"); $this->assertIdentical(0, count($this->xpath('//link[contains(@href, :href)]', [':href' => "base-add.sub-remove.css"])), "base-add.sub-remove.css not found"); // Verify that CSS files with the same name are loaded from both the base theme and subtheme. only in patch2: unchanged: --- a/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php +++ b/core/modules/system/tests/src/Unit/Menu/SystemLocalTasksTest.php @@ -61,13 +61,10 @@ public function testSystemAdminLocalTasks($route, $expected) { public function getSystemAdminRoutes() { return [ ['system.admin_content', [['system.admin_content']]], - [ - 'system.theme_settings_theme', - [ - ['system.themes_page', 'system.theme_settings'], - ['system.theme_settings_global', 'system.theme_settings_theme:bartik'], - ], - ], + ['system.theme_settings_theme', [ + ['system.themes_page', 'system.theme_settings'], + ['system.theme_settings_global', 'system.theme_settings_theme:bartik'], + ]], ]; } only in patch2: unchanged: --- a/core/modules/system/tests/themes/test_theme/src/ThemeClass.php +++ b/core/modules/system/tests/themes/test_theme/src/ThemeClass.php @@ -5,4 +5,4 @@ /** * Represents a random class, used to test if themes can provide classes. */ -class ThemeClass {} +class ThemeClass { } only in patch2: unchanged: --- a/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php +++ b/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php @@ -17,9 +17,9 @@ */ class IndexTidDepthModifier extends ArgumentPluginBase { - public function buildOptionsForm(&$form, FormStateInterface $form_state) {} + public function buildOptionsForm(&$form, FormStateInterface $form_state) { } - public function query($group_by = FALSE) {} + public function query($group_by = FALSE) { } public function preQuery() { // We don't know our argument yet, but it's based upon our position: only in patch2: unchanged: --- a/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php +++ b/core/modules/taxonomy/src/Plugin/views/argument_default/Tid.php @@ -116,7 +116,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { ]; $form['node'] = [ '#type' => 'checkbox', - '#title' => $this->t("Load default filter from node page, that's good for related taxonomy blocks"), + '#title' => $this->t('Load default filter from node page, that\'s good for related taxonomy blocks'), '#default_value' => $this->options['node'], ]; only in patch2: unchanged: --- a/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php +++ b/core/modules/taxonomy/src/Plugin/views/filter/TaxonomyIndexTid.php @@ -82,9 +82,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o } } - public function hasExtraOptions() { - return TRUE; - } + public function hasExtraOptions() { return TRUE; } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/taxonomy/taxonomy.module +++ b/core/modules/taxonomy/taxonomy.module @@ -61,7 +61,7 @@ function taxonomy_help($route_name, RouteMatchInterface $route_match) { $output .= '
    ' . t('Classifying entity content') . '
    '; $output .= '
    ' . t('A user with the Administer fields permission for a certain entity type may add Taxonomy term reference fields to the entity type, which will allow entities to be classified using taxonomy terms. See the Entity Reference help for more information about reference fields. See the Field module help and the Field UI help pages for general information on fields and how to create and manage them.', [':field_ui' => $field_ui_url, ':field' => \Drupal::url('help.page', ['name' => 'field']), ':entity_reference' => \Drupal::url('help.page', ['name' => 'entity_reference'])]) . '
    '; $output .= '
    ' . t('Adding new terms during content creation') . '
    '; - $output .= '
    ' . t("Allowing users to add new terms gradually builds a vocabulary as content is added and edited. Users can add new terms if either of the two Autocomplete widgets is chosen for the Taxonomy term reference field in the Manage form display page for the field. You will also need to enable the Create referenced entities if they don't already exist option, and restrict the field to one vocabulary.") . '
    '; + $output .= '
    ' . t('Allowing users to add new terms gradually builds a vocabulary as content is added and edited. Users can add new terms if either of the two Autocomplete widgets is chosen for the Taxonomy term reference field in the Manage form display page for the field. You will also need to enable the Create referenced entities if they don\'t already exist option, and restrict the field to one vocabulary.') . '
    '; $output .= '
    ' . t('Configuring displays and form displays') . '
    '; $output .= '
    ' . t('See the Entity Reference help page for the field widgets and formatters that can be configured for any reference field on the Manage display and Manage form display pages. Taxonomy additionally provides an RSS category formatter that displays nothing when the entity item is displayed as HTML, but displays an RSS category instead of a list when the entity item is displayed in an RSS feed.', [':entity_reference' => \Drupal::url('help.page', ['name' => 'entity_reference'])]) . ''; $output .= ''; only in patch2: unchanged: --- a/core/modules/taxonomy/tests/src/Functional/TermTranslationFieldViewTest.php +++ b/core/modules/taxonomy/tests/src/Functional/TermTranslationFieldViewTest.php @@ -74,12 +74,10 @@ protected function setUpNode() { $node = Node::create([ 'title' => $this->randomMachineName(), 'type' => 'article', - 'description' => [ - [ - 'value' => $this->randomMachineName(), - 'format' => 'basic_html', - ], - ], + 'description' => [[ + 'value' => $this->randomMachineName(), + 'format' => 'basic_html' + ]], $this->termFieldName => [['target_id' => $this->term->id()]], 'langcode' => $this->baseLangcode, ]); only in patch2: unchanged: --- a/core/modules/taxonomy/tests/src/Functional/VocabularyUiTest.php +++ b/core/modules/taxonomy/tests/src/Functional/VocabularyUiTest.php @@ -77,7 +77,7 @@ public function testVocabularyInterface() { $this->drupalPostForm('admin/structure/taxonomy/add', $edit, t('Save')); $site_name = $this->config('system.site')->get('name'); - $this->assertTitle(t("Don't Panic | @site-name", ['@site-name' => $site_name]), 'The page title contains the escaped character.'); + $this->assertTitle(t('Don\'t Panic | @site-name', ['@site-name' => $site_name]), 'The page title contains the escaped character.'); } /** only in patch2: unchanged: --- a/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php +++ b/core/modules/taxonomy/tests/src/Kernel/TermKernelTest.php @@ -18,7 +18,7 @@ class TermKernelTest extends KernelTestBase { /** * {@inheritdoc} */ - public static $modules = ['filter', 'taxonomy', 'text', 'user' ]; + public static $modules = [ 'filter', 'taxonomy', 'text', 'user' ]; /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/text/src/Plugin/Field/FieldFormatter/TextSummaryOrTrimmedFormatter.php +++ b/core/modules/text/src/Plugin/Field/FieldFormatter/TextSummaryOrTrimmedFormatter.php @@ -16,4 +16,4 @@ * } * ) */ -class TextSummaryOrTrimmedFormatter extends TextTrimmedFormatter {} +class TextSummaryOrTrimmedFormatter extends TextTrimmedFormatter { } only in patch2: unchanged: --- a/core/modules/text/tests/src/Unit/Migrate/TextCckTest.php +++ b/core/modules/text/tests/src/Unit/Migrate/TextCckTest.php @@ -123,33 +123,37 @@ public function testProcessBooleanTextExplicitValues() { */ public function getFieldTypeProvider() { return [ - ['string_long', 'text_textfield', ['text_processing' => FALSE]], + ['string_long', 'text_textfield', [ + 'text_processing' => FALSE, + ]], ['string', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 128, - ], - ], + 'text_processing' => FALSE, + 'max_length' => 128, + ]], ['string_long', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 4096, - ], - ], - ['text_long', 'text_textfield', ['text_processing' => TRUE]], + 'text_processing' => FALSE, + 'max_length' => 4096, + ]], + ['text_long', 'text_textfield', [ + 'text_processing' => TRUE, + ]], ['text', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 128, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 128, + ]], ['text_long', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 4096, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 4096, + ]], ['list_string', 'optionwidgets_buttons'], ['list_string', 'optionwidgets_select'], ['boolean', 'optionwidgets_onoff'], - ['text_long', 'text_textarea', ['text_processing' => TRUE]], - ['string_long', 'text_textarea', ['text_processing' => FALSE]], + ['text_long', 'text_textarea', [ + 'text_processing' => TRUE, + ]], + ['string_long', 'text_textarea', [ + 'text_processing' => FALSE, + ]], [NULL, 'undefined'], ]; } only in patch2: unchanged: --- a/core/modules/text/tests/src/Unit/Migrate/d6/TextFieldTest.php +++ b/core/modules/text/tests/src/Unit/Migrate/d6/TextFieldTest.php @@ -123,33 +123,37 @@ public function testProcessBooleanTextExplicitValues() { */ public function getFieldTypeProvider() { return [ - ['string_long', 'text_textfield', ['text_processing' => FALSE]], + ['string_long', 'text_textfield', [ + 'text_processing' => FALSE, + ]], ['string', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 128, - ], - ], + 'text_processing' => FALSE, + 'max_length' => 128, + ]], ['string_long', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 4096, - ], - ], - ['text_long', 'text_textfield', ['text_processing' => TRUE]], + 'text_processing' => FALSE, + 'max_length' => 4096, + ]], + ['text_long', 'text_textfield', [ + 'text_processing' => TRUE, + ]], ['text', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 128, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 128, + ]], ['text_long', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 4096, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 4096, + ]], ['list_string', 'optionwidgets_buttons'], ['list_string', 'optionwidgets_select'], ['boolean', 'optionwidgets_onoff'], - ['text_long', 'text_textarea', ['text_processing' => TRUE]], - ['string_long', 'text_textarea', ['text_processing' => FALSE]], + ['text_long', 'text_textarea', [ + 'text_processing' => TRUE, + ]], + ['string_long', 'text_textarea', [ + 'text_processing' => FALSE, + ]], [NULL, 'undefined'], ]; } only in patch2: unchanged: --- a/core/modules/text/tests/src/Unit/Plugin/migrate/cckfield/TextCckTest.php +++ b/core/modules/text/tests/src/Unit/Plugin/migrate/cckfield/TextCckTest.php @@ -123,33 +123,37 @@ public function testProcessBooleanTextExplicitValues() { */ public function getFieldTypeProvider() { return [ - ['string_long', 'text_textfield', ['text_processing' => FALSE]], + ['string_long', 'text_textfield', [ + 'text_processing' => FALSE, + ]], ['string', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 128, - ], - ], + 'text_processing' => FALSE, + 'max_length' => 128, + ]], ['string_long', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 4096, - ], - ], - ['text_long', 'text_textfield', ['text_processing' => TRUE]], + 'text_processing' => FALSE, + 'max_length' => 4096, + ]], + ['text_long', 'text_textfield', [ + 'text_processing' => TRUE, + ]], ['text', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 128, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 128, + ]], ['text_long', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 4096, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 4096, + ]], ['list_string', 'optionwidgets_buttons'], ['list_string', 'optionwidgets_select'], ['boolean', 'optionwidgets_onoff'], - ['text_long', 'text_textarea', ['text_processing' => TRUE]], - ['string_long', 'text_textarea', ['text_processing' => FALSE]], + ['text_long', 'text_textarea', [ + 'text_processing' => TRUE, + ]], + ['string_long', 'text_textarea', [ + 'text_processing' => FALSE, + ]], [NULL, 'undefined'], ]; } only in patch2: unchanged: --- a/core/modules/text/tests/src/Unit/Plugin/migrate/field/d6/TextFieldTest.php +++ b/core/modules/text/tests/src/Unit/Plugin/migrate/field/d6/TextFieldTest.php @@ -122,33 +122,37 @@ public function testProcessBooleanTextExplicitValues() { */ public function getFieldTypeProvider() { return [ - ['string_long', 'text_textfield', ['text_processing' => FALSE]], + ['string_long', 'text_textfield', [ + 'text_processing' => FALSE, + ]], ['string', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 128, - ], - ], + 'text_processing' => FALSE, + 'max_length' => 128, + ]], ['string_long', 'text_textfield', [ - 'text_processing' => FALSE, - 'max_length' => 4096, - ], - ], - ['text_long', 'text_textfield', ['text_processing' => TRUE]], + 'text_processing' => FALSE, + 'max_length' => 4096, + ]], + ['text_long', 'text_textfield', [ + 'text_processing' => TRUE, + ]], ['text', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 128, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 128, + ]], ['text_long', 'text_textfield', [ - 'text_processing' => TRUE, - 'max_length' => 4096, - ], - ], + 'text_processing' => TRUE, + 'max_length' => 4096, + ]], ['list_string', 'optionwidgets_buttons'], ['list_string', 'optionwidgets_select'], ['boolean', 'optionwidgets_onoff'], - ['text_long', 'text_textarea', ['text_processing' => TRUE]], - ['string_long', 'text_textarea', ['text_processing' => FALSE]], + ['text_long', 'text_textarea', [ + 'text_processing' => TRUE, + ]], + ['string_long', 'text_textarea', [ + 'text_processing' => FALSE, + ]], [NULL, 'undefined'], ]; } only in patch2: unchanged: --- a/core/modules/toolbar/toolbar.api.php +++ b/core/modules/toolbar/toolbar.api.php @@ -109,7 +109,7 @@ function hook_toolbar() { '#heading' => t('Shopping cart actions'), 'shopping_cart' => [ '#theme' => 'item_list', - '#items' => [/* An item list renderable array */ ], + '#items' => [ /* An item list renderable array */ ], ], ], '#weight' => 150, only in patch2: unchanged: --- a/core/modules/update/src/Form/UpdateManagerUpdate.php +++ b/core/modules/update/src/Form/UpdateManagerUpdate.php @@ -181,12 +181,10 @@ public function buildForm(array $form, FormStateInterface $form_state) { } // Use the project title for the tableselect checkboxes. - $entry['title'] = [ - 'data' => [ - '#title' => $entry['title'], - '#markup' => $entry['title'], - ], - ]; + $entry['title'] = ['data' => [ + '#title' => $entry['title'], + '#markup' => $entry['title'], + ]]; $entry['#attributes'] = ['class' => ['update-' . $type]]; // Drupal core needs to be upgraded manually. only in patch2: unchanged: --- a/core/modules/user/migration_templates/d7_user.yml +++ b/core/modules/user/migration_templates/d7_user.yml @@ -55,3 +55,4 @@ migration_dependencies: - user_picture_field_instance - user_picture_entity_display - user_picture_entity_form_display + - d7_field_instance only in patch2: unchanged: --- a/core/modules/user/src/Entity/User.php +++ b/core/modules/user/src/Entity/User.php @@ -9,7 +9,6 @@ use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Language\LanguageInterface; use Drupal\user\RoleInterface; -use Drupal\user\TimeZoneItem; use Drupal\user\UserInterface; /** @@ -499,7 +498,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { ->addPropertyConstraints('value', [ 'AllowedValues' => ['callback' => __CLASS__ . '::getAllowedTimezones'], ]); - $fields['timezone']->getItemDefinition()->setClass(TimeZoneItem::class); $fields['status'] = BaseFieldDefinition::create('boolean') ->setLabel(t('User status')) only in patch2: unchanged: --- a/core/modules/user/src/Form/UserPermissionsForm.php +++ b/core/modules/user/src/Form/UserPermissionsForm.php @@ -129,16 +129,14 @@ public function buildForm(array $form, FormStateInterface $form_state) { foreach ($permissions_by_provider as $provider => $permissions) { // Module name. - $form['permissions'][$provider] = [ - [ - '#wrapper_attributes' => [ - 'colspan' => count($role_names) + 1, - 'class' => ['module'], - 'id' => 'module-' . $provider, - ], - '#markup' => $this->moduleHandler->getName($provider), + $form['permissions'][$provider] = [[ + '#wrapper_attributes' => [ + 'colspan' => count($role_names) + 1, + 'class' => ['module'], + 'id' => 'module-' . $provider, ], - ]; + '#markup' => $this->moduleHandler->getName($provider), + ]]; foreach ($permissions as $perm => $perm_item) { // Fill in default values for the permission. $perm_item += [ only in patch2: unchanged: --- a/core/modules/user/src/Plugin/Search/UserSearch.php +++ b/core/modules/user/src/Plugin/Search/UserSearch.php @@ -162,15 +162,13 @@ public function execute() { * {@inheritdoc} */ public function getHelp() { - $help = [ - 'list' => [ - '#theme' => 'item_list', - '#items' => [ - $this->t('User search looks for user names and partial user names. Example: mar would match usernames mar, delmar, and maryjane.'), - $this->t('You can use * as a wildcard within your keyword. Example: m*r would match user names mar, delmar, and elementary.'), - ], + $help = ['list' => [ + '#theme' => 'item_list', + '#items' => [ + $this->t('User search looks for user names and partial user names. Example: mar would match usernames mar, delmar, and maryjane.'), + $this->t('You can use * as a wildcard within your keyword. Example: m*r would match user names mar, delmar, and elementary.'), ], - ]; + ]]; return $help; } only in patch2: unchanged: --- a/core/modules/user/src/Plugin/migrate/source/UserPictureInstance.php +++ b/core/modules/user/src/Plugin/migrate/source/UserPictureInstance.php @@ -29,8 +29,7 @@ public function initializeIterator() { 'file_directory' => $this->variableGet('user_picture_path', 'pictures'), 'max_filesize' => $this->variableGet('user_picture_file_size', '30') . 'KB', 'max_resolution' => $this->variableGet('user_picture_dimensions', '85x85'), - ], - ]); + ]]); } /** only in patch2: unchanged: --- a/core/modules/user/src/Tests/UserPasswordResetTest.php +++ b/core/modules/user/src/Tests/UserPasswordResetTest.php @@ -130,7 +130,7 @@ public function testUserPasswordReset() { // Verify that the password reset session has been destroyed. $this->drupalPostForm(NULL, $edit, t('Save')); - $this->assertText(t("Your current password is missing or incorrect; it's required to change the Password."), 'Password needed to make profile changes.'); + $this->assertText(t('Your current password is missing or incorrect; it\'s required to change the Password.'), 'Password needed to make profile changes.'); // Log out, and try to log in again using the same one-time link. $this->drupalLogout(); @@ -144,7 +144,7 @@ public function testUserPasswordReset() { $before = count($this->drupalGetMails(['id' => 'user_password_reset'])); $edit = ['name' => $this->account->getEmail()]; $this->drupalPostForm(NULL, $edit, t('Submit')); - $this->assertTrue(count($this->drupalGetMails(['id' => 'user_password_reset'])) === $before + 1, 'Email sent when requesting password reset using email address.'); + $this->assertTrue( count($this->drupalGetMails(['id' => 'user_password_reset'])) === $before + 1, 'Email sent when requesting password reset using email address.'); // Visit the user edit page without pass-reset-token and make sure it does // not cause an error. only in patch2: unchanged: --- a/core/modules/user/src/TimeZoneItem.php +++ /dev/null @@ -1,24 +0,0 @@ -installEntitySchema('user'); - } - - /** * Tests some of the methods. * * @see \Drupal\user\Entity\User::getRoles() @@ -73,22 +65,4 @@ public function testUserMethods() { $this->assertEqual([RoleInterface::AUTHENTICATED_ID, 'test_role_two'], $user->getRoles()); } - /** - * Tests that all user fields validate properly. - * - * @see \Drupal\Core\Field\FieldItemListInterface::generateSampleItems - * @see \Drupal\Core\Field\FieldItemInterface::generateSampleValue() - * @see \Drupal\Core\Entity\FieldableEntityInterface::validate() - */ - public function testUserValidation() { - $user = User::create([]); - foreach ($user as $field_name => $field) { - if (!in_array($field_name, ['uid'])) { - $user->$field_name->generateSampleItems(); - } - } - $violations = $user->validate(); - $this->assertFalse((bool) $violations->count()); - } - } only in patch2: unchanged: --- a/core/modules/user/tests/src/Kernel/UserValidationTest.php +++ b/core/modules/user/tests/src/Kernel/UserValidationTest.php @@ -40,7 +40,7 @@ protected function setUp() { * Tests user name validation. */ public function testUsernames() { - $test_cases = [// '' => array('', 'assert'), + $test_cases = [ // '' => array('', 'assert'), 'foo' => ['Valid username', 'assertNull'], 'FOO' => ['Valid username', 'assertNull'], 'Foo O\'Bar' => ['Valid username', 'assertNull'], only in patch2: unchanged: --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -78,7 +78,7 @@ function user_help($route_name, RouteMatchInterface $route_match) { $output .= '
    ' . t('Setting permissions') . '
    '; $output .= '
    ' . t('After creating roles, you can set permissions for each role on the Permissions page. Granting a permission allows users who have been assigned a particular role to perform an action on the site, such as viewing content, editing or creating a particular type of content, administering settings for a particular module, or using a particular function of the site (such as search).', [':permissions_user' => \Drupal::url('user.admin_permissions')]) . '
    '; $output .= '
    ' . t('Managing account settings') . '
    '; - $output .= '
    ' . t('The Account settings page allows you to manage settings for the displayed name of the Anonymous user role, personal contact forms, user registration settings, and account cancellation settings. On this page you can also manage settings for account personalization, and adapt the text for the email messages that users receive when they register or request a password recovery. You may also set which role is automatically assigned new permissions whenever a module is enabled (the Administrator role).', [':accounts' => \Drupal::url('entity.user.admin_form')]) . '
    '; + $output .= '
    ' . t('The Account settings page allows you to manage settings for the displayed name of the Anonymous user role, personal contact forms, user registration settings, and account cancellation settings. On this page you can also manage settings for account personalization, and adapt the text for the email messages that users receive when they register or request a password recovery. You may also set which role is automatically assigned new permissions whenever a module is enabled (the Administrator role).', [':accounts' => \Drupal::url('entity.user.admin_form')]) . '
    '; $output .= '
    ' . t('Managing user account fields') . '
    '; $output .= '
    ' . t('Because User accounts are an entity type, you can extend them by adding fields through the Manage fields tab on the Account settings page. By adding fields for e.g., a picture, a biography, or address, you can a create a custom profile for the users of the website. For background information on entities and fields, see the Field module help page.', [':field_help' => (\Drupal::moduleHandler()->moduleExists('field')) ? \Drupal::url('help.page', ['name' => 'field']) : '#', ':accounts' => \Drupal::url('entity.user.admin_form')]) . '
    '; $output .= '
    '; @@ -169,7 +169,7 @@ function user_entity_extra_field_info() { $fields['user']['user']['display']['member_for'] = [ 'label' => t('Member for'), - 'description' => t("User module 'member for' view element."), + 'description' => t('User module \'member for\' view element.'), 'weight' => 5, ]; only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/HandlerBase.php +++ b/core/modules/views/src/Plugin/views/HandlerBase.php @@ -350,84 +350,80 @@ public function submitGroupByForm(&$form, FormStateInterface $form_state) { * If a handler has 'extra options' it will get a little settings widget and * another form called extra_options. */ - public function hasExtraOptions() { - return FALSE; - } + public function hasExtraOptions() { return FALSE; } /** * Provide defaults for the handler. */ - public function defineExtraOptions(&$option) {} + public function defineExtraOptions(&$option) { } /** * Provide a form for setting options. */ - public function buildExtraOptionsForm(&$form, FormStateInterface $form_state) {} + public function buildExtraOptionsForm(&$form, FormStateInterface $form_state) { } /** * Validate the options form. */ - public function validateExtraOptionsForm($form, FormStateInterface $form_state) {} + public function validateExtraOptionsForm($form, FormStateInterface $form_state) { } /** * Perform any necessary changes to the form values prior to storage. * There is no need for this function to actually store the data. */ - public function submitExtraOptionsForm($form, FormStateInterface $form_state) {} + public function submitExtraOptionsForm($form, FormStateInterface $form_state) { } /** * Determine if a handler can be exposed. */ - public function canExpose() { - return FALSE; - } + public function canExpose() { return FALSE; } /** * Set new exposed option defaults when exposed setting is flipped * on. */ - public function defaultExposeOptions() {} + public function defaultExposeOptions() { } /** * Get information about the exposed form for the form renderer. */ - public function exposedInfo() {} + public function exposedInfo() { } /** * Render our chunk of the exposed handler form when selecting */ - public function buildExposedForm(&$form, FormStateInterface $form_state) {} + public function buildExposedForm(&$form, FormStateInterface $form_state) { } /** * Validate the exposed handler form */ - public function validateExposed(&$form, FormStateInterface $form_state) {} + public function validateExposed(&$form, FormStateInterface $form_state) { } /** * Submit the exposed handler form */ - public function submitExposed(&$form, FormStateInterface $form_state) {} + public function submitExposed(&$form, FormStateInterface $form_state) { } /** * Form for exposed handler options. */ - public function buildExposeForm(&$form, FormStateInterface $form_state) {} + public function buildExposeForm(&$form, FormStateInterface $form_state) { } /** * Validate the options form. */ - public function validateExposeForm($form, FormStateInterface $form_state) {} + public function validateExposeForm($form, FormStateInterface $form_state) { } /** * Perform any necessary changes to the form exposes prior to storage. * There is no need for this function to actually store the data. */ - public function submitExposeForm($form, FormStateInterface $form_state) {} + public function submitExposeForm($form, FormStateInterface $form_state) { } /** * Shortcut to display the expose/hide button. */ - public function showExposeButton(&$form, FormStateInterface $form_state) {} + public function showExposeButton(&$form, FormStateInterface $form_state) { } /** * Shortcut to display the exposed options form. @@ -481,7 +477,7 @@ public function query() { /** * {@inheritdoc} */ - public function postExecute(&$values) {} + public function postExecute(&$values) { } /** * Provides a unique placeholders for handlers. @@ -535,7 +531,7 @@ public function ensureMyTable() { /** * {@inheritdoc} */ - public function adminSummary() {} + public function adminSummary() { } /** * Determine if this item is 'exposed', meaning it provides form elements @@ -550,32 +546,24 @@ public function isExposed() { /** * Returns TRUE if the exposed filter works like a grouped filter. */ - public function isAGroup() { - return FALSE; - } + public function isAGroup() { return FALSE; } /** * Define if the exposed input has to be submitted multiple times. * This is TRUE when exposed filters grouped are using checkboxes as * widgets. */ - public function multipleExposedInput() { - return FALSE; - } + public function multipleExposedInput() { return FALSE; } /** * Take input from exposed handlers and assign to this handler, if necessary. */ - public function acceptExposedInput($input) { - return TRUE; - } + public function acceptExposedInput($input) { return TRUE; } /** * If set to remember exposed input in the session, store it there. */ - public function storeExposedInput($input, $status) { - return TRUE; - } + public function storeExposedInput($input, $status) { return TRUE; } /** * {@inheritdoc} @@ -599,9 +587,7 @@ public function getJoin() { /** * {@inheritdoc} */ - public function validate() { - return []; - } + public function validate() { return []; } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/PluginBase.php +++ b/core/modules/views/src/Plugin/views/PluginBase.php @@ -155,9 +155,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o * @return array * Returns the options of this handler/plugin. */ - protected function defineOptions() { - return []; - } + protected function defineOptions() { return []; } /** * Fills up the options of the plugin with defaults. @@ -273,17 +271,17 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ - public function submitOptionsForm(&$form, FormStateInterface $form_state) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ - public function query() {} + public function query() { } /** * {@inheritdoc} @@ -295,9 +293,7 @@ public function themeFunctions() { /** * {@inheritdoc} */ - public function validate() { - return []; - } + public function validate() { return []; } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/argument_default/ArgumentDefaultPluginBase.php +++ b/core/modules/views/src/Plugin/views/argument_default/ArgumentDefaultPluginBase.php @@ -42,7 +42,7 @@ * * This needs to be overridden by every default argument handler to properly do what is needed. */ - public function getArgument() {} + public function getArgument() { } /** * Sets the parent argument this plugin is associated with. @@ -58,32 +58,28 @@ public function setArgument(ArgumentPluginBase $argument) { * Retrieve the options when this is a new access * control plugin */ - protected function defineOptions() { - return []; - } + protected function defineOptions() { return []; } /** * Provide the default form for setting options. */ - public function buildOptionsForm(&$form, FormStateInterface $form_state) {} + public function buildOptionsForm(&$form, FormStateInterface $form_state) { } /** * Provide the default form form for validating options */ - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } /** * Provide the default form form for submitting options */ - public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) { } /** * Determine if the administrator has the privileges to use this * plugin */ - public function access() { - return TRUE; - } + public function access() { return TRUE; } /** * If we don't have access to the form but are showing it anyway, ensure that only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php +++ b/core/modules/views/src/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php @@ -53,31 +53,27 @@ public function setArgument(ArgumentPluginBase $argument) { /** * Retrieves the options when this is a new access control plugin. */ - protected function defineOptions() { - return []; - } + protected function defineOptions() { return []; } /** * Provides the default form for setting options. */ - public function buildOptionsForm(&$form, FormStateInterface $form_state) {} + public function buildOptionsForm(&$form, FormStateInterface $form_state) { } /** * Provides the default form for validating options. */ - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } /** * Provides the default form for submitting options. */ - public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state, &$options = []) { } /** * Determines if the administrator has the privileges to use this plugin. */ - public function access() { - return TRUE; - } + public function access() { return TRUE; } /** * Blocks user input when the form is shown but we don´t have access. @@ -96,9 +92,7 @@ protected function checkAccess(&$form, $option_name) { /** * Performs validation for a given argument. */ - public function validateArgument($arg) { - return TRUE; - } + public function validateArgument($arg) { return TRUE; } /** * Processes the summary arguments for displaying. @@ -108,7 +102,7 @@ public function validateArgument($arg) { * for a faster query. But there are use cases where you want to use * the old value again, for example the summary. */ - public function processSummaryArguments(&$args) {} + public function processSummaryArguments(&$args) { } /** * Returns a context definition for this argument. @@ -117,7 +111,7 @@ public function processSummaryArguments(&$args) {} * A context definition that represents the argument or NULL if that is * not possible. */ - public function getContextDefinition() {} + public function getContextDefinition() { } } only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php +++ b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php @@ -171,7 +171,7 @@ public function cacheFlush() { * All of the cached result data will be available in $view->result, as well, * so all ids used in the query should be discoverable. */ - public function postRender(&$output) {} + public function postRender(&$output) { } /** * Calculates and sets a cache ID used for the result cache. @@ -190,7 +190,7 @@ public function generateResultsKey() { $query = clone $build_info[$index]; $query->preExecute(); $build_info[$index] = [ - 'query' => (string) $query, + 'query' => (string)$query, 'arguments' => $query->getArguments(), ]; } only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/display/DefaultDisplay.php +++ b/core/modules/views/src/Plugin/views/display/DefaultDisplay.php @@ -28,9 +28,7 @@ class DefaultDisplay extends DisplayPluginBase { * Determine if this display is the 'default' display which contains * fallback settings */ - public function isDefaultDisplay() { - return TRUE; - } + public function isDefaultDisplay() { return TRUE; } /** * The default execute handler fully renders the view. only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php +++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php @@ -234,9 +234,7 @@ public function destroy() { /** * {@inheritdoc} */ - public function isDefaultDisplay() { - return FALSE; - } + public function isDefaultDisplay() { return FALSE; } /** * {@inheritdoc} @@ -396,7 +394,7 @@ public function usesAreas() { /** * {@inheritdoc} */ - public function attachTo(ViewExecutable $view, $display_id, array &$build) {} + public function attachTo(ViewExecutable $view, $display_id, array &$build) { } /** * {@inheritdoc} @@ -667,23 +665,17 @@ protected function defineOptions() { /** * {@inheritdoc} */ - public function hasPath() { - return FALSE; - } + public function hasPath() { return FALSE; } /** * {@inheritdoc} */ - public function usesLinkDisplay() { - return !$this->hasPath(); - } + public function usesLinkDisplay() { return !$this->hasPath(); } /** * {@inheritdoc} */ - public function usesExposedFormInBlock() { - return $this->hasPath(); - } + public function usesExposedFormInBlock() { return $this->hasPath(); } /** * {@inheritdoc} @@ -2059,7 +2051,7 @@ public function query() { /** * {@inheritdoc} */ - public function renderFilters() {} + public function renderFilters() { } /** * {@inheritdoc} @@ -2333,7 +2325,7 @@ public function getCacheMetadata() { /** * {@inheritdoc} */ - public function execute() {} + public function execute() { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/display_extender/DisplayExtenderPluginBase.php +++ b/core/modules/views/src/Plugin/views/display_extender/DisplayExtenderPluginBase.php @@ -36,45 +36,45 @@ /** * Provide a form to edit options for this plugin. */ - public function defineOptionsAlter(&$options) {} + public function defineOptionsAlter(&$options) { } /** * Provide a form to edit options for this plugin. */ - public function buildOptionsForm(&$form, FormStateInterface $form_state) {} + public function buildOptionsForm(&$form, FormStateInterface $form_state) { } /** * Validate the options form. */ - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } /** * Handle any special handling on the validate form. */ - public function submitOptionsForm(&$form, FormStateInterface $form_state) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state) { } /** * Set up any variables on the view prior to execution. */ - public function preExecute() {} + public function preExecute() { } /** * Inject anything into the query that the display_extender handler needs. */ - public function query() {} + public function query() { } /** * Provide the default summary for options in the views UI. * * This output is returned as an array. */ - public function optionsSummary(&$categories, &$options) {} + public function optionsSummary(&$categories, &$options) { } /** * Static member function to list which sections are defaultable * and what items each section contains. */ - public function defaultableSections(&$sections, $section = NULL) {} + public function defaultableSections(&$sections, $section = NULL) { } } only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php +++ b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php @@ -179,22 +179,22 @@ public function query() { /** * {@inheritdoc} */ - public function preRender($values) {} + public function preRender($values) { } /** * {@inheritdoc} */ - public function postRender(&$output) {} + public function postRender(&$output) { } /** * {@inheritdoc} */ - public function preExecute() {} + public function preExecute() { } /** * {@inheritdoc} */ - public function postExecute() {} + public function postExecute() { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php +++ b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php @@ -1105,7 +1105,7 @@ public function adminSummary() { /** * {@inheritdoc} */ - public function preRender(&$values) {} + public function preRender(&$values) { } /** * {@inheritdoc} @@ -1713,14 +1713,14 @@ protected function getTokenValuesRecursive(array $array, array $parent_keys = [] * field ID is terms, then the tokens might be {{ terms__tid }} and * {{ terms__name }}. */ - protected function addSelfTokens(&$tokens, $item) {} + protected function addSelfTokens(&$tokens, $item) { } /** * Document any special tokens this field might use for itself. * * @see addSelfTokens() */ - protected function documentSelfTokens(&$tokens) {} + protected function documentSelfTokens(&$tokens) { } /** * {@inheritdoc} only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php +++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php @@ -131,11 +131,9 @@ protected function defineOptions() { 'required' => ['default' => FALSE], 'remember' => ['default' => FALSE], 'multiple' => ['default' => FALSE], - 'remember_roles' => [ - 'default' => [ - RoleInterface::AUTHENTICATED_ID => RoleInterface::AUTHENTICATED_ID, - ], - ], + 'remember_roles' => ['default' => [ + RoleInterface::AUTHENTICATED_ID => RoleInterface::AUTHENTICATED_ID, + ]], ], ]; @@ -176,9 +174,7 @@ public function adminSummary() { /** * Determine if a filter can be exposed. */ - public function canExpose() { - return TRUE; - } + public function canExpose() { return TRUE; } /** * Determine if a filter can be converted into a group. @@ -306,20 +302,18 @@ protected function operatorForm(&$form, FormStateInterface $form_state) { * Provide a list of options for the default operator form. * Should be overridden by classes that don't override operatorForm */ - public function operatorOptions() { - return []; - } + public function operatorOptions() { return []; } /** * Validate the operator form. */ - protected function operatorValidate($form, FormStateInterface $form_state) {} + protected function operatorValidate($form, FormStateInterface $form_state) { } /** * Perform any necessary changes to the form values prior to storage. * There is no need for this function to actually store the data. */ - public function operatorSubmit($form, FormStateInterface $form_state) {} + public function operatorSubmit($form, FormStateInterface $form_state) { } /** * Shortcut to display the value form. @@ -347,13 +341,13 @@ protected function valueForm(&$form, FormStateInterface $form_state) { /** * Validate the options form. */ - protected function valueValidate($form, FormStateInterface $form_state) {} + protected function valueValidate($form, FormStateInterface $form_state) { } /** * Perform any necessary changes to the form values prior to storage. * There is no need for this function to actually store the data. */ - protected function valueSubmit($form, FormStateInterface $form_state) {} + protected function valueSubmit($form, FormStateInterface $form_state) { } /** * Shortcut to display the exposed options form. only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php +++ b/core/modules/views/src/Plugin/views/filter/GroupByNumeric.php @@ -52,8 +52,6 @@ public function adminLabel($short = FALSE) { return $this->getField(parent::adminLabel($short)); } - public function canGroup() { - return FALSE; - } + public function canGroup() { return FALSE; } } only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php +++ b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php @@ -114,12 +114,12 @@ public function getPagerId() { /** * Provide the default form form for validating options */ - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } /** * Provide the default form form for submitting options */ - public function submitOptionsForm(&$form, FormStateInterface $form_state) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state) { } /** * Return a string to display as the clickable title for the @@ -175,22 +175,22 @@ public function updatePageInfo() { * * This is called during the build phase and can directly modify the query. */ - public function query() {} + public function query() { } /** * Perform any needed actions just prior to the query executing. */ - public function preExecute(&$query) {} + public function preExecute(&$query) { } /** * Perform any needed actions just after the query executing. */ - public function postExecute(&$result) {} + public function postExecute(&$result) { } /** * Perform any needed actions just before rendering. */ - public function preRender(&$result) {} + public function preRender(&$result) { } /** * Return the renderable array of the pager. @@ -201,7 +201,7 @@ public function preRender(&$result) {} * Any extra GET parameters that should be retained, such as exposed * input. */ - public function render($input) {} + public function render($input) { } /** * Determine if there are more records available. @@ -213,11 +213,11 @@ public function hasMoreRecords() { && $this->total_items > (intval($this->current_page) + 1) * $this->getItemsPerPage(); } - public function exposedFormAlter(&$form, FormStateInterface $form_state) {} + public function exposedFormAlter(&$form, FormStateInterface $form_state) { } - public function exposedFormValidate(&$form, FormStateInterface $form_state) {} + public function exposedFormValidate(&$form, FormStateInterface $form_state) { } - public function exposedFormSubmit(&$form, FormStateInterface $form_state, &$exclude) {} + public function exposedFormSubmit(&$form, FormStateInterface $form_state, &$exclude) { } public function usesExposed() { return FALSE; only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/query/QueryPluginBase.php +++ b/core/modules/views/src/Plugin/views/query/QueryPluginBase.php @@ -54,7 +54,7 @@ * @param $get_count * Provide a countquery if this is true, otherwise provide a normal query. */ - public function query($get_count = FALSE) {} + public function query($get_count = FALSE) { } /** * Let modules modify the query just prior to finalizing it. @@ -62,7 +62,7 @@ public function query($get_count = FALSE) {} * @param view $view * The view which is executed. */ - public function alter(ViewExecutable $view) {} + public function alter(ViewExecutable $view) { } /** * Builds the necessary info to execute the query. @@ -70,7 +70,7 @@ public function alter(ViewExecutable $view) {} * @param view $view * The view which is executed. */ - public function build(ViewExecutable $view) {} + public function build(ViewExecutable $view) { } /** * Executes the query and fills the associated view object with according @@ -85,7 +85,7 @@ public function build(ViewExecutable $view) {} * @param view $view * The view which is executed. */ - public function execute(ViewExecutable $view) {} + public function execute(ViewExecutable $view) { } /** * Add a signature to the query, if such a thing is feasible. @@ -96,18 +96,18 @@ public function execute(ViewExecutable $view) {} * @param view $view * The view which is executed. */ - public function addSignature(ViewExecutable $view) {} + public function addSignature(ViewExecutable $view) { } /** * Get aggregation info for group by queries. * * If NULL, aggregation is not allowed. */ - public function getAggregationInfo() {} + public function getAggregationInfo() { } - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } - public function submitOptionsForm(&$form, FormStateInterface $form_state) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state) { } public function summaryTitle() { return $this->t('Settings'); only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/row/RowPluginBase.php +++ b/core/modules/views/src/Plugin/views/row/RowPluginBase.php @@ -122,13 +122,13 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) { /** * Validate the options form. */ - public function validateOptionsForm(&$form, FormStateInterface $form_state) {} + public function validateOptionsForm(&$form, FormStateInterface $form_state) { } /** * Perform any necessary changes to the form values prior to storage. * There is no need for this function to actually store the data. */ - public function submitOptionsForm(&$form, FormStateInterface $form_state) {} + public function submitOptionsForm(&$form, FormStateInterface $form_state) { } /** * {@inheritdoc} @@ -151,7 +151,7 @@ public function query() { * @param $result * The full array of results from the query. */ - public function preRender($result) {} + public function preRender($result) { } /** * Render a row object. This usually passes through to a theme template only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/sort/SortPluginBase.php +++ b/core/modules/views/src/Plugin/views/sort/SortPluginBase.php @@ -28,9 +28,7 @@ /** * Determine if a sort can be exposed. */ - public function canExpose() { - return TRUE; - } + public function canExpose() { return TRUE; } /** * Called to add the sort to a query. @@ -177,9 +175,9 @@ protected function showSortForm(&$form, FormStateInterface $form_state) { } } - protected function sortValidate(&$form, FormStateInterface $form_state) {} + protected function sortValidate(&$form, FormStateInterface $form_state) { } - public function sortSubmit(&$form, FormStateInterface $form_state) {} + public function sortSubmit(&$form, FormStateInterface $form_state) { } /** * Provide a list of options for the default sort form. only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/style/StylePluginBase.php +++ b/core/modules/views/src/Plugin/views/style/StylePluginBase.php @@ -413,15 +413,13 @@ public function wizardSubmit(&$form, FormStateInterface $form_state, WizardInter * interfere with the sorts. If so it should build; if it returns * any non-TRUE value, normal sorting will NOT be added to the query. */ - public function buildSort() { - return TRUE; - } + public function buildSort() { return TRUE; } /** * Called by the view builder to let the style build a second set of * sorts that will come after any other sorts in the view. */ - public function buildSortPost() {} + public function buildSortPost() { } /** * Allow the style to do stuff before each row is rendered. only in patch2: unchanged: --- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php +++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php @@ -3,7 +3,6 @@ namespace Drupal\views\Plugin\views\wizard; use Drupal\Component\Utility\NestedArray; -use Drupal\Core\Entity\EntityPublishedInterface; use Drupal\Core\Entity\EntityTypeBundleInfoInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\UrlGeneratorTrait; @@ -141,7 +140,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition $entity_types = \Drupal::entityManager()->getDefinitions(); foreach ($entity_types as $entity_type_id => $entity_type) { - if (in_array($this->base_table, [$entity_type->getBaseTable(), $entity_type->getDataTable(), $entity_type->getRevisionTable(), $entity_type->getRevisionDataTable()], TRUE)) { + if ($this->base_table == $entity_type->getBaseTable() || $this->base_table == $entity_type->getDataTable()) { $this->entityType = $entity_type; $this->entityTypeId = $entity_type_id; } @@ -166,21 +165,6 @@ public function getCreatedColumn() { public function getFilters() { $filters = []; - // Add a default filter on the publishing status field, if available. - if ($this->entityType && is_subclass_of($this->entityType->getClass(), EntityPublishedInterface::class)) { - $field_name = $this->entityType->getKey('published'); - $this->filters = [ - $field_name => [ - 'value' => TRUE, - 'table' => $this->base_table, - 'field' => $field_name, - 'plugin_id' => 'boolean', - 'entity_type' => $this->entityTypeId, - 'entity_field' => $field_name, - ] - ] + $this->filters; - } - $default = $this->filter_defaults; foreach ($this->filters as $name => $info) { only in patch2: unchanged: --- a/core/modules/views/src/Tests/FieldApiDataTest.php +++ b/core/modules/views/src/Tests/FieldApiDataTest.php @@ -335,7 +335,8 @@ public function testEntityFieldFilter() { // Filter by 'field name 2: fr', which doesn't exist. $view->setDisplay('embed_4'); $this->executeView($view); - $expected = []; + $expected = [ + ]; $this->assertIdenticalResultset($view, $expected, $map); $view->destroy(); only in patch2: unchanged: --- a/core/modules/views/src/Tests/Plugin/DisplayFeedTest.php +++ b/core/modules/views/src/Tests/Plugin/DisplayFeedTest.php @@ -45,12 +45,10 @@ public function testFeedOutput() { $node_title = 'This "cool" & "neat" article\'s title'; $node = $this->drupalCreateNode([ 'title' => $node_title, - 'body' => [ - 0 => [ - 'value' => 'A paragraph', - 'format' => filter_default_format(), - ], - ], + 'body' => [0 => [ + 'value' => 'A paragraph', + 'format' => filter_default_format(), + ]], ]); // Test the site name setting. @@ -105,12 +103,10 @@ public function testFeedFieldOutput() { $node_title = 'This "cool" & "neat" article\'s title'; $this->drupalCreateNode([ 'title' => $node_title, - 'body' => [ - 0 => [ - 'value' => 'A paragraph', - 'format' => filter_default_format(), - ], - ], + 'body' => [0 => [ + 'value' => 'A paragraph', + 'format' => filter_default_format(), + ]], ]); $this->drupalGet('test-feed-display-fields.xml'); only in patch2: unchanged: --- a/core/modules/views/src/Tests/ViewTestData.php +++ b/core/modules/views/src/Tests/ViewTestData.php @@ -80,8 +80,7 @@ public static function schemaDefinition() { 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, - 'default' => 0, - ], + 'default' => 0], 'job' => [ 'description' => "The person's job", 'type' => 'varchar', only in patch2: unchanged: --- a/core/modules/views/src/ViewExecutable.php +++ b/core/modules/views/src/ViewExecutable.php @@ -1758,7 +1758,7 @@ public function access($displays = NULL, $account = NULL) { // We can't use choose_display() here because that function // calls this one. - $displays = (array) $displays; + $displays = (array)$displays; foreach ($displays as $display_id) { if ($this->displayHandlers->has($display_id)) { if (($display = $this->displayHandlers->get($display_id)) && $display->access($account)) { only in patch2: unchanged: --- a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php +++ b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php @@ -278,7 +278,8 @@ public function testTextInputRequired() { */ public function testExposedSortAndItemsPerPage() { for ($i = 0; $i < 50; $i++) { - $entity = EntityTest::create([]); + $entity = EntityTest::create([ + ]); $entity->save(); } $contexts = [ only in patch2: unchanged: --- a/core/modules/views/tests/src/Functional/Plugin/PagerTest.php +++ b/core/modules/views/tests/src/Functional/Plugin/PagerTest.php @@ -93,7 +93,7 @@ public function testStorePagerSettings() { $this->assertText('20 items'); // add new display and test the settings again, by override it. - $edit = []; + $edit = [ ]; // Add a display and override the pager settings. $this->drupalPostForm('admin/structure/views/view/test_store_pager_settings/edit', $edit, t('Add Page')); $edit = [ only in patch2: unchanged: --- a/core/modules/views/tests/src/Functional/Plugin/ViewsBulkTest.php +++ b/core/modules/views/tests/src/Functional/Plugin/ViewsBulkTest.php @@ -70,9 +70,9 @@ public function testBulkSelection() { // Create third node now that the admin overview has been rendered. $node_3 = $this->drupalCreateNode([ - 'type' => 'page', - 'title' => 'The third node', - ]); + 'type' => 'page', + 'title' => 'The third node'] + ); // Now click 'Apply to selected items' and assert the second node is // selected on the confirm form. only in patch2: unchanged: --- a/core/modules/views/tests/src/Kernel/Handler/FilterNumericTest.php +++ b/core/modules/views/tests/src/Kernel/Handler/FilterNumericTest.php @@ -288,7 +288,8 @@ public function testFilterNumericEmpty() { ]); $this->executeView($view); - $resultset = []; + $resultset = [ + ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); $view->destroy(); @@ -344,7 +345,8 @@ public function testFilterNumericExposedGroupedEmpty() { $this->container->get('router.builder')->rebuild(); $this->executeView($view); - $resultset = []; + $resultset = [ + ]; $this->assertIdenticalResultset($view, $resultset, $this->columnMap); } only in patch2: unchanged: --- a/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/HandlerBaseTest.php @@ -73,22 +73,18 @@ public function testGetEntityTypeForFieldWithRelationship() { $this->viewsData->expects($this->any()) ->method('get') ->willReturnMap([ - [ - 'test_entity_type_table', - [ - 'table' => ['entity type' => 'test_entity_type'], - 'test_relationship' => [ - 'relationship' => [ - 'base' => 'test_other_entity_type_table', - 'base field' => 'id', - ], + ['test_entity_type_table', [ + 'table' => ['entity type' => 'test_entity_type'], + 'test_relationship' => [ + 'relationship' => [ + 'base' => 'test_other_entity_type_table', + 'base field' => 'id', ], ], - ], - [ - 'test_other_entity_type_table', - ['table' => ['entity type' => 'test_other_entity_type']], - ], + ]], + ['test_other_entity_type_table', [ + 'table' => ['entity type' => 'test_other_entity_type'], + ]], ]); $handler->setViewsData($this->viewsData); only in patch2: unchanged: --- a/core/modules/views/tests/src/Unit/PluginBaseTest.php +++ b/core/modules/views/tests/src/Unit/PluginBaseTest.php @@ -79,7 +79,8 @@ public function providerTestUnpackOptions() { 'storage' => [ 'key' => 'value', ], - 'options' => [], + 'options' => [ + ], 'definition' => [ 'key' => ['default' => 'value2'], ], @@ -171,7 +172,9 @@ public function providerTestUnpackOptions() { ], 'definition' => [ 'key0' => ['default' => 'value0'], - 'key1' => ['contains' => ['key1:1' => ['default' => 'value1:1']]], + 'key1' => ['contains' => [ + 'key1:1' => ['default' => 'value1:1'], + ]], ], 'expected' => [ 'key0' => 'value', @@ -185,29 +188,29 @@ public function providerTestUnpackOptions() { 'key2' => [ 'key2:1' => [ 'key2:1:1' => 'value0', - 'key2:1:2' => ['key2:1:2:1' => 'value1'], + 'key2:1:2' => [ + 'key2:1:2:1' => 'value1', + ], ], ], ], 'definition' => [ - 'key2' => [ - 'contains' => [ - 'key2:1' => [ - 'contains' => [ - 'key2:1:1' => ['default' => 'value2:1:2:1'], - 'key2:1:2' => [ - 'contains' => ['key2:1:2:1' => ['default' => 'value2:1:2:1']], - ], - ], - ], - ], - ], + 'key2' => ['contains' => [ + 'key2:1' => ['contains' => [ + 'key2:1:1' => ['default' => 'value2:1:2:1'], + 'key2:1:2' => ['contains' => [ + 'key2:1:2:1' => ['default' => 'value2:1:2:1'], + ]], + ]], + ]], ], 'expected' => [ 'key2' => [ 'key2:1' => [ 'key2:1:1' => 'value0', - 'key2:1:2' => ['key2:1:2:1' => 'value1'], + 'key2:1:2' => [ + 'key2:1:2:1' => 'value1', + ], ], ], ], @@ -258,12 +261,10 @@ public function providerTestSetOptionDefault() { 'storage' => [], 'definition' => [ 'key' => ['default' => 'value'], - 'key2' => [ - 'contains' => [ - 'key2:1' => ['default' => 'value2:1'], - 'key2:2' => ['default' => 'value2:2'], - ], - ], + 'key2' => ['contains' => [ + 'key2:1' => ['default' => 'value2:1'], + 'key2:2' => ['default' => 'value2:2'], + ]], ], 'expected' => [ 'key' => 'value', only in patch2: unchanged: --- a/core/modules/views/tests/src/Unit/ViewExecutableTest.php +++ b/core/modules/views/tests/src/Unit/ViewExecutableTest.php @@ -364,14 +364,12 @@ public function testAddHandler() { ->method('setOption') ->with($this->callback(function($argument) { return $argument; - }), [ - 'test_field' => [ - 'id' => 'test_field', - 'table' => 'test_entity', - 'field' => 'test_field', - 'plugin_id' => 'standard', - ], - ]); + }), ['test_field' => [ + 'id' => 'test_field', + 'table' => 'test_entity', + 'field' => 'test_field', + 'plugin_id' => 'standard', + ]]); } foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) { @@ -407,16 +405,14 @@ public function testAddHandlerWithEntityField() { ->method('setOption') ->with($this->callback(function($argument) { return $argument; - }), [ - 'test_field' => [ - 'id' => 'test_field', - 'table' => 'test_entity', - 'field' => 'test_field', - 'entity_type' => 'test_entity_type', - 'entity_field' => 'test_field', - 'plugin_id' => 'standard', - ], - ]); + }), ['test_field' => [ + 'id' => 'test_field', + 'table' => 'test_entity', + 'field' => 'test_field', + 'entity_type' => 'test_entity_type', + 'entity_field' => 'test_field', + 'plugin_id' => 'standard', + ]]); } foreach (['field', 'filter', 'argument', 'sort'] as $handler_type) { only in patch2: unchanged: --- a/core/modules/views/views.module +++ b/core/modules/views/views.module @@ -116,12 +116,8 @@ function views_theme($existing, $type, $theme, $path) { 'row' => ['view' => NULL, 'options' => NULL, 'row' => NULL, 'field_alias' => NULL], 'exposed_form' => ['view' => NULL, 'options' => NULL], 'pager' => [ - 'view' => NULL, - 'options' => NULL, - 'tags' => [], - 'quantity' => 9, - 'element' => 0, - 'parameters' => [], + 'view' => NULL, 'options' => NULL, + 'tags' => [], 'quantity' => 9, 'element' => 0, 'parameters' => [] ], ]; only in patch2: unchanged: --- a/core/modules/views_ui/src/Form/Ajax/Rearrange.php +++ b/core/modules/views_ui/src/Form/Ajax/Rearrange.php @@ -125,13 +125,11 @@ public function buildForm(array $form, FormStateInterface $form_state) { '#attributes' => ['class' => ['views-remove-checkbox']], '#default_value' => 0, '#suffix' => \Drupal::l(SafeMarkup::format('@text', ['@text' => $this->t('Remove')]), - Url::fromRoute('', [], [ - 'attributes' => [ - 'id' => 'views-remove-link-' . $id, - 'class' => ['views-hidden', 'views-button-remove', 'views-remove-link'], - 'alt' => $this->t('Remove this item'), - 'title' => $this->t('Remove this item'), - ], + Url::fromRoute('', [], ['attributes' => [ + 'id' => 'views-remove-link-' . $id, + 'class' => ['views-hidden', 'views-button-remove', 'views-remove-link'], + 'alt' => $this->t('Remove this item'), + 'title' => $this->t('Remove this item')], ]) ), ]; only in patch2: unchanged: --- a/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php +++ b/core/modules/views_ui/src/Tests/ExposedFormUITest.php @@ -1,6 +1,6 @@ drupalCreateContentType(['type' => 'article']); $this->drupalCreateContentType(['type' => 'page']); @@ -61,8 +61,8 @@ public function testExposedAdminUi() { // The first time the filter UI is displayed, the operator and the // value forms should be shown. - $this->assertFieldById('edit-options-operator-in', 'in', 'Operator In exists'); - $this->assertFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In exists'); + $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists'); + $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists'); $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists'); $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists'); @@ -72,8 +72,8 @@ public function testExposedAdminUi() { $this->helperButtonHasLabel('edit-options-expose-button-button', t('Hide filter')); // After exposing the filter, Operator and Value should be still here. - $this->assertFieldById('edit-options-operator-in', 'in', 'Operator In exists'); - $this->assertFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In exists'); + $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists'); + $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists'); $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists'); $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists'); @@ -98,8 +98,8 @@ public function testExposedAdminUi() { $this->drupalPostForm(NULL, [], t('Hide filter')); // After Un-exposing the filter, Operator and Value should be shown again. - $this->assertFieldById('edit-options-operator-in', 'in', 'Operator In exists after hide filter'); - $this->assertFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In exists after hide filter'); + $this->assertFieldById('edit-options-operator-in', '', 'Operator In exists after hide filter'); + $this->assertFieldById('edit-options-operator-not-in', '', 'Operator Not In exists after hide filter'); $this->assertFieldById('edit-options-value-page', '', 'Checkbox for Page exists after hide filter'); $this->assertFieldById('edit-options-value-article', '', 'Checkbox for Article exists after hide filter'); @@ -108,7 +108,7 @@ public function testExposedAdminUi() { $this->drupalPostForm('admin/structure/views/nojs/handler/test_exposed_admin_ui/default/sort/created', $edit, t('Expose sort')); // Check the label of the expose button. $this->helperButtonHasLabel('edit-options-expose-button-button', t('Hide sort')); - $this->assertFieldById('edit-options-expose-label', 'Authored on', 'Make sure a label field is shown'); + $this->assertFieldById('edit-options-expose-label', '', 'Make sure a label field is shown'); // Test adding a new exposed sort criteria. $view_id = $this->randomView()['id']; @@ -150,8 +150,8 @@ public function testGroupedFilterAdminUi() { // After click on 'Grouped Filters', the standard operator and value should // not be displayed. - $this->assertNoFieldById('edit-options-operator-in', 'in', 'Operator In not exists'); - $this->assertNoFieldById('edit-options-operator-not-in', 'not in', 'Operator Not In not exists'); + $this->assertNoFieldById('edit-options-operator-in', '', 'Operator In not exists'); + $this->assertNoFieldById('edit-options-operator-not-in', '', 'Operator Not In not exists'); $this->assertNoFieldById('edit-options-value-page', '', 'Checkbox for Page not exists'); $this->assertNoFieldById('edit-options-value-article', '', 'Checkbox for Article not exists'); only in patch2: unchanged: --- a/core/modules/workflows/src/Plugin/WorkflowTypeBase.php +++ b/core/modules/workflows/src/Plugin/WorkflowTypeBase.php @@ -263,7 +263,7 @@ public function getTransitions(array $transition_ids = NULL) { } /** - * Sort states or transitions by weight, label, and key. + * Sort states or transitions by weight and label. * * @param \Drupal\workflows\StateInterface[]|\Drupal\workflows\TransitionInterface[] $objects * Objects to multi-sort. @@ -273,27 +273,15 @@ public function getTransitions(array $transition_ids = NULL) { */ protected static function labelWeightMultisort($objects) { if (count($objects) > 1) { - // Separate weights, labels, and keys into arrays. $weights = $labels = []; - $keys = array_keys($objects); foreach ($objects as $id => $object) { $weights[$id] = $object->weight(); $labels[$id] = $object->label(); } - // Sort weights, labels, and keys in the same order as each other. array_multisort( - // Use the numerical weight as the primary sort. $weights, SORT_NUMERIC, SORT_ASC, - // When objects have the same weight, sort them alphabetically by label. - $labels, SORT_NATURAL, SORT_ASC, - // Ensure that the keys (the object IDs) are sorted in the same order as - // the weights. - $keys + $labels, SORT_NATURAL, SORT_ASC ); - // Combine keys and weights to make sure the weights are keyed with the - // correct keys. - $weights = array_combine($keys, $weights); - // Return the objects sorted by weight. return array_replace($weights, $objects); } return $objects; only in patch2: unchanged: --- a/core/modules/workflows/src/WorkflowListBuilder.php +++ b/core/modules/workflows/src/WorkflowListBuilder.php @@ -93,7 +93,7 @@ public function render() { $build = parent::render(); $workflow_types_count = count($this->workflowTypeManager->getDefinitions()); if ($workflow_types_count === 0) { - $build['table']['#empty'] = $this->t('There are no workflow types available. In order to create workflows you need to install a module that provides a workflow type. For example, the Content Moderation module provides a workflow type that enables workflows for content entities.', [':content-moderation' => '/admin/modules#module-content-moderation']); + $build['table']['#empty'] = $this->t('There are no workflow types available. In order to create workflows you need to install a module that provides a workflow type. For example, the Content Moderation module provides a workflow type that enables workflows for content entities.'); } return $build; } only in patch2: unchanged: --- a/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeStateForm.php +++ b/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeStateForm.php @@ -22,7 +22,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta '#type' => 'textfield', '#title' => $this->t('Extra'), '#description' => $this->t('Extra information added to state'), - '#default_value' => $state && isset($configuration['states'][$state->id()]['extra']) ? $configuration['states'][$state->id()]['extra'] : '', + '#default_value' => isset($configuration['states'][$state->id()]['extra']) ? $configuration['states'][$state->id()]['extra'] : '', ]; return $form; } only in patch2: unchanged: --- a/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeTransitionForm.php +++ b/core/modules/workflows/tests/modules/workflow_type_test/src/Form/ComplexTestTypeTransitionForm.php @@ -22,7 +22,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta '#type' => 'textfield', '#title' => $this->t('Extra'), '#description' => $this->t('Extra information added to transition'), - '#default_value' => $transition && isset($configuration['transitions'][$transition->id()]['extra']) ? $configuration['transitions'][$transition->id()]['extra'] : '', + '#default_value' => isset($configuration['transitions'][$transition->id()]['extra']) ? $configuration['transitions'][$transition->id()]['extra'] : '', ]; return $form; } only in patch2: unchanged: --- a/core/modules/workflows/tests/src/Functional/WorkflowUiNoTypeTest.php +++ b/core/modules/workflows/tests/src/Functional/WorkflowUiNoTypeTest.php @@ -38,7 +38,6 @@ public function testWorkflowUiWithNoType() { $this->drupalGet('admin/config/workflow/workflows'); $this->assertSession()->pageTextContains('There are no workflow types available. In order to create workflows you need to install a module that provides a workflow type. For example, the Content Moderation module provides a workflow type that enables workflows for content entities.'); - $this->assertSession()->linkExists('Content Moderation'); $this->assertSession()->pageTextNotContains('Add workflow'); $this->container->get('module_installer')->install(['workflow_type_test']); only in patch2: unchanged: --- a/core/modules/workflows/tests/src/Functional/WorkflowUiTest.php +++ b/core/modules/workflows/tests/src/Functional/WorkflowUiTest.php @@ -293,102 +293,4 @@ public function testWorkflowConfigurationForm() { $this->assertEquals('Extra global settings', $workflow->getTypePlugin()->getConfiguration()['example_setting']); } - /** - * Test a workflow, state, and transition can have a numeric ID and label. - */ - public function testNumericIds() { - $this->drupalLogin($this->createUser(['administer workflows'])); - $this->drupalGet('admin/config/workflow/workflows'); - $this->clickLink('Add workflow'); - $this->submitForm(['label' => 123, 'id' => 123, 'workflow_type' => 'workflow_type_complex_test'], 'Save'); - - $this->assertSession()->addressEquals('admin/config/workflow/workflows/manage/123/add_state'); - - $this->submitForm(['label' => 456, 'id' => 456], 'Save'); - $this->assertSession()->pageTextContains('Created 456 state.'); - - $this->clickLink('Add a new state'); - $this->submitForm(['label' => 789, 'id' => 789], 'Save'); - $this->assertSession()->pageTextContains('Created 789 state.'); - - $this->clickLink('Add a new transition'); - $this->submitForm(['id' => 101112, 'label' => 101112, 'from[456]' => 456, 'to' => 789], 'Save'); - $this->assertSession()->pageTextContains('Created 101112 transition.'); - - $workflow = $this->container->get('entity_type.manager')->getStorage('workflow')->loadUnchanged(123); - $this->assertEquals(123, $workflow->id()); - $this->assertEquals(456, $workflow->getTypePlugin()->getState(456)->id()); - $this->assertEquals(101112, $workflow->getTypePlugin()->getTransition(101112)->id()); - $this->assertEquals(789, $workflow->getTypePlugin()->getTransition(101112)->to()->id()); - } - - /** - * Test the sorting of states and transitions by weight and label. - */ - public function testSorting() { - $workflow = Workflow::create(['id' => 'test', 'type' => 'workflow_type_complex_test', 'label' => 'Test']); - $workflow - ->getTypePlugin() - ->setConfiguration([ - 'states' => [ - 'twoa' => [ - 'label' => 'twoa', - 'weight' => 2, - ], - 'three' => [ - 'label' => 'three', - 'weight' => 3, - ], - 'twob' => [ - 'label' => 'twob', - 'weight' => 2, - ], - 'one' => [ - 'label' => 'one', - 'weight' => 1, - ], - ], - 'transitions' => [ - 'three' => [ - 'label' => 'three', - 'from' => ['three'], - 'to' => 'three', - 'weight' => 3, - ], - 'twoa' => [ - 'label' => 'twoa', - 'from' => ['twoa'], - 'to' => 'twoa', - 'weight' => 2, - ], - 'one' => [ - 'label' => 'one', - 'from' => ['one'], - 'to' => 'one', - 'weight' => 1, - ], - 'twob' => [ - 'label' => 'twob', - 'from' => ['twob'], - 'to' => 'twob', - 'weight' => 2, - ], - ], - ]); - $workflow->save(); - - $this->drupalLogin($this->createUser(['administer workflows'])); - $this->drupalGet('admin/config/workflow/workflows/manage/test'); - $expected_states = ['one', 'twoa', 'twob', 'three']; - $elements = $this->xpath('//details[@id="edit-states-container"]//table/tbody/tr'); - foreach ($elements as $key => $element) { - $this->assertEquals($expected_states[$key], $element->find('xpath', 'td')->getText()); - } - $expected_transitions = ['one', 'twoa', 'twob', 'three']; - $elements = $this->xpath('//details[@id="edit-transitions-container"]//table/tbody/tr'); - foreach ($elements as $key => $element) { - $this->assertEquals($expected_transitions[$key], $element->find('xpath', 'td')->getText()); - } - } - } only in patch2: unchanged: --- a/core/modules/workflows/tests/src/Unit/WorkflowTest.php +++ b/core/modules/workflows/tests/src/Unit/WorkflowTest.php @@ -118,27 +118,6 @@ public function testGetStates() { } /** - * Test numeric IDs when added to a workflow. - */ - public function testNumericIdSorting() { - $workflow = new Workflow(['id' => 'test', 'type' => 'test_type'], 'workflow'); - $workflow_type = $workflow->getTypePlugin(); - - $workflow_type->addState('1', 'One'); - $workflow_type->addState('2', 'Two'); - $workflow_type->addState('3', 'ZZZ'); - $workflow_type->addState('4', 'AAA'); - - $workflow_type->setStateWeight('1', 1); - $workflow_type->setStateWeight('2', 2); - $workflow_type->setStateWeight('3', 3); - $workflow_type->setStateWeight('4', 3); - - // Ensure numeric states are correctly sorted by weight first, label second. - $this->assertEquals([1, 2, 4, 3], array_keys($workflow_type->getStates())); - } - - /** * @covers ::getStates */ public function testGetStatesException() { only in patch2: unchanged: --- a/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php +++ b/core/tests/Drupal/FunctionalTests/AssertLegacyTrait.php @@ -2,7 +2,6 @@ namespace Drupal\FunctionalTests; -use Behat\Mink\Element\NodeElement; use Behat\Mink\Exception\ExpectationException; use Behat\Mink\Selector\Xpath\Escaper; use Drupal\Component\Render\FormattableMarkup; @@ -813,21 +812,4 @@ protected function getRawContent() { return $this->getSession()->getPage()->getContent(); } - /** - * Get all option elements, including nested options, in a select. - * - * @param \Behat\Mink\Element\NodeElement $element - * The element for which to get the options. - * - * @return \Behat\Mink\Element\NodeElement[] - * Option elements in select. - * - * @deprecated Scheduled for removal in Drupal 9.0.0. - * Use $element->findAll('xpath', 'option') instead. - */ - protected function getAllOptions(NodeElement $element) { - @trigger_error('AssertLegacyTrait::getAllOptions() is scheduled for removal in Drupal 9.0.0. Use $element->findAll(\'xpath\', \'option\') instead.', E_USER_DEPRECATED); - return $element->findAll('xpath', '//option'); - } - } only in patch2: unchanged: --- a/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php +++ b/core/tests/Drupal/FunctionalTests/BrowserTestBaseTest.php @@ -434,10 +434,6 @@ public function testLegacyFieldAssertsForOptions() { catch (\PHPUnit_Framework_ExpectationFailedException $e) { $this->pass($e->getMessage()); } - - // Test \Drupal\FunctionalTests\AssertLegacyTrait::getAllOptions. - $this->drupalGet('/form-test/select'); - $this->assertCount(6, $this->getAllOptions($this->cssSelect('select[name="opt_groups"]')[0])); } /** only in patch2: unchanged: --- a/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormCorrectUserInputMappingOnFieldDeltaElementsTest.php +++ b/core/tests/Drupal/FunctionalTests/Entity/ContentEntityFormCorrectUserInputMappingOnFieldDeltaElementsTest.php @@ -75,12 +75,10 @@ public function testCorrectUserInputMappingOnComplexFields() { $storage = $this->container->get('entity_type.manager')->getStorage($this->entityTypeId); /** @var ContentEntityInterface $entity */ - $entity = $storage->create([ - $this->fieldName => [ - ['shape' => 'rectangle', 'color' => 'green'], - ['shape' => 'circle', 'color' => 'blue'], - ], - ]); + $entity = $storage->create([$this->fieldName => [ + ['shape' => 'rectangle', 'color' => 'green'], + ['shape' => 'circle', 'color' => 'blue'], + ]]); $entity->save(); $this->drupalGet($this->entityTypeId . '/manage/' . $entity->id() . '/edit'); only in patch2: unchanged: --- a/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php +++ b/core/tests/Drupal/FunctionalTests/Update/UpdatePathTestBase.php @@ -317,14 +317,10 @@ protected function runUpdates() { } // The site might be broken at the time so logging in using the UI might // not work, so we use the API itself. - drupal_rewrite_settings([ - 'settings' => [ - 'update_free_access' => (object) [ - 'value' => TRUE, - 'required' => TRUE, - ], - ], - ]); + drupal_rewrite_settings(['settings' => ['update_free_access' => (object) [ + 'value' => TRUE, + 'required' => TRUE, + ]]]); $this->drupalGet($this->updateUrl); $this->clickLink(t('Continue')); only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php +++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigDependencyTest.php @@ -161,13 +161,11 @@ public function testDependencyManagement() { $missing_dependencies = $config_manager->findMissingContentDependencies(); $this->assertEqual([], $missing_dependencies); - $expected = [ - $entity_test->uuid() => [ - 'entity_type' => 'entity_test', - 'bundle' => $entity_test->bundle(), - 'uuid' => $entity_test->uuid(), - ], - ]; + $expected = [$entity_test->uuid() => [ + 'entity_type' => 'entity_test', + 'bundle' => $entity_test->bundle(), + 'uuid' => $entity_test->uuid(), + ]]; // Delete the content entity so that is it now missing. $entity_test->delete(); $missing_dependencies = $config_manager->findMissingContentDependencies(); only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php +++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigEntityStorageTest.php @@ -51,18 +51,4 @@ public function testUUIDConflict() { $this->assertIdentical($entity->toArray(), $original_properties); } - /** - * Tests the hasData() method for config entity storage. - * - * @covers \Drupal\Core\Config\Entity\ConfigEntityStorage::hasData - */ - public function testHasData() { - $storage = \Drupal::entityTypeManager()->getStorage('config_test'); - $this->assertFalse($storage->hasData()); - - // Add a test config entity and check again. - $storage->create(['id' => $this->randomMachineName()])->save(); - $this->assertTrue($storage->hasData()); - } - } only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Database/ConnectionTest.php +++ b/core/tests/Drupal/KernelTests/Core/Database/ConnectionTest.php @@ -131,7 +131,7 @@ public function testMultipleStatementsForNewPhp() { try { $db->query('SELECT * FROM {test}; SELECT * FROM {test_people}', [], - ['allow_delimiter_in_query' => TRUE ] + [ 'allow_delimiter_in_query' => TRUE ] ); $this->fail('No PDO exception thrown for multiple statements.'); } only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php +++ b/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php @@ -496,7 +496,8 @@ public function testRegexCondition() { ]; $test_groups[] = [ 'regex' => '#Singer', - 'expected' => [], + 'expected' => [ + ], ]; foreach ($test_groups as $test_group) { only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Entity/CreateSampleEntityTest.php +++ /dev/null @@ -1,89 +0,0 @@ -installEntitySchema('file'); - $this->installEntitySchema('user'); - $this->installEntitySchema('node'); - $this->installEntitySchema('node_type'); - $this->installEntitySchema('file'); - $this->installEntitySchema('comment'); - $this->installEntitySchema('comment_type'); - $this->installEntitySchema('taxonomy_vocabulary'); - $this->installEntitySchema('taxonomy_term'); - $this->entityTypeManager = $this->container->get('entity_type.manager'); - NodeType::create(['type' => 'article', 'name' => 'Article'])->save(); - NodeType::create(['type' => 'page', 'name' => 'Page'])->save(); - Vocabulary::create(['name' => 'Tags', 'vid' => 'tags'])->save(); - } - - /** - * Tests sample value content entity creation of all types. - * - * @covers ::createWithSampleValues - */ - public function testSampleValueContentEntity() { - foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $definition) { - if ($definition->entityClassImplements(FieldableEntityInterface::class)) { - $label = $definition->getKey('label'); - $values = []; - if ($label) { - $title = $this->randomString(); - $values[$label] = $title; - } - // Create sample entities with bundles. - if ($bundle_type = $definition->getBundleEntityType()) { - foreach ($this->entityTypeManager->getStorage($bundle_type)->loadMultiple() as $bundle) { - $entity = $this->entityTypeManager->getStorage($entity_type_id)->createWithSampleValues($bundle->id(), $values); - $violations = $entity->validate(); - $this->assertCount(0, $violations); - if ($label) { - $this->assertEquals($title, $entity->label()); - } - } - } - // Create sample entities without bundles. - else { - $entity = $this->entityTypeManager->getStorage($entity_type_id)->createWithSampleValues(FALSE, $values); - $violations = $entity->validate(); - $this->assertCount(0, $violations); - if ($label) { - $this->assertEquals($title, $entity->label()); - } - } - } - } - } - -} only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Entity/Element/EntityAutocompleteElementFormTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/Element/EntityAutocompleteElementFormTest.php @@ -179,12 +179,12 @@ public function buildForm(array $form, FormStateInterface $form_state) { /** * {@inheritdoc} */ - public function submitForm(array &$form, FormStateInterface $form_state) {} + public function submitForm(array &$form, FormStateInterface $form_state) { } /** * {@inheritdoc} */ - public function validateForm(array &$form, FormStateInterface $form_state) {} + public function validateForm(array &$form, FormStateInterface $form_state) { } /** * Tests valid entries in the EntityAutocomplete Form API element. only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php @@ -94,27 +94,23 @@ protected function setUp() { } // Each unit is a list of field name, langcode and a column-value array. $units[] = [$figures, 'en', [ - 'color' => 'red', - 'shape' => 'triangle', - ], - ]; + 'color' => 'red', + 'shape' => 'triangle', + ]]; $units[] = [$figures, 'en', [ - 'color' => 'blue', - 'shape' => 'circle', - ], - ]; + 'color' => 'blue', + 'shape' => 'circle', + ]]; // To make it easier to test sorting, the greetings get formats according // to their langcode. $units[] = [$greetings, 'tr', [ - 'value' => 'merhaba', - 'format' => 'format-tr', - ], - ]; + 'value' => 'merhaba', + 'format' => 'format-tr' + ]]; $units[] = [$greetings, 'pl', [ - 'value' => 'siema', - 'format' => 'format-pl', - ], - ]; + 'value' => 'siema', + 'format' => 'format-pl' + ]]; // Make these languages available to the greetings field. ConfigurableLanguage::createFromLangcode('tr')->save(); ConfigurableLanguage::createFromLangcode('pl')->save(); @@ -870,8 +866,7 @@ public function testBaseFieldMultipleColumns() { 'description' => [ 'value' => $this->randomString(), 'format' => 'format1', - ], - ]); + ]]); $term1->save(); $term2 = Term::create([ @@ -880,8 +875,7 @@ public function testBaseFieldMultipleColumns() { 'description' => [ 'value' => $this->randomString(), 'format' => 'format2', - ], - ]); + ]]); $term2->save(); $ids = \Drupal::entityQuery('taxonomy_term') only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Entity/EntityTypeConstraintsTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityTypeConstraintsTest.php @@ -41,7 +41,7 @@ public function testConstraintDefinition() { $this->assertEqual($default_constraints + $extra_constraints, $entity_type->getConstraints()); // Test altering constraints. - $altered_constraints = ['Test' => ['some_setting' => TRUE]]; + $altered_constraints = ['Test' => [ 'some_setting' => TRUE]]; $this->state->set('entity_test_constraints.alter', $altered_constraints); // Clear the cache in state instance in the Drupal container, so it can pick // up the modified value. only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/ValidReferenceConstraintValidatorTest.php @@ -3,15 +3,6 @@ namespace Drupal\KernelTests\Core\Entity; use Drupal\Core\Field\BaseFieldDefinition; -use Drupal\Core\Field\FieldStorageDefinitionInterface; -use Drupal\entity_test\Entity\EntityTest; -use Drupal\field\Entity\FieldConfig; -use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait; -use Drupal\node\Entity\Node; -use Drupal\node\NodeInterface; -use Drupal\Tests\node\Traits\ContentTypeCreationTrait; -use Drupal\user\Entity\Role; -use Drupal\user\Entity\User; /** * Tests validation constraints for ValidReferenceConstraintValidator. @@ -20,9 +11,6 @@ */ class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase { - use EntityReferenceTestTrait; - use ContentTypeCreationTrait; - /** * The typed data manager to use. * @@ -33,7 +21,7 @@ class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase { /** * {@inheritdoc} */ - public static $modules = ['field', 'node', 'user']; + public static $modules = ['field', 'user']; /** * {@inheritdoc} @@ -41,12 +29,7 @@ class ValidReferenceConstraintValidatorTest extends EntityKernelTestBase { protected function setUp() { parent::setUp(); $this->installSchema('user', ['users_data']); - $this->installSchema('node', ['node_access']); - $this->installConfig('node'); $this->typedData = $this->container->get('typed_data_manager'); - - $this->createContentType(['type' => 'article', 'name' => 'Article']); - $this->createContentType(['type' => 'page', 'name' => 'Basic page']); } /** @@ -83,152 +66,4 @@ public function testValidation() { $this->assertEqual($violation->getRoot(), $typed_data, 'Violation root is correct.'); } - /** - * Tests the validation of pre-existing items in an entity reference field. - */ - public function testPreExistingItemsValidation() { - // Create two types of users, with and without access to bypass content - // access. - /** @var \Drupal\user\RoleInterface $role_with_access */ - $role_with_access = Role::create(['id' => 'role_with_access']); - $role_with_access->grantPermission('access content'); - $role_with_access->grantPermission('bypass node access'); - $role_with_access->save(); - - /** @var \Drupal\user\RoleInterface $role_without_access */ - $role_without_access = Role::create(['id' => 'role_without_access']); - $role_without_access->grantPermission('access content'); - $role_without_access->save(); - - $user_with_access = User::create(['roles' => ['role_with_access']]); - $user_without_access = User::create(['roles' => ['role_without_access']]); - - // Add an entity reference field. - $this->createEntityReferenceField( - 'entity_test', - 'entity_test', - 'field_test', - 'Field test', - 'node', - 'default', - ['target_bundles' => ['article', 'page']], - FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED - ); - - // Create four test nodes. - $published_node = Node::create([ - 'title' => 'Test published node', - 'type' => 'article', - 'status' => NodeInterface::PUBLISHED, - ]); - $published_node->save(); - - $unpublished_node = Node::create([ - 'title' => 'Test unpublished node', - 'type' => 'article', - 'status' => NodeInterface::NOT_PUBLISHED, - ]); - $unpublished_node->save(); - - $different_bundle_node = Node::create([ - 'title' => 'Test page node', - 'type' => 'page', - 'status' => NodeInterface::PUBLISHED, - ]); - $different_bundle_node->save(); - - $deleted_node = Node::create([ - 'title' => 'Test deleted node', - 'type' => 'article', - 'status' => NodeInterface::PUBLISHED, - ]); - $deleted_node->save(); - - $referencing_entity = EntityTest::create([ - 'field_test' => [ - ['entity' => $published_node], - ['entity' => $unpublished_node], - ['entity' => $different_bundle_node], - ['entity' => $deleted_node], - ] - ]); - - // Check that users with access are able pass the validation for fields - // without pre-existing content. - $this->container->get('account_switcher')->switchTo($user_with_access); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(0, $violations); - - // Check that users without access are not able pass the validation for - // fields without pre-existing content. - $this->container->get('account_switcher')->switchTo($user_without_access); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(1, $violations); - $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [ - '%type' => 'node', - '%id' => $unpublished_node->id(), - ]), $violations[0]->getMessage()); - - // Now save the referencing entity which will create a pre-existing state - // for it and repeat the checks. This time, the user without access should - // be able to pass the validation as well because it's not changing the - // pre-existing state. - $referencing_entity->save(); - - $this->container->get('account_switcher')->switchTo($user_with_access); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(0, $violations); - - // Check that users without access are able pass the validation for fields - // with pre-existing content. - $this->container->get('account_switcher')->switchTo($user_without_access); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(0, $violations); - - // Re-save the referencing entity and check that the referenced entity is - // not affected. - $referencing_entity->name->value = $this->randomString(); - $referencing_entity->save(); - $this->assertEquals($published_node->id(), $referencing_entity->field_test[0]->target_id); - $this->assertEquals($unpublished_node->id(), $referencing_entity->field_test[1]->target_id); - $this->assertEquals($different_bundle_node->id(), $referencing_entity->field_test[2]->target_id); - $this->assertEquals($deleted_node->id(), $referencing_entity->field_test[3]->target_id); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(0, $violations); - - // Remove one of the referencable bundles and check that a pre-existing node - // of that bundle can not be referenced anymore. - $field = FieldConfig::loadByName('entity_test', 'entity_test', 'field_test'); - $field->setSetting('handler_settings', ['target_bundles' => ['article']]); - $field->save(); - $referencing_entity = $this->reloadEntity($referencing_entity); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(1, $violations); - $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [ - '%type' => 'node', - '%id' => $different_bundle_node->id(), - ]), $violations[0]->getMessage()); - - // Delete the last node and check that the pre-existing reference is not - // valid anymore. - $deleted_node->delete(); - - $violations = $referencing_entity->field_test->validate(); - $this->assertCount(2, $violations); - $this->assertEquals(t('This entity (%type: %id) cannot be referenced.', [ - '%type' => 'node', - '%id' => $different_bundle_node->id(), - ]), $violations[0]->getMessage()); - $this->assertEquals(t('The referenced entity (%type: %id) does not exist.', [ - '%type' => 'node', - '%id' => $deleted_node->id(), - ]), $violations[1]->getMessage()); - } - } only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php +++ b/core/tests/Drupal/KernelTests/Core/Image/ToolkitGdTest.php @@ -365,7 +365,7 @@ public function testManipulations() { if ($image->getToolkit()->getType() == $image_original_type || $corner != $this->transparent) { $correct_colors = $this->colorsAreEqual($color, $corner); $this->assertTrue($correct_colors, SafeMarkup::format('Image %file object after %action action has the correct color placement at corner %corner.', - ['%file' => $file, '%action' => $op, '%corner' => $key])); + ['%file' => $file, '%action' => $op, '%corner' => $key])); } } } only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/KeyValueStore/GarbageCollectionTest.php +++ b/core/tests/Drupal/KernelTests/Core/KeyValueStore/GarbageCollectionTest.php @@ -39,7 +39,7 @@ public function testGarbageCollection() { for ($i = 0; $i <= 3; $i++) { $store->setWithExpire('key_' . $i, $this->randomObject(), rand(500, 100000)); } - $this->assertIdentical(count($store->getAll()), 4, 'Four items were written to the storage.'); + $this->assertIdentical(sizeof($store->getAll()), 4, 'Four items were written to the storage.'); // Manually expire the data. for ($i = 0; $i <= 3; $i++) { only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/KeyValueStore/KeyValueContentEntityStorageTest.php +++ b/core/tests/Drupal/KernelTests/Core/KeyValueStore/KeyValueContentEntityStorageTest.php @@ -31,15 +31,9 @@ protected function setUp() { /** * Tests CRUD operations. - * - * @covers \Drupal\Core\Entity\KeyValueStore\KeyValueEntityStorage::hasData */ public function testCRUD() { $default_langcode = \Drupal::languageManager()->getDefaultLanguage()->getId(); - - $storage = \Drupal::entityTypeManager()->getStorage('entity_test_label'); - $this->assertFalse($storage->hasData()); - // Verify default properties on a newly created empty entity. $empty = EntityTestLabel::create(); $this->assertIdentical($empty->id->value, NULL); @@ -114,9 +108,6 @@ public function testCRUD() { $this->fail('EntityMalformedException was not thrown.'); } - // Verify that hasData() returns the expected result. - $this->assertTrue($storage->hasData()); - // Verify that the correct status is returned and properties did not change. $this->assertIdentical($status, SAVED_NEW); $this->assertIdentical($entity_test->id(), $expected['id']); @@ -166,12 +157,4 @@ public function testCRUD() { } } - /** - * Tests uninstallation of a module that does not use the SQL entity storage. - */ - public function testUninstall() { - $uninstall_validator_reasons = \Drupal::service('content_uninstall_validator')->validate('keyvalue_test'); - $this->assertEmpty($uninstall_validator_reasons); - } - } only in patch2: unchanged: --- a/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php +++ b/core/tests/Drupal/KernelTests/Core/Theme/ThemeRenderAndAutoescapeTest.php @@ -134,4 +134,4 @@ public function testBubblingMetadataWithRenderable() { } -class NonPrintable {} +class NonPrintable { } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php +++ b/core/tests/Drupal/Tests/Component/DependencyInjection/ContainerTest.php @@ -715,18 +715,12 @@ protected function getMockContainerDefinition() { ]), 'properties' => $this->getCollection(['_someProperty' => 'foo']), 'calls' => [ - [ - 'setContainer', - $this->getCollection([ - $this->getServiceCall('service_container'), - ]), - ], - [ - 'setOtherConfigParameter', - $this->getCollection([ - $this->getParameterCall('some_other_config'), - ]), - ], + ['setContainer', $this->getCollection([ + $this->getServiceCall('service_container'), + ])], + ['setOtherConfigParameter', $this->getCollection([ + $this->getParameterCall('some_other_config'), + ])], ], 'priority' => 0, ]; @@ -830,12 +824,9 @@ protected function getMockContainerDefinition() { [NULL, 'bar'], ], 'calls' => [ - [ - 'setContainer', - $this->getCollection([ - $this->getServiceCall('service_container'), - ]), - ], + ['setContainer', $this->getCollection([ + $this->getServiceCall('service_container'), + ])], ], ]; only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Component/FileCache/FileCacheFactoryTest.php +++ b/core/tests/Drupal/Tests/Component/FileCache/FileCacheFactoryTest.php @@ -105,54 +105,51 @@ public function configurationDataProvider() { $class = get_class($file_cache); // Test fallback configuration. - $data['fallback-configuration'] = [ - [], - [], - FileCache::class, - ]; + $data['fallback-configuration'] = [[ + ], [], FileCache::class]; // Test default configuration. - $data['default-configuration'] = [ - ['default' => ['class' => $class]], - [], - $class, - ]; + $data['default-configuration'] = [[ + 'default' => [ + 'class' => $class, + ], + ], [], $class]; // Test specific per collection setting. - $data['collection-setting'] = [ - ['test_foo_settings' => ['class' => $class]], - [], - $class, - ]; + $data['collection-setting'] = [[ + 'test_foo_settings' => [ + 'class' => $class, + ], + ], [], $class]; // Test default configuration plus specific per collection setting. - $data['default-plus-collection-setting'] = [ - [ - 'default' => ['class' => '\stdClass'], - 'test_foo_settings' => ['class' => $class], + $data['default-plus-collection-setting'] = [[ + 'default' => [ + 'class' => '\stdClass', ], - [], - $class, - ]; + 'test_foo_settings' => [ + 'class' => $class, + ], + ], [], $class]; // Test default configuration plus class specific override. - $data['default-plus-class-override'] = [ - ['default' => ['class' => '\stdClass']], - ['class' => $class], - $class, - ]; + $data['default-plus-class-override'] = [[ + 'default' => [ + 'class' => '\stdClass', + ], + ], [ 'class' => $class ], $class]; // Test default configuration plus class specific override plus specific // per collection setting. - $data['default-plus-class-plus-collection-setting'] = [ - [ - 'default' => ['class' => '\stdClass'], - 'test_foo_settings' => ['class' => $class], + $data['default-plus-class-plus-collection-setting'] = [[ + 'default' => [ + 'class' => '\stdClass', + ], + 'test_foo_settings' => [ + 'class' => $class, ], - ['class' => '\stdClass'], - $class, - ]; + ], [ 'class' => '\stdClass'], $class]; return $data; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php +++ b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php @@ -279,8 +279,7 @@ public function providerTestPluralsFormula() { 193 => 1, 194 => 1, 'default' => 2, - ], - ], + ], ], [ 'nplurals=4; plural=(((n==1)||(n==11))?(0):(((n==2)||(n==12))?(1):(((n>2)&&(n<20))?(2):3)));', [ only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Component/Utility/NestedArrayTest.php +++ b/core/tests/Drupal/Tests/Component/Utility/NestedArrayTest.php @@ -268,21 +268,13 @@ public function providerTestFilter() { [0, 1, '', TRUE], NULL, [1 => 1, 3 => TRUE] ]; $data['1d-array-callable'] = [ - [0, 1, '', TRUE], - function ($element) { - return $element === ''; - }, - [2 => ''], + [0, 1, '', TRUE], function ($element) { return $element === ''; }, [2 => ''] ]; $data['2d-array'] = [ [[0, 1, '', TRUE], [0, 1, 2, 3]], NULL, [0 => [1 => 1, 3 => TRUE], 1 => [1 => 1, 2 => 2, 3 => 3]], ]; $data['2d-array-callable'] = [ - [[0, 1, '', TRUE], [0, 1, 2, 3]], - function ($element) { - return is_array($element) || $element === 3; - }, - [0 => [], 1 => [3 => 3]], + [[0, 1, '', TRUE], [0, 1, 2, 3]], function ($element) { return is_array($element) || $element === 3; }, [0 => [], 1 => [3 => 3]], ]; return $data; only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Component/Utility/RectangleTest.php +++ b/core/tests/Drupal/Tests/Component/Utility/RectangleTest.php @@ -99,4227 +99,4227 @@ public function testRotateDimensions($width, $height, $angle, $exp_width, $exp_h */ public function providerPhp55RotateDimensions() { return [ - [40, 20, -360, 40, 20 ], - [40, 20, -359, 39, 20 ], - [40, 20, -358, 40, 21 ], - [40, 20, -357, 40, 22 ], - [40, 20, -356, 40, 22 ], - [40, 20, -355, 41, 23 ], - [40, 20, -354, 41, 24 ], - [40, 20, -353, 41, 24 ], - [40, 20, -352, 42, 25 ], - [40, 20, -351, 42, 26 ], - [40, 20, -350, 42, 26 ], - [40, 20, -349, 43, 27 ], - [40, 20, -348, 43, 28 ], - [40, 20, -347, 42, 27 ], - [40, 20, -346, 43, 28 ], - [40, 20, -345, 43, 29 ], - [40, 20, -344, 44, 30 ], - [40, 20, -343, 44, 30 ], - [40, 20, -342, 44, 31 ], - [40, 20, -341, 44, 32 ], - [40, 20, -340, 44, 32 ], - [40, 20, -339, 44, 33 ], - [40, 20, -338, 44, 33 ], - [40, 20, -337, 44, 33 ], - [40, 20, -336, 44, 34 ], - [40, 20, -335, 44, 34 ], - [40, 20, -334, 44, 35 ], - [40, 20, -333, 44, 36 ], - [40, 20, -332, 44, 36 ], - [40, 20, -331, 44, 36 ], - [40, 20, -330, 44, 36 ], - [40, 20, -329, 44, 37 ], - [40, 20, -328, 44, 38 ], - [40, 20, -327, 44, 38 ], - [40, 20, -326, 44, 39 ], - [40, 20, -325, 43, 38 ], - [40, 20, -324, 44, 39 ], - [40, 20, -323, 43, 40 ], - [40, 20, -322, 43, 40 ], - [40, 20, -321, 44, 41 ], - [40, 20, -320, 43, 40 ], - [40, 20, -319, 43, 41 ], - [40, 20, -318, 42, 41 ], - [40, 20, -317, 43, 42 ], - [40, 20, -316, 42, 41 ], - [40, 20, -315, 42, 42 ], - [40, 20, -314, 41, 42 ], - [40, 20, -313, 42, 43 ], - [40, 20, -312, 41, 42 ], - [40, 20, -311, 41, 43 ], - [40, 20, -310, 40, 43 ], - [40, 20, -309, 41, 44 ], - [40, 20, -308, 40, 43 ], - [40, 20, -307, 40, 43 ], - [40, 20, -306, 39, 44 ], - [40, 20, -305, 38, 43 ], - [40, 20, -304, 39, 44 ], - [40, 20, -303, 38, 44 ], - [40, 20, -302, 38, 44 ], - [40, 20, -301, 37, 44 ], - [40, 20, -300, 36, 44 ], - [40, 20, -299, 36, 44 ], - [40, 20, -298, 36, 44 ], - [40, 20, -297, 36, 44 ], - [40, 20, -296, 35, 44 ], - [40, 20, -295, 34, 44 ], - [40, 20, -294, 34, 44 ], - [40, 20, -293, 33, 44 ], - [40, 20, -292, 33, 44 ], - [40, 20, -291, 33, 44 ], - [40, 20, -290, 32, 44 ], - [40, 20, -289, 32, 44 ], - [40, 20, -288, 31, 44 ], - [40, 20, -287, 30, 44 ], - [40, 20, -286, 30, 44 ], - [40, 20, -285, 29, 43 ], - [40, 20, -284, 28, 43 ], - [40, 20, -283, 27, 42 ], - [40, 20, -282, 28, 43 ], - [40, 20, -281, 27, 43 ], - [40, 20, -280, 26, 42 ], - [40, 20, -279, 26, 42 ], - [40, 20, -278, 25, 42 ], - [40, 20, -277, 24, 41 ], - [40, 20, -276, 24, 41 ], - [40, 20, -275, 23, 41 ], - [40, 20, -274, 22, 40 ], - [40, 20, -273, 22, 40 ], - [40, 20, -272, 21, 40 ], - [40, 20, -271, 20, 39 ], - [40, 20, -270, 20, 40 ], - [40, 20, -269, 20, 39 ], - [40, 20, -268, 21, 39 ], - [40, 20, -267, 22, 39 ], - [40, 20, -266, 22, 39 ], - [40, 20, -265, 23, 40 ], - [40, 20, -264, 24, 40 ], - [40, 20, -263, 24, 40 ], - [40, 20, -262, 25, 41 ], - [40, 20, -261, 26, 41 ], - [40, 20, -260, 26, 41 ], - [40, 20, -259, 27, 42 ], - [40, 20, -258, 28, 42 ], - [40, 20, -257, 27, 41 ], - [40, 20, -256, 28, 42 ], - [40, 20, -255, 29, 42 ], - [40, 20, -254, 30, 43 ], - [40, 20, -253, 30, 43 ], - [40, 20, -252, 31, 43 ], - [40, 20, -251, 32, 43 ], - [40, 20, -250, 32, 43 ], - [40, 20, -249, 33, 43 ], - [40, 20, -248, 33, 43 ], - [40, 20, -247, 33, 43 ], - [40, 20, -246, 34, 43 ], - [40, 20, -245, 34, 43 ], - [40, 20, -244, 35, 43 ], - [40, 20, -243, 36, 43 ], - [40, 20, -242, 36, 43 ], - [40, 20, -241, 36, 43 ], - [40, 20, -240, 36, 43 ], - [40, 20, -239, 37, 43 ], - [40, 20, -238, 38, 43 ], - [40, 20, -237, 38, 43 ], - [40, 20, -236, 39, 43 ], - [40, 20, -235, 38, 42 ], - [40, 20, -234, 39, 43 ], - [40, 20, -233, 40, 42 ], - [40, 20, -232, 40, 42 ], - [40, 20, -231, 41, 43 ], - [40, 20, -230, 40, 42 ], - [40, 20, -229, 41, 42 ], - [40, 20, -228, 41, 41 ], - [40, 20, -227, 42, 42 ], - [40, 20, -226, 41, 41 ], - [40, 20, -225, 42, 41 ], - [40, 20, -224, 42, 40 ], - [40, 20, -223, 43, 41 ], - [40, 20, -222, 42, 40 ], - [40, 20, -221, 43, 40 ], - [40, 20, -220, 43, 39 ], - [40, 20, -219, 44, 40 ], - [40, 20, -218, 43, 39 ], - [40, 20, -217, 43, 39 ], - [40, 20, -216, 44, 38 ], - [40, 20, -215, 43, 37 ], - [40, 20, -214, 44, 38 ], - [40, 20, -213, 44, 37 ], - [40, 20, -212, 44, 37 ], - [40, 20, -211, 44, 36 ], - [40, 20, -210, 44, 35 ], - [40, 20, -209, 44, 35 ], - [40, 20, -208, 44, 35 ], - [40, 20, -207, 44, 35 ], - [40, 20, -206, 44, 34 ], - [40, 20, -205, 44, 33 ], - [40, 20, -204, 44, 33 ], - [40, 20, -203, 44, 32 ], - [40, 20, -202, 44, 32 ], - [40, 20, -201, 44, 32 ], - [40, 20, -200, 44, 31 ], - [40, 20, -199, 44, 31 ], - [40, 20, -198, 44, 30 ], - [40, 20, -197, 44, 29 ], - [40, 20, -196, 44, 29 ], - [40, 20, -195, 43, 28 ], - [40, 20, -194, 43, 27 ], - [40, 20, -193, 42, 26 ], - [40, 20, -192, 43, 27 ], - [40, 20, -191, 43, 26 ], - [40, 20, -190, 42, 25 ], - [40, 20, -189, 42, 25 ], - [40, 20, -188, 42, 24 ], - [40, 20, -187, 41, 23 ], - [40, 20, -186, 41, 23 ], - [40, 20, -185, 41, 22 ], - [40, 20, -184, 40, 21 ], - [40, 20, -183, 40, 21 ], - [40, 20, -182, 40, 20 ], - [40, 20, -181, 39, 19 ], - [40, 20, -180, 40, 20 ], - [40, 20, -179, 39, 19 ], - [40, 20, -178, 39, 20 ], - [40, 20, -177, 39, 21 ], - [40, 20, -176, 39, 21 ], - [40, 20, -175, 40, 22 ], - [40, 20, -174, 40, 23 ], - [40, 20, -173, 40, 23 ], - [40, 20, -172, 41, 24 ], - [40, 20, -171, 41, 25 ], - [40, 20, -170, 41, 25 ], - [40, 20, -169, 42, 26 ], - [40, 20, -168, 42, 27 ], - [40, 20, -167, 41, 26 ], - [40, 20, -166, 42, 27 ], - [40, 20, -165, 42, 28 ], - [40, 20, -164, 43, 29 ], - [40, 20, -163, 43, 29 ], - [40, 20, -162, 43, 30 ], - [40, 20, -161, 43, 31 ], - [40, 20, -160, 43, 31 ], - [40, 20, -159, 43, 32 ], - [40, 20, -158, 43, 32 ], - [40, 20, -157, 43, 32 ], - [40, 20, -156, 43, 33 ], - [40, 20, -155, 43, 33 ], - [40, 20, -154, 43, 34 ], - [40, 20, -153, 43, 35 ], - [40, 20, -152, 43, 35 ], - [40, 20, -151, 43, 35 ], - [40, 20, -150, 43, 36 ], - [40, 20, -149, 43, 36 ], - [40, 20, -148, 43, 37 ], - [40, 20, -147, 43, 37 ], - [40, 20, -146, 43, 38 ], - [40, 20, -145, 42, 37 ], - [40, 20, -144, 43, 38 ], - [40, 20, -143, 42, 39 ], - [40, 20, -142, 42, 39 ], - [40, 20, -141, 43, 40 ], - [40, 20, -140, 42, 39 ], - [40, 20, -139, 42, 40 ], - [40, 20, -138, 41, 40 ], - [40, 20, -137, 42, 41 ], - [40, 20, -136, 41, 40 ], - [40, 20, -135, 41, 41 ], - [40, 20, -134, 40, 41 ], - [40, 20, -133, 41, 42 ], - [40, 20, -132, 40, 41 ], - [40, 20, -131, 40, 42 ], - [40, 20, -130, 39, 42 ], - [40, 20, -129, 40, 43 ], - [40, 20, -128, 39, 42 ], - [40, 20, -127, 39, 42 ], - [40, 20, -126, 38, 43 ], - [40, 20, -125, 37, 42 ], - [40, 20, -124, 38, 43 ], - [40, 20, -123, 37, 43 ], - [40, 20, -122, 37, 43 ], - [40, 20, -121, 36, 43 ], - [40, 20, -120, 36, 43 ], - [40, 20, -119, 35, 43 ], - [40, 20, -118, 35, 43 ], - [40, 20, -117, 35, 43 ], - [40, 20, -116, 34, 43 ], - [40, 20, -115, 33, 43 ], - [40, 20, -114, 33, 43 ], - [40, 20, -113, 32, 43 ], - [40, 20, -112, 32, 43 ], - [40, 20, -111, 32, 43 ], - [40, 20, -110, 31, 43 ], - [40, 20, -109, 31, 43 ], - [40, 20, -108, 30, 43 ], - [40, 20, -107, 29, 43 ], - [40, 20, -106, 29, 43 ], - [40, 20, -105, 28, 42 ], - [40, 20, -104, 27, 42 ], - [40, 20, -103, 26, 41 ], - [40, 20, -102, 27, 42 ], - [40, 20, -101, 26, 42 ], - [40, 20, -100, 25, 41 ], - [40, 20, -99, 25, 41 ], - [40, 20, -98, 24, 41 ], - [40, 20, -97, 23, 40 ], - [40, 20, -96, 23, 40 ], - [40, 20, -95, 22, 40 ], - [40, 20, -94, 21, 39 ], - [40, 20, -93, 21, 39 ], - [40, 20, -92, 20, 39 ], - [40, 20, -91, 19, 39 ], - [40, 20, -90, 20, 40 ], - [40, 20, -89, 19, 39 ], - [40, 20, -88, 20, 40 ], - [40, 20, -87, 21, 40 ], - [40, 20, -86, 21, 40 ], - [40, 20, -85, 22, 41 ], - [40, 20, -84, 23, 41 ], - [40, 20, -83, 23, 41 ], - [40, 20, -82, 24, 42 ], - [40, 20, -81, 25, 42 ], - [40, 20, -80, 25, 42 ], - [40, 20, -79, 26, 43 ], - [40, 20, -78, 27, 43 ], - [40, 20, -77, 26, 42 ], - [40, 20, -76, 27, 43 ], - [40, 20, -75, 28, 43 ], - [40, 20, -74, 29, 44 ], - [40, 20, -73, 29, 44 ], - [40, 20, -72, 30, 44 ], - [40, 20, -71, 31, 44 ], - [40, 20, -70, 31, 44 ], - [40, 20, -69, 32, 44 ], - [40, 20, -68, 32, 44 ], - [40, 20, -67, 32, 44 ], - [40, 20, -66, 33, 44 ], - [40, 20, -65, 33, 44 ], - [40, 20, -64, 34, 44 ], - [40, 20, -63, 35, 44 ], - [40, 20, -62, 35, 44 ], - [40, 20, -61, 35, 44 ], - [40, 20, -60, 35, 44 ], - [40, 20, -59, 36, 44 ], - [40, 20, -58, 37, 44 ], - [40, 20, -57, 37, 44 ], - [40, 20, -56, 38, 44 ], - [40, 20, -55, 37, 43 ], - [40, 20, -54, 38, 44 ], - [40, 20, -53, 39, 43 ], - [40, 20, -52, 39, 43 ], - [40, 20, -51, 40, 44 ], - [40, 20, -50, 39, 43 ], - [40, 20, -49, 40, 43 ], - [40, 20, -48, 40, 42 ], - [40, 20, -47, 41, 43 ], - [40, 20, -46, 40, 42 ], - [40, 20, -45, 41, 42 ], - [40, 20, -44, 41, 41 ], - [40, 20, -43, 42, 42 ], - [40, 20, -42, 41, 41 ], - [40, 20, -41, 42, 41 ], - [40, 20, -40, 42, 40 ], - [40, 20, -39, 43, 41 ], - [40, 20, -38, 42, 40 ], - [40, 20, -37, 42, 40 ], - [40, 20, -36, 43, 39 ], - [40, 20, -35, 42, 38 ], - [40, 20, -34, 43, 39 ], - [40, 20, -33, 43, 38 ], - [40, 20, -32, 43, 38 ], - [40, 20, -31, 43, 37 ], - [40, 20, -30, 43, 37 ], - [40, 20, -29, 43, 36 ], - [40, 20, -28, 43, 36 ], - [40, 20, -27, 43, 36 ], - [40, 20, -26, 43, 35 ], - [40, 20, -25, 43, 34 ], - [40, 20, -24, 43, 34 ], - [40, 20, -23, 43, 33 ], - [40, 20, -22, 43, 33 ], - [40, 20, -21, 43, 33 ], - [40, 20, -20, 43, 32 ], - [40, 20, -19, 43, 32 ], - [40, 20, -18, 43, 31 ], - [40, 20, -17, 43, 30 ], - [40, 20, -16, 43, 30 ], - [40, 20, -15, 42, 29 ], - [40, 20, -14, 42, 28 ], - [40, 20, -13, 41, 27 ], - [40, 20, -12, 42, 28 ], - [40, 20, -11, 42, 27 ], - [40, 20, -10, 41, 26 ], - [40, 20, -9, 41, 26 ], - [40, 20, -8, 41, 25 ], - [40, 20, -7, 40, 24 ], - [40, 20, -6, 40, 24 ], - [40, 20, -5, 40, 23 ], - [40, 20, -4, 39, 22 ], - [40, 20, -3, 39, 22 ], - [40, 20, -2, 39, 21 ], - [40, 20, -1, 39, 20 ], - [40, 20, 0, 40, 20 ], - [40, 20, 1, 39, 20 ], - [40, 20, 2, 40, 21 ], - [40, 20, 3, 40, 22 ], - [40, 20, 4, 40, 22 ], - [40, 20, 5, 41, 23 ], - [40, 20, 6, 41, 24 ], - [40, 20, 7, 41, 24 ], - [40, 20, 8, 42, 25 ], - [40, 20, 9, 42, 26 ], - [40, 20, 10, 42, 26 ], - [40, 20, 11, 43, 27 ], - [40, 20, 12, 43, 28 ], - [40, 20, 13, 42, 27 ], - [40, 20, 14, 43, 28 ], - [40, 20, 15, 43, 29 ], - [40, 20, 16, 44, 30 ], - [40, 20, 17, 44, 30 ], - [40, 20, 18, 44, 31 ], - [40, 20, 19, 44, 32 ], - [40, 20, 20, 44, 32 ], - [40, 20, 21, 44, 33 ], - [40, 20, 22, 44, 33 ], - [40, 20, 23, 44, 33 ], - [40, 20, 24, 44, 34 ], - [40, 20, 25, 44, 34 ], - [40, 20, 26, 44, 35 ], - [40, 20, 27, 44, 36 ], - [40, 20, 28, 44, 36 ], - [40, 20, 29, 44, 36 ], - [40, 20, 30, 44, 36 ], - [40, 20, 31, 44, 37 ], - [40, 20, 32, 44, 38 ], - [40, 20, 33, 44, 38 ], - [40, 20, 34, 44, 39 ], - [40, 20, 35, 43, 38 ], - [40, 20, 36, 44, 39 ], - [40, 20, 37, 43, 40 ], - [40, 20, 38, 43, 40 ], - [40, 20, 39, 44, 41 ], - [40, 20, 40, 43, 40 ], - [40, 20, 41, 43, 41 ], - [40, 20, 42, 42, 41 ], - [40, 20, 43, 43, 42 ], - [40, 20, 44, 42, 41 ], - [40, 20, 45, 42, 42 ], - [40, 20, 46, 41, 42 ], - [40, 20, 47, 42, 43 ], - [40, 20, 48, 41, 42 ], - [40, 20, 49, 41, 43 ], - [40, 20, 50, 40, 43 ], - [40, 20, 51, 41, 44 ], - [40, 20, 52, 40, 43 ], - [40, 20, 53, 40, 43 ], - [40, 20, 54, 39, 44 ], - [40, 20, 55, 38, 43 ], - [40, 20, 56, 39, 44 ], - [40, 20, 57, 38, 44 ], - [40, 20, 58, 38, 44 ], - [40, 20, 59, 37, 44 ], - [40, 20, 60, 36, 44 ], - [40, 20, 61, 36, 44 ], - [40, 20, 62, 36, 44 ], - [40, 20, 63, 36, 44 ], - [40, 20, 64, 35, 44 ], - [40, 20, 65, 34, 44 ], - [40, 20, 66, 34, 44 ], - [40, 20, 67, 33, 44 ], - [40, 20, 68, 33, 44 ], - [40, 20, 69, 33, 44 ], - [40, 20, 70, 32, 44 ], - [40, 20, 71, 32, 44 ], - [40, 20, 72, 31, 44 ], - [40, 20, 73, 30, 44 ], - [40, 20, 74, 30, 44 ], - [40, 20, 75, 29, 43 ], - [40, 20, 76, 28, 43 ], - [40, 20, 77, 27, 42 ], - [40, 20, 78, 28, 43 ], - [40, 20, 79, 27, 43 ], - [40, 20, 80, 26, 42 ], - [40, 20, 81, 26, 42 ], - [40, 20, 82, 25, 42 ], - [40, 20, 83, 24, 41 ], - [40, 20, 84, 24, 41 ], - [40, 20, 85, 23, 41 ], - [40, 20, 86, 22, 40 ], - [40, 20, 87, 22, 40 ], - [40, 20, 88, 21, 40 ], - [40, 20, 89, 20, 39 ], - [40, 20, 90, 20, 40 ], - [40, 20, 91, 20, 39 ], - [40, 20, 92, 21, 39 ], - [40, 20, 93, 22, 39 ], - [40, 20, 94, 22, 39 ], - [40, 20, 95, 23, 40 ], - [40, 20, 96, 24, 40 ], - [40, 20, 97, 24, 40 ], - [40, 20, 98, 25, 41 ], - [40, 20, 99, 26, 41 ], - [40, 20, 100, 26, 41 ], - [40, 20, 101, 27, 42 ], - [40, 20, 102, 28, 42 ], - [40, 20, 103, 27, 41 ], - [40, 20, 104, 28, 42 ], - [40, 20, 105, 29, 42 ], - [40, 20, 106, 30, 43 ], - [40, 20, 107, 30, 43 ], - [40, 20, 108, 31, 43 ], - [40, 20, 109, 32, 43 ], - [40, 20, 110, 32, 43 ], - [40, 20, 111, 33, 43 ], - [40, 20, 112, 33, 43 ], - [40, 20, 113, 33, 43 ], - [40, 20, 114, 34, 43 ], - [40, 20, 115, 34, 43 ], - [40, 20, 116, 35, 43 ], - [40, 20, 117, 36, 43 ], - [40, 20, 118, 36, 43 ], - [40, 20, 119, 36, 43 ], - [40, 20, 120, 36, 43 ], - [40, 20, 121, 37, 43 ], - [40, 20, 122, 38, 43 ], - [40, 20, 123, 38, 43 ], - [40, 20, 124, 39, 43 ], - [40, 20, 125, 38, 42 ], - [40, 20, 126, 39, 43 ], - [40, 20, 127, 40, 42 ], - [40, 20, 128, 40, 42 ], - [40, 20, 129, 41, 43 ], - [40, 20, 130, 40, 42 ], - [40, 20, 131, 41, 42 ], - [40, 20, 132, 41, 41 ], - [40, 20, 133, 42, 42 ], - [40, 20, 134, 41, 41 ], - [40, 20, 135, 42, 41 ], - [40, 20, 136, 42, 40 ], - [40, 20, 137, 43, 41 ], - [40, 20, 138, 42, 40 ], - [40, 20, 139, 43, 40 ], - [40, 20, 140, 43, 39 ], - [40, 20, 141, 44, 40 ], - [40, 20, 142, 43, 39 ], - [40, 20, 143, 43, 39 ], - [40, 20, 144, 44, 38 ], - [40, 20, 145, 43, 37 ], - [40, 20, 146, 44, 38 ], - [40, 20, 147, 44, 37 ], - [40, 20, 148, 44, 37 ], - [40, 20, 149, 44, 36 ], - [40, 20, 150, 44, 35 ], - [40, 20, 151, 44, 35 ], - [40, 20, 152, 44, 35 ], - [40, 20, 153, 44, 35 ], - [40, 20, 154, 44, 34 ], - [40, 20, 155, 44, 33 ], - [40, 20, 156, 44, 33 ], - [40, 20, 157, 44, 32 ], - [40, 20, 158, 44, 32 ], - [40, 20, 159, 44, 32 ], - [40, 20, 160, 44, 31 ], - [40, 20, 161, 44, 31 ], - [40, 20, 162, 44, 30 ], - [40, 20, 163, 44, 29 ], - [40, 20, 164, 44, 29 ], - [40, 20, 165, 43, 28 ], - [40, 20, 166, 43, 27 ], - [40, 20, 167, 42, 26 ], - [40, 20, 168, 43, 27 ], - [40, 20, 169, 43, 26 ], - [40, 20, 170, 42, 25 ], - [40, 20, 171, 42, 25 ], - [40, 20, 172, 42, 24 ], - [40, 20, 173, 41, 23 ], - [40, 20, 174, 41, 23 ], - [40, 20, 175, 41, 22 ], - [40, 20, 176, 40, 21 ], - [40, 20, 177, 40, 21 ], - [40, 20, 178, 40, 20 ], - [40, 20, 179, 39, 19 ], - [40, 20, 180, 40, 20 ], - [40, 20, 181, 39, 19 ], - [40, 20, 182, 39, 20 ], - [40, 20, 183, 39, 21 ], - [40, 20, 184, 39, 21 ], - [40, 20, 185, 40, 22 ], - [40, 20, 186, 40, 23 ], - [40, 20, 187, 40, 23 ], - [40, 20, 188, 41, 24 ], - [40, 20, 189, 41, 25 ], - [40, 20, 190, 41, 25 ], - [40, 20, 191, 42, 26 ], - [40, 20, 192, 42, 27 ], - [40, 20, 193, 41, 26 ], - [40, 20, 194, 42, 27 ], - [40, 20, 195, 42, 28 ], - [40, 20, 196, 43, 29 ], - [40, 20, 197, 43, 29 ], - [40, 20, 198, 43, 30 ], - [40, 20, 199, 43, 31 ], - [40, 20, 200, 43, 31 ], - [40, 20, 201, 43, 32 ], - [40, 20, 202, 43, 32 ], - [40, 20, 203, 43, 32 ], - [40, 20, 204, 43, 33 ], - [40, 20, 205, 43, 33 ], - [40, 20, 206, 43, 34 ], - [40, 20, 207, 43, 35 ], - [40, 20, 208, 43, 35 ], - [40, 20, 209, 43, 35 ], - [40, 20, 210, 43, 36 ], - [40, 20, 211, 43, 36 ], - [40, 20, 212, 43, 37 ], - [40, 20, 213, 43, 37 ], - [40, 20, 214, 43, 38 ], - [40, 20, 215, 42, 37 ], - [40, 20, 216, 43, 38 ], - [40, 20, 217, 42, 39 ], - [40, 20, 218, 42, 39 ], - [40, 20, 219, 43, 40 ], - [40, 20, 220, 42, 39 ], - [40, 20, 221, 42, 40 ], - [40, 20, 222, 41, 40 ], - [40, 20, 223, 42, 41 ], - [40, 20, 224, 41, 40 ], - [40, 20, 225, 41, 41 ], - [40, 20, 226, 40, 41 ], - [40, 20, 227, 41, 42 ], - [40, 20, 228, 40, 41 ], - [40, 20, 229, 40, 42 ], - [40, 20, 230, 39, 42 ], - [40, 20, 231, 40, 43 ], - [40, 20, 232, 39, 42 ], - [40, 20, 233, 39, 42 ], - [40, 20, 234, 38, 43 ], - [40, 20, 235, 37, 42 ], - [40, 20, 236, 38, 43 ], - [40, 20, 237, 37, 43 ], - [40, 20, 238, 37, 43 ], - [40, 20, 239, 36, 43 ], - [40, 20, 240, 36, 43 ], - [40, 20, 241, 35, 43 ], - [40, 20, 242, 35, 43 ], - [40, 20, 243, 35, 43 ], - [40, 20, 244, 34, 43 ], - [40, 20, 245, 33, 43 ], - [40, 20, 246, 33, 43 ], - [40, 20, 247, 32, 43 ], - [40, 20, 248, 32, 43 ], - [40, 20, 249, 32, 43 ], - [40, 20, 250, 31, 43 ], - [40, 20, 251, 31, 43 ], - [40, 20, 252, 30, 43 ], - [40, 20, 253, 29, 43 ], - [40, 20, 254, 29, 43 ], - [40, 20, 255, 28, 42 ], - [40, 20, 256, 27, 42 ], - [40, 20, 257, 26, 41 ], - [40, 20, 258, 27, 42 ], - [40, 20, 259, 26, 42 ], - [40, 20, 260, 25, 41 ], - [40, 20, 261, 25, 41 ], - [40, 20, 262, 24, 41 ], - [40, 20, 263, 23, 40 ], - [40, 20, 264, 23, 40 ], - [40, 20, 265, 22, 40 ], - [40, 20, 266, 21, 39 ], - [40, 20, 267, 21, 39 ], - [40, 20, 268, 20, 39 ], - [40, 20, 269, 19, 39 ], - [40, 20, 270, 20, 40 ], - [40, 20, 271, 19, 39 ], - [40, 20, 272, 20, 40 ], - [40, 20, 273, 21, 40 ], - [40, 20, 274, 21, 40 ], - [40, 20, 275, 22, 41 ], - [40, 20, 276, 23, 41 ], - [40, 20, 277, 23, 41 ], - [40, 20, 278, 24, 42 ], - [40, 20, 279, 25, 42 ], - [40, 20, 280, 25, 42 ], - [40, 20, 281, 26, 43 ], - [40, 20, 282, 27, 43 ], - [40, 20, 283, 26, 42 ], - [40, 20, 284, 27, 43 ], - [40, 20, 285, 28, 43 ], - [40, 20, 286, 29, 44 ], - [40, 20, 287, 29, 44 ], - [40, 20, 288, 30, 44 ], - [40, 20, 289, 31, 44 ], - [40, 20, 290, 31, 44 ], - [40, 20, 291, 32, 44 ], - [40, 20, 292, 32, 44 ], - [40, 20, 293, 32, 44 ], - [40, 20, 294, 33, 44 ], - [40, 20, 295, 33, 44 ], - [40, 20, 296, 34, 44 ], - [40, 20, 297, 35, 44 ], - [40, 20, 298, 35, 44 ], - [40, 20, 299, 35, 44 ], - [40, 20, 300, 35, 44 ], - [40, 20, 301, 36, 44 ], - [40, 20, 302, 37, 44 ], - [40, 20, 303, 37, 44 ], - [40, 20, 304, 38, 44 ], - [40, 20, 305, 37, 43 ], - [40, 20, 306, 38, 44 ], - [40, 20, 307, 39, 43 ], - [40, 20, 308, 39, 43 ], - [40, 20, 309, 40, 44 ], - [40, 20, 310, 39, 43 ], - [40, 20, 311, 40, 43 ], - [40, 20, 312, 40, 42 ], - [40, 20, 313, 41, 43 ], - [40, 20, 314, 40, 42 ], - [40, 20, 315, 41, 42 ], - [40, 20, 316, 41, 41 ], - [40, 20, 317, 42, 42 ], - [40, 20, 318, 41, 41 ], - [40, 20, 319, 42, 41 ], - [40, 20, 320, 42, 40 ], - [40, 20, 321, 43, 41 ], - [40, 20, 322, 42, 40 ], - [40, 20, 323, 42, 40 ], - [40, 20, 324, 43, 39 ], - [40, 20, 325, 42, 38 ], - [40, 20, 326, 43, 39 ], - [40, 20, 327, 43, 38 ], - [40, 20, 328, 43, 38 ], - [40, 20, 329, 43, 37 ], - [40, 20, 330, 43, 37 ], - [40, 20, 331, 43, 36 ], - [40, 20, 332, 43, 36 ], - [40, 20, 333, 43, 36 ], - [40, 20, 334, 43, 35 ], - [40, 20, 335, 43, 34 ], - [40, 20, 336, 43, 34 ], - [40, 20, 337, 43, 33 ], - [40, 20, 338, 43, 33 ], - [40, 20, 339, 43, 33 ], - [40, 20, 340, 43, 32 ], - [40, 20, 341, 43, 32 ], - [40, 20, 342, 43, 31 ], - [40, 20, 343, 43, 30 ], - [40, 20, 344, 43, 30 ], - [40, 20, 345, 42, 29 ], - [40, 20, 346, 42, 28 ], - [40, 20, 347, 41, 27 ], - [40, 20, 348, 42, 28 ], - [40, 20, 349, 42, 27 ], - [40, 20, 350, 41, 26 ], - [40, 20, 351, 41, 26 ], - [40, 20, 352, 41, 25 ], - [40, 20, 353, 40, 24 ], - [40, 20, 354, 40, 24 ], - [40, 20, 355, 40, 23 ], - [40, 20, 356, 39, 22 ], - [40, 20, 357, 39, 22 ], - [40, 20, 358, 39, 21 ], - [40, 20, 359, 39, 20 ], - [40, 20, 360, 40, 20 ], - [40, 20, 110.1, 32, 43 ], - [40, 20, 344.9, 42, 29 ], - [40, 20, 142.85, 43, 39 ], - [40, 20, -106.52, 29, 43 ], - [40, 20, -295.78, 35, 45 ], - [40, 20, 287.58, 30, 44 ], - [40, 20, -3.62, 39, 22 ], - [40, 20, -33.96, 43, 39 ], - [40, 20, 136.46, 42, 40 ], - [40, 20, -293.72, 34, 44 ], - [40, 20, 10.71, 43, 27 ], - [40, 20, -80.02, 25, 42 ], - [40, 20, 258.53, 26, 42 ], - [40, 20, -110.41, 31, 43 ], - [40, 20, 340.87, 43, 32 ], - [40, 20, 347.4, 42, 28 ], - [40, 20, -277.97, 25, 42 ], - [40, 20, 126.74, 39, 43 ], - [40, 20, 70.99, 32, 44 ], - [40, 20, 57.54, 38, 44 ], - [40, 20, 251.66, 30, 42 ], - [40, 20, -91.15, 19, 39 ], - [40, 20, 164.92, 43, 28 ], - [40, 20, -27.14, 43, 36 ], - [40, 20, 230.28, 39, 42 ], - [40, 20, 271.37, 19, 39 ], - [40, 20, -207.19, 44, 35 ], - [40, 20, -58.19, 37, 44 ], - [40, 20, -339.34, 44, 33 ], - [40, 20, 352.45, 41, 25 ], - [40, 20, -245.62, 34, 43 ], - [40, 20, 130.77, 41, 42 ], - [40, 20, 337.34, 43, 33 ], - [40, 20, 257.24, 27, 42 ], - [40, 20, -335.75, 44, 34 ], - [40, 20, -318.44, 42, 41 ], - [40, 20, 184.82, 40, 22 ], - [40, 20, 20.64, 44, 33 ], - [40, 20, 7.6, 42, 25 ], - [40, 20, -38.72, 43, 41 ], - [40, 20, 86.92, 22, 40 ], - [40, 20, -341.69, 43, 31 ], - [40, 20, 241.26, 36, 44 ], - [40, 20, -14.56, 42, 29 ], - [40, 20, -92.1, 20, 39 ], - [40, 20, 222.12, 41, 40 ], - [40, 20, -27.16, 43, 36 ], - [40, 20, -10.06, 41, 26 ], - [40, 20, -11.15, 42, 27 ], - [40, 20, -316.18, 42, 41 ], - [40, 20, -312.53, 42, 43 ], - [40, 20, -119.49, 35, 43 ], - [40, 20, -47.32, 41, 43 ], - [40, 20, 212.4, 43, 37 ], - [40, 20, 213.37, 43, 38 ], - [40, 20, -177.05, 39, 21 ], - [40, 20, 123.76, 39, 43 ], - [40, 20, -353.82, 41, 24 ], - [40, 20, 124.76, 38, 42 ], - [40, 20, 144.43, 44, 38 ], - [40, 20, 358.63, 39, 20 ], - [40, 20, 239.15, 36, 43 ], - [40, 20, -84.81, 22, 41 ], - [40, 20, 335.97, 43, 34 ], - [40, 20, 136.38, 42, 40 ], - [40, 20, -60.55, 35, 44 ], - [40, 20, -342.47, 44, 31 ], - [40, 20, -38.8, 43, 41 ], - [40, 20, 320.09, 42, 40 ], - [40, 20, 25.13, 44, 34 ], - [40, 20, 282.48, 27, 43 ], - [40, 20, 47, 42, 43 ], - [40, 20, 43.45, 43, 42 ], - [40, 20, 163.73, 44, 29 ], - [40, 20, -327.56, 44, 38 ], - [40, 20, 311.35, 40, 43 ], - [40, 20, 25.85, 44, 35 ], - [40, 20, 5.28, 41, 23 ], - [40, 20, -58.72, 36, 44 ], - [40, 20, -345.3, 43, 29 ], - [40, 20, 49.11, 41, 43 ], - [40, 20, -11.25, 42, 27 ], - [40, 20, -104.78, 28, 42 ], - [40, 20, -358.22, 40, 21 ], - [40, 20, -158.86, 43, 32 ], - [40, 20, -251.42, 31, 42 ], - [40, 20, -175.27, 40, 22 ], - [40, 20, 324.91, 42, 38 ], - [40, 20, -245.24, 34, 43 ], - [40, 20, 309.5, 39, 43 ], - [40, 20, 109.34, 32, 43 ], - [40, 20, -246.61, 33, 43 ], - [40, 20, 188.64, 41, 25 ], - [40, 20, -335.47, 44, 34 ], - [40, 20, -270.64, 20, 39 ], - [40, 20, -34.98, 42, 38 ], - [40, 20, -36.02, 43, 39 ], - [40, 20, -253.11, 30, 43 ], - [40, 20, 286.22, 29, 44 ], - [40, 20, -75.94, 27, 43 ], - [40, 20, 132.03, 41, 41 ], - [40, 20, 208.69, 44, 36 ], - [40, 20, 331.07, 44, 37 ], - [40, 20, -184.53, 41, 22 ], - [40, 20, 12.42, 43, 28 ], - [40, 20, -356.5, 40, 22 ], - [40, 20, -233.19, 39, 43 ], - [40, 20, -321.73, 43, 40 ], - [40, 20, 8.78, 42, 26 ], - [40, 20, 68.1, 33, 44 ], - [40, 20, -307.02, 40, 43 ], - [40, 20, -302.11, 38, 44 ], - [40, 20, -303.15, 38, 44 ], - [40, 20, -51.8, 39, 43 ], - [40, 20, -300.33, 37, 44 ], - [40, 20, -102, 27, 42 ], - [40, 20, 56.78, 38, 44 ], - [40, 20, -115.59, 34, 44 ], - [40, 20, -137.09, 42, 41 ], - [40, 20, 171.55, 42, 24 ], - [40, 20, -166.1, 42, 27 ], - [40, 20, 332.25, 43, 36 ], - [40, 20, 284.95, 28, 43 ], - [40, 20, -337.46, 44, 33 ], - [40, 20, 356.79, 39, 22 ], - [40, 20, -345.7, 43, 28 ], - [40, 20, -12.44, 42, 28 ], - [40, 20, -39.24, 42, 40 ], - [40, 20, -238.81, 37, 43 ], - [40, 20, -86.22, 21, 40 ], - [40, 20, 244.83, 34, 44 ], - [40, 20, 253.22, 29, 43 ], - [40, 20, -237.53, 38, 43 ], - [40, 20, 215.89, 43, 38 ], - [40, 20, -291.31, 33, 44 ], - [40, 20, 134.89, 42, 41 ], - [40, 20, 219.39, 42, 39 ], - [40, 20, -164.5, 42, 28 ], - [40, 20, 173.17, 41, 23 ], - [40, 20, -131.83, 40, 41 ], - [40, 20, 263.61, 23, 40 ], - [40, 20, 226.15, 40, 41 ], - [40, 20, -73.94, 29, 44 ], - [40, 20, 320.47, 42, 40 ], - [40, 20, -185.65, 41, 22 ], - [40, 20, -14.26, 42, 28 ], - [40, 20, -141.54, 42, 39 ], - [40, 20, 231.14, 40, 43 ], - [40, 20, 230.15, 39, 42 ], - [40, 20, 81.38, 25, 42 ], - [40, 20, 42.68, 43, 42 ], - [40, 20, -295.95, 35, 44 ], - [40, 20, 53.63, 39, 44 ], - [40, 20, -32.37, 43, 38 ], - [40, 20, -273.41, 22, 40 ], - [40, 20, 50.41, 40, 43 ], - [40, 20, -18.07, 43, 31 ], - [40, 20, 74.16, 29, 43 ], - [40, 20, -348.83, 43, 27 ], - [40, 20, 103.13, 28, 42 ], - [40, 20, 347.94, 42, 28 ], - [40, 20, 256.01, 27, 42 ], - [40, 20, -3.66, 39, 22 ], - [40, 20, -249.59, 32, 43 ], - [40, 20, 111.89, 33, 43 ], - [40, 20, 65.03, 34, 44 ], - [40, 20, 245.3, 33, 43 ], - [40, 20, -28.72, 44, 37 ], - [40, 20, 260.54, 25, 41 ], - [40, 20, 58.47, 37, 44 ], - [40, 20, 199.45, 43, 31 ], - [40, 20, 164.15, 43, 28 ], - [40, 20, -75.38, 28, 43 ], - [40, 20, -234.49, 39, 43 ], - [40, 20, 124.61, 38, 42 ], - [40, 20, 98.97, 26, 41 ], - [40, 20, 111.25, 33, 43 ], - [40, 20, 343.08, 43, 30 ], - [40, 20, -29.9, 43, 36 ], - [40, 20, -18.6, 42, 31 ], - [40, 20, 64.45, 35, 45 ], - [40, 20, -347.22, 43, 28 ], - [40, 20, 45.46, 42, 42 ], - [40, 20, -241.93, 36, 43 ], - [40, 20, -19.59, 43, 32 ], - [40, 20, 132.05, 41, 41 ], - [40, 20, 168.49, 43, 26 ], - [40, 20, 322.34, 42, 40 ], - [40, 20, -153.79, 43, 34 ], - [40, 20, 179.66, 39, 19 ], - [40, 20, 65.47, 34, 44 ], - [40, 20, -165.85, 42, 27 ], - [40, 20, 75.66, 28, 43 ], - [40, 20, -298.19, 36, 44 ], - [40, 20, -55.44, 37, 43 ], - [40, 20, -172.45, 41, 24 ], - [40, 20, 126.84, 39, 43 ], - [40, 20, -170.14, 41, 25 ], - [40, 20, 158.84, 44, 32 ], - [40, 20, 27.38, 44, 36 ], - [40, 20, 248.33, 32, 43 ], - [40, 20, -1.71, 39, 21 ], - [40, 20, -168.47, 42, 26 ], - [40, 20, -187.06, 41, 23 ], - [40, 20, 123.8, 39, 43 ], - [40, 20, 316.15, 41, 41 ], - [40, 20, 271.92, 20, 40 ], - [40, 20, -124.95, 37, 42 ], - [40, 20, 299.22, 35, 44 ], - [40, 20, -117.99, 35, 43 ], - [40, 20, 216.46, 43, 38 ], - [40, 20, 3.67, 40, 22 ], - [40, 20, -105.2, 28, 42 ], - [40, 20, -98.09, 24, 41 ], - [40, 20, 121.74, 38, 44 ], - [40, 20, 235.21, 37, 42 ], - [40, 20, -326.05, 44, 39 ], - [40, 20, -69.77, 31, 44 ], - [40, 20, 197.55, 43, 30 ], - [40, 20, -119.83, 35, 43 ], - [40, 20, -250.11, 32, 43 ], - [40, 20, -96.99, 23, 40 ], - [40, 20, 74.32, 29, 43 ], - [40, 20, 185.56, 40, 22 ], - [40, 20, -35.18, 43, 39 ], - [40, 20, -341.13, 43, 31 ], - [40, 20, -346.9, 43, 28 ], - [40, 20, -268.34, 21, 39 ], - [40, 20, -151.26, 44, 36 ], - [40, 20, 171.95, 42, 24 ], - [40, 20, 119.05, 36, 43 ], - [40, 20, -262.94, 24, 40 ], - [40, 20, -189.77, 42, 25 ], - [40, 20, 310.58, 40, 43 ], - [40, 20, -89.99, 19, 39 ], - [40, 20, 294.04, 33, 44 ], - [40, 20, 266.72, 21, 39 ], - [40, 20, -178.07, 39, 20 ], - [40, 20, -190.92, 43, 26 ], - [40, 20, 205.94, 43, 34 ], - [40, 20, 63.94, 35, 44 ], - [40, 20, -334.47, 45, 35 ], - [40, 20, -150.4, 43, 35 ], - [40, 20, 318.74, 42, 41 ], - [40, 20, -72.56, 29, 44 ], - [40, 20, 331.35, 44, 37 ], - [40, 20, 193.95, 42, 27 ], - [40, 20, -38.6, 42, 40 ], - [40, 20, -98.43, 24, 41 ], - [40, 20, 31.49, 44, 37 ], - [40, 20, 201.57, 43, 32 ], - [40, 20, 11.46, 43, 27 ], - [40, 20, 294.51, 33, 44 ], - [40, 20, -84.11, 23, 41 ], - [40, 20, -162.99, 43, 29 ], - [40, 20, -100.68, 26, 42 ], - [40, 20, -65.23, 33, 44 ], - [40, 20, -149.88, 43, 36 ], - [40, 20, -9.01, 41, 26 ], - [40, 20, 143.51, 44, 38 ], - [40, 20, -337.94, 45, 34 ], - [40, 20, -249.97, 32, 43 ], - [40, 20, 240.58, 35, 43 ], - [40, 20, -167.7, 42, 27 ], - [40, 20, -299.39, 36, 44 ], - [40, 20, -209.42, 44, 35 ], - [40, 20, -233.67, 39, 43 ], - [40, 20, 327.34, 43, 38 ], - [40, 20, -27.49, 43, 36 ], - [40, 20, -64.59, 34, 45 ], - [40, 20, 173.27, 41, 23 ], - [40, 20, -323.55, 44, 39 ], - [40, 20, -39.05, 43, 41 ], - [40, 20, -337.14, 44, 33 ], - [40, 20, 355.2, 40, 23 ], - [40, 20, 248.4, 32, 43 ], - [40, 20, 354.22, 40, 24 ], - [40, 20, 189.14, 41, 25 ], - [40, 20, -150.21, 43, 35 ], - [40, 20, -104.22, 27, 42 ], - [40, 20, -139.37, 42, 40 ], - [40, 20, -308.64, 40, 43 ], - [40, 20, 267.25, 20, 39 ], - [40, 20, -204.87, 44, 33 ], - [40, 20, -32.74, 43, 38 ], - [40, 20, -255.74, 28, 42 ], - [40, 20, 54.45, 39, 44 ], - [40, 20, 262.03, 24, 41 ], - [40, 20, -45.61, 40, 42 ], - [40, 20, -314.56, 42, 42 ], - [40, 20, 45.53, 42, 42 ], - [40, 20, -23.54, 43, 33 ], - [40, 20, -204.53, 44, 33 ], - [40, 20, -73.9, 29, 44 ], - [40, 20, 168.76, 43, 26 ], - [40, 20, -143.92, 43, 38 ], - [40, 20, 76.69, 28, 43 ], - [40, 20, 295.09, 33, 44 ], - [40, 20, -176.59, 39, 21 ], - [40, 20, -310.8, 41, 43 ], - [40, 20, -129.5, 39, 42 ], - [40, 20, 356.69, 39, 22 ], - [40, 20, -274.35, 23, 41 ], - [40, 20, 191.45, 42, 26 ], - [40, 20, -340.45, 44, 32 ], - [40, 20, -279.15, 26, 42 ], - [40, 20, 79.84, 27, 43 ], - [40, 20, -346.24, 43, 28 ], - [40, 20, 269.99, 19, 39 ], - [40, 20, 289.64, 31, 44 ], - [40, 20, -90.45, 19, 39 ], - [40, 20, -229.38, 41, 42 ], - [40, 20, 341.01, 43, 32 ], - [40, 20, -183.2, 40, 21 ], - [40, 20, -74.25, 28, 43 ], - [40, 20, -51.74, 39, 43 ], - [40, 20, -78.93, 26, 43 ], - [40, 20, 340.21, 43, 32 ], - [40, 20, -149.72, 43, 36 ], - [40, 20, 235.46, 37, 42 ], - [40, 20, -334.36, 45, 35 ], - [40, 20, 255.82, 27, 42 ], - [40, 20, -148.08, 43, 37 ], - [40, 20, -178.88, 39, 19 ], - [40, 20, -178.08, 39, 20 ], - [40, 20, -339.33, 44, 33 ], - [40, 20, 37.2, 43, 40 ], - [40, 20, 258.61, 26, 42 ], - [40, 20, 315.77, 41, 41 ], - [40, 20, 220.62, 42, 40 ], - [40, 20, 307.81, 39, 43 ], - [40, 20, -173.74, 40, 23 ], - [40, 20, 217.3, 42, 39 ], - [40, 20, -326.54, 44, 39 ], - [40, 20, -342.29, 44, 31 ], - [40, 20, 236.86, 37, 43 ], - [40, 20, -245.68, 34, 43 ], - [40, 20, 97.55, 25, 41 ], - [40, 20, 250.62, 31, 43 ], - [40, 20, -335.69, 44, 34 ], - [40, 20, 27.19, 44, 36 ], - [40, 20, -199.84, 44, 31 ], - [40, 20, -205.07, 44, 33 ], - [40, 20, 8.19, 42, 25 ], - [40, 20, -23.03, 43, 33 ], - [40, 20, 80.68, 26, 42 ], - [40, 20, 316.45, 41, 41 ], - [40, 20, 258.04, 27, 42 ], - [40, 20, 60.89, 36, 44 ], - [40, 20, -193.27, 43, 27 ], - [40, 20, 133.49, 42, 42 ], - [40, 20, 86.53, 22, 40 ], - [40, 20, -297.46, 36, 44 ], - [40, 20, 345.41, 42, 29 ], - [40, 20, 267.65, 20, 39 ], - [40, 20, -115.54, 34, 44 ], - [40, 20, -353.92, 41, 24 ], - [40, 20, -55.15, 37, 43 ], - [40, 20, -216.94, 43, 39 ], - [40, 20, 321.85, 42, 40 ], - [40, 20, -194.53, 43, 28 ], - [40, 20, -269.13, 20, 39 ], - [40, 20, -211.89, 44, 37 ], - [40, 20, -337.23, 44, 33 ], - [40, 20, -235.66, 39, 43 ], - [40, 20, -194.18, 43, 27 ], - [40, 20, 259.63, 26, 42 ], - [40, 20, -121.34, 36, 43 ], - [40, 20, 263.37, 23, 40 ], - [40, 20, 150.24, 44, 35 ], - [40, 20, -97.02, 23, 40 ], - [40, 20, -69.44, 32, 44 ], - [40, 20, 310.41, 39, 43 ], - [40, 20, 57.91, 38, 44 ], - [40, 20, 298.75, 36, 45 ], - [40, 20, -72.63, 29, 44 ], - [40, 20, -221.41, 42, 40 ], - [40, 20, 255.19, 28, 42 ], - [40, 20, -174.6, 40, 22 ], - [40, 20, 199.48, 43, 31 ], - [40, 20, -298.08, 36, 44 ], - [40, 20, 318.9, 42, 41 ], - [40, 20, -73.99, 29, 44 ], - [40, 20, -235.54, 38, 42 ], - [40, 20, 304.31, 38, 44 ], - [40, 20, -166.34, 42, 27 ], - [40, 20, 8.92, 42, 26 ], - [40, 20, 310.39, 39, 43 ], - [40, 20, 138.52, 42, 40 ], - [40, 20, 151.99, 44, 35 ], - [40, 20, 272.24, 20, 40 ], - [40, 20, 303.99, 38, 44 ], - [40, 20, 242.87, 35, 43 ], - [40, 20, -299.66, 36, 44 ], - [40, 20, 326.77, 43, 38 ], - [40, 20, -352.79, 42, 25 ], - [40, 20, -133.84, 40, 41 ], - [40, 20, 226.39, 40, 41 ], - [40, 20, -114.12, 33, 43 ], - [40, 20, -230.47, 40, 42 ], - [40, 20, 16.63, 44, 30 ], - [40, 20, 148.86, 44, 36 ], - [40, 20, 60.09, 36, 44 ], - [40, 20, -32.96, 43, 38 ], - [40, 20, -153.24, 43, 35 ], - [40, 20, -1.16, 39, 20 ], - [40, 20, 254.41, 28, 42 ], - [40, 20, -14.65, 42, 29 ], - [40, 20, -105.97, 29, 43 ], - [40, 20, -280.19, 27, 43 ], - [40, 20, -175.17, 40, 22 ], - [40, 20, -44.05, 41, 41 ], - [40, 20, -321.29, 44, 41 ], - [40, 20, 110.85, 33, 43 ], - [40, 20, 80.41, 26, 42 ], - [40, 20, 343.02, 43, 30 ], - [40, 20, 304.51, 37, 43 ], - [40, 20, -270.67, 20, 39 ], - [40, 20, 293.41, 32, 44 ], - [40, 20, 83.02, 24, 41 ], - [40, 20, 241.33, 36, 44 ], - [40, 20, 205.64, 44, 34 ], - [40, 20, 27.01, 44, 36 ], - [40, 20, 124.19, 39, 43 ], - [40, 20, 265.98, 21, 39 ], - [40, 20, -6.23, 40, 24 ], - [40, 20, 131.41, 41, 41 ], - [40, 20, -227.86, 41, 41 ], - [40, 20, -139.85, 42, 39 ], - [40, 20, -342.72, 44, 30 ], - [40, 20, -98.33, 24, 41 ], - [40, 20, 236.79, 37, 43 ], - [40, 20, 166.14, 43, 27 ], - [40, 20, 321.77, 42, 40 ], - [40, 20, -156.18, 43, 33 ], - [40, 20, -347.1, 42, 27 ], - [40, 20, -39.4, 42, 40 ], - [40, 20, -261.77, 25, 41 ], - [40, 20, -1.74, 39, 21 ], - [40, 20, 214.63, 42, 37 ], - [40, 20, -181.95, 40, 20 ], - [40, 20, 183.09, 39, 21 ], - [40, 20, -189.43, 42, 25 ], - [40, 20, -143.24, 43, 38 ], - [40, 20, -66.07, 33, 44 ], - [40, 20, 250.99, 31, 43 ], - [40, 20, -160.22, 43, 31 ], - [40, 20, -121.56, 36, 43 ], - [40, 20, 340.33, 43, 32 ], - [40, 20, -226.82, 42, 42 ], - [40, 20, 321.46, 42, 40 ], - [40, 20, 221.65, 41, 40 ], - [40, 20, 338.83, 43, 33 ], - [40, 20, -11.53, 42, 27 ], - [40, 20, -14.16, 42, 28 ], - [40, 20, 244.81, 34, 44 ], - [40, 20, 342.24, 43, 31 ], - [40, 20, -242.76, 36, 43 ], - [40, 20, -343.06, 44, 30 ], - [40, 20, -157.61, 43, 32 ], - [40, 20, -225.48, 42, 41 ], - [40, 20, -81.38, 24, 42 ], - [40, 20, -280.83, 27, 43 ], - [40, 20, 300.67, 36, 44 ], - [40, 20, -119.62, 35, 43 ], - [40, 20, -77, 26, 42 ], - [40, 20, 313.57, 40, 42 ], - [40, 20, 200.99, 43, 32 ], - [40, 20, 21.23, 44, 33 ], - [40, 20, -48.18, 40, 42 ], - [40, 20, 55.62, 39, 44 ], - [40, 20, 199.29, 43, 31 ], - [40, 20, -225.09, 42, 41 ], - [40, 20, 226.2, 40, 41 ], - [40, 20, -303.96, 39, 44 ], - [40, 20, 68.84, 33, 44 ], - [40, 20, 117.18, 36, 43 ], - [40, 20, -104.18, 27, 42 ], - [40, 20, 307.29, 39, 43 ], - [40, 20, 97.5, 25, 41 ], - [40, 20, 29.01, 44, 36 ], - [40, 20, 268.74, 19, 39 ], - [40, 20, -40.85, 42, 41 ], - [40, 20, 7.83, 42, 25 ], - [40, 20, -102.79, 27, 42 ], - [40, 20, 304.99, 37, 43 ], - [40, 20, -107.37, 29, 43 ], - [40, 20, -120.56, 36, 43 ], - [40, 20, -297.78, 36, 44 ], - [40, 20, -90.42, 19, 39 ], - [40, 20, 81.84, 25, 42 ], - [40, 20, -163.25, 43, 29 ], - [40, 20, 188.2, 41, 24 ], - [40, 20, 161.02, 44, 31 ], - [40, 20, -222.59, 43, 41 ], - [40, 20, -291.42, 33, 44 ], - [40, 20, -275.99, 24, 41 ], - [40, 20, -269.03, 20, 39 ], - [40, 20, 269.58, 19, 39 ], - [40, 20, 105.25, 29, 42 ], - [573, 347, -55.47, 609, 669 ], - [765, 205, 0.58, 766, 212 ], - [351, 714, 256.41, 775, 508 ], - [276, 434, -74.59, 490, 381 ], - [146, 6, 293.24, 62, 136 ], - [512, 715, -174.13, 581, 762 ], - [853, 14, 95.45, 95, 849 ], - [457, 224, -76.35, 324, 497 ], - [174, 370, -7.76, 221, 390 ], - [294, 467, -98.19, 502, 357 ], - [955, 129, 227, 744, 785 ], - [364, 702, -301.62, 788, 677 ], - [877, 197, -353.05, 894, 302 ], - [730, 404, 53.02, 762, 826 ], - [112, 514, 58.24, 495, 366 ], - [17, 129, 8.44, 35, 130 ], - [281, 768, 20.87, 536, 818 ], - [929, 343, 230.05, 858, 931 ], - [308, 473, -143.37, 528, 562 ], - [809, 693, 294.19, 962, 1021 ], - [158, 641, -305.47, 613, 500 ], - [993, 146, 352.59, 1002, 273 ], - [52, 36, -182.82, 53, 37 ], - [61, 583, 195.61, 214, 576 ], - [649, 666, -43.4, 928, 929 ], - [220, 678, 77.36, 710, 362 ], - [744, 121, 77.35, 280, 751 ], - [261, 49, -321.61, 234, 200 ], - [77, 280, 121.51, 279, 210 ], - [385, 119, 50.72, 335, 373 ], - [291, 237, -68.73, 325, 357 ], - [369, 213, 67.7, 337, 422 ], - [358, 251, 100.59, 312, 396 ], - [610, 297, -73.68, 455, 668 ], - [376, 15, -169.68, 371, 81 ], - [827, 179, -254.18, 397, 843 ], - [425, 737, -141.29, 791, 839 ], - [23, 164, -95.58, 164, 37 ], - [77, 222, 166.62, 125, 232 ], - [762, 510, 277.54, 604, 822 ], - [322, 728, -221.02, 720, 759 ], - [736, 236, -22.05, 770, 495 ], - [321, 504, 212.83, 541, 597 ], - [976, 193, -229.44, 781, 865 ], - [359, 475, -215.81, 569, 594 ], - [630, 326, -48.07, 662, 686 ], - [780, 644, -77.76, 793, 899 ], - [67, 661, 75.98, 657, 225 ], - [443, 718, 283.2, 799, 595 ], - [168, 522, 40.53, 466, 506 ], - [51, 763, 2.14, 78, 763 ], - [249, 547, 222.59, 552, 570 ], - [729, 19, -25.54, 664, 331 ], - [520, 750, 154.94, 789, 898 ], - [706, 251, -120.38, 573, 735 ], - [911, 723, 185.11, 970, 800 ], - [330, 540, 68.77, 622, 503 ], - [732, 590, -32.05, 932, 888 ], - [328, 154, -78.98, 212, 350 ], - [219, 279, -310.49, 354, 347 ], - [788, 317, -315.86, 786, 775 ], - [279, 503, 196.18, 406, 559 ], - [84, 282, 213.32, 224, 281 ], - [559, 671, 196.16, 722, 798 ], - [268, 432, -288.99, 495, 394 ], - [609, 347, -331.79, 700, 593 ], - [360, 594, 173.57, 424, 629 ], - [970, 375, 5.79, 1003, 470 ], - [412, 620, 149.31, 670, 742 ], - [812, 16, -309.25, 525, 638 ], - [882, 606, -12.36, 990, 780 ], - [945, 47, -261.03, 193, 939 ], - [712, 110, 2.68, 716, 143 ], - [503, 529, -88.4, 542, 517 ], - [270, 730, 316.29, 698, 714 ], - [371, 418, -79.07, 479, 443 ], - [412, 687, -242.53, 800, 681 ], - [146, 646, 108.15, 659, 338 ], - [667, 187, -31.06, 666, 504 ], - [367, 27, -16.94, 358, 132 ], - [439, 689, -168.99, 561, 758 ], - [934, 629, -125.04, 1050, 1124 ], - [50, 395, -22.51, 196, 384 ], - [566, 4, -246.96, 225, 521 ], - [952, 206, -283.43, 421, 973 ], - [890, 484, 107.7, 731, 993 ], - [266, 25, 31.52, 239, 160 ], - [433, 134, -83.19, 183, 445 ], - [75, 634, 91.53, 636, 90 ], - [543, 140, 116.69, 368, 547 ], - [6, 469, 41.81, 317, 353 ], - [278, 401, -88.97, 404, 284 ], - [612, 439, 280.54, 542, 681 ], - [68, 95, 283.63, 107, 88 ], - [229, 41, -243.53, 139, 221 ], - [338, 708, 210.11, 646, 780 ], - [1003, 139, 232.72, 717, 881 ], - [536, 463, 357.89, 551, 482 ], - [930, 519, 231.4, 985, 1049 ], - [548, 157, -357.44, 554, 181 ], - [202, 162, 82.14, 187, 222 ], - [773, 370, -262.23, 471, 814 ], - [135, 61, 148.43, 147, 121 ], - [22, 112, 236.79, 105, 78 ], - [937, 283, 274.47, 354, 956 ], - [79, 536, 217.74, 389, 471 ], - [890, 520, 347.55, 980, 699 ], - [708, 154, 61.36, 474, 695 ], - [705, 82, -172.68, 708, 169 ], - [523, 493, -25.61, 683, 671 ], - [526, 644, 125.61, 830, 801 ], - [131, 455, -248, 471, 290 ], - [270, 556, -191.46, 374, 597 ], - [993, 572, -87.31, 616, 1018 ], - [818, 506, 177.51, 839, 540 ], - [696, 565, -40.43, 894, 881 ], - [494, 464, -273.43, 492, 521 ], - [476, 227, -129.96, 478, 509 ], - [52, 755, -53.22, 635, 493 ], - [318, 379, -311.68, 494, 489 ], - [794, 5, 291.36, 293, 741 ], - [460, 103, -2.3, 462, 121 ], - [619, 305, -201.62, 687, 511 ], - [859, 282, 333.95, 894, 630 ], - [223, 127, 88.01, 134, 226 ], - [987, 649, -102.96, 852, 1106 ], - [418, 251, 331.17, 486, 421 ], - [541, 608, -176.92, 572, 635 ], - [868, 646, -189.3, 960, 777 ], - [281, 116, 165.4, 300, 181 ], - [349, 711, 169.74, 470, 761 ], - [252, 288, 265.89, 304, 271 ], - [760, 752, -168.4, 894, 888 ], - [986, 628, 95.31, 716, 1038 ], - [949, 27, 213.8, 802, 548 ], - [562, 767, 101.53, 864, 702 ], - [927, 312, 336.26, 973, 659 ], - [886, 717, 185.51, 949, 798 ], - [123, 600, 70.64, 606, 315 ], - [365, 42, 178.97, 365, 47 ], - [89, 304, 124.91, 299, 245 ], - [842, 492, -325.96, 972, 879 ], - [708, 294, -341.61, 764, 502 ], - [981, 265, 246.51, 633, 1004 ], - [604, 208, 271.05, 218, 607 ], - [396, 629, 269.55, 631, 399 ], - [29, 556, -158.42, 229, 526 ], - [1019, 453, -206.3, 1114, 856 ], - [771, 544, 355.98, 806, 597 ], - [359, 50, -324.83, 322, 247 ], - [102, 116, -40.39, 151, 154 ], - [791, 747, -299.35, 1038, 1055 ], - [840, 510, -23.99, 973, 807 ], - [866, 477, 224.07, 953, 944 ], - [705, 162, -301.25, 503, 686 ], - [578, 459, 288.1, 614, 692 ], - [450, 481, 89.13, 487, 456 ], - [736, 476, -207, 871, 757 ], - [955, 286, 302.83, 756, 957 ], - [949, 555, 349.29, 1034, 721 ], - [999, 631, -262.23, 760, 1073 ], - [430, 457, -281.97, 536, 515 ], - [516, 318, 195.96, 582, 446 ], - [994, 199, -76.86, 418, 1012 ], - [800, 727, 74.89, 910, 962 ], - [884, 393, -215, 949, 828 ], - [782, 729, 235.01, 1044, 1057 ], - [397, 513, -38.84, 630, 648 ], - [614, 461, 228.97, 750, 765 ], - [533, 404, 29.07, 661, 611 ], - [518, 385, -99.58, 465, 573 ], - [657, 707, 327.94, 930, 947 ], - [768, 326, -94.35, 382, 789 ], - [534, 303, 91.98, 321, 542 ], - [937, 135, 53.41, 666, 832 ], - [532, 29, -299.01, 282, 479 ], - [738, 615, -335.72, 925, 864 ], - [560, 144, 144.86, 540, 439 ], - [1017, 604, -143.59, 1176, 1088 ], - [830, 236, 234.95, 668, 814 ], - [360, 624, -124.39, 717, 648 ], - [730, 348, -181.98, 741, 372 ], - [684, 155, 122.85, 501, 657 ], - [38, 555, -313.91, 426, 412 ], - [681, 490, -188.19, 744, 581 ], - [245, 120, -161.22, 269, 191 ], - [332, 673, -304.93, 742, 657 ], - [366, 325, -170.16, 415, 381 ], - [60, 319, -323.93, 236, 293 ], - [368, 173, -103.4, 252, 396 ], - [190, 443, -239.3, 478, 388 ], - [525, 222, 86.17, 257, 538 ], - [779, 735, 231.02, 1060, 1066 ], - [441, 763, 31.22, 772, 881 ], - [507, 506, -230.09, 713, 712 ], - [751, 689, -118.02, 959, 985 ], - [10, 170, -207.58, 87, 154 ], - [88, 444, 96.25, 450, 134 ], - [358, 489, -325.38, 572, 605 ], - [410, 765, -163.49, 609, 848 ], - [774, 139, 250.99, 382, 775 ], - [946, 533, -261.54, 666, 1012 ], - [557, 348, -293.13, 538, 649 ], - [373, 679, -298.13, 774, 648 ], - [930, 291, 175.45, 950, 362 ], - [90, 86, 101, 101, 103 ], - [435, 93, 259.53, 169, 443 ], - [651, 159, -44.7, 573, 570 ], - [276, 427, -306.82, 507, 476 ], - [325, 734, -310.41, 769, 723 ], - [605, 546, -180.54, 609, 550 ], - [450, 487, 318.4, 658, 662 ], - [590, 137, -75.57, 279, 605 ], - [685, 416, -159.6, 786, 627 ], - [773, 345, 112.41, 613, 845 ], - [511, 412, 192.27, 586, 510 ], - [142, 738, 278.75, 749, 252 ], - [1023, 458, -293.08, 822, 1121 ], - [448, 665, 106.65, 765, 619 ], - [523, 141, 74, 280, 541 ], - [594, 594, -134.45, 838, 839 ], - [849, 163, 322.03, 768, 650 ], - [790, 605, -270.42, 610, 793 ], - [171, 351, 119.26, 389, 320 ], - [456, 162, -277.76, 222, 473 ], - [103, 545, 108.48, 549, 269 ], - [889, 651, 79.93, 796, 989 ], - [773, 650, -210.99, 997, 954 ], - [868, 218, -308.01, 706, 817 ], - [508, 610, -176.53, 543, 638 ], - [101, 287, -340.03, 192, 304 ], - [422, 155, -187.53, 438, 208 ], - [368, 747, -340.56, 596, 826 ], - [496, 107, -12.25, 506, 210 ], - [153, 448, 139.26, 407, 437 ], - [270, 525, -70.57, 583, 429 ], - [936, 424, -180.74, 940, 435 ], - [538, 235, -291.72, 417, 586 ], - [750, 118, -88.21, 140, 753 ], - [824, 499, -237.04, 867, 961 ], - [61, 575, 31.41, 352, 522 ], - [89, 123, 176.59, 95, 127 ], - [335, 399, 156.89, 465, 497 ], - [362, 2, 256.74, 84, 352 ], - [857, 117, -43.45, 701, 674 ], - [543, 319, -271.27, 331, 549 ], - [955, 253, 125.56, 761, 922 ], - [186, 656, 345.76, 340, 681 ], - [283, 450, -263.73, 477, 329 ], - [669, 300, 203.75, 732, 543 ], - [844, 345, 22.18, 911, 637 ], - [377, 412, 137.13, 556, 557 ], - [116, 663, -209.4, 426, 633 ], - [851, 166, -207.8, 829, 542 ], - [704, 40, -98.81, 146, 700 ], - [130, 447, 199.8, 272, 464 ], - [257, 395, -283.5, 443, 341 ], - [947, 534, 331.25, 1086, 923 ], - [927, 745, 33.05, 1183, 1129 ], - [40, 479, 313.89, 371, 360 ], - [842, 343, -82.76, 445, 878 ], - [361, 626, 303.08, 721, 644 ], - [44, 712, 203.88, 327, 667 ], - [258, 582, 359.09, 265, 586 ], - [475, 342, -323.57, 585, 557 ], - [846, 439, 95.2, 513, 881 ], - [618, 631, -255.2, 767, 757 ], - [727, 573, 244.51, 828, 902 ], - [686, 500, 222.61, 842, 831 ], - [221, 530, -49.12, 544, 514 ], - [156, 392, 272.31, 397, 171 ], - [550, 663, 138.28, 851, 860 ], - [469, 696, 85.4, 731, 523 ], - [247, 121, -89.45, 122, 247 ], - [246, 477, 230.48, 523, 492 ], - [298, 343, -78.27, 395, 361 ], - [945, 39, -206.96, 860, 462 ], - [70, 584, 329.99, 351, 541 ], - [930, 330, 78.29, 511, 977 ], - [734, 496, -145.75, 884, 822 ], - [153, 612, 221.61, 519, 558 ], - [28, 256, 122.53, 231, 160 ], - [736, 608, 54.16, 923, 952 ], - [346, 25, 167.09, 343, 100 ], - [731, 209, -106.47, 406, 759 ], - [546, 431, 214.67, 693, 663 ], - [947, 372, 250.3, 668, 1015 ], - [141, 424, 76.93, 444, 233 ], - [98, 353, -334.21, 242, 360 ], - [721, 135, 129.95, 565, 638 ], - [2, 249, -16.73, 72, 238 ], - [829, 270, 223.01, 789, 761 ], - [492, 54, 72.23, 201, 484 ], - [57, 313, 94.83, 316, 81 ], - [806, 92, 289.88, 360, 788 ], - [143, 502, -26.17, 348, 514 ], - [960, 444, 321.87, 1028, 941 ], - [804, 549, -1.2, 813, 565 ], - [402, 622, 329.13, 663, 740 ], - [438, 395, -264.53, 434, 473 ], - [111, 396, -31.3, 299, 395 ], - [599, 250, 221.13, 614, 581 ], - [404, 618, 271.02, 624, 414 ], - [1019, 661, -156.22, 1198, 1014 ], - [642, 497, -70.04, 685, 773 ], - [542, 604, -319.97, 803, 810 ], - [1017, 555, 95.73, 653, 1065 ], - [963, 390, -109.91, 693, 1037 ], - [449, 691, -246.89, 812, 682 ], - [405, 251, 123.08, 431, 475 ], - [541, 334, -225.77, 616, 619 ], - [1008, 15, 8.18, 999, 158 ], - [811, 318, -132.55, 781, 811 ], - [684, 314, -233.79, 657, 735 ], - [974, 27, 231.55, 625, 778 ], - [363, 434, 76.98, 504, 451 ], - [420, 428, -122.82, 586, 583 ], - [44, 382, 242.46, 358, 215 ], - [399, 718, 169.72, 520, 776 ], - [560, 254, -315.23, 576, 574 ], - [223, 659, -2.44, 249, 667 ], - [414, 647, 11.35, 532, 715 ], - [938, 487, 309.16, 969, 1035 ], - [237, 232, -116.8, 312, 315 ], - [417, 194, -91.67, 205, 421 ], - [234, 466, 314.41, 495, 493 ], - [856, 12, -4.73, 853, 82 ], - [169, 45, 352.78, 172, 66 ], - [2, 344, 305.73, 279, 202 ], - [755, 764, -176.75, 795, 804 ], - [819, 163, -279.19, 291, 834 ], - [303, 473, 327.13, 510, 561 ], - [832, 408, 63.3, 737, 926 ], - [759, 586, 280.36, 711, 851 ], - [81, 130, -257.92, 143, 105 ], - [463, 305, 178.43, 470, 316 ], - [398, 179, 189.44, 420, 241 ], - [903, 305, 230.84, 805, 892 ], - [893, 306, -167.29, 937, 494 ], - [816, 104, -171.82, 821, 218 ], - [52, 718, -19.67, 289, 693 ], - [167, 177, -296.63, 232, 228 ], - [120, 32, 85.5, 41, 122 ], - [722, 601, -85.84, 650, 764 ], - [609, 662, 35.57, 880, 892 ], - [754, 240, 321.29, 737, 658 ], - [496, 538, -231.74, 729, 721 ], - [254, 447, 53.71, 510, 469 ], - [70, 348, 340.06, 183, 350 ], - [344, 192, -282.97, 264, 378 ], - [612, 231, -330.59, 646, 501 ], - [72, 356, -165.26, 159, 361 ], - [162, 446, -135.64, 426, 431 ], - [795, 219, -292.56, 507, 818 ], - [161, 676, 327.18, 500, 655 ], - [724, 473, -168.11, 804, 611 ], - [669, 77, 336.01, 641, 342 ], - [851, 267, 34.78, 850, 704 ], - [416, 319, -359.02, 420, 326 ], - [387, 576, -179.64, 389, 577 ], - [497, 267, 36.17, 559, 509 ], - [539, 320, -350.8, 583, 402 ], - [816, 441, 66.6, 729, 923 ], - [111, 269, 271.66, 271, 118 ], - [207, 390, 184.72, 237, 405 ], - [160, 164, -92.13, 168, 164 ], - [433, 666, -20.46, 637, 775 ], - [399, 536, 229.18, 665, 650 ], - [960, 79, -192.4, 954, 282 ], - [962, 369, 347.54, 1018, 567 ], - [194, 741, -122.85, 727, 563 ], - [758, 377, 176.79, 777, 417 ], - [771, 220, -130.18, 664, 730 ], - [353, 303, 121.74, 443, 458 ], - [228, 458, -233.29, 503, 455 ], - [1002, 577, -79.69, 746, 1088 ], - [359, 133, -176.18, 366, 155 ], - [842, 432, 325.52, 938, 832 ], - [656, 384, -320.92, 751, 711 ], - [895, 337, 24.6, 953, 678 ], - [877, 482, -0.9, 883, 495 ], - [190, 282, 351.99, 226, 305 ], - [954, 91, -162, 934, 380 ], - [256, 356, 121.52, 436, 403 ], - [942, 526, -170.02, 1017, 680 ], - [98, 510, -349.45, 189, 518 ], - [496, 11, -224.86, 359, 356 ], - [758, 642, 179.75, 760, 644 ], - [709, 366, -180.86, 713, 375 ], - [764, 269, 134.32, 725, 733 ], - [287, 158, -134.37, 312, 314 ], - [798, 300, 129.27, 737, 806 ], - [787, 247, 214.41, 788, 647 ], - [44, 439, -172.34, 101, 439 ], - [729, 377, 320.69, 802, 753 ], - [999, 450, 78.19, 644, 1069 ], - [1014, 54, 88.04, 88, 1015 ], - [183, 622, -30.22, 470, 629 ], - [950, 385, 312.59, 924, 960 ], - [181, 190, -155.94, 241, 245 ], - [884, 405, -8.25, 931, 527 ], - [181, 236, 272.79, 243, 191 ], - [877, 57, -216.03, 743, 560 ], - [670, 90, 195.13, 668, 260 ], - [937, 637, -172.02, 1014, 760 ], - [881, 618, 249.25, 889, 1041 ], - [480, 610, 299.25, 765, 716 ], - [93, 747, 161.79, 321, 738 ], - [562, 691, -197.6, 744, 827 ], - [495, 59, -19.85, 484, 223 ], - [785, 721, 359.66, 787, 725 ], - [261, 89, -139.99, 255, 234 ], - [137, 746, -86.8, 751, 178 ], - [342, 480, -2.77, 363, 495 ], - [107, 414, -126.38, 395, 331 ], - [375, 306, -267.64, 321, 386 ], - [217, 666, 304.01, 672, 552 ], - [131, 735, 283.69, 744, 301 ], - [873, 388, 211.15, 947, 782 ], - [80, 759, 265.54, 762, 137 ], - [564, 579, 221.17, 804, 806 ], - [563, 7, 303.67, 317, 472 ], - [876, 109, 282.32, 291, 878 ], - [241, 365, 11.53, 309, 406 ], - [749, 446, -321.05, 862, 817 ], - [57, 726, -34.7, 458, 629 ], - [188, 121, -131.26, 213, 220 ], - [109, 219, -162.69, 168, 240 ], - [1024, 105, 200.79, 993, 460 ], - [812, 165, 191.77, 827, 326 ], - [678, 587, 14.3, 801, 736 ], - [481, 241, 20.14, 534, 391 ], - [401, 130, 122.08, 322, 407 ], - [290, 310, -255.92, 371, 355 ], - [818, 103, 161.27, 807, 359 ], - [874, 145, 121.63, 581, 819 ], - [313, 286, 234.41, 414, 419 ], - [638, 367, -281.16, 483, 696 ], - [918, 367, -183.26, 937, 417 ], - [692, 208, -29.51, 703, 521 ], - [453, 716, -199.75, 668, 826 ], - [985, 309, 25.67, 1021, 705 ], - [502, 609, 146.76, 753, 783 ], - [163, 58, -283.29, 93, 171 ], - [311, 671, -187.24, 393, 704 ], - [29, 558, -51.47, 454, 370 ], - [714, 24, 216.39, 587, 441 ], - [535, 502, -159.67, 674, 655 ], - [647, 423, 184.07, 674, 466 ], - [899, 174, -341.28, 907, 453 ], - [345, 513, 329.85, 555, 617 ], - [573, 483, -101.39, 585, 655 ], - [97, 91, -251.33, 117, 119 ], - [818, 213, -197.64, 844, 449 ], - [927, 447, -288.8, 721, 1021 ], - [149, 468, 234.16, 465, 393 ], - [587, 235, 256.52, 364, 624 ], - [383, 636, 7.03, 458, 677 ], - [668, 353, -317, 729, 713 ], - [418, 258, -154.77, 487, 410 ], - [444, 516, 325.47, 656, 676 ], - [402, 178, 58.01, 363, 434 ], - [769, 250, 143.01, 764, 661 ], - [924, 95, 342.54, 909, 368 ], - [131, 22, 40.69, 113, 102 ], - [232, 133, -241.28, 228, 266 ], - [53, 573, -21.74, 260, 551 ], - [930, 92, -146.28, 823, 592 ], - [428, 593, 183.95, 466, 620 ], - [489, 138, -294.32, 327, 502 ], - [781, 471, 189.43, 846, 591 ], - [732, 4, 355.43, 729, 62 ], - [302, 580, -130.66, 635, 606 ], - [1018, 505, -42.07, 1092, 1057 ], - [993, 603, -22.08, 1146, 932 ], - [539, 8, 102.05, 120, 528 ], - [708, 48, -81.14, 155, 706 ], - [165, 745, 4.73, 225, 755 ], - [469, 298, -160.01, 541, 439 ], - [218, 664, -31.28, 530, 680 ], - [312, 482, -310.38, 569, 549 ], - [69, 262, -307.45, 249, 213 ], - [63, 489, 236.14, 440, 323 ], - [389, 484, -10.97, 472, 549 ], - [841, 460, -166.4, 924, 643 ], - [298, 96, -158.96, 311, 195 ], - [955, 626, -114.48, 964, 1127 ], - [327, 749, -136.45, 752, 767 ], - [846, 332, 142.16, 872, 779 ], - [107, 496, 44.36, 423, 429 ], - [574, 729, -224.62, 920, 921 ], - [645, 13, 20.69, 608, 239 ], - [719, 59, -241.73, 392, 660 ], - [543, 351, 211.16, 645, 579 ], - [16, 213, -78.13, 210, 59 ], - [291, 436, 11.09, 369, 483 ], - [577, 383, -122.45, 631, 691 ], - [926, 629, -140.49, 1113, 1073 ], - [220, 495, 170.69, 297, 522 ], - [934, 574, -84.97, 652, 980 ], - [485, 236, -121.77, 455, 535 ], - [678, 720, -110.28, 909, 884 ], - [195, 491, -55.09, 513, 440 ], - [363, 130, 273.14, 148, 369 ], - [152, 141, -247.66, 187, 193 ], - [553, 359, 160.46, 641, 521 ], - [56, 23, -200.49, 60, 40 ], - [394, 717, -331.63, 687, 818 ], - [706, 114, 131.79, 555, 601 ], - [437, 46, -50.28, 313, 365 ], - [828, 410, 170.92, 882, 534 ], - [143, 150, 124.98, 204, 202 ], - [498, 296, -135.53, 561, 558 ], - [932, 568, -14.46, 1043, 782 ], - [808, 681, 117.2, 975, 1028 ], - [968, 327, -266.95, 378, 982 ], - [684, 369, -245.86, 616, 774 ], - [911, 665, -294.01, 977, 1103 ], - [952, 426, -187.84, 1001, 550 ], - [627, 753, -145.19, 943, 974 ], - [44, 606, 238.3, 538, 354 ], - [799, 713, -342, 979, 924 ], - [464, 319, -65.38, 482, 554 ], - [784, 249, -253.58, 460, 821 ], - [251, 87, -335.43, 264, 183 ], - [930, 45, -29.07, 833, 490 ], - [38, 558, 316.6, 409, 431 ], - [200, 473, 219.12, 452, 492 ], - [294, 418, -102, 469, 373 ], - [539, 120, -116.07, 343, 536 ], - [845, 153, -268.05, 181, 848 ], - [672, 751, -319.72, 998, 1007 ], - [697, 331, -21.35, 769, 561 ], - [92, 151, 211.96, 157, 175 ], - [244, 339, 293.35, 406, 358 ], - [279, 267, 335.17, 364, 359 ], - [749, 296, 137.87, 754, 721 ], - [687, 446, -139.04, 809, 786 ], - [487, 666, 252.84, 778, 660 ], - [854, 302, -354.74, 878, 379 ], - [177, 167, -212.02, 239, 234 ], - [308, 670, -228.12, 704, 675 ], - [365, 425, 81.96, 472, 420 ], - [847, 494, 222.68, 956, 936 ], - [636, 676, -180.42, 640, 679 ], - [541, 116, 69.88, 295, 547 ], - [506, 678, 346.6, 648, 777 ], - [190, 425, 43.89, 431, 437 ], - [504, 22, -52.24, 324, 411 ], - [352, 662, 230.37, 733, 692 ], - [359, 27, -333.47, 333, 184 ], - [570, 257, 294.55, 469, 625 ], - [757, 530, -27.59, 914, 820 ], - [362, 397, -285.26, 478, 453 ], - [167, 106, 347.98, 184, 138 ], - [422, 511, -263.32, 557, 477 ], - [9, 122, -348.21, 33, 120 ], - [1014, 264, 49.91, 855, 945 ], - [565, 642, 70.15, 795, 749 ], - [1003, 138, -29.48, 940, 613 ], - [818, 407, -5.06, 849, 477 ], - [856, 66, 235.38, 539, 740 ], - [763, 634, 12.1, 879, 779 ], - [212, 137, -336.25, 249, 210 ], - [318, 262, -237.7, 390, 407 ], - [301, 578, 241.1, 650, 541 ], - [438, 584, 355.3, 483, 617 ], - [455, 577, -117.24, 720, 667 ], - [14, 232, -235.53, 198, 141 ], - [626, 216, -106.74, 386, 660 ], - [72, 61, 274.4, 65, 76 ], - [577, 702, 335.87, 812, 876 ], - [399, 506, 209.55, 596, 635 ], - [929, 665, 337.4, 1112, 971 ], - [962, 135, -137.9, 803, 743 ], - [112, 360, -316.76, 328, 338 ], - [967, 688, 230.71, 1143, 1183 ], - [961, 261, 51.08, 806, 911 ], - [282, 271, 268.25, 278, 288 ], - [459, 740, -250.03, 852, 683 ], - [819, 26, -193.37, 802, 213 ], - [697, 458, -255.25, 620, 790 ], - [663, 757, 218.88, 990, 1004 ], - [449, 685, 121.42, 819, 739 ], - [417, 639, 247.11, 750, 632 ], - [733, 723, -136.06, 1028, 1028 ], - [794, 680, -211.41, 1031, 992 ], - [610, 632, 32.85, 855, 861 ], - [171, 75, 286.64, 119, 184 ], - [40, 419, 260.1, 418, 110 ], - [197, 264, 283.76, 301, 254 ], - [434, 19, -7.45, 431, 75 ], - [583, 516, -18.13, 714, 671 ], - [382, 84, -96.2, 124, 387 ], - [43, 397, -217.9, 277, 338 ], - [906, 178, -260.93, 318, 921 ], - [201, 5, -344.2, 194, 59 ], - [412, 462, 247.6, 583, 555 ], - [971, 590, 317.22, 1112, 1092 ], - [866, 620, -10.88, 966, 772 ], - [724, 768, 236.57, 1038, 1026 ], - [616, 325, 253.97, 481, 681 ], - [93, 761, 17.18, 313, 754 ], - [580, 280, 95.75, 337, 604 ], - [955, 311, -252.94, 577, 1002 ], - [133, 223, -86.78, 229, 145 ], - [274, 373, -82.53, 404, 319 ], - [296, 682, 350.52, 402, 721 ], - [136, 641, 183.43, 172, 647 ], - [76, 523, 44.45, 420, 426 ], - [572, 298, 43.57, 619, 610 ], - [397, 759, 347.43, 551, 827 ], - [246, 61, 340.77, 251, 139 ], - [782, 495, -117.54, 799, 921 ], - [406, 443, 173.94, 450, 482 ], - [559, 542, -337.71, 723, 713 ], - [947, 747, 11.49, 1077, 920 ], - [318, 201, -69.91, 297, 367 ], - [304, 303, -189.04, 348, 345 ], - [53, 359, 300.74, 335, 229 ], - [628, 20, -140.49, 496, 413 ], - [178, 317, -148.96, 314, 362 ], - [161, 501, -92.13, 505, 178 ], - [133, 319, -348.12, 196, 339 ], - [478, 624, 66.87, 761, 684 ], - [213, 274, -145.07, 330, 345 ], - [245, 216, -164.86, 291, 271 ], - [773, 454, 23.31, 889, 722 ], - [162, 682, 307.04, 640, 540 ], - [405, 722, -76.47, 795, 562 ], - [321, 425, -58.1, 529, 497 ], - [633, 558, 238.73, 804, 830 ], - [933, 678, -12.03, 1052, 857 ], - [290, 10, 286.84, 93, 280 ], - [307, 368, 151.05, 446, 469 ], - [914, 527, -312.32, 1005, 1030 ], - [196, 711, -110.04, 734, 427 ], - [473, 522, 315.35, 702, 703 ], - [1019, 643, 234.38, 1115, 1201 ], - [943, 179, 190.45, 958, 346 ], - [322, 419, -131.97, 526, 518 ], - [752, 126, -329.31, 710, 491 ], - [579, 57, 305.87, 384, 502 ], - [50, 274, 314.31, 229, 226 ], - [970, 504, -61.53, 904, 1092 ], - [673, 422, -287.69, 606, 769 ], - [741, 568, -341.9, 880, 770 ], - [72, 155, 147.35, 144, 168 ], - [9, 150, 30.13, 82, 134 ], - [854, 89, 197.41, 840, 339 ], - [613, 331, -130.07, 646, 681 ], - [937, 126, -12.79, 940, 330 ], - [981, 560, 40.29, 1110, 1061 ], - [904, 598, 297.04, 942, 1077 ], - [839, 557, 49.32, 968, 999 ], - [239, 293, -275.98, 315, 268 ], - [342, 80, 256.08, 159, 349 ], - [368, 134, -319.39, 366, 341 ], - [66, 141, -179.05, 66, 141 ], - [620, 13, -95.86, 75, 616 ], - [389, 472, 213.71, 584, 607 ], - [716, 407, 331.54, 822, 699 ], - [186, 374, 136.35, 392, 398 ], - [755, 284, -23.86, 804, 565 ], - [666, 145, -222.27, 590, 553 ], - [224, 324, 52.16, 393, 375 ], - [343, 580, 127.12, 668, 622 ], - [196, 88, 252.56, 141, 211 ], - [253, 137, -336.17, 286, 227 ], - [511, 602, -324.69, 764, 786 ], - [886, 125, 117.44, 519, 843 ], - [678, 662, -221.74, 946, 944 ], - [638, 33, 128.46, 422, 519 ], - [320, 599, -326.1, 599, 675 ], - [798, 330, -191.1, 847, 476 ], - [994, 498, 111.94, 833, 1107 ], - [556, 755, -64.69, 919, 825 ], - [225, 133, 17.12, 254, 193 ], - [72, 323, 144.73, 245, 304 ], - [106, 706, -11.75, 246, 712 ], - [156, 602, 105.1, 621, 306 ], - [835, 343, 5.2, 862, 417 ], - [8, 53, 35.77, 37, 47 ], - [702, 292, -122.9, 625, 747 ], - [751, 122, 186.23, 758, 201 ], - [991, 99, -67.53, 468, 953 ], - [638, 516, -80.16, 616, 716 ], - [34, 684, 44.43, 503, 511 ], - [570, 737, 346.85, 722, 847 ], - [264, 48, 288.03, 126, 266 ], - [760, 165, 132.14, 631, 673 ], - [397, 23, -267.13, 42, 396 ], - [916, 28, -218.24, 736, 587 ], - [455, 555, 55.17, 715, 690 ], - [792, 349, 169.23, 843, 489 ], - [545, 324, 261.67, 398, 585 ], - [961, 34, 24.65, 887, 431 ], - [335, 60, -54.7, 241, 308 ], - [910, 487, -83.82, 580, 956 ], - [892, 685, -38.88, 1123, 1092 ], - [789, 486, 115.43, 777, 920 ], - [465, 15, 136.55, 347, 329 ], - [597, 702, 162.75, 778, 846 ], - [799, 275, -37.53, 800, 704 ], - [365, 101, 289.64, 216, 377 ], - [94, 510, -126.88, 463, 380 ], - [978, 462, -95.12, 546, 1014 ], - [501, 713, -39.78, 840, 868 ], - [936, 628, -303.76, 1042, 1127 ], - [304, 528, 337.71, 480, 604 ], - [761, 352, 72.83, 560, 831 ], - [413, 701, 86.73, 723, 452 ], - [95, 380, 24.59, 244, 385 ], - [839, 211, 282.2, 382, 865 ], - [274, 485, -343.38, 401, 543 ], - [173, 555, 134.13, 518, 509 ], - [505, 520, -152.84, 685, 692 ], - [882, 128, -204.43, 856, 480 ], - [313, 61, -336.21, 311, 182 ], - [393, 289, 158.67, 471, 410 ], - [361, 92, -231.78, 295, 339 ], - [977, 401, -295.42, 781, 1054 ], - [588, 472, 60.64, 699, 743 ], - [111, 333, 258.13, 347, 175 ], - [1, 538, -7.75, 72, 533 ], - [24, 668, -207.79, 332, 601 ], - [727, 278, 279.69, 395, 763 ], - [1022, 171, -320.66, 898, 779 ], - [219, 406, -263.54, 427, 262 ], - [253, 700, 7.25, 338, 725 ], - [991, 203, 92.81, 251, 998 ], - [149, 167, -251.44, 205, 193 ], - [241, 608, 191.06, 352, 642 ], - [839, 691, -216.96, 1085, 1055 ], - [694, 691, 287.01, 863, 865 ], - [171, 709, 192.56, 319, 728 ], - [388, 486, -267.17, 504, 410 ], - [273, 484, -107.27, 542, 403 ], - [329, 648, 272.46, 660, 356 ], - [466, 69, 208.26, 442, 280 ], - [989, 44, -322.16, 808, 641 ], - [609, 155, -165.97, 627, 296 ], - [763, 335, -316.43, 783, 768 ], - [523, 196, 331.05, 551, 425 ], - [726, 716, 258.65, 843, 851 ], - [623, 76, 203, 602, 312 ], - [384, 366, -61.76, 502, 511 ], - [516, 571, -328.46, 738, 756 ], - [876, 49, 278.47, 176, 873 ], - [751, 399, 342.82, 834, 602 ], - [536, 372, -336.75, 639, 553 ], - [589, 60, -191.98, 588, 180 ], - [865, 632, 121.69, 992, 1067 ], - [927, 256, 304.9, 739, 906 ], - [886, 32, 255.78, 247, 865 ], - [742, 499, 326.58, 893, 824 ], - [519, 19, -50.51, 344, 412 ], - [943, 406, -235.77, 866, 1006 ], - [988, 294, -189.88, 1023, 458 ], - [872, 89, 183.64, 875, 143 ], - [847, 491, -187.97, 906, 602 ], - [880, 164, -131.9, 708, 763 ], - [95, 45, -259.59, 61, 100 ], - [780, 740, -19.97, 985, 962 ], - [702, 636, 10, 801, 747 ], - [554, 424, -242.69, 631, 686 ], - [506, 45, -225.48, 386, 391 ], - [946, 752, 154.49, 1177, 1085 ], - [99, 724, -290.08, 713, 341 ], - [341, 610, -206.71, 578, 697 ], - [90, 477, 252.85, 481, 225 ], - [335, 368, -313.57, 497, 496 ], - [659, 440, -271.91, 461, 673 ], - [802, 257, -298.62, 610, 827 ], - [262, 15, 297.37, 132, 239 ], - [788, 430, -25.32, 895, 726 ], - [955, 41, 16.33, 928, 307 ], - [122, 750, 0.56, 128, 751 ], - [854, 56, -41.09, 679, 603 ], - [953, 312, -190.15, 993, 473 ], - [147, 379, 256.2, 402, 231 ], - [1019, 630, -118.81, 1042, 1195 ], - [61, 356, 292.86, 350, 194 ], - [186, 189, -187.11, 207, 210 ], - [274, 385, -173.82, 312, 411 ], - [184, 208, 228.5, 276, 274 ], - [660, 155, 266.41, 195, 667 ], - [172, 247, 249.42, 290, 247 ], - [684, 119, 301.76, 460, 644 ], - [114, 65, -126.46, 118, 129 ], - [356, 175, 228.43, 366, 381 ], - [208, 171, 98.43, 199, 229 ], - [551, 216, -288.35, 378, 590 ], - [456, 356, -111.48, 496, 553 ], - [701, 560, 249.07, 772, 853 ], - [966, 698, -276.73, 806, 1041 ], - [779, 425, -131.54, 833, 864 ], - [646, 554, 99.15, 649, 724 ], - [489, 299, 209.84, 572, 501 ], - [406, 384, 270.44, 386, 408 ], - [738, 650, -285.75, 826, 886 ], - [551, 38, -125.87, 352, 467 ], - [179, 451, 76.5, 480, 279 ], - [281, 24, -310.54, 200, 229 ], - [634, 550, 214.41, 833, 811 ], - [477, 506, 148.69, 670, 678 ], - [595, 322, -173, 628, 391 ], - [920, 38, 345.67, 899, 264 ], - [549, 404, -94.74, 447, 579 ], - [335, 708, 264.69, 735, 398 ], - [208, 494, 153.81, 404, 533 ], - [314, 138, 188.81, 330, 183 ], - [647, 272, -109.12, 467, 699 ], - [243, 482, -87.11, 492, 266 ], - [314, 190, -292.29, 295, 362 ], - [107, 547, 181.54, 120, 548 ], - [830, 225, -237.15, 639, 818 ], - [72, 146, -201.94, 121, 160 ], - [52, 557, 176.6, 84, 558 ], - [429, 41, 120.19, 250, 390 ], - [293, 196, -137.62, 347, 341 ], - [1024, 431, -8.38, 1075, 575 ], - [781, 147, 246.32, 447, 773 ], - [113, 330, -21.87, 226, 348 ], - [502, 564, 155.6, 690, 720 ], - [598, 644, -52.24, 874, 866 ], - [344, 498, 157.9, 505, 589 ], - [519, 552, 294.48, 716, 701 ], - [744, 590, 96.63, 671, 806 ], - [483, 144, 134.21, 439, 445 ], - [142, 363, 317.65, 348, 363 ], - [458, 363, 1.19, 465, 372 ], - [958, 180, 138.96, 840, 764 ], - [796, 265, -272.53, 300, 807 ], - [253, 641, 256.2, 681, 397 ], - [987, 321, 139.53, 958, 883 ], - [400, 578, -113.84, 689, 598 ], - [113, 199, -316.9, 218, 222 ], - [20, 756, 236.02, 637, 438 ], - [669, 350, -349.85, 720, 462 ], - [348, 456, -9.77, 418, 508 ], - [288, 31, 330.03, 263, 170 ], - [801, 749, -221.64, 1096, 1091 ], - [487, 578, 26.13, 692, 733 ], - [611, 768, -93.8, 805, 659 ], - [464, 739, 206.31, 742, 866 ], - [150, 271, 27.98, 259, 309 ], - [500, 355, 214.08, 612, 573 ], - [562, 370, 202.66, 660, 556 ], - [385, 103, -189.69, 396, 165 ], - [400, 364, 237.25, 521, 532 ], - [898, 579, 265.83, 641, 936 ], - [855, 412, 247.68, 704, 945 ], - [28, 8, 69.11, 16, 29 ], - [577, 467, 68.26, 647, 708 ], - [956, 46, 40.72, 754, 658 ], - [737, 158, 294.26, 445, 736 ], - [265, 533, -93.23, 545, 293 ], - [57, 186, 252.73, 193, 108 ], - [858, 475, 348.77, 933, 633 ], - [76, 6, -30.9, 67, 44 ], - [925, 679, -208.65, 1137, 1038 ], - [791, 552, 176.74, 820, 594 ], - [632, 573, 184.2, 671, 616 ], - [218, 237, -98.78, 266, 250 ], - [827, 186, -56.01, 615, 789 ], - [373, 738, 92.05, 751, 397 ], - [279, 169, -128.47, 304, 322 ], - [659, 211, 45.56, 612, 618 ], - [506, 86, -229.86, 392, 440 ], - [490, 143, -224.56, 449, 444 ], - [958, 68, -308.34, 647, 793 ], - [150, 661, 208.86, 449, 650 ], - [913, 367, 25.37, 981, 723 ], - [663, 530, 247.34, 743, 814 ], - [10, 381, -299.04, 337, 193 ], - [443, 661, -327.45, 729, 795 ], - [62, 102, -169.91, 78, 109 ], - [391, 596, 27.65, 623, 709 ], - [968, 207, 107.88, 494, 984 ], - [129, 574, 241.1, 564, 388 ], - [321, 524, 304.55, 613, 561 ], - [395, 636, 204.06, 618, 741 ], - [180, 553, -172.71, 247, 570 ], - [728, 281, 323.36, 751, 659 ], - [568, 289, -39.48, 621, 584 ], - [655, 620, -140.52, 898, 894 ], - [701, 666, -45.48, 965, 966 ], - [971, 191, -207.62, 949, 618 ], - [499, 149, -14.17, 518, 266 ], - [140, 245, -196.4, 203, 273 ], - [995, 485, 294.81, 856, 1107 ], - [916, 13, 170.8, 906, 158 ], - [694, 148, -31.69, 667, 490 ], - [961, 694, 231.56, 1140, 1182 ], - [908, 351, -218.24, 930, 837 ], - [340, 74, -357.1, 343, 91 ], - [652, 599, 267.04, 630, 681 ], - [76, 559, -274.31, 562, 117 ], - [293, 164, -135.55, 323, 321 ], - [784, 269, 93.44, 316, 797 ], - [1017, 247, -171.9, 1040, 387 ], - [924, 165, -159.9, 923, 471 ], - [655, 686, -21.69, 861, 879 ], - [98, 638, -91.92, 640, 117 ], - [939, 551, 236.78, 974, 1086 ], - [117, 38, 305.36, 97, 117 ], - [121, 527, 146.37, 392, 505 ], - [1013, 583, -50.09, 1095, 1151 ], - [111, 34, 103.63, 59, 114 ], - [430, 622, 355.41, 477, 654 ], - [51, 616, -133.67, 480, 460 ], - [318, 541, 20.97, 490, 618 ], - [603, 264, -56.65, 551, 648 ], - [60, 337, -179.21, 63, 336 ], - [441, 274, 336.64, 512, 426 ], - [266, 361, -348.6, 331, 406 ], - [189, 452, 144.59, 416, 476 ], - [909, 443, -29.3, 1008, 830 ], - [325, 526, 2.12, 343, 538 ], - [985, 80, -135.32, 755, 748 ], - [978, 118, -278.03, 253, 984 ], - [276, 356, 228.81, 448, 440 ], - [818, 40, -244.03, 394, 752 ], - [225, 85, 71.79, 151, 240 ], - [483, 416, 327.8, 629, 609 ], - [449, 615, -54.23, 760, 723 ], - [466, 756, -351.4, 573, 816 ], - [159, 669, 63.34, 669, 442 ], - [630, 145, -164.34, 644, 309 ], - [121, 115, -89.96, 114, 120 ], - [440, 80, 19.91, 440, 224 ], - [557, 287, 353.35, 585, 349 ], - [370, 132, -329.54, 385, 301 ], - [535, 301, -250.42, 463, 604 ], - [125, 663, 138.77, 531, 580 ], - [79, 231, -5.19, 98, 237 ], - [514, 580, -16.94, 659, 704 ], - [526, 699, -110.11, 835, 732 ], - [105, 403, 25.22, 266, 409 ], - [383, 493, 132.67, 621, 614 ], - [767, 55, 207.66, 704, 404 ], - [283, 472, -243.5, 548, 463 ], - [274, 749, -119.81, 785, 608 ], - [317, 382, 162.07, 419, 459 ], - [473, 476, 62.93, 639, 638 ], - [158, 535, 279.41, 552, 242 ], - [663, 152, 102.91, 296, 679 ], - [127, 547, 38.04, 437, 509 ], - [482, 625, -304.52, 788, 751 ], - [6, 143, 157.38, 60, 133 ], - [707, 718, 208.39, 961, 967 ], - [490, 162, -69.52, 322, 516 ], - [656, 367, -87.51, 394, 671 ], - [997, 605, 270.38, 610, 1000 ], - [716, 191, -4.08, 727, 241 ], - [293, 309, -223.07, 425, 425 ], - [179, 38, -80.84, 65, 182 ], - [837, 133, -288.78, 395, 835 ], - [379, 494, 296.46, 609, 559 ], - [458, 498, -289.49, 621, 597 ], - [170, 260, -336.57, 258, 306 ], - [978, 627, -184.85, 1027, 706 ], - [367, 351, 158.99, 468, 458 ], - [755, 330, 5.41, 782, 400 ], - [628, 99, 184.02, 632, 142 ], - [110, 319, -246.44, 335, 227 ], - [304, 452, -211.14, 494, 543 ], - [702, 312, -87.03, 347, 717 ], - [803, 596, -344.23, 934, 792 ], - [712, 171, 122.5, 526, 691 ], - [813, 298, -354.2, 838, 378 ], - [846, 263, 233.36, 714, 834 ], - [71, 539, -158.35, 263, 526 ], - [809, 337, 150.89, 870, 686 ], - [305, 39, 243.13, 171, 289 ], - [55, 121, -178.71, 56, 121 ], - [216, 349, 244.81, 406, 343 ], - [428, 106, -183.44, 433, 130 ], - [816, 708, -345.39, 968, 890 ], - [839, 474, -185.56, 881, 552 ], - [501, 315, 93.42, 343, 518 ], - [509, 181, 339.95, 539, 344 ], - [329, 234, 124.48, 379, 402 ], - [616, 73, -280.47, 183, 618 ], - [318, 301, -244.54, 408, 415 ], - [152, 342, -131.81, 355, 340 ], - [410, 504, 194.66, 523, 590 ], - [246, 56, 294.02, 150, 247 ], - [497, 668, 237.51, 828, 777 ], - [518, 529, -38.43, 733, 735 ], - [766, 136, 256.73, 306, 775 ], - [387, 517, -293.6, 628, 561 ], - [358, 763, -74.25, 830, 551 ], - [23, 457, -6.24, 71, 456 ], - [137, 695, 275.85, 703, 207 ], - [301, 41, -123.98, 201, 271 ], - [625, 348, 347.85, 682, 471 ], - [390, 532, -319.83, 641, 658 ], - [296, 137, 306, 283, 320 ], - [122, 525, 90, 525, 122 ], - [579, 331, 210, 666, 575 ], - [433, 621, -30, 684, 754 ], - [527, 121, -30, 516, 368 ], - [933, 138, -330, 877, 586 ], - [413, 240, 330, 476, 414 ], - [293, 466, -360, 293, 466 ], - [629, 166, -30, 626, 458 ], - [611, 458, -270, 458, 611 ], - [668, 680, -120, 922, 917 ], - [592, 3, -360, 592, 3 ], - [195, 438, -30, 386, 476 ], - [1003, 762, -180, 1003, 762 ], - [451, 389, -60, 561, 584 ], - [917, 320, 60, 735, 954 ], - [967, 629, 300, 1027, 1151 ], - [920, 80, 0, 920, 80 ], - [926, 551, 150, 1076, 938 ], - [372, 242, -150, 442, 395 ], - [526, 742, -240, 905, 825 ], - [862, 418, -210, 955, 791 ], - [873, 563, 210, 1037, 923 ], - [300, 547, 210, 532, 623 ], - [554, 117, -180, 554, 117 ], - [969, 36, 150, 857, 514 ], - [544, 761, 0, 544, 761 ], - [438, 683, 90, 683, 438 ], - [953, 609, -120, 1002, 1129 ], - [664, 120, 90, 120, 664 ], - [986, 514, 90, 514, 986 ], - [167, 392, -270, 392, 167 ], - [375, 279, 300, 428, 463 ], - [142, 503, 60, 506, 373 ], - [923, 151, 180, 923, 151 ], - [175, 109, 210, 205, 180 ], - [876, 517, 210, 1016, 885 ], - [368, 78, 120, 251, 356 ], - [990, 24, -30, 868, 516 ], - [299, 522, 90, 522, 299 ], - [954, 493, -150, 1072, 903 ], - [549, 618, 210, 783, 808 ], - [701, 130, -240, 463, 671 ], - [579, 236, 240, 492, 618 ], - [162, 160, -360, 162, 160 ], - [925, 291, -270, 291, 925 ], - [711, 180, 240, 510, 704 ], - [488, 455, 330, 649, 638 ], - [150, 429, 330, 343, 447 ], - [625, 653, 90, 653, 625 ], - [235, 600, -180, 235, 600 ], - [529, 244, -300, 475, 580 ], - [322, 1, -180, 322, 1 ], - [487, 435, 30, 638, 620 ], - [298, 556, 210, 535, 630 ], - [309, 482, -270, 482, 309 ], - [466, 246, -90, 246, 466 ], - [287, 612, 360, 287, 612 ], - [211, 724, 30, 544, 732 ], - [167, 425, -90, 425, 167 ], - [818, 600, -270, 600, 818 ], - [77, 229, -30, 180, 236 ], - [160, 470, -30, 372, 487 ], - [416, 67, -330, 393, 265 ], - [987, 289, 210, 998, 742 ], - [747, 521, -90, 521, 747 ], - [894, 101, 150, 824, 532 ], - [256, 316, 0, 256, 316 ], - [225, 474, -30, 430, 522 ], - [765, 599, -360, 765, 599 ], - [128, 444, 210, 331, 448 ], - [291, 502, -300, 580, 503 ], - [778, 621, 150, 983, 925 ], - [241, 165, 210, 290, 262 ], - [284, 137, -270, 137, 284 ], - [44, 697, 240, 625, 386 ], - [446, 599, 360, 446, 599 ], - [152, 23, -90, 23, 152 ], - [673, 191, 360, 673, 191 ], - [110, 764, 210, 476, 716 ], - [113, 92, -120, 135, 142 ], - [916, 309, -360, 916, 309 ], - [999, 124, 240, 605, 926 ], - [683, 305, -360, 683, 305 ], - [456, 517, -210, 652, 674 ], - [614, 550, -300, 782, 806 ], - [441, 116, 300, 319, 439 ], - [403, 230, 300, 399, 464 ], - [786, 734, -240, 1028, 1046 ], - [777, 48, -270, 48, 777 ], - [543, 133, -180, 543, 133 ], - [899, 52, 150, 804, 493 ], - [900, 32, 270, 32, 900 ], - [704, 544, -210, 881, 821 ], - [728, 118, 300, 464, 689 ], - [935, 577, 90, 577, 935 ], - [22, 140, 210, 88, 131 ], - [931, 441, -330, 1026, 847 ], - [846, 263, -360, 846, 263 ], - [1015, 77, -300, 574, 917 ], - [154, 484, -180, 154, 484 ], - [439, 390, -120, 556, 574 ], - [112, 297, -90, 297, 112 ], - [974, 56, -300, 534, 871 ], - [194, 602, -210, 469, 616 ], - [103, 535, 360, 103, 535 ], - [744, 551, -240, 848, 918 ], - [517, 481, 180, 517, 481 ], - [595, 348, -300, 598, 689 ], - [627, 341, -240, 608, 711 ], - [723, 456, 240, 755, 853 ], - [996, 17, -150, 870, 512 ], - [312, 101, 150, 320, 241 ], - [695, 63, 210, 632, 401 ], - [779, 208, 60, 569, 778 ], - [1018, 285, -180, 1018, 285 ], - [1003, 75, 360, 1003, 75 ], - [149, 462, 90, 462, 149 ], - [907, 140, -330, 855, 574 ], - [991, 610, 0, 991, 610 ], - [153, 384, -300, 409, 324 ], - [984, 363, -300, 805, 1033 ], - [287, 597, -180, 287, 597 ], - [1008, 350, -120, 806, 1046 ], - [780, 165, 60, 532, 757 ], - [331, 161, 360, 331, 161 ], - [594, 144, -330, 586, 421 ], - [568, 256, 120, 505, 618 ], - [160, 168, 270, 168, 160 ], - [214, 143, 90, 143, 214 ], - [722, 257, -270, 257, 722 ], - [813, 227, 90, 227, 813 ], - [926, 441, -90, 441, 926 ], - [149, 429, 240, 445, 343 ], - [480, 246, -330, 538, 452 ], - [64, 493, -180, 64, 493 ], - [26, 171, -30, 107, 161 ], - [87, 597, 210, 373, 559 ], - [764, 716, 360, 764, 716 ], - [602, 108, -240, 394, 574 ], - [229, 649, 0, 229, 649 ], - [367, 490, 240, 606, 561 ], - [989, 416, -90, 416, 989 ], - [357, 528, 330, 572, 635 ], - [190, 119, -180, 190, 119 ], - [243, 167, 300, 265, 293 ], - [510, 186, -270, 186, 510 ], - [968, 251, 300, 699, 963 ], - [743, 55, 240, 418, 670 ], - [741, 506, 360, 741, 506 ], - [928, 678, 240, 1050, 1141 ], - [434, 185, -30, 467, 377 ], - [241, 158, 360, 241, 158 ], - [636, 425, 150, 762, 684 ], - [578, 568, 240, 780, 783 ], - [847, 750, -330, 1108, 1073 ], - [750, 364, -150, 830, 689 ], - [880, 322, 90, 322, 880 ], - [780, 111, 150, 730, 484 ], - [610, 666, -120, 881, 860 ], - [584, 594, -210, 802, 804 ], - [398, 151, -30, 419, 330 ], - [864, 331, 120, 718, 912 ], - [861, 39, -210, 764, 463 ], - [536, 472, 360, 536, 472 ], - [370, 340, 330, 489, 479 ], - [425, 134, -60, 327, 435 ], - [728, 25, 240, 385, 642 ], - [341, 610, 360, 341, 610 ], - [27, 299, 270, 299, 27 ], - [388, 737, 90, 737, 388 ], - [628, 267, 240, 544, 676 ], - [90, 147, -180, 90, 147 ], - [785, 24, -150, 690, 412 ], - [1023, 426, 300, 879, 1098 ], - [994, 703, -120, 1105, 1211 ], - [939, 253, 30, 939, 688 ], - [344, 31, 60, 198, 312 ], - [179, 287, -120, 337, 298 ], - [160, 307, 180, 160, 307 ], - [6, 597, 150, 303, 518 ], - [643, 300, -330, 706, 581 ], - [456, 367, -210, 577, 544 ], - [710, 188, -180, 710, 188 ], - [1016, 187, 240, 669, 972 ], - [927, 164, 180, 927, 164 ], - [267, 99, -330, 280, 219 ], - [808, 357, -300, 712, 877 ], - [358, 491, -30, 555, 604 ], - [721, 611, 270, 611, 721 ], - [458, 615, 120, 761, 702 ], - [153, 328, -330, 296, 360 ], - [204, 670, 30, 511, 681 ], - [449, 434, 210, 604, 599 ], - [725, 428, -360, 725, 428 ], - [545, 355, -210, 648, 578 ], - [277, 554, -120, 617, 515 ], - [345, 392, 240, 510, 493 ], - [455, 660, -30, 723, 799 ], - [946, 432, -180, 946, 432 ], - [822, 7, -330, 714, 416 ], - [469, 122, -30, 466, 340 ], - [516, 274, -120, 494, 582 ], - [27, 611, 300, 541, 328 ], - [812, 386, -30, 895, 740 ], - [822, 27, 330, 724, 434 ], - [24, 234, 120, 214, 136 ], - [383, 492, -270, 492, 383 ], - [194, 65, -360, 194, 65 ], - [658, 7, 60, 334, 572 ], - [912, 623, 60, 995, 1100 ], - [961, 206, 180, 961, 206 ], - [424, 593, -300, 725, 663 ], - [778, 613, 300, 918, 979 ], - [687, 454, -60, 735, 821 ], - [142, 302, -60, 331, 273 ], - [69, 320, 180, 69, 320 ], - [734, 607, -90, 607, 734 ], - [898, 752, -30, 1152, 1100 ], - [916, 477, -30, 1031, 871 ], - [487, 393, -150, 617, 582 ], - [66, 346, 30, 230, 332 ], - [832, 663, -120, 989, 1051 ], - [938, 478, -300, 882, 1051 ], - [834, 225, 150, 834, 610 ], - [221, 331, -300, 397, 356 ], - [666, 382, 0, 666, 382 ], - [398, 165, -150, 426, 341 ], - [786, 70, -150, 714, 453 ], - [236, 757, 300, 772, 582 ], - [718, 353, -60, 663, 797 ], - [1006, 403, 270, 403, 1006 ], - [545, 258, 180, 545, 258 ], - [874, 193, -120, 603, 852 ], - [996, 51, 120, 541, 886 ], - [699, 216, -330, 713, 536 ], - [805, 715, 60, 1021, 1054 ], - [312, 245, 210, 392, 367 ], - [628, 66, 270, 66, 628 ], - [922, 242, 270, 242, 922 ], - [827, 12, -120, 422, 721 ], - [231, 766, 270, 766, 231 ], - [95, 407, -240, 399, 284 ], - [842, 294, -60, 674, 876 ], - [178, 272, 0, 178, 272 ], - [838, 28, 210, 738, 442 ], - [914, 631, 150, 1106, 1001 ], - [476, 97, -360, 476, 97 ], - [257, 567, -300, 619, 505 ], - [131, 490, -60, 488, 358 ], - [1013, 342, -60, 801, 1048 ], - [317, 515, -60, 603, 531 ], - [157, 585, 360, 157, 585 ], - [341, 448, -120, 557, 518 ], - [781, 581, 150, 966, 892 ], - [265, 441, 180, 265, 441 ], - [35, 359, 30, 209, 328 ], - [757, 716, 150, 1013, 997 ], - [782, 141, -60, 511, 747 ], - [893, 238, -330, 892, 652 ], - [302, 230, 0, 302, 230 ], - [752, 467, -240, 779, 883 ], - [174, 585, 330, 442, 594 ], - [138, 72, 0, 138, 72 ], - [492, 658, -180, 492, 658 ], - [185, 88, 270, 88, 185 ], - [939, 113, -150, 869, 566 ], - [487, 681, -180, 487, 681 ], - [163, 499, -60, 512, 390 ], - [594, 400, 180, 594, 400 ], - [655, 626, -360, 655, 626 ], - [148, 422, 120, 438, 338 ], - [325, 552, -60, 639, 557 ], - [259, 655, 0, 259, 655 ], - [789, 255, -120, 614, 810 ], - [46, 394, -30, 235, 364 ], - [915, 330, 90, 330, 915 ], - [214, 695, 0, 214, 695 ], - [466, 48, -270, 48, 466 ], - [906, 494, 120, 880, 1030 ], - [638, 217, 0, 638, 217 ], - [676, 327, -360, 676, 327 ], - [312, 571, 180, 312, 571 ], - [727, 765, 90, 765, 727 ], - [214, 588, 330, 478, 616 ], - [576, 622, -30, 808, 827 ], - [31, 540, 270, 540, 31 ], - [661, 701, 210, 922, 936 ], - [149, 282, 270, 282, 149 ], - [302, 193, 0, 302, 193 ], - [987, 671, 210, 1189, 1073 ], - [459, 410, -240, 584, 601 ], - [492, 644, 330, 747, 804 ], - [236, 421, 330, 414, 483 ], - [853, 581, 150, 1028, 928 ], - [785, 245, 0, 785, 245 ], - [217, 268, -210, 321, 339 ], - [90, 763, -300, 705, 458 ], - [888, 107, 0, 888, 107 ], - [726, 333, 180, 726, 333 ], - [198, 305, 90, 305, 198 ], - [983, 649, -270, 649, 983 ], - [155, 250, 360, 155, 250 ], - [89, 427, 30, 290, 414 ], - [17, 298, -150, 162, 265 ], - [729, 118, 90, 118, 729 ], - [223, 280, 330, 332, 353 ], - [436, 347, 330, 550, 519 ], - [558, 244, -300, 489, 605 ], - [32, 20, 0, 32, 20 ], - [787, 169, 300, 538, 765 ], - [387, 137, 180, 387, 137 ], - [534, 253, -330, 588, 485 ], - [514, 320, 90, 320, 514 ], - [31, 332, -360, 31, 332 ], - [321, 111, -240, 256, 331 ], - [936, 277, 30, 948, 707 ], - [884, 604, 360, 884, 604 ], - [825, 254, -150, 840, 631 ], - [907, 278, -120, 693, 923 ], - [408, 100, 30, 403, 290 ], - [315, 390, 180, 315, 390 ], - [62, 22, -330, 64, 49 ], - [141, 407, -30, 325, 422 ], - [789, 429, 300, 765, 897 ], - [808, 670, -330, 1034, 983 ], - [984, 603, -60, 1012, 1153 ], - [509, 498, -240, 685, 688 ], - [496, 349, 30, 603, 549 ], - [808, 260, 300, 627, 829 ], - [122, 566, -360, 122, 566 ], - [684, 33, 30, 608, 370 ], - [405, 79, 30, 389, 270 ], - [463, 185, -330, 492, 391 ], - [947, 8, 90, 8, 947 ], - [850, 614, 0, 850, 614 ], - [899, 584, -150, 1069, 954 ], - [294, 197, 330, 352, 318 ], - [493, 568, -90, 568, 493 ], - [7, 406, 180, 7, 406 ], - [914, 497, -30, 1039, 887 ], - [930, 242, 0, 930, 242 ], - [440, 546, 90, 546, 440 ], - [1002, 125, 270, 125, 1002 ], - [58, 67, 270, 67, 58 ], - [710, 703, 120, 963, 964 ], - [205, 609, -60, 628, 481 ], - [505, 61, 120, 305, 466 ], - [445, 431, -60, 594, 600 ], - [848, 435, 330, 951, 801 ], - [574, 352, 60, 591, 673 ], - [29, 281, 300, 256, 165 ], - [552, 611, 90, 611, 552 ], - [155, 594, 210, 430, 590 ], - [4, 637, 270, 637, 4 ], - [887, 401, 210, 968, 789 ], - [539, 555, 60, 750, 743 ], - [968, 165, 120, 626, 919 ], - [635, 498, -210, 798, 747 ], - [36, 366, 210, 213, 334 ], - [1001, 28, -210, 880, 523 ], - [580, 49, 60, 331, 526 ], - [481, 463, -90, 463, 481 ], - [85, 579, -240, 543, 361 ], - [878, 581, 360, 878, 581 ], - [735, 478, 0, 735, 478 ], - [506, 113, -210, 494, 349 ], - [64, 71, -30, 90, 93 ], - [728, 547, -300, 837, 903 ], - [941, 574, 60, 967, 1101 ], - [710, 556, 90, 556, 710 ], - [948, 223, 120, 666, 930 ], - [536, 583, -180, 536, 583 ], - [938, 646, -360, 938, 646 ], - [83, 536, 210, 338, 504 ], - [76, 319, -60, 312, 224 ], - [603, 698, 30, 871, 905 ], - [846, 746, 120, 1068, 1104 ], - [284, 523, -120, 594, 506 ], - [385, 461, -300, 591, 563 ], - [974, 225, 240, 681, 955 ], - [575, 167, -300, 432, 580 ], - [241, 569, 270, 569, 241 ], - [524, 504, 150, 705, 696 ], - [554, 566, -60, 765, 762 ], - [334, 622, 240, 705, 599 ], - [750, 306, 180, 750, 306 ], - [294, 172, 150, 340, 294 ], - [955, 385, -90, 385, 955 ], - [297, 673, 360, 297, 673 ], - [403, 635, -180, 403, 635 ], - [226, 298, 0, 226, 298 ], - [345, 478, -210, 537, 585 ], - [216, 103, 300, 195, 238 ], - [948, 518, 90, 518, 948 ], - [346, 768, -60, 836, 683 ], - [169, 562, 240, 570, 426 ], - [921, 14, -330, 804, 472 ], - [618, 730, 30, 900, 940 ], - [1013, 184, -60, 664, 969 ], - [998, 486, -180, 998, 486 ], - [257, 655, 120, 695, 548 ], - [764, 146, -180, 764, 146 ], - [1004, 308, -60, 767, 1023 ], - [892, 250, -330, 897, 662 ], - [510, 510, -330, 696, 696 ], - [956, 636, 240, 1028, 1144 ], - [787, 558, 240, 875, 959 ], - [846, 253, 210, 858, 641 ], - [395, 245, -360, 395, 245 ], - [840, 225, 120, 614, 838 ], - [83, 417, 0, 83, 417 ], - [746, 222, 150, 757, 563 ], - [1022, 206, -300, 688, 988 ], - [412, 107, -60, 297, 409 ], - [491, 489, -330, 669, 668 ], - [569, 438, 300, 662, 711 ], - [372, 260, 90, 260, 372 ], - [194, 126, 330, 230, 206 ], - [988, 422, -180, 988, 422 ], - [1003, 283, 60, 746, 1009 ], - [641, 345, -300, 619, 727 ], - [129, 136, -90, 136, 129 ], - [835, 134, 120, 533, 789 ], - [926, 443, 240, 846, 1022 ], - [326, 42, -30, 302, 199 ], - [405, 469, -360, 405, 469 ], - [307, 747, -120, 799, 638 ], - [952, 124, 0, 952, 124 ], - [911, 96, -330, 836, 538 ], - [171, 80, -60, 153, 188 ], - [754, 561, 270, 561, 754 ], - [868, 657, -330, 1079, 1002 ], - [254, 515, -210, 476, 571 ], - [937, 441, 240, 849, 1031 ], - [740, 685, 270, 685, 740 ], - [169, 220, -30, 255, 275 ], - [183, 449, -30, 382, 480 ], - [541, 395, 90, 395, 541 ], - [44, 310, 180, 44, 310 ], - [108, 438, 240, 432, 311 ], - [549, 235, 30, 592, 478 ], - [425, 118, -60, 313, 427 ], - [481, 308, -300, 507, 570 ], - [715, 243, 120, 567, 739 ], - [515, 29, 30, 460, 282 ], - [370, 156, 240, 319, 397 ], - [849, 292, -60, 676, 881 ], - [275, 698, 330, 586, 741 ], - [891, 731, -120, 1077, 1136 ], - [610, 43, 300, 340, 549 ], - [434, 455, -210, 602, 609 ], - [1006, 6, -90, 6, 1006 ], - [405, 366, 210, 532, 518 ], - [491, 134, -330, 492, 361 ], - [139, 520, -300, 519, 380 ], - [699, 29, -150, 619, 373 ], - [528, 665, 150, 789, 838 ], - [955, 103, 90, 103, 955 ], - [884, 3, 30, 766, 444 ], - [203, 460, 90, 460, 203 ], - [104, 17, -210, 98, 65 ], - [319, 3, -210, 277, 161 ], - [691, 307, 150, 751, 610 ], - [448, 674, 270, 674, 448 ], - [529, 10, 30, 463, 273 ], - [647, 535, 60, 786, 827 ], - [973, 162, -30, 922, 626 ], - [663, 110, 60, 426, 629 ], - [259, 5, 60, 133, 226 ], - [829, 157, -240, 550, 794 ], - [432, 235, -240, 419, 490 ], - [641, 473, -210, 791, 729 ], - [857, 223, 60, 621, 853 ], - [537, 559, -30, 744, 752 ], - [396, 187, 0, 396, 187 ], - [947, 672, -240, 1055, 1155 ], - [512, 633, -90, 633, 512 ], - [963, 362, 30, 1014, 795 ], - [527, 556, 30, 734, 745 ], - [95, 410, 180, 95, 410 ], - [274, 733, -330, 603, 771 ], - [476, 446, 120, 623, 634 ], - [681, 321, 330, 749, 618 ], - [271, 723, 150, 595, 760 ], - [759, 252, 330, 782, 597 ], - [236, 194, 240, 285, 300 ], - [426, 578, 90, 578, 426 ], - [831, 532, -300, 876, 985 ], - [358, 159, 240, 316, 389 ], - [915, 229, -120, 654, 906 ], - [657, 435, -150, 785, 704 ], - [711, 23, 300, 374, 626 ], - [371, 534, -150, 587, 646 ], - [327, 736, -180, 327, 736 ], - [4, 537, 60, 466, 271 ], - [953, 714, 240, 1093, 1181 ], - [749, 265, 60, 603, 780 ], - [365, 119, -180, 365, 119 ], - [464, 388, -30, 594, 568 ], - [280, 306, 210, 394, 404 ], - [641, 30, -120, 345, 569 ], - [956, 563, -90, 563, 956 ], - [840, 72, -330, 763, 481 ], - [128, 317, -360, 128, 317 ], - [379, 320, 150, 488, 465 ], - [966, 266, 120, 712, 968 ], - [786, 60, 360, 786, 60 ], - [352, 333, -270, 333, 352 ], - [626, 681, 120, 902, 881 ], - [87, 122, -330, 136, 149 ], - [878, 603, -300, 960, 1061 ], - [199, 551, 240, 575, 447 ], - [575, 413, 300, 644, 703 ], - [638, 509, -120, 759, 806 ], - [658, 25, 180, 658, 25 ], - [369, 749, -300, 833, 693 ], - [7, 570, -240, 497, 290 ], - [1022, 66, 60, 567, 918 ], - [147, 535, 0, 147, 535 ], - [812, 600, 120, 925, 1002 ], - [861, 490, -60, 853, 990 ], - [949, 640, -270, 640, 949 ], - [763, 303, 120, 643, 810 ], - [673, 13, -120, 346, 588 ], - [1006, 506, -90, 506, 1006 ], - [740, 14, -120, 381, 646 ], - [829, 19, -300, 430, 726 ], - [996, 17, -240, 512, 869 ], - [583, 127, 270, 127, 583 ], - [53, 736, 120, 663, 412 ], - [709, 613, -150, 920, 884 ], - [121, 556, -270, 556, 121 ], - [266, 360, 0, 266, 360 ], - [962, 96, 30, 881, 563 ], - [287, 82, -240, 214, 288 ], - [668, 637, -210, 896, 884 ], - [1024, 490, -210, 1131, 934 ], - [91, 468, -180, 91, 468 ], - [269, 137, -60, 252, 300 ], - [137, 177, -90, 177, 137 ], - [804, 708, -240, 1014, 1049 ], - [76, 30, 300, 62, 80 ], - [200, 229, -90, 229, 200 ], - [728, 182, 0, 728, 182 ], - [248, 397, 60, 467, 412 ], - [442, 130, -60, 332, 447 ], - [654, 130, -330, 631, 439 ], - [892, 197, 120, 616, 869 ], - [128, 399, 270, 399, 128 ], - [557, 501, -330, 732, 712 ], - [942, 335, -360, 942, 335 ], - [95, 392, -360, 95, 392 ], - [1014, 542, -120, 975, 1148 ], - [364, 320, 60, 458, 475 ], - [866, 505, -300, 869, 1001 ], - [453, 68, -180, 453, 68 ], - [888, 558, -60, 925, 1048 ], - [952, 459, 150, 1053, 872 ], - [616, 554, -210, 810, 786 ], - [462, 203, 270, 203, 462 ], - [543, 141, -150, 540, 392 ], - [544, 212, 240, 455, 576 ], - [585, 204, 0, 585, 204 ], - [931, 477, 330, 1044, 878 ], - [495, 358, 60, 557, 607 ], - [588, 697, 120, 897, 856 ], - [854, 594, -90, 594, 854 ], - [268, 540, 360, 268, 540 ], - [968, 234, 150, 955, 685 ], - [152, 580, 360, 152, 580 ], - [3, 219, -270, 219, 3 ], - [301, 627, -60, 692, 573 ], - [96, 297, 150, 231, 303 ], - [614, 227, -150, 644, 503 ], - [533, 598, 210, 759, 783 ], - [101, 271, 150, 222, 284 ], - [782, 143, -30, 748, 515 ], - [160, 344, -240, 377, 309 ], - [148, 301, -30, 278, 335 ], - [874, 415, -210, 963, 794 ], - [847, 417, 0, 847, 417 ], - [1007, 642, -120, 1058, 1192 ], - [426, 714, 150, 725, 829 ], - [117, 406, -360, 117, 406 ], - [443, 37, 210, 401, 252 ], - [222, 113, -270, 113, 222 ], - [928, 699, -120, 1068, 1152 ], - [378, 50, 210, 351, 231 ], - [548, 161, -270, 161, 548 ], - [4, 48, 150, 27, 42 ], - [233, 682, -180, 233, 682 ], - [754, 670, -330, 987, 956 ], - [61, 221, -360, 61, 221 ], - [789, 309, 30, 837, 662 ], - [795, 641, 60, 952, 1008 ], - [573, 39, 180, 573, 39 ], - [712, 734, 90, 734, 712 ], - [18, 250, 150, 140, 224 ], - [805, 660, 300, 973, 1027 ], - [968, 663, 360, 968, 663 ], - [661, 69, 270, 69, 661 ], - [908, 634, 180, 908, 634 ], - [986, 680, -360, 986, 680 ], - [992, 503, -60, 930, 1110 ], - [514, 331, -180, 514, 331 ], - [85, 760, -150, 452, 699 ], - [830, 526, -180, 830, 526 ], - [458, 539, 60, 695, 665 ], - [152, 374, -30, 317, 400 ], - [59, 332, -150, 216, 316 ], - [29, 59, -90, 59, 29 ], - [909, 740, -210, 1157, 1094 ], - [633, 711, -300, 932, 903 ], - [651, 686, 180, 651, 686 ], - [56, 303, -240, 289, 198 ], - [314, 366, -240, 473, 453 ], - [624, 220, 270, 220, 624 ], - [888, 563, 60, 931, 1050 ], - [459, 676, -330, 735, 814 ], - [911, 720, 0, 911, 720 ], - [197, 742, 30, 541, 741 ], - [599, 655, 30, 845, 866 ], - [823, 361, -30, 892, 724 ], - [929, 81, -120, 533, 844 ], - [681, 122, 180, 681, 122 ], - [874, 358, -210, 935, 745 ], - [31, 57, 0, 31, 57 ], - [914, 722, -210, 1152, 1080 ], - [468, 298, -300, 491, 554 ], - [520, 213, -330, 556, 443 ], - [1014, 360, -360, 1014, 360 ], - [563, 42, 270, 42, 563 ], - [73, 658, -120, 605, 391 ], - [530, 587, -60, 771, 751 ], - [877, 329, 60, 723, 923 ], - [604, 216, -330, 631, 488 ], - [818, 239, -270, 239, 818 ], - [302, 156, -330, 339, 285 ], - [534, 507, -30, 715, 706 ], - [644, 128, 180, 644, 128 ], - [690, 121, -210, 657, 448 ], - [699, 542, -180, 699, 542 ], - [557, 597, -300, 795, 780 ], - [896, 226, 270, 226, 896 ], - [318, 116, -150, 332, 258 ], - [926, 568, 60, 954, 1085 ], - [987, 414, 300, 851, 1061 ], - [98, 639, -300, 601, 403 ], - [173, 272, 180, 173, 272 ], - [644, 755, 330, 934, 976 ], - [375, 504, -300, 623, 576 ], - [585, 259, 210, 635, 515 ], - [851, 677, 60, 1011, 1074 ], - [970, 580, 270, 580, 970 ], - [846, 51, -360, 846, 51 ], - [136, 745, 180, 136, 745 ], - [737, 716, -150, 995, 987 ], - [632, 22, -300, 334, 558 ], - [734, 151, -30, 710, 498 ], - [488, 633, -30, 738, 792 ], - [412, 146, -300, 331, 429 ], - [497, 585, -30, 722, 755 ], - [280, 455, -120, 533, 469 ], - [857, 413, -330, 948, 786 ], - [712, 279, -270, 279, 712 ], - [719, 381, -300, 689, 812 ], - [460, 165, -330, 480, 372 ], - [751, 639, -330, 969, 928 ], - [870, 421, -180, 870, 421 ], - [327, 18, -300, 179, 292 ], - [790, 327, -150, 847, 677 ], - [900, 699, -330, 1128, 1054 ], - [330, 141, 90, 141, 330 ], - [663, 16, -240, 345, 581 ], - [744, 549, 30, 918, 846 ], - [892, 320, -360, 892, 320 ], - [1009, 664, -180, 1009, 664 ], - [33, 459, -330, 257, 414 ], - [108, 344, 90, 344, 108 ], - [385, 589, 120, 702, 626 ], - [481, 413, -330, 622, 598 ], - [771, 320, 360, 771, 320 ], - [817, 567, -240, 899, 989 ], - [444, 296, -240, 477, 531 ], - [622, 86, 300, 383, 581 ], - [148, 755, -150, 505, 727 ], - [181, 743, -240, 733, 526 ], - [434, 767, 210, 758, 880 ], - [514, 80, -210, 485, 324 ], - [131, 368, 360, 131, 368 ], - [796, 728, 30, 1053, 1027 ], - [872, 539, 330, 1024, 903 ], - [856, 383, 150, 932, 758 ], - [3, 716, -330, 360, 621 ], - [194, 414, -240, 455, 374 ], - [93, 525, -240, 501, 341 ], - [417, 660, -270, 660, 417 ], - [602, 218, -270, 218, 602 ], - [376, 603, -210, 626, 708 ], - [607, 701, 150, 875, 909 ], - [599, 529, 120, 757, 781 ], - [117, 415, -120, 416, 308 ], - [61, 289, 270, 289, 61 ], - [760, 291, 210, 803, 631 ], - [830, 436, -120, 792, 935 ], - [1013, 505, -360, 1013, 505 ], - [153, 50, 270, 50, 153 ], - [283, 501, -270, 501, 283 ], - [412, 15, 330, 363, 219 ], - [646, 469, 270, 469, 646 ], - [347, 150, 30, 375, 303 ], - [1019, 237, -330, 1000, 714 ], - [360, 283, -30, 452, 425 ], - [211, 85, 240, 178, 224 ], - [1016, 707, -90, 707, 1016 ], - [323, 698, -330, 628, 765 ], - [330, 44, -300, 202, 307 ], - [192, 256, 210, 293, 317 ], - [343, 564, 210, 578, 658 ], - [274, 281, -90, 281, 274 ], - [115, 541, 60, 526, 369 ], - [661, 537, 300, 794, 840 ], - [736, 38, -180, 736, 38 ], - [171, 196, -90, 196, 171 ], - [1018, 190, -150, 975, 673 ], - [397, 432, -210, 559, 571 ], - [450, 679, -180, 450, 679 ], - [568, 54, 60, 330, 518 ], - [330, 311, -120, 433, 440 ], - [111, 517, 150, 354, 502 ], - [517, 602, -90, 602, 517 ], - [99, 330, -300, 335, 250 ], - [1021, 113, -270, 113, 1021 ], - [271, 241, -90, 241, 271 ], - [657, 236, 120, 532, 685 ], - [961, 534, -210, 1099, 941 ], - [147, 103, -300, 162, 178 ], - [415, 529, -270, 529, 415 ], - [1023, 8, 60, 518, 889 ], - [335, 91, -210, 335, 245 ], - [20, 479, -360, 20, 479 ], - [426, 553, -30, 644, 692 ], - [523, 550, 60, 737, 727 ], - [671, 752, 300, 985, 957 ], - [55, 477, -210, 285, 439 ], - [715, 429, 300, 728, 833 ], - [927, 539, -330, 1071, 930 ], - [1018, 82, 180, 1018, 82 ], - [158, 81, 180, 158, 81 ], - [736, 332, 270, 332, 736 ], - [978, 347, 0, 978, 347 ], - [999, 666, -210, 1198, 1075 ], - [435, 290, 300, 467, 521 ], - [21, 25, 300, 31, 30 ], - [951, 66, 0, 951, 66 ], - [148, 602, -330, 429, 594 ], - [55, 528, 210, 310, 483 ], - [99, 524, 300, 502, 347 ], - [847, 642, 360, 847, 642 ], - [581, 425, -60, 657, 715 ], - [436, 390, 270, 390, 436 ], - [929, 371, 180, 929, 371 ], - [111, 697, -300, 659, 444 ], - [24, 712, -270, 712, 24 ], - [941, 657, -210, 1142, 1038 ], - [444, 768, -360, 444, 768 ], - [519, 41, 150, 469, 294 ], - [288, 115, -90, 115, 288 ], - [166, 749, -210, 517, 730 ], - [152, 417, 210, 339, 436 ], - [579, 744, -180, 579, 744 ], - [444, 673, 180, 444, 673 ], - [173, 755, 120, 740, 525 ], - [288, 5, 60, 147, 251 ], - [436, 710, -30, 731, 833 ], - [670, 275, -30, 717, 573 ], - [683, 664, 0, 683, 664 ], - [375, 111, 120, 283, 378 ], - [765, 236, 90, 236, 765 ], - [986, 349, -240, 794, 1026 ], - [749, 15, -270, 15, 749 ], - [8, 348, -360, 8, 348 ], - [786, 477, 360, 786, 477 ], - [443, 693, 360, 443, 693 ], - [26, 251, 330, 147, 230 ], - [483, 753, -180, 483, 753 ], - [940, 497, -270, 497, 940 ], - [426, 10, -150, 372, 221 ], - [64, 583, 60, 536, 346 ], - [701, 555, -330, 884, 831 ], - [870, 348, -330, 927, 735 ], - [1005, 354, 0, 1005, 354 ], - [1013, 175, -270, 175, 1013 ], - [1004, 507, -330, 1122, 940 ], - [1001, 526, -90, 526, 1001 ], - [921, 120, -120, 563, 856 ], - [183, 56, 360, 183, 56 ], - [329, 376, -360, 329, 376 ], - [623, 423, 210, 750, 676 ], - [207, 181, 0, 207, 181 ], - [256, 65, 330, 253, 184 ], - [324, 50, -60, 203, 305 ], - [855, 42, 90, 42, 855 ], - [998, 27, -150, 877, 521 ], - [16, 9, 360, 16, 9 ], - [392, 700, -270, 700, 392 ], - [749, 69, -240, 434, 681 ], - [743, 316, 150, 801, 644 ], - [749, 15, -210, 655, 386 ], - [509, 170, -30, 524, 401 ], - [1007, 362, 30, 1053, 817 ], - [945, 604, 90, 604, 945 ], - [331, 477, 120, 578, 523 ], - [973, 458, 150, 1071, 882 ], - [243, 469, 180, 243, 469 ], - [214, 763, 90, 763, 214 ], - [344, 557, 180, 344, 557 ], - [549, 345, -270, 345, 549 ], - [229, 139, -270, 139, 229 ], - [474, 520, -90, 520, 474 ], - [959, 506, 270, 506, 959 ], - [506, 447, 90, 447, 506 ], - [119, 694, -180, 119, 694 ], - [811, 656, 270, 656, 811 ], - [514, 70, -30, 479, 318 ], - [229, 230, -30, 312, 313 ], - [877, 487, -240, 860, 1001 ], - [592, 131, 90, 131, 592 ], - [727, 302, 240, 624, 779 ], - [882, 657, -30, 1091, 1010 ], - [240, 608, -270, 608, 240 ], - [78, 219, 150, 176, 227 ], - [722, 308, 90, 308, 722 ], - [977, 147, -30, 919, 615 ], - [818, 533, 60, 870, 974 ], - [261, 704, 270, 704, 261 ], - [721, 593, 0, 721, 593 ], - [898, 268, 120, 680, 910 ], - [510, 46, -330, 464, 294 ], - [307, 707, 300, 764, 618 ], - [796, 118, 150, 748, 498 ], - [935, 177, 360, 935, 177 ], - [646, 718, -90, 718, 646 ], - [258, 682, 60, 719, 564 ], - [744, 528, -180, 744, 528 ], - [298, 723, -240, 774, 618 ], - [158, 495, 360, 158, 495 ], - [668, 400, -150, 777, 679 ], - [327, 14, -90, 14, 327 ], - [389, 244, -150, 457, 404 ], - [302, 73, -30, 297, 214 ], - [1, 6, 120, 5, 2 ], - [1016, 490, 90, 490, 1016 ], - [392, 683, 0, 392, 683 ], - [989, 472, -240, 903, 1091 ], - [246, 695, -270, 695, 246 ], - [442, 46, 210, 404, 260 ], - [404, 547, -150, 622, 675 ], - [723, 24, -150, 637, 381 ], - [78, 315, 90, 315, 78 ], - [375, 540, 150, 594, 654 ], - [829, 541, 180, 829, 541 ], - [494, 534, -120, 708, 693 ], - [92, 60, -180, 92, 60 ], - [598, 33, 270, 33, 598 ], - [783, 218, 210, 786, 579 ], - [907, 549, 240, 927, 1059 ], - [667, 83, 30, 618, 405 ], - [960, 625, 60, 1020, 1143 ], - [247, 683, 360, 247, 683 ], - [883, 196, 120, 611, 861 ], - [590, 50, -90, 50, 590 ], - [305, 420, -330, 474, 516 ], - [672, 489, -270, 489, 672 ], - [924, 168, -240, 606, 883 ], - [782, 755, -30, 1054, 1045 ], - [542, 668, -240, 849, 802 ], - [363, 400, -150, 513, 526 ], - [912, 351, -300, 759, 964 ], - [467, 536, -360, 467, 536 ], - [442, 430, -180, 442, 430 ], - [112, 104, -120, 145, 147 ], - [503, 332, 270, 332, 503 ], - [581, 68, 0, 581, 68 ], - [739, 761, 180, 739, 761 ], - [941, 579, 150, 1103, 970 ], - [409, 217, 60, 392, 462 ], - [607, 489, -300, 726, 769 ], - [916, 404, 30, 995, 807 ], - [11, 754, -180, 11, 754 ], - [15, 317, 240, 281, 170 ], - [280, 401, 330, 442, 487 ], - [611, 10, -90, 10, 611 ], - [478, 446, -30, 635, 625 ], - [995, 232, -30, 976, 698 ], - [713, 169, -210, 701, 501 ], - [413, 475, 0, 413, 475 ], - [1002, 162, -270, 162, 1002 ], - [75, 81, 120, 107, 103 ], - [640, 89, 90, 89, 640 ], - [896, 100, -330, 825, 534 ], - [699, 310, 60, 617, 760 ], - [641, 768, 60, 985, 939 ], - [1, 358, -270, 358, 1 ], - [475, 336, -30, 578, 528 ], - [938, 103, 120, 557, 862 ], - [125, 412, -150, 313, 418 ], - [623, 395, 0, 623, 395 ], - [749, 450, 90, 450, 749 ], - [390, 162, 180, 390, 162 ], - [11, 66, 270, 66, 11 ], - [55, 590, -180, 55, 590 ], - [633, 302, -180, 633, 302 ], - [199, 303, 180, 199, 303 ], - [359, 659, -240, 750, 638 ], - [827, 595, -150, 1013, 927 ], - [496, 688, 240, 843, 772 ], - [799, 387, -120, 733, 884 ], - [293, 180, 330, 342, 302 ], - [920, 472, -270, 472, 920 ], - [640, 480, -210, 794, 734 ], - [493, 521, 360, 493, 521 ], - [759, 227, -90, 227, 759 ], - [1023, 376, 210, 1072, 836 ], - [741, 645, 90, 645, 741 ], - [906, 497, -60, 881, 1032 ], - [183, 101, -150, 208, 177 ], - [9, 700, 240, 609, 356 ], - [360, 152, -330, 387, 311 ], - [287, 73, 120, 206, 283 ], - [429, 553, -150, 647, 692 ], - [659, 154, 330, 646, 462 ], - [651, 723, -180, 651, 723 ], - [21, 722, 180, 21, 722 ], - [819, 509, 60, 850, 963 ], - [447, 420, -210, 597, 586 ], - [867, 557, -90, 557, 867 ], - [155, 563, -180, 155, 563 ], - [982, 64, -30, 881, 546 ], - [1, 279, 60, 242, 139 ], - [674, 600, -150, 882, 856 ], - [962, 326, 0, 962, 326 ], - [920, 46, -60, 498, 819 ], - [157, 61, -90, 61, 157 ], - [918, 675, -360, 918, 675 ], - [492, 242, 60, 455, 547 ], - [728, 124, -150, 691, 470 ], - [74, 240, -360, 74, 240 ], - [353, 208, -300, 356, 409 ], - [833, 209, -30, 825, 597 ], - [386, 714, -180, 386, 714 ], - [676, 667, 120, 915, 917 ], - [146, 588, 180, 146, 588 ], - [580, 705, 240, 900, 854 ], - [950, 626, 150, 1135, 1015 ], - [975, 226, -360, 975, 226 ], - [534, 4, -240, 269, 463 ], - [835, 59, 0, 835, 59 ], - [861, 323, 180, 861, 323 ], - [972, 179, -360, 972, 179 ], - [430, 469, 330, 606, 621 ], - [688, 207, 240, 522, 698 ], - [356, 316, 60, 451, 466 ], - [85, 751, 0, 85, 751 ], - [920, 695, -150, 1143, 1061 ], - [606, 658, 90, 658, 606 ], - [614, 290, 90, 290, 614 ], - [786, 148, 150, 754, 519 ], - [254, 26, -300, 149, 232 ], - [1022, 755, -120, 1164, 1262 ], - [20, 309, 330, 171, 278 ], - [994, 57, -210, 888, 544 ], - [807, 324, 90, 324, 807 ], - [381, 387, 90, 387, 381 ], - [894, 309, 0, 894, 309 ], - [193, 763, -90, 763, 193 ], - [817, 455, 180, 817, 455 ], - [421, 276, 330, 501, 449 ], - [102, 466, 360, 102, 466 ], - [213, 464, 330, 415, 508 ], - [562, 479, -120, 695, 725 ], - [512, 456, -60, 649, 671 ], - [737, 294, 270, 294, 737 ], - [359, 579, -120, 679, 599 ], - [982, 481, 180, 982, 481 ], - [483, 626, 180, 483, 626 ], - [861, 470, -120, 836, 979 ], - [601, 17, 150, 528, 314 ], - [538, 93, -150, 511, 349 ], - [509, 252, 300, 471, 566 ], - [462, 674, 30, 737, 814 ], - [827, 289, -270, 289, 827 ], - [242, 73, 0, 242, 73 ], - [89, 343, -180, 89, 343 ], - [451, 311, 300, 493, 545 ], - [200, 673, 150, 509, 681 ], - [965, 550, -150, 1109, 957 ], - [288, 232, -120, 344, 364 ], - [1003, 635, -30, 1185, 1051 ], - [290, 249, 210, 375, 360 ], - [196, 595, 120, 612, 465 ], - [740, 447, -360, 740, 447 ], - [868, 628, -270, 628, 868 ], - [363, 694, 60, 782, 661 ], - [629, 264, 360, 629, 264 ], - [512, 413, 270, 413, 512 ], - [204, 369, 60, 421, 360 ], - [522, 584, 270, 584, 522 ], - [862, 568, 150, 1030, 921 ], - [302, 17, -360, 302, 17 ], - [78, 164, 210, 148, 180 ], - [751, 718, -90, 718, 751 ], - [785, 601, -240, 912, 978 ], - [916, 105, -300, 548, 845 ], - [480, 577, -60, 738, 703 ], - [457, 192, 360, 457, 192 ], - [307, 345, -30, 437, 452 ], - [888, 736, -210, 1137, 1079 ], - [755, 615, 330, 960, 910 ], - [443, 73, 360, 443, 73 ], - [462, 131, -240, 343, 464 ], - [250, 694, -270, 694, 250 ], - [632, 514, 300, 759, 804 ], - [827, 433, -360, 827, 433 ], - [922, 25, 210, 810, 482 ], - [345, 367, -360, 345, 367 ], - [317, 597, 0, 317, 597 ], - [780, 495, -30, 922, 819 ], - [998, 293, -180, 998, 293 ], - [948, 625, -120, 1014, 1132 ], - [921, 203, 0, 921, 203 ], - [87, 390, -60, 380, 270 ], - [211, 96, -300, 188, 230 ], - [111, 716, 120, 675, 453 ], - [152, 639, 120, 628, 449 ], - [961, 130, -270, 130, 961 ], - [1001, 367, 330, 1049, 818 ], - [477, 183, 60, 396, 504 ], - [933, 163, 330, 889, 607 ], - [160, 106, 210, 190, 171 ], - [508, 28, -360, 508, 28 ], - [6, 93, 30, 51, 83 ], - [428, 251, 120, 430, 494 ], - [511, 334, 60, 544, 609 ], - [147, 448, -60, 460, 351 ], - [840, 400, 60, 765, 927 ], - [997, 383, -330, 1054, 830 ], - [926, 740, -150, 1170, 1103 ], - [490, 671, 30, 759, 825 ], - [442, 23, 120, 240, 392 ], - [203, 403, 150, 376, 449 ], - [234, 407, 240, 468, 405 ], - [785, 728, -270, 728, 785 ], - [439, 343, 60, 516, 551 ], - [23, 453, -270, 453, 23 ], - [459, 314, 120, 501, 553 ], - [42, 294, -240, 275, 182 ], - [115, 220, -270, 220, 115 ], - [431, 587, -360, 431, 587 ], - [965, 150, -330, 910, 612 ], - [615, 303, 60, 569, 683 ], - [303, 478, -300, 565, 501 ], - [114, 298, -330, 247, 314 ], - [260, 627, 0, 260, 627 ], - [851, 644, -330, 1058, 983 ], - [1014, 219, 0, 1014, 219 ], - [686, 251, 270, 251, 686 ], - [868, 336, -270, 336, 868 ], - [1011, 659, 300, 1075, 1204 ], - [1024, 615, -300, 1044, 1193 ], - [43, 307, 0, 43, 307 ], - [623, 534, -270, 534, 623 ], - [722, 619, 0, 722, 619 ], - [767, 46, -120, 422, 686 ], - [243, 684, -240, 713, 551 ], - [323, 676, -30, 616, 746 ], - [821, 423, 210, 922, 775 ], - [687, 305, -210, 746, 606 ], - [845, 295, -330, 878, 677 ], - [762, 295, 270, 295, 762 ], - [878, 327, -180, 878, 327 ], - [373, 26, 360, 373, 26 ], - [505, 567, 210, 720, 742 ], - [10, 374, 240, 328, 194 ], - [350, 556, 180, 350, 556 ], - [524, 30, 90, 30, 524 ], - [989, 645, -270, 645, 989 ], - [765, 392, 30, 858, 721 ], - [988, 257, 330, 983, 717 ], - [41, 60, -150, 64, 71 ], - [938, 718, 180, 938, 718 ], - [196, 230, 210, 283, 296 ], - [165, 608, 0, 165, 608 ], - [959, 615, 360, 959, 615 ], - [790, 109, 180, 790, 109 ], - [508, 502, 210, 689, 688 ], - [104, 475, 60, 462, 327 ], - [262, 281, -300, 373, 366 ], - [827, 253, -30, 842, 632 ], - [760, 284, 30, 800, 625 ], - [62, 219, -30, 162, 221 ], - [822, 365, 180, 822, 365 ], - [593, 488, 30, 757, 719 ], - [95, 439, -120, 426, 301 ], - [95, 263, 0, 95, 263 ], - [835, 644, -270, 644, 835 ], - [590, 722, 180, 590, 722 ], - [180, 150, -270, 150, 180 ], - [292, 2, -30, 252, 148 ], - [746, 571, 240, 867, 931 ], - [256, 617, -300, 661, 529 ], - [723, 466, 60, 765, 859 ], - [472, 142, -210, 479, 357 ], - [7, 213, 210, 112, 186 ], - [362, 284, -270, 284, 362 ], - [862, 141, 360, 862, 141 ], - [1006, 583, 300, 1006, 1162 ], - [760, 718, -300, 1001, 1017 ], - [887, 169, -300, 589, 852 ], - [326, 728, 270, 728, 326 ], - [144, 152, 120, 203, 199 ], - [252, 694, -180, 252, 694 ], - [846, 279, -60, 663, 871 ], - [43, 284, 150, 179, 266 ], - [848, 555, -300, 904, 1011 ], - [980, 433, -180, 980, 433 ], - [946, 419, -360, 946, 419 ], - [849, 221, 330, 845, 615 ], - [952, 117, -240, 576, 881 ], - [32, 361, -270, 361, 32 ], - [897, 469, -120, 853, 1010 ], - [536, 657, -210, 792, 835 ], - [795, 524, 60, 851, 950 ], - [219, 556, 330, 466, 591 ], - [950, 424, 120, 841, 1033 ], - [11, 390, -180, 11, 390 ], - [283, 331, 210, 410, 427 ], - [308, 199, -330, 365, 325 ], - [267, 145, -210, 303, 258 ], - [450, 168, 150, 473, 368 ], - [578, 73, -150, 536, 351 ], - [909, 474, -240, 864, 1023 ], - [115, 303, 270, 303, 115 ], - [717, 467, 60, 762, 853 ], - [673, 411, -300, 692, 787 ], - [344, 419, 90, 419, 344 ], - [592, 630, -330, 827, 841 ], - [374, 93, -150, 369, 267 ], - [450, 293, 0, 450, 293 ], - [681, 630, 150, 904, 885 ], - [369, 295, 240, 438, 466 ], - [681, 208, -60, 519, 693 ], - [846, 295, 240, 677, 879 ], - [684, 64, -60, 395, 624 ], - [238, 569, 360, 238, 569 ], - [357, 58, 0, 357, 58 ], - [994, 502, -120, 931, 1110 ], - [25, 14, -30, 27, 24 ], - [345, 351, 240, 475, 473 ], - [857, 93, 120, 509, 787 ], - [569, 370, -360, 569, 370 ], - [378, 112, -150, 382, 285 ], - [818, 747, 150, 1081, 1054 ], - [637, 491, 210, 796, 742 ], - [54, 669, 0, 54, 669 ], - [17, 169, 60, 154, 98 ], - [539, 146, -210, 539, 394 ], - [876, 164, -180, 876, 164 ], - [312, 422, 150, 481, 519 ], - [139, 297, 240, 325, 268 ], - [805, 723, -150, 1058, 1027 ], - [839, 238, -30, 844, 625 ], - [127, 83, -60, 134, 150 ], - [832, 561, -330, 1000, 901 ], - [597, 601, 330, 817, 818 ], - [96, 613, -240, 578, 388 ], - [696, 249, -120, 563, 726 ], - [941, 137, 60, 589, 882 ], - [180, 371, -300, 410, 340 ], - [911, 475, 0, 911, 475 ], - [743, 310, -30, 797, 639 ], - [42, 171, 180, 42, 171 ], - [515, 266, 270, 266, 515 ], - [959, 122, 60, 585, 891 ], - [9, 569, -90, 569, 9 ], - [975, 640, -240, 1041, 1163 ], - [117, 394, 0, 117, 394 ], - [477, 331, 120, 525, 577 ], - [31, 465, -270, 465, 31 ], - [148, 381, 210, 318, 403 ], - [660, 169, -240, 475, 654 ], - [87, 201, -90, 201, 87 ], - [855, 587, 180, 855, 587 ], - [710, 538, 300, 819, 883 ], - [288, 544, 90, 544, 288 ], - [665, 507, -30, 828, 771 ], - [836, 594, 360, 836, 594 ], - [314, 183, -60, 313, 362 ], - [997, 206, -360, 997, 206 ], - [126, 316, 0, 126, 316 ], - [912, 43, 180, 912, 43 ], - [62, 108, 360, 62, 108 ], - [464, 749, 180, 464, 749 ], - [197, 513, -30, 426, 542 ], - [91, 728, -240, 675, 441 ], - [743, 459, 240, 768, 872 ], - [201, 318, 60, 375, 333 ], - [183, 553, 240, 569, 434 ], - [605, 532, -300, 763, 789 ], - [623, 627, 0, 623, 627 ], - [123, 542, 60, 530, 377 ], - [873, 589, 150, 1050, 945 ], - [866, 169, 150, 833, 577 ], - [616, 316, -120, 581, 690 ], - [59, 384, -150, 242, 361 ], - [227, 173, 300, 262, 282 ], - [45, 323, -150, 199, 301 ], - [655, 460, -360, 655, 460 ], - [484, 145, 150, 491, 366 ], - [587, 611, 30, 813, 822 ], - [87, 704, -210, 427, 652 ], - [668, 590, -360, 668, 590 ], - [368, 471, -210, 553, 590 ], - [41, 165, 90, 165, 41 ], - [398, 209, -270, 209, 398 ], - [702, 379, -120, 678, 796 ], - [593, 412, 210, 718, 652 ], - [907, 135, -90, 135, 907 ], - [934, 498, 60, 897, 1057 ], - [646, 170, -120, 469, 643 ], - [168, 235, -180, 168, 235 ], - [413, 736, -330, 725, 843 ], - [419, 243, 120, 419, 482 ], - [648, 274, 270, 274, 648 ], - [274, 572, -270, 572, 274 ], - [411, 330, 90, 330, 411 ], - [778, 6, -240, 393, 675 ], - [551, 686, -120, 868, 819 ], - [936, 618, 360, 936, 618 ], - [490, 334, -210, 591, 532 ], - [858, 460, 30, 973, 826 ], - [115, 1, -30, 99, 58 ], - [159, 315, 210, 294, 351 ], - [830, 33, -270, 33, 830 ], - [696, 238, 300, 552, 721 ], - [841, 546, -120, 892, 1000 ], - [466, 362, -120, 546, 583 ], - [641, 7, -210, 558, 325 ], - [995, 708, -360, 995, 708 ], - [989, 307, -30, 1009, 760 ], - [185, 182, -330, 251, 250 ], - [717, 268, -330, 754, 590 ], - [183, 387, -30, 351, 426 ], - [995, 241, 0, 995, 241 ], - [124, 763, 240, 722, 488 ], - [15, 625, 30, 324, 548 ], - [345, 207, -360, 345, 207 ], - [683, 687, -360, 683, 687 ], - [910, 665, 330, 1120, 1031 ], - [938, 638, -120, 1021, 1130 ], - [385, 8, 60, 199, 337 ], - [445, 546, 300, 694, 658 ], - [506, 682, -60, 842, 779 ], - [986, 660, 180, 986, 660 ], - [485, 753, 180, 485, 753 ], - [302, 764, 30, 643, 812 ], - [846, 254, 240, 642, 858 ], - [847, 765, 150, 1115, 1085 ], - [857, 680, 60, 1017, 1082 ], - [786, 615, -90, 615, 786 ], - [100, 135, -60, 165, 153 ], - [681, 469, -300, 746, 823 ], - [595, 80, -360, 595, 80 ], - [1023, 51, 270, 51, 1023 ], - [749, 415, 270, 415, 749 ], - [467, 641, 240, 787, 724 ], - [1017, 507, -240, 947, 1132 ], - [819, 374, -240, 733, 895 ], - [511, 248, -330, 566, 470 ], - [66, 69, 270, 69, 66 ], - [469, 144, -360, 469, 144 ], - [883, 655, 90, 655, 883 ], - [1000, 332, 180, 1000, 332 ], - [1003, 331, 210, 1033, 787 ], - [861, 125, -120, 537, 807 ], - [697, 474, -240, 758, 839 ], - [528, 469, 240, 669, 691 ], - [696, 315, -150, 759, 620 ], - [860, 698, 120, 1033, 1092 ], - [906, 747, 180, 906, 747 ], - [747, 330, 300, 658, 811 ], - [768, 224, 210, 776, 577 ], - [389, 206, -210, 439, 371 ], - [116, 190, 90, 190, 116 ], - [935, 67, 210, 842, 524 ], - [259, 590, -60, 639, 519 ], - [437, 217, -360, 437, 217 ], - [265, 739, -60, 771, 598 ], - [592, 616, -120, 828, 819 ], - [225, 527, -150, 457, 567 ], - [974, 319, 180, 974, 319 ], - [891, 126, -360, 891, 126 ], - [656, 417, -150, 776, 688 ], - [864, 504, 30, 1000, 867 ], - [489, 437, 90, 437, 489 ], - [279, 630, -90, 630, 279 ], - [701, 190, 150, 702, 514 ], - [723, 388, 120, 697, 819 ], - [140, 64, -30, 152, 125 ], - [486, 233, -270, 233, 486 ], - [803, 195, 30, 792, 570 ], - [536, 95, 150, 511, 348 ], - [567, 587, -180, 567, 587 ], - [873, 466, 300, 839, 989 ], - [408, 65, -30, 385, 260 ], - [31, 274, -150, 162, 251 ], - [440, 31, 30, 396, 246 ], - [114, 573, -330, 384, 552 ], - [772, 678, -270, 678, 772 ], - [203, 274, -60, 337, 312 ], - [336, 108, 150, 344, 260 ], - [894, 510, 240, 888, 1028 ], - [594, 167, 60, 441, 597 ], - [850, 54, -240, 471, 762 ], - [753, 359, -180, 753, 359 ], - [214, 382, 90, 382, 214 ], - [514, 712, 120, 873, 800 ], - [43, 29, -60, 45, 51 ], - [89, 608, -150, 380, 570 ], - [219, 760, 90, 760, 219 ], - [659, 244, 210, 691, 539 ], - [334, 146, -30, 361, 293 ], - [134, 591, 120, 578, 410 ], - [717, 460, 180, 717, 460 ], - [896, 257, -240, 670, 902 ], - [137, 417, 150, 326, 428 ], - [767, 34, 90, 34, 767 ], - [414, 66, 120, 263, 390 ], - [825, 132, -30, 779, 526 ], - [91, 296, -60, 300, 226 ], - [745, 22, 180, 745, 22 ], - [520, 272, 330, 585, 496 ], - [974, 372, 150, 1029, 807 ], - [626, 141, -150, 612, 434 ], - [350, 45, 120, 213, 324 ], - [552, 147, -240, 402, 550 ], - [239, 722, -210, 567, 743 ], - [873, 265, -150, 888, 664 ], - [521, 115, 0, 521, 115 ], - [979, 183, 270, 183, 979 ], - [401, 741, 300, 841, 717 ], - [147, 363, -180, 147, 363 ], - [86, 325, 180, 86, 325 ], - [813, 26, 300, 428, 717 ], - [105, 288, 360, 105, 288 ], - [763, 702, -240, 989, 1010 ], - [952, 112, -300, 572, 880 ], - [163, 767, -30, 524, 745 ], - [485, 389, 90, 389, 485 ], - [983, 355, 240, 797, 1028 ], - [852, 655, 240, 992, 1064 ], - [749, 765, -180, 749, 765 ], - [1007, 61, 150, 902, 555 ], - [737, 671, 180, 737, 671 ], - [654, 749, -300, 975, 940 ], - [631, 553, -360, 631, 553 ], - [803, 498, -240, 832, 943 ], - [914, 620, -240, 993, 1100 ], - [353, 215, 120, 362, 411 ], - [968, 185, -270, 185, 968 ], - [803, 55, 360, 803, 55 ], - [601, 616, 360, 601, 616 ], - [882, 604, -330, 1065, 963 ], - [571, 388, 330, 687, 621 ], - [295, 111, 300, 242, 310 ], - [402, 583, 90, 583, 402 ], - [420, 417, -180, 420, 417 ], - [588, 334, -330, 676, 582 ], - [753, 598, -120, 893, 950 ], - [412, 556, 60, 687, 634 ], - [545, 390, 120, 610, 665 ], - [526, 72, -30, 490, 325 ], - [502, 733, -180, 502, 733 ], - [560, 393, 210, 680, 619 ], - [487, 613, 300, 773, 727 ], - [388, 146, 120, 319, 408 ], - [1, 461, -210, 230, 398 ], - [278, 133, 90, 133, 278 ], - [357, 698, -60, 781, 658 ], - [723, 238, -270, 238, 723 ], - [310, 646, 120, 713, 590 ], - [994, 272, 180, 994, 272 ], - [451, 649, 150, 714, 786 ], - [713, 300, -210, 767, 615 ], - [467, 665, -360, 467, 665 ], - [369, 187, -240, 346, 411 ], - [24, 188, 210, 113, 174 ], - [234, 396, 360, 234, 396 ], - [889, 663, 270, 663, 889 ], - [293, 437, -240, 524, 470 ], - [438, 669, -360, 438, 669 ], - [78, 646, -90, 646, 78 ], - [836, 216, -210, 831, 603 ], - [524, 750, 90, 750, 524 ], - [733, 332, -30, 799, 654 ], - [736, 608, 180, 736, 608 ], - [933, 626, 360, 933, 626 ], - [721, 33, -30, 640, 389 ], - [686, 699, -120, 947, 943 ], - [556, 151, 300, 407, 556 ], - [743, 479, 210, 882, 785 ], - [767, 537, 90, 537, 767 ], - [130, 396, 300, 406, 310 ], - [357, 20, 270, 20, 357 ], - [984, 570, -150, 1136, 985 ], - [449, 353, -300, 530, 564 ], - [164, 285, 300, 327, 284 ], - [127, 57, 330, 137, 112 ], - [618, 571, 270, 571, 618 ], - [968, 220, -330, 948, 674 ], - [875, 9, 150, 761, 444 ], - [649, 584, -90, 584, 649 ], - [258, 681, 300, 717, 563 ], - [155, 181, 330, 224, 234 ], - [27, 151, 120, 144, 97 ], - [340, 487, -270, 487, 340 ], - [441, 610, 0, 441, 610 ], - [350, 705, 60, 785, 655 ], - [303, 400, -150, 461, 496 ], - [164, 357, 60, 390, 320 ], - [225, 245, 90, 245, 225 ], - [924, 731, -90, 731, 924 ], - [291, 156, -180, 291, 156 ], - [184, 272, 0, 184, 272 ], - [103, 292, 150, 235, 303 ], - [782, 547, -150, 950, 864 ], - [906, 109, -300, 546, 838 ], - [387, 371, -360, 387, 371 ], - [966, 598, 30, 1135, 1000 ], - [259, 721, -360, 259, 721 ], - [868, 121, -120, 538, 811 ], - [464, 46, -180, 464, 46 ], - [838, 264, 0, 838, 264 ], - [72, 402, 240, 383, 262 ], - [570, 479, -210, 732, 698 ], - [244, 297, 330, 359, 379 ], - [567, 208, -330, 595, 463 ], - [679, 497, 30, 836, 769 ], - [706, 454, -120, 745, 837 ], - [242, 648, -180, 242, 648 ], - [253, 531, -60, 585, 484 ], - [589, 111, 0, 589, 111 ], - [876, 739, 240, 1077, 1127 ], - [346, 25, -120, 194, 311 ], - [178, 452, 360, 178, 452 ], - [399, 634, -120, 747, 661 ], - [324, 292, 90, 292, 324 ], - [394, 33, -180, 394, 33 ], - [959, 562, 270, 562, 959 ], - [272, 743, 150, 606, 777 ], - [547, 164, -90, 164, 547 ], - [982, 606, 30, 1153, 1015 ], - [455, 494, 0, 455, 494 ], - [279, 753, 30, 617, 791 ], - [638, 118, -270, 118, 638 ], - [610, 417, 330, 736, 666 ], - [977, 660, -120, 1059, 1175 ], - [597, 187, -90, 187, 597 ], - [880, 138, -300, 559, 831 ], - [743, 342, -330, 814, 667 ], - [445, 752, -150, 760, 872 ], - [854, 720, -330, 1099, 1050 ], - [387, 292, 150, 481, 445 ], - [905, 501, 150, 1033, 885 ], - [431, 211, 270, 211, 431 ], - [558, 668, -90, 668, 558 ], - [507, 633, -180, 507, 633 ], - [843, 312, 0, 843, 312 ], - [199, 203, 120, 275, 272 ], - [303, 760, -300, 809, 642 ], - [374, 325, -300, 467, 485 ], - [662, 198, -360, 662, 198 ], - [734, 488, -60, 788, 879 ], - [440, 398, -330, 580, 564 ], - [126, 721, -120, 686, 469 ], - [993, 371, -210, 1044, 816 ], - [367, 750, -360, 367, 750 ], - [621, 615, -60, 842, 844 ], - [100, 764, 150, 468, 710 ], - [787, 223, 150, 792, 585 ], - [906, 503, -300, 888, 1035 ], - [1001, 231, -90, 231, 1001 ], - [8, 13, -360, 8, 13 ], - [428, 343, 0, 428, 343 ], - [491, 436, -30, 642, 623 ], - [835, 412, 330, 928, 774 ], - [20, 687, 300, 603, 360 ], - [49, 385, 150, 234, 356 ], - [493, 460, 150, 656, 643 ], - [183, 282, 360, 183, 282 ], - [886, 193, 120, 609, 862 ], - [999, 175, 330, 952, 651 ], - [350, 181, 360, 350, 181 ], - [352, 502, -60, 609, 555 ], - [883, 102, 360, 883, 102 ], - [327, 728, 0, 327, 728 ], - [264, 743, -60, 773, 599 ], - [177, 11, 300, 97, 158 ], - [909, 380, 0, 909, 380 ], - [610, 517, 270, 517, 610 ], - [608, 413, -270, 413, 608 ], - [251, 394, -120, 465, 413 ], - [202, 656, 60, 668, 502 ], - [170, 152, -180, 170, 152 ], - [594, 46, -90, 46, 594 ], - [575, 290, -120, 537, 641 ], - [82, 488, -150, 314, 463 ], - [504, 620, -150, 745, 788 ], - [415, 533, 210, 625, 668 ], - [939, 222, -30, 923, 661 ], - [813, 678, -360, 813, 678 ], - [944, 98, 0, 944, 98 ], - [284, 249, -90, 249, 284 ], - [888, 377, 60, 769, 957 ], - [113, 54, 90, 54, 113 ], - [498, 485, -360, 498, 485 ], - [828, 546, 90, 546, 828 ], - [99, 156, -30, 162, 184 ], - [409, 467, -270, 467, 409 ], - [200, 403, -60, 447, 374 ], - [679, 244, -150, 709, 549 ], - [685, 184, -60, 500, 685 ], - [191, 396, 210, 362, 437 ], - [572, 294, -180, 572, 294 ], - [130, 378, -120, 391, 300 ], - [773, 751, 330, 1044, 1036 ], - [778, 604, 120, 911, 974 ], - [409, 678, 270, 678, 409 ], - [867, 216, -30, 857, 620 ], - [1010, 366, 360, 1010, 366 ], - [425, 107, -150, 421, 304 ], - [743, 620, 30, 953, 908 ], - [167, 763, -330, 525, 744 ], - [946, 424, -30, 1030, 840 ], - [179, 521, 330, 415, 540 ], - [507, 332, 300, 540, 605 ], - [457, 147, 150, 468, 354 ], - [110, 453, 60, 446, 321 ], - [994, 335, 270, 335, 994 ], - [453, 324, -120, 506, 553 ], - [448, 642, -30, 707, 780 ], - [768, 431, -150, 880, 756 ], - [307, 556, -150, 542, 634 ], - [374, 497, 240, 616, 571 ], - [831, 631, 0, 831, 631 ], - [768, 243, 330, 786, 594 ], - [683, 585, -270, 585, 683 ], - [377, 667, 150, 659, 765 ], - [976, 645, -270, 645, 976 ], - [838, 216, 60, 605, 833 ], - [163, 552, -60, 558, 417 ], - [654, 359, 360, 654, 359 ], - [947, 589, 150, 1114, 982 ], - [210, 101, -120, 191, 231 ], - [37, 724, -240, 645, 393 ], - [557, 532, -30, 747, 739 ], - [495, 276, -180, 495, 276 ], - [628, 558, -300, 796, 822 ], - [341, 522, 330, 555, 622 ], - [500, 382, -210, 624, 579 ], - [66, 503, 330, 308, 469 ], - [488, 225, -60, 437, 534 ], - [460, 168, -240, 374, 481 ], - [148, 325, -150, 290, 354 ], - [499, 352, -180, 499, 352 ], - [667, 2, 330, 577, 335 ], - [133, 373, -150, 301, 388 ], - [379, 76, -360, 379, 76 ], - [490, 332, 150, 590, 531 ], - [435, 706, -210, 729, 827 ], - [668, 755, 270, 755, 668 ], - [612, 353, -270, 353, 612 ], - [10, 697, -90, 697, 10 ], - [193, 40, 210, 186, 130 ], - [509, 414, -180, 509, 414 ], - [766, 146, -180, 766, 146 ], - [707, 245, 180, 707, 245 ], - [1016, 529, 240, 965, 1143 ], - [20, 128, -180, 20, 128 ], - [743, 454, -240, 764, 869 ], - [950, 187, -240, 636, 914 ], - [804, 646, 90, 646, 804 ], - [957, 653, 30, 1154, 1044 ], - [309, 30, 60, 180, 282 ], - [94, 411, -270, 411, 94 ], - [347, 217, -150, 408, 360 ], - [603, 747, 90, 747, 603 ], - [331, 741, -150, 656, 806 ], - [160, 755, 0, 160, 755 ], - [431, 544, -330, 645, 686 ], - [618, 488, -150, 778, 731 ], - [788, 323, -270, 323, 788 ], - [404, 272, -360, 404, 272 ], - [948, 504, -330, 1072, 909 ], - [522, 574, 60, 757, 739 ], - [648, 66, 270, 66, 648 ], - [967, 518, 240, 931, 1095 ], - [589, 766, 210, 892, 956 ], - [915, 118, 210, 850, 558 ], - [387, 441, 0, 387, 441 ], - [464, 136, -270, 136, 464 ], - [790, 727, 30, 1047, 1024 ], - [952, 262, 300, 701, 955 ], - [960, 204, 30, 933, 656 ], - [1008, 596, -150, 1169, 1019 ], - [579, 313, -90, 313, 579 ], - [438, 270, -330, 514, 452 ], - [270, 711, -330, 588, 750 ], - [64, 629, -210, 369, 575 ], - [865, 151, 210, 824, 562 ], - [343, 499, 330, 546, 603 ], - [471, 323, 300, 514, 568 ], - [5, 268, -180, 5, 268 ], - [926, 220, 0, 926, 220 ], - [470, 208, -150, 510, 414 ], - [778, 641, 150, 993, 942 ], - [150, 202, -330, 230, 249 ], - [212, 404, 360, 212, 404 ], - [270, 451, 210, 458, 525 ], - [485, 332, 360, 485, 332 ], - [262, 588, 90, 588, 262 ], - [220, 173, -330, 276, 259 ], - [124, 176, -60, 212, 195 ], - [375, 102, 150, 375, 274 ], - [898, 454, 330, 1003, 842 ], - [166, 269, 210, 277, 315 ], - [876, 381, -330, 948, 767 ], - [921, 540, 60, 928, 1067 ], - [891, 742, -240, 1088, 1141 ], - [674, 337, 60, 628, 751 ], - [659, 533, -90, 533, 659 ], - [284, 698, 60, 745, 594 ], - [339, 22, 240, 187, 303 ], - [750, 303, 330, 800, 637 ], - [431, 208, 30, 477, 395 ], - [388, 332, 300, 480, 502 ], - [176, 221, -90, 221, 176 ], - [231, 144, -300, 240, 272 ], - [824, 43, -330, 734, 448 ], - [995, 548, 0, 995, 548 ], - [582, 274, -240, 527, 640 ], - [953, 486, -300, 897, 1068 ], - [529, 740, -300, 905, 828 ], - [340, 535, 0, 340, 535 ], - [285, 90, 210, 290, 219 ], - [835, 380, -210, 913, 745 ], - [719, 512, 0, 719, 512 ], - [86, 685, 150, 416, 634 ], - [172, 535, 180, 172, 535 ], - [222, 512, -30, 447, 554 ], - [721, 180, 240, 515, 713 ], - [906, 127, -30, 847, 563 ], - [997, 523, -60, 950, 1124 ], - [94, 10, -300, 55, 86 ], - [617, 223, -210, 645, 500 ], - [393, 81, 150, 380, 265 ], - [612, 620, -90, 620, 612 ], - [100, 684, -180, 100, 684 ], - [804, 44, 360, 804, 44 ], - [540, 211, 90, 211, 540 ], - [1007, 751, 270, 751, 1007 ], - [815, 663, -360, 815, 663 ], - [247, 642, 150, 534, 678 ], - [665, 712, 180, 665, 712 ], - [771, 407, -360, 771, 407 ], - [995, 701, -300, 1104, 1211 ], - [702, 392, 330, 802, 690 ], - [67, 467, 240, 436, 291 ], - [343, 301, 270, 301, 343 ], - [308, 705, -270, 705, 308 ], - [955, 692, -270, 692, 955 ], - [817, 535, 360, 817, 535 ], - [847, 720, 240, 1046, 1092 ], - [551, 450, 180, 551, 450 ], - [267, 259, -180, 267, 259 ], - [279, 237, -240, 344, 358 ], - [400, 764, 150, 728, 860 ], - [322, 45, -150, 300, 199 ], - [131, 302, 150, 264, 326 ], - [1023, 533, 90, 533, 1023 ], - [147, 480, 0, 147, 480 ], - [271, 324, -210, 396, 415 ], - [255, 192, -270, 192, 255 ], - [71, 604, 180, 71, 604 ], - [835, 36, -330, 741, 448 ], - [93, 245, -90, 245, 93 ], - [286, 545, -90, 545, 286 ], - [1000, 17, -60, 513, 874 ], - [288, 115, 240, 243, 306 ], - [1000, 114, 0, 1000, 114 ], - [604, 223, -270, 223, 604 ], - [106, 427, 60, 422, 304 ], - [322, 618, 240, 695, 586 ], - [472, 670, 60, 815, 743 ], - [197, 528, 120, 555, 433 ], - [267, 597, 360, 267, 597 ], - [653, 43, 120, 363, 585 ], - [9, 25, 150, 19, 25 ], - [448, 240, 270, 240, 448 ], - [265, 222, 360, 265, 222 ], - [792, 674, -180, 792, 674 ], - [934, 753, 240, 1118, 1184 ], - [484, 226, 90, 226, 484 ], - [289, 580, 0, 289, 580 ], - [900, 727, -240, 1079, 1141 ], - [533, 159, 360, 533, 159 ], - [493, 649, -360, 493, 649 ], - [155, 655, -330, 461, 644 ], - [863, 223, -90, 223, 863 ], - [700, 421, 120, 714, 815 ], - [688, 247, 30, 718, 557 ], - [973, 179, 0, 973, 179 ], - [803, 542, 240, 869, 965 ], - [431, 758, 60, 871, 752 ], - [952, 665, 0, 952, 665 ], - [128, 297, 150, 258, 319 ], - [100, 666, 60, 626, 419 ], - [129, 14, -60, 75, 118 ], - [190, 661, 150, 494, 665 ], - [570, 417, -180, 570, 417 ], - [221, 165, 60, 253, 273 ], - [769, 126, 240, 492, 727 ], - [274, 728, 0, 274, 728 ], - [80, 282, 0, 80, 282 ], - [658, 228, -90, 228, 658 ], - [157, 324, 180, 157, 324 ], - [892, 399, 90, 399, 892 ], - [442, 495, 90, 495, 442 ], - [866, 637, 0, 866, 637 ], - [561, 296, -360, 561, 296 ], - [818, 461, -180, 818, 461 ], - [379, 270, -60, 422, 463 ], - [178, 475, -120, 499, 391 ], - [699, 535, 180, 699, 535 ], - [182, 260, -360, 182, 260 ], - [551, 378, -30, 665, 602 ], - [291, 278, 360, 291, 278 ], - [919, 609, 90, 609, 919 ], - [541, 490, -60, 693, 713 ], - [19, 143, 240, 132, 87 ], - [53, 756, -60, 680, 423 ], - [305, 272, 210, 399, 387 ], - [725, 405, -90, 405, 725 ], - [66, 161, -300, 171, 137 ], - [807, 297, -60, 659, 846 ], - [827, 710, 300, 1027, 1071 ], - [255, 160, -180, 255, 160 ], - [214, 81, -330, 225, 176 ], - [833, 487, 150, 964, 837 ], - [253, 501, 300, 559, 469 ], - [66, 540, 270, 540, 66 ], - [494, 1, -210, 427, 246 ], - [257, 544, 180, 257, 544 ], - [652, 593, 360, 652, 593 ], - [737, 430, -120, 739, 852 ], - [143, 282, -180, 143, 282 ], - [53, 472, -30, 280, 435 ], - [333, 633, 60, 714, 604 ], - [401, 489, -210, 591, 622 ], - [98, 678, 270, 678, 98 ], - [1009, 727, 60, 1134, 1236 ], - [879, 329, 60, 724, 925 ], - [87, 522, -180, 87, 522 ], - [858, 243, -330, 864, 638 ], - [819, 27, 90, 27, 819 ], - [151, 134, 360, 151, 134 ], - [429, 174, 60, 365, 458 ], - [921, 423, -60, 825, 1008 ], - [496, 724, -330, 791, 874 ], - [719, 29, 330, 636, 384 ], - [585, 17, 270, 17, 585 ], - [147, 676, -150, 464, 657 ], - [733, 740, 360, 733, 740 ], - [1020, 615, -150, 1190, 1042 ], - [48, 461, -120, 422, 271 ], - [672, 574, 0, 672, 574 ], - [647, 128, 180, 647, 128 ], - [227, 50, -150, 220, 155 ], - [651, 421, -210, 773, 689 ], - [701, 192, -180, 701, 192 ], - [631, 631, -150, 861, 860 ], - [506, 741, -240, 894, 807 ], - [820, 522, -270, 522, 820 ], - [805, 519, 330, 956, 851 ], - [89, 554, 30, 354, 524 ], - [432, 290, -180, 432, 290 ], - [953, 7, -60, 481, 828 ], - [680, 177, 0, 680, 177 ], - [972, 665, -330, 1173, 1061 ], - [179, 422, -150, 365, 453 ], - [448, 127, -270, 127, 448 ], - [738, 507, -300, 807, 892 ], - [905, 354, 210, 959, 758 ], - [10, 189, -30, 102, 169 ], - [959, 255, -240, 700, 956 ], - [474, 578, 30, 699, 737 ], - [755, 524, 30, 915, 831 ], - [181, 266, 210, 288, 319 ], - [698, 227, 120, 545, 716 ], - [751, 361, -240, 688, 829 ], - [37, 696, -120, 620, 379 ], - [163, 482, -360, 163, 482 ], - [252, 392, -30, 413, 465 ], - [13, 399, 150, 210, 351 ], - [465, 350, -330, 577, 535 ], - [631, 706, 240, 925, 898 ], - [159, 503, 0, 159, 503 ], - [719, 639, 240, 911, 941 ], - [491, 394, -270, 394, 491 ], - [123, 189, 60, 225, 200 ], - [318, 217, 0, 318, 217 ], - [682, 338, -270, 338, 682 ], - [697, 527, 90, 527, 697 ], - [159, 536, -270, 536, 159 ], - [896, 116, 90, 116, 896 ], - [949, 589, 30, 1115, 984 ], - [748, 708, -240, 986, 1000 ], - [222, 479, -360, 222, 479 ], - [50, 78, 30, 82, 92 ], - [180, 170, 210, 239, 236 ], - [790, 409, -330, 888, 748 ], - [280, 152, 0, 280, 152 ], - [411, 675, -240, 790, 691 ], - [41, 26, 270, 26, 41 ], - [202, 698, -360, 202, 698 ], - [829, 641, 210, 1037, 968 ], - [348, 433, 150, 517, 547 ], - [538, 599, -120, 787, 764 ], - [555, 636, -60, 827, 798 ], - [73, 2, 120, 38, 63 ], - [867, 594, -240, 947, 1046 ], - [925, 36, -90, 36, 925 ], - [409, 344, -180, 409, 344 ], - [595, 374, -150, 701, 620 ], - [470, 525, -210, 669, 688 ], - [499, 378, -330, 621, 576 ], - [289, 638, 90, 638, 289 ], - [1021, 273, -90, 273, 1021 ], - [343, 689, -210, 641, 767 ], - [793, 743, -210, 1057, 1038 ], - [445, 625, 360, 445, 625 ], - [641, 550, -360, 641, 550 ], - [16, 89, 0, 16, 89 ], - [289, 534, 360, 289, 534 ], - [596, 119, 120, 400, 574 ], - [808, 493, -270, 493, 808 ], - [850, 709, 360, 850, 709 ], - [445, 707, -120, 833, 738 ], - [838, 195, -210, 822, 586 ], - [30, 22, -240, 33, 35 ], - [249, 355, -360, 249, 355 ], - [235, 68, 150, 237, 175 ], - [269, 79, 240, 201, 271 ], - [761, 295, 30, 806, 635 ], - [726, 742, 150, 999, 1004 ], - [367, 580, -120, 684, 606 ], - [512, 449, -180, 512, 449 ], - [483, 15, -240, 254, 424 ], - [817, 643, -60, 964, 1028 ], - [22, 665, -30, 351, 587 ], - [217, 84, 300, 180, 229 ], - [221, 260, 360, 221, 260 ], - [958, 461, -300, 877, 1059 ], - [788, 263, 0, 788, 263 ], - [307, 40, -30, 284, 188 ], - [1007, 315, -210, 1029, 775 ], - [316, 698, 210, 621, 761 ], - [569, 292, 240, 536, 637 ], - [739, 137, 120, 488, 706 ], - [146, 153, 0, 146, 153 ], - [605, 315, 90, 315, 605 ], - [512, 480, 330, 682, 672 ], - [509, 430, 30, 655, 626 ], - [610, 253, 300, 522, 654 ], - [80, 483, 330, 310, 458 ], - [539, 470, -120, 675, 700 ], - [747, 707, -180, 747, 707 ], - [528, 365, 120, 579, 638 ], - [329, 151, 240, 294, 359 ], - [987, 260, -360, 987, 260 ], - [483, 713, -60, 857, 774 ], - [90, 329, -330, 241, 329 ], - [43, 710, 90, 710, 43 ], - [610, 400, 330, 727, 651 ], - [504, 460, 60, 649, 666 ], - [450, 96, -240, 307, 436 ], - [815, 655, -300, 974, 1032 ], - [63, 283, 60, 276, 195 ], - [724, 530, 210, 891, 820 ], - [542, 501, -300, 704, 719 ], - [563, 95, -360, 563, 95 ], - [1004, 162, -30, 949, 642 ], - [36, 194, -90, 194, 36 ], - [665, 652, 300, 896, 901 ], - [607, 261, 0, 607, 261 ], - [169, 598, 90, 598, 169 ], - [357, 441, 0, 357, 441 ], - [462, 488, 270, 488, 462 ], - [29, 263, 30, 156, 242 ], - [820, 669, -240, 988, 1043 ], - [934, 323, -150, 969, 746 ], - [974, 308, 30, 997, 753 ], - [429, 334, 210, 537, 502 ], - [830, 65, 90, 65, 830 ], - [739, 520, 360, 739, 520 ], - [237, 646, 180, 237, 646 ], - [885, 145, -120, 567, 838 ], - [359, 491, 330, 555, 604 ], - [210, 512, -150, 436, 547 ], - [767, 359, -240, 694, 842 ], - [967, 291, 60, 735, 982 ], - [270, 253, 360, 270, 253 ], - [813, 574, -60, 902, 991 ], - [589, 428, 0, 589, 428 ], - [210, 214, -240, 289, 287 ], - [179, 391, -360, 179, 391 ], - [944, 287, -210, 960, 719 ], - [249, 556, 270, 556, 249 ], - [204, 713, 0, 204, 713 ], - [509, 520, 360, 509, 520 ], - [682, 477, -90, 477, 682 ], - [262, 679, 150, 565, 717 ], - [251, 520, -60, 574, 477 ], - [686, 194, 360, 686, 194 ], - [182, 351, -180, 182, 351 ], - [371, 485, 210, 563, 604 ], - [396, 425, -270, 425, 396 ], - [614, 611, 270, 611, 614 ], - [461, 763, 240, 890, 780 ], - [991, 377, 0, 991, 377 ], - [974, 120, -300, 590, 903 ], - [320, 316, 360, 320, 316 ], - [3, 504, 120, 437, 253 ], - [451, 251, 300, 441, 515 ], - [444, 387, -90, 387, 444 ], - [723, 664, -360, 723, 664 ], - [498, 193, 30, 527, 415 ], - [656, 653, -120, 893, 894 ], - [529, 230, -120, 462, 572 ], - [329, 205, 240, 341, 386 ], - [821, 168, 360, 821, 168 ], - [925, 407, -90, 407, 925 ], - [909, 409, -330, 991, 808 ], - [562, 747, -90, 747, 562 ], - [473, 312, 300, 505, 565 ], - [852, 85, 180, 852, 85 ], - [852, 459, 360, 852, 459 ], - [394, 182, 270, 182, 394 ], - [750, 579, -270, 579, 750 ], - [74, 57, -60, 84, 92 ], - [924, 672, 90, 672, 924 ], - [910, 597, -270, 597, 910 ], - [292, 511, 150, 507, 587 ], - [346, 164, 120, 314, 380 ], - [734, 518, -330, 894, 815 ], - [613, 389, -240, 643, 723 ], - [353, 260, 210, 434, 400 ], - [349, 555, -360, 349, 555 ], - [191, 349, 210, 339, 396 ], - [340, 404, 240, 519, 495 ], - [762, 329, 150, 823, 664 ], - [383, 243, 0, 383, 243 ], - [546, 462, -270, 462, 546 ], - [229, 721, -90, 721, 229 ], - [908, 503, -330, 1037, 889 ], - [977, 194, 30, 943, 656 ], - [136, 458, 300, 463, 346 ], - [930, 720, 90, 720, 930 ], - [943, 95, -330, 863, 553 ], - [702, 349, 60, 652, 781 ], - [536, 152, -360, 536, 152 ], - [243, 439, -120, 500, 429 ], - [745, 80, 330, 684, 441 ], - [903, 251, 270, 251, 903 ], - [256, 164, 30, 303, 269 ], - [299, 129, 210, 322, 260 ], - [859, 230, -90, 230, 859 ], - [742, 160, -150, 721, 509 ], - [341, 98, -60, 254, 344 ], - [404, 624, 300, 740, 661 ], - [1006, 258, -300, 725, 1000 ], - [1021, 440, 120, 891, 1103 ], - [336, 230, 180, 336, 230 ], - [266, 139, -300, 252, 299 ], - [132, 331, -150, 279, 352 ], - [669, 554, -30, 855, 814 ], - [439, 430, 210, 594, 590 ], - [820, 219, 360, 820, 219 ], - [112, 474, -300, 465, 333 ], - [553, 8, 300, 282, 482 ], + [ 40, 20, -360, 40, 20 ], + [ 40, 20, -359, 39, 20 ], + [ 40, 20, -358, 40, 21 ], + [ 40, 20, -357, 40, 22 ], + [ 40, 20, -356, 40, 22 ], + [ 40, 20, -355, 41, 23 ], + [ 40, 20, -354, 41, 24 ], + [ 40, 20, -353, 41, 24 ], + [ 40, 20, -352, 42, 25 ], + [ 40, 20, -351, 42, 26 ], + [ 40, 20, -350, 42, 26 ], + [ 40, 20, -349, 43, 27 ], + [ 40, 20, -348, 43, 28 ], + [ 40, 20, -347, 42, 27 ], + [ 40, 20, -346, 43, 28 ], + [ 40, 20, -345, 43, 29 ], + [ 40, 20, -344, 44, 30 ], + [ 40, 20, -343, 44, 30 ], + [ 40, 20, -342, 44, 31 ], + [ 40, 20, -341, 44, 32 ], + [ 40, 20, -340, 44, 32 ], + [ 40, 20, -339, 44, 33 ], + [ 40, 20, -338, 44, 33 ], + [ 40, 20, -337, 44, 33 ], + [ 40, 20, -336, 44, 34 ], + [ 40, 20, -335, 44, 34 ], + [ 40, 20, -334, 44, 35 ], + [ 40, 20, -333, 44, 36 ], + [ 40, 20, -332, 44, 36 ], + [ 40, 20, -331, 44, 36 ], + [ 40, 20, -330, 44, 36 ], + [ 40, 20, -329, 44, 37 ], + [ 40, 20, -328, 44, 38 ], + [ 40, 20, -327, 44, 38 ], + [ 40, 20, -326, 44, 39 ], + [ 40, 20, -325, 43, 38 ], + [ 40, 20, -324, 44, 39 ], + [ 40, 20, -323, 43, 40 ], + [ 40, 20, -322, 43, 40 ], + [ 40, 20, -321, 44, 41 ], + [ 40, 20, -320, 43, 40 ], + [ 40, 20, -319, 43, 41 ], + [ 40, 20, -318, 42, 41 ], + [ 40, 20, -317, 43, 42 ], + [ 40, 20, -316, 42, 41 ], + [ 40, 20, -315, 42, 42 ], + [ 40, 20, -314, 41, 42 ], + [ 40, 20, -313, 42, 43 ], + [ 40, 20, -312, 41, 42 ], + [ 40, 20, -311, 41, 43 ], + [ 40, 20, -310, 40, 43 ], + [ 40, 20, -309, 41, 44 ], + [ 40, 20, -308, 40, 43 ], + [ 40, 20, -307, 40, 43 ], + [ 40, 20, -306, 39, 44 ], + [ 40, 20, -305, 38, 43 ], + [ 40, 20, -304, 39, 44 ], + [ 40, 20, -303, 38, 44 ], + [ 40, 20, -302, 38, 44 ], + [ 40, 20, -301, 37, 44 ], + [ 40, 20, -300, 36, 44 ], + [ 40, 20, -299, 36, 44 ], + [ 40, 20, -298, 36, 44 ], + [ 40, 20, -297, 36, 44 ], + [ 40, 20, -296, 35, 44 ], + [ 40, 20, -295, 34, 44 ], + [ 40, 20, -294, 34, 44 ], + [ 40, 20, -293, 33, 44 ], + [ 40, 20, -292, 33, 44 ], + [ 40, 20, -291, 33, 44 ], + [ 40, 20, -290, 32, 44 ], + [ 40, 20, -289, 32, 44 ], + [ 40, 20, -288, 31, 44 ], + [ 40, 20, -287, 30, 44 ], + [ 40, 20, -286, 30, 44 ], + [ 40, 20, -285, 29, 43 ], + [ 40, 20, -284, 28, 43 ], + [ 40, 20, -283, 27, 42 ], + [ 40, 20, -282, 28, 43 ], + [ 40, 20, -281, 27, 43 ], + [ 40, 20, -280, 26, 42 ], + [ 40, 20, -279, 26, 42 ], + [ 40, 20, -278, 25, 42 ], + [ 40, 20, -277, 24, 41 ], + [ 40, 20, -276, 24, 41 ], + [ 40, 20, -275, 23, 41 ], + [ 40, 20, -274, 22, 40 ], + [ 40, 20, -273, 22, 40 ], + [ 40, 20, -272, 21, 40 ], + [ 40, 20, -271, 20, 39 ], + [ 40, 20, -270, 20, 40 ], + [ 40, 20, -269, 20, 39 ], + [ 40, 20, -268, 21, 39 ], + [ 40, 20, -267, 22, 39 ], + [ 40, 20, -266, 22, 39 ], + [ 40, 20, -265, 23, 40 ], + [ 40, 20, -264, 24, 40 ], + [ 40, 20, -263, 24, 40 ], + [ 40, 20, -262, 25, 41 ], + [ 40, 20, -261, 26, 41 ], + [ 40, 20, -260, 26, 41 ], + [ 40, 20, -259, 27, 42 ], + [ 40, 20, -258, 28, 42 ], + [ 40, 20, -257, 27, 41 ], + [ 40, 20, -256, 28, 42 ], + [ 40, 20, -255, 29, 42 ], + [ 40, 20, -254, 30, 43 ], + [ 40, 20, -253, 30, 43 ], + [ 40, 20, -252, 31, 43 ], + [ 40, 20, -251, 32, 43 ], + [ 40, 20, -250, 32, 43 ], + [ 40, 20, -249, 33, 43 ], + [ 40, 20, -248, 33, 43 ], + [ 40, 20, -247, 33, 43 ], + [ 40, 20, -246, 34, 43 ], + [ 40, 20, -245, 34, 43 ], + [ 40, 20, -244, 35, 43 ], + [ 40, 20, -243, 36, 43 ], + [ 40, 20, -242, 36, 43 ], + [ 40, 20, -241, 36, 43 ], + [ 40, 20, -240, 36, 43 ], + [ 40, 20, -239, 37, 43 ], + [ 40, 20, -238, 38, 43 ], + [ 40, 20, -237, 38, 43 ], + [ 40, 20, -236, 39, 43 ], + [ 40, 20, -235, 38, 42 ], + [ 40, 20, -234, 39, 43 ], + [ 40, 20, -233, 40, 42 ], + [ 40, 20, -232, 40, 42 ], + [ 40, 20, -231, 41, 43 ], + [ 40, 20, -230, 40, 42 ], + [ 40, 20, -229, 41, 42 ], + [ 40, 20, -228, 41, 41 ], + [ 40, 20, -227, 42, 42 ], + [ 40, 20, -226, 41, 41 ], + [ 40, 20, -225, 42, 41 ], + [ 40, 20, -224, 42, 40 ], + [ 40, 20, -223, 43, 41 ], + [ 40, 20, -222, 42, 40 ], + [ 40, 20, -221, 43, 40 ], + [ 40, 20, -220, 43, 39 ], + [ 40, 20, -219, 44, 40 ], + [ 40, 20, -218, 43, 39 ], + [ 40, 20, -217, 43, 39 ], + [ 40, 20, -216, 44, 38 ], + [ 40, 20, -215, 43, 37 ], + [ 40, 20, -214, 44, 38 ], + [ 40, 20, -213, 44, 37 ], + [ 40, 20, -212, 44, 37 ], + [ 40, 20, -211, 44, 36 ], + [ 40, 20, -210, 44, 35 ], + [ 40, 20, -209, 44, 35 ], + [ 40, 20, -208, 44, 35 ], + [ 40, 20, -207, 44, 35 ], + [ 40, 20, -206, 44, 34 ], + [ 40, 20, -205, 44, 33 ], + [ 40, 20, -204, 44, 33 ], + [ 40, 20, -203, 44, 32 ], + [ 40, 20, -202, 44, 32 ], + [ 40, 20, -201, 44, 32 ], + [ 40, 20, -200, 44, 31 ], + [ 40, 20, -199, 44, 31 ], + [ 40, 20, -198, 44, 30 ], + [ 40, 20, -197, 44, 29 ], + [ 40, 20, -196, 44, 29 ], + [ 40, 20, -195, 43, 28 ], + [ 40, 20, -194, 43, 27 ], + [ 40, 20, -193, 42, 26 ], + [ 40, 20, -192, 43, 27 ], + [ 40, 20, -191, 43, 26 ], + [ 40, 20, -190, 42, 25 ], + [ 40, 20, -189, 42, 25 ], + [ 40, 20, -188, 42, 24 ], + [ 40, 20, -187, 41, 23 ], + [ 40, 20, -186, 41, 23 ], + [ 40, 20, -185, 41, 22 ], + [ 40, 20, -184, 40, 21 ], + [ 40, 20, -183, 40, 21 ], + [ 40, 20, -182, 40, 20 ], + [ 40, 20, -181, 39, 19 ], + [ 40, 20, -180, 40, 20 ], + [ 40, 20, -179, 39, 19 ], + [ 40, 20, -178, 39, 20 ], + [ 40, 20, -177, 39, 21 ], + [ 40, 20, -176, 39, 21 ], + [ 40, 20, -175, 40, 22 ], + [ 40, 20, -174, 40, 23 ], + [ 40, 20, -173, 40, 23 ], + [ 40, 20, -172, 41, 24 ], + [ 40, 20, -171, 41, 25 ], + [ 40, 20, -170, 41, 25 ], + [ 40, 20, -169, 42, 26 ], + [ 40, 20, -168, 42, 27 ], + [ 40, 20, -167, 41, 26 ], + [ 40, 20, -166, 42, 27 ], + [ 40, 20, -165, 42, 28 ], + [ 40, 20, -164, 43, 29 ], + [ 40, 20, -163, 43, 29 ], + [ 40, 20, -162, 43, 30 ], + [ 40, 20, -161, 43, 31 ], + [ 40, 20, -160, 43, 31 ], + [ 40, 20, -159, 43, 32 ], + [ 40, 20, -158, 43, 32 ], + [ 40, 20, -157, 43, 32 ], + [ 40, 20, -156, 43, 33 ], + [ 40, 20, -155, 43, 33 ], + [ 40, 20, -154, 43, 34 ], + [ 40, 20, -153, 43, 35 ], + [ 40, 20, -152, 43, 35 ], + [ 40, 20, -151, 43, 35 ], + [ 40, 20, -150, 43, 36 ], + [ 40, 20, -149, 43, 36 ], + [ 40, 20, -148, 43, 37 ], + [ 40, 20, -147, 43, 37 ], + [ 40, 20, -146, 43, 38 ], + [ 40, 20, -145, 42, 37 ], + [ 40, 20, -144, 43, 38 ], + [ 40, 20, -143, 42, 39 ], + [ 40, 20, -142, 42, 39 ], + [ 40, 20, -141, 43, 40 ], + [ 40, 20, -140, 42, 39 ], + [ 40, 20, -139, 42, 40 ], + [ 40, 20, -138, 41, 40 ], + [ 40, 20, -137, 42, 41 ], + [ 40, 20, -136, 41, 40 ], + [ 40, 20, -135, 41, 41 ], + [ 40, 20, -134, 40, 41 ], + [ 40, 20, -133, 41, 42 ], + [ 40, 20, -132, 40, 41 ], + [ 40, 20, -131, 40, 42 ], + [ 40, 20, -130, 39, 42 ], + [ 40, 20, -129, 40, 43 ], + [ 40, 20, -128, 39, 42 ], + [ 40, 20, -127, 39, 42 ], + [ 40, 20, -126, 38, 43 ], + [ 40, 20, -125, 37, 42 ], + [ 40, 20, -124, 38, 43 ], + [ 40, 20, -123, 37, 43 ], + [ 40, 20, -122, 37, 43 ], + [ 40, 20, -121, 36, 43 ], + [ 40, 20, -120, 36, 43 ], + [ 40, 20, -119, 35, 43 ], + [ 40, 20, -118, 35, 43 ], + [ 40, 20, -117, 35, 43 ], + [ 40, 20, -116, 34, 43 ], + [ 40, 20, -115, 33, 43 ], + [ 40, 20, -114, 33, 43 ], + [ 40, 20, -113, 32, 43 ], + [ 40, 20, -112, 32, 43 ], + [ 40, 20, -111, 32, 43 ], + [ 40, 20, -110, 31, 43 ], + [ 40, 20, -109, 31, 43 ], + [ 40, 20, -108, 30, 43 ], + [ 40, 20, -107, 29, 43 ], + [ 40, 20, -106, 29, 43 ], + [ 40, 20, -105, 28, 42 ], + [ 40, 20, -104, 27, 42 ], + [ 40, 20, -103, 26, 41 ], + [ 40, 20, -102, 27, 42 ], + [ 40, 20, -101, 26, 42 ], + [ 40, 20, -100, 25, 41 ], + [ 40, 20, -99, 25, 41 ], + [ 40, 20, -98, 24, 41 ], + [ 40, 20, -97, 23, 40 ], + [ 40, 20, -96, 23, 40 ], + [ 40, 20, -95, 22, 40 ], + [ 40, 20, -94, 21, 39 ], + [ 40, 20, -93, 21, 39 ], + [ 40, 20, -92, 20, 39 ], + [ 40, 20, -91, 19, 39 ], + [ 40, 20, -90, 20, 40 ], + [ 40, 20, -89, 19, 39 ], + [ 40, 20, -88, 20, 40 ], + [ 40, 20, -87, 21, 40 ], + [ 40, 20, -86, 21, 40 ], + [ 40, 20, -85, 22, 41 ], + [ 40, 20, -84, 23, 41 ], + [ 40, 20, -83, 23, 41 ], + [ 40, 20, -82, 24, 42 ], + [ 40, 20, -81, 25, 42 ], + [ 40, 20, -80, 25, 42 ], + [ 40, 20, -79, 26, 43 ], + [ 40, 20, -78, 27, 43 ], + [ 40, 20, -77, 26, 42 ], + [ 40, 20, -76, 27, 43 ], + [ 40, 20, -75, 28, 43 ], + [ 40, 20, -74, 29, 44 ], + [ 40, 20, -73, 29, 44 ], + [ 40, 20, -72, 30, 44 ], + [ 40, 20, -71, 31, 44 ], + [ 40, 20, -70, 31, 44 ], + [ 40, 20, -69, 32, 44 ], + [ 40, 20, -68, 32, 44 ], + [ 40, 20, -67, 32, 44 ], + [ 40, 20, -66, 33, 44 ], + [ 40, 20, -65, 33, 44 ], + [ 40, 20, -64, 34, 44 ], + [ 40, 20, -63, 35, 44 ], + [ 40, 20, -62, 35, 44 ], + [ 40, 20, -61, 35, 44 ], + [ 40, 20, -60, 35, 44 ], + [ 40, 20, -59, 36, 44 ], + [ 40, 20, -58, 37, 44 ], + [ 40, 20, -57, 37, 44 ], + [ 40, 20, -56, 38, 44 ], + [ 40, 20, -55, 37, 43 ], + [ 40, 20, -54, 38, 44 ], + [ 40, 20, -53, 39, 43 ], + [ 40, 20, -52, 39, 43 ], + [ 40, 20, -51, 40, 44 ], + [ 40, 20, -50, 39, 43 ], + [ 40, 20, -49, 40, 43 ], + [ 40, 20, -48, 40, 42 ], + [ 40, 20, -47, 41, 43 ], + [ 40, 20, -46, 40, 42 ], + [ 40, 20, -45, 41, 42 ], + [ 40, 20, -44, 41, 41 ], + [ 40, 20, -43, 42, 42 ], + [ 40, 20, -42, 41, 41 ], + [ 40, 20, -41, 42, 41 ], + [ 40, 20, -40, 42, 40 ], + [ 40, 20, -39, 43, 41 ], + [ 40, 20, -38, 42, 40 ], + [ 40, 20, -37, 42, 40 ], + [ 40, 20, -36, 43, 39 ], + [ 40, 20, -35, 42, 38 ], + [ 40, 20, -34, 43, 39 ], + [ 40, 20, -33, 43, 38 ], + [ 40, 20, -32, 43, 38 ], + [ 40, 20, -31, 43, 37 ], + [ 40, 20, -30, 43, 37 ], + [ 40, 20, -29, 43, 36 ], + [ 40, 20, -28, 43, 36 ], + [ 40, 20, -27, 43, 36 ], + [ 40, 20, -26, 43, 35 ], + [ 40, 20, -25, 43, 34 ], + [ 40, 20, -24, 43, 34 ], + [ 40, 20, -23, 43, 33 ], + [ 40, 20, -22, 43, 33 ], + [ 40, 20, -21, 43, 33 ], + [ 40, 20, -20, 43, 32 ], + [ 40, 20, -19, 43, 32 ], + [ 40, 20, -18, 43, 31 ], + [ 40, 20, -17, 43, 30 ], + [ 40, 20, -16, 43, 30 ], + [ 40, 20, -15, 42, 29 ], + [ 40, 20, -14, 42, 28 ], + [ 40, 20, -13, 41, 27 ], + [ 40, 20, -12, 42, 28 ], + [ 40, 20, -11, 42, 27 ], + [ 40, 20, -10, 41, 26 ], + [ 40, 20, -9, 41, 26 ], + [ 40, 20, -8, 41, 25 ], + [ 40, 20, -7, 40, 24 ], + [ 40, 20, -6, 40, 24 ], + [ 40, 20, -5, 40, 23 ], + [ 40, 20, -4, 39, 22 ], + [ 40, 20, -3, 39, 22 ], + [ 40, 20, -2, 39, 21 ], + [ 40, 20, -1, 39, 20 ], + [ 40, 20, 0, 40, 20 ], + [ 40, 20, 1, 39, 20 ], + [ 40, 20, 2, 40, 21 ], + [ 40, 20, 3, 40, 22 ], + [ 40, 20, 4, 40, 22 ], + [ 40, 20, 5, 41, 23 ], + [ 40, 20, 6, 41, 24 ], + [ 40, 20, 7, 41, 24 ], + [ 40, 20, 8, 42, 25 ], + [ 40, 20, 9, 42, 26 ], + [ 40, 20, 10, 42, 26 ], + [ 40, 20, 11, 43, 27 ], + [ 40, 20, 12, 43, 28 ], + [ 40, 20, 13, 42, 27 ], + [ 40, 20, 14, 43, 28 ], + [ 40, 20, 15, 43, 29 ], + [ 40, 20, 16, 44, 30 ], + [ 40, 20, 17, 44, 30 ], + [ 40, 20, 18, 44, 31 ], + [ 40, 20, 19, 44, 32 ], + [ 40, 20, 20, 44, 32 ], + [ 40, 20, 21, 44, 33 ], + [ 40, 20, 22, 44, 33 ], + [ 40, 20, 23, 44, 33 ], + [ 40, 20, 24, 44, 34 ], + [ 40, 20, 25, 44, 34 ], + [ 40, 20, 26, 44, 35 ], + [ 40, 20, 27, 44, 36 ], + [ 40, 20, 28, 44, 36 ], + [ 40, 20, 29, 44, 36 ], + [ 40, 20, 30, 44, 36 ], + [ 40, 20, 31, 44, 37 ], + [ 40, 20, 32, 44, 38 ], + [ 40, 20, 33, 44, 38 ], + [ 40, 20, 34, 44, 39 ], + [ 40, 20, 35, 43, 38 ], + [ 40, 20, 36, 44, 39 ], + [ 40, 20, 37, 43, 40 ], + [ 40, 20, 38, 43, 40 ], + [ 40, 20, 39, 44, 41 ], + [ 40, 20, 40, 43, 40 ], + [ 40, 20, 41, 43, 41 ], + [ 40, 20, 42, 42, 41 ], + [ 40, 20, 43, 43, 42 ], + [ 40, 20, 44, 42, 41 ], + [ 40, 20, 45, 42, 42 ], + [ 40, 20, 46, 41, 42 ], + [ 40, 20, 47, 42, 43 ], + [ 40, 20, 48, 41, 42 ], + [ 40, 20, 49, 41, 43 ], + [ 40, 20, 50, 40, 43 ], + [ 40, 20, 51, 41, 44 ], + [ 40, 20, 52, 40, 43 ], + [ 40, 20, 53, 40, 43 ], + [ 40, 20, 54, 39, 44 ], + [ 40, 20, 55, 38, 43 ], + [ 40, 20, 56, 39, 44 ], + [ 40, 20, 57, 38, 44 ], + [ 40, 20, 58, 38, 44 ], + [ 40, 20, 59, 37, 44 ], + [ 40, 20, 60, 36, 44 ], + [ 40, 20, 61, 36, 44 ], + [ 40, 20, 62, 36, 44 ], + [ 40, 20, 63, 36, 44 ], + [ 40, 20, 64, 35, 44 ], + [ 40, 20, 65, 34, 44 ], + [ 40, 20, 66, 34, 44 ], + [ 40, 20, 67, 33, 44 ], + [ 40, 20, 68, 33, 44 ], + [ 40, 20, 69, 33, 44 ], + [ 40, 20, 70, 32, 44 ], + [ 40, 20, 71, 32, 44 ], + [ 40, 20, 72, 31, 44 ], + [ 40, 20, 73, 30, 44 ], + [ 40, 20, 74, 30, 44 ], + [ 40, 20, 75, 29, 43 ], + [ 40, 20, 76, 28, 43 ], + [ 40, 20, 77, 27, 42 ], + [ 40, 20, 78, 28, 43 ], + [ 40, 20, 79, 27, 43 ], + [ 40, 20, 80, 26, 42 ], + [ 40, 20, 81, 26, 42 ], + [ 40, 20, 82, 25, 42 ], + [ 40, 20, 83, 24, 41 ], + [ 40, 20, 84, 24, 41 ], + [ 40, 20, 85, 23, 41 ], + [ 40, 20, 86, 22, 40 ], + [ 40, 20, 87, 22, 40 ], + [ 40, 20, 88, 21, 40 ], + [ 40, 20, 89, 20, 39 ], + [ 40, 20, 90, 20, 40 ], + [ 40, 20, 91, 20, 39 ], + [ 40, 20, 92, 21, 39 ], + [ 40, 20, 93, 22, 39 ], + [ 40, 20, 94, 22, 39 ], + [ 40, 20, 95, 23, 40 ], + [ 40, 20, 96, 24, 40 ], + [ 40, 20, 97, 24, 40 ], + [ 40, 20, 98, 25, 41 ], + [ 40, 20, 99, 26, 41 ], + [ 40, 20, 100, 26, 41 ], + [ 40, 20, 101, 27, 42 ], + [ 40, 20, 102, 28, 42 ], + [ 40, 20, 103, 27, 41 ], + [ 40, 20, 104, 28, 42 ], + [ 40, 20, 105, 29, 42 ], + [ 40, 20, 106, 30, 43 ], + [ 40, 20, 107, 30, 43 ], + [ 40, 20, 108, 31, 43 ], + [ 40, 20, 109, 32, 43 ], + [ 40, 20, 110, 32, 43 ], + [ 40, 20, 111, 33, 43 ], + [ 40, 20, 112, 33, 43 ], + [ 40, 20, 113, 33, 43 ], + [ 40, 20, 114, 34, 43 ], + [ 40, 20, 115, 34, 43 ], + [ 40, 20, 116, 35, 43 ], + [ 40, 20, 117, 36, 43 ], + [ 40, 20, 118, 36, 43 ], + [ 40, 20, 119, 36, 43 ], + [ 40, 20, 120, 36, 43 ], + [ 40, 20, 121, 37, 43 ], + [ 40, 20, 122, 38, 43 ], + [ 40, 20, 123, 38, 43 ], + [ 40, 20, 124, 39, 43 ], + [ 40, 20, 125, 38, 42 ], + [ 40, 20, 126, 39, 43 ], + [ 40, 20, 127, 40, 42 ], + [ 40, 20, 128, 40, 42 ], + [ 40, 20, 129, 41, 43 ], + [ 40, 20, 130, 40, 42 ], + [ 40, 20, 131, 41, 42 ], + [ 40, 20, 132, 41, 41 ], + [ 40, 20, 133, 42, 42 ], + [ 40, 20, 134, 41, 41 ], + [ 40, 20, 135, 42, 41 ], + [ 40, 20, 136, 42, 40 ], + [ 40, 20, 137, 43, 41 ], + [ 40, 20, 138, 42, 40 ], + [ 40, 20, 139, 43, 40 ], + [ 40, 20, 140, 43, 39 ], + [ 40, 20, 141, 44, 40 ], + [ 40, 20, 142, 43, 39 ], + [ 40, 20, 143, 43, 39 ], + [ 40, 20, 144, 44, 38 ], + [ 40, 20, 145, 43, 37 ], + [ 40, 20, 146, 44, 38 ], + [ 40, 20, 147, 44, 37 ], + [ 40, 20, 148, 44, 37 ], + [ 40, 20, 149, 44, 36 ], + [ 40, 20, 150, 44, 35 ], + [ 40, 20, 151, 44, 35 ], + [ 40, 20, 152, 44, 35 ], + [ 40, 20, 153, 44, 35 ], + [ 40, 20, 154, 44, 34 ], + [ 40, 20, 155, 44, 33 ], + [ 40, 20, 156, 44, 33 ], + [ 40, 20, 157, 44, 32 ], + [ 40, 20, 158, 44, 32 ], + [ 40, 20, 159, 44, 32 ], + [ 40, 20, 160, 44, 31 ], + [ 40, 20, 161, 44, 31 ], + [ 40, 20, 162, 44, 30 ], + [ 40, 20, 163, 44, 29 ], + [ 40, 20, 164, 44, 29 ], + [ 40, 20, 165, 43, 28 ], + [ 40, 20, 166, 43, 27 ], + [ 40, 20, 167, 42, 26 ], + [ 40, 20, 168, 43, 27 ], + [ 40, 20, 169, 43, 26 ], + [ 40, 20, 170, 42, 25 ], + [ 40, 20, 171, 42, 25 ], + [ 40, 20, 172, 42, 24 ], + [ 40, 20, 173, 41, 23 ], + [ 40, 20, 174, 41, 23 ], + [ 40, 20, 175, 41, 22 ], + [ 40, 20, 176, 40, 21 ], + [ 40, 20, 177, 40, 21 ], + [ 40, 20, 178, 40, 20 ], + [ 40, 20, 179, 39, 19 ], + [ 40, 20, 180, 40, 20 ], + [ 40, 20, 181, 39, 19 ], + [ 40, 20, 182, 39, 20 ], + [ 40, 20, 183, 39, 21 ], + [ 40, 20, 184, 39, 21 ], + [ 40, 20, 185, 40, 22 ], + [ 40, 20, 186, 40, 23 ], + [ 40, 20, 187, 40, 23 ], + [ 40, 20, 188, 41, 24 ], + [ 40, 20, 189, 41, 25 ], + [ 40, 20, 190, 41, 25 ], + [ 40, 20, 191, 42, 26 ], + [ 40, 20, 192, 42, 27 ], + [ 40, 20, 193, 41, 26 ], + [ 40, 20, 194, 42, 27 ], + [ 40, 20, 195, 42, 28 ], + [ 40, 20, 196, 43, 29 ], + [ 40, 20, 197, 43, 29 ], + [ 40, 20, 198, 43, 30 ], + [ 40, 20, 199, 43, 31 ], + [ 40, 20, 200, 43, 31 ], + [ 40, 20, 201, 43, 32 ], + [ 40, 20, 202, 43, 32 ], + [ 40, 20, 203, 43, 32 ], + [ 40, 20, 204, 43, 33 ], + [ 40, 20, 205, 43, 33 ], + [ 40, 20, 206, 43, 34 ], + [ 40, 20, 207, 43, 35 ], + [ 40, 20, 208, 43, 35 ], + [ 40, 20, 209, 43, 35 ], + [ 40, 20, 210, 43, 36 ], + [ 40, 20, 211, 43, 36 ], + [ 40, 20, 212, 43, 37 ], + [ 40, 20, 213, 43, 37 ], + [ 40, 20, 214, 43, 38 ], + [ 40, 20, 215, 42, 37 ], + [ 40, 20, 216, 43, 38 ], + [ 40, 20, 217, 42, 39 ], + [ 40, 20, 218, 42, 39 ], + [ 40, 20, 219, 43, 40 ], + [ 40, 20, 220, 42, 39 ], + [ 40, 20, 221, 42, 40 ], + [ 40, 20, 222, 41, 40 ], + [ 40, 20, 223, 42, 41 ], + [ 40, 20, 224, 41, 40 ], + [ 40, 20, 225, 41, 41 ], + [ 40, 20, 226, 40, 41 ], + [ 40, 20, 227, 41, 42 ], + [ 40, 20, 228, 40, 41 ], + [ 40, 20, 229, 40, 42 ], + [ 40, 20, 230, 39, 42 ], + [ 40, 20, 231, 40, 43 ], + [ 40, 20, 232, 39, 42 ], + [ 40, 20, 233, 39, 42 ], + [ 40, 20, 234, 38, 43 ], + [ 40, 20, 235, 37, 42 ], + [ 40, 20, 236, 38, 43 ], + [ 40, 20, 237, 37, 43 ], + [ 40, 20, 238, 37, 43 ], + [ 40, 20, 239, 36, 43 ], + [ 40, 20, 240, 36, 43 ], + [ 40, 20, 241, 35, 43 ], + [ 40, 20, 242, 35, 43 ], + [ 40, 20, 243, 35, 43 ], + [ 40, 20, 244, 34, 43 ], + [ 40, 20, 245, 33, 43 ], + [ 40, 20, 246, 33, 43 ], + [ 40, 20, 247, 32, 43 ], + [ 40, 20, 248, 32, 43 ], + [ 40, 20, 249, 32, 43 ], + [ 40, 20, 250, 31, 43 ], + [ 40, 20, 251, 31, 43 ], + [ 40, 20, 252, 30, 43 ], + [ 40, 20, 253, 29, 43 ], + [ 40, 20, 254, 29, 43 ], + [ 40, 20, 255, 28, 42 ], + [ 40, 20, 256, 27, 42 ], + [ 40, 20, 257, 26, 41 ], + [ 40, 20, 258, 27, 42 ], + [ 40, 20, 259, 26, 42 ], + [ 40, 20, 260, 25, 41 ], + [ 40, 20, 261, 25, 41 ], + [ 40, 20, 262, 24, 41 ], + [ 40, 20, 263, 23, 40 ], + [ 40, 20, 264, 23, 40 ], + [ 40, 20, 265, 22, 40 ], + [ 40, 20, 266, 21, 39 ], + [ 40, 20, 267, 21, 39 ], + [ 40, 20, 268, 20, 39 ], + [ 40, 20, 269, 19, 39 ], + [ 40, 20, 270, 20, 40 ], + [ 40, 20, 271, 19, 39 ], + [ 40, 20, 272, 20, 40 ], + [ 40, 20, 273, 21, 40 ], + [ 40, 20, 274, 21, 40 ], + [ 40, 20, 275, 22, 41 ], + [ 40, 20, 276, 23, 41 ], + [ 40, 20, 277, 23, 41 ], + [ 40, 20, 278, 24, 42 ], + [ 40, 20, 279, 25, 42 ], + [ 40, 20, 280, 25, 42 ], + [ 40, 20, 281, 26, 43 ], + [ 40, 20, 282, 27, 43 ], + [ 40, 20, 283, 26, 42 ], + [ 40, 20, 284, 27, 43 ], + [ 40, 20, 285, 28, 43 ], + [ 40, 20, 286, 29, 44 ], + [ 40, 20, 287, 29, 44 ], + [ 40, 20, 288, 30, 44 ], + [ 40, 20, 289, 31, 44 ], + [ 40, 20, 290, 31, 44 ], + [ 40, 20, 291, 32, 44 ], + [ 40, 20, 292, 32, 44 ], + [ 40, 20, 293, 32, 44 ], + [ 40, 20, 294, 33, 44 ], + [ 40, 20, 295, 33, 44 ], + [ 40, 20, 296, 34, 44 ], + [ 40, 20, 297, 35, 44 ], + [ 40, 20, 298, 35, 44 ], + [ 40, 20, 299, 35, 44 ], + [ 40, 20, 300, 35, 44 ], + [ 40, 20, 301, 36, 44 ], + [ 40, 20, 302, 37, 44 ], + [ 40, 20, 303, 37, 44 ], + [ 40, 20, 304, 38, 44 ], + [ 40, 20, 305, 37, 43 ], + [ 40, 20, 306, 38, 44 ], + [ 40, 20, 307, 39, 43 ], + [ 40, 20, 308, 39, 43 ], + [ 40, 20, 309, 40, 44 ], + [ 40, 20, 310, 39, 43 ], + [ 40, 20, 311, 40, 43 ], + [ 40, 20, 312, 40, 42 ], + [ 40, 20, 313, 41, 43 ], + [ 40, 20, 314, 40, 42 ], + [ 40, 20, 315, 41, 42 ], + [ 40, 20, 316, 41, 41 ], + [ 40, 20, 317, 42, 42 ], + [ 40, 20, 318, 41, 41 ], + [ 40, 20, 319, 42, 41 ], + [ 40, 20, 320, 42, 40 ], + [ 40, 20, 321, 43, 41 ], + [ 40, 20, 322, 42, 40 ], + [ 40, 20, 323, 42, 40 ], + [ 40, 20, 324, 43, 39 ], + [ 40, 20, 325, 42, 38 ], + [ 40, 20, 326, 43, 39 ], + [ 40, 20, 327, 43, 38 ], + [ 40, 20, 328, 43, 38 ], + [ 40, 20, 329, 43, 37 ], + [ 40, 20, 330, 43, 37 ], + [ 40, 20, 331, 43, 36 ], + [ 40, 20, 332, 43, 36 ], + [ 40, 20, 333, 43, 36 ], + [ 40, 20, 334, 43, 35 ], + [ 40, 20, 335, 43, 34 ], + [ 40, 20, 336, 43, 34 ], + [ 40, 20, 337, 43, 33 ], + [ 40, 20, 338, 43, 33 ], + [ 40, 20, 339, 43, 33 ], + [ 40, 20, 340, 43, 32 ], + [ 40, 20, 341, 43, 32 ], + [ 40, 20, 342, 43, 31 ], + [ 40, 20, 343, 43, 30 ], + [ 40, 20, 344, 43, 30 ], + [ 40, 20, 345, 42, 29 ], + [ 40, 20, 346, 42, 28 ], + [ 40, 20, 347, 41, 27 ], + [ 40, 20, 348, 42, 28 ], + [ 40, 20, 349, 42, 27 ], + [ 40, 20, 350, 41, 26 ], + [ 40, 20, 351, 41, 26 ], + [ 40, 20, 352, 41, 25 ], + [ 40, 20, 353, 40, 24 ], + [ 40, 20, 354, 40, 24 ], + [ 40, 20, 355, 40, 23 ], + [ 40, 20, 356, 39, 22 ], + [ 40, 20, 357, 39, 22 ], + [ 40, 20, 358, 39, 21 ], + [ 40, 20, 359, 39, 20 ], + [ 40, 20, 360, 40, 20 ], + [ 40, 20, 110.1, 32, 43 ], + [ 40, 20, 344.9, 42, 29 ], + [ 40, 20, 142.85, 43, 39 ], + [ 40, 20, -106.52, 29, 43 ], + [ 40, 20, -295.78, 35, 45 ], + [ 40, 20, 287.58, 30, 44 ], + [ 40, 20, -3.62, 39, 22 ], + [ 40, 20, -33.96, 43, 39 ], + [ 40, 20, 136.46, 42, 40 ], + [ 40, 20, -293.72, 34, 44 ], + [ 40, 20, 10.71, 43, 27 ], + [ 40, 20, -80.02, 25, 42 ], + [ 40, 20, 258.53, 26, 42 ], + [ 40, 20, -110.41, 31, 43 ], + [ 40, 20, 340.87, 43, 32 ], + [ 40, 20, 347.4, 42, 28 ], + [ 40, 20, -277.97, 25, 42 ], + [ 40, 20, 126.74, 39, 43 ], + [ 40, 20, 70.99, 32, 44 ], + [ 40, 20, 57.54, 38, 44 ], + [ 40, 20, 251.66, 30, 42 ], + [ 40, 20, -91.15, 19, 39 ], + [ 40, 20, 164.92, 43, 28 ], + [ 40, 20, -27.14, 43, 36 ], + [ 40, 20, 230.28, 39, 42 ], + [ 40, 20, 271.37, 19, 39 ], + [ 40, 20, -207.19, 44, 35 ], + [ 40, 20, -58.19, 37, 44 ], + [ 40, 20, -339.34, 44, 33 ], + [ 40, 20, 352.45, 41, 25 ], + [ 40, 20, -245.62, 34, 43 ], + [ 40, 20, 130.77, 41, 42 ], + [ 40, 20, 337.34, 43, 33 ], + [ 40, 20, 257.24, 27, 42 ], + [ 40, 20, -335.75, 44, 34 ], + [ 40, 20, -318.44, 42, 41 ], + [ 40, 20, 184.82, 40, 22 ], + [ 40, 20, 20.64, 44, 33 ], + [ 40, 20, 7.6, 42, 25 ], + [ 40, 20, -38.72, 43, 41 ], + [ 40, 20, 86.92, 22, 40 ], + [ 40, 20, -341.69, 43, 31 ], + [ 40, 20, 241.26, 36, 44 ], + [ 40, 20, -14.56, 42, 29 ], + [ 40, 20, -92.1, 20, 39 ], + [ 40, 20, 222.12, 41, 40 ], + [ 40, 20, -27.16, 43, 36 ], + [ 40, 20, -10.06, 41, 26 ], + [ 40, 20, -11.15, 42, 27 ], + [ 40, 20, -316.18, 42, 41 ], + [ 40, 20, -312.53, 42, 43 ], + [ 40, 20, -119.49, 35, 43 ], + [ 40, 20, -47.32, 41, 43 ], + [ 40, 20, 212.4, 43, 37 ], + [ 40, 20, 213.37, 43, 38 ], + [ 40, 20, -177.05, 39, 21 ], + [ 40, 20, 123.76, 39, 43 ], + [ 40, 20, -353.82, 41, 24 ], + [ 40, 20, 124.76, 38, 42 ], + [ 40, 20, 144.43, 44, 38 ], + [ 40, 20, 358.63, 39, 20 ], + [ 40, 20, 239.15, 36, 43 ], + [ 40, 20, -84.81, 22, 41 ], + [ 40, 20, 335.97, 43, 34 ], + [ 40, 20, 136.38, 42, 40 ], + [ 40, 20, -60.55, 35, 44 ], + [ 40, 20, -342.47, 44, 31 ], + [ 40, 20, -38.8, 43, 41 ], + [ 40, 20, 320.09, 42, 40 ], + [ 40, 20, 25.13, 44, 34 ], + [ 40, 20, 282.48, 27, 43 ], + [ 40, 20, 47, 42, 43 ], + [ 40, 20, 43.45, 43, 42 ], + [ 40, 20, 163.73, 44, 29 ], + [ 40, 20, -327.56, 44, 38 ], + [ 40, 20, 311.35, 40, 43 ], + [ 40, 20, 25.85, 44, 35 ], + [ 40, 20, 5.28, 41, 23 ], + [ 40, 20, -58.72, 36, 44 ], + [ 40, 20, -345.3, 43, 29 ], + [ 40, 20, 49.11, 41, 43 ], + [ 40, 20, -11.25, 42, 27 ], + [ 40, 20, -104.78, 28, 42 ], + [ 40, 20, -358.22, 40, 21 ], + [ 40, 20, -158.86, 43, 32 ], + [ 40, 20, -251.42, 31, 42 ], + [ 40, 20, -175.27, 40, 22 ], + [ 40, 20, 324.91, 42, 38 ], + [ 40, 20, -245.24, 34, 43 ], + [ 40, 20, 309.5, 39, 43 ], + [ 40, 20, 109.34, 32, 43 ], + [ 40, 20, -246.61, 33, 43 ], + [ 40, 20, 188.64, 41, 25 ], + [ 40, 20, -335.47, 44, 34 ], + [ 40, 20, -270.64, 20, 39 ], + [ 40, 20, -34.98, 42, 38 ], + [ 40, 20, -36.02, 43, 39 ], + [ 40, 20, -253.11, 30, 43 ], + [ 40, 20, 286.22, 29, 44 ], + [ 40, 20, -75.94, 27, 43 ], + [ 40, 20, 132.03, 41, 41 ], + [ 40, 20, 208.69, 44, 36 ], + [ 40, 20, 331.07, 44, 37 ], + [ 40, 20, -184.53, 41, 22 ], + [ 40, 20, 12.42, 43, 28 ], + [ 40, 20, -356.5, 40, 22 ], + [ 40, 20, -233.19, 39, 43 ], + [ 40, 20, -321.73, 43, 40 ], + [ 40, 20, 8.78, 42, 26 ], + [ 40, 20, 68.1, 33, 44 ], + [ 40, 20, -307.02, 40, 43 ], + [ 40, 20, -302.11, 38, 44 ], + [ 40, 20, -303.15, 38, 44 ], + [ 40, 20, -51.8, 39, 43 ], + [ 40, 20, -300.33, 37, 44 ], + [ 40, 20, -102, 27, 42 ], + [ 40, 20, 56.78, 38, 44 ], + [ 40, 20, -115.59, 34, 44 ], + [ 40, 20, -137.09, 42, 41 ], + [ 40, 20, 171.55, 42, 24 ], + [ 40, 20, -166.1, 42, 27 ], + [ 40, 20, 332.25, 43, 36 ], + [ 40, 20, 284.95, 28, 43 ], + [ 40, 20, -337.46, 44, 33 ], + [ 40, 20, 356.79, 39, 22 ], + [ 40, 20, -345.7, 43, 28 ], + [ 40, 20, -12.44, 42, 28 ], + [ 40, 20, -39.24, 42, 40 ], + [ 40, 20, -238.81, 37, 43 ], + [ 40, 20, -86.22, 21, 40 ], + [ 40, 20, 244.83, 34, 44 ], + [ 40, 20, 253.22, 29, 43 ], + [ 40, 20, -237.53, 38, 43 ], + [ 40, 20, 215.89, 43, 38 ], + [ 40, 20, -291.31, 33, 44 ], + [ 40, 20, 134.89, 42, 41 ], + [ 40, 20, 219.39, 42, 39 ], + [ 40, 20, -164.5, 42, 28 ], + [ 40, 20, 173.17, 41, 23 ], + [ 40, 20, -131.83, 40, 41 ], + [ 40, 20, 263.61, 23, 40 ], + [ 40, 20, 226.15, 40, 41 ], + [ 40, 20, -73.94, 29, 44 ], + [ 40, 20, 320.47, 42, 40 ], + [ 40, 20, -185.65, 41, 22 ], + [ 40, 20, -14.26, 42, 28 ], + [ 40, 20, -141.54, 42, 39 ], + [ 40, 20, 231.14, 40, 43 ], + [ 40, 20, 230.15, 39, 42 ], + [ 40, 20, 81.38, 25, 42 ], + [ 40, 20, 42.68, 43, 42 ], + [ 40, 20, -295.95, 35, 44 ], + [ 40, 20, 53.63, 39, 44 ], + [ 40, 20, -32.37, 43, 38 ], + [ 40, 20, -273.41, 22, 40 ], + [ 40, 20, 50.41, 40, 43 ], + [ 40, 20, -18.07, 43, 31 ], + [ 40, 20, 74.16, 29, 43 ], + [ 40, 20, -348.83, 43, 27 ], + [ 40, 20, 103.13, 28, 42 ], + [ 40, 20, 347.94, 42, 28 ], + [ 40, 20, 256.01, 27, 42 ], + [ 40, 20, -3.66, 39, 22 ], + [ 40, 20, -249.59, 32, 43 ], + [ 40, 20, 111.89, 33, 43 ], + [ 40, 20, 65.03, 34, 44 ], + [ 40, 20, 245.3, 33, 43 ], + [ 40, 20, -28.72, 44, 37 ], + [ 40, 20, 260.54, 25, 41 ], + [ 40, 20, 58.47, 37, 44 ], + [ 40, 20, 199.45, 43, 31 ], + [ 40, 20, 164.15, 43, 28 ], + [ 40, 20, -75.38, 28, 43 ], + [ 40, 20, -234.49, 39, 43 ], + [ 40, 20, 124.61, 38, 42 ], + [ 40, 20, 98.97, 26, 41 ], + [ 40, 20, 111.25, 33, 43 ], + [ 40, 20, 343.08, 43, 30 ], + [ 40, 20, -29.9, 43, 36 ], + [ 40, 20, -18.6, 42, 31 ], + [ 40, 20, 64.45, 35, 45 ], + [ 40, 20, -347.22, 43, 28 ], + [ 40, 20, 45.46, 42, 42 ], + [ 40, 20, -241.93, 36, 43 ], + [ 40, 20, -19.59, 43, 32 ], + [ 40, 20, 132.05, 41, 41 ], + [ 40, 20, 168.49, 43, 26 ], + [ 40, 20, 322.34, 42, 40 ], + [ 40, 20, -153.79, 43, 34 ], + [ 40, 20, 179.66, 39, 19 ], + [ 40, 20, 65.47, 34, 44 ], + [ 40, 20, -165.85, 42, 27 ], + [ 40, 20, 75.66, 28, 43 ], + [ 40, 20, -298.19, 36, 44 ], + [ 40, 20, -55.44, 37, 43 ], + [ 40, 20, -172.45, 41, 24 ], + [ 40, 20, 126.84, 39, 43 ], + [ 40, 20, -170.14, 41, 25 ], + [ 40, 20, 158.84, 44, 32 ], + [ 40, 20, 27.38, 44, 36 ], + [ 40, 20, 248.33, 32, 43 ], + [ 40, 20, -1.71, 39, 21 ], + [ 40, 20, -168.47, 42, 26 ], + [ 40, 20, -187.06, 41, 23 ], + [ 40, 20, 123.8, 39, 43 ], + [ 40, 20, 316.15, 41, 41 ], + [ 40, 20, 271.92, 20, 40 ], + [ 40, 20, -124.95, 37, 42 ], + [ 40, 20, 299.22, 35, 44 ], + [ 40, 20, -117.99, 35, 43 ], + [ 40, 20, 216.46, 43, 38 ], + [ 40, 20, 3.67, 40, 22 ], + [ 40, 20, -105.2, 28, 42 ], + [ 40, 20, -98.09, 24, 41 ], + [ 40, 20, 121.74, 38, 44 ], + [ 40, 20, 235.21, 37, 42 ], + [ 40, 20, -326.05, 44, 39 ], + [ 40, 20, -69.77, 31, 44 ], + [ 40, 20, 197.55, 43, 30 ], + [ 40, 20, -119.83, 35, 43 ], + [ 40, 20, -250.11, 32, 43 ], + [ 40, 20, -96.99, 23, 40 ], + [ 40, 20, 74.32, 29, 43 ], + [ 40, 20, 185.56, 40, 22 ], + [ 40, 20, -35.18, 43, 39 ], + [ 40, 20, -341.13, 43, 31 ], + [ 40, 20, -346.9, 43, 28 ], + [ 40, 20, -268.34, 21, 39 ], + [ 40, 20, -151.26, 44, 36 ], + [ 40, 20, 171.95, 42, 24 ], + [ 40, 20, 119.05, 36, 43 ], + [ 40, 20, -262.94, 24, 40 ], + [ 40, 20, -189.77, 42, 25 ], + [ 40, 20, 310.58, 40, 43 ], + [ 40, 20, -89.99, 19, 39 ], + [ 40, 20, 294.04, 33, 44 ], + [ 40, 20, 266.72, 21, 39 ], + [ 40, 20, -178.07, 39, 20 ], + [ 40, 20, -190.92, 43, 26 ], + [ 40, 20, 205.94, 43, 34 ], + [ 40, 20, 63.94, 35, 44 ], + [ 40, 20, -334.47, 45, 35 ], + [ 40, 20, -150.4, 43, 35 ], + [ 40, 20, 318.74, 42, 41 ], + [ 40, 20, -72.56, 29, 44 ], + [ 40, 20, 331.35, 44, 37 ], + [ 40, 20, 193.95, 42, 27 ], + [ 40, 20, -38.6, 42, 40 ], + [ 40, 20, -98.43, 24, 41 ], + [ 40, 20, 31.49, 44, 37 ], + [ 40, 20, 201.57, 43, 32 ], + [ 40, 20, 11.46, 43, 27 ], + [ 40, 20, 294.51, 33, 44 ], + [ 40, 20, -84.11, 23, 41 ], + [ 40, 20, -162.99, 43, 29 ], + [ 40, 20, -100.68, 26, 42 ], + [ 40, 20, -65.23, 33, 44 ], + [ 40, 20, -149.88, 43, 36 ], + [ 40, 20, -9.01, 41, 26 ], + [ 40, 20, 143.51, 44, 38 ], + [ 40, 20, -337.94, 45, 34 ], + [ 40, 20, -249.97, 32, 43 ], + [ 40, 20, 240.58, 35, 43 ], + [ 40, 20, -167.7, 42, 27 ], + [ 40, 20, -299.39, 36, 44 ], + [ 40, 20, -209.42, 44, 35 ], + [ 40, 20, -233.67, 39, 43 ], + [ 40, 20, 327.34, 43, 38 ], + [ 40, 20, -27.49, 43, 36 ], + [ 40, 20, -64.59, 34, 45 ], + [ 40, 20, 173.27, 41, 23 ], + [ 40, 20, -323.55, 44, 39 ], + [ 40, 20, -39.05, 43, 41 ], + [ 40, 20, -337.14, 44, 33 ], + [ 40, 20, 355.2, 40, 23 ], + [ 40, 20, 248.4, 32, 43 ], + [ 40, 20, 354.22, 40, 24 ], + [ 40, 20, 189.14, 41, 25 ], + [ 40, 20, -150.21, 43, 35 ], + [ 40, 20, -104.22, 27, 42 ], + [ 40, 20, -139.37, 42, 40 ], + [ 40, 20, -308.64, 40, 43 ], + [ 40, 20, 267.25, 20, 39 ], + [ 40, 20, -204.87, 44, 33 ], + [ 40, 20, -32.74, 43, 38 ], + [ 40, 20, -255.74, 28, 42 ], + [ 40, 20, 54.45, 39, 44 ], + [ 40, 20, 262.03, 24, 41 ], + [ 40, 20, -45.61, 40, 42 ], + [ 40, 20, -314.56, 42, 42 ], + [ 40, 20, 45.53, 42, 42 ], + [ 40, 20, -23.54, 43, 33 ], + [ 40, 20, -204.53, 44, 33 ], + [ 40, 20, -73.9, 29, 44 ], + [ 40, 20, 168.76, 43, 26 ], + [ 40, 20, -143.92, 43, 38 ], + [ 40, 20, 76.69, 28, 43 ], + [ 40, 20, 295.09, 33, 44 ], + [ 40, 20, -176.59, 39, 21 ], + [ 40, 20, -310.8, 41, 43 ], + [ 40, 20, -129.5, 39, 42 ], + [ 40, 20, 356.69, 39, 22 ], + [ 40, 20, -274.35, 23, 41 ], + [ 40, 20, 191.45, 42, 26 ], + [ 40, 20, -340.45, 44, 32 ], + [ 40, 20, -279.15, 26, 42 ], + [ 40, 20, 79.84, 27, 43 ], + [ 40, 20, -346.24, 43, 28 ], + [ 40, 20, 269.99, 19, 39 ], + [ 40, 20, 289.64, 31, 44 ], + [ 40, 20, -90.45, 19, 39 ], + [ 40, 20, -229.38, 41, 42 ], + [ 40, 20, 341.01, 43, 32 ], + [ 40, 20, -183.2, 40, 21 ], + [ 40, 20, -74.25, 28, 43 ], + [ 40, 20, -51.74, 39, 43 ], + [ 40, 20, -78.93, 26, 43 ], + [ 40, 20, 340.21, 43, 32 ], + [ 40, 20, -149.72, 43, 36 ], + [ 40, 20, 235.46, 37, 42 ], + [ 40, 20, -334.36, 45, 35 ], + [ 40, 20, 255.82, 27, 42 ], + [ 40, 20, -148.08, 43, 37 ], + [ 40, 20, -178.88, 39, 19 ], + [ 40, 20, -178.08, 39, 20 ], + [ 40, 20, -339.33, 44, 33 ], + [ 40, 20, 37.2, 43, 40 ], + [ 40, 20, 258.61, 26, 42 ], + [ 40, 20, 315.77, 41, 41 ], + [ 40, 20, 220.62, 42, 40 ], + [ 40, 20, 307.81, 39, 43 ], + [ 40, 20, -173.74, 40, 23 ], + [ 40, 20, 217.3, 42, 39 ], + [ 40, 20, -326.54, 44, 39 ], + [ 40, 20, -342.29, 44, 31 ], + [ 40, 20, 236.86, 37, 43 ], + [ 40, 20, -245.68, 34, 43 ], + [ 40, 20, 97.55, 25, 41 ], + [ 40, 20, 250.62, 31, 43 ], + [ 40, 20, -335.69, 44, 34 ], + [ 40, 20, 27.19, 44, 36 ], + [ 40, 20, -199.84, 44, 31 ], + [ 40, 20, -205.07, 44, 33 ], + [ 40, 20, 8.19, 42, 25 ], + [ 40, 20, -23.03, 43, 33 ], + [ 40, 20, 80.68, 26, 42 ], + [ 40, 20, 316.45, 41, 41 ], + [ 40, 20, 258.04, 27, 42 ], + [ 40, 20, 60.89, 36, 44 ], + [ 40, 20, -193.27, 43, 27 ], + [ 40, 20, 133.49, 42, 42 ], + [ 40, 20, 86.53, 22, 40 ], + [ 40, 20, -297.46, 36, 44 ], + [ 40, 20, 345.41, 42, 29 ], + [ 40, 20, 267.65, 20, 39 ], + [ 40, 20, -115.54, 34, 44 ], + [ 40, 20, -353.92, 41, 24 ], + [ 40, 20, -55.15, 37, 43 ], + [ 40, 20, -216.94, 43, 39 ], + [ 40, 20, 321.85, 42, 40 ], + [ 40, 20, -194.53, 43, 28 ], + [ 40, 20, -269.13, 20, 39 ], + [ 40, 20, -211.89, 44, 37 ], + [ 40, 20, -337.23, 44, 33 ], + [ 40, 20, -235.66, 39, 43 ], + [ 40, 20, -194.18, 43, 27 ], + [ 40, 20, 259.63, 26, 42 ], + [ 40, 20, -121.34, 36, 43 ], + [ 40, 20, 263.37, 23, 40 ], + [ 40, 20, 150.24, 44, 35 ], + [ 40, 20, -97.02, 23, 40 ], + [ 40, 20, -69.44, 32, 44 ], + [ 40, 20, 310.41, 39, 43 ], + [ 40, 20, 57.91, 38, 44 ], + [ 40, 20, 298.75, 36, 45 ], + [ 40, 20, -72.63, 29, 44 ], + [ 40, 20, -221.41, 42, 40 ], + [ 40, 20, 255.19, 28, 42 ], + [ 40, 20, -174.6, 40, 22 ], + [ 40, 20, 199.48, 43, 31 ], + [ 40, 20, -298.08, 36, 44 ], + [ 40, 20, 318.9, 42, 41 ], + [ 40, 20, -73.99, 29, 44 ], + [ 40, 20, -235.54, 38, 42 ], + [ 40, 20, 304.31, 38, 44 ], + [ 40, 20, -166.34, 42, 27 ], + [ 40, 20, 8.92, 42, 26 ], + [ 40, 20, 310.39, 39, 43 ], + [ 40, 20, 138.52, 42, 40 ], + [ 40, 20, 151.99, 44, 35 ], + [ 40, 20, 272.24, 20, 40 ], + [ 40, 20, 303.99, 38, 44 ], + [ 40, 20, 242.87, 35, 43 ], + [ 40, 20, -299.66, 36, 44 ], + [ 40, 20, 326.77, 43, 38 ], + [ 40, 20, -352.79, 42, 25 ], + [ 40, 20, -133.84, 40, 41 ], + [ 40, 20, 226.39, 40, 41 ], + [ 40, 20, -114.12, 33, 43 ], + [ 40, 20, -230.47, 40, 42 ], + [ 40, 20, 16.63, 44, 30 ], + [ 40, 20, 148.86, 44, 36 ], + [ 40, 20, 60.09, 36, 44 ], + [ 40, 20, -32.96, 43, 38 ], + [ 40, 20, -153.24, 43, 35 ], + [ 40, 20, -1.16, 39, 20 ], + [ 40, 20, 254.41, 28, 42 ], + [ 40, 20, -14.65, 42, 29 ], + [ 40, 20, -105.97, 29, 43 ], + [ 40, 20, -280.19, 27, 43 ], + [ 40, 20, -175.17, 40, 22 ], + [ 40, 20, -44.05, 41, 41 ], + [ 40, 20, -321.29, 44, 41 ], + [ 40, 20, 110.85, 33, 43 ], + [ 40, 20, 80.41, 26, 42 ], + [ 40, 20, 343.02, 43, 30 ], + [ 40, 20, 304.51, 37, 43 ], + [ 40, 20, -270.67, 20, 39 ], + [ 40, 20, 293.41, 32, 44 ], + [ 40, 20, 83.02, 24, 41 ], + [ 40, 20, 241.33, 36, 44 ], + [ 40, 20, 205.64, 44, 34 ], + [ 40, 20, 27.01, 44, 36 ], + [ 40, 20, 124.19, 39, 43 ], + [ 40, 20, 265.98, 21, 39 ], + [ 40, 20, -6.23, 40, 24 ], + [ 40, 20, 131.41, 41, 41 ], + [ 40, 20, -227.86, 41, 41 ], + [ 40, 20, -139.85, 42, 39 ], + [ 40, 20, -342.72, 44, 30 ], + [ 40, 20, -98.33, 24, 41 ], + [ 40, 20, 236.79, 37, 43 ], + [ 40, 20, 166.14, 43, 27 ], + [ 40, 20, 321.77, 42, 40 ], + [ 40, 20, -156.18, 43, 33 ], + [ 40, 20, -347.1, 42, 27 ], + [ 40, 20, -39.4, 42, 40 ], + [ 40, 20, -261.77, 25, 41 ], + [ 40, 20, -1.74, 39, 21 ], + [ 40, 20, 214.63, 42, 37 ], + [ 40, 20, -181.95, 40, 20 ], + [ 40, 20, 183.09, 39, 21 ], + [ 40, 20, -189.43, 42, 25 ], + [ 40, 20, -143.24, 43, 38 ], + [ 40, 20, -66.07, 33, 44 ], + [ 40, 20, 250.99, 31, 43 ], + [ 40, 20, -160.22, 43, 31 ], + [ 40, 20, -121.56, 36, 43 ], + [ 40, 20, 340.33, 43, 32 ], + [ 40, 20, -226.82, 42, 42 ], + [ 40, 20, 321.46, 42, 40 ], + [ 40, 20, 221.65, 41, 40 ], + [ 40, 20, 338.83, 43, 33 ], + [ 40, 20, -11.53, 42, 27 ], + [ 40, 20, -14.16, 42, 28 ], + [ 40, 20, 244.81, 34, 44 ], + [ 40, 20, 342.24, 43, 31 ], + [ 40, 20, -242.76, 36, 43 ], + [ 40, 20, -343.06, 44, 30 ], + [ 40, 20, -157.61, 43, 32 ], + [ 40, 20, -225.48, 42, 41 ], + [ 40, 20, -81.38, 24, 42 ], + [ 40, 20, -280.83, 27, 43 ], + [ 40, 20, 300.67, 36, 44 ], + [ 40, 20, -119.62, 35, 43 ], + [ 40, 20, -77, 26, 42 ], + [ 40, 20, 313.57, 40, 42 ], + [ 40, 20, 200.99, 43, 32 ], + [ 40, 20, 21.23, 44, 33 ], + [ 40, 20, -48.18, 40, 42 ], + [ 40, 20, 55.62, 39, 44 ], + [ 40, 20, 199.29, 43, 31 ], + [ 40, 20, -225.09, 42, 41 ], + [ 40, 20, 226.2, 40, 41 ], + [ 40, 20, -303.96, 39, 44 ], + [ 40, 20, 68.84, 33, 44 ], + [ 40, 20, 117.18, 36, 43 ], + [ 40, 20, -104.18, 27, 42 ], + [ 40, 20, 307.29, 39, 43 ], + [ 40, 20, 97.5, 25, 41 ], + [ 40, 20, 29.01, 44, 36 ], + [ 40, 20, 268.74, 19, 39 ], + [ 40, 20, -40.85, 42, 41 ], + [ 40, 20, 7.83, 42, 25 ], + [ 40, 20, -102.79, 27, 42 ], + [ 40, 20, 304.99, 37, 43 ], + [ 40, 20, -107.37, 29, 43 ], + [ 40, 20, -120.56, 36, 43 ], + [ 40, 20, -297.78, 36, 44 ], + [ 40, 20, -90.42, 19, 39 ], + [ 40, 20, 81.84, 25, 42 ], + [ 40, 20, -163.25, 43, 29 ], + [ 40, 20, 188.2, 41, 24 ], + [ 40, 20, 161.02, 44, 31 ], + [ 40, 20, -222.59, 43, 41 ], + [ 40, 20, -291.42, 33, 44 ], + [ 40, 20, -275.99, 24, 41 ], + [ 40, 20, -269.03, 20, 39 ], + [ 40, 20, 269.58, 19, 39 ], + [ 40, 20, 105.25, 29, 42 ], + [ 573, 347, -55.47, 609, 669 ], + [ 765, 205, 0.58, 766, 212 ], + [ 351, 714, 256.41, 775, 508 ], + [ 276, 434, -74.59, 490, 381 ], + [ 146, 6, 293.24, 62, 136 ], + [ 512, 715, -174.13, 581, 762 ], + [ 853, 14, 95.45, 95, 849 ], + [ 457, 224, -76.35, 324, 497 ], + [ 174, 370, -7.76, 221, 390 ], + [ 294, 467, -98.19, 502, 357 ], + [ 955, 129, 227, 744, 785 ], + [ 364, 702, -301.62, 788, 677 ], + [ 877, 197, -353.05, 894, 302 ], + [ 730, 404, 53.02, 762, 826 ], + [ 112, 514, 58.24, 495, 366 ], + [ 17, 129, 8.44, 35, 130 ], + [ 281, 768, 20.87, 536, 818 ], + [ 929, 343, 230.05, 858, 931 ], + [ 308, 473, -143.37, 528, 562 ], + [ 809, 693, 294.19, 962, 1021 ], + [ 158, 641, -305.47, 613, 500 ], + [ 993, 146, 352.59, 1002, 273 ], + [ 52, 36, -182.82, 53, 37 ], + [ 61, 583, 195.61, 214, 576 ], + [ 649, 666, -43.4, 928, 929 ], + [ 220, 678, 77.36, 710, 362 ], + [ 744, 121, 77.35, 280, 751 ], + [ 261, 49, -321.61, 234, 200 ], + [ 77, 280, 121.51, 279, 210 ], + [ 385, 119, 50.72, 335, 373 ], + [ 291, 237, -68.73, 325, 357 ], + [ 369, 213, 67.7, 337, 422 ], + [ 358, 251, 100.59, 312, 396 ], + [ 610, 297, -73.68, 455, 668 ], + [ 376, 15, -169.68, 371, 81 ], + [ 827, 179, -254.18, 397, 843 ], + [ 425, 737, -141.29, 791, 839 ], + [ 23, 164, -95.58, 164, 37 ], + [ 77, 222, 166.62, 125, 232 ], + [ 762, 510, 277.54, 604, 822 ], + [ 322, 728, -221.02, 720, 759 ], + [ 736, 236, -22.05, 770, 495 ], + [ 321, 504, 212.83, 541, 597 ], + [ 976, 193, -229.44, 781, 865 ], + [ 359, 475, -215.81, 569, 594 ], + [ 630, 326, -48.07, 662, 686 ], + [ 780, 644, -77.76, 793, 899 ], + [ 67, 661, 75.98, 657, 225 ], + [ 443, 718, 283.2, 799, 595 ], + [ 168, 522, 40.53, 466, 506 ], + [ 51, 763, 2.14, 78, 763 ], + [ 249, 547, 222.59, 552, 570 ], + [ 729, 19, -25.54, 664, 331 ], + [ 520, 750, 154.94, 789, 898 ], + [ 706, 251, -120.38, 573, 735 ], + [ 911, 723, 185.11, 970, 800 ], + [ 330, 540, 68.77, 622, 503 ], + [ 732, 590, -32.05, 932, 888 ], + [ 328, 154, -78.98, 212, 350 ], + [ 219, 279, -310.49, 354, 347 ], + [ 788, 317, -315.86, 786, 775 ], + [ 279, 503, 196.18, 406, 559 ], + [ 84, 282, 213.32, 224, 281 ], + [ 559, 671, 196.16, 722, 798 ], + [ 268, 432, -288.99, 495, 394 ], + [ 609, 347, -331.79, 700, 593 ], + [ 360, 594, 173.57, 424, 629 ], + [ 970, 375, 5.79, 1003, 470 ], + [ 412, 620, 149.31, 670, 742 ], + [ 812, 16, -309.25, 525, 638 ], + [ 882, 606, -12.36, 990, 780 ], + [ 945, 47, -261.03, 193, 939 ], + [ 712, 110, 2.68, 716, 143 ], + [ 503, 529, -88.4, 542, 517 ], + [ 270, 730, 316.29, 698, 714 ], + [ 371, 418, -79.07, 479, 443 ], + [ 412, 687, -242.53, 800, 681 ], + [ 146, 646, 108.15, 659, 338 ], + [ 667, 187, -31.06, 666, 504 ], + [ 367, 27, -16.94, 358, 132 ], + [ 439, 689, -168.99, 561, 758 ], + [ 934, 629, -125.04, 1050, 1124 ], + [ 50, 395, -22.51, 196, 384 ], + [ 566, 4, -246.96, 225, 521 ], + [ 952, 206, -283.43, 421, 973 ], + [ 890, 484, 107.7, 731, 993 ], + [ 266, 25, 31.52, 239, 160 ], + [ 433, 134, -83.19, 183, 445 ], + [ 75, 634, 91.53, 636, 90 ], + [ 543, 140, 116.69, 368, 547 ], + [ 6, 469, 41.81, 317, 353 ], + [ 278, 401, -88.97, 404, 284 ], + [ 612, 439, 280.54, 542, 681 ], + [ 68, 95, 283.63, 107, 88 ], + [ 229, 41, -243.53, 139, 221 ], + [ 338, 708, 210.11, 646, 780 ], + [ 1003, 139, 232.72, 717, 881 ], + [ 536, 463, 357.89, 551, 482 ], + [ 930, 519, 231.4, 985, 1049 ], + [ 548, 157, -357.44, 554, 181 ], + [ 202, 162, 82.14, 187, 222 ], + [ 773, 370, -262.23, 471, 814 ], + [ 135, 61, 148.43, 147, 121 ], + [ 22, 112, 236.79, 105, 78 ], + [ 937, 283, 274.47, 354, 956 ], + [ 79, 536, 217.74, 389, 471 ], + [ 890, 520, 347.55, 980, 699 ], + [ 708, 154, 61.36, 474, 695 ], + [ 705, 82, -172.68, 708, 169 ], + [ 523, 493, -25.61, 683, 671 ], + [ 526, 644, 125.61, 830, 801 ], + [ 131, 455, -248, 471, 290 ], + [ 270, 556, -191.46, 374, 597 ], + [ 993, 572, -87.31, 616, 1018 ], + [ 818, 506, 177.51, 839, 540 ], + [ 696, 565, -40.43, 894, 881 ], + [ 494, 464, -273.43, 492, 521 ], + [ 476, 227, -129.96, 478, 509 ], + [ 52, 755, -53.22, 635, 493 ], + [ 318, 379, -311.68, 494, 489 ], + [ 794, 5, 291.36, 293, 741 ], + [ 460, 103, -2.3, 462, 121 ], + [ 619, 305, -201.62, 687, 511 ], + [ 859, 282, 333.95, 894, 630 ], + [ 223, 127, 88.01, 134, 226 ], + [ 987, 649, -102.96, 852, 1106 ], + [ 418, 251, 331.17, 486, 421 ], + [ 541, 608, -176.92, 572, 635 ], + [ 868, 646, -189.3, 960, 777 ], + [ 281, 116, 165.4, 300, 181 ], + [ 349, 711, 169.74, 470, 761 ], + [ 252, 288, 265.89, 304, 271 ], + [ 760, 752, -168.4, 894, 888 ], + [ 986, 628, 95.31, 716, 1038 ], + [ 949, 27, 213.8, 802, 548 ], + [ 562, 767, 101.53, 864, 702 ], + [ 927, 312, 336.26, 973, 659 ], + [ 886, 717, 185.51, 949, 798 ], + [ 123, 600, 70.64, 606, 315 ], + [ 365, 42, 178.97, 365, 47 ], + [ 89, 304, 124.91, 299, 245 ], + [ 842, 492, -325.96, 972, 879 ], + [ 708, 294, -341.61, 764, 502 ], + [ 981, 265, 246.51, 633, 1004 ], + [ 604, 208, 271.05, 218, 607 ], + [ 396, 629, 269.55, 631, 399 ], + [ 29, 556, -158.42, 229, 526 ], + [ 1019, 453, -206.3, 1114, 856 ], + [ 771, 544, 355.98, 806, 597 ], + [ 359, 50, -324.83, 322, 247 ], + [ 102, 116, -40.39, 151, 154 ], + [ 791, 747, -299.35, 1038, 1055 ], + [ 840, 510, -23.99, 973, 807 ], + [ 866, 477, 224.07, 953, 944 ], + [ 705, 162, -301.25, 503, 686 ], + [ 578, 459, 288.1, 614, 692 ], + [ 450, 481, 89.13, 487, 456 ], + [ 736, 476, -207, 871, 757 ], + [ 955, 286, 302.83, 756, 957 ], + [ 949, 555, 349.29, 1034, 721 ], + [ 999, 631, -262.23, 760, 1073 ], + [ 430, 457, -281.97, 536, 515 ], + [ 516, 318, 195.96, 582, 446 ], + [ 994, 199, -76.86, 418, 1012 ], + [ 800, 727, 74.89, 910, 962 ], + [ 884, 393, -215, 949, 828 ], + [ 782, 729, 235.01, 1044, 1057 ], + [ 397, 513, -38.84, 630, 648 ], + [ 614, 461, 228.97, 750, 765 ], + [ 533, 404, 29.07, 661, 611 ], + [ 518, 385, -99.58, 465, 573 ], + [ 657, 707, 327.94, 930, 947 ], + [ 768, 326, -94.35, 382, 789 ], + [ 534, 303, 91.98, 321, 542 ], + [ 937, 135, 53.41, 666, 832 ], + [ 532, 29, -299.01, 282, 479 ], + [ 738, 615, -335.72, 925, 864 ], + [ 560, 144, 144.86, 540, 439 ], + [ 1017, 604, -143.59, 1176, 1088 ], + [ 830, 236, 234.95, 668, 814 ], + [ 360, 624, -124.39, 717, 648 ], + [ 730, 348, -181.98, 741, 372 ], + [ 684, 155, 122.85, 501, 657 ], + [ 38, 555, -313.91, 426, 412 ], + [ 681, 490, -188.19, 744, 581 ], + [ 245, 120, -161.22, 269, 191 ], + [ 332, 673, -304.93, 742, 657 ], + [ 366, 325, -170.16, 415, 381 ], + [ 60, 319, -323.93, 236, 293 ], + [ 368, 173, -103.4, 252, 396 ], + [ 190, 443, -239.3, 478, 388 ], + [ 525, 222, 86.17, 257, 538 ], + [ 779, 735, 231.02, 1060, 1066 ], + [ 441, 763, 31.22, 772, 881 ], + [ 507, 506, -230.09, 713, 712 ], + [ 751, 689, -118.02, 959, 985 ], + [ 10, 170, -207.58, 87, 154 ], + [ 88, 444, 96.25, 450, 134 ], + [ 358, 489, -325.38, 572, 605 ], + [ 410, 765, -163.49, 609, 848 ], + [ 774, 139, 250.99, 382, 775 ], + [ 946, 533, -261.54, 666, 1012 ], + [ 557, 348, -293.13, 538, 649 ], + [ 373, 679, -298.13, 774, 648 ], + [ 930, 291, 175.45, 950, 362 ], + [ 90, 86, 101, 101, 103 ], + [ 435, 93, 259.53, 169, 443 ], + [ 651, 159, -44.7, 573, 570 ], + [ 276, 427, -306.82, 507, 476 ], + [ 325, 734, -310.41, 769, 723 ], + [ 605, 546, -180.54, 609, 550 ], + [ 450, 487, 318.4, 658, 662 ], + [ 590, 137, -75.57, 279, 605 ], + [ 685, 416, -159.6, 786, 627 ], + [ 773, 345, 112.41, 613, 845 ], + [ 511, 412, 192.27, 586, 510 ], + [ 142, 738, 278.75, 749, 252 ], + [ 1023, 458, -293.08, 822, 1121 ], + [ 448, 665, 106.65, 765, 619 ], + [ 523, 141, 74, 280, 541 ], + [ 594, 594, -134.45, 838, 839 ], + [ 849, 163, 322.03, 768, 650 ], + [ 790, 605, -270.42, 610, 793 ], + [ 171, 351, 119.26, 389, 320 ], + [ 456, 162, -277.76, 222, 473 ], + [ 103, 545, 108.48, 549, 269 ], + [ 889, 651, 79.93, 796, 989 ], + [ 773, 650, -210.99, 997, 954 ], + [ 868, 218, -308.01, 706, 817 ], + [ 508, 610, -176.53, 543, 638 ], + [ 101, 287, -340.03, 192, 304 ], + [ 422, 155, -187.53, 438, 208 ], + [ 368, 747, -340.56, 596, 826 ], + [ 496, 107, -12.25, 506, 210 ], + [ 153, 448, 139.26, 407, 437 ], + [ 270, 525, -70.57, 583, 429 ], + [ 936, 424, -180.74, 940, 435 ], + [ 538, 235, -291.72, 417, 586 ], + [ 750, 118, -88.21, 140, 753 ], + [ 824, 499, -237.04, 867, 961 ], + [ 61, 575, 31.41, 352, 522 ], + [ 89, 123, 176.59, 95, 127 ], + [ 335, 399, 156.89, 465, 497 ], + [ 362, 2, 256.74, 84, 352 ], + [ 857, 117, -43.45, 701, 674 ], + [ 543, 319, -271.27, 331, 549 ], + [ 955, 253, 125.56, 761, 922 ], + [ 186, 656, 345.76, 340, 681 ], + [ 283, 450, -263.73, 477, 329 ], + [ 669, 300, 203.75, 732, 543 ], + [ 844, 345, 22.18, 911, 637 ], + [ 377, 412, 137.13, 556, 557 ], + [ 116, 663, -209.4, 426, 633 ], + [ 851, 166, -207.8, 829, 542 ], + [ 704, 40, -98.81, 146, 700 ], + [ 130, 447, 199.8, 272, 464 ], + [ 257, 395, -283.5, 443, 341 ], + [ 947, 534, 331.25, 1086, 923 ], + [ 927, 745, 33.05, 1183, 1129 ], + [ 40, 479, 313.89, 371, 360 ], + [ 842, 343, -82.76, 445, 878 ], + [ 361, 626, 303.08, 721, 644 ], + [ 44, 712, 203.88, 327, 667 ], + [ 258, 582, 359.09, 265, 586 ], + [ 475, 342, -323.57, 585, 557 ], + [ 846, 439, 95.2, 513, 881 ], + [ 618, 631, -255.2, 767, 757 ], + [ 727, 573, 244.51, 828, 902 ], + [ 686, 500, 222.61, 842, 831 ], + [ 221, 530, -49.12, 544, 514 ], + [ 156, 392, 272.31, 397, 171 ], + [ 550, 663, 138.28, 851, 860 ], + [ 469, 696, 85.4, 731, 523 ], + [ 247, 121, -89.45, 122, 247 ], + [ 246, 477, 230.48, 523, 492 ], + [ 298, 343, -78.27, 395, 361 ], + [ 945, 39, -206.96, 860, 462 ], + [ 70, 584, 329.99, 351, 541 ], + [ 930, 330, 78.29, 511, 977 ], + [ 734, 496, -145.75, 884, 822 ], + [ 153, 612, 221.61, 519, 558 ], + [ 28, 256, 122.53, 231, 160 ], + [ 736, 608, 54.16, 923, 952 ], + [ 346, 25, 167.09, 343, 100 ], + [ 731, 209, -106.47, 406, 759 ], + [ 546, 431, 214.67, 693, 663 ], + [ 947, 372, 250.3, 668, 1015 ], + [ 141, 424, 76.93, 444, 233 ], + [ 98, 353, -334.21, 242, 360 ], + [ 721, 135, 129.95, 565, 638 ], + [ 2, 249, -16.73, 72, 238 ], + [ 829, 270, 223.01, 789, 761 ], + [ 492, 54, 72.23, 201, 484 ], + [ 57, 313, 94.83, 316, 81 ], + [ 806, 92, 289.88, 360, 788 ], + [ 143, 502, -26.17, 348, 514 ], + [ 960, 444, 321.87, 1028, 941 ], + [ 804, 549, -1.2, 813, 565 ], + [ 402, 622, 329.13, 663, 740 ], + [ 438, 395, -264.53, 434, 473 ], + [ 111, 396, -31.3, 299, 395 ], + [ 599, 250, 221.13, 614, 581 ], + [ 404, 618, 271.02, 624, 414 ], + [ 1019, 661, -156.22, 1198, 1014 ], + [ 642, 497, -70.04, 685, 773 ], + [ 542, 604, -319.97, 803, 810 ], + [ 1017, 555, 95.73, 653, 1065 ], + [ 963, 390, -109.91, 693, 1037 ], + [ 449, 691, -246.89, 812, 682 ], + [ 405, 251, 123.08, 431, 475 ], + [ 541, 334, -225.77, 616, 619 ], + [ 1008, 15, 8.18, 999, 158 ], + [ 811, 318, -132.55, 781, 811 ], + [ 684, 314, -233.79, 657, 735 ], + [ 974, 27, 231.55, 625, 778 ], + [ 363, 434, 76.98, 504, 451 ], + [ 420, 428, -122.82, 586, 583 ], + [ 44, 382, 242.46, 358, 215 ], + [ 399, 718, 169.72, 520, 776 ], + [ 560, 254, -315.23, 576, 574 ], + [ 223, 659, -2.44, 249, 667 ], + [ 414, 647, 11.35, 532, 715 ], + [ 938, 487, 309.16, 969, 1035 ], + [ 237, 232, -116.8, 312, 315 ], + [ 417, 194, -91.67, 205, 421 ], + [ 234, 466, 314.41, 495, 493 ], + [ 856, 12, -4.73, 853, 82 ], + [ 169, 45, 352.78, 172, 66 ], + [ 2, 344, 305.73, 279, 202 ], + [ 755, 764, -176.75, 795, 804 ], + [ 819, 163, -279.19, 291, 834 ], + [ 303, 473, 327.13, 510, 561 ], + [ 832, 408, 63.3, 737, 926 ], + [ 759, 586, 280.36, 711, 851 ], + [ 81, 130, -257.92, 143, 105 ], + [ 463, 305, 178.43, 470, 316 ], + [ 398, 179, 189.44, 420, 241 ], + [ 903, 305, 230.84, 805, 892 ], + [ 893, 306, -167.29, 937, 494 ], + [ 816, 104, -171.82, 821, 218 ], + [ 52, 718, -19.67, 289, 693 ], + [ 167, 177, -296.63, 232, 228 ], + [ 120, 32, 85.5, 41, 122 ], + [ 722, 601, -85.84, 650, 764 ], + [ 609, 662, 35.57, 880, 892 ], + [ 754, 240, 321.29, 737, 658 ], + [ 496, 538, -231.74, 729, 721 ], + [ 254, 447, 53.71, 510, 469 ], + [ 70, 348, 340.06, 183, 350 ], + [ 344, 192, -282.97, 264, 378 ], + [ 612, 231, -330.59, 646, 501 ], + [ 72, 356, -165.26, 159, 361 ], + [ 162, 446, -135.64, 426, 431 ], + [ 795, 219, -292.56, 507, 818 ], + [ 161, 676, 327.18, 500, 655 ], + [ 724, 473, -168.11, 804, 611 ], + [ 669, 77, 336.01, 641, 342 ], + [ 851, 267, 34.78, 850, 704 ], + [ 416, 319, -359.02, 420, 326 ], + [ 387, 576, -179.64, 389, 577 ], + [ 497, 267, 36.17, 559, 509 ], + [ 539, 320, -350.8, 583, 402 ], + [ 816, 441, 66.6, 729, 923 ], + [ 111, 269, 271.66, 271, 118 ], + [ 207, 390, 184.72, 237, 405 ], + [ 160, 164, -92.13, 168, 164 ], + [ 433, 666, -20.46, 637, 775 ], + [ 399, 536, 229.18, 665, 650 ], + [ 960, 79, -192.4, 954, 282 ], + [ 962, 369, 347.54, 1018, 567 ], + [ 194, 741, -122.85, 727, 563 ], + [ 758, 377, 176.79, 777, 417 ], + [ 771, 220, -130.18, 664, 730 ], + [ 353, 303, 121.74, 443, 458 ], + [ 228, 458, -233.29, 503, 455 ], + [ 1002, 577, -79.69, 746, 1088 ], + [ 359, 133, -176.18, 366, 155 ], + [ 842, 432, 325.52, 938, 832 ], + [ 656, 384, -320.92, 751, 711 ], + [ 895, 337, 24.6, 953, 678 ], + [ 877, 482, -0.9, 883, 495 ], + [ 190, 282, 351.99, 226, 305 ], + [ 954, 91, -162, 934, 380 ], + [ 256, 356, 121.52, 436, 403 ], + [ 942, 526, -170.02, 1017, 680 ], + [ 98, 510, -349.45, 189, 518 ], + [ 496, 11, -224.86, 359, 356 ], + [ 758, 642, 179.75, 760, 644 ], + [ 709, 366, -180.86, 713, 375 ], + [ 764, 269, 134.32, 725, 733 ], + [ 287, 158, -134.37, 312, 314 ], + [ 798, 300, 129.27, 737, 806 ], + [ 787, 247, 214.41, 788, 647 ], + [ 44, 439, -172.34, 101, 439 ], + [ 729, 377, 320.69, 802, 753 ], + [ 999, 450, 78.19, 644, 1069 ], + [ 1014, 54, 88.04, 88, 1015 ], + [ 183, 622, -30.22, 470, 629 ], + [ 950, 385, 312.59, 924, 960 ], + [ 181, 190, -155.94, 241, 245 ], + [ 884, 405, -8.25, 931, 527 ], + [ 181, 236, 272.79, 243, 191 ], + [ 877, 57, -216.03, 743, 560 ], + [ 670, 90, 195.13, 668, 260 ], + [ 937, 637, -172.02, 1014, 760 ], + [ 881, 618, 249.25, 889, 1041 ], + [ 480, 610, 299.25, 765, 716 ], + [ 93, 747, 161.79, 321, 738 ], + [ 562, 691, -197.6, 744, 827 ], + [ 495, 59, -19.85, 484, 223 ], + [ 785, 721, 359.66, 787, 725 ], + [ 261, 89, -139.99, 255, 234 ], + [ 137, 746, -86.8, 751, 178 ], + [ 342, 480, -2.77, 363, 495 ], + [ 107, 414, -126.38, 395, 331 ], + [ 375, 306, -267.64, 321, 386 ], + [ 217, 666, 304.01, 672, 552 ], + [ 131, 735, 283.69, 744, 301 ], + [ 873, 388, 211.15, 947, 782 ], + [ 80, 759, 265.54, 762, 137 ], + [ 564, 579, 221.17, 804, 806 ], + [ 563, 7, 303.67, 317, 472 ], + [ 876, 109, 282.32, 291, 878 ], + [ 241, 365, 11.53, 309, 406 ], + [ 749, 446, -321.05, 862, 817 ], + [ 57, 726, -34.7, 458, 629 ], + [ 188, 121, -131.26, 213, 220 ], + [ 109, 219, -162.69, 168, 240 ], + [ 1024, 105, 200.79, 993, 460 ], + [ 812, 165, 191.77, 827, 326 ], + [ 678, 587, 14.3, 801, 736 ], + [ 481, 241, 20.14, 534, 391 ], + [ 401, 130, 122.08, 322, 407 ], + [ 290, 310, -255.92, 371, 355 ], + [ 818, 103, 161.27, 807, 359 ], + [ 874, 145, 121.63, 581, 819 ], + [ 313, 286, 234.41, 414, 419 ], + [ 638, 367, -281.16, 483, 696 ], + [ 918, 367, -183.26, 937, 417 ], + [ 692, 208, -29.51, 703, 521 ], + [ 453, 716, -199.75, 668, 826 ], + [ 985, 309, 25.67, 1021, 705 ], + [ 502, 609, 146.76, 753, 783 ], + [ 163, 58, -283.29, 93, 171 ], + [ 311, 671, -187.24, 393, 704 ], + [ 29, 558, -51.47, 454, 370 ], + [ 714, 24, 216.39, 587, 441 ], + [ 535, 502, -159.67, 674, 655 ], + [ 647, 423, 184.07, 674, 466 ], + [ 899, 174, -341.28, 907, 453 ], + [ 345, 513, 329.85, 555, 617 ], + [ 573, 483, -101.39, 585, 655 ], + [ 97, 91, -251.33, 117, 119 ], + [ 818, 213, -197.64, 844, 449 ], + [ 927, 447, -288.8, 721, 1021 ], + [ 149, 468, 234.16, 465, 393 ], + [ 587, 235, 256.52, 364, 624 ], + [ 383, 636, 7.03, 458, 677 ], + [ 668, 353, -317, 729, 713 ], + [ 418, 258, -154.77, 487, 410 ], + [ 444, 516, 325.47, 656, 676 ], + [ 402, 178, 58.01, 363, 434 ], + [ 769, 250, 143.01, 764, 661 ], + [ 924, 95, 342.54, 909, 368 ], + [ 131, 22, 40.69, 113, 102 ], + [ 232, 133, -241.28, 228, 266 ], + [ 53, 573, -21.74, 260, 551 ], + [ 930, 92, -146.28, 823, 592 ], + [ 428, 593, 183.95, 466, 620 ], + [ 489, 138, -294.32, 327, 502 ], + [ 781, 471, 189.43, 846, 591 ], + [ 732, 4, 355.43, 729, 62 ], + [ 302, 580, -130.66, 635, 606 ], + [ 1018, 505, -42.07, 1092, 1057 ], + [ 993, 603, -22.08, 1146, 932 ], + [ 539, 8, 102.05, 120, 528 ], + [ 708, 48, -81.14, 155, 706 ], + [ 165, 745, 4.73, 225, 755 ], + [ 469, 298, -160.01, 541, 439 ], + [ 218, 664, -31.28, 530, 680 ], + [ 312, 482, -310.38, 569, 549 ], + [ 69, 262, -307.45, 249, 213 ], + [ 63, 489, 236.14, 440, 323 ], + [ 389, 484, -10.97, 472, 549 ], + [ 841, 460, -166.4, 924, 643 ], + [ 298, 96, -158.96, 311, 195 ], + [ 955, 626, -114.48, 964, 1127 ], + [ 327, 749, -136.45, 752, 767 ], + [ 846, 332, 142.16, 872, 779 ], + [ 107, 496, 44.36, 423, 429 ], + [ 574, 729, -224.62, 920, 921 ], + [ 645, 13, 20.69, 608, 239 ], + [ 719, 59, -241.73, 392, 660 ], + [ 543, 351, 211.16, 645, 579 ], + [ 16, 213, -78.13, 210, 59 ], + [ 291, 436, 11.09, 369, 483 ], + [ 577, 383, -122.45, 631, 691 ], + [ 926, 629, -140.49, 1113, 1073 ], + [ 220, 495, 170.69, 297, 522 ], + [ 934, 574, -84.97, 652, 980 ], + [ 485, 236, -121.77, 455, 535 ], + [ 678, 720, -110.28, 909, 884 ], + [ 195, 491, -55.09, 513, 440 ], + [ 363, 130, 273.14, 148, 369 ], + [ 152, 141, -247.66, 187, 193 ], + [ 553, 359, 160.46, 641, 521 ], + [ 56, 23, -200.49, 60, 40 ], + [ 394, 717, -331.63, 687, 818 ], + [ 706, 114, 131.79, 555, 601 ], + [ 437, 46, -50.28, 313, 365 ], + [ 828, 410, 170.92, 882, 534 ], + [ 143, 150, 124.98, 204, 202 ], + [ 498, 296, -135.53, 561, 558 ], + [ 932, 568, -14.46, 1043, 782 ], + [ 808, 681, 117.2, 975, 1028 ], + [ 968, 327, -266.95, 378, 982 ], + [ 684, 369, -245.86, 616, 774 ], + [ 911, 665, -294.01, 977, 1103 ], + [ 952, 426, -187.84, 1001, 550 ], + [ 627, 753, -145.19, 943, 974 ], + [ 44, 606, 238.3, 538, 354 ], + [ 799, 713, -342, 979, 924 ], + [ 464, 319, -65.38, 482, 554 ], + [ 784, 249, -253.58, 460, 821 ], + [ 251, 87, -335.43, 264, 183 ], + [ 930, 45, -29.07, 833, 490 ], + [ 38, 558, 316.6, 409, 431 ], + [ 200, 473, 219.12, 452, 492 ], + [ 294, 418, -102, 469, 373 ], + [ 539, 120, -116.07, 343, 536 ], + [ 845, 153, -268.05, 181, 848 ], + [ 672, 751, -319.72, 998, 1007 ], + [ 697, 331, -21.35, 769, 561 ], + [ 92, 151, 211.96, 157, 175 ], + [ 244, 339, 293.35, 406, 358 ], + [ 279, 267, 335.17, 364, 359 ], + [ 749, 296, 137.87, 754, 721 ], + [ 687, 446, -139.04, 809, 786 ], + [ 487, 666, 252.84, 778, 660 ], + [ 854, 302, -354.74, 878, 379 ], + [ 177, 167, -212.02, 239, 234 ], + [ 308, 670, -228.12, 704, 675 ], + [ 365, 425, 81.96, 472, 420 ], + [ 847, 494, 222.68, 956, 936 ], + [ 636, 676, -180.42, 640, 679 ], + [ 541, 116, 69.88, 295, 547 ], + [ 506, 678, 346.6, 648, 777 ], + [ 190, 425, 43.89, 431, 437 ], + [ 504, 22, -52.24, 324, 411 ], + [ 352, 662, 230.37, 733, 692 ], + [ 359, 27, -333.47, 333, 184 ], + [ 570, 257, 294.55, 469, 625 ], + [ 757, 530, -27.59, 914, 820 ], + [ 362, 397, -285.26, 478, 453 ], + [ 167, 106, 347.98, 184, 138 ], + [ 422, 511, -263.32, 557, 477 ], + [ 9, 122, -348.21, 33, 120 ], + [ 1014, 264, 49.91, 855, 945 ], + [ 565, 642, 70.15, 795, 749 ], + [ 1003, 138, -29.48, 940, 613 ], + [ 818, 407, -5.06, 849, 477 ], + [ 856, 66, 235.38, 539, 740 ], + [ 763, 634, 12.1, 879, 779 ], + [ 212, 137, -336.25, 249, 210 ], + [ 318, 262, -237.7, 390, 407 ], + [ 301, 578, 241.1, 650, 541 ], + [ 438, 584, 355.3, 483, 617 ], + [ 455, 577, -117.24, 720, 667 ], + [ 14, 232, -235.53, 198, 141 ], + [ 626, 216, -106.74, 386, 660 ], + [ 72, 61, 274.4, 65, 76 ], + [ 577, 702, 335.87, 812, 876 ], + [ 399, 506, 209.55, 596, 635 ], + [ 929, 665, 337.4, 1112, 971 ], + [ 962, 135, -137.9, 803, 743 ], + [ 112, 360, -316.76, 328, 338 ], + [ 967, 688, 230.71, 1143, 1183 ], + [ 961, 261, 51.08, 806, 911 ], + [ 282, 271, 268.25, 278, 288 ], + [ 459, 740, -250.03, 852, 683 ], + [ 819, 26, -193.37, 802, 213 ], + [ 697, 458, -255.25, 620, 790 ], + [ 663, 757, 218.88, 990, 1004 ], + [ 449, 685, 121.42, 819, 739 ], + [ 417, 639, 247.11, 750, 632 ], + [ 733, 723, -136.06, 1028, 1028 ], + [ 794, 680, -211.41, 1031, 992 ], + [ 610, 632, 32.85, 855, 861 ], + [ 171, 75, 286.64, 119, 184 ], + [ 40, 419, 260.1, 418, 110 ], + [ 197, 264, 283.76, 301, 254 ], + [ 434, 19, -7.45, 431, 75 ], + [ 583, 516, -18.13, 714, 671 ], + [ 382, 84, -96.2, 124, 387 ], + [ 43, 397, -217.9, 277, 338 ], + [ 906, 178, -260.93, 318, 921 ], + [ 201, 5, -344.2, 194, 59 ], + [ 412, 462, 247.6, 583, 555 ], + [ 971, 590, 317.22, 1112, 1092 ], + [ 866, 620, -10.88, 966, 772 ], + [ 724, 768, 236.57, 1038, 1026 ], + [ 616, 325, 253.97, 481, 681 ], + [ 93, 761, 17.18, 313, 754 ], + [ 580, 280, 95.75, 337, 604 ], + [ 955, 311, -252.94, 577, 1002 ], + [ 133, 223, -86.78, 229, 145 ], + [ 274, 373, -82.53, 404, 319 ], + [ 296, 682, 350.52, 402, 721 ], + [ 136, 641, 183.43, 172, 647 ], + [ 76, 523, 44.45, 420, 426 ], + [ 572, 298, 43.57, 619, 610 ], + [ 397, 759, 347.43, 551, 827 ], + [ 246, 61, 340.77, 251, 139 ], + [ 782, 495, -117.54, 799, 921 ], + [ 406, 443, 173.94, 450, 482 ], + [ 559, 542, -337.71, 723, 713 ], + [ 947, 747, 11.49, 1077, 920 ], + [ 318, 201, -69.91, 297, 367 ], + [ 304, 303, -189.04, 348, 345 ], + [ 53, 359, 300.74, 335, 229 ], + [ 628, 20, -140.49, 496, 413 ], + [ 178, 317, -148.96, 314, 362 ], + [ 161, 501, -92.13, 505, 178 ], + [ 133, 319, -348.12, 196, 339 ], + [ 478, 624, 66.87, 761, 684 ], + [ 213, 274, -145.07, 330, 345 ], + [ 245, 216, -164.86, 291, 271 ], + [ 773, 454, 23.31, 889, 722 ], + [ 162, 682, 307.04, 640, 540 ], + [ 405, 722, -76.47, 795, 562 ], + [ 321, 425, -58.1, 529, 497 ], + [ 633, 558, 238.73, 804, 830 ], + [ 933, 678, -12.03, 1052, 857 ], + [ 290, 10, 286.84, 93, 280 ], + [ 307, 368, 151.05, 446, 469 ], + [ 914, 527, -312.32, 1005, 1030 ], + [ 196, 711, -110.04, 734, 427 ], + [ 473, 522, 315.35, 702, 703 ], + [ 1019, 643, 234.38, 1115, 1201 ], + [ 943, 179, 190.45, 958, 346 ], + [ 322, 419, -131.97, 526, 518 ], + [ 752, 126, -329.31, 710, 491 ], + [ 579, 57, 305.87, 384, 502 ], + [ 50, 274, 314.31, 229, 226 ], + [ 970, 504, -61.53, 904, 1092 ], + [ 673, 422, -287.69, 606, 769 ], + [ 741, 568, -341.9, 880, 770 ], + [ 72, 155, 147.35, 144, 168 ], + [ 9, 150, 30.13, 82, 134 ], + [ 854, 89, 197.41, 840, 339 ], + [ 613, 331, -130.07, 646, 681 ], + [ 937, 126, -12.79, 940, 330 ], + [ 981, 560, 40.29, 1110, 1061 ], + [ 904, 598, 297.04, 942, 1077 ], + [ 839, 557, 49.32, 968, 999 ], + [ 239, 293, -275.98, 315, 268 ], + [ 342, 80, 256.08, 159, 349 ], + [ 368, 134, -319.39, 366, 341 ], + [ 66, 141, -179.05, 66, 141 ], + [ 620, 13, -95.86, 75, 616 ], + [ 389, 472, 213.71, 584, 607 ], + [ 716, 407, 331.54, 822, 699 ], + [ 186, 374, 136.35, 392, 398 ], + [ 755, 284, -23.86, 804, 565 ], + [ 666, 145, -222.27, 590, 553 ], + [ 224, 324, 52.16, 393, 375 ], + [ 343, 580, 127.12, 668, 622 ], + [ 196, 88, 252.56, 141, 211 ], + [ 253, 137, -336.17, 286, 227 ], + [ 511, 602, -324.69, 764, 786 ], + [ 886, 125, 117.44, 519, 843 ], + [ 678, 662, -221.74, 946, 944 ], + [ 638, 33, 128.46, 422, 519 ], + [ 320, 599, -326.1, 599, 675 ], + [ 798, 330, -191.1, 847, 476 ], + [ 994, 498, 111.94, 833, 1107 ], + [ 556, 755, -64.69, 919, 825 ], + [ 225, 133, 17.12, 254, 193 ], + [ 72, 323, 144.73, 245, 304 ], + [ 106, 706, -11.75, 246, 712 ], + [ 156, 602, 105.1, 621, 306 ], + [ 835, 343, 5.2, 862, 417 ], + [ 8, 53, 35.77, 37, 47 ], + [ 702, 292, -122.9, 625, 747 ], + [ 751, 122, 186.23, 758, 201 ], + [ 991, 99, -67.53, 468, 953 ], + [ 638, 516, -80.16, 616, 716 ], + [ 34, 684, 44.43, 503, 511 ], + [ 570, 737, 346.85, 722, 847 ], + [ 264, 48, 288.03, 126, 266 ], + [ 760, 165, 132.14, 631, 673 ], + [ 397, 23, -267.13, 42, 396 ], + [ 916, 28, -218.24, 736, 587 ], + [ 455, 555, 55.17, 715, 690 ], + [ 792, 349, 169.23, 843, 489 ], + [ 545, 324, 261.67, 398, 585 ], + [ 961, 34, 24.65, 887, 431 ], + [ 335, 60, -54.7, 241, 308 ], + [ 910, 487, -83.82, 580, 956 ], + [ 892, 685, -38.88, 1123, 1092 ], + [ 789, 486, 115.43, 777, 920 ], + [ 465, 15, 136.55, 347, 329 ], + [ 597, 702, 162.75, 778, 846 ], + [ 799, 275, -37.53, 800, 704 ], + [ 365, 101, 289.64, 216, 377 ], + [ 94, 510, -126.88, 463, 380 ], + [ 978, 462, -95.12, 546, 1014 ], + [ 501, 713, -39.78, 840, 868 ], + [ 936, 628, -303.76, 1042, 1127 ], + [ 304, 528, 337.71, 480, 604 ], + [ 761, 352, 72.83, 560, 831 ], + [ 413, 701, 86.73, 723, 452 ], + [ 95, 380, 24.59, 244, 385 ], + [ 839, 211, 282.2, 382, 865 ], + [ 274, 485, -343.38, 401, 543 ], + [ 173, 555, 134.13, 518, 509 ], + [ 505, 520, -152.84, 685, 692 ], + [ 882, 128, -204.43, 856, 480 ], + [ 313, 61, -336.21, 311, 182 ], + [ 393, 289, 158.67, 471, 410 ], + [ 361, 92, -231.78, 295, 339 ], + [ 977, 401, -295.42, 781, 1054 ], + [ 588, 472, 60.64, 699, 743 ], + [ 111, 333, 258.13, 347, 175 ], + [ 1, 538, -7.75, 72, 533 ], + [ 24, 668, -207.79, 332, 601 ], + [ 727, 278, 279.69, 395, 763 ], + [ 1022, 171, -320.66, 898, 779 ], + [ 219, 406, -263.54, 427, 262 ], + [ 253, 700, 7.25, 338, 725 ], + [ 991, 203, 92.81, 251, 998 ], + [ 149, 167, -251.44, 205, 193 ], + [ 241, 608, 191.06, 352, 642 ], + [ 839, 691, -216.96, 1085, 1055 ], + [ 694, 691, 287.01, 863, 865 ], + [ 171, 709, 192.56, 319, 728 ], + [ 388, 486, -267.17, 504, 410 ], + [ 273, 484, -107.27, 542, 403 ], + [ 329, 648, 272.46, 660, 356 ], + [ 466, 69, 208.26, 442, 280 ], + [ 989, 44, -322.16, 808, 641 ], + [ 609, 155, -165.97, 627, 296 ], + [ 763, 335, -316.43, 783, 768 ], + [ 523, 196, 331.05, 551, 425 ], + [ 726, 716, 258.65, 843, 851 ], + [ 623, 76, 203, 602, 312 ], + [ 384, 366, -61.76, 502, 511 ], + [ 516, 571, -328.46, 738, 756 ], + [ 876, 49, 278.47, 176, 873 ], + [ 751, 399, 342.82, 834, 602 ], + [ 536, 372, -336.75, 639, 553 ], + [ 589, 60, -191.98, 588, 180 ], + [ 865, 632, 121.69, 992, 1067 ], + [ 927, 256, 304.9, 739, 906 ], + [ 886, 32, 255.78, 247, 865 ], + [ 742, 499, 326.58, 893, 824 ], + [ 519, 19, -50.51, 344, 412 ], + [ 943, 406, -235.77, 866, 1006 ], + [ 988, 294, -189.88, 1023, 458 ], + [ 872, 89, 183.64, 875, 143 ], + [ 847, 491, -187.97, 906, 602 ], + [ 880, 164, -131.9, 708, 763 ], + [ 95, 45, -259.59, 61, 100 ], + [ 780, 740, -19.97, 985, 962 ], + [ 702, 636, 10, 801, 747 ], + [ 554, 424, -242.69, 631, 686 ], + [ 506, 45, -225.48, 386, 391 ], + [ 946, 752, 154.49, 1177, 1085 ], + [ 99, 724, -290.08, 713, 341 ], + [ 341, 610, -206.71, 578, 697 ], + [ 90, 477, 252.85, 481, 225 ], + [ 335, 368, -313.57, 497, 496 ], + [ 659, 440, -271.91, 461, 673 ], + [ 802, 257, -298.62, 610, 827 ], + [ 262, 15, 297.37, 132, 239 ], + [ 788, 430, -25.32, 895, 726 ], + [ 955, 41, 16.33, 928, 307 ], + [ 122, 750, 0.56, 128, 751 ], + [ 854, 56, -41.09, 679, 603 ], + [ 953, 312, -190.15, 993, 473 ], + [ 147, 379, 256.2, 402, 231 ], + [ 1019, 630, -118.81, 1042, 1195 ], + [ 61, 356, 292.86, 350, 194 ], + [ 186, 189, -187.11, 207, 210 ], + [ 274, 385, -173.82, 312, 411 ], + [ 184, 208, 228.5, 276, 274 ], + [ 660, 155, 266.41, 195, 667 ], + [ 172, 247, 249.42, 290, 247 ], + [ 684, 119, 301.76, 460, 644 ], + [ 114, 65, -126.46, 118, 129 ], + [ 356, 175, 228.43, 366, 381 ], + [ 208, 171, 98.43, 199, 229 ], + [ 551, 216, -288.35, 378, 590 ], + [ 456, 356, -111.48, 496, 553 ], + [ 701, 560, 249.07, 772, 853 ], + [ 966, 698, -276.73, 806, 1041 ], + [ 779, 425, -131.54, 833, 864 ], + [ 646, 554, 99.15, 649, 724 ], + [ 489, 299, 209.84, 572, 501 ], + [ 406, 384, 270.44, 386, 408 ], + [ 738, 650, -285.75, 826, 886 ], + [ 551, 38, -125.87, 352, 467 ], + [ 179, 451, 76.5, 480, 279 ], + [ 281, 24, -310.54, 200, 229 ], + [ 634, 550, 214.41, 833, 811 ], + [ 477, 506, 148.69, 670, 678 ], + [ 595, 322, -173, 628, 391 ], + [ 920, 38, 345.67, 899, 264 ], + [ 549, 404, -94.74, 447, 579 ], + [ 335, 708, 264.69, 735, 398 ], + [ 208, 494, 153.81, 404, 533 ], + [ 314, 138, 188.81, 330, 183 ], + [ 647, 272, -109.12, 467, 699 ], + [ 243, 482, -87.11, 492, 266 ], + [ 314, 190, -292.29, 295, 362 ], + [ 107, 547, 181.54, 120, 548 ], + [ 830, 225, -237.15, 639, 818 ], + [ 72, 146, -201.94, 121, 160 ], + [ 52, 557, 176.6, 84, 558 ], + [ 429, 41, 120.19, 250, 390 ], + [ 293, 196, -137.62, 347, 341 ], + [ 1024, 431, -8.38, 1075, 575 ], + [ 781, 147, 246.32, 447, 773 ], + [ 113, 330, -21.87, 226, 348 ], + [ 502, 564, 155.6, 690, 720 ], + [ 598, 644, -52.24, 874, 866 ], + [ 344, 498, 157.9, 505, 589 ], + [ 519, 552, 294.48, 716, 701 ], + [ 744, 590, 96.63, 671, 806 ], + [ 483, 144, 134.21, 439, 445 ], + [ 142, 363, 317.65, 348, 363 ], + [ 458, 363, 1.19, 465, 372 ], + [ 958, 180, 138.96, 840, 764 ], + [ 796, 265, -272.53, 300, 807 ], + [ 253, 641, 256.2, 681, 397 ], + [ 987, 321, 139.53, 958, 883 ], + [ 400, 578, -113.84, 689, 598 ], + [ 113, 199, -316.9, 218, 222 ], + [ 20, 756, 236.02, 637, 438 ], + [ 669, 350, -349.85, 720, 462 ], + [ 348, 456, -9.77, 418, 508 ], + [ 288, 31, 330.03, 263, 170 ], + [ 801, 749, -221.64, 1096, 1091 ], + [ 487, 578, 26.13, 692, 733 ], + [ 611, 768, -93.8, 805, 659 ], + [ 464, 739, 206.31, 742, 866 ], + [ 150, 271, 27.98, 259, 309 ], + [ 500, 355, 214.08, 612, 573 ], + [ 562, 370, 202.66, 660, 556 ], + [ 385, 103, -189.69, 396, 165 ], + [ 400, 364, 237.25, 521, 532 ], + [ 898, 579, 265.83, 641, 936 ], + [ 855, 412, 247.68, 704, 945 ], + [ 28, 8, 69.11, 16, 29 ], + [ 577, 467, 68.26, 647, 708 ], + [ 956, 46, 40.72, 754, 658 ], + [ 737, 158, 294.26, 445, 736 ], + [ 265, 533, -93.23, 545, 293 ], + [ 57, 186, 252.73, 193, 108 ], + [ 858, 475, 348.77, 933, 633 ], + [ 76, 6, -30.9, 67, 44 ], + [ 925, 679, -208.65, 1137, 1038 ], + [ 791, 552, 176.74, 820, 594 ], + [ 632, 573, 184.2, 671, 616 ], + [ 218, 237, -98.78, 266, 250 ], + [ 827, 186, -56.01, 615, 789 ], + [ 373, 738, 92.05, 751, 397 ], + [ 279, 169, -128.47, 304, 322 ], + [ 659, 211, 45.56, 612, 618 ], + [ 506, 86, -229.86, 392, 440 ], + [ 490, 143, -224.56, 449, 444 ], + [ 958, 68, -308.34, 647, 793 ], + [ 150, 661, 208.86, 449, 650 ], + [ 913, 367, 25.37, 981, 723 ], + [ 663, 530, 247.34, 743, 814 ], + [ 10, 381, -299.04, 337, 193 ], + [ 443, 661, -327.45, 729, 795 ], + [ 62, 102, -169.91, 78, 109 ], + [ 391, 596, 27.65, 623, 709 ], + [ 968, 207, 107.88, 494, 984 ], + [ 129, 574, 241.1, 564, 388 ], + [ 321, 524, 304.55, 613, 561 ], + [ 395, 636, 204.06, 618, 741 ], + [ 180, 553, -172.71, 247, 570 ], + [ 728, 281, 323.36, 751, 659 ], + [ 568, 289, -39.48, 621, 584 ], + [ 655, 620, -140.52, 898, 894 ], + [ 701, 666, -45.48, 965, 966 ], + [ 971, 191, -207.62, 949, 618 ], + [ 499, 149, -14.17, 518, 266 ], + [ 140, 245, -196.4, 203, 273 ], + [ 995, 485, 294.81, 856, 1107 ], + [ 916, 13, 170.8, 906, 158 ], + [ 694, 148, -31.69, 667, 490 ], + [ 961, 694, 231.56, 1140, 1182 ], + [ 908, 351, -218.24, 930, 837 ], + [ 340, 74, -357.1, 343, 91 ], + [ 652, 599, 267.04, 630, 681 ], + [ 76, 559, -274.31, 562, 117 ], + [ 293, 164, -135.55, 323, 321 ], + [ 784, 269, 93.44, 316, 797 ], + [ 1017, 247, -171.9, 1040, 387 ], + [ 924, 165, -159.9, 923, 471 ], + [ 655, 686, -21.69, 861, 879 ], + [ 98, 638, -91.92, 640, 117 ], + [ 939, 551, 236.78, 974, 1086 ], + [ 117, 38, 305.36, 97, 117 ], + [ 121, 527, 146.37, 392, 505 ], + [ 1013, 583, -50.09, 1095, 1151 ], + [ 111, 34, 103.63, 59, 114 ], + [ 430, 622, 355.41, 477, 654 ], + [ 51, 616, -133.67, 480, 460 ], + [ 318, 541, 20.97, 490, 618 ], + [ 603, 264, -56.65, 551, 648 ], + [ 60, 337, -179.21, 63, 336 ], + [ 441, 274, 336.64, 512, 426 ], + [ 266, 361, -348.6, 331, 406 ], + [ 189, 452, 144.59, 416, 476 ], + [ 909, 443, -29.3, 1008, 830 ], + [ 325, 526, 2.12, 343, 538 ], + [ 985, 80, -135.32, 755, 748 ], + [ 978, 118, -278.03, 253, 984 ], + [ 276, 356, 228.81, 448, 440 ], + [ 818, 40, -244.03, 394, 752 ], + [ 225, 85, 71.79, 151, 240 ], + [ 483, 416, 327.8, 629, 609 ], + [ 449, 615, -54.23, 760, 723 ], + [ 466, 756, -351.4, 573, 816 ], + [ 159, 669, 63.34, 669, 442 ], + [ 630, 145, -164.34, 644, 309 ], + [ 121, 115, -89.96, 114, 120 ], + [ 440, 80, 19.91, 440, 224 ], + [ 557, 287, 353.35, 585, 349 ], + [ 370, 132, -329.54, 385, 301 ], + [ 535, 301, -250.42, 463, 604 ], + [ 125, 663, 138.77, 531, 580 ], + [ 79, 231, -5.19, 98, 237 ], + [ 514, 580, -16.94, 659, 704 ], + [ 526, 699, -110.11, 835, 732 ], + [ 105, 403, 25.22, 266, 409 ], + [ 383, 493, 132.67, 621, 614 ], + [ 767, 55, 207.66, 704, 404 ], + [ 283, 472, -243.5, 548, 463 ], + [ 274, 749, -119.81, 785, 608 ], + [ 317, 382, 162.07, 419, 459 ], + [ 473, 476, 62.93, 639, 638 ], + [ 158, 535, 279.41, 552, 242 ], + [ 663, 152, 102.91, 296, 679 ], + [ 127, 547, 38.04, 437, 509 ], + [ 482, 625, -304.52, 788, 751 ], + [ 6, 143, 157.38, 60, 133 ], + [ 707, 718, 208.39, 961, 967 ], + [ 490, 162, -69.52, 322, 516 ], + [ 656, 367, -87.51, 394, 671 ], + [ 997, 605, 270.38, 610, 1000 ], + [ 716, 191, -4.08, 727, 241 ], + [ 293, 309, -223.07, 425, 425 ], + [ 179, 38, -80.84, 65, 182 ], + [ 837, 133, -288.78, 395, 835 ], + [ 379, 494, 296.46, 609, 559 ], + [ 458, 498, -289.49, 621, 597 ], + [ 170, 260, -336.57, 258, 306 ], + [ 978, 627, -184.85, 1027, 706 ], + [ 367, 351, 158.99, 468, 458 ], + [ 755, 330, 5.41, 782, 400 ], + [ 628, 99, 184.02, 632, 142 ], + [ 110, 319, -246.44, 335, 227 ], + [ 304, 452, -211.14, 494, 543 ], + [ 702, 312, -87.03, 347, 717 ], + [ 803, 596, -344.23, 934, 792 ], + [ 712, 171, 122.5, 526, 691 ], + [ 813, 298, -354.2, 838, 378 ], + [ 846, 263, 233.36, 714, 834 ], + [ 71, 539, -158.35, 263, 526 ], + [ 809, 337, 150.89, 870, 686 ], + [ 305, 39, 243.13, 171, 289 ], + [ 55, 121, -178.71, 56, 121 ], + [ 216, 349, 244.81, 406, 343 ], + [ 428, 106, -183.44, 433, 130 ], + [ 816, 708, -345.39, 968, 890 ], + [ 839, 474, -185.56, 881, 552 ], + [ 501, 315, 93.42, 343, 518 ], + [ 509, 181, 339.95, 539, 344 ], + [ 329, 234, 124.48, 379, 402 ], + [ 616, 73, -280.47, 183, 618 ], + [ 318, 301, -244.54, 408, 415 ], + [ 152, 342, -131.81, 355, 340 ], + [ 410, 504, 194.66, 523, 590 ], + [ 246, 56, 294.02, 150, 247 ], + [ 497, 668, 237.51, 828, 777 ], + [ 518, 529, -38.43, 733, 735 ], + [ 766, 136, 256.73, 306, 775 ], + [ 387, 517, -293.6, 628, 561 ], + [ 358, 763, -74.25, 830, 551 ], + [ 23, 457, -6.24, 71, 456 ], + [ 137, 695, 275.85, 703, 207 ], + [ 301, 41, -123.98, 201, 271 ], + [ 625, 348, 347.85, 682, 471 ], + [ 390, 532, -319.83, 641, 658 ], + [ 296, 137, 306, 283, 320 ], + [ 122, 525, 90, 525, 122 ], + [ 579, 331, 210, 666, 575 ], + [ 433, 621, -30, 684, 754 ], + [ 527, 121, -30, 516, 368 ], + [ 933, 138, -330, 877, 586 ], + [ 413, 240, 330, 476, 414 ], + [ 293, 466, -360, 293, 466 ], + [ 629, 166, -30, 626, 458 ], + [ 611, 458, -270, 458, 611 ], + [ 668, 680, -120, 922, 917 ], + [ 592, 3, -360, 592, 3 ], + [ 195, 438, -30, 386, 476 ], + [ 1003, 762, -180, 1003, 762 ], + [ 451, 389, -60, 561, 584 ], + [ 917, 320, 60, 735, 954 ], + [ 967, 629, 300, 1027, 1151 ], + [ 920, 80, 0, 920, 80 ], + [ 926, 551, 150, 1076, 938 ], + [ 372, 242, -150, 442, 395 ], + [ 526, 742, -240, 905, 825 ], + [ 862, 418, -210, 955, 791 ], + [ 873, 563, 210, 1037, 923 ], + [ 300, 547, 210, 532, 623 ], + [ 554, 117, -180, 554, 117 ], + [ 969, 36, 150, 857, 514 ], + [ 544, 761, 0, 544, 761 ], + [ 438, 683, 90, 683, 438 ], + [ 953, 609, -120, 1002, 1129 ], + [ 664, 120, 90, 120, 664 ], + [ 986, 514, 90, 514, 986 ], + [ 167, 392, -270, 392, 167 ], + [ 375, 279, 300, 428, 463 ], + [ 142, 503, 60, 506, 373 ], + [ 923, 151, 180, 923, 151 ], + [ 175, 109, 210, 205, 180 ], + [ 876, 517, 210, 1016, 885 ], + [ 368, 78, 120, 251, 356 ], + [ 990, 24, -30, 868, 516 ], + [ 299, 522, 90, 522, 299 ], + [ 954, 493, -150, 1072, 903 ], + [ 549, 618, 210, 783, 808 ], + [ 701, 130, -240, 463, 671 ], + [ 579, 236, 240, 492, 618 ], + [ 162, 160, -360, 162, 160 ], + [ 925, 291, -270, 291, 925 ], + [ 711, 180, 240, 510, 704 ], + [ 488, 455, 330, 649, 638 ], + [ 150, 429, 330, 343, 447 ], + [ 625, 653, 90, 653, 625 ], + [ 235, 600, -180, 235, 600 ], + [ 529, 244, -300, 475, 580 ], + [ 322, 1, -180, 322, 1 ], + [ 487, 435, 30, 638, 620 ], + [ 298, 556, 210, 535, 630 ], + [ 309, 482, -270, 482, 309 ], + [ 466, 246, -90, 246, 466 ], + [ 287, 612, 360, 287, 612 ], + [ 211, 724, 30, 544, 732 ], + [ 167, 425, -90, 425, 167 ], + [ 818, 600, -270, 600, 818 ], + [ 77, 229, -30, 180, 236 ], + [ 160, 470, -30, 372, 487 ], + [ 416, 67, -330, 393, 265 ], + [ 987, 289, 210, 998, 742 ], + [ 747, 521, -90, 521, 747 ], + [ 894, 101, 150, 824, 532 ], + [ 256, 316, 0, 256, 316 ], + [ 225, 474, -30, 430, 522 ], + [ 765, 599, -360, 765, 599 ], + [ 128, 444, 210, 331, 448 ], + [ 291, 502, -300, 580, 503 ], + [ 778, 621, 150, 983, 925 ], + [ 241, 165, 210, 290, 262 ], + [ 284, 137, -270, 137, 284 ], + [ 44, 697, 240, 625, 386 ], + [ 446, 599, 360, 446, 599 ], + [ 152, 23, -90, 23, 152 ], + [ 673, 191, 360, 673, 191 ], + [ 110, 764, 210, 476, 716 ], + [ 113, 92, -120, 135, 142 ], + [ 916, 309, -360, 916, 309 ], + [ 999, 124, 240, 605, 926 ], + [ 683, 305, -360, 683, 305 ], + [ 456, 517, -210, 652, 674 ], + [ 614, 550, -300, 782, 806 ], + [ 441, 116, 300, 319, 439 ], + [ 403, 230, 300, 399, 464 ], + [ 786, 734, -240, 1028, 1046 ], + [ 777, 48, -270, 48, 777 ], + [ 543, 133, -180, 543, 133 ], + [ 899, 52, 150, 804, 493 ], + [ 900, 32, 270, 32, 900 ], + [ 704, 544, -210, 881, 821 ], + [ 728, 118, 300, 464, 689 ], + [ 935, 577, 90, 577, 935 ], + [ 22, 140, 210, 88, 131 ], + [ 931, 441, -330, 1026, 847 ], + [ 846, 263, -360, 846, 263 ], + [ 1015, 77, -300, 574, 917 ], + [ 154, 484, -180, 154, 484 ], + [ 439, 390, -120, 556, 574 ], + [ 112, 297, -90, 297, 112 ], + [ 974, 56, -300, 534, 871 ], + [ 194, 602, -210, 469, 616 ], + [ 103, 535, 360, 103, 535 ], + [ 744, 551, -240, 848, 918 ], + [ 517, 481, 180, 517, 481 ], + [ 595, 348, -300, 598, 689 ], + [ 627, 341, -240, 608, 711 ], + [ 723, 456, 240, 755, 853 ], + [ 996, 17, -150, 870, 512 ], + [ 312, 101, 150, 320, 241 ], + [ 695, 63, 210, 632, 401 ], + [ 779, 208, 60, 569, 778 ], + [ 1018, 285, -180, 1018, 285 ], + [ 1003, 75, 360, 1003, 75 ], + [ 149, 462, 90, 462, 149 ], + [ 907, 140, -330, 855, 574 ], + [ 991, 610, 0, 991, 610 ], + [ 153, 384, -300, 409, 324 ], + [ 984, 363, -300, 805, 1033 ], + [ 287, 597, -180, 287, 597 ], + [ 1008, 350, -120, 806, 1046 ], + [ 780, 165, 60, 532, 757 ], + [ 331, 161, 360, 331, 161 ], + [ 594, 144, -330, 586, 421 ], + [ 568, 256, 120, 505, 618 ], + [ 160, 168, 270, 168, 160 ], + [ 214, 143, 90, 143, 214 ], + [ 722, 257, -270, 257, 722 ], + [ 813, 227, 90, 227, 813 ], + [ 926, 441, -90, 441, 926 ], + [ 149, 429, 240, 445, 343 ], + [ 480, 246, -330, 538, 452 ], + [ 64, 493, -180, 64, 493 ], + [ 26, 171, -30, 107, 161 ], + [ 87, 597, 210, 373, 559 ], + [ 764, 716, 360, 764, 716 ], + [ 602, 108, -240, 394, 574 ], + [ 229, 649, 0, 229, 649 ], + [ 367, 490, 240, 606, 561 ], + [ 989, 416, -90, 416, 989 ], + [ 357, 528, 330, 572, 635 ], + [ 190, 119, -180, 190, 119 ], + [ 243, 167, 300, 265, 293 ], + [ 510, 186, -270, 186, 510 ], + [ 968, 251, 300, 699, 963 ], + [ 743, 55, 240, 418, 670 ], + [ 741, 506, 360, 741, 506 ], + [ 928, 678, 240, 1050, 1141 ], + [ 434, 185, -30, 467, 377 ], + [ 241, 158, 360, 241, 158 ], + [ 636, 425, 150, 762, 684 ], + [ 578, 568, 240, 780, 783 ], + [ 847, 750, -330, 1108, 1073 ], + [ 750, 364, -150, 830, 689 ], + [ 880, 322, 90, 322, 880 ], + [ 780, 111, 150, 730, 484 ], + [ 610, 666, -120, 881, 860 ], + [ 584, 594, -210, 802, 804 ], + [ 398, 151, -30, 419, 330 ], + [ 864, 331, 120, 718, 912 ], + [ 861, 39, -210, 764, 463 ], + [ 536, 472, 360, 536, 472 ], + [ 370, 340, 330, 489, 479 ], + [ 425, 134, -60, 327, 435 ], + [ 728, 25, 240, 385, 642 ], + [ 341, 610, 360, 341, 610 ], + [ 27, 299, 270, 299, 27 ], + [ 388, 737, 90, 737, 388 ], + [ 628, 267, 240, 544, 676 ], + [ 90, 147, -180, 90, 147 ], + [ 785, 24, -150, 690, 412 ], + [ 1023, 426, 300, 879, 1098 ], + [ 994, 703, -120, 1105, 1211 ], + [ 939, 253, 30, 939, 688 ], + [ 344, 31, 60, 198, 312 ], + [ 179, 287, -120, 337, 298 ], + [ 160, 307, 180, 160, 307 ], + [ 6, 597, 150, 303, 518 ], + [ 643, 300, -330, 706, 581 ], + [ 456, 367, -210, 577, 544 ], + [ 710, 188, -180, 710, 188 ], + [ 1016, 187, 240, 669, 972 ], + [ 927, 164, 180, 927, 164 ], + [ 267, 99, -330, 280, 219 ], + [ 808, 357, -300, 712, 877 ], + [ 358, 491, -30, 555, 604 ], + [ 721, 611, 270, 611, 721 ], + [ 458, 615, 120, 761, 702 ], + [ 153, 328, -330, 296, 360 ], + [ 204, 670, 30, 511, 681 ], + [ 449, 434, 210, 604, 599 ], + [ 725, 428, -360, 725, 428 ], + [ 545, 355, -210, 648, 578 ], + [ 277, 554, -120, 617, 515 ], + [ 345, 392, 240, 510, 493 ], + [ 455, 660, -30, 723, 799 ], + [ 946, 432, -180, 946, 432 ], + [ 822, 7, -330, 714, 416 ], + [ 469, 122, -30, 466, 340 ], + [ 516, 274, -120, 494, 582 ], + [ 27, 611, 300, 541, 328 ], + [ 812, 386, -30, 895, 740 ], + [ 822, 27, 330, 724, 434 ], + [ 24, 234, 120, 214, 136 ], + [ 383, 492, -270, 492, 383 ], + [ 194, 65, -360, 194, 65 ], + [ 658, 7, 60, 334, 572 ], + [ 912, 623, 60, 995, 1100 ], + [ 961, 206, 180, 961, 206 ], + [ 424, 593, -300, 725, 663 ], + [ 778, 613, 300, 918, 979 ], + [ 687, 454, -60, 735, 821 ], + [ 142, 302, -60, 331, 273 ], + [ 69, 320, 180, 69, 320 ], + [ 734, 607, -90, 607, 734 ], + [ 898, 752, -30, 1152, 1100 ], + [ 916, 477, -30, 1031, 871 ], + [ 487, 393, -150, 617, 582 ], + [ 66, 346, 30, 230, 332 ], + [ 832, 663, -120, 989, 1051 ], + [ 938, 478, -300, 882, 1051 ], + [ 834, 225, 150, 834, 610 ], + [ 221, 331, -300, 397, 356 ], + [ 666, 382, 0, 666, 382 ], + [ 398, 165, -150, 426, 341 ], + [ 786, 70, -150, 714, 453 ], + [ 236, 757, 300, 772, 582 ], + [ 718, 353, -60, 663, 797 ], + [ 1006, 403, 270, 403, 1006 ], + [ 545, 258, 180, 545, 258 ], + [ 874, 193, -120, 603, 852 ], + [ 996, 51, 120, 541, 886 ], + [ 699, 216, -330, 713, 536 ], + [ 805, 715, 60, 1021, 1054 ], + [ 312, 245, 210, 392, 367 ], + [ 628, 66, 270, 66, 628 ], + [ 922, 242, 270, 242, 922 ], + [ 827, 12, -120, 422, 721 ], + [ 231, 766, 270, 766, 231 ], + [ 95, 407, -240, 399, 284 ], + [ 842, 294, -60, 674, 876 ], + [ 178, 272, 0, 178, 272 ], + [ 838, 28, 210, 738, 442 ], + [ 914, 631, 150, 1106, 1001 ], + [ 476, 97, -360, 476, 97 ], + [ 257, 567, -300, 619, 505 ], + [ 131, 490, -60, 488, 358 ], + [ 1013, 342, -60, 801, 1048 ], + [ 317, 515, -60, 603, 531 ], + [ 157, 585, 360, 157, 585 ], + [ 341, 448, -120, 557, 518 ], + [ 781, 581, 150, 966, 892 ], + [ 265, 441, 180, 265, 441 ], + [ 35, 359, 30, 209, 328 ], + [ 757, 716, 150, 1013, 997 ], + [ 782, 141, -60, 511, 747 ], + [ 893, 238, -330, 892, 652 ], + [ 302, 230, 0, 302, 230 ], + [ 752, 467, -240, 779, 883 ], + [ 174, 585, 330, 442, 594 ], + [ 138, 72, 0, 138, 72 ], + [ 492, 658, -180, 492, 658 ], + [ 185, 88, 270, 88, 185 ], + [ 939, 113, -150, 869, 566 ], + [ 487, 681, -180, 487, 681 ], + [ 163, 499, -60, 512, 390 ], + [ 594, 400, 180, 594, 400 ], + [ 655, 626, -360, 655, 626 ], + [ 148, 422, 120, 438, 338 ], + [ 325, 552, -60, 639, 557 ], + [ 259, 655, 0, 259, 655 ], + [ 789, 255, -120, 614, 810 ], + [ 46, 394, -30, 235, 364 ], + [ 915, 330, 90, 330, 915 ], + [ 214, 695, 0, 214, 695 ], + [ 466, 48, -270, 48, 466 ], + [ 906, 494, 120, 880, 1030 ], + [ 638, 217, 0, 638, 217 ], + [ 676, 327, -360, 676, 327 ], + [ 312, 571, 180, 312, 571 ], + [ 727, 765, 90, 765, 727 ], + [ 214, 588, 330, 478, 616 ], + [ 576, 622, -30, 808, 827 ], + [ 31, 540, 270, 540, 31 ], + [ 661, 701, 210, 922, 936 ], + [ 149, 282, 270, 282, 149 ], + [ 302, 193, 0, 302, 193 ], + [ 987, 671, 210, 1189, 1073 ], + [ 459, 410, -240, 584, 601 ], + [ 492, 644, 330, 747, 804 ], + [ 236, 421, 330, 414, 483 ], + [ 853, 581, 150, 1028, 928 ], + [ 785, 245, 0, 785, 245 ], + [ 217, 268, -210, 321, 339 ], + [ 90, 763, -300, 705, 458 ], + [ 888, 107, 0, 888, 107 ], + [ 726, 333, 180, 726, 333 ], + [ 198, 305, 90, 305, 198 ], + [ 983, 649, -270, 649, 983 ], + [ 155, 250, 360, 155, 250 ], + [ 89, 427, 30, 290, 414 ], + [ 17, 298, -150, 162, 265 ], + [ 729, 118, 90, 118, 729 ], + [ 223, 280, 330, 332, 353 ], + [ 436, 347, 330, 550, 519 ], + [ 558, 244, -300, 489, 605 ], + [ 32, 20, 0, 32, 20 ], + [ 787, 169, 300, 538, 765 ], + [ 387, 137, 180, 387, 137 ], + [ 534, 253, -330, 588, 485 ], + [ 514, 320, 90, 320, 514 ], + [ 31, 332, -360, 31, 332 ], + [ 321, 111, -240, 256, 331 ], + [ 936, 277, 30, 948, 707 ], + [ 884, 604, 360, 884, 604 ], + [ 825, 254, -150, 840, 631 ], + [ 907, 278, -120, 693, 923 ], + [ 408, 100, 30, 403, 290 ], + [ 315, 390, 180, 315, 390 ], + [ 62, 22, -330, 64, 49 ], + [ 141, 407, -30, 325, 422 ], + [ 789, 429, 300, 765, 897 ], + [ 808, 670, -330, 1034, 983 ], + [ 984, 603, -60, 1012, 1153 ], + [ 509, 498, -240, 685, 688 ], + [ 496, 349, 30, 603, 549 ], + [ 808, 260, 300, 627, 829 ], + [ 122, 566, -360, 122, 566 ], + [ 684, 33, 30, 608, 370 ], + [ 405, 79, 30, 389, 270 ], + [ 463, 185, -330, 492, 391 ], + [ 947, 8, 90, 8, 947 ], + [ 850, 614, 0, 850, 614 ], + [ 899, 584, -150, 1069, 954 ], + [ 294, 197, 330, 352, 318 ], + [ 493, 568, -90, 568, 493 ], + [ 7, 406, 180, 7, 406 ], + [ 914, 497, -30, 1039, 887 ], + [ 930, 242, 0, 930, 242 ], + [ 440, 546, 90, 546, 440 ], + [ 1002, 125, 270, 125, 1002 ], + [ 58, 67, 270, 67, 58 ], + [ 710, 703, 120, 963, 964 ], + [ 205, 609, -60, 628, 481 ], + [ 505, 61, 120, 305, 466 ], + [ 445, 431, -60, 594, 600 ], + [ 848, 435, 330, 951, 801 ], + [ 574, 352, 60, 591, 673 ], + [ 29, 281, 300, 256, 165 ], + [ 552, 611, 90, 611, 552 ], + [ 155, 594, 210, 430, 590 ], + [ 4, 637, 270, 637, 4 ], + [ 887, 401, 210, 968, 789 ], + [ 539, 555, 60, 750, 743 ], + [ 968, 165, 120, 626, 919 ], + [ 635, 498, -210, 798, 747 ], + [ 36, 366, 210, 213, 334 ], + [ 1001, 28, -210, 880, 523 ], + [ 580, 49, 60, 331, 526 ], + [ 481, 463, -90, 463, 481 ], + [ 85, 579, -240, 543, 361 ], + [ 878, 581, 360, 878, 581 ], + [ 735, 478, 0, 735, 478 ], + [ 506, 113, -210, 494, 349 ], + [ 64, 71, -30, 90, 93 ], + [ 728, 547, -300, 837, 903 ], + [ 941, 574, 60, 967, 1101 ], + [ 710, 556, 90, 556, 710 ], + [ 948, 223, 120, 666, 930 ], + [ 536, 583, -180, 536, 583 ], + [ 938, 646, -360, 938, 646 ], + [ 83, 536, 210, 338, 504 ], + [ 76, 319, -60, 312, 224 ], + [ 603, 698, 30, 871, 905 ], + [ 846, 746, 120, 1068, 1104 ], + [ 284, 523, -120, 594, 506 ], + [ 385, 461, -300, 591, 563 ], + [ 974, 225, 240, 681, 955 ], + [ 575, 167, -300, 432, 580 ], + [ 241, 569, 270, 569, 241 ], + [ 524, 504, 150, 705, 696 ], + [ 554, 566, -60, 765, 762 ], + [ 334, 622, 240, 705, 599 ], + [ 750, 306, 180, 750, 306 ], + [ 294, 172, 150, 340, 294 ], + [ 955, 385, -90, 385, 955 ], + [ 297, 673, 360, 297, 673 ], + [ 403, 635, -180, 403, 635 ], + [ 226, 298, 0, 226, 298 ], + [ 345, 478, -210, 537, 585 ], + [ 216, 103, 300, 195, 238 ], + [ 948, 518, 90, 518, 948 ], + [ 346, 768, -60, 836, 683 ], + [ 169, 562, 240, 570, 426 ], + [ 921, 14, -330, 804, 472 ], + [ 618, 730, 30, 900, 940 ], + [ 1013, 184, -60, 664, 969 ], + [ 998, 486, -180, 998, 486 ], + [ 257, 655, 120, 695, 548 ], + [ 764, 146, -180, 764, 146 ], + [ 1004, 308, -60, 767, 1023 ], + [ 892, 250, -330, 897, 662 ], + [ 510, 510, -330, 696, 696 ], + [ 956, 636, 240, 1028, 1144 ], + [ 787, 558, 240, 875, 959 ], + [ 846, 253, 210, 858, 641 ], + [ 395, 245, -360, 395, 245 ], + [ 840, 225, 120, 614, 838 ], + [ 83, 417, 0, 83, 417 ], + [ 746, 222, 150, 757, 563 ], + [ 1022, 206, -300, 688, 988 ], + [ 412, 107, -60, 297, 409 ], + [ 491, 489, -330, 669, 668 ], + [ 569, 438, 300, 662, 711 ], + [ 372, 260, 90, 260, 372 ], + [ 194, 126, 330, 230, 206 ], + [ 988, 422, -180, 988, 422 ], + [ 1003, 283, 60, 746, 1009 ], + [ 641, 345, -300, 619, 727 ], + [ 129, 136, -90, 136, 129 ], + [ 835, 134, 120, 533, 789 ], + [ 926, 443, 240, 846, 1022 ], + [ 326, 42, -30, 302, 199 ], + [ 405, 469, -360, 405, 469 ], + [ 307, 747, -120, 799, 638 ], + [ 952, 124, 0, 952, 124 ], + [ 911, 96, -330, 836, 538 ], + [ 171, 80, -60, 153, 188 ], + [ 754, 561, 270, 561, 754 ], + [ 868, 657, -330, 1079, 1002 ], + [ 254, 515, -210, 476, 571 ], + [ 937, 441, 240, 849, 1031 ], + [ 740, 685, 270, 685, 740 ], + [ 169, 220, -30, 255, 275 ], + [ 183, 449, -30, 382, 480 ], + [ 541, 395, 90, 395, 541 ], + [ 44, 310, 180, 44, 310 ], + [ 108, 438, 240, 432, 311 ], + [ 549, 235, 30, 592, 478 ], + [ 425, 118, -60, 313, 427 ], + [ 481, 308, -300, 507, 570 ], + [ 715, 243, 120, 567, 739 ], + [ 515, 29, 30, 460, 282 ], + [ 370, 156, 240, 319, 397 ], + [ 849, 292, -60, 676, 881 ], + [ 275, 698, 330, 586, 741 ], + [ 891, 731, -120, 1077, 1136 ], + [ 610, 43, 300, 340, 549 ], + [ 434, 455, -210, 602, 609 ], + [ 1006, 6, -90, 6, 1006 ], + [ 405, 366, 210, 532, 518 ], + [ 491, 134, -330, 492, 361 ], + [ 139, 520, -300, 519, 380 ], + [ 699, 29, -150, 619, 373 ], + [ 528, 665, 150, 789, 838 ], + [ 955, 103, 90, 103, 955 ], + [ 884, 3, 30, 766, 444 ], + [ 203, 460, 90, 460, 203 ], + [ 104, 17, -210, 98, 65 ], + [ 319, 3, -210, 277, 161 ], + [ 691, 307, 150, 751, 610 ], + [ 448, 674, 270, 674, 448 ], + [ 529, 10, 30, 463, 273 ], + [ 647, 535, 60, 786, 827 ], + [ 973, 162, -30, 922, 626 ], + [ 663, 110, 60, 426, 629 ], + [ 259, 5, 60, 133, 226 ], + [ 829, 157, -240, 550, 794 ], + [ 432, 235, -240, 419, 490 ], + [ 641, 473, -210, 791, 729 ], + [ 857, 223, 60, 621, 853 ], + [ 537, 559, -30, 744, 752 ], + [ 396, 187, 0, 396, 187 ], + [ 947, 672, -240, 1055, 1155 ], + [ 512, 633, -90, 633, 512 ], + [ 963, 362, 30, 1014, 795 ], + [ 527, 556, 30, 734, 745 ], + [ 95, 410, 180, 95, 410 ], + [ 274, 733, -330, 603, 771 ], + [ 476, 446, 120, 623, 634 ], + [ 681, 321, 330, 749, 618 ], + [ 271, 723, 150, 595, 760 ], + [ 759, 252, 330, 782, 597 ], + [ 236, 194, 240, 285, 300 ], + [ 426, 578, 90, 578, 426 ], + [ 831, 532, -300, 876, 985 ], + [ 358, 159, 240, 316, 389 ], + [ 915, 229, -120, 654, 906 ], + [ 657, 435, -150, 785, 704 ], + [ 711, 23, 300, 374, 626 ], + [ 371, 534, -150, 587, 646 ], + [ 327, 736, -180, 327, 736 ], + [ 4, 537, 60, 466, 271 ], + [ 953, 714, 240, 1093, 1181 ], + [ 749, 265, 60, 603, 780 ], + [ 365, 119, -180, 365, 119 ], + [ 464, 388, -30, 594, 568 ], + [ 280, 306, 210, 394, 404 ], + [ 641, 30, -120, 345, 569 ], + [ 956, 563, -90, 563, 956 ], + [ 840, 72, -330, 763, 481 ], + [ 128, 317, -360, 128, 317 ], + [ 379, 320, 150, 488, 465 ], + [ 966, 266, 120, 712, 968 ], + [ 786, 60, 360, 786, 60 ], + [ 352, 333, -270, 333, 352 ], + [ 626, 681, 120, 902, 881 ], + [ 87, 122, -330, 136, 149 ], + [ 878, 603, -300, 960, 1061 ], + [ 199, 551, 240, 575, 447 ], + [ 575, 413, 300, 644, 703 ], + [ 638, 509, -120, 759, 806 ], + [ 658, 25, 180, 658, 25 ], + [ 369, 749, -300, 833, 693 ], + [ 7, 570, -240, 497, 290 ], + [ 1022, 66, 60, 567, 918 ], + [ 147, 535, 0, 147, 535 ], + [ 812, 600, 120, 925, 1002 ], + [ 861, 490, -60, 853, 990 ], + [ 949, 640, -270, 640, 949 ], + [ 763, 303, 120, 643, 810 ], + [ 673, 13, -120, 346, 588 ], + [ 1006, 506, -90, 506, 1006 ], + [ 740, 14, -120, 381, 646 ], + [ 829, 19, -300, 430, 726 ], + [ 996, 17, -240, 512, 869 ], + [ 583, 127, 270, 127, 583 ], + [ 53, 736, 120, 663, 412 ], + [ 709, 613, -150, 920, 884 ], + [ 121, 556, -270, 556, 121 ], + [ 266, 360, 0, 266, 360 ], + [ 962, 96, 30, 881, 563 ], + [ 287, 82, -240, 214, 288 ], + [ 668, 637, -210, 896, 884 ], + [ 1024, 490, -210, 1131, 934 ], + [ 91, 468, -180, 91, 468 ], + [ 269, 137, -60, 252, 300 ], + [ 137, 177, -90, 177, 137 ], + [ 804, 708, -240, 1014, 1049 ], + [ 76, 30, 300, 62, 80 ], + [ 200, 229, -90, 229, 200 ], + [ 728, 182, 0, 728, 182 ], + [ 248, 397, 60, 467, 412 ], + [ 442, 130, -60, 332, 447 ], + [ 654, 130, -330, 631, 439 ], + [ 892, 197, 120, 616, 869 ], + [ 128, 399, 270, 399, 128 ], + [ 557, 501, -330, 732, 712 ], + [ 942, 335, -360, 942, 335 ], + [ 95, 392, -360, 95, 392 ], + [ 1014, 542, -120, 975, 1148 ], + [ 364, 320, 60, 458, 475 ], + [ 866, 505, -300, 869, 1001 ], + [ 453, 68, -180, 453, 68 ], + [ 888, 558, -60, 925, 1048 ], + [ 952, 459, 150, 1053, 872 ], + [ 616, 554, -210, 810, 786 ], + [ 462, 203, 270, 203, 462 ], + [ 543, 141, -150, 540, 392 ], + [ 544, 212, 240, 455, 576 ], + [ 585, 204, 0, 585, 204 ], + [ 931, 477, 330, 1044, 878 ], + [ 495, 358, 60, 557, 607 ], + [ 588, 697, 120, 897, 856 ], + [ 854, 594, -90, 594, 854 ], + [ 268, 540, 360, 268, 540 ], + [ 968, 234, 150, 955, 685 ], + [ 152, 580, 360, 152, 580 ], + [ 3, 219, -270, 219, 3 ], + [ 301, 627, -60, 692, 573 ], + [ 96, 297, 150, 231, 303 ], + [ 614, 227, -150, 644, 503 ], + [ 533, 598, 210, 759, 783 ], + [ 101, 271, 150, 222, 284 ], + [ 782, 143, -30, 748, 515 ], + [ 160, 344, -240, 377, 309 ], + [ 148, 301, -30, 278, 335 ], + [ 874, 415, -210, 963, 794 ], + [ 847, 417, 0, 847, 417 ], + [ 1007, 642, -120, 1058, 1192 ], + [ 426, 714, 150, 725, 829 ], + [ 117, 406, -360, 117, 406 ], + [ 443, 37, 210, 401, 252 ], + [ 222, 113, -270, 113, 222 ], + [ 928, 699, -120, 1068, 1152 ], + [ 378, 50, 210, 351, 231 ], + [ 548, 161, -270, 161, 548 ], + [ 4, 48, 150, 27, 42 ], + [ 233, 682, -180, 233, 682 ], + [ 754, 670, -330, 987, 956 ], + [ 61, 221, -360, 61, 221 ], + [ 789, 309, 30, 837, 662 ], + [ 795, 641, 60, 952, 1008 ], + [ 573, 39, 180, 573, 39 ], + [ 712, 734, 90, 734, 712 ], + [ 18, 250, 150, 140, 224 ], + [ 805, 660, 300, 973, 1027 ], + [ 968, 663, 360, 968, 663 ], + [ 661, 69, 270, 69, 661 ], + [ 908, 634, 180, 908, 634 ], + [ 986, 680, -360, 986, 680 ], + [ 992, 503, -60, 930, 1110 ], + [ 514, 331, -180, 514, 331 ], + [ 85, 760, -150, 452, 699 ], + [ 830, 526, -180, 830, 526 ], + [ 458, 539, 60, 695, 665 ], + [ 152, 374, -30, 317, 400 ], + [ 59, 332, -150, 216, 316 ], + [ 29, 59, -90, 59, 29 ], + [ 909, 740, -210, 1157, 1094 ], + [ 633, 711, -300, 932, 903 ], + [ 651, 686, 180, 651, 686 ], + [ 56, 303, -240, 289, 198 ], + [ 314, 366, -240, 473, 453 ], + [ 624, 220, 270, 220, 624 ], + [ 888, 563, 60, 931, 1050 ], + [ 459, 676, -330, 735, 814 ], + [ 911, 720, 0, 911, 720 ], + [ 197, 742, 30, 541, 741 ], + [ 599, 655, 30, 845, 866 ], + [ 823, 361, -30, 892, 724 ], + [ 929, 81, -120, 533, 844 ], + [ 681, 122, 180, 681, 122 ], + [ 874, 358, -210, 935, 745 ], + [ 31, 57, 0, 31, 57 ], + [ 914, 722, -210, 1152, 1080 ], + [ 468, 298, -300, 491, 554 ], + [ 520, 213, -330, 556, 443 ], + [ 1014, 360, -360, 1014, 360 ], + [ 563, 42, 270, 42, 563 ], + [ 73, 658, -120, 605, 391 ], + [ 530, 587, -60, 771, 751 ], + [ 877, 329, 60, 723, 923 ], + [ 604, 216, -330, 631, 488 ], + [ 818, 239, -270, 239, 818 ], + [ 302, 156, -330, 339, 285 ], + [ 534, 507, -30, 715, 706 ], + [ 644, 128, 180, 644, 128 ], + [ 690, 121, -210, 657, 448 ], + [ 699, 542, -180, 699, 542 ], + [ 557, 597, -300, 795, 780 ], + [ 896, 226, 270, 226, 896 ], + [ 318, 116, -150, 332, 258 ], + [ 926, 568, 60, 954, 1085 ], + [ 987, 414, 300, 851, 1061 ], + [ 98, 639, -300, 601, 403 ], + [ 173, 272, 180, 173, 272 ], + [ 644, 755, 330, 934, 976 ], + [ 375, 504, -300, 623, 576 ], + [ 585, 259, 210, 635, 515 ], + [ 851, 677, 60, 1011, 1074 ], + [ 970, 580, 270, 580, 970 ], + [ 846, 51, -360, 846, 51 ], + [ 136, 745, 180, 136, 745 ], + [ 737, 716, -150, 995, 987 ], + [ 632, 22, -300, 334, 558 ], + [ 734, 151, -30, 710, 498 ], + [ 488, 633, -30, 738, 792 ], + [ 412, 146, -300, 331, 429 ], + [ 497, 585, -30, 722, 755 ], + [ 280, 455, -120, 533, 469 ], + [ 857, 413, -330, 948, 786 ], + [ 712, 279, -270, 279, 712 ], + [ 719, 381, -300, 689, 812 ], + [ 460, 165, -330, 480, 372 ], + [ 751, 639, -330, 969, 928 ], + [ 870, 421, -180, 870, 421 ], + [ 327, 18, -300, 179, 292 ], + [ 790, 327, -150, 847, 677 ], + [ 900, 699, -330, 1128, 1054 ], + [ 330, 141, 90, 141, 330 ], + [ 663, 16, -240, 345, 581 ], + [ 744, 549, 30, 918, 846 ], + [ 892, 320, -360, 892, 320 ], + [ 1009, 664, -180, 1009, 664 ], + [ 33, 459, -330, 257, 414 ], + [ 108, 344, 90, 344, 108 ], + [ 385, 589, 120, 702, 626 ], + [ 481, 413, -330, 622, 598 ], + [ 771, 320, 360, 771, 320 ], + [ 817, 567, -240, 899, 989 ], + [ 444, 296, -240, 477, 531 ], + [ 622, 86, 300, 383, 581 ], + [ 148, 755, -150, 505, 727 ], + [ 181, 743, -240, 733, 526 ], + [ 434, 767, 210, 758, 880 ], + [ 514, 80, -210, 485, 324 ], + [ 131, 368, 360, 131, 368 ], + [ 796, 728, 30, 1053, 1027 ], + [ 872, 539, 330, 1024, 903 ], + [ 856, 383, 150, 932, 758 ], + [ 3, 716, -330, 360, 621 ], + [ 194, 414, -240, 455, 374 ], + [ 93, 525, -240, 501, 341 ], + [ 417, 660, -270, 660, 417 ], + [ 602, 218, -270, 218, 602 ], + [ 376, 603, -210, 626, 708 ], + [ 607, 701, 150, 875, 909 ], + [ 599, 529, 120, 757, 781 ], + [ 117, 415, -120, 416, 308 ], + [ 61, 289, 270, 289, 61 ], + [ 760, 291, 210, 803, 631 ], + [ 830, 436, -120, 792, 935 ], + [ 1013, 505, -360, 1013, 505 ], + [ 153, 50, 270, 50, 153 ], + [ 283, 501, -270, 501, 283 ], + [ 412, 15, 330, 363, 219 ], + [ 646, 469, 270, 469, 646 ], + [ 347, 150, 30, 375, 303 ], + [ 1019, 237, -330, 1000, 714 ], + [ 360, 283, -30, 452, 425 ], + [ 211, 85, 240, 178, 224 ], + [ 1016, 707, -90, 707, 1016 ], + [ 323, 698, -330, 628, 765 ], + [ 330, 44, -300, 202, 307 ], + [ 192, 256, 210, 293, 317 ], + [ 343, 564, 210, 578, 658 ], + [ 274, 281, -90, 281, 274 ], + [ 115, 541, 60, 526, 369 ], + [ 661, 537, 300, 794, 840 ], + [ 736, 38, -180, 736, 38 ], + [ 171, 196, -90, 196, 171 ], + [ 1018, 190, -150, 975, 673 ], + [ 397, 432, -210, 559, 571 ], + [ 450, 679, -180, 450, 679 ], + [ 568, 54, 60, 330, 518 ], + [ 330, 311, -120, 433, 440 ], + [ 111, 517, 150, 354, 502 ], + [ 517, 602, -90, 602, 517 ], + [ 99, 330, -300, 335, 250 ], + [ 1021, 113, -270, 113, 1021 ], + [ 271, 241, -90, 241, 271 ], + [ 657, 236, 120, 532, 685 ], + [ 961, 534, -210, 1099, 941 ], + [ 147, 103, -300, 162, 178 ], + [ 415, 529, -270, 529, 415 ], + [ 1023, 8, 60, 518, 889 ], + [ 335, 91, -210, 335, 245 ], + [ 20, 479, -360, 20, 479 ], + [ 426, 553, -30, 644, 692 ], + [ 523, 550, 60, 737, 727 ], + [ 671, 752, 300, 985, 957 ], + [ 55, 477, -210, 285, 439 ], + [ 715, 429, 300, 728, 833 ], + [ 927, 539, -330, 1071, 930 ], + [ 1018, 82, 180, 1018, 82 ], + [ 158, 81, 180, 158, 81 ], + [ 736, 332, 270, 332, 736 ], + [ 978, 347, 0, 978, 347 ], + [ 999, 666, -210, 1198, 1075 ], + [ 435, 290, 300, 467, 521 ], + [ 21, 25, 300, 31, 30 ], + [ 951, 66, 0, 951, 66 ], + [ 148, 602, -330, 429, 594 ], + [ 55, 528, 210, 310, 483 ], + [ 99, 524, 300, 502, 347 ], + [ 847, 642, 360, 847, 642 ], + [ 581, 425, -60, 657, 715 ], + [ 436, 390, 270, 390, 436 ], + [ 929, 371, 180, 929, 371 ], + [ 111, 697, -300, 659, 444 ], + [ 24, 712, -270, 712, 24 ], + [ 941, 657, -210, 1142, 1038 ], + [ 444, 768, -360, 444, 768 ], + [ 519, 41, 150, 469, 294 ], + [ 288, 115, -90, 115, 288 ], + [ 166, 749, -210, 517, 730 ], + [ 152, 417, 210, 339, 436 ], + [ 579, 744, -180, 579, 744 ], + [ 444, 673, 180, 444, 673 ], + [ 173, 755, 120, 740, 525 ], + [ 288, 5, 60, 147, 251 ], + [ 436, 710, -30, 731, 833 ], + [ 670, 275, -30, 717, 573 ], + [ 683, 664, 0, 683, 664 ], + [ 375, 111, 120, 283, 378 ], + [ 765, 236, 90, 236, 765 ], + [ 986, 349, -240, 794, 1026 ], + [ 749, 15, -270, 15, 749 ], + [ 8, 348, -360, 8, 348 ], + [ 786, 477, 360, 786, 477 ], + [ 443, 693, 360, 443, 693 ], + [ 26, 251, 330, 147, 230 ], + [ 483, 753, -180, 483, 753 ], + [ 940, 497, -270, 497, 940 ], + [ 426, 10, -150, 372, 221 ], + [ 64, 583, 60, 536, 346 ], + [ 701, 555, -330, 884, 831 ], + [ 870, 348, -330, 927, 735 ], + [ 1005, 354, 0, 1005, 354 ], + [ 1013, 175, -270, 175, 1013 ], + [ 1004, 507, -330, 1122, 940 ], + [ 1001, 526, -90, 526, 1001 ], + [ 921, 120, -120, 563, 856 ], + [ 183, 56, 360, 183, 56 ], + [ 329, 376, -360, 329, 376 ], + [ 623, 423, 210, 750, 676 ], + [ 207, 181, 0, 207, 181 ], + [ 256, 65, 330, 253, 184 ], + [ 324, 50, -60, 203, 305 ], + [ 855, 42, 90, 42, 855 ], + [ 998, 27, -150, 877, 521 ], + [ 16, 9, 360, 16, 9 ], + [ 392, 700, -270, 700, 392 ], + [ 749, 69, -240, 434, 681 ], + [ 743, 316, 150, 801, 644 ], + [ 749, 15, -210, 655, 386 ], + [ 509, 170, -30, 524, 401 ], + [ 1007, 362, 30, 1053, 817 ], + [ 945, 604, 90, 604, 945 ], + [ 331, 477, 120, 578, 523 ], + [ 973, 458, 150, 1071, 882 ], + [ 243, 469, 180, 243, 469 ], + [ 214, 763, 90, 763, 214 ], + [ 344, 557, 180, 344, 557 ], + [ 549, 345, -270, 345, 549 ], + [ 229, 139, -270, 139, 229 ], + [ 474, 520, -90, 520, 474 ], + [ 959, 506, 270, 506, 959 ], + [ 506, 447, 90, 447, 506 ], + [ 119, 694, -180, 119, 694 ], + [ 811, 656, 270, 656, 811 ], + [ 514, 70, -30, 479, 318 ], + [ 229, 230, -30, 312, 313 ], + [ 877, 487, -240, 860, 1001 ], + [ 592, 131, 90, 131, 592 ], + [ 727, 302, 240, 624, 779 ], + [ 882, 657, -30, 1091, 1010 ], + [ 240, 608, -270, 608, 240 ], + [ 78, 219, 150, 176, 227 ], + [ 722, 308, 90, 308, 722 ], + [ 977, 147, -30, 919, 615 ], + [ 818, 533, 60, 870, 974 ], + [ 261, 704, 270, 704, 261 ], + [ 721, 593, 0, 721, 593 ], + [ 898, 268, 120, 680, 910 ], + [ 510, 46, -330, 464, 294 ], + [ 307, 707, 300, 764, 618 ], + [ 796, 118, 150, 748, 498 ], + [ 935, 177, 360, 935, 177 ], + [ 646, 718, -90, 718, 646 ], + [ 258, 682, 60, 719, 564 ], + [ 744, 528, -180, 744, 528 ], + [ 298, 723, -240, 774, 618 ], + [ 158, 495, 360, 158, 495 ], + [ 668, 400, -150, 777, 679 ], + [ 327, 14, -90, 14, 327 ], + [ 389, 244, -150, 457, 404 ], + [ 302, 73, -30, 297, 214 ], + [ 1, 6, 120, 5, 2 ], + [ 1016, 490, 90, 490, 1016 ], + [ 392, 683, 0, 392, 683 ], + [ 989, 472, -240, 903, 1091 ], + [ 246, 695, -270, 695, 246 ], + [ 442, 46, 210, 404, 260 ], + [ 404, 547, -150, 622, 675 ], + [ 723, 24, -150, 637, 381 ], + [ 78, 315, 90, 315, 78 ], + [ 375, 540, 150, 594, 654 ], + [ 829, 541, 180, 829, 541 ], + [ 494, 534, -120, 708, 693 ], + [ 92, 60, -180, 92, 60 ], + [ 598, 33, 270, 33, 598 ], + [ 783, 218, 210, 786, 579 ], + [ 907, 549, 240, 927, 1059 ], + [ 667, 83, 30, 618, 405 ], + [ 960, 625, 60, 1020, 1143 ], + [ 247, 683, 360, 247, 683 ], + [ 883, 196, 120, 611, 861 ], + [ 590, 50, -90, 50, 590 ], + [ 305, 420, -330, 474, 516 ], + [ 672, 489, -270, 489, 672 ], + [ 924, 168, -240, 606, 883 ], + [ 782, 755, -30, 1054, 1045 ], + [ 542, 668, -240, 849, 802 ], + [ 363, 400, -150, 513, 526 ], + [ 912, 351, -300, 759, 964 ], + [ 467, 536, -360, 467, 536 ], + [ 442, 430, -180, 442, 430 ], + [ 112, 104, -120, 145, 147 ], + [ 503, 332, 270, 332, 503 ], + [ 581, 68, 0, 581, 68 ], + [ 739, 761, 180, 739, 761 ], + [ 941, 579, 150, 1103, 970 ], + [ 409, 217, 60, 392, 462 ], + [ 607, 489, -300, 726, 769 ], + [ 916, 404, 30, 995, 807 ], + [ 11, 754, -180, 11, 754 ], + [ 15, 317, 240, 281, 170 ], + [ 280, 401, 330, 442, 487 ], + [ 611, 10, -90, 10, 611 ], + [ 478, 446, -30, 635, 625 ], + [ 995, 232, -30, 976, 698 ], + [ 713, 169, -210, 701, 501 ], + [ 413, 475, 0, 413, 475 ], + [ 1002, 162, -270, 162, 1002 ], + [ 75, 81, 120, 107, 103 ], + [ 640, 89, 90, 89, 640 ], + [ 896, 100, -330, 825, 534 ], + [ 699, 310, 60, 617, 760 ], + [ 641, 768, 60, 985, 939 ], + [ 1, 358, -270, 358, 1 ], + [ 475, 336, -30, 578, 528 ], + [ 938, 103, 120, 557, 862 ], + [ 125, 412, -150, 313, 418 ], + [ 623, 395, 0, 623, 395 ], + [ 749, 450, 90, 450, 749 ], + [ 390, 162, 180, 390, 162 ], + [ 11, 66, 270, 66, 11 ], + [ 55, 590, -180, 55, 590 ], + [ 633, 302, -180, 633, 302 ], + [ 199, 303, 180, 199, 303 ], + [ 359, 659, -240, 750, 638 ], + [ 827, 595, -150, 1013, 927 ], + [ 496, 688, 240, 843, 772 ], + [ 799, 387, -120, 733, 884 ], + [ 293, 180, 330, 342, 302 ], + [ 920, 472, -270, 472, 920 ], + [ 640, 480, -210, 794, 734 ], + [ 493, 521, 360, 493, 521 ], + [ 759, 227, -90, 227, 759 ], + [ 1023, 376, 210, 1072, 836 ], + [ 741, 645, 90, 645, 741 ], + [ 906, 497, -60, 881, 1032 ], + [ 183, 101, -150, 208, 177 ], + [ 9, 700, 240, 609, 356 ], + [ 360, 152, -330, 387, 311 ], + [ 287, 73, 120, 206, 283 ], + [ 429, 553, -150, 647, 692 ], + [ 659, 154, 330, 646, 462 ], + [ 651, 723, -180, 651, 723 ], + [ 21, 722, 180, 21, 722 ], + [ 819, 509, 60, 850, 963 ], + [ 447, 420, -210, 597, 586 ], + [ 867, 557, -90, 557, 867 ], + [ 155, 563, -180, 155, 563 ], + [ 982, 64, -30, 881, 546 ], + [ 1, 279, 60, 242, 139 ], + [ 674, 600, -150, 882, 856 ], + [ 962, 326, 0, 962, 326 ], + [ 920, 46, -60, 498, 819 ], + [ 157, 61, -90, 61, 157 ], + [ 918, 675, -360, 918, 675 ], + [ 492, 242, 60, 455, 547 ], + [ 728, 124, -150, 691, 470 ], + [ 74, 240, -360, 74, 240 ], + [ 353, 208, -300, 356, 409 ], + [ 833, 209, -30, 825, 597 ], + [ 386, 714, -180, 386, 714 ], + [ 676, 667, 120, 915, 917 ], + [ 146, 588, 180, 146, 588 ], + [ 580, 705, 240, 900, 854 ], + [ 950, 626, 150, 1135, 1015 ], + [ 975, 226, -360, 975, 226 ], + [ 534, 4, -240, 269, 463 ], + [ 835, 59, 0, 835, 59 ], + [ 861, 323, 180, 861, 323 ], + [ 972, 179, -360, 972, 179 ], + [ 430, 469, 330, 606, 621 ], + [ 688, 207, 240, 522, 698 ], + [ 356, 316, 60, 451, 466 ], + [ 85, 751, 0, 85, 751 ], + [ 920, 695, -150, 1143, 1061 ], + [ 606, 658, 90, 658, 606 ], + [ 614, 290, 90, 290, 614 ], + [ 786, 148, 150, 754, 519 ], + [ 254, 26, -300, 149, 232 ], + [ 1022, 755, -120, 1164, 1262 ], + [ 20, 309, 330, 171, 278 ], + [ 994, 57, -210, 888, 544 ], + [ 807, 324, 90, 324, 807 ], + [ 381, 387, 90, 387, 381 ], + [ 894, 309, 0, 894, 309 ], + [ 193, 763, -90, 763, 193 ], + [ 817, 455, 180, 817, 455 ], + [ 421, 276, 330, 501, 449 ], + [ 102, 466, 360, 102, 466 ], + [ 213, 464, 330, 415, 508 ], + [ 562, 479, -120, 695, 725 ], + [ 512, 456, -60, 649, 671 ], + [ 737, 294, 270, 294, 737 ], + [ 359, 579, -120, 679, 599 ], + [ 982, 481, 180, 982, 481 ], + [ 483, 626, 180, 483, 626 ], + [ 861, 470, -120, 836, 979 ], + [ 601, 17, 150, 528, 314 ], + [ 538, 93, -150, 511, 349 ], + [ 509, 252, 300, 471, 566 ], + [ 462, 674, 30, 737, 814 ], + [ 827, 289, -270, 289, 827 ], + [ 242, 73, 0, 242, 73 ], + [ 89, 343, -180, 89, 343 ], + [ 451, 311, 300, 493, 545 ], + [ 200, 673, 150, 509, 681 ], + [ 965, 550, -150, 1109, 957 ], + [ 288, 232, -120, 344, 364 ], + [ 1003, 635, -30, 1185, 1051 ], + [ 290, 249, 210, 375, 360 ], + [ 196, 595, 120, 612, 465 ], + [ 740, 447, -360, 740, 447 ], + [ 868, 628, -270, 628, 868 ], + [ 363, 694, 60, 782, 661 ], + [ 629, 264, 360, 629, 264 ], + [ 512, 413, 270, 413, 512 ], + [ 204, 369, 60, 421, 360 ], + [ 522, 584, 270, 584, 522 ], + [ 862, 568, 150, 1030, 921 ], + [ 302, 17, -360, 302, 17 ], + [ 78, 164, 210, 148, 180 ], + [ 751, 718, -90, 718, 751 ], + [ 785, 601, -240, 912, 978 ], + [ 916, 105, -300, 548, 845 ], + [ 480, 577, -60, 738, 703 ], + [ 457, 192, 360, 457, 192 ], + [ 307, 345, -30, 437, 452 ], + [ 888, 736, -210, 1137, 1079 ], + [ 755, 615, 330, 960, 910 ], + [ 443, 73, 360, 443, 73 ], + [ 462, 131, -240, 343, 464 ], + [ 250, 694, -270, 694, 250 ], + [ 632, 514, 300, 759, 804 ], + [ 827, 433, -360, 827, 433 ], + [ 922, 25, 210, 810, 482 ], + [ 345, 367, -360, 345, 367 ], + [ 317, 597, 0, 317, 597 ], + [ 780, 495, -30, 922, 819 ], + [ 998, 293, -180, 998, 293 ], + [ 948, 625, -120, 1014, 1132 ], + [ 921, 203, 0, 921, 203 ], + [ 87, 390, -60, 380, 270 ], + [ 211, 96, -300, 188, 230 ], + [ 111, 716, 120, 675, 453 ], + [ 152, 639, 120, 628, 449 ], + [ 961, 130, -270, 130, 961 ], + [ 1001, 367, 330, 1049, 818 ], + [ 477, 183, 60, 396, 504 ], + [ 933, 163, 330, 889, 607 ], + [ 160, 106, 210, 190, 171 ], + [ 508, 28, -360, 508, 28 ], + [ 6, 93, 30, 51, 83 ], + [ 428, 251, 120, 430, 494 ], + [ 511, 334, 60, 544, 609 ], + [ 147, 448, -60, 460, 351 ], + [ 840, 400, 60, 765, 927 ], + [ 997, 383, -330, 1054, 830 ], + [ 926, 740, -150, 1170, 1103 ], + [ 490, 671, 30, 759, 825 ], + [ 442, 23, 120, 240, 392 ], + [ 203, 403, 150, 376, 449 ], + [ 234, 407, 240, 468, 405 ], + [ 785, 728, -270, 728, 785 ], + [ 439, 343, 60, 516, 551 ], + [ 23, 453, -270, 453, 23 ], + [ 459, 314, 120, 501, 553 ], + [ 42, 294, -240, 275, 182 ], + [ 115, 220, -270, 220, 115 ], + [ 431, 587, -360, 431, 587 ], + [ 965, 150, -330, 910, 612 ], + [ 615, 303, 60, 569, 683 ], + [ 303, 478, -300, 565, 501 ], + [ 114, 298, -330, 247, 314 ], + [ 260, 627, 0, 260, 627 ], + [ 851, 644, -330, 1058, 983 ], + [ 1014, 219, 0, 1014, 219 ], + [ 686, 251, 270, 251, 686 ], + [ 868, 336, -270, 336, 868 ], + [ 1011, 659, 300, 1075, 1204 ], + [ 1024, 615, -300, 1044, 1193 ], + [ 43, 307, 0, 43, 307 ], + [ 623, 534, -270, 534, 623 ], + [ 722, 619, 0, 722, 619 ], + [ 767, 46, -120, 422, 686 ], + [ 243, 684, -240, 713, 551 ], + [ 323, 676, -30, 616, 746 ], + [ 821, 423, 210, 922, 775 ], + [ 687, 305, -210, 746, 606 ], + [ 845, 295, -330, 878, 677 ], + [ 762, 295, 270, 295, 762 ], + [ 878, 327, -180, 878, 327 ], + [ 373, 26, 360, 373, 26 ], + [ 505, 567, 210, 720, 742 ], + [ 10, 374, 240, 328, 194 ], + [ 350, 556, 180, 350, 556 ], + [ 524, 30, 90, 30, 524 ], + [ 989, 645, -270, 645, 989 ], + [ 765, 392, 30, 858, 721 ], + [ 988, 257, 330, 983, 717 ], + [ 41, 60, -150, 64, 71 ], + [ 938, 718, 180, 938, 718 ], + [ 196, 230, 210, 283, 296 ], + [ 165, 608, 0, 165, 608 ], + [ 959, 615, 360, 959, 615 ], + [ 790, 109, 180, 790, 109 ], + [ 508, 502, 210, 689, 688 ], + [ 104, 475, 60, 462, 327 ], + [ 262, 281, -300, 373, 366 ], + [ 827, 253, -30, 842, 632 ], + [ 760, 284, 30, 800, 625 ], + [ 62, 219, -30, 162, 221 ], + [ 822, 365, 180, 822, 365 ], + [ 593, 488, 30, 757, 719 ], + [ 95, 439, -120, 426, 301 ], + [ 95, 263, 0, 95, 263 ], + [ 835, 644, -270, 644, 835 ], + [ 590, 722, 180, 590, 722 ], + [ 180, 150, -270, 150, 180 ], + [ 292, 2, -30, 252, 148 ], + [ 746, 571, 240, 867, 931 ], + [ 256, 617, -300, 661, 529 ], + [ 723, 466, 60, 765, 859 ], + [ 472, 142, -210, 479, 357 ], + [ 7, 213, 210, 112, 186 ], + [ 362, 284, -270, 284, 362 ], + [ 862, 141, 360, 862, 141 ], + [ 1006, 583, 300, 1006, 1162 ], + [ 760, 718, -300, 1001, 1017 ], + [ 887, 169, -300, 589, 852 ], + [ 326, 728, 270, 728, 326 ], + [ 144, 152, 120, 203, 199 ], + [ 252, 694, -180, 252, 694 ], + [ 846, 279, -60, 663, 871 ], + [ 43, 284, 150, 179, 266 ], + [ 848, 555, -300, 904, 1011 ], + [ 980, 433, -180, 980, 433 ], + [ 946, 419, -360, 946, 419 ], + [ 849, 221, 330, 845, 615 ], + [ 952, 117, -240, 576, 881 ], + [ 32, 361, -270, 361, 32 ], + [ 897, 469, -120, 853, 1010 ], + [ 536, 657, -210, 792, 835 ], + [ 795, 524, 60, 851, 950 ], + [ 219, 556, 330, 466, 591 ], + [ 950, 424, 120, 841, 1033 ], + [ 11, 390, -180, 11, 390 ], + [ 283, 331, 210, 410, 427 ], + [ 308, 199, -330, 365, 325 ], + [ 267, 145, -210, 303, 258 ], + [ 450, 168, 150, 473, 368 ], + [ 578, 73, -150, 536, 351 ], + [ 909, 474, -240, 864, 1023 ], + [ 115, 303, 270, 303, 115 ], + [ 717, 467, 60, 762, 853 ], + [ 673, 411, -300, 692, 787 ], + [ 344, 419, 90, 419, 344 ], + [ 592, 630, -330, 827, 841 ], + [ 374, 93, -150, 369, 267 ], + [ 450, 293, 0, 450, 293 ], + [ 681, 630, 150, 904, 885 ], + [ 369, 295, 240, 438, 466 ], + [ 681, 208, -60, 519, 693 ], + [ 846, 295, 240, 677, 879 ], + [ 684, 64, -60, 395, 624 ], + [ 238, 569, 360, 238, 569 ], + [ 357, 58, 0, 357, 58 ], + [ 994, 502, -120, 931, 1110 ], + [ 25, 14, -30, 27, 24 ], + [ 345, 351, 240, 475, 473 ], + [ 857, 93, 120, 509, 787 ], + [ 569, 370, -360, 569, 370 ], + [ 378, 112, -150, 382, 285 ], + [ 818, 747, 150, 1081, 1054 ], + [ 637, 491, 210, 796, 742 ], + [ 54, 669, 0, 54, 669 ], + [ 17, 169, 60, 154, 98 ], + [ 539, 146, -210, 539, 394 ], + [ 876, 164, -180, 876, 164 ], + [ 312, 422, 150, 481, 519 ], + [ 139, 297, 240, 325, 268 ], + [ 805, 723, -150, 1058, 1027 ], + [ 839, 238, -30, 844, 625 ], + [ 127, 83, -60, 134, 150 ], + [ 832, 561, -330, 1000, 901 ], + [ 597, 601, 330, 817, 818 ], + [ 96, 613, -240, 578, 388 ], + [ 696, 249, -120, 563, 726 ], + [ 941, 137, 60, 589, 882 ], + [ 180, 371, -300, 410, 340 ], + [ 911, 475, 0, 911, 475 ], + [ 743, 310, -30, 797, 639 ], + [ 42, 171, 180, 42, 171 ], + [ 515, 266, 270, 266, 515 ], + [ 959, 122, 60, 585, 891 ], + [ 9, 569, -90, 569, 9 ], + [ 975, 640, -240, 1041, 1163 ], + [ 117, 394, 0, 117, 394 ], + [ 477, 331, 120, 525, 577 ], + [ 31, 465, -270, 465, 31 ], + [ 148, 381, 210, 318, 403 ], + [ 660, 169, -240, 475, 654 ], + [ 87, 201, -90, 201, 87 ], + [ 855, 587, 180, 855, 587 ], + [ 710, 538, 300, 819, 883 ], + [ 288, 544, 90, 544, 288 ], + [ 665, 507, -30, 828, 771 ], + [ 836, 594, 360, 836, 594 ], + [ 314, 183, -60, 313, 362 ], + [ 997, 206, -360, 997, 206 ], + [ 126, 316, 0, 126, 316 ], + [ 912, 43, 180, 912, 43 ], + [ 62, 108, 360, 62, 108 ], + [ 464, 749, 180, 464, 749 ], + [ 197, 513, -30, 426, 542 ], + [ 91, 728, -240, 675, 441 ], + [ 743, 459, 240, 768, 872 ], + [ 201, 318, 60, 375, 333 ], + [ 183, 553, 240, 569, 434 ], + [ 605, 532, -300, 763, 789 ], + [ 623, 627, 0, 623, 627 ], + [ 123, 542, 60, 530, 377 ], + [ 873, 589, 150, 1050, 945 ], + [ 866, 169, 150, 833, 577 ], + [ 616, 316, -120, 581, 690 ], + [ 59, 384, -150, 242, 361 ], + [ 227, 173, 300, 262, 282 ], + [ 45, 323, -150, 199, 301 ], + [ 655, 460, -360, 655, 460 ], + [ 484, 145, 150, 491, 366 ], + [ 587, 611, 30, 813, 822 ], + [ 87, 704, -210, 427, 652 ], + [ 668, 590, -360, 668, 590 ], + [ 368, 471, -210, 553, 590 ], + [ 41, 165, 90, 165, 41 ], + [ 398, 209, -270, 209, 398 ], + [ 702, 379, -120, 678, 796 ], + [ 593, 412, 210, 718, 652 ], + [ 907, 135, -90, 135, 907 ], + [ 934, 498, 60, 897, 1057 ], + [ 646, 170, -120, 469, 643 ], + [ 168, 235, -180, 168, 235 ], + [ 413, 736, -330, 725, 843 ], + [ 419, 243, 120, 419, 482 ], + [ 648, 274, 270, 274, 648 ], + [ 274, 572, -270, 572, 274 ], + [ 411, 330, 90, 330, 411 ], + [ 778, 6, -240, 393, 675 ], + [ 551, 686, -120, 868, 819 ], + [ 936, 618, 360, 936, 618 ], + [ 490, 334, -210, 591, 532 ], + [ 858, 460, 30, 973, 826 ], + [ 115, 1, -30, 99, 58 ], + [ 159, 315, 210, 294, 351 ], + [ 830, 33, -270, 33, 830 ], + [ 696, 238, 300, 552, 721 ], + [ 841, 546, -120, 892, 1000 ], + [ 466, 362, -120, 546, 583 ], + [ 641, 7, -210, 558, 325 ], + [ 995, 708, -360, 995, 708 ], + [ 989, 307, -30, 1009, 760 ], + [ 185, 182, -330, 251, 250 ], + [ 717, 268, -330, 754, 590 ], + [ 183, 387, -30, 351, 426 ], + [ 995, 241, 0, 995, 241 ], + [ 124, 763, 240, 722, 488 ], + [ 15, 625, 30, 324, 548 ], + [ 345, 207, -360, 345, 207 ], + [ 683, 687, -360, 683, 687 ], + [ 910, 665, 330, 1120, 1031 ], + [ 938, 638, -120, 1021, 1130 ], + [ 385, 8, 60, 199, 337 ], + [ 445, 546, 300, 694, 658 ], + [ 506, 682, -60, 842, 779 ], + [ 986, 660, 180, 986, 660 ], + [ 485, 753, 180, 485, 753 ], + [ 302, 764, 30, 643, 812 ], + [ 846, 254, 240, 642, 858 ], + [ 847, 765, 150, 1115, 1085 ], + [ 857, 680, 60, 1017, 1082 ], + [ 786, 615, -90, 615, 786 ], + [ 100, 135, -60, 165, 153 ], + [ 681, 469, -300, 746, 823 ], + [ 595, 80, -360, 595, 80 ], + [ 1023, 51, 270, 51, 1023 ], + [ 749, 415, 270, 415, 749 ], + [ 467, 641, 240, 787, 724 ], + [ 1017, 507, -240, 947, 1132 ], + [ 819, 374, -240, 733, 895 ], + [ 511, 248, -330, 566, 470 ], + [ 66, 69, 270, 69, 66 ], + [ 469, 144, -360, 469, 144 ], + [ 883, 655, 90, 655, 883 ], + [ 1000, 332, 180, 1000, 332 ], + [ 1003, 331, 210, 1033, 787 ], + [ 861, 125, -120, 537, 807 ], + [ 697, 474, -240, 758, 839 ], + [ 528, 469, 240, 669, 691 ], + [ 696, 315, -150, 759, 620 ], + [ 860, 698, 120, 1033, 1092 ], + [ 906, 747, 180, 906, 747 ], + [ 747, 330, 300, 658, 811 ], + [ 768, 224, 210, 776, 577 ], + [ 389, 206, -210, 439, 371 ], + [ 116, 190, 90, 190, 116 ], + [ 935, 67, 210, 842, 524 ], + [ 259, 590, -60, 639, 519 ], + [ 437, 217, -360, 437, 217 ], + [ 265, 739, -60, 771, 598 ], + [ 592, 616, -120, 828, 819 ], + [ 225, 527, -150, 457, 567 ], + [ 974, 319, 180, 974, 319 ], + [ 891, 126, -360, 891, 126 ], + [ 656, 417, -150, 776, 688 ], + [ 864, 504, 30, 1000, 867 ], + [ 489, 437, 90, 437, 489 ], + [ 279, 630, -90, 630, 279 ], + [ 701, 190, 150, 702, 514 ], + [ 723, 388, 120, 697, 819 ], + [ 140, 64, -30, 152, 125 ], + [ 486, 233, -270, 233, 486 ], + [ 803, 195, 30, 792, 570 ], + [ 536, 95, 150, 511, 348 ], + [ 567, 587, -180, 567, 587 ], + [ 873, 466, 300, 839, 989 ], + [ 408, 65, -30, 385, 260 ], + [ 31, 274, -150, 162, 251 ], + [ 440, 31, 30, 396, 246 ], + [ 114, 573, -330, 384, 552 ], + [ 772, 678, -270, 678, 772 ], + [ 203, 274, -60, 337, 312 ], + [ 336, 108, 150, 344, 260 ], + [ 894, 510, 240, 888, 1028 ], + [ 594, 167, 60, 441, 597 ], + [ 850, 54, -240, 471, 762 ], + [ 753, 359, -180, 753, 359 ], + [ 214, 382, 90, 382, 214 ], + [ 514, 712, 120, 873, 800 ], + [ 43, 29, -60, 45, 51 ], + [ 89, 608, -150, 380, 570 ], + [ 219, 760, 90, 760, 219 ], + [ 659, 244, 210, 691, 539 ], + [ 334, 146, -30, 361, 293 ], + [ 134, 591, 120, 578, 410 ], + [ 717, 460, 180, 717, 460 ], + [ 896, 257, -240, 670, 902 ], + [ 137, 417, 150, 326, 428 ], + [ 767, 34, 90, 34, 767 ], + [ 414, 66, 120, 263, 390 ], + [ 825, 132, -30, 779, 526 ], + [ 91, 296, -60, 300, 226 ], + [ 745, 22, 180, 745, 22 ], + [ 520, 272, 330, 585, 496 ], + [ 974, 372, 150, 1029, 807 ], + [ 626, 141, -150, 612, 434 ], + [ 350, 45, 120, 213, 324 ], + [ 552, 147, -240, 402, 550 ], + [ 239, 722, -210, 567, 743 ], + [ 873, 265, -150, 888, 664 ], + [ 521, 115, 0, 521, 115 ], + [ 979, 183, 270, 183, 979 ], + [ 401, 741, 300, 841, 717 ], + [ 147, 363, -180, 147, 363 ], + [ 86, 325, 180, 86, 325 ], + [ 813, 26, 300, 428, 717 ], + [ 105, 288, 360, 105, 288 ], + [ 763, 702, -240, 989, 1010 ], + [ 952, 112, -300, 572, 880 ], + [ 163, 767, -30, 524, 745 ], + [ 485, 389, 90, 389, 485 ], + [ 983, 355, 240, 797, 1028 ], + [ 852, 655, 240, 992, 1064 ], + [ 749, 765, -180, 749, 765 ], + [ 1007, 61, 150, 902, 555 ], + [ 737, 671, 180, 737, 671 ], + [ 654, 749, -300, 975, 940 ], + [ 631, 553, -360, 631, 553 ], + [ 803, 498, -240, 832, 943 ], + [ 914, 620, -240, 993, 1100 ], + [ 353, 215, 120, 362, 411 ], + [ 968, 185, -270, 185, 968 ], + [ 803, 55, 360, 803, 55 ], + [ 601, 616, 360, 601, 616 ], + [ 882, 604, -330, 1065, 963 ], + [ 571, 388, 330, 687, 621 ], + [ 295, 111, 300, 242, 310 ], + [ 402, 583, 90, 583, 402 ], + [ 420, 417, -180, 420, 417 ], + [ 588, 334, -330, 676, 582 ], + [ 753, 598, -120, 893, 950 ], + [ 412, 556, 60, 687, 634 ], + [ 545, 390, 120, 610, 665 ], + [ 526, 72, -30, 490, 325 ], + [ 502, 733, -180, 502, 733 ], + [ 560, 393, 210, 680, 619 ], + [ 487, 613, 300, 773, 727 ], + [ 388, 146, 120, 319, 408 ], + [ 1, 461, -210, 230, 398 ], + [ 278, 133, 90, 133, 278 ], + [ 357, 698, -60, 781, 658 ], + [ 723, 238, -270, 238, 723 ], + [ 310, 646, 120, 713, 590 ], + [ 994, 272, 180, 994, 272 ], + [ 451, 649, 150, 714, 786 ], + [ 713, 300, -210, 767, 615 ], + [ 467, 665, -360, 467, 665 ], + [ 369, 187, -240, 346, 411 ], + [ 24, 188, 210, 113, 174 ], + [ 234, 396, 360, 234, 396 ], + [ 889, 663, 270, 663, 889 ], + [ 293, 437, -240, 524, 470 ], + [ 438, 669, -360, 438, 669 ], + [ 78, 646, -90, 646, 78 ], + [ 836, 216, -210, 831, 603 ], + [ 524, 750, 90, 750, 524 ], + [ 733, 332, -30, 799, 654 ], + [ 736, 608, 180, 736, 608 ], + [ 933, 626, 360, 933, 626 ], + [ 721, 33, -30, 640, 389 ], + [ 686, 699, -120, 947, 943 ], + [ 556, 151, 300, 407, 556 ], + [ 743, 479, 210, 882, 785 ], + [ 767, 537, 90, 537, 767 ], + [ 130, 396, 300, 406, 310 ], + [ 357, 20, 270, 20, 357 ], + [ 984, 570, -150, 1136, 985 ], + [ 449, 353, -300, 530, 564 ], + [ 164, 285, 300, 327, 284 ], + [ 127, 57, 330, 137, 112 ], + [ 618, 571, 270, 571, 618 ], + [ 968, 220, -330, 948, 674 ], + [ 875, 9, 150, 761, 444 ], + [ 649, 584, -90, 584, 649 ], + [ 258, 681, 300, 717, 563 ], + [ 155, 181, 330, 224, 234 ], + [ 27, 151, 120, 144, 97 ], + [ 340, 487, -270, 487, 340 ], + [ 441, 610, 0, 441, 610 ], + [ 350, 705, 60, 785, 655 ], + [ 303, 400, -150, 461, 496 ], + [ 164, 357, 60, 390, 320 ], + [ 225, 245, 90, 245, 225 ], + [ 924, 731, -90, 731, 924 ], + [ 291, 156, -180, 291, 156 ], + [ 184, 272, 0, 184, 272 ], + [ 103, 292, 150, 235, 303 ], + [ 782, 547, -150, 950, 864 ], + [ 906, 109, -300, 546, 838 ], + [ 387, 371, -360, 387, 371 ], + [ 966, 598, 30, 1135, 1000 ], + [ 259, 721, -360, 259, 721 ], + [ 868, 121, -120, 538, 811 ], + [ 464, 46, -180, 464, 46 ], + [ 838, 264, 0, 838, 264 ], + [ 72, 402, 240, 383, 262 ], + [ 570, 479, -210, 732, 698 ], + [ 244, 297, 330, 359, 379 ], + [ 567, 208, -330, 595, 463 ], + [ 679, 497, 30, 836, 769 ], + [ 706, 454, -120, 745, 837 ], + [ 242, 648, -180, 242, 648 ], + [ 253, 531, -60, 585, 484 ], + [ 589, 111, 0, 589, 111 ], + [ 876, 739, 240, 1077, 1127 ], + [ 346, 25, -120, 194, 311 ], + [ 178, 452, 360, 178, 452 ], + [ 399, 634, -120, 747, 661 ], + [ 324, 292, 90, 292, 324 ], + [ 394, 33, -180, 394, 33 ], + [ 959, 562, 270, 562, 959 ], + [ 272, 743, 150, 606, 777 ], + [ 547, 164, -90, 164, 547 ], + [ 982, 606, 30, 1153, 1015 ], + [ 455, 494, 0, 455, 494 ], + [ 279, 753, 30, 617, 791 ], + [ 638, 118, -270, 118, 638 ], + [ 610, 417, 330, 736, 666 ], + [ 977, 660, -120, 1059, 1175 ], + [ 597, 187, -90, 187, 597 ], + [ 880, 138, -300, 559, 831 ], + [ 743, 342, -330, 814, 667 ], + [ 445, 752, -150, 760, 872 ], + [ 854, 720, -330, 1099, 1050 ], + [ 387, 292, 150, 481, 445 ], + [ 905, 501, 150, 1033, 885 ], + [ 431, 211, 270, 211, 431 ], + [ 558, 668, -90, 668, 558 ], + [ 507, 633, -180, 507, 633 ], + [ 843, 312, 0, 843, 312 ], + [ 199, 203, 120, 275, 272 ], + [ 303, 760, -300, 809, 642 ], + [ 374, 325, -300, 467, 485 ], + [ 662, 198, -360, 662, 198 ], + [ 734, 488, -60, 788, 879 ], + [ 440, 398, -330, 580, 564 ], + [ 126, 721, -120, 686, 469 ], + [ 993, 371, -210, 1044, 816 ], + [ 367, 750, -360, 367, 750 ], + [ 621, 615, -60, 842, 844 ], + [ 100, 764, 150, 468, 710 ], + [ 787, 223, 150, 792, 585 ], + [ 906, 503, -300, 888, 1035 ], + [ 1001, 231, -90, 231, 1001 ], + [ 8, 13, -360, 8, 13 ], + [ 428, 343, 0, 428, 343 ], + [ 491, 436, -30, 642, 623 ], + [ 835, 412, 330, 928, 774 ], + [ 20, 687, 300, 603, 360 ], + [ 49, 385, 150, 234, 356 ], + [ 493, 460, 150, 656, 643 ], + [ 183, 282, 360, 183, 282 ], + [ 886, 193, 120, 609, 862 ], + [ 999, 175, 330, 952, 651 ], + [ 350, 181, 360, 350, 181 ], + [ 352, 502, -60, 609, 555 ], + [ 883, 102, 360, 883, 102 ], + [ 327, 728, 0, 327, 728 ], + [ 264, 743, -60, 773, 599 ], + [ 177, 11, 300, 97, 158 ], + [ 909, 380, 0, 909, 380 ], + [ 610, 517, 270, 517, 610 ], + [ 608, 413, -270, 413, 608 ], + [ 251, 394, -120, 465, 413 ], + [ 202, 656, 60, 668, 502 ], + [ 170, 152, -180, 170, 152 ], + [ 594, 46, -90, 46, 594 ], + [ 575, 290, -120, 537, 641 ], + [ 82, 488, -150, 314, 463 ], + [ 504, 620, -150, 745, 788 ], + [ 415, 533, 210, 625, 668 ], + [ 939, 222, -30, 923, 661 ], + [ 813, 678, -360, 813, 678 ], + [ 944, 98, 0, 944, 98 ], + [ 284, 249, -90, 249, 284 ], + [ 888, 377, 60, 769, 957 ], + [ 113, 54, 90, 54, 113 ], + [ 498, 485, -360, 498, 485 ], + [ 828, 546, 90, 546, 828 ], + [ 99, 156, -30, 162, 184 ], + [ 409, 467, -270, 467, 409 ], + [ 200, 403, -60, 447, 374 ], + [ 679, 244, -150, 709, 549 ], + [ 685, 184, -60, 500, 685 ], + [ 191, 396, 210, 362, 437 ], + [ 572, 294, -180, 572, 294 ], + [ 130, 378, -120, 391, 300 ], + [ 773, 751, 330, 1044, 1036 ], + [ 778, 604, 120, 911, 974 ], + [ 409, 678, 270, 678, 409 ], + [ 867, 216, -30, 857, 620 ], + [ 1010, 366, 360, 1010, 366 ], + [ 425, 107, -150, 421, 304 ], + [ 743, 620, 30, 953, 908 ], + [ 167, 763, -330, 525, 744 ], + [ 946, 424, -30, 1030, 840 ], + [ 179, 521, 330, 415, 540 ], + [ 507, 332, 300, 540, 605 ], + [ 457, 147, 150, 468, 354 ], + [ 110, 453, 60, 446, 321 ], + [ 994, 335, 270, 335, 994 ], + [ 453, 324, -120, 506, 553 ], + [ 448, 642, -30, 707, 780 ], + [ 768, 431, -150, 880, 756 ], + [ 307, 556, -150, 542, 634 ], + [ 374, 497, 240, 616, 571 ], + [ 831, 631, 0, 831, 631 ], + [ 768, 243, 330, 786, 594 ], + [ 683, 585, -270, 585, 683 ], + [ 377, 667, 150, 659, 765 ], + [ 976, 645, -270, 645, 976 ], + [ 838, 216, 60, 605, 833 ], + [ 163, 552, -60, 558, 417 ], + [ 654, 359, 360, 654, 359 ], + [ 947, 589, 150, 1114, 982 ], + [ 210, 101, -120, 191, 231 ], + [ 37, 724, -240, 645, 393 ], + [ 557, 532, -30, 747, 739 ], + [ 495, 276, -180, 495, 276 ], + [ 628, 558, -300, 796, 822 ], + [ 341, 522, 330, 555, 622 ], + [ 500, 382, -210, 624, 579 ], + [ 66, 503, 330, 308, 469 ], + [ 488, 225, -60, 437, 534 ], + [ 460, 168, -240, 374, 481 ], + [ 148, 325, -150, 290, 354 ], + [ 499, 352, -180, 499, 352 ], + [ 667, 2, 330, 577, 335 ], + [ 133, 373, -150, 301, 388 ], + [ 379, 76, -360, 379, 76 ], + [ 490, 332, 150, 590, 531 ], + [ 435, 706, -210, 729, 827 ], + [ 668, 755, 270, 755, 668 ], + [ 612, 353, -270, 353, 612 ], + [ 10, 697, -90, 697, 10 ], + [ 193, 40, 210, 186, 130 ], + [ 509, 414, -180, 509, 414 ], + [ 766, 146, -180, 766, 146 ], + [ 707, 245, 180, 707, 245 ], + [ 1016, 529, 240, 965, 1143 ], + [ 20, 128, -180, 20, 128 ], + [ 743, 454, -240, 764, 869 ], + [ 950, 187, -240, 636, 914 ], + [ 804, 646, 90, 646, 804 ], + [ 957, 653, 30, 1154, 1044 ], + [ 309, 30, 60, 180, 282 ], + [ 94, 411, -270, 411, 94 ], + [ 347, 217, -150, 408, 360 ], + [ 603, 747, 90, 747, 603 ], + [ 331, 741, -150, 656, 806 ], + [ 160, 755, 0, 160, 755 ], + [ 431, 544, -330, 645, 686 ], + [ 618, 488, -150, 778, 731 ], + [ 788, 323, -270, 323, 788 ], + [ 404, 272, -360, 404, 272 ], + [ 948, 504, -330, 1072, 909 ], + [ 522, 574, 60, 757, 739 ], + [ 648, 66, 270, 66, 648 ], + [ 967, 518, 240, 931, 1095 ], + [ 589, 766, 210, 892, 956 ], + [ 915, 118, 210, 850, 558 ], + [ 387, 441, 0, 387, 441 ], + [ 464, 136, -270, 136, 464 ], + [ 790, 727, 30, 1047, 1024 ], + [ 952, 262, 300, 701, 955 ], + [ 960, 204, 30, 933, 656 ], + [ 1008, 596, -150, 1169, 1019 ], + [ 579, 313, -90, 313, 579 ], + [ 438, 270, -330, 514, 452 ], + [ 270, 711, -330, 588, 750 ], + [ 64, 629, -210, 369, 575 ], + [ 865, 151, 210, 824, 562 ], + [ 343, 499, 330, 546, 603 ], + [ 471, 323, 300, 514, 568 ], + [ 5, 268, -180, 5, 268 ], + [ 926, 220, 0, 926, 220 ], + [ 470, 208, -150, 510, 414 ], + [ 778, 641, 150, 993, 942 ], + [ 150, 202, -330, 230, 249 ], + [ 212, 404, 360, 212, 404 ], + [ 270, 451, 210, 458, 525 ], + [ 485, 332, 360, 485, 332 ], + [ 262, 588, 90, 588, 262 ], + [ 220, 173, -330, 276, 259 ], + [ 124, 176, -60, 212, 195 ], + [ 375, 102, 150, 375, 274 ], + [ 898, 454, 330, 1003, 842 ], + [ 166, 269, 210, 277, 315 ], + [ 876, 381, -330, 948, 767 ], + [ 921, 540, 60, 928, 1067 ], + [ 891, 742, -240, 1088, 1141 ], + [ 674, 337, 60, 628, 751 ], + [ 659, 533, -90, 533, 659 ], + [ 284, 698, 60, 745, 594 ], + [ 339, 22, 240, 187, 303 ], + [ 750, 303, 330, 800, 637 ], + [ 431, 208, 30, 477, 395 ], + [ 388, 332, 300, 480, 502 ], + [ 176, 221, -90, 221, 176 ], + [ 231, 144, -300, 240, 272 ], + [ 824, 43, -330, 734, 448 ], + [ 995, 548, 0, 995, 548 ], + [ 582, 274, -240, 527, 640 ], + [ 953, 486, -300, 897, 1068 ], + [ 529, 740, -300, 905, 828 ], + [ 340, 535, 0, 340, 535 ], + [ 285, 90, 210, 290, 219 ], + [ 835, 380, -210, 913, 745 ], + [ 719, 512, 0, 719, 512 ], + [ 86, 685, 150, 416, 634 ], + [ 172, 535, 180, 172, 535 ], + [ 222, 512, -30, 447, 554 ], + [ 721, 180, 240, 515, 713 ], + [ 906, 127, -30, 847, 563 ], + [ 997, 523, -60, 950, 1124 ], + [ 94, 10, -300, 55, 86 ], + [ 617, 223, -210, 645, 500 ], + [ 393, 81, 150, 380, 265 ], + [ 612, 620, -90, 620, 612 ], + [ 100, 684, -180, 100, 684 ], + [ 804, 44, 360, 804, 44 ], + [ 540, 211, 90, 211, 540 ], + [ 1007, 751, 270, 751, 1007 ], + [ 815, 663, -360, 815, 663 ], + [ 247, 642, 150, 534, 678 ], + [ 665, 712, 180, 665, 712 ], + [ 771, 407, -360, 771, 407 ], + [ 995, 701, -300, 1104, 1211 ], + [ 702, 392, 330, 802, 690 ], + [ 67, 467, 240, 436, 291 ], + [ 343, 301, 270, 301, 343 ], + [ 308, 705, -270, 705, 308 ], + [ 955, 692, -270, 692, 955 ], + [ 817, 535, 360, 817, 535 ], + [ 847, 720, 240, 1046, 1092 ], + [ 551, 450, 180, 551, 450 ], + [ 267, 259, -180, 267, 259 ], + [ 279, 237, -240, 344, 358 ], + [ 400, 764, 150, 728, 860 ], + [ 322, 45, -150, 300, 199 ], + [ 131, 302, 150, 264, 326 ], + [ 1023, 533, 90, 533, 1023 ], + [ 147, 480, 0, 147, 480 ], + [ 271, 324, -210, 396, 415 ], + [ 255, 192, -270, 192, 255 ], + [ 71, 604, 180, 71, 604 ], + [ 835, 36, -330, 741, 448 ], + [ 93, 245, -90, 245, 93 ], + [ 286, 545, -90, 545, 286 ], + [ 1000, 17, -60, 513, 874 ], + [ 288, 115, 240, 243, 306 ], + [ 1000, 114, 0, 1000, 114 ], + [ 604, 223, -270, 223, 604 ], + [ 106, 427, 60, 422, 304 ], + [ 322, 618, 240, 695, 586 ], + [ 472, 670, 60, 815, 743 ], + [ 197, 528, 120, 555, 433 ], + [ 267, 597, 360, 267, 597 ], + [ 653, 43, 120, 363, 585 ], + [ 9, 25, 150, 19, 25 ], + [ 448, 240, 270, 240, 448 ], + [ 265, 222, 360, 265, 222 ], + [ 792, 674, -180, 792, 674 ], + [ 934, 753, 240, 1118, 1184 ], + [ 484, 226, 90, 226, 484 ], + [ 289, 580, 0, 289, 580 ], + [ 900, 727, -240, 1079, 1141 ], + [ 533, 159, 360, 533, 159 ], + [ 493, 649, -360, 493, 649 ], + [ 155, 655, -330, 461, 644 ], + [ 863, 223, -90, 223, 863 ], + [ 700, 421, 120, 714, 815 ], + [ 688, 247, 30, 718, 557 ], + [ 973, 179, 0, 973, 179 ], + [ 803, 542, 240, 869, 965 ], + [ 431, 758, 60, 871, 752 ], + [ 952, 665, 0, 952, 665 ], + [ 128, 297, 150, 258, 319 ], + [ 100, 666, 60, 626, 419 ], + [ 129, 14, -60, 75, 118 ], + [ 190, 661, 150, 494, 665 ], + [ 570, 417, -180, 570, 417 ], + [ 221, 165, 60, 253, 273 ], + [ 769, 126, 240, 492, 727 ], + [ 274, 728, 0, 274, 728 ], + [ 80, 282, 0, 80, 282 ], + [ 658, 228, -90, 228, 658 ], + [ 157, 324, 180, 157, 324 ], + [ 892, 399, 90, 399, 892 ], + [ 442, 495, 90, 495, 442 ], + [ 866, 637, 0, 866, 637 ], + [ 561, 296, -360, 561, 296 ], + [ 818, 461, -180, 818, 461 ], + [ 379, 270, -60, 422, 463 ], + [ 178, 475, -120, 499, 391 ], + [ 699, 535, 180, 699, 535 ], + [ 182, 260, -360, 182, 260 ], + [ 551, 378, -30, 665, 602 ], + [ 291, 278, 360, 291, 278 ], + [ 919, 609, 90, 609, 919 ], + [ 541, 490, -60, 693, 713 ], + [ 19, 143, 240, 132, 87 ], + [ 53, 756, -60, 680, 423 ], + [ 305, 272, 210, 399, 387 ], + [ 725, 405, -90, 405, 725 ], + [ 66, 161, -300, 171, 137 ], + [ 807, 297, -60, 659, 846 ], + [ 827, 710, 300, 1027, 1071 ], + [ 255, 160, -180, 255, 160 ], + [ 214, 81, -330, 225, 176 ], + [ 833, 487, 150, 964, 837 ], + [ 253, 501, 300, 559, 469 ], + [ 66, 540, 270, 540, 66 ], + [ 494, 1, -210, 427, 246 ], + [ 257, 544, 180, 257, 544 ], + [ 652, 593, 360, 652, 593 ], + [ 737, 430, -120, 739, 852 ], + [ 143, 282, -180, 143, 282 ], + [ 53, 472, -30, 280, 435 ], + [ 333, 633, 60, 714, 604 ], + [ 401, 489, -210, 591, 622 ], + [ 98, 678, 270, 678, 98 ], + [ 1009, 727, 60, 1134, 1236 ], + [ 879, 329, 60, 724, 925 ], + [ 87, 522, -180, 87, 522 ], + [ 858, 243, -330, 864, 638 ], + [ 819, 27, 90, 27, 819 ], + [ 151, 134, 360, 151, 134 ], + [ 429, 174, 60, 365, 458 ], + [ 921, 423, -60, 825, 1008 ], + [ 496, 724, -330, 791, 874 ], + [ 719, 29, 330, 636, 384 ], + [ 585, 17, 270, 17, 585 ], + [ 147, 676, -150, 464, 657 ], + [ 733, 740, 360, 733, 740 ], + [ 1020, 615, -150, 1190, 1042 ], + [ 48, 461, -120, 422, 271 ], + [ 672, 574, 0, 672, 574 ], + [ 647, 128, 180, 647, 128 ], + [ 227, 50, -150, 220, 155 ], + [ 651, 421, -210, 773, 689 ], + [ 701, 192, -180, 701, 192 ], + [ 631, 631, -150, 861, 860 ], + [ 506, 741, -240, 894, 807 ], + [ 820, 522, -270, 522, 820 ], + [ 805, 519, 330, 956, 851 ], + [ 89, 554, 30, 354, 524 ], + [ 432, 290, -180, 432, 290 ], + [ 953, 7, -60, 481, 828 ], + [ 680, 177, 0, 680, 177 ], + [ 972, 665, -330, 1173, 1061 ], + [ 179, 422, -150, 365, 453 ], + [ 448, 127, -270, 127, 448 ], + [ 738, 507, -300, 807, 892 ], + [ 905, 354, 210, 959, 758 ], + [ 10, 189, -30, 102, 169 ], + [ 959, 255, -240, 700, 956 ], + [ 474, 578, 30, 699, 737 ], + [ 755, 524, 30, 915, 831 ], + [ 181, 266, 210, 288, 319 ], + [ 698, 227, 120, 545, 716 ], + [ 751, 361, -240, 688, 829 ], + [ 37, 696, -120, 620, 379 ], + [ 163, 482, -360, 163, 482 ], + [ 252, 392, -30, 413, 465 ], + [ 13, 399, 150, 210, 351 ], + [ 465, 350, -330, 577, 535 ], + [ 631, 706, 240, 925, 898 ], + [ 159, 503, 0, 159, 503 ], + [ 719, 639, 240, 911, 941 ], + [ 491, 394, -270, 394, 491 ], + [ 123, 189, 60, 225, 200 ], + [ 318, 217, 0, 318, 217 ], + [ 682, 338, -270, 338, 682 ], + [ 697, 527, 90, 527, 697 ], + [ 159, 536, -270, 536, 159 ], + [ 896, 116, 90, 116, 896 ], + [ 949, 589, 30, 1115, 984 ], + [ 748, 708, -240, 986, 1000 ], + [ 222, 479, -360, 222, 479 ], + [ 50, 78, 30, 82, 92 ], + [ 180, 170, 210, 239, 236 ], + [ 790, 409, -330, 888, 748 ], + [ 280, 152, 0, 280, 152 ], + [ 411, 675, -240, 790, 691 ], + [ 41, 26, 270, 26, 41 ], + [ 202, 698, -360, 202, 698 ], + [ 829, 641, 210, 1037, 968 ], + [ 348, 433, 150, 517, 547 ], + [ 538, 599, -120, 787, 764 ], + [ 555, 636, -60, 827, 798 ], + [ 73, 2, 120, 38, 63 ], + [ 867, 594, -240, 947, 1046 ], + [ 925, 36, -90, 36, 925 ], + [ 409, 344, -180, 409, 344 ], + [ 595, 374, -150, 701, 620 ], + [ 470, 525, -210, 669, 688 ], + [ 499, 378, -330, 621, 576 ], + [ 289, 638, 90, 638, 289 ], + [ 1021, 273, -90, 273, 1021 ], + [ 343, 689, -210, 641, 767 ], + [ 793, 743, -210, 1057, 1038 ], + [ 445, 625, 360, 445, 625 ], + [ 641, 550, -360, 641, 550 ], + [ 16, 89, 0, 16, 89 ], + [ 289, 534, 360, 289, 534 ], + [ 596, 119, 120, 400, 574 ], + [ 808, 493, -270, 493, 808 ], + [ 850, 709, 360, 850, 709 ], + [ 445, 707, -120, 833, 738 ], + [ 838, 195, -210, 822, 586 ], + [ 30, 22, -240, 33, 35 ], + [ 249, 355, -360, 249, 355 ], + [ 235, 68, 150, 237, 175 ], + [ 269, 79, 240, 201, 271 ], + [ 761, 295, 30, 806, 635 ], + [ 726, 742, 150, 999, 1004 ], + [ 367, 580, -120, 684, 606 ], + [ 512, 449, -180, 512, 449 ], + [ 483, 15, -240, 254, 424 ], + [ 817, 643, -60, 964, 1028 ], + [ 22, 665, -30, 351, 587 ], + [ 217, 84, 300, 180, 229 ], + [ 221, 260, 360, 221, 260 ], + [ 958, 461, -300, 877, 1059 ], + [ 788, 263, 0, 788, 263 ], + [ 307, 40, -30, 284, 188 ], + [ 1007, 315, -210, 1029, 775 ], + [ 316, 698, 210, 621, 761 ], + [ 569, 292, 240, 536, 637 ], + [ 739, 137, 120, 488, 706 ], + [ 146, 153, 0, 146, 153 ], + [ 605, 315, 90, 315, 605 ], + [ 512, 480, 330, 682, 672 ], + [ 509, 430, 30, 655, 626 ], + [ 610, 253, 300, 522, 654 ], + [ 80, 483, 330, 310, 458 ], + [ 539, 470, -120, 675, 700 ], + [ 747, 707, -180, 747, 707 ], + [ 528, 365, 120, 579, 638 ], + [ 329, 151, 240, 294, 359 ], + [ 987, 260, -360, 987, 260 ], + [ 483, 713, -60, 857, 774 ], + [ 90, 329, -330, 241, 329 ], + [ 43, 710, 90, 710, 43 ], + [ 610, 400, 330, 727, 651 ], + [ 504, 460, 60, 649, 666 ], + [ 450, 96, -240, 307, 436 ], + [ 815, 655, -300, 974, 1032 ], + [ 63, 283, 60, 276, 195 ], + [ 724, 530, 210, 891, 820 ], + [ 542, 501, -300, 704, 719 ], + [ 563, 95, -360, 563, 95 ], + [ 1004, 162, -30, 949, 642 ], + [ 36, 194, -90, 194, 36 ], + [ 665, 652, 300, 896, 901 ], + [ 607, 261, 0, 607, 261 ], + [ 169, 598, 90, 598, 169 ], + [ 357, 441, 0, 357, 441 ], + [ 462, 488, 270, 488, 462 ], + [ 29, 263, 30, 156, 242 ], + [ 820, 669, -240, 988, 1043 ], + [ 934, 323, -150, 969, 746 ], + [ 974, 308, 30, 997, 753 ], + [ 429, 334, 210, 537, 502 ], + [ 830, 65, 90, 65, 830 ], + [ 739, 520, 360, 739, 520 ], + [ 237, 646, 180, 237, 646 ], + [ 885, 145, -120, 567, 838 ], + [ 359, 491, 330, 555, 604 ], + [ 210, 512, -150, 436, 547 ], + [ 767, 359, -240, 694, 842 ], + [ 967, 291, 60, 735, 982 ], + [ 270, 253, 360, 270, 253 ], + [ 813, 574, -60, 902, 991 ], + [ 589, 428, 0, 589, 428 ], + [ 210, 214, -240, 289, 287 ], + [ 179, 391, -360, 179, 391 ], + [ 944, 287, -210, 960, 719 ], + [ 249, 556, 270, 556, 249 ], + [ 204, 713, 0, 204, 713 ], + [ 509, 520, 360, 509, 520 ], + [ 682, 477, -90, 477, 682 ], + [ 262, 679, 150, 565, 717 ], + [ 251, 520, -60, 574, 477 ], + [ 686, 194, 360, 686, 194 ], + [ 182, 351, -180, 182, 351 ], + [ 371, 485, 210, 563, 604 ], + [ 396, 425, -270, 425, 396 ], + [ 614, 611, 270, 611, 614 ], + [ 461, 763, 240, 890, 780 ], + [ 991, 377, 0, 991, 377 ], + [ 974, 120, -300, 590, 903 ], + [ 320, 316, 360, 320, 316 ], + [ 3, 504, 120, 437, 253 ], + [ 451, 251, 300, 441, 515 ], + [ 444, 387, -90, 387, 444 ], + [ 723, 664, -360, 723, 664 ], + [ 498, 193, 30, 527, 415 ], + [ 656, 653, -120, 893, 894 ], + [ 529, 230, -120, 462, 572 ], + [ 329, 205, 240, 341, 386 ], + [ 821, 168, 360, 821, 168 ], + [ 925, 407, -90, 407, 925 ], + [ 909, 409, -330, 991, 808 ], + [ 562, 747, -90, 747, 562 ], + [ 473, 312, 300, 505, 565 ], + [ 852, 85, 180, 852, 85 ], + [ 852, 459, 360, 852, 459 ], + [ 394, 182, 270, 182, 394 ], + [ 750, 579, -270, 579, 750 ], + [ 74, 57, -60, 84, 92 ], + [ 924, 672, 90, 672, 924 ], + [ 910, 597, -270, 597, 910 ], + [ 292, 511, 150, 507, 587 ], + [ 346, 164, 120, 314, 380 ], + [ 734, 518, -330, 894, 815 ], + [ 613, 389, -240, 643, 723 ], + [ 353, 260, 210, 434, 400 ], + [ 349, 555, -360, 349, 555 ], + [ 191, 349, 210, 339, 396 ], + [ 340, 404, 240, 519, 495 ], + [ 762, 329, 150, 823, 664 ], + [ 383, 243, 0, 383, 243 ], + [ 546, 462, -270, 462, 546 ], + [ 229, 721, -90, 721, 229 ], + [ 908, 503, -330, 1037, 889 ], + [ 977, 194, 30, 943, 656 ], + [ 136, 458, 300, 463, 346 ], + [ 930, 720, 90, 720, 930 ], + [ 943, 95, -330, 863, 553 ], + [ 702, 349, 60, 652, 781 ], + [ 536, 152, -360, 536, 152 ], + [ 243, 439, -120, 500, 429 ], + [ 745, 80, 330, 684, 441 ], + [ 903, 251, 270, 251, 903 ], + [ 256, 164, 30, 303, 269 ], + [ 299, 129, 210, 322, 260 ], + [ 859, 230, -90, 230, 859 ], + [ 742, 160, -150, 721, 509 ], + [ 341, 98, -60, 254, 344 ], + [ 404, 624, 300, 740, 661 ], + [ 1006, 258, -300, 725, 1000 ], + [ 1021, 440, 120, 891, 1103 ], + [ 336, 230, 180, 336, 230 ], + [ 266, 139, -300, 252, 299 ], + [ 132, 331, -150, 279, 352 ], + [ 669, 554, -30, 855, 814 ], + [ 439, 430, 210, 594, 590 ], + [ 820, 219, 360, 820, 219 ], + [ 112, 474, -300, 465, 333 ], + [ 553, 8, 300, 282, 482 ], ]; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Component/Utility/UrlHelperTest.php +++ b/core/tests/Drupal/Tests/Component/Utility/UrlHelperTest.php @@ -269,14 +269,6 @@ public static function providerTestParse() { 'fragment' => 'footer', ], ], - 'absolute fragment, no query' => [ - 'http://www.example.com/my/path#footer', - [ - 'path' => 'http://www.example.com/my/path', - 'query' => [], - 'fragment' => 'footer', - ], - ], [ 'http://', [ @@ -303,14 +295,6 @@ public static function providerTestParse() { 'fragment' => 'footer', ], ], - 'relative fragment, no query' => [ - '/my/path#footer', - [ - 'path' => '/my/path', - 'query' => [], - 'fragment' => 'footer', - ], - ], ]; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Access/CsrfTokenGeneratorTest.php +++ b/core/tests/Drupal/Tests/Core/Access/CsrfTokenGeneratorTest.php @@ -142,9 +142,7 @@ public function testValidateParameterTypes($token, $value) { // The following check might throw PHP fatals and notices, so we disable // error assertions. - set_error_handler(function () { - return TRUE; - }); + set_error_handler(function () {return TRUE;}); $this->assertFalse($this->generator->validate($token, $value)); restore_error_handler(); } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php +++ b/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php @@ -87,12 +87,12 @@ public function providerTestMerge() { public function testAddCacheTags() { $metadata = new CacheableMetadata(); $add_expected = [ - [[], [] ], - [['foo:bar'], ['foo:bar'] ], - [['foo:baz'], ['foo:bar', 'foo:baz'] ], - [['axx:first', 'foo:baz'], ['axx:first', 'foo:bar', 'foo:baz'] ], - [[], ['axx:first', 'foo:bar', 'foo:baz'] ], - [['axx:first'], ['axx:first', 'foo:bar', 'foo:baz'] ], + [ [], [] ], + [ ['foo:bar'], ['foo:bar'] ], + [ ['foo:baz'], ['foo:bar', 'foo:baz'] ], + [ ['axx:first', 'foo:baz'], ['axx:first', 'foo:bar', 'foo:baz'] ], + [ [], ['axx:first', 'foo:bar', 'foo:baz'] ], + [ ['axx:first'], ['axx:first', 'foo:bar', 'foo:baz'] ], ]; foreach ($add_expected as $data) { only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php +++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php @@ -553,7 +553,7 @@ public function testLoadMultipleAll() { $bar_config_object->getName()->willReturn('foo'); $this->configFactory->listAll('the_provider.the_config_prefix.') - ->willReturn(['the_provider.the_config_prefix.foo', 'the_provider.the_config_prefix.bar']); + ->willReturn(['the_provider.the_config_prefix.foo' , 'the_provider.the_config_prefix.bar']); $this->configFactory->loadMultiple(['the_provider.the_config_prefix.foo', 'the_provider.the_config_prefix.bar']) ->willReturn([$foo_config_object->reveal(), $bar_config_object->reveal()]); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php +++ b/core/tests/Drupal/Tests/Core/Datetime/DateHelperTest.php @@ -29,102 +29,78 @@ public function testWeekDaysOrdered($first_day, $expected) { public function providerTestWeekDaysOrdered() { $data = []; - $data[] = [ - 0, - [ - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - ], - ]; - $data[] = [ - 1, - [ - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - 0 => 'Sunday', - ] - ]; - $data[] = [ - 2, - [ - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - 0 => 'Sunday', - 1 => 'Monday', - ], - ]; - $data[] = [ - 3, - [ - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - ], - ]; - $data[] = [ - 4, - [ - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - ], - ]; - $data[] = [ - 5, - [ - 5 => 'Friday', - 6 => 'Saturday', - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - ], - ]; - $data[] = [ - 6, - [ - 6 => 'Saturday', - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - ], - ]; - $data[] = [ - 7, - [ - 0 => 'Sunday', - 1 => 'Monday', - 2 => 'Tuesday', - 3 => 'Wednesday', - 4 => 'Thursday', - 5 => 'Friday', - 6 => 'Saturday', - ], - ]; + $data[] = [0, [ + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + ]]; + $data[] = [1, [ + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + ]]; + $data[] = [2, [ + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + ]]; + $data[] = [3, [ + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + ]]; + $data[] = [4, [ + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + ]]; + $data[] = [5, [ + 5 => 'Friday', + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + ]]; + $data[] = [6, [ + 6 => 'Saturday', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + ]]; + $data[] = [7, [ + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', + ]]; return $data; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/DrupalKernel/DiscoverServiceProvidersTest.php +++ b/core/tests/Drupal/Tests/Core/DrupalKernel/DiscoverServiceProvidersTest.php @@ -52,7 +52,8 @@ public function testDiscoverServiceNoContainerYamls() { 'app' => [ 'core' => 'core/core.services.yml', ], - 'site' => [], + 'site' => [ + ], ]; $this->assertAttributeSame($expect, 'serviceYamls', $kernel); } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php +++ b/core/tests/Drupal/Tests/Core/DrupalKernel/DrupalKernelTest.php @@ -177,14 +177,12 @@ public function testFindSitePath() { EOD; // Create the expected directory structure. - vfsStream::create([ - 'sites' => [ - 'sites.php' => $sites_php, - 'example' => [ - 'settings.php' => 'test', - ], - ], - ]); + vfsStream::create(['sites' => [ + 'sites.php' => $sites_php, + 'example' => [ + 'settings.php' => 'test' + ] + ]]); $request = new Request(); $request->server->set('SERVER_NAME', 'www.example.org'); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Entity/EntityFormTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityFormTest.php @@ -73,35 +73,30 @@ public function testFormId($expected, $definition) { public function providerTestFormIds() { return [ ['node_article_form', [ - 'entity_type' => 'node', - 'bundle' => 'article', - 'operation' => 'default', - ], - ], + 'entity_type' => 'node', + 'bundle' => 'article', + 'operation' => 'default', + ]], ['node_article_delete_form', [ - 'entity_type' => 'node', - 'bundle' => 'article', - 'operation' => 'delete', - ], - ], + 'entity_type' => 'node', + 'bundle' => 'article', + 'operation' => 'delete', + ]], ['user_user_form', [ - 'entity_type' => 'user', - 'bundle' => 'user', - 'operation' => 'default', - ], - ], + 'entity_type' => 'user', + 'bundle' => 'user', + 'operation' => 'default', + ]], ['user_form', [ - 'entity_type' => 'user', - 'bundle' => '', - 'operation' => 'default', - ], - ], + 'entity_type' => 'user', + 'bundle' => '', + 'operation' => 'default', + ]], ['user_delete_form', [ - 'entity_type' => 'user', - 'bundle' => '', - 'operation' => 'delete', - ], - ], + 'entity_type' => 'user', + 'bundle' => '', + 'operation' => 'delete', + ]], ]; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeBundleInfoTest.php @@ -194,13 +194,15 @@ public function testGetBundleInfo($entity_type_id, $expected) { public function providerTestGetBundleInfo() { return [ ['apple', [ - 'apple' => ['label' => 'Apple'], + 'apple' => [ + 'label' => 'Apple', ], - ], + ]], ['banana', [ - 'banana' => ['label' => 'Banana'], + 'banana' => [ + 'label' => 'Banana', ], - ], + ]], ['pear', []], ]; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/Sql/SqlContentEntityStorageTest.php @@ -444,10 +444,26 @@ public function testGetTableMappingSimpleWithFields(array $entity_keys) { */ public function providerTestGetTableMappingSimple() { return [ - [['id' => 'test_id', 'bundle' => NULL, 'uuid' => NULL]], - [['id' => 'test_id', 'bundle' => 'test_bundle', 'uuid' => NULL]], - [['id' => 'test_id', 'bundle' => NULL, 'uuid' => 'test_uuid']], - [['id' => 'test_id', 'bundle' => 'test_bundle', 'uuid' => 'test_uuid']], + [[ + 'id' => 'test_id', + 'bundle' => NULL, + 'uuid' => NULL, + ]], + [[ + 'id' => 'test_id', + 'bundle' => 'test_bundle', + 'uuid' => NULL, + ]], + [[ + 'id' => 'test_id', + 'bundle' => NULL, + 'uuid' => 'test_uuid', + ]], + [[ + 'id' => 'test_id', + 'bundle' => 'test_bundle', + 'uuid' => 'test_uuid', + ]], ]; } @@ -1121,7 +1137,9 @@ public function testLoadMultiplePersistentCached() { $this->cache->expects($this->once()) ->method('getMultiple') ->with([$key]) - ->will($this->returnValue([$key => (object) ['data' => $entity]])); + ->will($this->returnValue([$key => (object) [ + 'data' => $entity, + ]])); $this->cache->expects($this->never()) ->method('set'); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php +++ b/core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php @@ -295,7 +295,7 @@ public function testGetWithoutData() { * @covers ::set */ public function testSet() { - $id_items = [['value' => $this->id + 1] ]; + $id_items = [ ['value' => $this->id + 1] ]; $this->fieldItemList->expects($this->once()) ->method('setValue') @@ -309,7 +309,7 @@ public function testSet() { */ public function testSetWithoutData() { $this->entityAdapter->setValue(NULL); - $id_items = [['value' => $this->id + 1] ]; + $id_items = [ ['value' => $this->id + 1] ]; $this->setExpectedException(MissingDataException::class); $this->entityAdapter->set('id', $id_items); } @@ -372,7 +372,7 @@ public function testGetDataDefinition() { $definition = $this->entityAdapter->getDataDefinition(); $this->assertInstanceOf('\Drupal\Core\Entity\TypedData\EntityDataDefinitionInterface', $definition); $this->assertEquals($definition->getEntityTypeId(), $this->entityTypeId); - $this->assertEquals($definition->getBundles(), [$this->bundle ]); + $this->assertEquals($definition->getBundles(), [ $this->bundle ]); } /** only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/EntityReferenceSelection/EntityReferenceSelectionUnitTest.php +++ b/core/tests/Drupal/Tests/Core/EntityReferenceSelection/EntityReferenceSelectionUnitTest.php @@ -165,7 +165,7 @@ public function testSetConfigurationBcLevel() { 'setting3' => 'foobar', 'handler_settings' => [ 'setting1' => 'foo', - 'setting2' => ['qux' => 'qux value'], + 'setting2' => ['qux' => 'qux value'], 'setting3' => 'foobar', ], ]; @@ -213,11 +213,11 @@ public function defaultConfiguration() { ] + parent::defaultConfiguration(); } - public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {} + public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) { } - public function validateReferenceableEntities(array $ids) {} + public function validateReferenceableEntities(array $ids) { } - public function countReferenceableEntities($match = NULL, $match_operator = 'CONTAINS') {} + public function countReferenceableEntities($match = NULL, $match_operator = 'CONTAINS') { } } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php +++ b/core/tests/Drupal/Tests/Core/Extension/ModuleHandlerTest.php @@ -374,14 +374,12 @@ public function testCachedGetImplementations() { public function testCachedGetImplementationsMissingMethod() { $this->cacheBackend->expects($this->exactly(1)) ->method('get') - ->will($this->onConsecutiveCalls((object) [ - 'data' => [ - 'hook' => [ - 'module_handler_test' => [], - 'module_handler_test_missing' => [], - ], - ], - ])); + ->will($this->onConsecutiveCalls( + (object) ['data' => ['hook' => [ + 'module_handler_test' => [], + 'module_handler_test_missing' => [], + ]]] + )); // Ensure buildImplementationInfo doesn't get called and that we work off cached results. $module_handler = $this->getMockBuilder(ModuleHandler::class) @@ -447,8 +445,9 @@ public function testGetHookInfo() { ->method('get') ->will($this->onConsecutiveCalls( NULL, - (object) ['data' => ['hook_foo' => ['group' => 'hook']]] - )); + (object) ['data' => + ['hook_foo' => ['group' => 'hook']]]) + ); // Results from building from mocked environment. $this->assertEquals([ only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test/module_handler_test.module +++ b/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test/module_handler_test.module @@ -14,6 +14,4 @@ function module_handler_test_hook_info() { ]; } -function module_handler_test_hook($arg) { - return $arg; -} +function module_handler_test_hook($arg) { return $arg; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_all1/module_handler_test_all1.module +++ b/core/tests/Drupal/Tests/Core/Extension/modules/module_handler_test_all1/module_handler_test_all1.module @@ -8,6 +8,4 @@ /** * Returns an array to test nested merge in invoke all. */ -function module_handler_test_all1_hook($arg) { - return [$arg]; -} +function module_handler_test_all1_hook($arg) { return [$arg]; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php +++ b/core/tests/Drupal/Tests/Core/Form/FormBuilderTest.php @@ -888,8 +888,8 @@ public function getFormId() { public function buildForm(array $form, FormStateInterface $form_state) { return test_form_id(); } - public function validateForm(array &$form, FormStateInterface $form_state) {} - public function submitForm(array &$form, FormStateInterface $form_state) {} + public function validateForm(array &$form, FormStateInterface $form_state) { } + public function submitForm(array &$form, FormStateInterface $form_state) { } } class TestFormInjected extends TestForm implements ContainerInjectionInterface { only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php +++ b/core/tests/Drupal/Tests/Core/Form/FormCacheTest.php @@ -299,18 +299,16 @@ public function testLoadCachedFormStateWithFiles() { ->method('isAnonymous') ->willReturn(TRUE); - $cached_form_state = [ - 'build_info' => [ - 'files' => [ - [ - 'module' => 'a_module', - 'type' => 'the_type', - 'name' => 'some_name', - ], - ['module' => 'another_module'], - ], + $cached_form_state = ['build_info' => ['files' => [ + [ + 'module' => 'a_module', + 'type' => 'the_type', + 'name' => 'some_name', ], - ]; + [ + 'module' => 'another_module', + ], + ]]]; $this->moduleHandler->expects($this->at(0)) ->method('loadInclude') ->with('a_module', 'the_type', 'some_name'); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php +++ b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php @@ -439,7 +439,7 @@ public function getFormId() { } public function buildForm(array $form, FormStateInterface $form_state) {} - public function validateForm(array &$form, FormStateInterface $form_state) {} - public function submitForm(array &$form, FormStateInterface $form_state) {} + public function validateForm(array &$form, FormStateInterface $form_state) { } + public function submitForm(array &$form, FormStateInterface $form_state) { } } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php +++ b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php @@ -131,12 +131,10 @@ public function testProcessInbound() { ->getMock(); $negotiator->expects($this->any()) ->method('getNegotiationMethods') - ->will($this->returnValue([ - LanguageNegotiationUrl::METHOD_ID => [ - 'class' => 'Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl', - 'weight' => 9, - ], - ])); + ->will($this->returnValue([LanguageNegotiationUrl::METHOD_ID => [ + 'class' => 'Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl', + 'weight' => 9, + ]])); $method = new LanguageNegotiationUrl(); $method->setConfig($config_factory_stub); $method->setLanguageManager($this->languageManager); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php +++ b/core/tests/Drupal/Tests/Core/Plugin/Context/ContextTest.php @@ -168,4 +168,4 @@ protected function setUpDefaultValue($default_value = NULL) { /** * Test interface used for mocking. */ -interface TypedDataCacheableDependencyInterface extends CacheableDependencyInterface, TypedDataInterface {} +interface TypedDataCacheableDependencyInterface extends CacheableDependencyInterface, TypedDataInterface { } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDirectoryDiscoveryTest.php +++ b/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDirectoryDiscoveryTest.php @@ -28,7 +28,8 @@ public function testGetDefinitions() { 'subdir2' => [ 'plugin3.yml' => "id: plugin3\ntest_provider: module_a", ], - 'subdir3' => [], + 'subdir3' => [ + ] ], 'module_b' => [ 'subdir1' => [ only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDiscoveryTest.php +++ b/core/tests/Drupal/Tests/Core/Plugin/Discovery/YamlDiscoveryTest.php @@ -88,8 +88,8 @@ public function testGetDefinitionsWithTranslatableDefinitions() { ], 'test_2' => [ 'test_2.test.yml' => $file_2, - ], - ]); + ]] + ); $discovery = new YamlDiscovery('test', ['test_1' => vfsStream::url('root/test_1'), 'test_2' => vfsStream::url('root/test_2')]); $discovery->addTranslatableProperty('title', 'title_context'); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php +++ b/core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php @@ -30,7 +30,7 @@ class PlaceholderGeneratorTest extends RendererTestBase { public function testCreatePlaceholderGeneratesValidHtmlMarkup(array $element) { $build = $this->placeholderGenerator->createPlaceholder($element); - $original_placeholder_markup = (string) $build['#markup']; + $original_placeholder_markup = (string)$build['#markup']; $processed_placeholder_markup = Html::serialize(Html::load($build['#markup'])); $this->assertEquals($original_placeholder_markup, $processed_placeholder_markup); only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php +++ b/core/tests/Drupal/Tests/Core/Render/RendererBubblingTest.php @@ -554,23 +554,17 @@ public function providerTestBubblingWithPrerender() { $data = []; // Test element without theme. - $data[] = [ - [ - 'foo' => [ - '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'], - ], - ], - ]; + $data[] = [[ + 'foo' => [ + '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'], + ]]]; // Test element with theme. - $data[] = [ - [ - '#theme' => 'common_test_render_element', - 'foo' => [ - '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'], - ], - ], - ]; + $data[] = [[ + '#theme' => 'common_test_render_element', + 'foo' => [ + '#pre_render' => [__NAMESPACE__ . '\\BubblingTest::bubblingPreRender'], + ]]]; return $data; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php +++ b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php @@ -875,16 +875,13 @@ public function testInvalidLazyBuilderArguments() { */ public function testScalarLazybuilderCallbackContext() { $element = []; - $element['#lazy_builder'] = [ - '\Drupal\Tests\Core\Render\PlaceholdersTest::callback', - [ - 'string' => 'foo', - 'bool' => TRUE, - 'int' => 1337, - 'float' => 3.14, - 'null' => NULL, - ], - ]; + $element['#lazy_builder'] = ['\Drupal\Tests\Core\Render\PlaceholdersTest::callback', [ + 'string' => 'foo', + 'bool' => TRUE, + 'int' => 1337, + 'float' => 3.14, + 'null' => NULL, + ]]; $result = $this->renderer->renderRoot($element); $this->assertInstanceOf('\Drupal\Core\Render\Markup', $result); @@ -897,18 +894,15 @@ public function testScalarLazybuilderCallbackContext() { */ public function testNonScalarLazybuilderCallbackContext() { $element = []; - $element['#lazy_builder'] = [ - '\Drupal\Tests\Core\Render\PlaceholdersTest::callback', - [ - 'string' => 'foo', - 'bool' => TRUE, - 'int' => 1337, - 'float' => 3.14, - 'null' => NULL, - // array is not one of the scalar types. - 'array' => ['hi!'], - ], - ]; + $element['#lazy_builder'] = ['\Drupal\Tests\Core\Render\PlaceholdersTest::callback', [ + 'string' => 'foo', + 'bool' => TRUE, + 'int' => 1337, + 'float' => 3.14, + 'null' => NULL, + // array is not one of the scalar types. + 'array' => ['hi!'], + ]]; $this->setExpectedException(\DomainException::class, "A #lazy_builder callback's context may only contain scalar values or NULL."); $this->renderer->renderRoot($element); @@ -1080,7 +1074,7 @@ protected function generatePlaceholdersWithChildrenTestElement(array $args_1, ar ], 'placeholders' => [ 'parent-x-parent' => [ - '#lazy_builder' => [__NAMESPACE__ . '\\PlaceholdersTest::callback', $args_1], + '#lazy_builder' => [ __NAMESPACE__ . '\\PlaceholdersTest::callback', $args_1], ], ], ], only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php +++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php @@ -74,145 +74,98 @@ public function providerTestRenderBasic() { // Pass an empty string. $data[] = ['', '']; // Previously printed, see ::renderTwice for a more integration-like test. - $data[] = [ - ['#markup' => 'foo', '#printed' => TRUE], - '', - ]; + $data[] = [[ + '#markup' => 'foo', + '#printed' => TRUE, + ], '']; // Printed in pre_render. - $data[] = [ - [ - '#markup' => 'foo', - '#pre_render' => [[new TestCallables(), 'preRenderPrinted']], - ], - '', - ]; + $data[] = [[ + '#markup' => 'foo', + '#pre_render' => [[new TestCallables(), 'preRenderPrinted']] + ], '']; // Basic #markup based renderable array. - $data[] = [ - ['#markup' => 'foo'], - 'foo', - ]; + $data[] = [[ + '#markup' => 'foo', + ], 'foo']; // Basic #plain_text based renderable array. - $data[] = [ - ['#plain_text' => 'foo'], - 'foo', - ]; + $data[] = [[ + '#plain_text' => 'foo', + ], 'foo']; // Mixing #plain_text and #markup based renderable array. - $data[] = [ - ['#plain_text' => 'foo', '#markup' => 'bar'], - '<em>foo</em>', - ]; + $data[] = [[ + '#plain_text' => 'foo', + '#markup' => 'bar', + ], '<em>foo</em>']; // Safe strings in #plain_text are still escaped. - $data[] = [ - ['#plain_text' => Markup::create('foo')], - '<em>foo</em>', - ]; + $data[] = [[ + '#plain_text' => Markup::create('foo'), + ], '<em>foo</em>']; // Renderable child element. - $data[] = [ - ['child' => ['#markup' => 'bar']], - 'bar', - ]; + $data[] = [[ + 'child' => ['#markup' => 'bar'], + ], 'bar']; // XSS filtering test. - $data[] = [ - ['child' => ['#markup' => "This is test"]], - "This is alert('XSS') test", - ]; + $data[] = [[ + 'child' => ['#markup' => "This is test"], + ], "This is alert('XSS') test"]; // XSS filtering test. - $data[] = [ - [ - 'child' => [ - '#markup' => "This is test", - '#allowed_tags' => ['script'], - ], - ], - "This is test", - ]; + $data[] = [[ + 'child' => ['#markup' => "This is test", '#allowed_tags' => ['script']], + ], "This is test"]; // XSS filtering test. - $data[] = [ - [ - 'child' => [ - '#markup' => "This is test", - '#allowed_tags' => ['em', 'strong'], - ], - ], - "This is alert('XSS') test", - ]; + $data[] = [[ + 'child' => ['#markup' => "This is test", '#allowed_tags' => ['em', 'strong']], + ], "This is alert('XSS') test"]; // Html escaping test. - $data[] = [ - [ - 'child' => [ - '#plain_text' => "This is test", - ], - ], - "This is <script><em>alert('XSS')</em></script> <strong>test</strong>", - ]; + $data[] = [[ + 'child' => ['#plain_text' => "This is test"], + ], "This is <script><em>alert('XSS')</em></script> <strong>test</strong>"]; // XSS filtering by default test. - $data[] = [ - [ - 'child' => [ - '#markup' => "This is test", - ], - ], - "This is alert('XSS') test", - ]; + $data[] = [[ + 'child' => ['#markup' => "This is test"], + ], "This is alert('XSS') test"]; // Ensure non-XSS tags are not filtered out. - $data[] = [ - [ - 'child' => [ - '#markup' => "This is test", - ], - ], - "This is alert('not a giraffe') test", - ]; + $data[] = [[ + 'child' => ['#markup' => "This is test"], + ], "This is alert('not a giraffe') test"]; // #children set but empty, and renderable children. - $data[] = [ - ['#children' => '', 'child' => ['#markup' => 'bar']], - 'bar', - ]; + $data[] = [[ + '#children' => '', + 'child' => ['#markup' => 'bar'], + ], 'bar']; // #children set, not empty, and renderable children. #children will be // assumed oto be the rendered child elements, even though the #markup for // 'child' differs. - $data[] = [ - ['#children' => 'foo', 'child' => ['#markup' => 'bar']], - 'foo', - ]; + $data[] = [[ + '#children' => 'foo', + 'child' => ['#markup' => 'bar'], + ], 'foo']; // Ensure that content added to #markup via a #pre_render callback is safe. - $data[] = [ - [ - '#markup' => 'foo', - '#pre_render' => [function($elements) { - $elements['#markup'] .= ''; - return $elements; - } - ], - ], - 'fooalert("bar");', - ]; + $data[] = [[ + '#markup' => 'foo', + '#pre_render' => [function($elements) { + $elements['#markup'] .= ''; + return $elements; + }] + ], 'fooalert("bar");']; // Test #allowed_tags in combination with #markup and #pre_render. - $data[] = [ - [ - '#markup' => 'foo', - '#allowed_tags' => ['script'], - '#pre_render' => [function($elements) { - $elements['#markup'] .= ''; - return $elements; - } - ], - ], - 'foo', - ]; + $data[] = [[ + '#markup' => 'foo', + '#allowed_tags' => ['script'], + '#pre_render' => [function($elements) { + $elements['#markup'] .= ''; + return $elements; + }] + ], 'foo']; // Ensure output is escaped when adding content to #check_plain through // a #pre_render callback. - $data[] = [ - [ - '#plain_text' => 'foo', - '#pre_render' => [function($elements) { - $elements['#plain_text'] .= ''; - return $elements; - } - ], - ], - 'foo<script>alert("bar");</script>', - ]; + $data[] = [[ + '#plain_text' => 'foo', + '#pre_render' => [function($elements) { + $elements['#plain_text'] .= ''; + return $elements; + }] + ], 'foo<script>alert("bar");</script>']; // Part 2: render arrays using #theme and #theme_wrappers. only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php +++ b/core/tests/Drupal/Tests/Core/StackMiddleware/NegotiationMiddlewareTest.php @@ -142,8 +142,6 @@ public function testSetFormat() { } class StubNegotiationMiddleware extends NegotiationMiddleware { - public function getContentType(Request $request) { - return parent::getContentType($request); - } + public function getContentType(Request $request) { return parent::getContentType($request); } } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php +++ b/core/tests/Drupal/Tests/Core/Template/TwigSandboxTest.php @@ -85,14 +85,14 @@ public function testEntitySafePrefixes() { ->with('test') ->willReturn(TRUE); $result = $this->twig->render('{{ entity.hasLinkTemplate("test") }}', ['entity' => $entity]); - $this->assertTrue((bool) $result, 'Sandbox policy allows has* functions to be called.'); + $this->assertTrue((bool)$result, 'Sandbox policy allows has* functions to be called.'); $entity = $this->getMock('Drupal\Core\Entity\EntityInterface'); $entity->expects($this->atLeastOnce()) ->method('isNew') ->willReturn(TRUE); $result = $this->twig->render('{{ entity.isNew }}', ['entity' => $entity]); - $this->assertTrue((bool) $result, 'Sandbox policy allows is* functions to be called.'); + $this->assertTrue((bool)$result, 'Sandbox policy allows is* functions to be called.'); $entity = $this->getMock('Drupal\Core\Entity\EntityInterface'); $entity->expects($this->atLeastOnce()) only in patch2: unchanged: --- a/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php +++ b/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php @@ -121,10 +121,10 @@ public function providerTestAssembleWithLocalUri() { ['base:example', ['query' => ['foo' => 'bar']], FALSE, '/example?foo=bar'], ['base:example', ['query' => ['foo' => '"bar"']], FALSE, '/example?foo=%22bar%22'], ['base:example', ['query' => ['foo' => '"bar"', 'zoo' => 'baz']], FALSE, '/example?foo=%22bar%22&zoo=baz'], - ['base:example', ['fragment' => 'example'], FALSE, '/example#example'], + ['base:example', ['fragment' => 'example', ], FALSE, '/example#example'], ['base:example', [], TRUE, '/subdir/example'], ['base:example', ['query' => ['foo' => 'bar']], TRUE, '/subdir/example?foo=bar'], - ['base:example', ['fragment' => 'example'], TRUE, '/subdir/example#example'], + ['base:example', ['fragment' => 'example', ], TRUE, '/subdir/example#example'], ['base:/drupal.org', [], FALSE, '/drupal.org'], ]; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/UnitTestCase.php +++ b/core/tests/Drupal/Tests/UnitTestCase.php @@ -180,12 +180,6 @@ public function getConfigStorageStub(array $configs) { * * @return \Drupal\block\BlockInterface|\PHPUnit_Framework_MockObject_MockObject * The mocked block. - * - * @deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test - * base classes should not have dependencies on extensions. Set up mocks in - * individual tests. - * - * @see https://www.drupal.org/node/2896072 */ protected function getBlockMockWithMachineName($machine_name) { $plugin = $this->getMockBuilder('Drupal\Core\Block\BlockBase') @@ -201,7 +195,6 @@ protected function getBlockMockWithMachineName($machine_name) { $block->expects($this->any()) ->method('getPlugin') ->will($this->returnValue($plugin)); - @trigger_error(__METHOD__ . ' is deprecated in Drupal 8.5.x, will be removed before Drupal 9.0.0. Unit test base classes should not have dependencies on extensions. Set up mocks in individual tests.', E_USER_DEPRECATED); return $block; } only in patch2: unchanged: --- a/core/tests/Drupal/Tests/UnitTestCaseDeprecationTest.php +++ /dev/null @@ -1,22 +0,0 @@ -getBlockMockWithMachineName('test_name'); - $this->assertEquals('test_name', $block_mock->getPlugin()->getMachineNameSuggestion()); - } - -} only in patch2: unchanged: --- a/core/themes/bartik/css/components/form.css +++ b/core/themes/bartik/css/components/form.css @@ -172,7 +172,7 @@ input.form-submit:focus { .node-form .form-wrapper { margin-bottom: 2em; } -.node-form .entity-content-form-footer, +.node-form .node-form-footer, .node-form .field--name-status { margin-bottom: 0; }