Modified: 
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
==============================================================================
--- 
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
 (original)
+++ 
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
 Thu Feb  2 12:12:49 2023
@@ -26,6 +26,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.StringReader;
+import java.io.UncheckedIOException;
 import java.net.URL;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
@@ -42,6 +43,7 @@ import java.util.Objects;
 import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.TreeMap;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
@@ -138,52 +140,51 @@ import java.util.stream.StreamSupport;
  */
 public final class CSVParser implements Iterable<CSVRecord>, Closeable {
 
-<span class="fc" id="L141">    class CSVRecordIterator implements 
Iterator&lt;CSVRecord&gt; {</span>
+<span class="fc" id="L143">    class CSVRecordIterator implements 
Iterator&lt;CSVRecord&gt; {</span>
         private CSVRecord current;
 
         private CSVRecord getNextRecord() {
             try {
-<span class="fc" id="L146">                return 
CSVParser.this.nextRecord();</span>
-<span class="nc" id="L147">            } catch (final IOException e) {</span>
-<span class="nc" id="L148">                throw new 
IllegalStateException(</span>
-<span class="nc" id="L149">                        
e.getClass().getSimpleName() + &quot; reading next record: &quot; + 
e.toString(), e);</span>
+<span class="fc" id="L148">                return 
CSVParser.this.nextRecord();</span>
+<span class="fc" id="L149">            } catch (final IOException e) {</span>
+<span class="fc" id="L150">                throw new 
UncheckedIOException(e.getClass().getSimpleName() + &quot; reading next record: 
&quot; + e.toString(), e);</span>
             }
         }
 
         @Override
         public boolean hasNext() {
-<span class="fc bfc" id="L155" title="All 2 branches covered.">            if 
(CSVParser.this.isClosed()) {</span>
-<span class="fc" id="L156">                return false;</span>
+<span class="fc bfc" id="L156" title="All 2 branches covered.">            if 
(CSVParser.this.isClosed()) {</span>
+<span class="fc" id="L157">                return false;</span>
             }
-<span class="fc bfc" id="L158" title="All 2 branches covered.">            if 
(this.current == null) {</span>
-<span class="fc" id="L159">                this.current = 
this.getNextRecord();</span>
+<span class="fc bfc" id="L159" title="All 2 branches covered.">            if 
(this.current == null) {</span>
+<span class="fc" id="L160">                this.current = 
this.getNextRecord();</span>
             }
 
-<span class="fc bfc" id="L162" title="All 2 branches covered.">            
return this.current != null;</span>
+<span class="fc bfc" id="L163" title="All 2 branches covered.">            
return this.current != null;</span>
         }
 
         @Override
         public CSVRecord next() {
-<span class="fc bfc" id="L167" title="All 2 branches covered.">            if 
(CSVParser.this.isClosed()) {</span>
-<span class="fc" id="L168">                throw new 
NoSuchElementException(&quot;CSVParser has been closed&quot;);</span>
+<span class="fc bfc" id="L168" title="All 2 branches covered.">            if 
(CSVParser.this.isClosed()) {</span>
+<span class="fc" id="L169">                throw new 
NoSuchElementException(&quot;CSVParser has been closed&quot;);</span>
             }
-<span class="fc" id="L170">            CSVRecord next = this.current;</span>
-<span class="fc" id="L171">            this.current = null;</span>
+<span class="fc" id="L171">            CSVRecord next = this.current;</span>
+<span class="fc" id="L172">            this.current = null;</span>
 
-<span class="fc bfc" id="L173" title="All 2 branches covered.">            if 
(next == null) {</span>
+<span class="fc bfc" id="L174" title="All 2 branches covered.">            if 
(next == null) {</span>
                 // hasNext() wasn't called before
-<span class="fc" id="L175">                next = this.getNextRecord();</span>
-<span class="fc bfc" id="L176" title="All 2 branches covered.">                
if (next == null) {</span>
-<span class="fc" id="L177">                    throw new 
NoSuchElementException(&quot;No more CSV records available&quot;);</span>
+<span class="fc" id="L176">                next = this.getNextRecord();</span>
+<span class="fc bfc" id="L177" title="All 2 branches covered.">                
if (next == null) {</span>
+<span class="fc" id="L178">                    throw new 
NoSuchElementException(&quot;No more CSV records available&quot;);</span>
                 }
             }
 
-<span class="fc" id="L181">            return next;</span>
+<span class="fc" id="L182">            return next;</span>
         }
 
         @Override
         public void remove() {
-<span class="fc" id="L186">            throw new 
UnsupportedOperationException();</span>
+<span class="fc" id="L187">            throw new 
UnsupportedOperationException();</span>
         }
     }
 
@@ -191,6 +192,7 @@ public final class CSVParser implements
      * Header information based on name and position.
      */
     private static final class Headers {
+
         /**
          * Header column positions (0-based)
          */
@@ -201,10 +203,10 @@ public final class CSVParser implements
          */
         final List&lt;String&gt; headerNames;
 
-<span class="fc" id="L204">        Headers(final Map&lt;String, Integer&gt; 
headerMap, final List&lt;String&gt; headerNames) {</span>
-<span class="fc" id="L205">            this.headerMap = headerMap;</span>
-<span class="fc" id="L206">            this.headerNames = headerNames;</span>
-<span class="fc" id="L207">        }</span>
+<span class="fc" id="L206">        Headers(final Map&lt;String, Integer&gt; 
headerMap, final List&lt;String&gt; headerNames) {</span>
+<span class="fc" id="L207">            this.headerMap = headerMap;</span>
+<span class="fc" id="L208">            this.headerNames = headerNames;</span>
+<span class="fc" id="L209">        }</span>
     }
 
     /**
@@ -223,8 +225,8 @@ public final class CSVParser implements
      *             If an I/O error occurs
      */
     public static CSVParser parse(final File file, final Charset charset, 
final CSVFormat format) throws IOException {
-<span class="fc" id="L226">        Objects.requireNonNull(file, 
&quot;file&quot;);</span>
-<span class="fc" id="L227">        return parse(file.toPath(), charset, 
format);</span>
+<span class="fc" id="L228">        Objects.requireNonNull(file, 
&quot;file&quot;);</span>
+<span class="fc" id="L229">        return parse(file.toPath(), charset, 
format);</span>
     }
 
     /**
@@ -251,9 +253,9 @@ public final class CSVParser implements
     @SuppressWarnings(&quot;resource&quot;)
     public static CSVParser parse(final InputStream inputStream, final Charset 
charset, final CSVFormat format)
             throws IOException {
-<span class="fc" id="L254">        Objects.requireNonNull(inputStream, 
&quot;inputStream&quot;);</span>
-<span class="fc" id="L255">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
-<span class="fc" id="L256">        return parse(new 
InputStreamReader(inputStream, charset), format);</span>
+<span class="fc" id="L256">        Objects.requireNonNull(inputStream, 
&quot;inputStream&quot;);</span>
+<span class="fc" id="L257">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
+<span class="fc" id="L258">        return parse(new 
InputStreamReader(inputStream, charset), format);</span>
     }
 
     /**
@@ -274,9 +276,9 @@ public final class CSVParser implements
      */
     @SuppressWarnings(&quot;resource&quot;)
     public static CSVParser parse(final Path path, final Charset charset, 
final CSVFormat format) throws IOException {
-<span class="fc" id="L277">        Objects.requireNonNull(path, 
&quot;path&quot;);</span>
-<span class="fc" id="L278">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
-<span class="fc" id="L279">        return parse(Files.newInputStream(path), 
charset, format);</span>
+<span class="fc" id="L279">        Objects.requireNonNull(path, 
&quot;path&quot;);</span>
+<span class="fc" id="L280">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
+<span class="fc" id="L281">        return parse(Files.newInputStream(path), 
charset, format);</span>
     }
 
     /**
@@ -299,7 +301,7 @@ public final class CSVParser implements
      * @since 1.5
      */
     public static CSVParser parse(final Reader reader, final CSVFormat format) 
throws IOException {
-<span class="fc" id="L302">        return new CSVParser(reader, format);</span>
+<span class="fc" id="L304">        return new CSVParser(reader, format);</span>
     }
 
     // the following objects are shared to reduce garbage
@@ -318,10 +320,10 @@ public final class CSVParser implements
      *             If an I/O error occurs
      */
     public static CSVParser parse(final String string, final CSVFormat format) 
throws IOException {
-<span class="fc" id="L321">        Objects.requireNonNull(string, 
&quot;string&quot;);</span>
-<span class="fc" id="L322">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
+<span class="fc" id="L323">        Objects.requireNonNull(string, 
&quot;string&quot;);</span>
+<span class="fc" id="L324">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
 
-<span class="fc" id="L324">        return new CSVParser(new 
StringReader(string), format);</span>
+<span class="fc" id="L326">        return new CSVParser(new 
StringReader(string), format);</span>
     }
 
     /**
@@ -346,13 +348,17 @@ public final class CSVParser implements
      */
     @SuppressWarnings(&quot;resource&quot;)
     public static CSVParser parse(final URL url, final Charset charset, final 
CSVFormat format) throws IOException {
-<span class="fc" id="L349">        Objects.requireNonNull(url, 
&quot;url&quot;);</span>
-<span class="fc" id="L350">        Objects.requireNonNull(charset, 
&quot;charset&quot;);</span>
-<span class="fc" id="L351">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
+<span class="fc" id="L351">        Objects.requireNonNull(url, 
&quot;url&quot;);</span>
+<span class="fc" id="L352">        Objects.requireNonNull(charset, 
&quot;charset&quot;);</span>
+<span class="fc" id="L353">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
 
-<span class="fc" id="L353">        return new CSVParser(new 
InputStreamReader(url.openStream(), charset), format);</span>
+<span class="fc" id="L355">        return new CSVParser(new 
InputStreamReader(url.openStream(), charset), format);</span>
     }
 
+    private String headerComment;
+
+    private String trailerComment;
+
     private final CSVFormat format;
 
     private final Headers headers;
@@ -362,7 +368,7 @@ public final class CSVParser implements
     private final CSVRecordIterator csvRecordIterator;
 
     /** A record buffer for getRecord(). Grows as necessary and is reused. */
-<span class="fc" id="L365">    private final List&lt;String&gt; recordList = 
new ArrayList&lt;&gt;();</span>
+<span class="fc" id="L371">    private final List&lt;String&gt; recordList = 
new ArrayList&lt;&gt;();</span>
 
     /**
      * The next record number to assign.
@@ -375,10 +381,10 @@ public final class CSVParser implements
      */
     private final long characterOffset;
 
-<span class="fc" id="L378">    private final Token reusableToken = new 
Token();</span>
+<span class="fc" id="L384">    private final Token reusableToken = new 
Token();</span>
 
     /**
-     * Customized CSV parser using the given {@link CSVFormat}
+     * Constructs a new instance using the given {@link CSVFormat}
      *
      * &lt;p&gt;
      * If you do not read all records from the given {@code reader}, you 
should call {@link #close()} on the parser,
@@ -395,11 +401,11 @@ public final class CSVParser implements
      *             If there is a problem reading the header or skipping the 
first record
      */
     public CSVParser(final Reader reader, final CSVFormat format) throws 
IOException {
-<span class="fc" id="L398">        this(reader, format, 0, 1);</span>
-<span class="fc" id="L399">    }</span>
+<span class="fc" id="L404">        this(reader, format, 0, 1);</span>
+<span class="fc" id="L405">    }</span>
 
     /**
-     * Customized CSV parser using the given {@link CSVFormat}
+     * Constructs a new instance using the given {@link CSVFormat}
      *
      * &lt;p&gt;
      * If you do not read all records from the given {@code reader}, you 
should call {@link #close()} on the parser,
@@ -422,26 +428,25 @@ public final class CSVParser implements
      */
     @SuppressWarnings(&quot;resource&quot;)
     public CSVParser(final Reader reader, final CSVFormat format, final long 
characterOffset, final long recordNumber)
-<span class="fc" id="L425">        throws IOException {</span>
-<span class="fc" id="L426">        Objects.requireNonNull(reader, 
&quot;reader&quot;);</span>
-<span class="fc" id="L427">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
-
-<span class="fc" id="L429">        this.format = format.copy();</span>
-<span class="fc" id="L430">        this.lexer = new Lexer(format, new 
ExtendedBufferedReader(reader));</span>
-<span class="fc" id="L431">        this.csvRecordIterator = new 
CSVRecordIterator();</span>
-<span class="fc" id="L432">        this.headers = createHeaders();</span>
-<span class="fc" id="L433">        this.characterOffset = 
characterOffset;</span>
-<span class="fc" id="L434">        this.recordNumber = recordNumber - 1;</span>
-<span class="fc" id="L435">    }</span>
+<span class="fc" id="L431">        throws IOException {</span>
+<span class="fc" id="L432">        Objects.requireNonNull(reader, 
&quot;reader&quot;);</span>
+<span class="fc" id="L433">        Objects.requireNonNull(format, 
&quot;format&quot;);</span>
+
+<span class="fc" id="L435">        this.format = format.copy();</span>
+<span class="fc" id="L436">        this.lexer = new Lexer(format, new 
ExtendedBufferedReader(reader));</span>
+<span class="fc" id="L437">        this.csvRecordIterator = new 
CSVRecordIterator();</span>
+<span class="fc" id="L438">        this.headers = createHeaders();</span>
+<span class="fc" id="L439">        this.characterOffset = 
characterOffset;</span>
+<span class="fc" id="L440">        this.recordNumber = recordNumber - 1;</span>
+<span class="fc" id="L441">    }</span>
 
     private void addRecordValue(final boolean lastRecord) {
-<span class="fc" id="L438">        final String input = 
this.reusableToken.content.toString();</span>
-<span class="fc bfc" id="L439" title="All 2 branches covered.">        final 
String inputClean = this.format.getTrim() ? input.trim() : input;</span>
-<span class="fc bfc" id="L440" title="All 6 branches covered.">        if 
(lastRecord &amp;&amp; inputClean.isEmpty() &amp;&amp; 
this.format.getTrailingDelimiter()) {</span>
-<span class="fc" id="L441">            return;</span>
+<span class="fc" id="L444">        final String input = 
this.format.trim(this.reusableToken.content.toString());</span>
+<span class="fc bfc" id="L445" title="All 6 branches covered.">        if 
(lastRecord &amp;&amp; input.isEmpty() &amp;&amp; 
this.format.getTrailingDelimiter()) {</span>
+<span class="fc" id="L446">            return;</span>
         }
-<span class="fc" id="L443">        
this.recordList.add(handleNull(inputClean));</span>
-<span class="fc" id="L444">    }</span>
+<span class="fc" id="L448">        
this.recordList.add(handleNull(input));</span>
+<span class="fc" id="L449">    }</span>
 
     /**
      * Closes resources.
@@ -451,13 +456,13 @@ public final class CSVParser implements
      */
     @Override
     public void close() throws IOException {
-<span class="pc bpc" id="L454" title="1 of 2 branches missed.">        if 
(this.lexer != null) {</span>
-<span class="fc" id="L455">            this.lexer.close();</span>
+<span class="pc bpc" id="L459" title="1 of 2 branches missed.">        if 
(this.lexer != null) {</span>
+<span class="fc" id="L460">            this.lexer.close();</span>
         }
-<span class="fc" id="L457">    }</span>
+<span class="fc" id="L462">    }</span>
 
     private Map&lt;String, Integer&gt; createEmptyHeaderMap() {
-<span class="fc bfc" id="L460" title="All 2 branches covered.">        return 
this.format.getIgnoreHeaderCase() ?</span>
+<span class="fc bfc" id="L465" title="All 2 branches covered.">        return 
this.format.getIgnoreHeaderCase() ?</span>
                 new TreeMap&lt;&gt;(String.CASE_INSENSITIVE_ORDER) :
                 new LinkedHashMap&lt;&gt;();
     }
@@ -469,62 +474,73 @@ public final class CSVParser implements
      * @throws IOException if there is a problem reading the header or 
skipping the first record
      */
     private Headers createHeaders() throws IOException {
-<span class="fc" id="L472">        Map&lt;String, Integer&gt; hdrMap = 
null;</span>
-<span class="fc" id="L473">        List&lt;String&gt; headerNames = 
null;</span>
-<span class="fc" id="L474">        final String[] formatHeader = 
this.format.getHeader();</span>
-<span class="fc bfc" id="L475" title="All 2 branches covered.">        if 
(formatHeader != null) {</span>
-<span class="fc" id="L476">            hdrMap = createEmptyHeaderMap();</span>
-<span class="fc" id="L477">            String[] headerRecord = null;</span>
-<span class="fc bfc" id="L478" title="All 2 branches covered.">            if 
(formatHeader.length == 0) {</span>
+<span class="fc" id="L477">        Map&lt;String, Integer&gt; hdrMap = 
null;</span>
+<span class="fc" id="L478">        List&lt;String&gt; headerNames = 
null;</span>
+<span class="fc" id="L479">        final String[] formatHeader = 
this.format.getHeader();</span>
+<span class="fc bfc" id="L480" title="All 2 branches covered.">        if 
(formatHeader != null) {</span>
+<span class="fc" id="L481">            hdrMap = createEmptyHeaderMap();</span>
+<span class="fc" id="L482">            String[] headerRecord = null;</span>
+<span class="fc bfc" id="L483" title="All 2 branches covered.">            if 
(formatHeader.length == 0) {</span>
                 // read the header from the first line of the file
-<span class="fc" id="L480">                final CSVRecord nextRecord = 
this.nextRecord();</span>
-<span class="fc bfc" id="L481" title="All 2 branches covered.">                
if (nextRecord != null) {</span>
-<span class="fc" id="L482">                    headerRecord = 
nextRecord.values();</span>
+<span class="fc" id="L485">                final CSVRecord nextRecord = 
this.nextRecord();</span>
+<span class="fc bfc" id="L486" title="All 2 branches covered.">                
if (nextRecord != null) {</span>
+<span class="fc" id="L487">                    headerRecord = 
nextRecord.values();</span>
+<span class="fc" id="L488">                    headerComment = 
nextRecord.getComment();</span>
                 }
-<span class="fc" id="L484">            } else {</span>
-<span class="fc bfc" id="L485" title="All 2 branches covered.">                
if (this.format.getSkipHeaderRecord()) {</span>
-<span class="fc" id="L486">                    this.nextRecord();</span>
+<span class="fc" id="L490">            } else {</span>
+<span class="fc bfc" id="L491" title="All 2 branches covered.">                
if (this.format.getSkipHeaderRecord()) {</span>
+<span class="fc" id="L492">                    final CSVRecord nextRecord = 
this.nextRecord();</span>
+<span class="pc bpc" id="L493" title="1 of 2 branches missed.">                
    if (nextRecord != null) {</span>
+<span class="fc" id="L494">                        headerComment = 
nextRecord.getComment();</span>
+                    }
                 }
-<span class="fc" id="L488">                headerRecord = formatHeader;</span>
+<span class="fc" id="L497">                headerRecord = formatHeader;</span>
             }
 
             // build the name to index mappings
-<span class="fc bfc" id="L492" title="All 2 branches covered.">            if 
(headerRecord != null) {</span>
-<span class="fc bfc" id="L493" title="All 2 branches covered.">                
for (int i = 0; i &lt; headerRecord.length; i++) {</span>
-<span class="fc" id="L494">                    final String header = 
headerRecord[i];</span>
-<span class="fc bfc" id="L495" title="All 4 branches covered.">                
    final boolean emptyHeader = header == null || 
header.trim().isEmpty();</span>
-<span class="fc bfc" id="L496" title="All 4 branches covered.">                
    if (emptyHeader &amp;&amp; !this.format.getAllowMissingColumnNames()) 
{</span>
-<span class="fc" id="L497">                        throw new 
IllegalArgumentException(</span>
-<span class="fc" id="L498">                            &quot;A header name is 
missing in &quot; + Arrays.toString(headerRecord));</span>
+<span class="fc bfc" id="L501" title="All 2 branches covered.">            if 
(headerRecord != null) {</span>
+                // Track an occurrence of a null, empty or blank header.
+<span class="fc" id="L503">                boolean observedMissing = 
false;</span>
+<span class="fc bfc" id="L504" title="All 2 branches covered.">                
for (int i = 0; i &lt; headerRecord.length; i++) {</span>
+<span class="fc" id="L505">                    final String header = 
headerRecord[i];</span>
+<span class="fc" id="L506">                    final boolean blankHeader = 
CSVFormat.isBlank(header);</span>
+<span class="fc bfc" id="L507" title="All 4 branches covered.">                
    if (blankHeader &amp;&amp; !this.format.getAllowMissingColumnNames()) 
{</span>
+<span class="fc" id="L508">                        throw new 
IllegalArgumentException(</span>
+<span class="fc" id="L509">                            &quot;A header name is 
missing in &quot; + Arrays.toString(headerRecord));</span>
                     }
-                    // Note: This will always allow a duplicate header if the 
header is empty
-<span class="fc bfc" id="L501" title="All 4 branches covered.">                
    final boolean containsHeader = header != null &amp;&amp; 
hdrMap.containsKey(header);</span>
-<span class="fc bfc" id="L502" title="All 6 branches covered.">                
    if (containsHeader &amp;&amp; !emptyHeader &amp;&amp; 
!this.format.getAllowDuplicateHeaderNames()) {</span>
-<span class="fc" id="L503">                        throw new 
IllegalArgumentException(</span>
-<span class="fc" id="L504">                            String.format(</span>
-                                &quot;The header contains a duplicate name: 
\&quot;%s\&quot; in %s. If this is valid then use 
CSVFormat.withAllowDuplicateHeaderNames().&quot;,
-<span class="fc" id="L506">                                header, 
Arrays.toString(headerRecord)));</span>
+
+<span class="fc bfc" id="L512" title="All 2 branches covered.">                
    final boolean containsHeader = blankHeader ? observedMissing : 
hdrMap.containsKey(header);</span>
+<span class="fc" id="L513">                    final DuplicateHeaderMode 
headerMode = this.format.getDuplicateHeaderMode();</span>
+<span class="fc bfc" id="L514" title="All 2 branches covered.">                
    final boolean duplicatesAllowed = headerMode == 
DuplicateHeaderMode.ALLOW_ALL;</span>
+<span class="fc bfc" id="L515" title="All 2 branches covered.">                
    final boolean emptyDuplicatesAllowed = headerMode == 
DuplicateHeaderMode.ALLOW_EMPTY;</span>
+
+<span class="fc bfc" id="L517" title="All 8 branches covered.">                
    if (containsHeader &amp;&amp; !duplicatesAllowed &amp;&amp; !(blankHeader 
&amp;&amp; emptyDuplicatesAllowed)) {</span>
+<span class="fc" id="L518">                        throw new 
IllegalArgumentException(</span>
+<span class="fc" id="L519">                            String.format(</span>
+                                &quot;The header contains a duplicate name: 
\&quot;%s\&quot; in %s. If this is valid then use 
CSVFormat.Builder.setDuplicateHeaderMode().&quot;,
+<span class="fc" id="L521">                                header, 
Arrays.toString(headerRecord)));</span>
                     }
-<span class="fc bfc" id="L508" title="All 2 branches covered.">                
    if (header != null) {</span>
-<span class="fc" id="L509">                        hdrMap.put(header, 
Integer.valueOf(i));</span>
-<span class="fc bfc" id="L510" title="All 2 branches covered.">                
        if (headerNames == null) {</span>
-<span class="fc" id="L511">                            headerNames = new 
ArrayList&lt;&gt;(headerRecord.length);</span>
+<span class="fc" id="L523">                    observedMissing |= 
blankHeader;</span>
+<span class="fc bfc" id="L524" title="All 2 branches covered.">                
    if (header != null) {</span>
+<span class="fc" id="L525">                        hdrMap.put(header, 
Integer.valueOf(i));</span>
+<span class="fc bfc" id="L526" title="All 2 branches covered.">                
        if (headerNames == null) {</span>
+<span class="fc" id="L527">                            headerNames = new 
ArrayList&lt;&gt;(headerRecord.length);</span>
                         }
-<span class="fc" id="L513">                        
headerNames.add(header);</span>
+<span class="fc" id="L529">                        
headerNames.add(header);</span>
                     }
                 }
             }
         }
-<span class="fc bfc" id="L518" title="All 2 branches covered.">        if 
(headerNames == null) {</span>
-<span class="fc" id="L519">            headerNames = Collections.emptyList(); 
//immutable</span>
+<span class="fc bfc" id="L534" title="All 2 branches covered.">        if 
(headerNames == null) {</span>
+<span class="fc" id="L535">            headerNames = Collections.emptyList(); 
// immutable</span>
         } else {
-<span class="fc" id="L521">            headerNames = 
Collections.unmodifiableList(headerNames);</span>
+<span class="fc" id="L537">            headerNames = 
Collections.unmodifiableList(headerNames);</span>
         }
-<span class="fc" id="L523">        return new Headers(hdrMap, 
headerNames);</span>
+<span class="fc" id="L539">        return new Headers(hdrMap, 
headerNames);</span>
     }
 
     /**
-     * Returns the current line number in the input stream.
+     * Gets the current line number in the input stream.
      *
      * &lt;p&gt;
      * &lt;strong&gt;ATTENTION:&lt;/strong&gt; If your CSV input has 
multi-line values, the returned number does not correspond to
@@ -534,7 +550,7 @@ public final class CSVParser implements
      * @return current line number
      */
     public long getCurrentLineNumber() {
-<span class="fc" id="L537">        return 
this.lexer.getCurrentLineNumber();</span>
+<span class="fc" id="L553">        return 
this.lexer.getCurrentLineNumber();</span>
     }
 
     /**
@@ -544,11 +560,22 @@ public final class CSVParser implements
      * @since 1.5
      */
     public String getFirstEndOfLine() {
-<span class="fc" id="L547">        return lexer.getFirstEol();</span>
+<span class="fc" id="L563">        return lexer.getFirstEol();</span>
+    }
+
+    /**
+     * Gets the header comment, if any.
+     * The header comment appears before the header record.
+     *
+     * @return the header comment for this stream, or null if no comment is 
available.
+     * @since 1.10.0
+     */
+    public String getHeaderComment() {
+<span class="fc" id="L574">        return headerComment;</span>
     }
 
     /**
-     * Returns a copy of the header map.
+     * Gets a copy of the header map as defined in the CSVFormat's header.
      * &lt;p&gt;
      * The map keys are column names. The map values are 0-based indices.
      * &lt;/p&gt;
@@ -560,25 +587,25 @@ public final class CSVParser implements
      * @return a copy of the header map.
      */
     public Map&lt;String, Integer&gt; getHeaderMap() {
-<span class="fc bfc" id="L563" title="All 2 branches covered.">        if 
(this.headers.headerMap == null) {</span>
-<span class="fc" id="L564">            return null;</span>
+<span class="fc bfc" id="L590" title="All 2 branches covered.">        if 
(this.headers.headerMap == null) {</span>
+<span class="fc" id="L591">            return null;</span>
         }
-<span class="fc" id="L566">        final Map&lt;String, Integer&gt; map = 
createEmptyHeaderMap();</span>
-<span class="fc" id="L567">        map.putAll(this.headers.headerMap);</span>
-<span class="fc" id="L568">        return map;</span>
+<span class="fc" id="L593">        final Map&lt;String, Integer&gt; map = 
createEmptyHeaderMap();</span>
+<span class="fc" id="L594">        map.putAll(this.headers.headerMap);</span>
+<span class="fc" id="L595">        return map;</span>
     }
 
     /**
-     * Returns the header map.
+     * Gets the underlying header map.
      *
-     * @return the header map.
+     * @return the underlying header map.
      */
     Map&lt;String, Integer&gt; getHeaderMapRaw() {
-<span class="fc" id="L577">        return this.headers.headerMap;</span>
+<span class="fc" id="L604">        return this.headers.headerMap;</span>
     }
 
     /**
-     * Returns a read-only list of header names that iterates in column order.
+     * Gets a read-only list of header names that iterates in column order as 
defined in the CSVFormat's header.
      * &lt;p&gt;
      * Note: The list provides strings that can be used as keys in the header 
map.
      * The list will not contain null column names if they were present in the 
input
@@ -590,11 +617,11 @@ public final class CSVParser implements
      * @since 1.7
      */
     public List&lt;String&gt; getHeaderNames() {
-<span class="fc" id="L593">        return 
Collections.unmodifiableList(headers.headerNames);</span>
+<span class="fc" id="L620">        return 
Collections.unmodifiableList(headers.headerNames);</span>
     }
 
     /**
-     * Returns the current record number in the input stream.
+     * Gets the current record number in the input stream.
      *
      * &lt;p&gt;
      * &lt;strong&gt;ATTENTION:&lt;/strong&gt; If your CSV input has 
multi-line values, the returned number does not correspond to
@@ -604,7 +631,7 @@ public final class CSVParser implements
      * @return current record number
      */
     public long getRecordNumber() {
-<span class="fc" id="L607">        return this.recordNumber;</span>
+<span class="fc" id="L634">        return this.recordNumber;</span>
     }
 
     /**
@@ -616,16 +643,22 @@ public final class CSVParser implements
      * &lt;/p&gt;
      *
      * @return list of {@link CSVRecord CSVRecords}, may be empty
-     * @throws IOException
+     * @throws UncheckedIOException
      *             on parse error or input read-failure
      */
-    public List&lt;CSVRecord&gt; getRecords() throws IOException {
-        CSVRecord rec;
-<span class="fc" id="L624">        final List&lt;CSVRecord&gt; records = new 
ArrayList&lt;&gt;();</span>
-<span class="fc bfc" id="L625" title="All 2 branches covered.">        while 
((rec = this.nextRecord()) != null) {</span>
-<span class="fc" id="L626">            records.add(rec);</span>
-        }
-<span class="fc" id="L628">        return records;</span>
+    public List&lt;CSVRecord&gt; getRecords() {
+<span class="fc" id="L650">        return 
stream().collect(Collectors.toList());</span>
+    }
+
+    /**
+     * Gets the trailer comment, if any.
+     * Trailer comments are located between the last record and EOF
+     *
+     * @return the trailer comment for this stream, or null if no comment is 
available.
+     * @since 1.10.0
+     */
+    public String getTrailerComment() {
+<span class="fc" id="L661">        return trailerComment;</span>
     }
 
     /**
@@ -636,15 +669,44 @@ public final class CSVParser implements
      * @return null if input is parsed as null, or input itself if input isn't 
parsed as null
      */
     private String handleNull(final String input) {
-<span class="fc" id="L639">        final boolean isQuoted = 
this.reusableToken.isQuoted;</span>
-<span class="fc" id="L640">        final String nullString = 
format.getNullString();</span>
-<span class="fc" id="L641">        final boolean strictQuoteMode = 
isStrictQuoteMode();</span>
-<span class="fc bfc" id="L642" title="All 2 branches covered.">        if 
(input.equals(nullString)) {</span>
+<span class="fc" id="L672">        final boolean isQuoted = 
this.reusableToken.isQuoted;</span>
+<span class="fc" id="L673">        final String nullString = 
format.getNullString();</span>
+<span class="fc" id="L674">        final boolean strictQuoteMode = 
isStrictQuoteMode();</span>
+<span class="fc bfc" id="L675" title="All 2 branches covered.">        if 
(input.equals(nullString)) {</span>
             // nullString = NULL(String), distinguish between &quot;NULL&quot; 
and NULL in ALL_NON_NULL or NON_NUMERIC quote mode
-<span class="fc bfc" id="L644" title="All 4 branches covered.">            
return strictQuoteMode &amp;&amp; isQuoted ? input : null;</span>
+<span class="fc bfc" id="L677" title="All 4 branches covered.">            
return strictQuoteMode &amp;&amp; isQuoted ? input : null;</span>
         }
         // don't set nullString, distinguish between &quot;&quot; and ,, 
(absent values) in All_NON_NULL or NON_NUMERIC quote mode
-<span class="fc bfc" id="L647" title="All 8 branches covered.">        return 
strictQuoteMode &amp;&amp; nullString == null &amp;&amp; input.isEmpty() 
&amp;&amp; !isQuoted ? null : input;</span>
+<span class="fc bfc" id="L680" title="All 8 branches covered.">        return 
strictQuoteMode &amp;&amp; nullString == null &amp;&amp; input.isEmpty() 
&amp;&amp; !isQuoted ? null : input;</span>
+    }
+
+    /**
+     * Checks whether there is a header comment.
+     * The header comment appears before the header record.
+     * Note that if the parser's format has been given an explicit header
+     * (with {@link CSVFormat.Builder#setHeader(String... )} or another 
overload)
+     * and the header record is not being skipped
+     * ({@link CSVFormat.Builder#setSkipHeaderRecord} is false) then any 
initial comments
+     * will be associated with the first record, not the header.
+     *
+     * @return true if this parser has seen a header comment, false otherwise
+     * @since 1.10.0
+     */
+    public boolean hasHeaderComment() {
+<span class="fc bfc" id="L696" title="All 2 branches covered.">        return 
headerComment != null;</span>
+    }
+
+    /**
+     * Checks whether there is a trailer comment.
+     * Trailer comments are located between the last record and EOF.
+     * The trailer comments will only be available after the parser has
+     * finished processing this stream.
+     *
+     * @return true if this parser has seen a trailer comment, false otherwise
+     * @since 1.10.0
+     */
+    public boolean hasTrailerComment() {
+<span class="fc bfc" id="L709" title="All 2 branches covered.">        return 
trailerComment != null;</span>
     }
 
     /**
@@ -653,7 +715,7 @@ public final class CSVParser implements
      * @return whether this parser is closed.
      */
     public boolean isClosed() {
-<span class="fc" id="L656">        return this.lexer.isClosed();</span>
+<span class="fc" id="L718">        return this.lexer.isClosed();</span>
     }
 
     /**
@@ -663,8 +725,8 @@ public final class CSVParser implements
      *         {@link QuoteMode#NON_NUMERIC}.
      */
     private boolean isStrictQuoteMode() {
-<span class="fc bfc" id="L666" title="All 2 branches covered.">        return 
this.format.getQuoteMode() == QuoteMode.ALL_NON_NULL ||</span>
-<span class="fc bfc" id="L667" title="All 2 branches covered.">               
this.format.getQuoteMode() == QuoteMode.NON_NUMERIC;</span>
+<span class="fc bfc" id="L728" title="All 2 branches covered.">        return 
this.format.getQuoteMode() == QuoteMode.ALL_NON_NULL ||</span>
+<span class="fc bfc" id="L729" title="All 2 branches covered.">               
this.format.getQuoteMode() == QuoteMode.NON_NUMERIC;</span>
     }
 
     /**
@@ -675,13 +737,20 @@ public final class CSVParser implements
      * {@link IllegalStateException}.
      * &lt;/p&gt;
      * &lt;p&gt;
-     * If the parser is closed a call to {@link Iterator#next()} will throw a
+     * If the parser is closed, the iterator will not yield any more records.
+     * A call to {@link Iterator#hasNext()} will return {@code false} and
+     * a call to {@link Iterator#next()} will throw a
      * {@link NoSuchElementException}.
      * &lt;/p&gt;
+     * &lt;p&gt;
+     * If it is necessary to construct an iterator which is usable after the
+     * parser is closed, one option is to extract all records as a list with
+     * {@link #getRecords()}, and return an iterator to that list.
+     * &lt;/p&gt;
      */
     @Override
     public Iterator&lt;CSVRecord&gt; iterator() {
-<span class="fc" id="L684">        return csvRecordIterator;</span>
+<span class="fc" id="L753">        return csvRecordIterator;</span>
     }
 
     /**
@@ -692,59 +761,64 @@ public final class CSVParser implements
      *             on parse error or input read-failure
      */
     CSVRecord nextRecord() throws IOException {
-<span class="fc" id="L695">        CSVRecord result = null;</span>
-<span class="fc" id="L696">        this.recordList.clear();</span>
-<span class="fc" id="L697">        StringBuilder sb = null;</span>
-<span class="fc" id="L698">        final long startCharPosition = 
lexer.getCharacterPosition() + this.characterOffset;</span>
+<span class="fc" id="L764">        CSVRecord result = null;</span>
+<span class="fc" id="L765">        this.recordList.clear();</span>
+<span class="fc" id="L766">        StringBuilder sb = null;</span>
+<span class="fc" id="L767">        final long startCharPosition = 
lexer.getCharacterPosition() + this.characterOffset;</span>
         do {
-<span class="fc" id="L700">            this.reusableToken.reset();</span>
-<span class="fc" id="L701">            
this.lexer.nextToken(this.reusableToken);</span>
-<span class="pc bpc" id="L702" title="2 of 6 branches missed.">            
switch (this.reusableToken.type) {</span>
+<span class="fc" id="L769">            this.reusableToken.reset();</span>
+<span class="fc" id="L770">            
this.lexer.nextToken(this.reusableToken);</span>
+<span class="pc bpc" id="L771" title="2 of 6 branches missed.">            
switch (this.reusableToken.type) {</span>
             case TOKEN:
-<span class="fc" id="L704">                this.addRecordValue(false);</span>
-<span class="fc" id="L705">                break;</span>
+<span class="fc" id="L773">                this.addRecordValue(false);</span>
+<span class="fc" id="L774">                break;</span>
             case EORECORD:
-<span class="fc" id="L707">                this.addRecordValue(true);</span>
-<span class="fc" id="L708">                break;</span>
+<span class="fc" id="L776">                this.addRecordValue(true);</span>
+<span class="fc" id="L777">                break;</span>
             case EOF:
-<span class="fc bfc" id="L710" title="All 2 branches covered.">                
if (this.reusableToken.isReady) {</span>
-<span class="fc" id="L711">                    
this.addRecordValue(true);</span>
+<span class="fc bfc" id="L779" title="All 2 branches covered.">                
if (this.reusableToken.isReady) {</span>
+<span class="fc" id="L780">                    
this.addRecordValue(true);</span>
+<span class="fc bfc" id="L781" title="All 2 branches covered.">                
} else if (sb != null) {</span>
+<span class="fc" id="L782">                    trailerComment = 
sb.toString();</span>
                 }
                 break;
             case INVALID:
-<span class="nc" id="L715">                throw new IOException(&quot;(line 
&quot; + this.getCurrentLineNumber() + &quot;) invalid parse 
sequence&quot;);</span>
+<span class="nc" id="L786">                throw new IOException(&quot;(line 
&quot; + this.getCurrentLineNumber() + &quot;) invalid parse 
sequence&quot;);</span>
             case COMMENT: // Ignored currently
-<span class="fc bfc" id="L717" title="All 2 branches covered.">                
if (sb == null) { // first comment for this record</span>
-<span class="fc" id="L718">                    sb = new StringBuilder();</span>
+<span class="fc bfc" id="L788" title="All 2 branches covered.">                
if (sb == null) { // first comment for this record</span>
+<span class="fc" id="L789">                    sb = new StringBuilder();</span>
                 } else {
-<span class="fc" id="L720">                    sb.append(Constants.LF);</span>
+<span class="fc" id="L791">                    sb.append(Constants.LF);</span>
                 }
-<span class="fc" id="L722">                
sb.append(this.reusableToken.content);</span>
-<span class="fc" id="L723">                this.reusableToken.type = TOKEN; // 
Read another token</span>
-<span class="fc" id="L724">                break;</span>
+<span class="fc" id="L793">                
sb.append(this.reusableToken.content);</span>
+<span class="fc" id="L794">                this.reusableToken.type = TOKEN; // 
Read another token</span>
+<span class="fc" id="L795">                break;</span>
             default:
-<span class="nc" id="L726">                throw new 
IllegalStateException(&quot;Unexpected Token type: &quot; + 
this.reusableToken.type);</span>
+<span class="nc" id="L797">                throw new 
IllegalStateException(&quot;Unexpected Token type: &quot; + 
this.reusableToken.type);</span>
             }
-<span class="fc bfc" id="L728" title="All 2 branches covered.">        } while 
(this.reusableToken.type == TOKEN);</span>
+<span class="fc bfc" id="L799" title="All 2 branches covered.">        } while 
(this.reusableToken.type == TOKEN);</span>
 
-<span class="fc bfc" id="L730" title="All 2 branches covered.">        if 
(!this.recordList.isEmpty()) {</span>
-<span class="fc" id="L731">            this.recordNumber++;</span>
-<span class="fc bfc" id="L732" title="All 2 branches covered.">            
final String comment = sb == null ? null : sb.toString();</span>
-<span class="fc" id="L733">            result = new CSVRecord(this, 
this.recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,</span>
+<span class="fc bfc" id="L801" title="All 2 branches covered.">        if 
(!this.recordList.isEmpty()) {</span>
+<span class="fc" id="L802">            this.recordNumber++;</span>
+<span class="fc bfc" id="L803" title="All 2 branches covered.">            
final String comment = sb == null ? null : sb.toString();</span>
+<span class="fc" id="L804">            result = new CSVRecord(this, 
this.recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,</span>
                 this.recordNumber, startCharPosition);
         }
-<span class="fc" id="L736">        return result;</span>
+<span class="fc" id="L807">        return result;</span>
     }
 
     /**
      * Returns a sequential {@code Stream} with this collection as its source.
-     *
+     * &lt;p&gt;
+     * If the parser is closed, the stream will not produce any more values.
+     * See the comments in {@link #iterator()}.
+     * &lt;/p&gt;
      * @return a sequential {@code Stream} with this collection as its source.
      * @since 1.9.0
      */
     public Stream&lt;CSVRecord&gt; stream() {
-<span class="fc" id="L746">        return 
StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), 
Spliterator.ORDERED), false);</span>
+<span class="fc" id="L820">        return 
StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), 
Spliterator.ORDERED), false);</span>
     }
 
 }
-</pre><div class="footer"><span class="right">Created with <a 
href="http://www.jacoco.org/jacoco";>JaCoCo</a> 
0.8.7.202105040129</span></div></body></html>
\ No newline at end of file
+</pre><div class="footer"><span class="right">Created with <a 
href="http://www.jacoco.org/jacoco";>JaCoCo</a> 
0.8.8.202204050719</span></div></body></html>
\ No newline at end of file

Modified: 
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
==============================================================================
--- 
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
 (original)
+++ 
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
 Thu Feb  2 12:12:49 2023
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml"; lang="en"><head><meta 
http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link 
rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link 
rel="shortcut icon" href="../jacoco-resources/report.gif" 
type="image/gif"/><title>CSVPrinter</title><script type="text/javascript" 
src="../jacoco-resources/sort.js"></script></head><body 
onload="initialSort(['breadcrumb'])"><div class="breadcrumb" 
id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" 
class="el_session">Sessions</a></span><a href="../index.html" 
class="el_report">Apache Commons CSV</a> &gt; <a href="index.html" 
class="el_package">org.apache.commons.csv</a> &gt; <span 
class="el_class">CSVPrinter</span></div><h1>CSVPrinter</h1><table 
class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td cla
 ss="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down 
sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td 
class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td 
class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td 
class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td 
class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td 
class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td 
class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td 
class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td 
class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td 
class="sortable ctr2" id="k" 
onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td
 class="bar">0 of 300</td><td class="ctr2">100%</td><td class="bar">0 of 
47</td><td class="ctr2">100%</td><td class="ctr1">0</td><td 
class="ctr2">39</td><td class="ctr
 1">0</td><td class="ctr2">77</td><td class="ctr1">0</td><td 
class="ctr2">15</td></tr></tfoot><tbody><tr><td id="a6"><a 
href="CSVPrinter.java.html#L192" 
class="el_method">printComment(String)</a></td><td class="bar" id="b0"><img 
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="77" 
alt="77"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img 
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15" 
alt="15"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" 
id="f0">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td 
class="ctr2" id="i0">18</td><td class="ctr1" id="j0">0</td><td class="ctr2" 
id="k0">1</td></tr><tr><td id="a2"><a href="CSVPrinter.java.html#L77" 
class="el_method">CSVPrinter(Appendable, CSVFormat)</a></td><td class="bar" 
id="b1"><img src="../jacoco-resources/greenbar.gif" width="85" height="10" 
title="55" alt="55"/></td><td class="ctr2" id="c1">100%</td><td class="bar" 
id="d1"><img src="../jac
 oco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td 
class="ctr2" id="e1">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" 
id="g1">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" 
id="i1">12</td><td class="ctr1" id="j1">0</td><td class="ctr2" 
id="k1">1</td></tr><tr><td id="a11"><a href="CSVPrinter.java.html#L321" 
class="el_method">printRecords(Iterable)</a></td><td class="bar" id="b2"><img 
src="../jacoco-resources/greenbar.gif" width="56" height="10" title="36" 
alt="36"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"><img 
src="../jacoco-resources/greenbar.gif" width="48" height="10" title="6" 
alt="6"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" 
id="f2">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">0</td><td 
class="ctr2" id="i2">8</td><td class="ctr1" id="j2">0</td><td class="ctr2" 
id="k2">1</td></tr><tr><td id="a13"><a href="CSVPrinter.java.html#L386" 
class="el_method">printRecords(ResultSet)</a></td>
 <td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="49" 
height="10" title="32" alt="32"/></td><td class="ctr2" id="c3">100%</td><td 
class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="48" 
height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">100%</td><td 
class="ctr1" id="f3">0</td><td class="ctr2" id="g3">4</td><td class="ctr1" 
id="h3">0</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j3">0</td><td 
class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a 
href="CSVPrinter.java.html#L127" class="el_method">close(boolean)</a></td><td 
class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="26" 
height="10" title="17" alt="17"/></td><td class="ctr2" id="c4">100%</td><td 
class="bar" id="d4"><img src="../jacoco-resources/greenbar.gif" width="48" 
height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td 
class="ctr1" id="f4">0</td><td class="ctr2" id="g4">4</td><td class="ctr1" 
id="h4">0</td><td class="ctr2" id=
 "i4">5</td><td class="ctr1" id="j4">0</td><td class="ctr2" 
id="k4">1</td></tr><tr><td id="a9"><a href="CSVPrinter.java.html#L258" 
class="el_method">printRecord(Iterable)</a></td><td class="bar" id="b5"><img 
src="../jacoco-resources/greenbar.gif" width="24" height="10" title="16" 
alt="16"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"><img 
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" 
alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" 
id="f5">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">0</td><td 
class="ctr2" id="i5">5</td><td class="ctr1" id="j5">0</td><td class="ctr2" 
id="k5">1</td></tr><tr><td id="a5"><a href="CSVPrinter.java.html#L166" 
class="el_method">print(Object)</a></td><td class="bar" id="b6"><img 
src="../jacoco-resources/greenbar.gif" width="18" height="10" title="12" 
alt="12"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d8"/><td 
class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">0<
 /td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">0</td><td 
class="ctr2" id="i7">3</td><td class="ctr1" id="j6">0</td><td class="ctr2" 
id="k6">1</td></tr><tr><td id="a7"><a href="CSVPrinter.java.html#L230" 
class="el_method">printHeaders(ResultSet)</a></td><td class="bar" id="b7"><img 
src="../jacoco-resources/greenbar.gif" width="17" height="10" title="11" 
alt="11"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d9"/><td 
class="ctr2" id="e9">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" 
id="g9">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" 
id="i10">2</td><td class="ctr1" id="j7">0</td><td class="ctr2" 
id="k7">1</td></tr><tr><td id="a3"><a href="CSVPrinter.java.html#L143" 
class="el_method">flush()</a></td><td class="bar" id="b8"><img 
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" 
alt="9"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d6"><img 
src="../jacoco-resources/greenbar.gif" width="16" height="10" titl
 e="2" alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1" 
id="f8">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h8">0</td><td 
class="ctr2" id="i8">3</td><td class="ctr1" id="j8">0</td><td class="ctr2" 
id="k8">1</td></tr><tr><td id="a8"><a href="CSVPrinter.java.html#L240" 
class="el_method">println()</a></td><td class="bar" id="b9"><img 
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" 
alt="9"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d10"/><td 
class="ctr2" id="e10">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" 
id="g10">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" 
id="i9">3</td><td class="ctr1" id="j9">0</td><td class="ctr2" 
id="k9">1</td></tr><tr><td id="a14"><a href="CSVPrinter.java.html#L407" 
class="el_method">printRecords(ResultSet, boolean)</a></td><td class="bar" 
id="b10"><img src="../jacoco-resources/greenbar.gif" width="14" height="10" 
title="9" alt="9"/></td><td class="ctr2" id="c10">100%</td>
 <td class="bar" id="d7"><img src="../jacoco-resources/greenbar.gif" width="16" 
height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">100%</td><td 
class="ctr1" id="f10">0</td><td class="ctr2" id="g7">2</td><td class="ctr1" 
id="h10">0</td><td class="ctr2" id="i6">4</td><td class="ctr1" 
id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a10"><a 
href="CSVPrinter.java.html#L278" 
class="el_method">printRecord(Object[])</a></td><td class="bar" id="b11"><img 
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" 
alt="5"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d11"/><td 
class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" 
id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" 
id="i11">2</td><td class="ctr1" id="j11">0</td><td class="ctr2" 
id="k11">1</td></tr><tr><td id="a12"><a href="CSVPrinter.java.html#L372" 
class="el_method">printRecords(Object[])</a></td><td class="bar" id="b12"><img 
src="../jacoc
 o-resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td><td 
class="ctr2" id="c12">100%</td><td class="bar" id="d12"/><td class="ctr2" 
id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" 
id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" 
id="i12">2</td><td class="ctr1" id="j12">0</td><td class="ctr2" 
id="k12">1</td></tr><tr><td id="a0"><a href="CSVPrinter.java.html#L115" 
class="el_method">close()</a></td><td class="bar" id="b13"><img 
src="../jacoco-resources/greenbar.gif" width="6" height="10" title="4" 
alt="4"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d13"/><td 
class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" 
id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" 
id="i13">2</td><td class="ctr1" id="j13">0</td><td class="ctr2" 
id="k13">1</td></tr><tr><td id="a4"><a href="CSVPrinter.java.html#L154" 
class="el_method">getOut()</a></td><td class="bar" id="b14"><img 
src="../jacoco-resource
 s/greenbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" 
id="c14">100%</td><td class="bar" id="d14"/><td class="ctr2" 
id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" 
id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" 
id="i14">1</td><td class="ctr1" id="j14">0</td><td class="ctr2" 
id="k14">1</td></tr></tbody></table><div class="footer"><span 
class="right">Created with <a href="http://www.jacoco.org/jacoco";>JaCoCo</a> 
0.8.7.202105040129</span></div></body></html>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml"; lang="en"><head><meta 
http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link 
rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link 
rel="shortcut icon" href="../jacoco-resources/report.gif" 
type="image/gif"/><title>CSVPrinter</title><script type="text/javascript" 
src="../jacoco-resources/sort.js"></script></head><body 
onload="initialSort(['breadcrumb'])"><div class="breadcrumb" 
id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" 
class="el_session">Sessions</a></span><a href="../index.html" 
class="el_report">Apache Commons CSV</a> &gt; <a href="index.html" 
class="el_package">org.apache.commons.csv</a> &gt; <span 
class="el_class">CSVPrinter</span></div><h1>CSVPrinter</h1><table 
class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td cla
 ss="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down 
sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td 
class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td 
class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td 
class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td 
class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td 
class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td 
class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td 
class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td 
class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td 
class="sortable ctr2" id="k" 
onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td
 class="bar">8 of 335</td><td class="ctr2">97%</td><td class="bar">0 of 
47</td><td class="ctr2">100%</td><td class="ctr1">0</td><td 
class="ctr2">44</td><td class="ctr1
 ">4</td><td class="ctr2">95</td><td class="ctr1">0</td><td 
class="ctr2">20</td></tr></tfoot><tbody><tr><td id="a6"><a 
href="CSVPrinter.java.html#L490" 
class="el_method">lambda$printRecords$1(Object)</a></td><td class="bar" 
id="b0"><img src="../jacoco-resources/redbar.gif" width="6" height="10" 
title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="7" 
height="10" title="5" alt="5"/></td><td class="ctr2" id="c18">55%</td><td 
class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" 
id="f0">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h0">2</td><td 
class="ctr2" id="i4">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" 
id="k0">1</td></tr><tr><td id="a5"><a href="CSVPrinter.java.html#L301" 
class="el_method">lambda$printRecord$0(Object)</a></td><td class="bar" 
id="b1"><img src="../jacoco-resources/redbar.gif" width="6" height="10" 
title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="7" 
height="10" title="5" alt="5"/></td><td cl
 ass="ctr2" id="c19">55%</td><td class="bar" id="d10"/><td class="ctr2" 
id="e10">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" 
id="g10">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" 
id="i5">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" 
id="k1">1</td></tr><tr><td id="a8"><a href="CSVPrinter.java.html#L195" 
class="el_method">printComment(String)</a></td><td class="bar" id="b2"><img 
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="77" 
alt="77"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img 
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15" 
alt="15"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" 
id="f2">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h2">0</td><td 
class="ctr2" id="i0">18</td><td class="ctr1" id="j2">0</td><td class="ctr2" 
id="k2">1</td></tr><tr><td id="a2"><a href="CSVPrinter.java.html#L79" 
class="el_method">CSVPrinter(Appendable, CSVFormat)</a></td><td class="
 bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="87" 
height="10" title="56" alt="56"/></td><td class="ctr2" id="c1">100%</td><td 
class="bar" id="d1"><img src="../jacoco-resources/greenbar.gif" width="64" 
height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">100%</td><td 
class="ctr1" id="f3">0</td><td class="ctr2" id="g1">5</td><td class="ctr1" 
id="h3">0</td><td class="ctr2" id="i1">13</td><td class="ctr1" 
id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a17"><a 
href="CSVPrinter.java.html#L418" 
class="el_method">printRecords(ResultSet)</a></td><td class="bar" id="b4"><img 
src="../jacoco-resources/greenbar.gif" width="49" height="10" title="32" 
alt="32"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"><img 
src="../jacoco-resources/greenbar.gif" width="48" height="10" title="6" 
alt="6"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" 
id="f4">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h4">0</td><td 
class="ctr2" id=
 "i2">7</td><td class="ctr1" id="j4">0</td><td class="ctr2" 
id="k4">1</td></tr><tr><td id="a14"><a href="CSVPrinter.java.html#L310" 
class="el_method">printRecordObject(Object)</a></td><td class="bar" 
id="b5"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" 
title="26" alt="26"/></td><td class="ctr2" id="c3">100%</td><td class="bar" 
id="d4"><img src="../jacoco-resources/greenbar.gif" width="32" height="10" 
title="4" alt="4"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" 
id="f5">0</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h5">0</td><td 
class="ctr2" id="i3">6</td><td class="ctr1" id="j5">0</td><td class="ctr2" 
id="k5">1</td></tr><tr><td id="a1"><a href="CSVPrinter.java.html#L130" 
class="el_method">close(boolean)</a></td><td class="bar" id="b6"><img 
src="../jacoco-resources/greenbar.gif" width="26" height="10" title="17" 
alt="17"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d3"><img 
src="../jacoco-resources/greenbar.gif" width="48" 
 height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td 
class="ctr1" id="f6">0</td><td class="ctr2" id="g3">4</td><td class="ctr1" 
id="h6">0</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j6">0</td><td 
class="ctr2" id="k6">1</td></tr><tr><td id="a11"><a 
href="CSVPrinter.java.html#L261" 
class="el_method">printRecord(Iterable)</a></td><td class="bar" id="b7"><img 
src="../jacoco-resources/greenbar.gif" width="24" height="10" title="16" 
alt="16"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"><img 
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" 
alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1" 
id="f7">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">0</td><td 
class="ctr2" id="i7">5</td><td class="ctr1" id="j7">0</td><td class="ctr2" 
id="k7">1</td></tr><tr><td id="a15"><a href="CSVPrinter.java.html#L359" 
class="el_method">printRecords(Iterable)</a></td><td class="bar" id="b8"><img 
src="../jacoc
 o-resources/greenbar.gif" width="21" height="10" title="14" alt="14"/></td><td 
class="ctr2" id="c6">100%</td><td class="bar" id="d6"><img 
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" 
alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1" 
id="f8">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h8">0</td><td 
class="ctr2" id="i8">4</td><td class="ctr1" id="j8">0</td><td class="ctr2" 
id="k8">1</td></tr><tr><td id="a7"><a href="CSVPrinter.java.html#L169" 
class="el_method">print(Object)</a></td><td class="bar" id="b9"><img 
src="../jacoco-resources/greenbar.gif" width="18" height="10" title="12" 
alt="12"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d11"/><td 
class="ctr2" id="e11">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" 
id="g11">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" 
id="i10">3</td><td class="ctr1" id="j9">0</td><td class="ctr2" 
id="k9">1</td></tr><tr><td id="a9"><a href="CSVPrinter.java.html#L233" 
 class="el_method">printHeaders(ResultSet)</a></td><td class="bar" 
id="b10"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" 
title="11" alt="11"/></td><td class="ctr2" id="c8">100%</td><td class="bar" 
id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f10">0</td><td 
class="ctr2" id="g12">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" 
id="i14">2</td><td class="ctr1" id="j10">0</td><td class="ctr2" 
id="k10">1</td></tr><tr><td id="a3"><a href="CSVPrinter.java.html#L146" 
class="el_method">flush()</a></td><td class="bar" id="b11"><img 
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" 
alt="9"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d7"><img 
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" 
alt="2"/></td><td class="ctr2" id="e7">100%</td><td class="ctr1" 
id="f11">0</td><td class="ctr2" id="g7">2</td><td class="ctr1" 
id="h11">0</td><td class="ctr2" id="i11">3</td><td class="ctr1" id="j11">
 0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a 
href="CSVPrinter.java.html#L243" class="el_method">println()</a></td><td 
class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="14" 
height="10" title="9" alt="9"/></td><td class="ctr2" id="c10">100%</td><td 
class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" 
id="f12">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" 
id="h12">0</td><td class="ctr2" id="i12">3</td><td class="ctr1" 
id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a18"><a 
href="CSVPrinter.java.html#L439" class="el_method">printRecords(ResultSet, 
boolean)</a></td><td class="bar" id="b13"><img 
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9" 
alt="9"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d8"><img 
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2" 
alt="2"/></td><td class="ctr2" id="e8">100%</td><td class="ctr1" 
id="f13">0</td><td class="ct
 r2" id="g8">2</td><td class="ctr1" id="h13">0</td><td class="ctr2" 
id="i9">4</td><td class="ctr1" id="j13">0</td><td class="ctr2" 
id="k13">1</td></tr><tr><td id="a13"><a href="CSVPrinter.java.html#L299" 
class="el_method">printRecord(Stream)</a></td><td class="bar" id="b14"><img 
src="../jacoco-resources/greenbar.gif" width="10" height="10" title="7" 
alt="7"/></td><td class="ctr2" id="c12">100%</td><td class="bar" id="d14"/><td 
class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" 
id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" 
id="i13">3</td><td class="ctr1" id="j14">0</td><td class="ctr2" 
id="k14">1</td></tr><tr><td id="a12"><a href="CSVPrinter.java.html#L281" 
class="el_method">printRecord(Object[])</a></td><td class="bar" id="b15"><img 
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" 
alt="5"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d15"/><td 
class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</
 td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td 
class="ctr2" id="i15">2</td><td class="ctr1" id="j15">0</td><td class="ctr2" 
id="k15">1</td></tr><tr><td id="a16"><a href="CSVPrinter.java.html#L404" 
class="el_method">printRecords(Object[])</a></td><td class="bar" id="b16"><img 
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" 
alt="5"/></td><td class="ctr2" id="c14">100%</td><td class="bar" id="d16"/><td 
class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" 
id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" 
id="i16">2</td><td class="ctr1" id="j16">0</td><td class="ctr2" 
id="k16">1</td></tr><tr><td id="a19"><a href="CSVPrinter.java.html#L488" 
class="el_method">printRecords(Stream)</a></td><td class="bar" id="b17"><img 
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5" 
alt="5"/></td><td class="ctr2" id="c15">100%</td><td class="bar" id="d17"/><td 
class="ctr2" id="e17">n/a</td><td class=
 "ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" 
id="h17">0</td><td class="ctr2" id="i17">2</td><td class="ctr1" 
id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a0"><a 
href="CSVPrinter.java.html#L118" class="el_method">close()</a></td><td 
class="bar" id="b18"><img src="../jacoco-resources/greenbar.gif" width="6" 
height="10" title="4" alt="4"/></td><td class="ctr2" id="c16">100%</td><td 
class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" 
id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1" 
id="h18">0</td><td class="ctr2" id="i18">2</td><td class="ctr1" 
id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a4"><a 
href="CSVPrinter.java.html#L157" class="el_method">getOut()</a></td><td 
class="bar" id="b19"><img src="../jacoco-resources/greenbar.gif" width="4" 
height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">100%</td><td 
class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id=
 "f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1" 
id="h19">0</td><td class="ctr2" id="i19">1</td><td class="ctr1" 
id="j19">0</td><td class="ctr2" id="k19">1</td></tr></tbody></table><div 
class="footer"><span class="right">Created with <a 
href="http://www.jacoco.org/jacoco";>JaCoCo</a> 
0.8.8.202204050719</span></div></body></html>
\ No newline at end of file


Reply via email to