Passed
Push — master ( 56c883...f703ed )
by Maja
04:39
created
core/common/Logging.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 namespace core\common;
12 12
 use \Exception;
13 13
 
14
-require_once(dirname(dirname(__DIR__))."/config/_config.php");
14
+require_once(dirname(dirname(__DIR__)) . "/config/_config.php");
15 15
 
16 16
 class Logging {
17 17
 
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
                 echo " ($category) ";
87 87
                 echo " " . $user . ": ";
88 88
                 if (is_string($message)) {
89
-                    echo $message ."\n";
89
+                    echo $message . "\n";
90 90
                 } else {
91 91
                     var_export($message);
92 92
                 }
Please login to merge, or discard this patch.
core/ProfileRADIUS.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
                 "row" => $attributeQuery->row,
177 177
                 "flag" => $optinfo['flag'],
178 178
                 "device" => ($devicesOrEAPMethods == "DEVICES" ? $attributeQuery->deviceormethod : NULL),
179
-                "eapmethod" => ($devicesOrEAPMethods == "DEVICES" ? 0 : (new \core\common\EAP($attributeQuery->deviceormethod))->getArrayRep() )];
179
+                "eapmethod" => ($devicesOrEAPMethods == "DEVICES" ? 0 : (new \core\common\EAP($attributeQuery->deviceormethod))->getArrayRep())];
180 180
         }
181 181
         return $temparray;
182 182
     }
@@ -276,7 +276,7 @@  discard block
 block discarded – undo
276 276
      */
277 277
     public function setRealmCheckUser($shallwe, $localpart = NULL) {
278 278
         $this->databaseHandle->exec("UPDATE profile SET checkuser_outer = " . ($shallwe === true ? "1" : "0") .
279
-                ( $localpart !== NULL ? ", checkuser_value = '$localpart' " : "") .
279
+                ($localpart !== NULL ? ", checkuser_value = '$localpart' " : "") .
280 280
                 " WHERE profile_id = $this->identifier");
281 281
     }
282 282
 
Please login to merge, or discard this patch.
core/ProfileSilverbullet.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 // realm is automatically calculated, then stored in DB
101 101
 
102 102
         $this->realm = "opaquehash@$myInst->identifier-$this->identifier." . strtolower($myInst->federation) . CONFIG_CONFASSISTANT['SILVERBULLET']['realm_suffix'];
103
-        $this->setRealm($myInst->identifier."-".$this->identifier."." . strtolower($myInst->federation) . strtolower(CONFIG_CONFASSISTANT['SILVERBULLET']['realm_suffix']));
103
+        $this->setRealm($myInst->identifier . "-" . $this->identifier . "." . strtolower($myInst->federation) . strtolower(CONFIG_CONFASSISTANT['SILVERBULLET']['realm_suffix']));
104 104
         $localValueIfAny = "";
105 105
 
106 106
 // but there's some common internal attributes populated directly
@@ -176,11 +176,11 @@  discard block
 block discarded – undo
