diff --git a/tests/asserts.svg b/tests/asserts.svg
index 02f18d86..773bb753 100644
--- a/tests/asserts.svg
+++ b/tests/asserts.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tests/autoTestAll.md b/tests/autoTestAll.md
index 0ce97250..b48db9d7 100644
--- a/tests/autoTestAll.md
+++ b/tests/autoTestAll.md
@@ -3,188 +3,188 @@
## Summary
* Number of tests performed: 178
-* Number of tests passed: 176
-* Number of tests failed: 2
-* Number of asserts: 509
+* Number of tests passed: 178
+* Number of tests failed: 0
+* Number of asserts: 511
## Result details
| Suite | Test | Status | Time | Result |
|-------|------|--------|------|--------------|
-|AI | LSTM AND | PASS | 155 ms | n/a |
-|AI | LSTM network save and load | PASS | 145 ms | n/a |
-|AI | Liquid XOR | PASS | 374 ms | n/a |
-|AI | Liquid network save and load | PASS | 310 ms | n/a |
-|AI | Normalize features array | PASS | ~0 ms | n/a |
+|AI | LSTM AND | PASS | 185 ms | n/a |
+|AI | LSTM network save and load | PASS | 196 ms | n/a |
+|AI | Liquid XOR | PASS | 465 ms | n/a |
+|AI | Liquid network save and load | PASS | 361 ms | n/a |
+|AI | Normalize features array | PASS | 1 ms | n/a |
|AI | Normalize with schema | PASS | 4 ms | n/a |
-|AI | Perceptron XOR | PASS | 514 ms | n/a |
-|AI | Perceptron XOR Put | PASS | 6 seconds, 765 ms | n/a |
-|AI | Perceptron XOR save and load | PASS | 24 ms | n/a |
-|AI | Perceptron network save and load | PASS | 30 ms | n/a |
-|AI | Test C45 | PASS | 14 ms | n/a |
-|AI | Test ID3 | PASS | 29 ms | n/a |
-|AI | Test KMeans | PASS | 5 ms | n/a |
+|AI | Perceptron XOR | PASS | 197 ms | n/a |
+|AI | Perceptron XOR Put | PASS | 6 seconds, 885 ms | n/a |
+|AI | Perceptron XOR save and load | PASS | 36 ms | n/a |
+|AI | Perceptron network save and load | PASS | 32 ms | n/a |
+|AI | Test C45 | PASS | 15 ms | n/a |
+|AI | Test ID3 | PASS | 30 ms | n/a |
+|AI | Test KMeans | PASS | 7 ms | n/a |
|CSV | Generic CSV | PASS | 1 ms | n/a |
|CSV | Stream CSV | PASS | 10 ms | n/a |
-|CSV | ToFrom CSV | PASS | 4 ms | n/a |
-|Channels | Keep history util | PASS | 4 seconds, 3 ms | n/a |
-|Channels | Remote channel access auditing | PASS | 204 ms | n/a |
-|Channels | Subscribers test | PASS | 569 ms | n/a |
-|Channels | Test Elastic Index | PASS | ~0 ms | n/a |
-|Channels | Test MVS Utils | PASS | 73 ms | n/a |
-|Channels | Test channel (all) | PASS | 11 ms | n/a |
-|Channels | Test channel (big) | PASS | 13 ms | n/a |
+|CSV | ToFrom CSV | PASS | 5 ms | n/a |
+|Channels | Keep history util | PASS | 4 seconds, 4 ms | n/a |
+|Channels | Remote channel access auditing | PASS | 213 ms | n/a |
+|Channels | Subscribers test | PASS | 597 ms | n/a |
+|Channels | Test Elastic Index | PASS | 1 ms | n/a |
+|Channels | Test MVS Utils | PASS | 48 ms | n/a |
+|Channels | Test channel (all) | PASS | 15 ms | n/a |
+|Channels | Test channel (big) | PASS | 12 ms | n/a |
|Channels | Test channel (big) | PASS | ~0 ms | n/a |
-|Channels | Test channel (big) | PASS | 32 seconds, 10 ms | n/a |
-|Channels | Test channel (big) | PASS | ~0 ms | n/a |
-|Channels | Test channel (big) | PASS | 162 ms | n/a |
-|Channels | Test channel (cache) | PASS | 32 seconds, 4 ms | n/a |
-|Channels | Test channel (cache) | PASS | 1 ms | n/a |
+|Channels | Test channel (big) | PASS | 32 seconds, 6 ms | n/a |
+|Channels | Test channel (big) | PASS | 1 ms | n/a |
+|Channels | Test channel (big) | PASS | 168 ms | n/a |
+|Channels | Test channel (cache) | PASS | 32 seconds, 3 ms | n/a |
+|Channels | Test channel (cache) | PASS | ~0 ms | n/a |
|Channels | Test channel (cache) | PASS | ~0 ms | n/a |
|Channels | Test channel (file) | PASS | 2 ms | n/a |
-|Channels | Test channel (file) | PASS | 7 ms | n/a |
-|Channels | Test channel (file) | PASS | 141 ms | n/a |
+|Channels | Test channel (file) | PASS | 8 ms | n/a |
+|Channels | Test channel (file) | PASS | 175 ms | n/a |
|Channels | Test channel (file) | PASS | ~0 ms | n/a |
-|Channels | Test channel (file) | PASS | 32 seconds, 5 ms | n/a |
+|Channels | Test channel (file) | PASS | 32 seconds, 9 ms | n/a |
|Channels | Test channel (mvs) | PASS | 1 ms | n/a |
|Channels | Test channel (mvs) | PASS | 7 ms | n/a |
-|Channels | Test channel (mvs) | PASS | 104 ms | n/a |
+|Channels | Test channel (mvs) | PASS | 98 ms | n/a |
|Channels | Test channel (mvs) | PASS | ~0 ms | n/a |
-|Channels | Test channel (mvs) | PASS | 32 seconds, 4 ms | n/a |
-|Channels | Test channel (simple) | PASS | 88 ms | n/a |
+|Channels | Test channel (mvs) | PASS | 32 seconds, 9 ms | n/a |
+|Channels | Test channel (simple) | PASS | 71 ms | n/a |
|Channels | Test channel (simple) | PASS | ~0 ms | n/a |
-|Channels | Test channel (simple) | PASS | 4 ms | n/a |
+|Channels | Test channel (simple) | PASS | 3 ms | n/a |
|Channels | Test channel (simple) | PASS | ~0 ms | n/a |
-|Channels | Test channel (simple) | PASS | 32 seconds, 10 ms | n/a |
-|DB | DB type conversion to JS | PASS | 13 ms | n/a |
-|DB | Simple DB in memory | PASS | 179 ms | n/a |
+|Channels | Test channel (simple) | PASS | 32 seconds, 3 ms | n/a |
+|DB | DB type conversion to JS | PASS | 9 ms | n/a |
+|DB | Simple DB in memory | PASS | 207 ms | n/a |
|Format | Add number separator | PASS | ~0 ms | n/a |
-|Format | Conversions | PASS | 1 ms | n/a |
+|Format | Conversions | PASS | 2 ms | n/a |
|Format | Cron | PASS | 1 ms | n/a |
-|Format | Cron How Many Ago | PASS | 21 ms | n/a |
-|Format | Date diff | PASS | 5 ms | n/a |
-|Format | Date to/from | PASS | 6 ms | n/a |
+|Format | Cron How Many Ago | PASS | 15 ms | n/a |
+|Format | Date diff | PASS | 4 ms | n/a |
+|Format | Date to/from | PASS | 5 ms | n/a |
|Format | Escape strings | PASS | ~0 ms | n/a |
-|Format | Escape/Unescape HTML4 | PASS | 12 ms | n/a |
+|Format | Escape/Unescape HTML4 | PASS | 9 ms | n/a |
|Format | Host | PASS | 1 ms | n/a |
|Format | LDAP date to/from | PASS | ~0 ms | n/a |
-|Format | LSH | PASS | 425 ms | n/a |
+|Format | LSH | PASS | 437 ms | n/a |
|Format | Load Format | PASS | ~0 ms | n/a |
-|Format | Number abbreviation | PASS | ~0 ms | n/a |
+|Format | Number abbreviation | PASS | 1 ms | n/a |
|Format | Number rounding | PASS | ~0 ms | n/a |
-|Format | SLON | PASS | 3 ms | n/a |
+|Format | SLON | PASS | 2 ms | n/a |
|Format | String pad | PASS | ~0 ms | n/a |
-|Format | Time ago | PASS | 32 ms | n/a |
-|Format | TimeAbbreviation | PASS | 3 ms | n/a |
+|Format | Time ago | PASS | 8 ms | n/a |
+|Format | TimeAbbreviation | PASS | 2 ms | n/a |
|Format | Unix date to/from | PASS | 1 ms | n/a |
-|Format | Word wrap | PASS | 2 ms | n/a |
-|HTTP | HTTP changing user agent | PASS | 211 ms | n/a |
-|HTTP | HTTP plugin basic functionality | PASS | 60 ms | n/a |
-|HTTP | HTTP plugin test basic auth | PASS | 341 ms | n/a |
-|HTTP | HTTP plugin web socket client | PASS | 1 second, 827 ms | n/a |
-|IO | IO Test Gzip Native to Byte array | PASS | 77 ms | n/a |
-|IO | IO Test JSON | PASS | 1 ms | n/a |
-|IO | IO Test Stream JSON | FAIL | 10 ms | JavaException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setStrictness(Strictness.LENIENT) to accept malformed JSON at line 234 column 4 path $.external[25] See https://github.com/google/gson/blob/main/Troubleshooting.md#malformed-json |
-|IO | IO Test TAR functionality | PASS | 3 seconds, 731 ms | n/a |
-|IO | IO Test binary file detection | PASS | 12 ms | n/a |
-|IO | IO Test copy streams | PASS | 205 ms | n/a |
-|IO | IO Test copy/move/delete file | PASS | 16 ms | n/a |
-|IO | IO Test read/writeFileStream | PASS | ~0 ms | n/a |
-|IO | IO Test read/writeFileStream NIO | PASS | 2 ms | n/a |
+|Format | Word wrap | PASS | 4 ms | n/a |
+|HTTP | HTTP changing user agent | PASS | 433 ms | n/a |
+|HTTP | HTTP plugin basic functionality | PASS | 58 ms | n/a |
+|HTTP | HTTP plugin test basic auth | PASS | 639 ms | n/a |
+|HTTP | HTTP plugin web socket client | PASS | 2 seconds, 682 ms | n/a |
+|IO | IO Test Gzip Native to Byte array | PASS | 58 ms | n/a |
+|IO | IO Test JSON | PASS | 2 ms | n/a |
+|IO | IO Test Stream JSON | PASS | 24 ms | n/a |
+|IO | IO Test TAR functionality | PASS | 5 seconds, 49 ms | n/a |
+|IO | IO Test binary file detection | PASS | 9 ms | n/a |
+|IO | IO Test copy streams | PASS | 257 ms | n/a |
+|IO | IO Test copy/move/delete file | PASS | 53 ms | n/a |
+|IO | IO Test read/writeFileStream | PASS | 1 ms | n/a |
+|IO | IO Test read/writeFileStream NIO | PASS | 3 ms | n/a |
|IO | IO Test read/writeFileStreamBytes | PASS | 1 ms | n/a |
-|IO | IO Test read/writeFileStreamBytes NIO | PASS | ~0 ms | n/a |
-|JMX | JMX test | PASS | 617 ms | n/a |
-|Java | Java ASym Cipher | PASS | 141 ms | n/a |
-|Java | Java Cipher | PASS | 172 ms | n/a |
+|IO | IO Test read/writeFileStreamBytes NIO | PASS | 1 ms | n/a |
+|JMX | JMX test | PASS | 283 ms | n/a |
+|Java | Java ASym Cipher | PASS | 92 ms | n/a |
+|Java | Java Cipher | PASS | 113 ms | n/a |
|Obj | Array to object conversion | PASS | 1 ms | n/a |
-|Obj | DB ResultSet to object | PASS | 798 ms | n/a |
+|Obj | DB ResultSet to object | PASS | 1 second, 121 ms | n/a |
|Obj | Filter | PASS | 7 ms | n/a |
-|Obj | Flat map | PASS | 10 ms | n/a |
-|Obj | Flatten | PASS | 206 ms | n/a |
-|Obj | Generate One of | PASS | 20 ms | n/a |
-|Obj | Generate One of Fn | PASS | 12 ms | n/a |
+|Obj | Flat map | PASS | 23 ms | n/a |
+|Obj | Flatten | PASS | 176 ms | n/a |
+|Obj | Generate One of | PASS | 21 ms | n/a |
+|Obj | Generate One of Fn | PASS | 11 ms | n/a |
|Obj | Get Path | PASS | 1 ms | n/a |
-|Obj | Object fuzzy search | PASS | 18 ms | n/a |
-|Obj | Object pool | PASS | 6 seconds, 70 ms | n/a |
-|Obj | Object schema validation | PASS | 203 ms | n/a |
+|Obj | Object fuzzy search | PASS | 22 ms | n/a |
+|Obj | Object pool | PASS | 6 seconds, 69 ms | n/a |
+|Obj | Object schema validation | PASS | 199 ms | n/a |
|Obj | Object to array conversion | PASS | ~0 ms | n/a |
-|Obj | REST Errors | PASS | 1 second, 77 ms | n/a |
-|Obj | Set Path | PASS | ~0 ms | n/a |
-|Obj | Sign object | PASS | 444 ms | n/a |
+|Obj | REST Errors | PASS | 450 ms | n/a |
+|Obj | Set Path | PASS | 1 ms | n/a |
+|Obj | Sign object | PASS | 751 ms | n/a |
|Obj | Thread-safe array | PASS | ~0 ms | n/a |
|Obj | Thread-safe array | PASS | 3 ms | n/a |
|Obj | Thread-safe map | PASS | 2 ms | n/a |
-|OpenAF | Await | PASS | 5 seconds, 3 ms | n/a |
-|OpenAF | AwaitAll | PASS | 54 ms | n/a |
-|OpenAF | Basic Parallel processing | PASS | 8 ms | n/a |
-|OpenAF | Cache | PASS | 333 ms | n/a |
-|OpenAF | Crypt | PASS | 8 ms | n/a |
+|OpenAF | Await | PASS | 4 ms | n/a |
+|OpenAF | AwaitAll | PASS | 62 ms | n/a |
+|OpenAF | Basic Parallel processing | PASS | 13 ms | n/a |
+|OpenAF | Cache | PASS | 319 ms | n/a |
+|OpenAF | Crypt | PASS | 11 ms | n/a |
|OpenAF | DescType | PASS | 1 ms | n/a |
|OpenAF | Encrypt/Decrypt | PASS | 1 ms | n/a |
-|OpenAF | Get Path | PASS | ~0 ms | n/a |
+|OpenAF | Get Path | PASS | 1 ms | n/a |
|OpenAF | Get version | PASS | ~0 ms | n/a |
|OpenAF | IsFunctions | PASS | ~0 ms | n/a |
|OpenAF | Java RegExp | PASS | 3 ms | n/a |
|OpenAF | Logs | PASS | 1 ms | n/a |
|OpenAF | Map Array | PASS | ~0 ms | n/a |
-|OpenAF | Map22Array | FAIL | 1 second, 322 ms | Problem with $fnM2A. (got "https://postman-echo.com/get" but expected "http://postman-echo.com/get") |
-|OpenAF | NDJSON | PASS | 2 ms | n/a |
-|OpenAF | PSelect | PASS | 11 ms | n/a |
+|OpenAF | Map22Array | PASS | 823 ms | n/a |
+|OpenAF | NDJSON | PASS | 3 ms | n/a |
+|OpenAF | PSelect | PASS | 12 ms | n/a |
|OpenAF | Prints | PASS | 1 ms | n/a |
-|OpenAF | Range | PASS | 1 ms | n/a |
+|OpenAF | Range | PASS | 2 ms | n/a |
|OpenAF | Retry | PASS | 1 ms | n/a |
|OpenAF | SPrints | PASS | 1 ms | n/a |
-|OpenAF | Search Key and Values | PASS | 1 ms | n/a |
+|OpenAF | Search Key and Values | PASS | 2 ms | n/a |
|OpenAF | Set Path | PASS | 1 ms | n/a |
-|OpenAF | Test $do | PASS | 39 ms | n/a |
-|OpenAF | Test $doAll | PASS | 4 ms | n/a |
-|OpenAF | Test $doFirst | PASS | 154 ms | n/a |
-|OpenAF | Test AF Parse | PASS | ~0 ms | n/a |
-|OpenAF | Test BCrypt | PASS | 802 ms | n/a |
+|OpenAF | Test $do | PASS | 13 ms | n/a |
+|OpenAF | Test $doAll | PASS | 8 ms | n/a |
+|OpenAF | Test $doFirst | PASS | 156 ms | n/a |
+|OpenAF | Test AF Parse | PASS | 1 ms | n/a |
+|OpenAF | Test BCrypt | PASS | 739 ms | n/a |
|OpenAF | Test Encoding | PASS | ~0 ms | n/a |
|OpenAF | Test Envs | PASS | 1 ms | n/a |
|OpenAF | Test Format Conversion to/from base64 | PASS | ~0 ms | n/a |
|OpenAF | Test Format Conversion to/from bytes | PASS | ~0 ms | n/a |
|OpenAF | Test Merge | PASS | ~0 ms | n/a |
-|OpenAF | Test Object Compression | PASS | 1 ms | n/a |
-|OpenAF | Test Rest | PASS | 217 ms | n/a |
+|OpenAF | Test Object Compression | PASS | ~0 ms | n/a |
+|OpenAF | Test Rest | PASS | 353 ms | n/a |
|OpenAF | Test SHA1 | PASS | ~0 ms | n/a |
|OpenAF | Test SHA256 | PASS | ~0 ms | n/a |
-|OpenAF | Test SHA512 | PASS | 1 ms | n/a |
-|OpenAF | Test Scope Ids | PASS | ~0 ms | n/a |
+|OpenAF | Test SHA512 | PASS | ~0 ms | n/a |
+|OpenAF | Test Scope Ids | PASS | 1 ms | n/a |
|OpenAF | Test Shell | PASS | 2 ms | n/a |
-|OpenAF | Test Shell with Map | PASS | 1 ms | n/a |
-|OpenAF | Test Stream conversions | PASS | ~0 ms | n/a |
+|OpenAF | Test Shell with Map | PASS | 2 ms | n/a |
+|OpenAF | Test Stream conversions | PASS | 1 ms | n/a |
|OpenAF | Test Void shortcut | PASS | ~0 ms | n/a |
|OpenAF | Test clone | PASS | 1 ms | n/a |
|OpenAF | Thread box | PASS | 303 ms | n/a |
|OpenAF | Two factor authentication | PASS | 2 ms | n/a |
-|OpenAF | XML2And4Obj | PASS | 176 ms | n/a |
+|OpenAF | XML2And4Obj | PASS | 179 ms | n/a |
|OpenAF | YAML | PASS | 4 ms | n/a |
-|Sec | Sec basic functionality | PASS | 11 ms | n/a |
-|Sec | Sec function functionality | PASS | 737 ms | n/a |
-|Sec | Sec object functionality | PASS | 1 second, 472 ms | n/a |
-|Server | Auth | PASS | 6 seconds, 12 ms | n/a |
-|Server | AuthApp | PASS | 156 ms | n/a |
-|Server | HTTP server | PASS | 93 ms | n/a |
-|Server | Locks | PASS | 1 second, 14 ms | n/a |
-|Server | Queue | PASS | 4 seconds, 885 ms | n/a |
-|Server | REST server | PASS | 75 ms | n/a |
-|Server | REST server simple | PASS | 42 ms | n/a |
-|Server | Scheduler | PASS | 16 seconds, 13 ms | n/a |
+|Sec | Sec basic functionality | PASS | 15 ms | n/a |
+|Sec | Sec function functionality | PASS | 738 ms | n/a |
+|Sec | Sec object functionality | PASS | 1 second, 345 ms | n/a |
+|Server | Auth | PASS | 6 seconds, 9 ms | n/a |
+|Server | AuthApp | PASS | 163 ms | n/a |
+|Server | HTTP server | PASS | 98 ms | n/a |
+|Server | Locks | PASS | 1 second, 10 ms | n/a |
+|Server | Queue | PASS | 5 seconds, 131 ms | n/a |
+|Server | REST server | PASS | 73 ms | n/a |
+|Server | REST server simple | PASS | 38 ms | n/a |
+|Server | Scheduler | PASS | 16 seconds, 11 ms | n/a |
|Template | Load Template | PASS | ~0 ms | n/a |
-|Template | Test Markdown to HTML | PASS | 101 ms | n/a |
-|Template | Test conditional helpers | PASS | 161 ms | n/a |
-|Template | Test format helpers | PASS | 61 ms | n/a |
-|Template | Test openaf helpers | PASS | 80 ms | n/a |
-|Template | Test partial helpers | PASS | 25 ms | n/a |
-|Template | Test simple template | PASS | 29 ms | n/a |
-|ZIP | ZIP basic functionality | PASS | 1 second, 451 ms | n/a |
-|ZIP | ZIP streaming functionality | PASS | 1 second, 525 ms | n/a |
-|oDoc | Test access to oDoc | PASS | 1 second, 386 ms | n/a |
-|oJob | oJob | PASS | 1 second, 197 ms | n/a |
-|oJob | oJobArgsMultipleLevels | PASS | 1 second, 385 ms | n/a |
-|oJob | oJobChecks | PASS | 1 second, 290 ms | n/a |
-|oJob | oJobInitArray | PASS | 2 seconds, 692 ms | n/a |
-|oJob | oJobPass | PASS | 1 second, 344 ms | n/a |
-|oJob | oJobShortcutOutput | PASS | 1 second, 378 ms | n/a |
-|oJob | oJobShortcuts | PASS | 1 second, 294 ms | n/a |
+|Template | Test Markdown to HTML | PASS | 114 ms | n/a |
+|Template | Test conditional helpers | PASS | 179 ms | n/a |
+|Template | Test format helpers | PASS | 46 ms | n/a |
+|Template | Test openaf helpers | PASS | 109 ms | n/a |
+|Template | Test partial helpers | PASS | 22 ms | n/a |
+|Template | Test simple template | PASS | 41 ms | n/a |
+|ZIP | ZIP basic functionality | PASS | 1 second, 516 ms | n/a |
+|ZIP | ZIP streaming functionality | PASS | 1 second, 515 ms | n/a |
+|oDoc | Test access to oDoc | PASS | 1 second, 505 ms | n/a |
+|oJob | oJob | PASS | 1 second, 262 ms | n/a |
+|oJob | oJobArgsMultipleLevels | PASS | 1 second, 401 ms | n/a |
+|oJob | oJobChecks | PASS | 1 second, 301 ms | n/a |
+|oJob | oJobInitArray | PASS | 3 seconds, 132 ms | n/a |
+|oJob | oJobPass | PASS | 1 second, 357 ms | n/a |
+|oJob | oJobShortcutOutput | PASS | 1 second, 545 ms | n/a |
+|oJob | oJobShortcuts | PASS | 1 second, 340 ms | n/a |
diff --git a/tests/results.svg b/tests/results.svg
index dfa9b95e..41dd41b9 100644
--- a/tests/results.svg
+++ b/tests/results.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file