This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-compress.git
The following commit(s) were added to refs/heads/master by this push: new e578e597 Use try-with-resources e578e597 is described below commit e578e5978207e300f61ae42571a9b37f8b23805c Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Fri Nov 3 15:35:24 2023 -0400 Use try-with-resources --- .../compress/archivers/sevenz/SevenZFileTest.java | 198 ++++++++------------- 1 file changed, 74 insertions(+), 124 deletions(-) diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java index ff567aa0..d59e2f2f 100644 --- a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java @@ -58,15 +58,14 @@ import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; import org.junit.jupiter.api.Test; public class SevenZFileTest extends AbstractTestCase { - private static final String TEST2_CONTENT = "<?xml version = '1.0'?>\r\n<!DOCTYPE" - + " connections>\r\n<meinxml>\r\n\t<leer />\r\n</meinxml>\n"; + private static final String TEST2_CONTENT = "<?xml version = '1.0'?>\r\n<!DOCTYPE" + " connections>\r\n<meinxml>\r\n\t<leer />\r\n</meinxml>\n"; private static boolean isStrongCryptoAvailable() throws NoSuchAlgorithmException { return Cipher.getMaxAllowedKeyLength("AES/ECB/PKCS5Padding") >= 256; } private void assertDate(final SevenZArchiveEntry entry, final String value, final Function<SevenZArchiveEntry, Boolean> hasValue, - final Function<SevenZArchiveEntry, FileTime> timeFunction, final Function<SevenZArchiveEntry, Date> dateFunction) { + final Function<SevenZArchiveEntry, FileTime> timeFunction, final Function<SevenZArchiveEntry, Date> dateFunction) { if (value != null) { assertTrue(hasValue.apply(entry)); final Instant parsedInstant = Instant.parse(value); @@ -81,12 +80,10 @@ public class SevenZFileTest extends AbstractTestCase { } private void assertDates(final SevenZArchiveEntry entry, final String modified, final String access, final String creation) { - assertDate(entry, modified, SevenZArchiveEntry::getHasLastModifiedDate, - SevenZArchiveEntry::getLastModifiedTime, SevenZArchiveEntry::getLastModifiedDate); - assertDate(entry, access, SevenZArchiveEntry::getHasAccessDate, - SevenZArchiveEntry::getAccessTime, SevenZArchiveEntry::getAccessDate); - assertDate(entry, creation, SevenZArchiveEntry::getHasCreationDate, - SevenZArchiveEntry::getCreationTime, SevenZArchiveEntry::getCreationDate); + assertDate(entry, modified, SevenZArchiveEntry::getHasLastModifiedDate, SevenZArchiveEntry::getLastModifiedTime, + SevenZArchiveEntry::getLastModifiedDate); + assertDate(entry, access, SevenZArchiveEntry::getHasAccessDate, SevenZArchiveEntry::getAccessTime, SevenZArchiveEntry::getAccessDate); + assertDate(entry, creation, SevenZArchiveEntry::getHasCreationDate, SevenZArchiveEntry::getCreationTime, SevenZArchiveEntry::getCreationDate); } private void checkHelloWorld(final String fileName) throws Exception { @@ -106,8 +103,14 @@ public class SevenZFileTest extends AbstractTestCase { } } + private byte[] read(final SevenZFile sevenZFile, final SevenZArchiveEntry entry) throws IOException { + try (InputStream inputStream = sevenZFile.getInputStream(entry)) { + return IOUtils.toByteArray(inputStream); + } + } + private byte[] readFully(final SevenZFile archive) throws IOException { - final byte [] buf = new byte [1024]; + final byte[] buf = new byte[1024]; final ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (int len = 0; (len = archive.read(buf)) > 0;) { baos.write(buf, 0, len); @@ -119,7 +122,7 @@ public class SevenZFileTest extends AbstractTestCase { public void test7zDecryptUnarchive() throws Exception { if (isStrongCryptoAvailable()) { test7zUnarchive(getFile("bla.encrypted.7z"), SevenZMethod.LZMA, // stack LZMA + AES - "foo".getBytes(UTF_16LE)); + "foo".getBytes(UTF_16LE)); } } @@ -127,7 +130,7 @@ public class SevenZFileTest extends AbstractTestCase { public void test7zDecryptUnarchiveUsingCharArrayPassword() throws Exception { if (isStrongCryptoAvailable()) { test7zUnarchive(getFile("bla.encrypted.7z"), SevenZMethod.LZMA, // stack LZMA + AES - "foo".toCharArray()); + "foo".toCharArray()); } } @@ -143,8 +146,7 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void test7zMultiVolumeUnarchive() throws Exception { - try (SevenZFile sevenZFile = new SevenZFile(MultiReadOnlySeekableByteChannel - .forFiles(getFile("bla-multi.7z.001"), getFile("bla-multi.7z.002")))) { + try (SevenZFile sevenZFile = new SevenZFile(MultiReadOnlySeekableByteChannel.forFiles(getFile("bla-multi.7z.001"), getFile("bla-multi.7z.002")))) { test7zUnarchive(sevenZFile, SevenZMethod.LZMA2); } } @@ -158,8 +160,7 @@ public class SevenZFileTest extends AbstractTestCase { test7zUnarchive(f, m, false); } - private void test7zUnarchive(final File f, final SevenZMethod m, final boolean tryToRecoverBrokenArchives) - throws Exception { + private void test7zUnarchive(final File f, final SevenZMethod m, final boolean tryToRecoverBrokenArchives) throws Exception { test7zUnarchive(f, m, (char[]) null, tryToRecoverBrokenArchives); } @@ -173,10 +174,9 @@ public class SevenZFileTest extends AbstractTestCase { test7zUnarchive(f, m, password, false); } - private void test7zUnarchive(final File f, final SevenZMethod m, final char[] password, - final boolean tryToRecoverBrokenArchives) throws Exception { + private void test7zUnarchive(final File f, final SevenZMethod m, final char[] password, final boolean tryToRecoverBrokenArchives) throws Exception { try (SevenZFile sevenZFile = new SevenZFile(f, password, - SevenZFileOptions.builder().withTryToRecoverBrokenArchives(tryToRecoverBrokenArchives).build())) { + SevenZFileOptions.builder().withTryToRecoverBrokenArchives(tryToRecoverBrokenArchives).build())) { test7zUnarchive(sevenZFile, m); } } @@ -238,21 +238,18 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testEncryptedArchiveRequiresPassword() throws Exception { - final PasswordRequiredException ex = assertThrows(PasswordRequiredException.class, - () -> new SevenZFile(getFile("bla.encrypted.7z")).close(), + final PasswordRequiredException ex = assertThrows(PasswordRequiredException.class, () -> new SevenZFile(getFile("bla.encrypted.7z")).close(), "shouldn't decrypt without a password"); final String msg = ex.getMessage(); - assertTrue(msg.startsWith("Cannot read encrypted content from "), - "Should start with whining about being unable to decrypt"); - assertTrue(msg.endsWith(" without a password."), - "Should finish the sentence properly"); - assertTrue(msg.contains("bla.encrypted.7z"), - "Should contain archive's name"); + assertTrue(msg.startsWith("Cannot read encrypted content from "), "Should start with whining about being unable to decrypt"); + assertTrue(msg.endsWith(" without a password."), "Should finish the sentence properly"); + assertTrue(msg.contains("bla.encrypted.7z"), "Should contain archive's name"); } @Test public void testExtractNonExistSpecifiedFile() throws Exception { - try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z")); SevenZFile anotherSevenZFile = new SevenZFile(getFile("bla.7z"))) { + try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z")); + SevenZFile anotherSevenZFile = new SevenZFile(getFile("bla.7z"))) { for (final SevenZArchiveEntry nonExistEntry : anotherSevenZFile.getEntries()) { assertThrows(IllegalArgumentException.class, () -> sevenZFile.getInputStream(nonExistEntry)); } @@ -262,18 +259,12 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testExtractSpecifiedFile() throws Exception { try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z"))) { - final String testTxtContents = "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011"; - - for(final SevenZArchiveEntry entry : sevenZFile.getEntries()) { + final String testTxtContents = "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011"; + + for (final SevenZArchiveEntry entry : sevenZFile.getEntries()) { if (entry.getName().equals("commons-compress-1.7-src/src/test/resources/test.txt")) { final byte[] contents = new byte[(int) entry.getSize()]; int off = 0; @@ -335,8 +326,7 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testGivenNameWinsOverDefaultName() throws Exception { - try (SevenZFile sevenZFile = new SevenZFile(getFile("bla.7z"), - SevenZFileOptions.builder().withUseDefaultNameForUnnamedEntries(true).build())) { + try (SevenZFile sevenZFile = new SevenZFile(getFile("bla.7z"), SevenZFileOptions.builder().withUseDefaultNameForUnnamedEntries(true).build())) { SevenZArchiveEntry ae = sevenZFile.getNextEntry(); assertNotNull(ae); assertEquals("test1.xml", ae.getName()); @@ -393,8 +383,7 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testNoNameCanBeReplacedByDefaultName() throws Exception { - try (SevenZFile sevenZFile = new SevenZFile(getFile("bla-nonames.7z"), - SevenZFileOptions.builder().withUseDefaultNameForUnnamedEntries(true).build())) { + try (SevenZFile sevenZFile = new SevenZFile(getFile("bla-nonames.7z"), SevenZFileOptions.builder().withUseDefaultNameForUnnamedEntries(true).build())) { SevenZArchiveEntry ae = sevenZFile.getNextEntry(); assertNotNull(ae); assertEquals("bla-nonames", ae.getName()); @@ -439,16 +428,10 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testRandomAccessMultipleReadSameFile() throws Exception { try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z"))) { - final String testTxtContents = "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011"; + final String testTxtContents = "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011"; SevenZArchiveEntry entry; SevenZArchiveEntry testTxtEntry = null; @@ -480,16 +463,10 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testRandomAccessTogetherWithSequentialAccess() throws Exception { try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z"))) { - final String testTxtContents = "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011"; + final String testTxtContents = "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011"; final String filesTxtContents = "0xxxxxxxxx10xxxxxxxx20xxxxxxxx30xxxxxxxx40xxxxxxxx50xxxxxxxx60xxxxxxxx70xxxxxxxx80xxxxxxxx90xxxxxxxx100xxxxxxx110xxxxxxx120xxxxxxx130xxxxxxx -> 0yyyyyyyyy10yyyyyyyy20yyyyyyyy30yyyyyyyy40yyyyyyyy50yyyyyyyy60yyyyyyyy70yyyyyyyy80yyyyyyyy90yyyyyyyy100yyyyyyy110yyyyyyy120yyyyyyy130yyyyyyy\n"; int off; byte[] contents; @@ -512,7 +489,7 @@ public class SevenZFileTest extends AbstractTestCase { sevenZFile.getNextEntry(); sevenZFile.getNextEntry(); - for(final SevenZArchiveEntry entry : sevenZFile.getEntries()) { + for (final SevenZArchiveEntry entry : sevenZFile.getEntries()) { // commons-compress-1.7-src/src/test/resources/test.txt if (entry.getName().equals("commons-compress-1.7-src/src/test/resources/longsymlink/files.txt")) { contents = new byte[(int) entry.getSize()]; @@ -531,7 +508,7 @@ public class SevenZFileTest extends AbstractTestCase { // call getNextEntry after getInputStream nextEntry = sevenZFile.getNextEntry(); - while(!nextEntry.getName().equals("commons-compress-1.7-src/src/test/resources/test.txt")) { + while (!nextEntry.getName().equals("commons-compress-1.7-src/src/test/resources/test.txt")) { nextEntry = sevenZFile.getNextEntry(); } @@ -550,20 +527,14 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testRandomAccessWhenJumpingBackwards() throws Exception { try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z"))) { - final String testTxtContents = "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011"; + final String testTxtContents = "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011"; SevenZArchiveEntry entry; SevenZArchiveEntry testTxtEntry = null; - while((entry = sevenZFile.getNextEntry()) != null ) { + while ((entry = sevenZFile.getNextEntry()) != null) { if (entry.getName().equals("commons-compress-1.7-src/src/test/resources/test.txt")) { testTxtEntry = entry; break; @@ -613,20 +584,14 @@ public class SevenZFileTest extends AbstractTestCase { @Test public void testRandomAccessWhenJumpingForwards() throws Exception { try (SevenZFile sevenZFile = new SevenZFile(getFile("COMPRESS-256.7z"))) { - final String testTxtContents = "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011\n" + - "111111111111111111111111111000101011"; + final String testTxtContents = "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011\n" + + "111111111111111111111111111000101011\n" + "111111111111111111111111111000101011"; SevenZArchiveEntry testTxtEntry = null; final Iterable<SevenZArchiveEntry> entries = sevenZFile.getEntries(); - for (SevenZArchiveEntry Entry : entries) { + for (final SevenZArchiveEntry Entry : entries) { testTxtEntry = Entry; if (testTxtEntry.getName().equals("commons-compress-1.7-src/src/test/resources/test.txt")) { break; @@ -634,13 +599,13 @@ public class SevenZFileTest extends AbstractTestCase { } final SevenZArchiveEntry firstEntry = sevenZFile.getNextEntry(); // only read some of the data of the first entry - byte[] contents = new byte[(int) firstEntry.getSize()/2]; + byte[] contents = new byte[(int) firstEntry.getSize() / 2]; sevenZFile.read(contents); // and the third entry sevenZFile.getNextEntry(); final SevenZArchiveEntry thirdEntry = sevenZFile.getNextEntry(); - contents = new byte[(int) thirdEntry.getSize()/2]; + contents = new byte[(int) thirdEntry.getSize() / 2]; sevenZFile.read(contents); // and then read a file after the first entry using random access @@ -676,20 +641,11 @@ public class SevenZFileTest extends AbstractTestCase { } } - final String[] variants = { - "BZip2-solid.7z", - "BZip2.7z", - "Copy-solid.7z", - "Copy.7z", - "Deflate-solid.7z", - "Deflate.7z", - "LZMA-solid.7z", - "LZMA.7z", - "LZMA2-solid.7z", - "LZMA2.7z", - // TODO: unsupported compression method. - // "PPMd-solid.7z", - // "PPMd.7z", + final String[] variants = { "BZip2-solid.7z", "BZip2.7z", "Copy-solid.7z", "Copy.7z", "Deflate-solid.7z", "Deflate.7z", "LZMA-solid.7z", "LZMA.7z", + "LZMA2-solid.7z", "LZMA2.7z", + // TODO: unsupported compression method. + // "PPMd-solid.7z", + // "PPMd.7z", }; // TODO: use randomized testing for predictable, but different, randomness. @@ -751,13 +707,12 @@ public class SevenZFileTest extends AbstractTestCase { } } - @Test public void testReadingBackDeltaDistance() throws Exception { final File output = new File(getTempDirFile(), "delta-distance.7z"); try (SevenZOutputFile outArchive = new SevenZOutputFile(output)) { - outArchive.setContentMethods(Arrays.asList(new SevenZMethodConfiguration(SevenZMethod.DELTA_FILTER, 32), - new SevenZMethodConfiguration(SevenZMethod.LZMA2))); + outArchive.setContentMethods( + Arrays.asList(new SevenZMethodConfiguration(SevenZMethod.DELTA_FILTER, 32), new SevenZMethodConfiguration(SevenZMethod.LZMA2))); final SevenZArchiveEntry entry = new SevenZArchiveEntry(); entry.setName("foo.txt"); outArchive.putArchiveEntry(entry); @@ -823,8 +778,8 @@ public class SevenZFileTest extends AbstractTestCase { public void testRetrieveInputStreamForAllEntriesMultipleTimes() throws IOException { try (SevenZFile sevenZFile = new SevenZFile(getFile("bla.7z"))) { for (final SevenZArchiveEntry entry : sevenZFile.getEntries()) { - final byte[] firstRead = IOUtils.toByteArray(sevenZFile.getInputStream(entry)); - final byte[] secondRead = IOUtils.toByteArray(sevenZFile.getInputStream(entry)); + final byte[] firstRead = read(sevenZFile, entry); + final byte[] secondRead = read(sevenZFile, entry); assertArrayEquals(firstRead, secondRead); } } @@ -845,8 +800,8 @@ public class SevenZFileTest extends AbstractTestCase { try (SevenZFile sevenZFile = new SevenZFile(new File(getTempDirFile(), "test.7z"))) { for (final SevenZArchiveEntry entry : sevenZFile.getEntries()) { - final byte[] firstRead = IOUtils.toByteArray(sevenZFile.getInputStream(entry)); - final byte[] secondRead = IOUtils.toByteArray(sevenZFile.getInputStream(entry)); + final byte[] firstRead = read(sevenZFile, entry); + final byte[] secondRead = read(sevenZFile, entry); assertArrayEquals(firstRead, secondRead); } } @@ -858,33 +813,28 @@ public class SevenZFileTest extends AbstractTestCase { final List<SevenZArchiveEntry> entries = (List<SevenZArchiveEntry>) sevenZFile.getEntries(); Collections.shuffle(entries); for (final SevenZArchiveEntry entry : entries) { - IOUtils.toByteArray(sevenZFile.getInputStream(entry)); + read(sevenZFile, entry); } } } @Test public void testSevenZWithEOS() throws IOException { - try(final SevenZFile sevenZFile = new SevenZFile(getFile("lzma-with-eos.7z"))) { + try (final SevenZFile sevenZFile = new SevenZFile(getFile("lzma-with-eos.7z"))) { final List<SevenZArchiveEntry> entries = (List<SevenZArchiveEntry>) sevenZFile.getEntries(); for (final SevenZArchiveEntry entry : entries) { - IOUtils.toByteArray(sevenZFile.getInputStream(entry)); + read(sevenZFile, entry); } } } @Test public void testSignatureCheck() { - assertTrue(SevenZFile.matches(SevenZFile.sevenZSignature, - SevenZFile.sevenZSignature.length)); - assertTrue(SevenZFile.matches(SevenZFile.sevenZSignature, - SevenZFile.sevenZSignature.length + 1)); - assertFalse(SevenZFile.matches(SevenZFile.sevenZSignature, - SevenZFile.sevenZSignature.length - 1)); + assertTrue(SevenZFile.matches(SevenZFile.sevenZSignature, SevenZFile.sevenZSignature.length)); + assertTrue(SevenZFile.matches(SevenZFile.sevenZSignature, SevenZFile.sevenZSignature.length + 1)); + assertFalse(SevenZFile.matches(SevenZFile.sevenZSignature, SevenZFile.sevenZSignature.length - 1)); assertFalse(SevenZFile.matches(new byte[] { 1, 2, 3, 4, 5, 6 }, 6)); - assertTrue(SevenZFile.matches(new byte[] { '7', 'z', (byte) 0xBC, - (byte) 0xAF, 0x27, 0x1C}, 6)); - assertFalse(SevenZFile.matches(new byte[] { '7', 'z', (byte) 0xBC, - (byte) 0xAF, 0x27, 0x1D}, 6)); + assertTrue(SevenZFile.matches(new byte[] { '7', 'z', (byte) 0xBC, (byte) 0xAF, 0x27, 0x1C }, 6)); + assertFalse(SevenZFile.matches(new byte[] { '7', 'z', (byte) 0xBC, (byte) 0xAF, 0x27, 0x1D }, 6)); } }