176 176
     public function invitationMailBody($invitationLink) {
177 177
         $text = _("Hello!");
178 178
         $text .= "\n\n";
179
-        $text .= sprintf(_("A new %s access credential has been created for you by your network administrator."),CONFIG_CONFASSISTANT['CONSORTIUM']['display_name']);
179
+        $text .= sprintf(_("A new %s access credential has been created for you by your network administrator."), CONFIG_CONFASSISTANT['CONSORTIUM']['display_name']);
180 180
         $text .= " ";
181 181
         $text .= sprintf(_("Please follow the following link with the device you want to enable for %s to get a custom %s installation program just for you. You can click on the link, copy and paste it into a browser or scan the attached QR code."), CONFIG_CONFASSISTANT['CONSORTIUM']['display_name'], CONFIG_CONFASSISTANT['CONSORTIUM']['display_name']);
182 182
         $text .= "\n\n$invitationLink\n\n"; // gets replaced with the token value by getBody()
183
-        $text .= sprintf(_("Please keep this email or bookmark this link for future use. After picking up your %s installation program, you can use the same link to get status information about your %s account."),CONFIG_CONFASSISTANT['CONSORTIUM']['display_name'], CONFIG_CONFASSISTANT['CONSORTIUM']['display_name']);
183
+        $text .= sprintf(_("Please keep this email or bookmark this link for future use. After picking up your %s installation program, you can use the same link to get status information about your %s account."), CONFIG_CONFASSISTANT['CONSORTIUM']['display_name'], CONFIG_CONFASSISTANT['CONSORTIUM']['display_name']);
184 184
         $text .= "\n\n";
185 185
         $text .= _("Regards,");
186 186
         $text .= "\n\n";
@@ -464,7 +464,7 @@  discard block
 block discarded – undo
464 464
                 $indexStatement = "$certstatus\t$expiryIndexTxt\t" . ($certstatus == "R" ? "$nowIndexTxt,unspecified" : "") . "\t$serialHex\tunknown\t/O=" . CONFIG_CONFASSISTANT['CONSORTIUM']['name'] . "/OU=$federation/CN=$cn/emailAddress=$cn\n";
465 465
                 $logHandle->debug(4, "index.txt contents-to-be: $indexStatement");
466 466
                 if (!file_put_contents($tempdir . "/index.txt", $indexStatement)) {
467
-                $logHandle->debug(1,"Unable to write openssl index.txt file for revocation handling!");
467
+                $logHandle->debug(1, "Unable to write openssl index.txt file for revocation handling!");
468 468
                 }
469 469
                 // index.txt.attr is dull but needs to exist
470 470
                 file_put_contents($tempdir . "/index.txt.attr", "unique_subject = yes\n");
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
         if ($invitationsResult->num_rows == 0) {
575 575
             $loggerInstance->debug(2, "Token  $tokenvalue not found in database or database query error!\n");
576 576
             return ["status" => self::SB_TOKENSTATUS_INVALID,
577
-                "cert_status" => [],];
577
+                "cert_status" => [], ];
578 578
         }
579 579
         // if not returned, we found the token in the DB
580 580
         $invitationRow = mysqli_fetch_object(/** @scrutinizer ignore-type */ $invitationsResult);
@@ -744,7 +744,7 @@  discard block
 block discarded – undo
744 744
                 throw new Exception("Impossible: the string ends with '/admin' but it's not possible to cut six characters from the end?!");
745 745
             }
746 746
         }
747
-        $link .= '/accountstatus/accountstatus.php?token='.$token;
747
+        $link .= '/accountstatus/accountstatus.php?token=' . $token;
748 748
         return $link;
749 749
     }
750 750
 
Please login to merge, or discard this patch.
core/UserManagement.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -276,9 +276,9 @@
 block discarded – undo
276 276
         $retval = [];
