Completed
Push — master ( e6a942...f6c8aa )
by
unknown
44s queued 12s
created
src/ConstraintCheck/Result/NullResult.php 1 patch
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -25,22 +25,22 @@
 block discarded – undo
25 25
 	 */
26 26
 	private const NULL_PROPERTY_ID = 'P2147483647';
27 27
 
28
-	public function __construct( ContextCursor $contextCursor ) {
28
+	public function __construct(ContextCursor $contextCursor) {
29 29
 		$constraint = new Constraint(
30 30
 			'null',
31
-			new NumericPropertyId( self::NULL_PROPERTY_ID ),
31
+			new NumericPropertyId(self::NULL_PROPERTY_ID),
32 32
 			'none',
33 33
 			[]
34 34
 		);
35
-		parent::__construct( $contextCursor, $constraint );
35
+		parent::__construct($contextCursor, $constraint);
36 36
 	}
37 37
 
38 38
 	public function getConstraint() {
39
-		throw new DomainException( 'NullResult holds no constraint' );
39
+		throw new DomainException('NullResult holds no constraint');
40 40
 	}
41 41
 
42 42
 	public function getConstraintId() {
43
-		throw new DomainException( 'NullResult holds no constraint' );
43
+		throw new DomainException('NullResult holds no constraint');
44 44
 	}
45 45
 
46 46
 }
Please login to merge, or discard this patch.
src/ConstraintDeserializer.php 1 patch
Spacing   +4 added lines, -5 removed lines patch added patch discarded remove patch
@@ -10,14 +10,13 @@
 block discarded – undo
10 10
  */
