Skip to content

Commit

Permalink
MAGETWO-65525: Add support for PHP 7.1.x
Browse files Browse the repository at this point in the history
  - Drop PHP 5.6 support
  - Add PHP 7.1.x to the list of supported versions
  - MAGETWO-60101: Suppress "deprecated" warning for mcrypt library
  - MAGETWO-66299: Fix integration tests which fails due to arithmetic with invalid strings in CatalogImportExport

MAGETWO-63672: Upgrade outdated libraries w/composer (minor versions)

MAGETWO-65715: Upgrade zend Framework 1 to 1.12.20

  - MAGETWO-66733: Fix cases where MySQL expression used in Order/Group statements and not wrapped with \Zend_Db_Expr

MAGETWO-52770: Upgrade composer to stable version

  - Now Magento uses stable composer/composer v1.4.1
  • Loading branch information
igrybkov committed Apr 26, 2017
1 parent f1033b2 commit 0364bf9
Show file tree
Hide file tree
Showing 137 changed files with 789 additions and 715 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ addons:
language: php
php:
- 7.0
- 7.1
env:
global:
- COMPOSER_BIN_DIR=~/bin
Expand Down
6 changes: 3 additions & 3 deletions app/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
#ini_set('display_errors', 1);

/* PHP version validation */
if (!defined('PHP_VERSION_ID') || !(PHP_VERSION_ID >= 50605 && PHP_VERSION_ID < 50700 || PHP_VERSION_ID === 70002 || PHP_VERSION_ID === 70004 || PHP_VERSION_ID >= 70006)) {
if (!defined('PHP_VERSION_ID') || !(PHP_VERSION_ID === 70002 || PHP_VERSION_ID === 70004 || PHP_VERSION_ID >= 70006)) {
if (PHP_SAPI == 'cli') {
echo 'Magento supports PHP 5.6.5, 7.0.2, 7.0.4, and 7.0.6 or later. ' .
echo 'Magento supports 7.0.2, 7.0.4, and 7.0.6 or later. ' .
'Please read http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html';
} else {
echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
<p>Magento supports PHP 5.6.5, 7.0.2, 7.0.4, and 7.0.6 or later. Please read
<p>Magento supports PHP 7.0.2, 7.0.4, and 7.0.6 or later. Please read
<a target="_blank" href="http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html">
Magento System Requirements</a>.
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/AdminNotification/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-admin-notification",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-backend": "100.2.*",
"magento/module-media-storage": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/AdvancedPricingImportExport/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-advanced-pricing-import-export",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-catalog": "101.1.*",
"magento/module-catalog-inventory": "100.2.*",
"magento/module-eav": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Analytics/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-analytics",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-backend": "100.2.*",
"magento/module-config": "100.2.*",
"magento/module-integration": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Authorization/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-authorization",
"description": "Authorization module provides access to Magento ACL functionality.",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-backend": "100.2.*",
"magento/framework": "100.2.*"
},
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Authorizenet/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-authorizenet",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-sales": "100.2.*",
"magento/module-store": "100.2.*",
"magento/module-quote": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Backend/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-backend",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-directory": "100.2.*",
"magento/module-developer": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Backup/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-backup",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-backend": "100.2.*",
"magento/module-cron": "100.2.*",
Expand Down
4 changes: 2 additions & 2 deletions app/code/Magento/Braintree/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-braintree",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/framework": "100.2.*",
"magento/magento-composer-installer": "*",
"magento/module-config": "100.2.*",
Expand All @@ -18,7 +18,7 @@
"magento/module-paypal": "100.2.*",
"magento/module-theme": "100.2.*",
"magento/module-ui": "100.2.*",
"braintree/braintree_php": "3.7.0"
"braintree/braintree_php": "3.22.0"
},
"suggest": {
"magento/module-checkout-agreements": "100.2.*"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ public function addPriceFilter($product, $searchMin, $useRegularPrice = false)
}

$this->getSelect()->reset(Select::ORDER);
$this->getSelect()->order($orderByValue . ($searchMin ? Select::SQL_ASC : Select::SQL_DESC));
$this->getSelect()->order(new \Zend_Db_Expr($orderByValue . ($searchMin ? Select::SQL_ASC : Select::SQL_DESC)));
$this->getSelect()->limit(1);
return $this;
}
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Bundle/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-bundle",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-catalog": "101.1.*",
"magento/module-tax": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/BundleImportExport/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-bundle-import-export",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-catalog": "101.1.*",
"magento/module-import-export": "100.2.*",
"magento/module-catalog-import-export": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CacheInvalidate/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-cache-invalidate",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-page-cache": "100.2.*",
"magento/framework": "100.2.*"
},
Expand Down
8 changes: 4 additions & 4 deletions app/code/Magento/Captcha/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"name": "magento/module-captcha",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-customer": "100.2.*",
"magento/module-checkout": "100.2.*",
"magento/module-backend": "100.2.*",
"magento/framework": "100.2.*",
"zendframework/zend-db": "~2.4.6",
"zendframework/zend-captcha": "~2.4.6",
"zendframework/zend-session": "~2.4.6"
"zendframework/zend-db": "~2.5.0",
"zendframework/zend-captcha": "~2.5.0",
"zendframework/zend-session": "~2.5.0"
},
"type": "magento2-module",
"version": "100.2.0-dev",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public function getCount($range)
$rangeExpr = new \Zend_Db_Expr("FLOOR(({$priceExpression}) / {$range}) + 1");