277 277
         $invitations = $this->databaseHandle->exec("SELECT cat_institution_id, country, name, invite_issuer_level, invite_dest_mail, invite_token 
278 278
                                         FROM invitations 
279
-                                        WHERE cat_institution_id " . ( $idpIdentifier != 0 ? "= $idpIdentifier" : "IS NULL") . " AND invite_created >= TIMESTAMPADD(DAY, -1, NOW()) AND used = 0");
279
+                                        WHERE cat_institution_id " . ($idpIdentifier != 0 ? "= $idpIdentifier" : "IS NULL") . " AND invite_created >= TIMESTAMPADD(DAY, -1, NOW()) AND used = 0");
280 280
         // SELECT -> resource, not boolean
281
-        $this->loggerInstance->debug(4, "Retrieving pending invitations for " . ($idpIdentifier != 0 ? "IdP $idpIdentifier" : "IdPs awaiting initial creation" ) . ".\n");
281
+        $this->loggerInstance->debug(4, "Retrieving pending invitations for " . ($idpIdentifier != 0 ? "IdP $idpIdentifier" : "IdPs awaiting initial creation") . ".\n");
282 282
         while ($invitationQuery = mysqli_fetch_object(/** @scrutinizer ignore-type */ $invitations)) {
283 283
             $retval[] = ["country" => $invitationQuery->country, "name" => $invitationQuery->name, "mail" => $invitationQuery->invite_dest_mail, "token" => $invitationQuery->invite_token];
284 284
         }
Please login to merge, or discard this patch.
devices/linux/Device_Linux.php 1 patch
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -33,12 +33,12 @@  discard block
 block discarded – undo
33 33
     public function writeInstaller() {
34 34
         $installerPath = $this->installerBasename . ".py";
35 35
         $this->copyFile("main.py", $installerPath);
36
-        $installer = fopen($installerPath,"a");
36
+        $installer = fopen($installerPath, "a");
37 37
         if ($installer === FALSE) {
38 38
             throw new Exception("Unable to open installer file for writing!");
39 39
         }
40
-        fwrite($installer,$this->writeMessages());
41
-        fwrite($installer,$this->writeConfigVars());
40
+        fwrite($installer, $this->writeMessages());
41
+        fwrite($installer, $this->writeConfigVars());
42 42
         fwrite($installer, "run_installer()\n");
43 43
         fclose($installer);
44 44
         return($installerPath);
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
         $out .= 'Messages.p12_title = "' . _("personal certificate file (p12 or pfx)") . "\"\n";
105 105
         $out .= 'Messages.save_wpa_conf = "' . _("Network Manager configuration failed, but we may generate a wpa_supplicant configuration file if you wish. Be warned that your connection password will be saved in this file as clear text.") . "\"\n";
106 106
         $out .= 'Messages.save_wpa_confirm = "' . _("Write the file") . "\"\n";
107
-        $out .= 'Messages.wrongUsernameFormat = "' ._("Error: Your username must be of the form 'xxx@institutionID' e.g. '[email protected]'!") . "\"\n";
107
+        $out .= 'Messages.wrongUsernameFormat = "' . _("Error: Your username must be of the form 'xxx@institutionID' e.g. '[email protected]'!") . "\"\n";
108 108
         $out .= 'Messages.wrong_realm = "' . _("Error: your username must be in the form of 'xxx@{}'. Please enter the username in the correct format.") . "\"\n";
109 109
         $out .= 'Messages.wrong_realm_suffix = "' . _("Error: your username must be in the form of 'xxx@institutionID' and end with '{}'. Please enter the username in the correct format.") . "\"\n";
110 110
     
@@ -133,8 +133,8 @@  discard block
 block discarded – undo
133 133
             $out .= "Config.use_other_tls_id = False\n";
134 134
         }
135 135
         $tou = $this->mkUserConsent();
136
-        $out .= 'Config.tou = ' . ( $tou ? '"""' . $tou . '"""' : 'None' ) . "\n"; 
137
-        $out .= 'Config.CA = """' . $this->mkCAfile()  . '"""' . "\n";
136
+        $out .= 'Config.tou = ' . ($tou ? '"""' . $tou . '"""' : 'None') . "\n"; 
137
+        $out .= 'Config.CA = """' . $this->mkCAfile() . '"""' . "\n";
138 138
         $out .= "Config.anonymous_identity = '" . $this->determineOuterIdString() . "'\n";
139 139
         $out .= 'Config.init_info = """' . $this->mkIntro() . '"""' . "\n";
140 140
         $out .= 'Config.init_confirmation = "' . $this->mkProfileConfirmation() . "\"\n";
@@ -143,10 +143,10 @@  discard block
 block discarded – undo
143 143
         if (!empty($this->attributes['internal:realm'][0])) {
144 144
            $out .= 'Config.user_realm = "' . $this->attributes['internal:realm'][0] . "\"\n";
145 145
         }
146
-        if(!empty($this->attributes['internal:hint_userinput_suffix'][0]) && $this->attributes['internal:hint_userinput_suffix'][0] == 1) {
146
+        if (!empty($this->attributes['internal:hint_userinput_suffix'][0]) && $this->attributes['internal:hint_userinput_suffix'][0] == 1) {
147 147
             $out .= "Config.hint_user_input = True\n";
148 148
         }
149
-        if(!empty($this->attributes['internal:verify_userinput_suffix'][0]) && $this->attributes['internal:verify_userinput_suffix'][0] == 1) {
149
+        if (!empty($this->attributes['internal:verify_userinput_suffix'][0]) && $this->attributes['internal:verify_userinput_suffix'][0] == 1) {
150 150
             $out .= "Config.verify_user_realm_input = True\n";
151 151
         }        
152 152
         return $out;
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
             }
187 187
             $out .= "'DNS:$oneServer'";
188 188
         }
189
-        return "[" . $out. "]";
189
+        return "[" . $out . "]";
190 190
     }