11 11
 class ConstraintDeserializer {
12 12
 
13
-	public function deserialize( array $serialization ) {
13
+	public function deserialize(array $serialization) {
14 14
 		return new Constraint(
15 15
 			$serialization['id'],
16
-			new NumericPropertyId( $serialization['pid'] ),
16
+			new NumericPropertyId($serialization['pid']),
17 17
 			$serialization['qid'],
18
-			array_key_exists( 'params', $serialization ) ?
19
-			$serialization['params'] :
20
-		[]
18
+			array_key_exists('params', $serialization) ?
19
+			$serialization['params'] : []
21 20
 			);
22 21
 	}
23 22
 
Please login to merge, or discard this patch.
src/Api/CheckResultsRenderer.php 1 patch
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -50,11 +50,11 @@  discard block
 block discarded – undo
50 50
 	 * @param CachedCheckResults $checkResults
51 51
 	 * @return CachedCheckConstraintsResponse
52 52
 	 */
53
-	public function render( CachedCheckResults $checkResults ) {
53
+	public function render(CachedCheckResults $checkResults) {
54 54
 		$response = [];
55
-		foreach ( $checkResults->getArray() as $checkResult ) {
56
-			$resultArray = $this->checkResultToArray( $checkResult );
57
-			$checkResult->getContextCursor()->storeCheckResultInArray( $resultArray, $response );
55
+		foreach ($checkResults->getArray() as $checkResult) {
56
+			$resultArray = $this->checkResultToArray($checkResult);
57
+			$checkResult->getContextCursor()->storeCheckResultInArray($resultArray, $response);
58 58
 		}
59 59
 		return new CachedCheckConstraintsResponse(
60 60
 			$response,
@@ -62,19 +62,19 @@  discard block
 block discarded – undo
62 62
 		);
63 63
 	}
64 64
 
65
-	public function checkResultToArray( CheckResult $checkResult ) {
66
-		if ( $checkResult instanceof NullResult ) {
65
+	public function checkResultToArray(CheckResult $checkResult) {
66
+		if ($checkResult instanceof NullResult) {
67 67
 			return null;
68 68
 		}
69 69
 
70 70
 		$constraintId = $checkResult->getConstraint()->getConstraintId();
71 71
 		$typeItemId = $checkResult->getConstraint()->getConstraintTypeItemId();
72
-		$constraintPropertyId = new NumericPropertyId( $checkResult->getContextCursor()->getSnakPropertyId() );
72
+		$constraintPropertyId = new NumericPropertyId($checkResult->getContextCursor()->getSnakPropertyId());
73 73
 
74
-		$title = $this->entityTitleLookup->getTitleForId( $constraintPropertyId );
74
+		$title = $this->entityTitleLookup->getTitleForId($constraintPropertyId);
75 75
 		$talkTitle = $title->getTalkPageIfDefined();
76
-		$typeLabel = $this->entityIdLabelFormatter->formatEntityId( new ItemId( $typeItemId ) );
77
-		$link = $title->getFullURL() . '#' . $constraintId;
76
+		$typeLabel = $this->entityIdLabelFormatter->formatEntityId(new ItemId($typeItemId));
77
+		$link = $title->getFullURL().'#'.$constraintId;
78 78
 
79 79
 		$constraint = [
80 80
 			'id' => $constraintId,
@@ -90,14 +90,14 @@  discard block
 block discarded – undo
90 90
 			'constraint' => $constraint
91 91
 		];
92 92
 		$message = $checkResult->getMessage();
93
-		if ( $message ) {
94
-			$result['message-html'] = $this->violationMessageRenderer->render( $message );
93
+		if ($message) {
94
+			$result['message-html'] = $this->violationMessageRenderer->render($message);
95 95
 		}
96
-		if ( $checkResult->getContextCursor()->getType() === Context::TYPE_STATEMENT ) {
96
+		if ($checkResult->getContextCursor()->getType() === Context::TYPE_STATEMENT) {
97 97
 			$result['claim'] = $checkResult->getContextCursor()->getStatementGuid();
98 98
 		}
99 99
 		$cachingMetadataArray = $checkResult->getMetadata()->getCachingMetadata()->toArray();
100
-		if ( $cachingMetadataArray !== null ) {
100
+		if ($cachingMetadataArray !== null) {
101 101
 			$result['cached'] = $cachingMetadataArray;
102 102
 		}
103 103
 
Please login to merge, or discard this patch.
src/ConstraintStore.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
 	 * @return bool
17 17
 	 * @throws DBUnexpectedError
18 18
 	 */
19
-	public function insertBatch( array $constraints );
19
+	public function insertBatch(array $constraints);
20 20
 
21 21
 	/**
22 22
 	 * Delete all constraints for the property ID.
@@ -25,6 +25,6 @@  discard block
 block discarded – undo
25 25
 	 *
26 26
 	 * @throws DBUnexpectedError
27 27
 	 */
28
-	public function deleteForProperty( NumericPropertyId $propertyId );
28
+	public function deleteForProperty(NumericPropertyId $propertyId);
29 29
 
30 30
 }
Please login to merge, or discard this patch.
src/ConstraintRepositoryStore.php 1 patch
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -24,16 +24,16 @@  discard block
 block discarded – undo
24 24
 	 * then using the main DBLoadBalancer service may be incorrect.
25 25
 	 * @param string|false $dbName Database name ($domain for ILoadBalancer methods).
26 26
 	 */
27
-	public function __construct( ILoadBalancer $lb, $dbName ) {
27
+	public function __construct(ILoadBalancer $lb, $dbName) {
28 28
 		$this->lb = $lb;
29 29
 		$this->dbName = $dbName;
30 30
 	}
31 31
 
32
-	private function encodeConstraintParameters( array $constraintParameters ) {
33
-		$json = json_encode( $constraintParameters, JSON_FORCE_OBJECT );
32
+	private function encodeConstraintParameters(array $constraintParameters) {
33
+		$json = json_encode($constraintParameters, JSON_FORCE_OBJECT);
34 34
 
35
-		if ( strlen( $json ) > 50000 ) {
36
-			$json = json_encode( [ '@error' => [ 'toolong' => true ] ] );
35
+		if (strlen($json) > 50000) {
36
+			$json = json_encode(['@error' => ['toolong' => true]]);
37 37
 		}
38 38
 
39 39
 		return $json;
@@ -45,21 +45,21 @@  discard block
 block discarded – undo
45 45
 	 * @throws DBUnexpectedError
46 46
 	 * @return bool
47 47
 	 */
48
-	public function insertBatch( array $constraints ) {
48
+	public function insertBatch(array $constraints) {
49 49
 		$accumulator = array_map(
50
-			function ( Constraint $constraint ) {
50
+			function(Constraint $constraint) {
51 51
 				return [
52 52
 					'constraint_guid' => $constraint->getConstraintId(),
53 53
 					'pid' => $constraint->getPropertyId()->getNumericId(),
54 54
 					'constraint_type_qid' => $constraint->getConstraintTypeItemId(),
55
-					'constraint_parameters' => $this->encodeConstraintParameters( $constraint->getConstraintParameters() )
55
+					'constraint_parameters' => $this->encodeConstraintParameters($constraint->getConstraintParameters())
56 56
 				];
57 57
 			},
58 58
 			$constraints
59 59
 		);
60 60
 
61
-		$dbw = $this->lb->getConnection( ILoadBalancer::DB_PRIMARY, [], $this->dbName );
62
-		return $dbw->insert( 'wbqc_constraints', $accumulator, __METHOD__ );
61
+		$dbw = $this->lb->getConnection(ILoadBalancer::DB_PRIMARY, [], $this->dbName);
62
+		return $dbw->insert('wbqc_constraints', $accumulator, __METHOD__);
63 63
 	}
64 64
 
65 65
 	/**
@@ -69,8 +69,8 @@  discard block
 block discarded – undo
69 69
 	 *
70 70
 	 * @throws DBUnexpectedError
71 71
 	 */
72
-	public function deleteForProperty( NumericPropertyId $propertyId ) {
73
-		$dbw = $this->lb->getConnection( ILoadBalancer::DB_PRIMARY, [], $this->dbName );
72
+	public function deleteForProperty(NumericPropertyId $propertyId) {
73
+		$dbw = $this->lb->getConnection(ILoadBalancer::DB_PRIMARY, [], $this->dbName);
74 74
 		$dbw->delete(
75 75
 			'wbqc_constraints',
76 76
 			[
Please login to merge, or discard this patch.
src/Api/ExpiryLock.php 1 patch
Spacing   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
 	/**
27 27
 	 * @param BagOStuff $cache
28 28
 	 */
29
-	public function __construct( BagOStuff $cache ) {
29
+	public function __construct(BagOStuff $cache) {
30 30
 		$this->cache = $cache;
31 31
 	}
32 32
 
@@ -37,17 +37,17 @@  discard block
 block discarded – undo
37 37
 	 *
38 38
 	 * @throws \Wikimedia\Assert\ParameterTypeException
39 39
 	 */
40
-	private function makeKey( $id ) {
41
-		if ( empty( trim( $id ) ) ) {
42
-			throw new ParameterTypeException( '$id', 'non-empty string' );
40
+	private function makeKey($id) {
41
+		if (empty(trim($id))) {
42
+			throw new ParameterTypeException('$id', 'non-empty string');
43 43
 		}
44 44
 
45
-		Assert::parameterType( 'string', $id, '$id' );
45
+		Assert::parameterType('string', $id, '$id');
46 46
 
47 47
 		return $this->cache->makeKey(
48 48
 			'WikibaseQualityConstraints',
49 49
 			'ExpiryLock',
50
-			(string)$id
50
+			(string) $id
51 51
 		);
52 52
 	}
53 53
 
@@ -59,15 +59,15 @@  discard block
 block discarded – undo
59 59
 	 *
60 60
 	 * @throws \Wikimedia\Assert\ParameterTypeException
61 61
 	 */
62
-	public function lock( $id, ConvertibleTimestamp $expiryTimestamp ) {
62
+	public function lock($id, ConvertibleTimestamp $expiryTimestamp) {
63 63
 
64
-		$cacheId = $this->makeKey( $id );
64
+		$cacheId = $this->makeKey($id);
65 65
 
66
-		if ( !$this->isLockedInternal( $cacheId ) ) {
66
+		if (!$this->isLockedInternal($cacheId)) {
67 67
 			return $this->cache->set(
68 68
 				$cacheId,
69
-				$expiryTimestamp->getTimestamp( TS_UNIX ),
70
-				(int)$expiryTimestamp->getTimestamp( TS_UNIX )
69
+				$expiryTimestamp->getTimestamp(TS_UNIX),
70
+				(int) $expiryTimestamp->getTimestamp(TS_UNIX)
71 71
 			);
72 72
 		} else {
73 73
 			return false;
@@ -81,20 +81,20 @@  discard block
 block discarded – undo
81 81
 	 *
82 82
 	 * @throws \Wikimedia\Assert\ParameterTypeException
83 83
 	 */
84
-	private function isLockedInternal( $cacheId ) {
85
-		$expiryTime = $this->cache->get( $cacheId );
86
-		if ( !$expiryTime ) {
84
+	private function isLockedInternal($cacheId) {
85
+		$expiryTime = $this->cache->get($cacheId);
86
+		if (!$expiryTime) {
87 87
 			return false;
88 88
 		}
89 89
 
90 90
 		try {
91
-			$lockExpiryTimeStamp = new ConvertibleTimestamp( $expiryTime );
92
-		} catch ( TimestampException $exception ) {
91
+			$lockExpiryTimeStamp = new ConvertibleTimestamp($expiryTime);
92
+		} catch (TimestampException $exception) {
93 93
 			return false;
94 94
 		}
95 95
 
96 96
 		$now = new ConvertibleTimestamp();
97
-		if ( $now->timestamp < $lockExpiryTimeStamp->timestamp ) {
97
+		if ($now->timestamp < $lockExpiryTimeStamp->timestamp) {
98 98
 			return true;
99 99
 		} else {
100 100
 			return false;
@@ -108,8 +108,8 @@  discard block
 block discarded – undo
108 108
 	 *
109 109
 	 * @throws \Wikimedia\Assert\ParameterTypeException
110 110
 	 */
111
-	public function isLocked( $id ) {
112
-		return $this->isLockedInternal( $this->makeKey( $id ) );
111
+	public function isLocked($id) {
112
+		return $this->isLockedInternal($this->makeKey($id));
113 113
 	}
114 114
 
115 115
 }
Please login to merge, or discard this patch.
src/CachingConstraintLookup.php 1 patch
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
 	/**
27 27
 	 * @param ConstraintLookup $lookup The lookup to which all queries are delegated.
28 28
 	 */
29
-	public function __construct( ConstraintLookup $lookup ) {
29
+	public function __construct(ConstraintLookup $lookup) {
30 30
 		$this->lookup = $lookup;
31 31
 	}
32 32
 
@@ -35,10 +35,10 @@  discard block
 block discarded – undo
35 35
 	 *
36 36
 	 * @return Constraint[]
37 37
 	 */
38
-	public function queryConstraintsForProperty( NumericPropertyId $propertyId ) {
38
+	public function queryConstraintsForProperty(NumericPropertyId $propertyId) {
39 39
 		$id = $propertyId->getSerialization();
40
-		if ( !array_key_exists( $id, $this->cache ) ) {
41
-			$this->cache[$id] = $this->lookup->queryConstraintsForProperty( $propertyId );
40
+		if (!array_key_exists($id, $this->cache)) {
41
+			$this->cache[$id] = $this->lookup->queryConstraintsForProperty($propertyId);
42 42
 		}
43 43
 		return $this->cache[$id];
44 44
 	}
Please login to merge, or discard this patch.
src/ConstraintLookup.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -14,6 +14,6 @@
 block discarded – undo
14 14
 	 *
15 15
 	 * @return Constraint[]
16 16
 	 */
17
-	public function queryConstraintsForProperty( NumericPropertyId $propertyId );
17
+	public function queryConstraintsForProperty(NumericPropertyId $propertyId);
18 18
 
19 19
 }
Please login to merge, or discard this patch.
src/WikibaseQualityConstraintsHooks.php 1 patch
Spacing   +36 added lines, -36 removed lines patch added patch discarded remove patch
@@ -27,27 +27,27 @@  discard block
 block discarded – undo
27 27
 	/**
28 28
 	 * @param DatabaseUpdater $updater
29 29
 	 */
30
-	public static function onCreateSchema( DatabaseUpdater $updater ) {
31
-		$dir = dirname( __DIR__ ) . '/sql/';
30
+	public static function onCreateSchema(DatabaseUpdater $updater) {
31
+		$dir = dirname(__DIR__).'/sql/';
32 32
 
33 33
 		$updater->addExtensionTable(
34 34
 			'wbqc_constraints',
35
-			$dir . "/{$updater->getDB()->getType()}/tables-generated.sql"
35
+			$dir."/{$updater->getDB()->getType()}/tables-generated.sql"
36 36
 		);
37 37
 		$updater->addExtensionField(
38 38
 			'wbqc_constraints',
39 39
 			'constraint_id',
40
-			$dir . '/patch-wbqc_constraints-constraint_id.sql'
40
+			$dir.'/patch-wbqc_constraints-constraint_id.sql'
41 41
 		);
42 42
 		$updater->addExtensionIndex(
43 43
 			'wbqc_constraints',
44 44
 			'wbqc_constraints_guid_uniq',
45
-			$dir . '/patch-wbqc_constraints-wbqc_constraints_guid_uniq.sql'
45
+			$dir.'/patch-wbqc_constraints-wbqc_constraints_guid_uniq.sql'
46 46
 		);
47 47
 	}
48 48
 
49
-	public static function onWikibaseChange( Change $change ) {
50
-		if ( !( $change instanceof EntityChange ) ) {
49
+	public static function onWikibaseChange(Change $change) {
50
+		if (!($change instanceof EntityChange)) {
51 51
 			return;
52 52
 		}
53 53
 		/** @var EntityChange $change */
@@ -58,48 +58,48 @@  discard block
 block discarded – undo
58 58
 
59 59
 		// If jobs are enabled and the results would be stored in some way run a job.
60 60
 		if (
61
-			$config->get( 'WBQualityConstraintsEnableConstraintsCheckJobs' ) &&
62
-			$config->get( 'WBQualityConstraintsCacheCheckConstraintsResults' ) &&
61
+			$config->get('WBQualityConstraintsEnableConstraintsCheckJobs') &&
62
+			$config->get('WBQualityConstraintsCacheCheckConstraintsResults') &&
63 63
 			self::isSelectedForJobRunBasedOnPercentage()
64 64
 		) {
65
-			$params = [ 'entityId' => $change->getEntityId()->getSerialization() ];
65
+			$params = ['entityId' => $change->getEntityId()->getSerialization()];
66 66
 			$jobQueueGroup->lazyPush(
67
-				new JobSpecification( CheckConstraintsJob::COMMAND, $params )
67
+				new JobSpecification(CheckConstraintsJob::COMMAND, $params)
68 68
 			);
69 69
 		}
70 70
 
71
-		if ( $config->get( 'WBQualityConstraintsEnableConstraintsImportFromStatements' ) &&
72
-			self::isConstraintStatementsChange( $config, $change )
71
+		if ($config->get('WBQualityConstraintsEnableConstraintsImportFromStatements') &&
72
+			self::isConstraintStatementsChange($config, $change)
73 73
 		) {
74
-			$params = [ 'propertyId' => $change->getEntityId()->getSerialization() ];
74
+			$params = ['propertyId' => $change->getEntityId()->getSerialization()];
75 75
 			$metadata = $change->getMetadata();
76
-			if ( array_key_exists( 'rev_id', $metadata ) ) {
76
+			if (array_key_exists('rev_id', $metadata)) {
77 77
 				$params['revisionId'] = $metadata['rev_id'];
78 78
 			}
79 79
 			$jobQueueGroup->push(
80
-				new JobSpecification( 'constraintsTableUpdate', $params )
80
+				new JobSpecification('constraintsTableUpdate', $params)
81 81
 			);
82 82
 		}
83 83
 	}
84 84
 
85 85
 	private static function isSelectedForJobRunBasedOnPercentage() {
86 86
 		$config = MediaWikiServices::getInstance()->getMainConfig();
87
-		$percentage = $config->get( 'WBQualityConstraintsEnableConstraintsCheckJobsRatio' );
87
+		$percentage = $config->get('WBQualityConstraintsEnableConstraintsCheckJobsRatio');
88 88
 
89
-		return mt_rand( 1, 100 ) <= $percentage;
89
+		return mt_rand(1, 100) <= $percentage;
90 90
 	}
91 91
 
92
-	public static function isConstraintStatementsChange( Config $config, Change $change ) {
93
-		if ( !( $change instanceof EntityChange ) ||
92
+	public static function isConstraintStatementsChange(Config $config, Change $change) {
93
+		if (!($change instanceof EntityChange) ||
94 94
 			 $change->getAction() !== EntityChange::UPDATE ||
95
-			 !( $change->getEntityId() instanceof NumericPropertyId )
95
+			 !($change->getEntityId() instanceof NumericPropertyId)
96 96
 		) {
97 97
 			return false;
98 98
 		}
99 99
 
100 100
 		$info = $change->getInfo();
101 101
 
102
-		if ( !array_key_exists( 'compactDiff', $info ) ) {
102
+		if (!array_key_exists('compactDiff', $info)) {
103 103
 			// the non-compact diff ($info['diff']) does not contain statement diffs (T110996),
104 104
 			// so we only know that the change *might* affect the constraint statements
105 105
 			return true;
@@ -108,43 +108,43 @@  discard block
 block discarded – undo
108 108
 		/** @var EntityDiffChangedAspects $aspects */
109 109
 		$aspects = $info['compactDiff'];
110 110
 
111
-		$propertyConstraintId = $config->get( 'WBQualityConstraintsPropertyConstraintId' );
112
-		return in_array( $propertyConstraintId, $aspects->getStatementChanges() );
111
+		$propertyConstraintId = $config->get('WBQualityConstraintsPropertyConstraintId');
112
+		return in_array($propertyConstraintId, $aspects->getStatementChanges());
113 113
 	}
114 114
 
115
-	public static function onArticlePurge( WikiPage $wikiPage ) {
115
+	public static function onArticlePurge(WikiPage $wikiPage) {
116 116
 		$entityContentFactory = WikibaseRepo::getEntityContentFactory();
117
-		if ( $entityContentFactory->isEntityContentModel( $wikiPage->getContentModel() ) ) {
117
+		if ($entityContentFactory->isEntityContentModel($wikiPage->getContentModel())) {
118 118
 			$entityIdLookup = WikibaseRepo::getEntityIdLookup();
119
-			$entityId = $entityIdLookup->getEntityIdForTitle( $wikiPage->getTitle() );
120
-			if ( $entityId !== null ) {
119
+			$entityId = $entityIdLookup->getEntityIdForTitle($wikiPage->getTitle());
120
+			if ($entityId !== null) {
121 121
 				$resultsCache = ResultsCache::getDefaultInstance();
122
-				$resultsCache->delete( $entityId );
122
+				$resultsCache->delete($entityId);
123 123
 			}
124 124
 		}
125 125
 	}
126 126
 
127
-	public static function onBeforePageDisplay( OutputPage $out, Skin $skin ) {
127
+	public static function onBeforePageDisplay(OutputPage $out, Skin $skin) {
128 128
 		$lookup = WikibaseRepo::getEntityNamespaceLookup();
129 129
 		$title = $out->getTitle();
130
-		if ( $title === null ) {
130
+		if ($title === null) {
131 131
 			return;
132 132
 		}
133 133
 
134
-		if ( !$lookup->isNamespaceWithEntities( $title->getNamespace() ) ) {
134
+		if (!$lookup->isNamespaceWithEntities($title->getNamespace())) {
135 135
 			return;
136 136
 		}
137
-		if ( empty( $out->getJsConfigVars()['wbIsEditView'] ) ) {
137
+		if (empty($out->getJsConfigVars()['wbIsEditView'])) {
138 138
 			return;
139 139
 		}
140 140
 
141
-		$out->addModules( 'wikibase.quality.constraints.suggestions' );
141
+		$out->addModules('wikibase.quality.constraints.suggestions');
142 142
 
143
-		if ( !$out->getUser()->isRegistered() ) {
143
+		if (!$out->getUser()->isRegistered()) {
144 144
 			return;
145 145
 		}
146 146
 
147
-		$out->addModules( 'wikibase.quality.constraints.gadget' );
147
+		$out->addModules('wikibase.quality.constraints.gadget');
148 148
 	}
149 149
 
150 150
 }
Please login to merge, or discard this patch.