$select->columns(['range' => $rangeExpr, 'count' => $countExpr]);
$select->group($rangeExpr)->order("({$rangeExpr}) ASC");
$select->group($rangeExpr)->order(new \Zend_Db_Expr("({$rangeExpr}) ASC"));

return $this->getConnection()->fetchPairs($select);
}
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Catalog/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-eav": "100.2.*",
"magento/module-cms": "101.1.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogAnalytics/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-analytics",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/framework": "100.2.*",
"magento/module-catalog": "101.1.*"
},
Expand Down
5 changes: 3 additions & 2 deletions app/code/Magento/CatalogImportExport/Model/Export/Product.php
Original file line number Diff line number Diff line change
Expand Up @@ -763,8 +763,9 @@ protected function _getEntityCollection($resetCollection = false)
protected function getItemsPerPage()
{
if ($this->_itemsPerPage === null) {
$memoryLimit = trim(ini_get('memory_limit'));
$lastMemoryLimitLetter = strtolower($memoryLimit[strlen($memoryLimit) - 1]);
$memoryLimitConfigValue = trim(ini_get('memory_limit'));
$lastMemoryLimitLetter = strtolower($memoryLimitConfigValue[strlen($memoryLimitConfigValue) - 1]);
$memoryLimit = (int) $memoryLimitConfigValue;
switch ($lastMemoryLimitLetter) {
case 'g':
$memoryLimit *= 1024;
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogImportExport/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-import-export",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-catalog": "101.1.*",
"magento/module-catalog-url-rewrite": "100.2.*",
"magento/module-eav": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogInventory/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-inventory",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-config": "100.2.*",
"magento/module-store": "100.2.*",
"magento/module-catalog": "101.1.*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-inventory-configurable-product",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-catalog-inventory": "100.2.*",
"magento/framework": "100.2.*"
},
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogRule/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-rule",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-rule": "100.2.*",
"magento/module-catalog": "101.1.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogRuleConfigurable/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-rule-configurable",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-configurable-product": "100.2.*",
"magento/framework": "100.2.*",
"magento/module-catalog": "101.1.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogSearch/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-search",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-catalog": "101.1.*",
"magento/module-search": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogUrlRewrite/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-url-rewrite",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-backend": "100.2.*",
"magento/module-catalog": "101.1.*",
"magento/module-catalog-import-export": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CatalogWidget/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-catalog-widget",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-catalog": "101.1.*",
"magento/module-widget": "100.2.*",
"magento/module-backend": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Checkout/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-checkout",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-sales": "100.2.*",
"magento/module-backend": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CheckoutAgreements/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-checkout-agreements",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-checkout": "100.2.*",
"magento/module-quote": "100.2.*",
"magento/module-store": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Cms/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-cms",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-theme": "100.2.*",
"magento/module-widget": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CmsUrlRewrite/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-cms-url-rewrite",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-cms": "101.1.*",
"magento/module-url-rewrite": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Config/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-config",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/framework": "100.2.*",
"magento/module-store": "100.2.*",
"magento/module-cron": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/ConfigurableImportExport/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-configurable-import-export",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-catalog": "101.1.*",
"magento/module-catalog-import-export": "100.2.*",
"magento/module-eav": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/ConfigurableProduct/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-configurable-product",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-catalog": "101.1.*",
"magento/module-catalog-inventory": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Contact/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-contact",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-config": "100.2.*",
"magento/module-store": "100.2.*",
"magento/module-customer": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Cookie/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-cookie",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/framework": "100.2.*"
},
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Cron/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-cron",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/framework": "100.2.*"
},
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CurrencySymbol/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-currency-symbol",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-config": "100.2.*",
"magento/module-store": "100.2.*",
"magento/module-page-cache": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/Customer/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-customer",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-eav": "100.2.*",
"magento/module-directory": "100.2.*",
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CustomerAnalytics/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-customer-analytics",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/framework": "100.2.*",
"magento/module-customer": "100.2.*"
},
Expand Down
2 changes: 1 addition & 1 deletion app/code/Magento/CustomerImportExport/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "magento/module-customer-import-export",
"description": "N/A",
"require": {
"php": "~5.6.5|7.0.2|7.0.4|~7.0.6",
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
"magento/module-store": "100.2.*",
"magento/module-backend": "100.2.*",
"magento/module-customer": "100.2.*",
Expand Down
Loading

0 comments on commit 0364bf9

Please sign in to comment.