191 191
 
192 192
     
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
         return '[' . implode(', ', $outArray) . ']';
211 211
     }
212 212
     
213
-    private function mkCAfile(){
213
+    private function mkCAfile() {
214 214
         $out = '';
215 215
         $cAlist = $this->attributes['internal:CAs'][0];
216 216
         foreach ($cAlist as $oneCa) {
Please login to merge, or discard this patch.
devices/ms/WindowsCommon.php 1 patch
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -188,11 +188,11 @@  discard block
 block discarded – undo
188 188
         $logoCount = count($logosToPlace);
189 189
         if ($logoCount > 0) {
190 190
             $voffset = $freeTop;
191
-            $freeSpace = (int)round($this->background['freeHeight'] / ($logoCount + 1));
191
+            $freeSpace = (int) round($this->background['freeHeight'] / ($logoCount + 1));
192 192
             foreach ($logosToPlace as $logo) {
193 193
                 $voffset += $freeSpace;
194 194
                 $logoSize = $logo->getImageGeometry();
195
-                $hoffset = (int)round(($bgImageSize['width'] - $logoSize['width']) / 2);
195
+                $hoffset = (int) round(($bgImageSize['width'] - $logoSize['width']) / 2);
196 196
                 $bgImage->compositeImage($logo, $logo->getImageCompose(), $hoffset, $voffset);
197 197
                 $voffset += $logoSize['height'];
198 198
                 }
@@ -232,7 +232,7 @@  discard block
 block discarded – undo
232 232
             $fcontents .= "\n" . '!define USER_GROUP "' . $this->translateString(str_replace('"', '$\\"', $attr['profile:name'][0]), $this->codePage) . '"
233 233
 ';
234 234
         }
235
-        $fcontents .=  '
235
+        $fcontents .= '
236 236
 Caption "' . $this->translateString(sprintf(WindowsCommon::sprint_nsi(_("%s installer for %s")), CONFIG_CONFASSISTANT['CONSORTIUM']['display_name'], $attr['general:instname'][0]), $this->codePage) . '"
237 237
 !define APPLICATION "' . $this->translateString(sprintf(WindowsCommon::sprint_nsi(_("%s installer for %s")), CONFIG_CONFASSISTANT['CONSORTIUM']['display_name'], $attr['general:instname'][0]), $this->codePage) . '"
238 238
 !define VERSION "' . \core\CAT::VERSION_MAJOR . '.' . \core\CAT::VERSION_MINOR . '"
@@ -241,8 +241,8 @@  discard block
 block discarded – undo
241 241
 !define LOCALE "' . preg_replace('/\..*$/', '', CONFIG['LANGUAGES'][$this->languageInstance->getLang()]['locale']) . '"
242 242
 ;--------------------------------
243 243
 !define ORGANISATION "' . $this->translateString($attr['general:instname'][0], $this->codePage) . '"
244
-!define SUPPORT "' . ((isset($attr['support:email'][0]) && $attr['support:email'][0] ) ? $attr['support:email'][0] : $this->translateString($this->support_email_substitute, $this->codePage)) . '"
245
-!define URL "' . ((isset($attr['support:url'][0]) && $attr['support:url'][0] ) ? $attr['support:url'][0] : $this->translateString($this->support_url_substitute, $this->codePage)) . '"
244
+!define SUPPORT "' . ((isset($attr['support:email'][0]) && $attr['support:email'][0]) ? $attr['support:email'][0] : $this->translateString($this->support_email_substitute, $this->codePage)) . '"
245
+!define URL "' . ((isset($attr['support:url'][0]) && $attr['support:url'][0]) ? $attr['support:url'][0] : $this->translateString($this->support_url_substitute, $this->codePage)) . '"
246 246
     ';
247 247
 
248 248
 
@@ -256,11 +256,11 @@  discard block
 block discarded – undo
256 256
             $fcontents .= '!define REALM "' . $attr['internal:realm'][0] . '"
257 257
 ';
258 258
         }
259
-        if(!empty($attr['internal:hint_userinput_suffix'][0]) && $attr['internal:hint_userinput_suffix'][0] == 1) {
259
+        if (!empty($attr['internal:hint_userinput_suffix'][0]) && $attr['internal:hint_userinput_suffix'][0] == 1) {
260 260
             $fcontents .= '!define HINT_USER_INPUT "' . $attr['internal:hint_userinput_suffix'][0] . '"
261 261
 ';
262 262
         }
263
-        if(!empty($attr['internal:verify_userinput_suffix'][0]) && $attr['internal:verify_userinput_suffix'][0] == 1) {
263
+        if (!empty($attr['internal:verify_userinput_suffix'][0]) && $attr['internal:verify_userinput_suffix'][0] == 1) {
264 264
             $fcontents .= '!define VERIFY_USER_REALM_INPUT "' . $attr['internal:verify_userinput_suffix'][0] . '"
265 265
 ';
266 266
         }
Please login to merge, or discard this patch.
schema/1_1-2_0-script.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -95,7 +95,7 @@
 block discarded – undo
95 95
 
96 96
 while ($oneAttrib = mysqli_fetch_object(/** @scrutinizer ignore-type */ $idpWideOptionsQuery)) {
97 97
     if (!isset($profiles[$oneAttrib->institution_id])) {
98
-        $idp = new \core\IdP((int)$oneAttrib->institution_id);
98
+        $idp = new \core\IdP((int) $oneAttrib->institution_id);
99 99
         $profiles[$oneAttrib->institution_id] = ['IdP' => $idp, 'Profiles' => $idp->listProfiles()];
100 100
         echo "Debug: IdP " . $idp->identifier . " has profiles ";
101 101
         foreach ($profiles[$oneAttrib->institution_id]['Profiles'] as $oneProfileObject) {
Please login to merge, or discard this patch.
web/diag/radius_tests.php 1 patch
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -27,7 +27,7 @@  discard block
 block discarded – undo
27 27
 
28 28
 function disp_name($eap) {
29 29
     $displayName = \core\common\EAP::eapDisplayName($eap);
30
-    return $displayName['OUTER'] . ( $displayName['INNER'] != '' ? '-' . $displayName['INNER'] : '');
30
+    return $displayName['OUTER'] . ($displayName['INNER'] != '' ? '-' . $displayName['INNER'] : '');
31 31
 }
32 32
 
33 33
 if (!isset($_REQUEST['test_type']) || !$_REQUEST['test_type']) {
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
     $testsuite = new \core\diag\RADIUSTests($check_realm, $my_profile->getRealmCheckOuterUsername(), $my_profile->getEapMethodsinOrderOfPreference(1), $my_profile->getCollapsedAttributes()['eap:server_name'], $my_profile->getCollapsedAttributes()['eap:ca_file']);
51 51
 } else {
52 52
     $my_profile = NULL;
53
-    $testsuite = new \core\diag\RADIUSTests($check_realm, "@".$check_realm);
53
+    $testsuite = new \core\diag\RADIUSTests($check_realm, "@" . $check_realm);
54 54
 }
55 55
 
56 56
 
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
     // contains port number; needs to be redacted for filter_var to work
67 67
     // in any case, it's a printable string, so filter it initially
68 68
     
69
-    $filteredHost = filter_input(INPUT_GET,'src', FILTER_SANITIZE_STRING) ?? filter_input(INPUT_POST,'src', FILTER_SANITIZE_STRING);
69
+    $filteredHost = filter_input(INPUT_GET, 'src', FILTER_SANITIZE_STRING) ?? filter_input(INPUT_POST, 'src', FILTER_SANITIZE_STRING);
70 70
     $hostonly1 = preg_replace('/:[0-9]*$/', "", $filteredHost);
71 71
     $hostonly2 = preg_replace('/^\[/', "", $hostonly1);
72 72
     $hostonly3 = preg_replace('/\]$/', "", $hostonly2);
@@ -295,12 +295,12 @@  discard block
 block discarded – undo
295 295
         $returnarray['time_millisec'] = sprintf("%d", $testsuite->UDP_reachability_result[$host]['time_millisec']);
296 296
 
297 297
         if (preg_match('/verify error:num=19/', implode($opensslbabble))) {
298
-            $printedres .= "<tr><td>"._("<strong>ERROR</strong>: the server presented a certificate which is from an unknown authority!") . $measure ."</td></tr>";
298
+            $printedres .= "<tr><td>" . _("<strong>ERROR</strong>: the server presented a certificate which is from an unknown authority!") . $measure . "</td></tr>";
299 299
             $my_ip_addrs[$key]["status"] = "FAILED";
300 300
             $goterror = 1;
301 301
         }
302 302
         if (preg_match('/verify return:1/', implode($opensslbabble))) {
303
-            $printedres .= "<tr><td>"._("Completed.") . $measure . "</td></tr>";
303
+            $printedres .= "<tr><td>" . _("Completed.") . $measure . "</td></tr>";
304 304
             $printedres .= "<tr><td></td><td><div class=\"more\">";
305 305
             $my_ip_addrs[$key]["status"] = "OK";
306 306
             $servercertRaw = implode("\n", $opensslbabble);
Please login to merge, or discard this patch.
web/lib/admin/UIElements.php 1 patch
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
                         }
185 185
                         break;
186 186
                     case "boolean":
187
-                        $retval .= "<tr><td>" . $this->displayName($option['name']) . "</td><td>$language</td><td><strong>" . ($content == "on" ? _("on") : _("off") ) . "</strong></td></tr>";
187
+                        $retval .= "<tr><td>" . $this->displayName($option['name']) . "</td><td>$language</td><td><strong>" . ($content == "on" ? _("on") : _("off")) . "</strong></td></tr>";
188 188
                         break;
189 189
                     default:
190 190
                         $retval .= "<tr><td>" . $this->displayName($option['name']) . "</td><td>$language</td><td><strong>$content</strong></td></tr>";
@@ -309,7 +309,7 @@  discard block
 block discarded – undo
309 309
     
310 310
     private function checkROWIDpresence($reference) {
311 311
         $found = preg_match("/^ROWID-.*/", $reference);
312
-        if ($found  != 1) { // get excited on not-found AND on execution error
312
+        if ($found != 1) { // get excited on not-found AND on execution error
313 313
             throw new Exception("Error, ROWID expected.");
314 314
         }
315 315
     }
@@ -332,7 +332,7 @@  discard block
 block discarded – undo
332 332
 
333 333
         $details['name'] = preg_replace('/(.)\/(.)/', "$1<br/>$2", $details['name']);
334 334
         $details['name'] = preg_replace('/\//', "", $details['name']);
335
-        $certstatus = ( $details['root'] == 1 ? "R" : "I");
335
+        $certstatus = ($details['root'] == 1 ? "R" : "I");
336 336
         if ($details['ca'] == 0 && $details['root'] != 1) {
337 337
             return "<div class='ca-summary' style='background-color:red'><div style='position:absolute; right: 0px; width:20px; height:20px; background-color:maroon;  border-radius:10px; text-align: center;'><div style='padding-top:3px; font-weight:bold; color:#ffffff;'>S</div></div>" . _("This is a <strong>SERVER</strong> certificate!") . "<br/>" . $details['name'] . "</div>";
338 338
         }
Please login to merge, or discard this patch.