@@ -23,8 +23,9 @@ discard block |
||
| 23 | 23 | */ |
| 24 | 24 | public static function serialize($data, $compact = true) |
| 25 | 25 | { |
| 26 | - if ($compact) |
|
| 27 | - $data = self::compact($data); |
|
| 26 | + if ($compact) { |
|
| 27 | + $data = self::compact($data); |
|
| 28 | + } |
|
| 28 | 29 | |
| 29 | 30 | $data = serialize($data); |
| 30 | 31 | $data = self::compress($data); |
@@ -39,19 +40,22 @@ discard block |
||
| 39 | 40 | */ |
| 40 | 41 | public static function unserialize($data) |
| 41 | 42 | { |
| 42 | - if (is_resource($data)) |
|
| 43 | - // For some databases (like Postgres) binary columns return as a resource, fetch the content first |
|
| 43 | + if (is_resource($data)) { |
|
| 44 | + // For some databases (like Postgres) binary columns return as a resource, fetch the content first |
|
| 44 | 45 | $data = stream_get_contents($data, -1, 0); |
| 46 | + } |
|
| 45 | 47 | |
| 46 | 48 | $originalData = $data; |
| 47 | 49 | $data = self::uncompress($data); |
| 48 | 50 | |
| 49 | - if ($data === false) |
|
| 50 | - $data = $originalData; |
|
| 51 | + if ($data === false) { |
|
| 52 | + $data = $originalData; |
|
| 53 | + } |
|
| 51 | 54 | |
| 52 | 55 | $data = @unserialize($data); |
| 53 | - if ($data === false) |
|
| 54 | - $data = $originalData; |
|
| 56 | + if ($data === false) { |
|
| 57 | + $data = $originalData; |
|
| 58 | + } |
|
| 55 | 59 | |
| 56 | 60 | return $data; |
| 57 | 61 | } |
@@ -63,8 +67,9 @@ discard block |
||
| 63 | 67 | */ |
| 64 | 68 | public static function compress($data) |
| 65 | 69 | { |
| 66 | - if (Audit::getInstance()->compressData) |
|
| 67 | - $data = gzcompress($data); |
|
| 70 | + if (Audit::getInstance()->compressData) { |
|
| 71 | + $data = gzcompress($data); |
|
| 72 | + } |
|
| 68 | 73 | return $data; |
| 69 | 74 | } |
| 70 | 75 | |
@@ -90,15 +95,17 @@ discard block |
||
| 90 | 95 | public static function compact($data, $simplify = false, $threshold = 512) |
| 91 | 96 | { |
| 92 | 97 | $data = ArrayHelper::toArray($data); |
| 93 | - if ($simplify) |
|
| 94 | - array_walk($data, function (&$value) { |
|
| 98 | + if ($simplify) { |
|
| 99 | + array_walk($data, function (&$value) { |
|
| 95 | 100 | if (is_array($value) && count($value) == 1) $value = reset($value); |
| 101 | + } |
|
| 96 | 102 | }); |
| 97 | 103 | |
| 98 | 104 | $tooBig = []; |
| 99 | - foreach ($data as $index => $value) |
|
| 100 | - if (strlen(serialize($value)) > $threshold) |
|
| 105 | + foreach ($data as $index => $value) { |
|
| 106 | + if (strlen(serialize($value)) > $threshold) |
|
| 101 | 107 | $tooBig[] = $index; |
| 108 | + } |
|
| 102 | 109 | |
| 103 | 110 | if (count($tooBig)) { |
| 104 | 111 | $data = array_diff_key($data, array_flip($tooBig)); |
@@ -117,8 +124,9 @@ discard block |
||
| 117 | 124 | { |
| 118 | 125 | $trace = debug_backtrace(); |
| 119 | 126 | array_pop($trace); // remove the last trace since it would be the entry script, not very useful |
| 120 | - if ($skip > 0) |
|
| 121 | - $trace = array_slice($trace, $skip); |
|
| 127 | + if ($skip > 0) { |
|
| 128 | + $trace = array_slice($trace, $skip); |
|
| 129 | + } |
|
| 122 | 130 | return self::cleanupTrace($trace); |
| 123 | 131 | } |
| 124 | 132 | |
@@ -130,8 +138,9 @@ discard block |
||
| 130 | 138 | */ |
| 131 | 139 | public static function cleanupTrace($trace) |
| 132 | 140 | { |
| 133 | - if (!is_array($trace)) |
|
| 134 | - return []; |
|
| 141 | + if (!is_array($trace)) { |
|
| 142 | + return []; |
|
| 143 | + } |
|
| 135 | 144 | |
| 136 | 145 | foreach ($trace as $n => $call) { |
| 137 | 146 | $call['file'] = isset($call['file']) ? $call['file'] : 'unknown'; |
@@ -140,14 +149,18 @@ discard block |
||
| 140 | 149 | $call['file'] = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $call['file']); |
| 141 | 150 | |
| 142 | 151 | // XDebug |
| 143 | - if (isset($call['params'])) unset($call['params']); |
|
| 152 | + if (isset($call['params'])) { |
|
| 153 | + unset($call['params']); |
|
| 154 | + } |
|
| 144 | 155 | |
| 145 | 156 | // Trace entry contains the class instance, also compact and include this |
| 146 | - if (isset($call['object'])) |
|
| 147 | - $call['object'] = current(self::cleanupTraceArguments([$call['object']])); |
|
| 157 | + if (isset($call['object'])) { |
|
| 158 | + $call['object'] = current(self::cleanupTraceArguments([$call['object']])); |
|
| 159 | + } |
|
| 148 | 160 | |
| 149 | - if (isset($call['args'])) |
|
| 150 | - $call['args'] = self::cleanupTraceArguments($call['args']); |
|
| 161 | + if (isset($call['args'])) { |
|
| 162 | + $call['args'] = self::cleanupTraceArguments($call['args']); |
|
| 163 | + } |
|
| 151 | 164 | |
| 152 | 165 | $trace[$n] = $call; |
| 153 | 166 | } |
@@ -176,10 +189,11 @@ discard block |
||
| 176 | 189 | $args[$name] = $object; |
| 177 | 190 | } |
| 178 | 191 | } else if (is_array($value)) { |
| 179 | - if ($recurseDepth > 0) |
|
| 180 | - $args[$name] = self::cleanupTraceArguments($value, $recurseDepth - 1); |
|
| 181 | - else |
|
| 182 | - $args[$name] = 'Array'; |
|
| 192 | + if ($recurseDepth > 0) { |
|
| 193 | + $args[$name] = self::cleanupTraceArguments($value, $recurseDepth - 1); |
|
| 194 | + } else { |
|
| 195 | + $args[$name] = 'Array'; |
|
| 196 | + } |
|
| 183 | 197 | } |
| 184 | 198 | } |
| 185 | 199 | return $args; |
@@ -212,8 +226,9 @@ discard block |
||
| 212 | 226 | public static function formatAsQuery($data) |
| 213 | 227 | { |
| 214 | 228 | $data = rawurldecode($data); |
| 215 | - if (!preg_match('/^([\w\d\-\[\]]+(=[^&]*)?(&[\w\d\-\[\]]+(=[^&]*)?)*)?$/', $data)) |
|
| 216 | - return null; |
|
| 229 | + if (!preg_match('/^([\w\d\-\[\]]+(=[^&]*)?(&[\w\d\-\[\]]+(=[^&]*)?)*)?$/', $data)) { |
|
| 230 | + return null; |
|
| 231 | + } |
|
| 217 | 232 | |
| 218 | 233 | $result = []; |
| 219 | 234 | parse_str($data, $result); |
@@ -241,8 +256,9 @@ discard block |
||
| 241 | 256 | $doc = new \DOMDocument('1.0'); |
| 242 | 257 | $doc->preserveWhiteSpace = false; |
| 243 | 258 | $doc->formatOutput = true; |
| 244 | - if (@$doc->loadXML($data)) |
|
| 245 | - return htmlentities($doc->saveXML(), ENT_COMPAT, 'UTF-8'); |
|
| 259 | + if (@$doc->loadXML($data)) { |
|
| 260 | + return htmlentities($doc->saveXML(), ENT_COMPAT, 'UTF-8'); |
|
| 261 | + } |
|
| 246 | 262 | return null; |
| 247 | 263 | } |
| 248 | 264 | |
@@ -253,14 +269,16 @@ discard block |
||
| 253 | 269 | */ |
| 254 | 270 | public static function formatAsHTML($data) |
| 255 | 271 | { |
| 256 | - if ($data == strip_tags($data) || strtolower(substr(ltrim($data), 0, 5)) == '<?xml') |
|
| 257 | - return null; |
|
| 272 | + if ($data == strip_tags($data) || strtolower(substr(ltrim($data), 0, 5)) == '<?xml') { |
|
| 273 | + return null; |
|
| 274 | + } |
|
| 258 | 275 | |
| 259 | 276 | $doc = new \DOMDocument('1.0'); |
| 260 | 277 | $doc->preserveWhiteSpace = false; |
| 261 | 278 | $doc->formatOutput = true; |
| 262 | - if (@$doc->loadHTML($data)) |
|
| 263 | - return htmlentities($doc->saveHTML(), ENT_COMPAT, 'UTF-8'); |
|
| 279 | + if (@$doc->loadHTML($data)) { |
|
| 280 | + return htmlentities($doc->saveHTML(), ENT_COMPAT, 'UTF-8'); |
|
| 281 | + } |
|
| 264 | 282 | return null; |
| 265 | 283 | } |
| 266 | 284 | } |
| 267 | 285 | \ No newline at end of file |
@@ -14,8 +14,7 @@ discard block |
||
| 14 | 14 | |
| 15 | 15 | try { |
| 16 | 16 | parent::__construct($wsdl, $options); |
| 17 | - } |
|
| 18 | - catch (\SoapFault $e) { |
|
| 17 | + } catch (\SoapFault $e) { |
|
| 19 | 18 | // Catches errors like being unable to read the WSDL and so on |
| 20 | 19 | $this->logSoapFault($e); |
| 21 | 20 | throw $e; |
@@ -46,22 +45,24 @@ discard block |
||
| 46 | 45 | try { |
| 47 | 46 | $result = parent::__soapCall($function_name, $arguments, $options, $input_headers, $output_headers); |
| 48 | 47 | $this->_data['duration'] = microtime(true) - $started; |
| 49 | - if ($output_headers) |
|
| 50 | - $this->_data['output_headers'] = (array) $output_headers; |
|
| 48 | + if ($output_headers) { |
|
| 49 | + $this->_data['output_headers'] = (array) $output_headers; |
|
| 50 | + } |
|
| 51 | 51 | |
| 52 | - if (is_soap_fault($result)) |
|
| 53 | - // Cover non-exception variant |
|
| 52 | + if (is_soap_fault($result)) { |
|
| 53 | + // Cover non-exception variant |
|
| 54 | 54 | return $this->logSoapFault($result); |
| 55 | + } |
|
| 55 | 56 | |
| 56 | 57 | $this->_data['result_object'] = $result; |
| 57 | 58 | $this->finalize(); |
| 58 | 59 | |
| 59 | 60 | return $result; |
| 60 | - } |
|
| 61 | - catch (\Exception $error) { |
|
| 61 | + } catch (\Exception $error) { |
|
| 62 | 62 | $this->_data['duration'] = microtime(true) - $started; |
| 63 | - if ($output_headers) |
|
| 64 | - $this->_data['output_headers'] = (array) $output_headers; |
|
| 63 | + if ($output_headers) { |
|
| 64 | + $this->_data['output_headers'] = (array) $output_headers; |
|
| 65 | + } |
|
| 65 | 66 | |
| 66 | 67 | $this->logSoapFault($error); |
| 67 | 68 | throw $error; |
@@ -82,8 +83,9 @@ discard block |
||
| 82 | 83 | |
| 83 | 84 | public function __setCookie ($name, $value = null) |
| 84 | 85 | { |
| 85 | - if (!isset($this->_data['cookies'])) |
|
| 86 | - $this->_data['cookies'] = []; |
|
| 86 | + if (!isset($this->_data['cookies'])) { |
|
| 87 | + $this->_data['cookies'] = []; |
|
| 88 | + } |
|
| 87 | 89 | $this->_data['cookies'][$name] = $value; |
| 88 | 90 | |
| 89 | 91 | parent::__setCookie($name, $value); |
@@ -99,7 +101,8 @@ discard block |
||
| 99 | 101 | protected function finalize() |
| 100 | 102 | { |
| 101 | 103 | $_panel = Audit::getInstance()->getPanel('audit/soap'); |
| 102 | - if ($_panel) |
|
| 103 | - $_panel->logSoapRequest($this->_data); |
|
| 104 | + if ($_panel) { |
|
| 105 | + $_panel->logSoapRequest($this->_data); |
|
| 106 | + } |
|
| 104 | 107 | } |
| 105 | 108 | } |
| 106 | 109 | \ No newline at end of file |
@@ -37,13 +37,15 @@ discard block |
||
| 37 | 37 | */ |
| 38 | 38 | public function beforeSave($insert) |
| 39 | 39 | { |
| 40 | - if ($insert && $this->hasAttribute('created')) |
|
| 41 | - $this->created = date('Y-m-d H:i:s'); |
|
| 40 | + if ($insert && $this->hasAttribute('created')) { |
|
| 41 | + $this->created = date('Y-m-d H:i:s'); |
|
| 42 | + } |
|
| 42 | 43 | |
| 43 | - if ($this->autoSerialize) |
|
| 44 | - foreach ($this->serializeAttributes as $attribute) |
|
| 44 | + if ($this->autoSerialize) { |
|
| 45 | + foreach ($this->serializeAttributes as $attribute) |
|
| 45 | 46 | if ($this->hasAttribute($attribute)) |
| 46 | 47 | $this->$attribute = [Helper::serialize($this->$attribute, false), \PDO::PARAM_LOB]; |
| 48 | + } |
|
| 47 | 49 | |
| 48 | 50 | return parent::beforeSave($insert); |
| 49 | 51 | } |
@@ -56,12 +58,13 @@ discard block |
||
| 56 | 58 | { |
| 57 | 59 | parent::afterSave($insert, $changedAttributes); |
| 58 | 60 | |
| 59 | - if ($this->autoSerialize) |
|
| 60 | - foreach ($this->serializeAttributes as $attribute) |
|
| 61 | + if ($this->autoSerialize) { |
|
| 62 | + foreach ($this->serializeAttributes as $attribute) |
|
| 61 | 63 | if ($this->hasAttribute($attribute)) { |
| 62 | 64 | if (is_array($this->$attribute)) { |
| 63 | 65 | // Get rid of the extra PDO parameter type if needed |
| 64 | 66 | $array = $this->$attribute; |
| 67 | + } |
|
| 65 | 68 | $this->$attribute = $array[0]; |
| 66 | 69 | } |
| 67 | 70 | $this->$attribute = Helper::unserialize($this->$attribute); |
@@ -75,9 +78,10 @@ discard block |
||
| 75 | 78 | { |
| 76 | 79 | parent::afterFind(); |
| 77 | 80 | |
| 78 | - if ($this->autoSerialize) |
|
| 79 | - foreach ($this->serializeAttributes as $attribute) |
|
| 81 | + if ($this->autoSerialize) { |
|
| 82 | + foreach ($this->serializeAttributes as $attribute) |
|
| 80 | 83 | if ($this->hasAttribute($attribute)) |
| 81 | 84 | $this->$attribute = Helper::unserialize($this->$attribute); |
| 85 | + } |
|
| 82 | 86 | } |
| 83 | 87 | } |
| 84 | 88 | \ No newline at end of file |
@@ -101,8 +101,9 @@ |
||
| 101 | 101 | public function cleanup($maxAge = null) |
| 102 | 102 | { |
| 103 | 103 | $maxAge = $maxAge !== null ? $maxAge : $this->maxAge; |
| 104 | - if ($maxAge === null) |
|
| 105 | - return false; |
|
| 104 | + if ($maxAge === null) { |
|
| 105 | + return false; |
|
| 106 | + } |
|
| 106 | 107 | return AuditData::deleteAll('type = :type AND created <= :created', [ |
| 107 | 108 | ':type' => $this->id, |
| 108 | 109 | ':created' => date('Y-m-d 23:59:59', strtotime("-$maxAge days")), |
@@ -46,9 +46,9 @@ discard block |
||
| 46 | 46 | public function actionView($id, $panel = '') |
| 47 | 47 | { |
| 48 | 48 | list($model, $panels) = $this->loadData($id); |
| 49 | - if (isset($panels[$panel])) |
|
| 50 | - $activePanel = $panel; |
|
| 51 | - else { |
|
| 49 | + if (isset($panels[$panel])) { |
|
| 50 | + $activePanel = $panel; |
|
| 51 | + } else { |
|
| 52 | 52 | reset($panels); |
| 53 | 53 | $activePanel = key($panels); |
| 54 | 54 | } |
@@ -97,9 +97,10 @@ discard block |
||
| 97 | 97 | $panels = $this->module->loadPanels($this->module->getPanelIdentifiers()); |
| 98 | 98 | $activePanels = []; |
| 99 | 99 | $data = ArrayHelper::getColumn($model->data, 'data'); |
| 100 | - foreach ($panels as $panelId => $panel) |
|
| 101 | - if ($panel->hasEntryData($model)) { |
|
| 100 | + foreach ($panels as $panelId => $panel) { |
|
| 101 | + if ($panel->hasEntryData($model)) { |
|
| 102 | 102 | $panel->tag = $id; |
| 103 | + } |
|
| 103 | 104 | $panel->model = $model; |
| 104 | 105 | $panel->load(isset($data[$panelId]) ? $data[$panelId] : null); |
| 105 | 106 | $activePanels[$panelId] = $panel; |
@@ -51,21 +51,28 @@ |
||
| 51 | 51 | $javascript->origin .= ':' . $value; |
| 52 | 52 | }, |
| 53 | 53 | 'data' => function ($value) use ($javascript) { |
| 54 | - if (count($value)) $javascript->data = $value; |
|
| 54 | + if (count($value)) { |
|
| 55 | + $javascript->data = $value; |
|
| 56 | + } |
|
| 55 | 57 | }, |
| 56 | 58 | ]; |
| 57 | 59 | |
| 58 | - foreach ($map as $key => $target) |
|
| 59 | - if (isset($data[$key])) { |
|
| 60 | + foreach ($map as $key => $target) { |
|
| 61 | + if (isset($data[$key])) { |
|
| 60 | 62 | if (is_callable($target)) $target($data[$key]); |
| 61 | - else $javascript->$target = $data[$key]; |
|
| 63 | + } |
|
| 64 | + else { |
|
| 65 | + $javascript->$target = $data[$key]; |
|
| 66 | + } |
|
| 62 | 67 | } |
| 63 | 68 | |
| 64 | - if (!$javascript->type) |
|
| 65 | - $javascript->type = 'unknown'; |
|
| 69 | + if (!$javascript->type) { |
|
| 70 | + $javascript->type = 'unknown'; |
|
| 71 | + } |
|
| 66 | 72 | |
| 67 | - if ($javascript->save()) |
|
| 68 | - return ['result' => 'ok', 'entry' => $data['auditEntry']]; |
|
| 73 | + if ($javascript->save()) { |
|
| 74 | + return ['result' => 'ok', 'entry' => $data['auditEntry']]; |
|
| 75 | + } |
|
| 69 | 76 | |
| 70 | 77 | return ['result' => 'error', 'errors' => $javascript->getErrors()]; |
| 71 | 78 | } |
@@ -50,8 +50,9 @@ |
||
| 50 | 50 | public static function create($initialise = true) |
| 51 | 51 | { |
| 52 | 52 | $entry = new static; |
| 53 | - if ($initialise) |
|
| 54 | - $entry->record(); |
|
| 53 | + if ($initialise) { |
|
| 54 | + $entry->record(); |
|
| 55 | + } |
|
| 55 | 56 | |
| 56 | 57 | return $entry; |
| 57 | 58 | } |
@@ -96,19 +96,22 @@ discard block |
||
| 96 | 96 | curl_setopt($handle, CURLOPT_URL, $url); |
| 97 | 97 | } |
| 98 | 98 | |
| 99 | - if ($postData) |
|
| 100 | - $this->data[$id]['post'] = $postData; |
|
| 99 | + if ($postData) { |
|
| 100 | + $this->data[$id]['post'] = $postData; |
|
| 101 | + } |
|
| 101 | 102 | |
| 102 | - if ($this->headers) |
|
| 103 | - curl_setopt($handle, CURLOPT_HEADERFUNCTION, [$this, 'captureHeader']); |
|
| 103 | + if ($this->headers) { |
|
| 104 | + curl_setopt($handle, CURLOPT_HEADERFUNCTION, [$this, 'captureHeader']); |
|
| 105 | + } |
|
| 104 | 106 | |
| 105 | 107 | if ($this->log) { |
| 106 | 108 | curl_setopt($handle, CURLOPT_VERBOSE, true); |
| 107 | 109 | curl_setopt($handle, CURLOPT_STDERR, $this->_logHandles[$id] = fopen('php://temp', 'rw+')); |
| 108 | 110 | } |
| 109 | 111 | |
| 110 | - if ($this->content) |
|
| 111 | - curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); |
|
| 112 | + if ($this->content) { |
|
| 113 | + curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1); |
|
| 114 | + } |
|
| 112 | 115 | |
| 113 | 116 | return true; |
| 114 | 117 | } |
@@ -136,8 +139,9 @@ discard block |
||
| 136 | 139 | unset($this->_logHandles[$id]); |
| 137 | 140 | } |
| 138 | 141 | |
| 139 | - if ($this->content) |
|
| 140 | - $this->data[$id]['content']= curl_multi_getcontent($handle); |
|
| 142 | + if ($this->content) { |
|
| 143 | + $this->data[$id]['content']= curl_multi_getcontent($handle); |
|
| 144 | + } |
|
| 141 | 145 | |
| 142 | 146 | // Cleanup empty things |
| 143 | 147 | $this->data[$id] = array_filter($this->data[$id]); |
@@ -192,8 +196,9 @@ discard block |
||
| 192 | 196 | public function captureHeader($handle, $header) |
| 193 | 197 | { |
| 194 | 198 | $id = $this->id($handle); |
| 195 | - if (!isset($this->data[$id]['headers'])) |
|
| 196 | - $this->data[$id]['headers'] = []; |
|
| 199 | + if (!isset($this->data[$id]['headers'])) { |
|
| 200 | + $this->data[$id]['headers'] = []; |
|
| 201 | + } |
|
| 197 | 202 | |
| 198 | 203 | $this->data[$id]['headers'][] = $header; |
| 199 | 204 | return strlen($header); |
@@ -205,8 +210,9 @@ discard block |
||
| 205 | 210 | */ |
| 206 | 211 | protected function id($resource) |
| 207 | 212 | { |
| 208 | - if (!is_resource($resource)) |
|
| 209 | - return false; |
|
| 213 | + if (!is_resource($resource)) { |
|
| 214 | + return false; |
|
| 215 | + } |
|
| 210 | 216 | |
| 211 | 217 | $parts = explode('#', (string)$resource); |
| 212 | 218 | return array_pop($parts); |
@@ -47,12 +47,14 @@ discard block |
||
| 47 | 47 | { |
| 48 | 48 | // Only log each exception once |
| 49 | 49 | $exceptionId = spl_object_hash($exception); |
| 50 | - if (in_array($exceptionId, $this->_exceptions)) |
|
| 51 | - return true; |
|
| 50 | + if (in_array($exceptionId, $this->_exceptions)) { |
|
| 51 | + return true; |
|
| 52 | + } |
|
| 52 | 53 | |
| 53 | 54 | // If this is a follow up exception, make sure to log the base exception first |
| 54 | - if ($exception->getPrevious()) |
|
| 55 | - $this->log($entry_id, $exception->getPrevious()); |
|
| 55 | + if ($exception->getPrevious()) { |
|
| 56 | + $this->log($entry_id, $exception->getPrevious()); |
|
| 57 | + } |
|
| 56 | 58 | |
| 57 | 59 | $error = new AuditError(); |
| 58 | 60 | $error->entry_id = $entry_id; |
@@ -165,8 +167,9 @@ discard block |
||
| 165 | 167 | public function cleanup($maxAge = null) |
| 166 | 168 | { |
| 167 | 169 | $maxAge = $maxAge !== null ? $maxAge : $this->maxAge; |
| 168 | - if ($maxAge === null) |
|
| 169 | - return false; |
|
| 170 | + if ($maxAge === null) { |
|
| 171 | + return false; |
|
| 172 | + } |
|
| 170 | 173 | return AuditError::deleteAll([ |
| 171 | 174 | '<=', 'created', date('Y-m-d 23:59:59', strtotime("-$maxAge days")) |
| 172 | 175 | ]); |