Speed up COPY FROM text/CSV parsing using SIMD

Started by Shinya Kato5 months ago62 messages
#1Shinya Kato
shinya11.kato@gmail.com
4 attachment(s)

Hi hackers,

I have implemented SIMD optimization for the COPY FROM (FORMAT {csv,
text}) command and observed approximately a 5% performance
improvement. Please see the detailed test results below.

Idea
====
The current text/CSV parser processes input byte-by-byte, checking
whether each byte is a special character (\n, \r, quote, escape) or a
regular character, and transitions states in a state machine. This
sequential processing is inefficient and likely causes frequent branch
mispredictions due to the many if statements.

I thought this problem could be addressed by leveraging SIMD and
vectorized operations for faster processing.

Implementation Overview
=======================
1. Create a vector of special characters (e.g., Vector8 nl =
vector8_broadcast('\n');).
2. Load the input buffer into a Vector8 variable called chunk.
3. Perform vectorized operations between chunk and the special
character vectors to check if the buffer contains any special
characters.
4-1. If no special characters are found, advance the input_buf_ptr by
sizeof(Vector8).
4-2. If special characters are found, advance the input_buf_ptr as far
as possible, then fall back to the original text/CSV parser for
byte-by-byte processing.

Test
====
I tested the performance by measuring the time it takes to load a CSV
file created using the attached SQL script with the following COPY
command:
=# COPY t FROM '/tmp/t.csv' (FORMAT csv);

Environment
-----------
OS: Rocky Linux 9.6
CPU: Intel Core i7-10710U (6 Cores / 12 Threads, 1.1 GHz Base / 4.7
GHz Boost, AVX2 & FMA supported)

Time
----
master: 02.44.943
patch applied: 02:36.878 (about 5% faster)

Perf
----
Each call graphs are attached and the rates of CopyReadLineText are:
master: 12.15%
patch applied: 8.04%

Thought?
I would appreciate feedback on the implementation and any suggestions
for further improvement.

--
Best regards,
Shinya Kato
NTT OSS Center

Attachments:

v1-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchapplication/octet-stream; name=v1-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 5ae3be7d262e4251bf21ac0c73b3e0ebc2ba615d Mon Sep 17 00:00:00 2001
From: Shinya Kato <shinya11.kato@gmail.com>
Date: Mon, 28 Jul 2025 22:08:20 +0900
Subject: [PATCH v1] Speed up COPY FROM text/CSV parsing using SIMD

The inner loop of CopyReadLineText scans for newlines and other special
characters by processing the input byte-by-byte. For large inputs, this
can be a performance bottleneck.

This commit introduces a SIMD-accelerated path. When not parsing inside
a quoted field, we can use vector instructions to scan the input buffer
for any character of interest in 16-byte chunks. This significantly
improves performance, especially for data with long, unquoted fields.
---
 src/backend/commands/copyfromparse.c | 72 ++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b1ae97b833d..5aba0fa6cb7 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -71,7 +71,9 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
 #include "port/pg_bswap.h"
+#include "port/simd.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 
@@ -1255,6 +1257,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
+#ifndef USE_NO_SIMD
+	Vector8		nl = vector8_broadcast('\n');
+	Vector8		cr = vector8_broadcast('\r');
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		quote;
+	Vector8		escape;
+#endif
+
 	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
@@ -1262,6 +1272,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
+
+#ifndef USE_NO_SIMD
+		quote = vector8_broadcast(quotec);
+		if (quotec != escapec)
+			escape = vector8_broadcast(escapec);
+#endif
 	}
 
 	/*
@@ -1328,6 +1344,62 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			need_data = false;
 		}
 
+#ifndef USE_NO_SIMD
+		/*
+		 * SIMD instructions are used here to efficiently scan the input buffer
+		 * for special characters (e.g., newline, carriage return, quotes, or
+		 * escape characters). This approach significantly improves performance
+		 * compared to byte-by-byte iteration, especially for large input
+		 * buffers.
+		 *
+		 * However, SIMD optimization cannot be applied in the following cases:
+		 * - Inside quoted fields, where escape sequences and closing quotes
+		 *   require sequential processing to handle correctly.
+		 * - When the remaining buffer size is smaller than the size of a SIMD
+		 *   vector register, as SIMD operations require processing data in
+		 *   fixed-size chunks.
+		 */
+		if (!in_quote && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match;
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
+
+			/* Create a mask of all special characters we need to stop at */
+			match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+			if (is_csv)
+			{
+				match = vector8_or(match, vector8_eq(chunk, quote));
+				if (escapec != '\0')
+					match = vector8_or(match, vector8_eq(chunk, escape));
+			}
+			else
+				match = vector8_or(match, vector8_eq(chunk, bs));
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int advance = pg_rightmost_one_pos32(mask);
+				input_buf_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				input_buf_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 		/* OK to fetch a character */
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
-- 
2.47.1

test.sqlapplication/octet-stream; name=test.sqlDownload
master.svgimage/svg+xml; name=master.svgDownload
patch_applied.svgimage/svg+xml; name=patch_applied.svgDownload
#2Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Shinya Kato (#1)
1 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

Thank you for working on this!

On Thu, 7 Aug 2025 at 04:49, Shinya Kato <shinya11.kato@gmail.com> wrote:

Hi hackers,

I have implemented SIMD optimization for the COPY FROM (FORMAT {csv,
text}) command and observed approximately a 5% performance
improvement. Please see the detailed test results below.

I have been working on the same idea. I was not moving input_buf_ptr
as far as possible, so I think your approach is better.

Also, I did a benchmark on text format. I created a benchmark for line
length in a table being from 1 byte to 1 megabyte.The peak improvement
is line length being 4096 and the improvement is more than 20% [1], I
saw no regression on your patch.

Idea
====
The current text/CSV parser processes input byte-by-byte, checking
whether each byte is a special character (\n, \r, quote, escape) or a
regular character, and transitions states in a state machine. This
sequential processing is inefficient and likely causes frequent branch
mispredictions due to the many if statements.

I thought this problem could be addressed by leveraging SIMD and
vectorized operations for faster processing.

Implementation Overview
=======================
1. Create a vector of special characters (e.g., Vector8 nl =
vector8_broadcast('\n');).
2. Load the input buffer into a Vector8 variable called chunk.
3. Perform vectorized operations between chunk and the special
character vectors to check if the buffer contains any special
characters.
4-1. If no special characters are found, advance the input_buf_ptr by
sizeof(Vector8).
4-2. If special characters are found, advance the input_buf_ptr as far
as possible, then fall back to the original text/CSV parser for
byte-by-byte processing.

...

Thought?
I would appreciate feedback on the implementation and any suggestions
for further improvement.

I have a couple of ideas that I was working on:
---

+         * However, SIMD optimization cannot be applied in the following cases:
+         * - Inside quoted fields, where escape sequences and closing quotes
+         *   require sequential processing to handle correctly.

I think you can continue SIMD inside quoted fields. Only important
thing is you need to set last_was_esc to false when SIMD skipped the
chunk.
---

+         * - When the remaining buffer size is smaller than the size of a SIMD
+         *   vector register, as SIMD operations require processing data in
+         *   fixed-size chunks.

You run SIMD when 'copy_buf_len - input_buf_ptr >= sizeof(Vector8)'
but you only call CopyLoadInputBuf() when 'input_buf_ptr >=
copy_buf_len || need_data' so basically you need to wait at least the
sizeof(Vector8) character to pass for the next SIMD. And in the worst
case; if CopyLoadInputBuf() puts one character less than
sizeof(Vector8), then you can't ever run SIMD. I think we need to make
sure that CopyLoadInputBuf() loads at least the sizeof(Vector8)
character to the input_buf so we do not encounter that problem.
---

What do you think about adding SIMD to CopyReadAttributesText() and
CopyReadAttributesCSV() functions? When I add your SIMD approach to
CopyReadAttributesText() function, the improvement on the 4096 byte
line length input [1] goes from 20% to 30%.
---

I shared my ideas as a Feedback.txt file (.txt to stay off CFBot's
radar for this thread). I hope these help, please let me know if you
have any questions.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachments:

Feedback.txttext/plain; charset=US-ASCII; name=Feedback.txtDownload
From b13f4cdf134eef5fbecf9ea06f9b1c99890b7c02 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Thu, 7 Aug 2025 13:27:34 +0300
Subject: [PATCH] Feedback

---
 src/backend/commands/copyfromparse.c | 55 ++++++++++++++++++++++++++--
 1 file changed, 51 insertions(+), 4 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5aba0fa6cb7..dae5c1f698c 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -670,8 +670,12 @@ CopyLoadInputBuf(CopyFromState cstate)
 		/* If we now have some unconverted data, try to convert it */
 		CopyConvertBuf(cstate);
 
-		/* If we now have some more input bytes ready, return them */
-		if (INPUT_BUF_BYTES(cstate) > nbytes)
+		/*
+		 * If we now have at least sizeof(Vector8) input bytes ready, return
+		 * them. This is beneficial for SIMD processing in the
+		 * CopyReadLineText() function.
+		 */
+		if (INPUT_BUF_BYTES(cstate) > nbytes + sizeof(Vector8))
 			return;
 
 		/*
@@ -1322,7 +1326,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * unsafe with the old v2 COPY protocol, but we don't support that
 		 * anymore.
 		 */
-		if (input_buf_ptr >= copy_buf_len || need_data)
+		if (input_buf_ptr + sizeof(Vector8) >= copy_buf_len || need_data)
 		{
 			REFILL_LINEBUF;
 
@@ -1359,7 +1363,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 *   vector register, as SIMD operations require processing data in
 		 *   fixed-size chunks.
 		 */
-		if (!in_quote && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match;
@@ -1395,6 +1399,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			{
 				/* No special characters found, so skip the entire chunk */
 				input_buf_ptr += sizeof(Vector8);
+				last_was_esc = false;
 				continue;
 			}
 		}
@@ -1650,6 +1655,11 @@ CopyReadAttributesText(CopyFromState cstate)
 	char	   *cur_ptr;
 	char	   *line_end_ptr;
 
+#ifndef USE_NO_SIMD
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		delim = vector8_broadcast(delimc);;
+#endif
+
 	/*
 	 * We need a special case for zero-column tables: check that the input
 	 * line is empty, and return.
@@ -1717,6 +1727,43 @@ CopyReadAttributesText(CopyFromState cstate)
 		{
 			char		c;
 
+#ifndef USE_NO_SIMD
+		if (line_end_ptr - cur_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match;
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) cur_ptr);
+
+			/* Create a mask of all special characters we need to stop at */
+			match = vector8_or(vector8_eq(chunk, bs), vector8_eq(chunk, delim));
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int advance = pg_rightmost_one_pos32(mask);
+				memcpy(output_ptr, cur_ptr, advance);
+				output_ptr += advance;
+				cur_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				memcpy(output_ptr, cur_ptr, sizeof(Vector8));
+				output_ptr += sizeof(Vector8);
+				cur_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 			end_ptr = cur_ptr;
 			if (cur_ptr >= line_end_ptr)
 				break;
-- 
2.50.1

#3Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Nazir Bilal Yavuz (#2)
1 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 7 Aug 2025 at 14:15, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

On Thu, 7 Aug 2025 at 04:49, Shinya Kato <shinya11.kato@gmail.com> wrote:

I have implemented SIMD optimization for the COPY FROM (FORMAT {csv,
text}) command and observed approximately a 5% performance
improvement. Please see the detailed test results below.

Also, I did a benchmark on text format. I created a benchmark for line
length in a table being from 1 byte to 1 megabyte.The peak improvement
is line length being 4096 and the improvement is more than 20% [1], I
saw no regression on your patch.

I did the same benchmark for the CSV format. The peak improvement is
line length being 4096 and the improvement is more than 25% [1]. I saw
a 5% regression on the 1 byte benchmark, there are no other
regressions.

What do you think about adding SIMD to CopyReadAttributesText() and
CopyReadAttributesCSV() functions? When I add your SIMD approach to
CopyReadAttributesText() function, the improvement on the 4096 byte
line length input [1] goes from 20% to 30%.

I wanted to try using SIMD in CopyReadAttributesCSV() as well. The
improvement on the 4096 byte line length input [1] goes from 25% to
35%, the regression on the 1 byte input is the same.

CopyReadAttributesCSV() changes are attached as feedback v2.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachments:

v2-0001-Feedback.txttext/plain; charset=US-ASCII; name=v2-0001-Feedback.txtDownload
From 203d648c4cf64c6d629f2abc719a371dd0393e22 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Thu, 7 Aug 2025 13:27:34 +0300
Subject: [PATCH v2] Feedback

---
 src/backend/commands/copyfromparse.c | 176 ++++++++++++++++++++++++---
 1 file changed, 160 insertions(+), 16 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5aba0fa6cb7..7b83e64e23b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -670,8 +670,12 @@ CopyLoadInputBuf(CopyFromState cstate)
 		/* If we now have some unconverted data, try to convert it */
 		CopyConvertBuf(cstate);
 
-		/* If we now have some more input bytes ready, return them */
-		if (INPUT_BUF_BYTES(cstate) > nbytes)
+		/*
+		 * If we now have at least sizeof(Vector8) input bytes ready, return
+		 * them. This is beneficial for SIMD processing in the
+		 * CopyReadLineText() function.
+		 */
+		if (INPUT_BUF_BYTES(cstate) > nbytes + sizeof(Vector8))
 			return;
 
 		/*
@@ -1322,7 +1326,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * unsafe with the old v2 COPY protocol, but we don't support that
 		 * anymore.
 		 */
-		if (input_buf_ptr >= copy_buf_len || need_data)
+		if (input_buf_ptr + sizeof(Vector8) >= copy_buf_len || need_data)
 		{
 			REFILL_LINEBUF;
 
@@ -1345,21 +1349,22 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		}
 
 #ifndef USE_NO_SIMD
+
 		/*
-		 * SIMD instructions are used here to efficiently scan the input buffer
-		 * for special characters (e.g., newline, carriage return, quotes, or
-		 * escape characters). This approach significantly improves performance
-		 * compared to byte-by-byte iteration, especially for large input
-		 * buffers.
+		 * SIMD instructions are used here to efficiently scan the input
+		 * buffer for special characters (e.g., newline, carriage return,
+		 * quotes, or escape characters). This approach significantly improves
+		 * performance compared to byte-by-byte iteration, especially for
+		 * large input buffers.
 		 *
-		 * However, SIMD optimization cannot be applied in the following cases:
-		 * - Inside quoted fields, where escape sequences and closing quotes
-		 *   require sequential processing to handle correctly.
-		 * - When the remaining buffer size is smaller than the size of a SIMD
-		 *   vector register, as SIMD operations require processing data in
-		 *   fixed-size chunks.
+		 * However, SIMD optimization cannot be applied in the following
+		 * cases: - Inside quoted fields, where escape sequences and closing
+		 * quotes require sequential processing to handle correctly. - When
+		 * the remaining buffer size is smaller than the size of a SIMD vector
+		 * register, as SIMD operations require processing data in fixed-size
+		 * chunks.
 		 */
-		if (!in_quote && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match;
@@ -1388,13 +1393,15 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 				 * Found a special character. Advance up to that point and let
 				 * the scalar code handle it.
 				 */
-				int advance = pg_rightmost_one_pos32(mask);
+				int			advance = pg_rightmost_one_pos32(mask);
+
 				input_buf_ptr += advance;
 			}
 			else
 			{
 				/* No special characters found, so skip the entire chunk */
 				input_buf_ptr += sizeof(Vector8);
+				last_was_esc = false;
 				continue;
 			}
 		}
@@ -1650,6 +1657,11 @@ CopyReadAttributesText(CopyFromState cstate)
 	char	   *cur_ptr;
 	char	   *line_end_ptr;
 
+#ifndef USE_NO_SIMD
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		delim = vector8_broadcast(delimc);
+#endif
+
 	/*
 	 * We need a special case for zero-column tables: check that the input
 	 * line is empty, and return.
@@ -1717,6 +1729,44 @@ CopyReadAttributesText(CopyFromState cstate)
 		{
 			char		c;
 
+#ifndef USE_NO_SIMD
+			if (line_end_ptr - cur_ptr >= sizeof(Vector8))
+			{
+				Vector8		chunk;
+				Vector8		match;
+				uint32		mask;
+
+				/* Load a chunk of data into a vector register */
+				vector8_load(&chunk, (const uint8 *) cur_ptr);
+
+				/* Create a mask of all special characters we need to stop at */
+				match = vector8_or(vector8_eq(chunk, bs), vector8_eq(chunk, delim));
+
+				/* Check if we found any special characters */
+				mask = vector8_highbit_mask(match);
+				if (mask != 0)
+				{
+					/*
+					 * Found a special character. Advance up to that point and
+					 * let the scalar code handle it.
+					 */
+					int			advance = pg_rightmost_one_pos32(mask);
+
+					memcpy(output_ptr, cur_ptr, advance);
+					output_ptr += advance;
+					cur_ptr += advance;
+				}
+				else
+				{
+					/* No special characters found, so skip the entire chunk */
+					memcpy(output_ptr, cur_ptr, sizeof(Vector8));
+					output_ptr += sizeof(Vector8);
+					cur_ptr += sizeof(Vector8);
+					continue;
+				}
+			}
+#endif
+
 			end_ptr = cur_ptr;
 			if (cur_ptr >= line_end_ptr)
 				break;
@@ -1906,6 +1956,12 @@ CopyReadAttributesCSV(CopyFromState cstate)
 	char	   *cur_ptr;
 	char	   *line_end_ptr;
 
+#ifndef USE_NO_SIMD
+	Vector8		quote = vector8_broadcast(quotec);
+	Vector8		delim = vector8_broadcast(delimc);
+	Vector8		escape = vector8_broadcast(escapec);
+#endif
+
 	/*
 	 * We need a special case for zero-column tables: check that the input
 	 * line is empty, and return.
@@ -1972,6 +2028,50 @@ CopyReadAttributesCSV(CopyFromState cstate)
 			/* Not in quote */
 			for (;;)
 			{
+#ifndef USE_NO_SIMD
+				if (line_end_ptr - cur_ptr >= sizeof(Vector8))
+				{
+					Vector8		chunk;
+					Vector8		match;
+					uint32		mask;
+
+					/* Load a chunk of data into a vector register */
+					vector8_load(&chunk, (const uint8 *) cur_ptr);
+
+					/*
+					 * Create a mask of all special characters we need to stop
+					 * at
+					 */
+					match = vector8_or(vector8_eq(chunk, quote), vector8_eq(chunk, delim));
+
+					/* Check if we found any special characters */
+					mask = vector8_highbit_mask(match);
+					if (mask != 0)
+					{
+						/*
+						 * Found a special character. Advance up to that point
+						 * and let the scalar code handle it.
+						 */
+						int			advance = pg_rightmost_one_pos32(mask);
+
+						memcpy(output_ptr, cur_ptr, advance);
+						output_ptr += advance;
+						cur_ptr += advance;
+					}
+					else
+					{
+						/*
+						 * No special characters found, so skip the entire
+						 * chunk
+						 */
+						memcpy(output_ptr, cur_ptr, sizeof(Vector8));
+						output_ptr += sizeof(Vector8);
+						cur_ptr += sizeof(Vector8);
+						continue;
+					}
+				}
+#endif
+
 				end_ptr = cur_ptr;
 				if (cur_ptr >= line_end_ptr)
 					goto endfield;
@@ -1995,6 +2095,50 @@ CopyReadAttributesCSV(CopyFromState cstate)
 			/* In quote */
 			for (;;)
 			{
+#ifndef USE_NO_SIMD
+				if (line_end_ptr - cur_ptr >= sizeof(Vector8))
+				{
+					Vector8		chunk;
+					Vector8		match;
+					uint32		mask;
+
+					/* Load a chunk of data into a vector register */
+					vector8_load(&chunk, (const uint8 *) cur_ptr);
+
+					/*
+					 * Create a mask of all special characters we need to stop
+					 * at
+					 */
+					match = vector8_or(vector8_eq(chunk, quote), vector8_eq(chunk, escape));
+
+					/* Check if we found any special characters */
+					mask = vector8_highbit_mask(match);
+					if (mask != 0)
+					{
+						/*
+						 * Found a special character. Advance up to that point
+						 * and let the scalar code handle it.
+						 */
+						int			advance = pg_rightmost_one_pos32(mask);
+
+						memcpy(output_ptr, cur_ptr, advance);
+						output_ptr += advance;
+						cur_ptr += advance;
+					}
+					else
+					{
+						/*
+						 * No special characters found, so skip the entire
+						 * chunk
+						 */
+						memcpy(output_ptr, cur_ptr, sizeof(Vector8));
+						output_ptr += sizeof(Vector8);
+						cur_ptr += sizeof(Vector8);
+						continue;
+					}
+				}
+#endif
+
 				end_ptr = cur_ptr;
 				if (cur_ptr >= line_end_ptr)
 					ereport(ERROR,
-- 
2.50.1

#4Shinya Kato
shinya11.kato@gmail.com
In reply to: Nazir Bilal Yavuz (#3)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Thu, Aug 7, 2025 at 8:15 PM Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

Thank you for working on this!

On Thu, 7 Aug 2025 at 04:49, Shinya Kato <shinya11.kato@gmail.com> wrote:

Hi hackers,

I have implemented SIMD optimization for the COPY FROM (FORMAT {csv,
text}) command and observed approximately a 5% performance
improvement. Please see the detailed test results below.

I have been working on the same idea. I was not moving input_buf_ptr
as far as possible, so I think your approach is better.

Great. I'm looking forward to working with you on this feature implementation.

Also, I did a benchmark on text format. I created a benchmark for line
length in a table being from 1 byte to 1 megabyte.The peak improvement
is line length being 4096 and the improvement is more than 20% [1], I
saw no regression on your patch.

Thank you for the additional benchmarks.

I have a couple of ideas that I was working on:
---

+         * However, SIMD optimization cannot be applied in the following cases:
+         * - Inside quoted fields, where escape sequences and closing quotes
+         *   require sequential processing to handle correctly.

I think you can continue SIMD inside quoted fields. Only important
thing is you need to set last_was_esc to false when SIMD skipped the
chunk.

That's a clever point that last_was_esc should be reset to false when
a SIMD chunk is skipped. You're right about that specific case.

However, the core challenge is not what happens when we skip a chunk,
but what happens when a chunk contains special characters like quotes
or escapes. The main reason we avoid SIMD inside quoted fields is that
the parsing logic becomes fundamentally sequential and
context-dependent.

To correctly parse a "" as a single literal quote, we must perform a
lookahead to check the next character. This is an inherently
sequential operation that doesn't map well to SIMD's parallel nature.

Trying to handle this stateful logic with SIMD would lead to
significant implementation complexity, especially with edge cases like
an escape character falling on the last byte of a chunk.

+         * - When the remaining buffer size is smaller than the size of a SIMD
+         *   vector register, as SIMD operations require processing data in
+         *   fixed-size chunks.

You run SIMD when 'copy_buf_len - input_buf_ptr >= sizeof(Vector8)'
but you only call CopyLoadInputBuf() when 'input_buf_ptr >=
copy_buf_len || need_data' so basically you need to wait at least the
sizeof(Vector8) character to pass for the next SIMD. And in the worst
case; if CopyLoadInputBuf() puts one character less than
sizeof(Vector8), then you can't ever run SIMD. I think we need to make
sure that CopyLoadInputBuf() loads at least the sizeof(Vector8)
character to the input_buf so we do not encounter that problem.

I think you're probably right, but we only need to account for
sizeof(Vector8) when USE_NO_SIMD is not defined.

What do you think about adding SIMD to CopyReadAttributesText() and
CopyReadAttributesCSV() functions? When I add your SIMD approach to
CopyReadAttributesText() function, the improvement on the 4096 byte
line length input [1] goes from 20% to 30%.

Agreed, I will.

I shared my ideas as a Feedback.txt file (.txt to stay off CFBot's
radar for this thread). I hope these help, please let me know if you
have any questions.

Thanks a lot!

On Mon, Aug 11, 2025 at 5:52 PM Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

On Thu, 7 Aug 2025 at 14:15, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

On Thu, 7 Aug 2025 at 04:49, Shinya Kato <shinya11.kato@gmail.com> wrote:

I have implemented SIMD optimization for the COPY FROM (FORMAT {csv,
text}) command and observed approximately a 5% performance
improvement. Please see the detailed test results below.

Also, I did a benchmark on text format. I created a benchmark for line
length in a table being from 1 byte to 1 megabyte.The peak improvement
is line length being 4096 and the improvement is more than 20% [1], I
saw no regression on your patch.

I did the same benchmark for the CSV format. The peak improvement is
line length being 4096 and the improvement is more than 25% [1]. I saw
a 5% regression on the 1 byte benchmark, there are no other
regressions.

Thank you. I'm not too concerned about a regression when there's only
one byte per line.

What do you think about adding SIMD to CopyReadAttributesText() and
CopyReadAttributesCSV() functions? When I add your SIMD approach to
CopyReadAttributesText() function, the improvement on the 4096 byte
line length input [1] goes from 20% to 30%.

I wanted to try using SIMD in CopyReadAttributesCSV() as well. The
improvement on the 4096 byte line length input [1] goes from 25% to
35%, the regression on the 1 byte input is the same.

Yes, I'm on it. I'm currently adding the SIMD logic to
CopyReadAttributesCSV() as you suggested. I'll share the new version
of the patch soon.

--
Best regards,
Shinya Kato
NTT OSS Center

#5Shinya Kato
shinya11.kato@gmail.com
In reply to: Shinya Kato (#4)
1 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Aug 12, 2025 at 4:25 PM Shinya Kato <shinya11.kato@gmail.com> wrote:

+         * However, SIMD optimization cannot be applied in the following cases:
+         * - Inside quoted fields, where escape sequences and closing quotes
+         *   require sequential processing to handle correctly.

I think you can continue SIMD inside quoted fields. Only important
thing is you need to set last_was_esc to false when SIMD skipped the
chunk.

That's a clever point that last_was_esc should be reset to false when
a SIMD chunk is skipped. You're right about that specific case.

However, the core challenge is not what happens when we skip a chunk,
but what happens when a chunk contains special characters like quotes
or escapes. The main reason we avoid SIMD inside quoted fields is that
the parsing logic becomes fundamentally sequential and
context-dependent.

To correctly parse a "" as a single literal quote, we must perform a
lookahead to check the next character. This is an inherently
sequential operation that doesn't map well to SIMD's parallel nature.

Trying to handle this stateful logic with SIMD would lead to
significant implementation complexity, especially with edge cases like
an escape character falling on the last byte of a chunk.

Ah, you're right. My apologies, I misunderstood the implementation. It
appears that SIMD can be used even within quoted strings.

I think it would be better not to use the SIMD path when last_was_esc
is true. The next character is likely to be a special character, and
handling this case outside the SIMD loop would also improve
readability by consolidating the last_was_esc toggle logic in one
place.

Furthermore, when inside a quote (in_quote) in CSV mode, the detection
of \n and \r can be disabled.

+ last_was_esc = false;

Regarding the implementation, I believe we must set last_was_esc to
false when advancing input_buf_ptr, as shown in the code below. For
this reason, I think it’s best to keep the current logic for toggling
last_was_esc.

+               int advance = pg_rightmost_one_pos32(mask);
+               input_buf_ptr += advance;

I've attached a new patch that includes these changes. Further
modifications are still in progress.

--
Best regards,
Shinya Kato
NTT OSS Center

Attachments:

v2-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchapplication/octet-stream; name=v2-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 69e16f8c7a52d967385a1dc9b1602bbd4472df60 Mon Sep 17 00:00:00 2001
From: Shinya Kato <shinya11.kato@gmail.com>
Date: Mon, 28 Jul 2025 22:08:20 +0900
Subject: [PATCH v2] Speed up COPY FROM text/CSV parsing using SIMD

---
 src/backend/commands/copyfromparse.c | 71 ++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b1ae97b833d..f1a6ea81dd1 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -71,7 +71,9 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
 #include "port/pg_bswap.h"
+#include "port/simd.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 
@@ -1255,6 +1257,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
+#ifndef USE_NO_SIMD
+	Vector8		nl = vector8_broadcast('\n');
+	Vector8		cr = vector8_broadcast('\r');
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		quote;
+	Vector8		escape;
+#endif
+
 	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
@@ -1262,6 +1272,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
+
+#ifndef USE_NO_SIMD
+		quote = vector8_broadcast(quotec);
+		if (quotec != escapec)
+			escape = vector8_broadcast(escapec);
+#endif
 	}
 
 	/*
@@ -1328,6 +1344,61 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			need_data = false;
 		}
 
+#ifndef USE_NO_SIMD
+		/*
+		 * Use SIMD instructions to efficiently scan the input buffer for
+		 * special characters (e.g., newline, carriage return, quote, and
+		 * escape). This is faster than byte-by-byte iteration, especially on
+		 * large buffers.
+		 *
+		 * We do not apply the SIMD fast path in either of the following cases:
+		 * - When the previously processed character was an escape character
+		 *   (last_was_esc), since the next byte must be examined sequentially.
+		 * - The remaining buffer is smaller than one vector width
+		 *   (sizeof(Vector8)); SIMD operates on fixed-size chunks.
+		 */
+		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match;
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
+
+			/* \n and \r are not special inside quotes */
+			if (!in_quote)
+				match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+			if (is_csv)
+			{
+				match = vector8_or(match, vector8_eq(chunk, quote));
+				if (escapec != '\0')
+					match = vector8_or(match, vector8_eq(chunk, escape));
+			}
+			else
+				match = vector8_or(match, vector8_eq(chunk, bs));
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int advance = pg_rightmost_one_pos32(mask);
+				input_buf_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				input_buf_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 		/* OK to fetch a character */
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
-- 
2.47.3

#6KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Shinya Kato (#5)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Following Nazir's findings about 4096 bytes being the performant line
length, I did more benchmarks from my side on both TEXT and CSV formats
with two different cases of normal data (no special characters) and data
with many special characters.

Results are con good as expected and similar to previous benchmarks
~30.9% faster copy in TEXT format
~32.4% faster copy in CSV format
20%-30% reduces cycles per instructions

In the case of doing a lot of special characters in the lines (e.g., tables
with large numbers of columns maybe), we obviously expect regressions here
because of the overhead of many fallbacks to scalar processing.
Results for a 1/3 of line length of special characters:
~43.9% slower copy in TEXT format
~16.7% slower copy in CSV format
So for even less occurrences of special characters or wider distance
between there might still be some regressions in this case, a
non-significant case maybe, but can be treated in other patches if we
consider to not use SIMD path sometimes.

I hope this helps more and confirms the patch.

Regards,
Ayoub Kazar

Le jeu. 14 août 2025 à 01:55, Shinya Kato <shinya11.kato@gmail.com> a
écrit :

Show quoted text

On Tue, Aug 12, 2025 at 4:25 PM Shinya Kato <shinya11.kato@gmail.com>
wrote:

+ * However, SIMD optimization cannot be applied in the

following cases:

+ * - Inside quoted fields, where escape sequences and closing

quotes

+ * require sequential processing to handle correctly.

I think you can continue SIMD inside quoted fields. Only important
thing is you need to set last_was_esc to false when SIMD skipped the
chunk.

That's a clever point that last_was_esc should be reset to false when
a SIMD chunk is skipped. You're right about that specific case.

However, the core challenge is not what happens when we skip a chunk,
but what happens when a chunk contains special characters like quotes
or escapes. The main reason we avoid SIMD inside quoted fields is that
the parsing logic becomes fundamentally sequential and
context-dependent.

To correctly parse a "" as a single literal quote, we must perform a
lookahead to check the next character. This is an inherently
sequential operation that doesn't map well to SIMD's parallel nature.

Trying to handle this stateful logic with SIMD would lead to
significant implementation complexity, especially with edge cases like
an escape character falling on the last byte of a chunk.

Ah, you're right. My apologies, I misunderstood the implementation. It
appears that SIMD can be used even within quoted strings.

I think it would be better not to use the SIMD path when last_was_esc
is true. The next character is likely to be a special character, and
handling this case outside the SIMD loop would also improve
readability by consolidating the last_was_esc toggle logic in one
place.

Furthermore, when inside a quote (in_quote) in CSV mode, the detection
of \n and \r can be disabled.

+ last_was_esc = false;

Regarding the implementation, I believe we must set last_was_esc to
false when advancing input_buf_ptr, as shown in the code below. For
this reason, I think it’s best to keep the current logic for toggling
last_was_esc.

+               int advance = pg_rightmost_one_pos32(mask);
+               input_buf_ptr += advance;

I've attached a new patch that includes these changes. Further
modifications are still in progress.

--
Best regards,
Shinya Kato
NTT OSS Center

#7Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: KAZAR Ayoub (#6)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 14 Aug 2025 at 05:25, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Following Nazir's findings about 4096 bytes being the performant line length, I did more benchmarks from my side on both TEXT and CSV formats with two different cases of normal data (no special characters) and data with many special characters.

Results are con good as expected and similar to previous benchmarks
~30.9% faster copy in TEXT format
~32.4% faster copy in CSV format
20%-30% reduces cycles per instructions

In the case of doing a lot of special characters in the lines (e.g., tables with large numbers of columns maybe), we obviously expect regressions here because of the overhead of many fallbacks to scalar processing.
Results for a 1/3 of line length of special characters:
~43.9% slower copy in TEXT format
~16.7% slower copy in CSV format
So for even less occurrences of special characters or wider distance between there might still be some regressions in this case, a non-significant case maybe, but can be treated in other patches if we consider to not use SIMD path sometimes.

I hope this helps more and confirms the patch.

Thanks for running that benchmark! Would you mind sharing a reproducer
for the regression you observed?

--
Regards,
Nazir Bilal Yavuz
Microsoft

#8KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nazir Bilal Yavuz (#7)
1 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 14 Aug 2025 at 05:25, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Following Nazir's findings about 4096 bytes being the performant line

length, I did more benchmarks from my side on both TEXT and CSV formats
with two different cases of normal data (no special characters) and data
with many special characters.

Results are con good as expected and similar to previous benchmarks
~30.9% faster copy in TEXT format
~32.4% faster copy in CSV format
20%-30% reduces cycles per instructions

In the case of doing a lot of special characters in the lines (e.g.,

tables with large numbers of columns maybe), we obviously expect
regressions here because of the overhead of many fallbacks to scalar
processing.

Results for a 1/3 of line length of special characters:
~43.9% slower copy in TEXT format
~16.7% slower copy in CSV format
So for even less occurrences of special characters or wider distance

between there might still be some regressions in this case, a
non-significant case maybe, but can be treated in other patches if we
consider to not use SIMD path sometimes.

I hope this helps more and confirms the patch.

Thanks for running that benchmark! Would you mind sharing a reproducer
for the regression you observed?

--
Regards,
Nazir Bilal Yavuz
Microsoft

Of course, I attached the sql to generate the text and csv test files.
If having a 1/3 of line length of special characters can be an
exaggeration, something lower might still reproduce some regressions of
course for the same idea.

Best regards,
Ayoub Kazar

Attachments:

simd-copy-from-bench.sqlapplication/sql; name=simd-copy-from-bench.sqlDownload
#9Ants Aasma
ants.aasma@cybertec.at
In reply to: Nazir Bilal Yavuz (#2)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Thu, 7 Aug 2025 at 14:15, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

I have a couple of ideas that I was working on:
---

+         * However, SIMD optimization cannot be applied in the following cases:
+         * - Inside quoted fields, where escape sequences and closing quotes
+         *   require sequential processing to handle correctly.

I think you can continue SIMD inside quoted fields. Only important
thing is you need to set last_was_esc to false when SIMD skipped the
chunk.

There is a trick with doing carryless multiplication with -1 that can
be used to SIMD process transitions between quoted/not-quoted. [1]https://github.com/geofflangdale/simdcsv/blob/master/src/main.cpp#L76
This is able to convert a bitmask of unescaped quote character
positions to a quote mask in a single operation. I last looked at it 5
years ago, but I remember coming to the conclusion that it would work
for implementing PostgreSQL's interpretation of CSV.

[1]: https://github.com/geofflangdale/simdcsv/blob/master/src/main.cpp#L76

--
Ants

#10Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: KAZAR Ayoub (#8)
1 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 14 Aug 2025 at 18:00, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Thanks for running that benchmark! Would you mind sharing a reproducer
for the regression you observed?

Of course, I attached the sql to generate the text and csv test files.
If having a 1/3 of line length of special characters can be an exaggeration, something lower might still reproduce some regressions of course for the same idea.

Thank you so much!

I am able to reproduce the regression you mentioned but both
regressions are %20 on my end. I found that (by experimenting) SIMD
causes a regression if it advances less than 5 characters.

So, I implemented a small heuristic. It works like that:

- If advance < 5 -> insert a sleep penalty (n cycles).
- Each time advance < 5, n is doubled.
- Each time advance ≥ 5, n is halved.

I am sharing a POC patch to show heuristic, it can be applied on top
of v1-0001. Heuristic version has the same performance improvements
with the v1-0001 but the regression is %5 instead of %20 compared to
the master.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachments:

COPY-SIMD-add-heuristic-to-avoid-regression-on-sm.txttext/plain; charset=UTF-8; name=COPY-SIMD-add-heuristic-to-avoid-regression-on-sm.txtDownload
From aa55843b0c64bed9f72cf8cd7854df9df7ef989b Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Tue, 19 Aug 2025 15:16:02 +0300
Subject: [PATCH v1] COPY SIMD: add heuristic to avoid regression on small
 advances
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

When SIMD advances fewer than 5 characters, performance regresses.
To mitigate this, introduce a heuristic:

- If advance < 5 -> insert a sleep penalty (n cycles).
- Each time advance < 5, n is doubled.
- Each time advance ≥ 5, n is halved.
---
 src/backend/commands/copyfromparse.c | 42 ++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5aba0fa6cb7..e58d7d4e353 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1263,6 +1263,9 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	Vector8		bs = vector8_broadcast('\\');
 	Vector8		quote;
 	Vector8		escape;
+
+	int			sleep_cyle = 0;
+	int			last_sleep_cyle = 1;
 #endif
 
 	if (is_csv)
@@ -1359,7 +1362,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 *   vector register, as SIMD operations require processing data in
 		 *   fixed-size chunks.
 		 */
-		if (!in_quote && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (sleep_cyle <= 0 && !in_quote && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match;
@@ -1390,14 +1393,49 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 				 */
 				int advance = pg_rightmost_one_pos32(mask);
 				input_buf_ptr += advance;
+
+				/*
+				 * If we advance less than 5 characters we cause regression.
+				 * Sleep a bit then try again. Sleep time increases
+				 * exponentially.
+				 */
+				if (advance < 5)
+				{
+					if (last_sleep_cyle >= PG_INT16_MAX / 2)
+						last_sleep_cyle = PG_INT16_MAX;
+					else
+						last_sleep_cyle = last_sleep_cyle << 1;
+
+					sleep_cyle = last_sleep_cyle;
+				}
+
+				/*
+				 * If we advance more than 4 charactes this means we have
+				 * performance improvement. Halve sleep time for next sleep.
+				 */
+				else
+				{
+					last_sleep_cyle = Max(last_sleep_cyle >> 1, 1);
+					sleep_cyle = 0;
+				}
 			}
 			else
 			{
-				/* No special characters found, so skip the entire chunk */
+				/*
+				 * No special characters found, so skip the entire chunk and
+				 * halve sleep time for next sleep.
+				 */
 				input_buf_ptr += sizeof(Vector8);
+				last_sleep_cyle = Max(last_sleep_cyle >> 1, 1);
 				continue;
 			}
 		}
+
+		/*
+		 * Vulnerable to overflow if we are in quote for more than INT16_MAX
+		 * characters.
+		 */
+		sleep_cyle--;
 #endif
 
 		/* OK to fetch a character */
-- 
2.50.1

#11Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Nazir Bilal Yavuz (#10)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Tue, 19 Aug 2025 at 15:33, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

I am able to reproduce the regression you mentioned but both
regressions are %20 on my end. I found that (by experimenting) SIMD
causes a regression if it advances less than 5 characters.

So, I implemented a small heuristic. It works like that:

- If advance < 5 -> insert a sleep penalty (n cycles).

'sleep' might be a poor word choice here. I meant skipping SIMD for n
number of times.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#12Andrew Dunstan
andrew@dunslane.net
In reply to: Nazir Bilal Yavuz (#11)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On 2025-08-19 Tu 10:14 AM, Nazir Bilal Yavuz wrote:

Hi,

On Tue, 19 Aug 2025 at 15:33, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

I am able to reproduce the regression you mentioned but both
regressions are %20 on my end. I found that (by experimenting) SIMD
causes a regression if it advances less than 5 characters.

So, I implemented a small heuristic. It works like that:

- If advance < 5 -> insert a sleep penalty (n cycles).

'sleep' might be a poor word choice here. I meant skipping SIMD for n
number of times.

I was thinking a bit about that this morning. I wonder if it might be
better instead of having a constantly applied heuristic like this, it
might be better to do a little extra accounting in the first, say, 1000
lines of an input file, and if less than some portion of the input is
found to be special characters then switch to the SIMD code. What that
portion should be would need to be determined by some experimentation
with a variety of typical workloads, but given your findings 20% seems
like a good starting point.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#13KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nazir Bilal Yavuz (#10)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Thu, 14 Aug 2025 at 18:00, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Thanks for running that benchmark! Would you mind sharing a reproducer
for the regression you observed?

Of course, I attached the sql to generate the text and csv test files.
If having a 1/3 of line length of special characters can be an

exaggeration, something lower might still reproduce some regressions of
course for the same idea.

Thank you so much!

I am able to reproduce the regression you mentioned but both
regressions are %20 on my end. I found that (by experimenting) SIMD
causes a regression if it advances less than 5 characters.

So, I implemented a small heuristic. It works like that:

- If advance < 5 -> insert a sleep penalty (n cycles).
- Each time advance < 5, n is doubled.
- Each time advance ≥ 5, n is halved.

I am sharing a POC patch to show heuristic, it can be applied on top
of v1-0001. Heuristic version has the same performance improvements
with the v1-0001 but the regression is %5 instead of %20 compared to
the master.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Yes this is good, i'm also getting about 5% regression only now.

Regards,
Ayoub Kazar

#14Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Andrew Dunstan (#12)
2 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 21 Aug 2025 at 18:47, Andrew Dunstan <andrew@dunslane.net> wrote:

On 2025-08-19 Tu 10:14 AM, Nazir Bilal Yavuz wrote:

Hi,

On Tue, 19 Aug 2025 at 15:33, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

I am able to reproduce the regression you mentioned but both
regressions are %20 on my end. I found that (by experimenting) SIMD
causes a regression if it advances less than 5 characters.

So, I implemented a small heuristic. It works like that:

- If advance < 5 -> insert a sleep penalty (n cycles).

'sleep' might be a poor word choice here. I meant skipping SIMD for n
number of times.

I was thinking a bit about that this morning. I wonder if it might be
better instead of having a constantly applied heuristic like this, it
might be better to do a little extra accounting in the first, say, 1000
lines of an input file, and if less than some portion of the input is
found to be special characters then switch to the SIMD code. What that
portion should be would need to be determined by some experimentation
with a variety of typical workloads, but given your findings 20% seems
like a good starting point.

I implemented a heuristic something similar to this. It is a mix of
previous heuristic and your idea, it works like that:

Overall logic is that we will not run SIMD for the entire line and we
decide if it is worth it to run SIMD for the next lines.

1 - We will try SIMD and decide if it is worth it to run SIMD.
1.1 - If it is worth it, we will continue to run SIMD and we will
halve the simd_last_sleep_cycle variable.
1.2 - If it is not worth it, we will double the simd_last_sleep_cycle
and we will not run SIMD for these many lines.
1.3 - After skipping simd_last_sleep_cycle lines, we will go back to the #1.
Note: simd_last_sleep_cycle can not pass 1024, so we will run SIMD for
each 1024 lines at max.

With this heuristic the regression is limited by %2 in the worst case.

Patches are attached, the first patch is v2-0001 from Shinya with the
'-Werror=maybe-uninitialized' fixes and the pgindent changes. 0002 is
the actual heuristic patch.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachments:

v3-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v3-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 2d2372e90305a81c80fe182003933039bf32f97e Mon Sep 17 00:00:00 2001
From: Shinya Kato <shinya11.kato@gmail.com>
Date: Mon, 28 Jul 2025 22:08:20 +0900
Subject: [PATCH v3 1/2] Speed up COPY FROM text/CSV parsing using SIMD

---
 src/backend/commands/copyfromparse.c | 73 ++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b1ae97b833d..99959a40fab 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -71,7 +71,9 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
 #include "port/pg_bswap.h"
+#include "port/simd.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 
@@ -1255,6 +1257,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
+#ifndef USE_NO_SIMD
+	Vector8		nl = vector8_broadcast('\n');
+	Vector8		cr = vector8_broadcast('\r');
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		quote = vector8_broadcast(0);
+	Vector8		escape = vector8_broadcast(0);
+#endif
+
 	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
@@ -1262,6 +1272,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
+
+#ifndef USE_NO_SIMD
+		quote = vector8_broadcast(quotec);
+		if (quotec != escapec)
+			escape = vector8_broadcast(escapec);
+#endif
 	}
 
 	/*
@@ -1328,6 +1344,63 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			need_data = false;
 		}
 
+#ifndef USE_NO_SIMD
+
+		/*
+		 * Use SIMD instructions to efficiently scan the input buffer for
+		 * special characters (e.g., newline, carriage return, quote, and
+		 * escape). This is faster than byte-by-byte iteration, especially on
+		 * large buffers.
+		 *
+		 * We do not apply the SIMD fast path in either of the following
+		 * cases: - When the previously processed character was an escape
+		 * character (last_was_esc), since the next byte must be examined
+		 * sequentially. - The remaining buffer is smaller than one vector
+		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
+		 */
+		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match = vector8_broadcast(0);
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
+
+			/* \n and \r are not special inside quotes */
+			if (!in_quote)
+				match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+			if (is_csv)
+			{
+				match = vector8_or(match, vector8_eq(chunk, quote));
+				if (escapec != '\0')
+					match = vector8_or(match, vector8_eq(chunk, escape));
+			}
+			else
+				match = vector8_or(match, vector8_eq(chunk, bs));
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int			advance = pg_rightmost_one_pos32(mask);
+
+				input_buf_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				input_buf_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 		/* OK to fetch a character */
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
-- 
2.51.0

v3-0002-COPY-SIMD-per-line-heuristic.patchtext/x-patch; charset=US-ASCII; name=v3-0002-COPY-SIMD-per-line-heuristic.patchDownload
From ad050583d3c14bdec44266d8d2110b384fa9d7dc Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Tue, 14 Oct 2025 13:18:13 +0300
Subject: [PATCH v3 2/2] COPY SIMD per-line heuristic

---
 src/include/commands/copyfrom_internal.h |  7 ++
 src/backend/commands/copyfrom.c          |  6 ++
 src/backend/commands/copyfromparse.c     | 82 ++++++++++++++++++++++--
 3 files changed, 89 insertions(+), 6 deletions(-)

diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..9dd31320f52 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -89,6 +89,13 @@ typedef struct CopyFromStateData
 	const char *cur_attval;		/* current att value for error messages */
 	bool		relname_only;	/* don't output line number, att, etc. */
 
+	/* SIMD variables */
+	bool		simd_continue;
+	bool		simd_initialized;
+	uint16		simd_last_sleep_cycle;
+	uint16		simd_current_sleep_cycle;
+
+
 	/*
 	 * Working state
 	 */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 12781963b4f..4bdfd96c244 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1721,6 +1721,12 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->cur_attval = NULL;
 	cstate->relname_only = false;
 
+	/* Initialize SIMD variables */
+	cstate->simd_continue = false;
+	cstate->simd_initialized = false;
+	cstate->simd_current_sleep_cycle = 0;
+	cstate->simd_last_sleep_cycle = 0;
+
 	/*
 	 * Allocate buffers for the input pipeline.
 	 *
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 99959a40fab..24cef54e5e4 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -143,12 +143,14 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate, bool is_csv);
-static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate,
+														bool is_csv,
+														bool simd_continue);
 static pg_attribute_always_inline bool CopyFromTextLikeOneRow(CopyFromState cstate,
 															  ExprContext *econtext,
 															  Datum *values,
@@ -1173,8 +1175,23 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 	resetStringInfo(&cstate->line_buf);
 	cstate->line_buf_valid = false;
 
-	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate, is_csv);
+	/* If that is the first time we do read, initalize the SIMD */
+	if (unlikely(!cstate->simd_initialized))
+	{
+		cstate->simd_initialized = true;
+		cstate->simd_continue = true;
+		cstate->simd_current_sleep_cycle = 0;
+		cstate->simd_last_sleep_cycle = 0;
+	}
+
+	/*
+	 * Parse data and transfer into line_buf. To get benefit from inlining,
+	 * call CopyReadLineText() with the constant boolean variables.
+	 */
+	if (cstate->simd_continue)
+		result = CopyReadLineText(cstate, is_csv, true);
+	else
+		result = CopyReadLineText(cstate, is_csv, false);
 
 	if (result)
 	{
@@ -1241,8 +1258,8 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv, bool simd_continue)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1258,11 +1275,16 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		escapec = '\0';
 
 #ifndef USE_NO_SIMD
+#define SIMD_SLEEP_MAX 1024
+#define SIMD_ADVANCE_AT_LEAST 5
 	Vector8		nl = vector8_broadcast('\n');
 	Vector8		cr = vector8_broadcast('\r');
 	Vector8		bs = vector8_broadcast('\\');
 	Vector8		quote = vector8_broadcast(0);
 	Vector8		escape = vector8_broadcast(0);
+
+	uint64		simd_total_cycle = 0;
+	uint64		simd_total_advance = 0;
 #endif
 
 	if (is_csv)
@@ -1358,12 +1380,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * sequentially. - The remaining buffer is smaller than one vector
 		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
 		 */
-		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (simd_continue && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match = vector8_broadcast(0);
 			uint32		mask;
 
+			simd_total_cycle++;
+
 			/* Load a chunk of data into a vector register */
 			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
 
@@ -1391,11 +1415,13 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 				int			advance = pg_rightmost_one_pos32(mask);
 
 				input_buf_ptr += advance;
+				simd_total_advance += advance;
 			}
 			else
 			{
 				/* No special characters found, so skip the entire chunk */
 				input_buf_ptr += sizeof(Vector8);
+				simd_total_advance += sizeof(Vector8);
 				continue;
 			}
 		}
@@ -1603,6 +1629,50 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		}
 	}							/* end of outer loop */
 
+#ifndef USE_NO_SIMD
+
+	/* SIMD was enabled */
+	if (simd_continue)
+	{
+		/* SIMD is worth */
+		if (simd_total_cycle && simd_total_advance / simd_total_cycle >= SIMD_ADVANCE_AT_LEAST)
+		{
+			Assert(cstate->simd_current_sleep_cycle == 0);
+			cstate->simd_last_sleep_cycle >>= 1;
+		}
+		/* SIMD was enabled but it isn't worth */
+		else
+		{
+			uint16		simd_last_sleep_cycle = cstate->simd_last_sleep_cycle;
+
+			cstate->simd_continue = false;
+
+			if (simd_last_sleep_cycle == 0)
+				simd_last_sleep_cycle = 1;
+			else if (simd_last_sleep_cycle >= SIMD_SLEEP_MAX / 2)
+				simd_last_sleep_cycle = SIMD_SLEEP_MAX;
+			else
+				simd_last_sleep_cycle <<= 1;
+			cstate->simd_current_sleep_cycle = simd_last_sleep_cycle;
+			cstate->simd_last_sleep_cycle = simd_last_sleep_cycle;
+		}
+	}
+	/* SIMD was disabled */
+	else
+	{
+		/*
+		 * We should come here with decrementing
+		 * cstate->simd_current_sleep_cycle from a positive number.
+		 */
+		Assert(cstate->simd_current_sleep_cycle != 0);
+		cstate->simd_current_sleep_cycle--;
+
+		if (cstate->simd_current_sleep_cycle == 0)
+			cstate->simd_continue = true;
+	}
+
+#endif
+
 	/*
 	 * Transfer any still-uncopied data to line_buf.
 	 */
-- 
2.51.0

#15KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nazir Bilal Yavuz (#14)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hello,

I’ve rebenchmarked the new heuristic patch, We still have the previous
improvements ranging from 15% to 30%. For regressions i see at maximum 3%
or 4% in the worst case, so this is solid.

I'm also trying the idea of doing SIMD inside quotes with prefix XOR using
carry less multiplication avoiding the slow path in all cases even with
weird looking input, but it needs to take into consideration the
availability of PCLMULQDQ instruction set with <wmmintrin.h> and here we
go, it quickly starts to become dirty OR we can wait for the decision to
start requiring x86-64-v2 or v3 which has SSE4.2 and AVX2.

Regards,
Ayoub Kazar

#16Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Nazir Bilal Yavuz (#14)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 16 Oct 2025 at 17:29, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote:

Overall logic is that we will not run SIMD for the entire line and we
decide if it is worth it to run SIMD for the next lines.

I had a typo there, correct sentence is that:

"Overall logic is that we *will* run SIMD for the entire line and we
decide if it is worth it to run SIMD for the next lines."

--
Regards,
Nazir Bilal Yavuz
Microsoft

#17Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: KAZAR Ayoub (#15)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Sat, 18 Oct 2025 at 21:46, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,

I’ve rebenchmarked the new heuristic patch, We still have the previous improvements ranging from 15% to 30%. For regressions i see at maximum 3% or 4% in the worst case, so this is solid.

Thank you so much for doing this! The results look nice, do you think
there are any other benchmarks that might be interesting to try?

I'm also trying the idea of doing SIMD inside quotes with prefix XOR using carry less multiplication avoiding the slow path in all cases even with weird looking input, but it needs to take into consideration the availability of PCLMULQDQ instruction set with <wmmintrin.h> and here we go, it quickly starts to become dirty OR we can wait for the decision to start requiring x86-64-v2 or v3 which has SSE4.2 and AVX2.

I can not quite picture this, would you mind sharing a few examples or patches?

--
Regards,
Nazir Bilal Yavuz
Microsoft

#18Andrew Dunstan
andrew@dunslane.net
In reply to: Nazir Bilal Yavuz (#14)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On 2025-10-16 Th 10:29 AM, Nazir Bilal Yavuz wrote:

Hi,

On Thu, 21 Aug 2025 at 18:47, Andrew Dunstan<andrew@dunslane.net> wrote:

On 2025-08-19 Tu 10:14 AM, Nazir Bilal Yavuz wrote:

Hi,

On Tue, 19 Aug 2025 at 15:33, Nazir Bilal Yavuz<byavuz81@gmail.com> wrote:

I am able to reproduce the regression you mentioned but both
regressions are %20 on my end. I found that (by experimenting) SIMD
causes a regression if it advances less than 5 characters.

So, I implemented a small heuristic. It works like that:

- If advance < 5 -> insert a sleep penalty (n cycles).

'sleep' might be a poor word choice here. I meant skipping SIMD for n
number of times.

I was thinking a bit about that this morning. I wonder if it might be
better instead of having a constantly applied heuristic like this, it
might be better to do a little extra accounting in the first, say, 1000
lines of an input file, and if less than some portion of the input is
found to be special characters then switch to the SIMD code. What that
portion should be would need to be determined by some experimentation
with a variety of typical workloads, but given your findings 20% seems
like a good starting point.

I implemented a heuristic something similar to this. It is a mix of
previous heuristic and your idea, it works like that:

Overall logic is that we will not run SIMD for the entire line and we
decide if it is worth it to run SIMD for the next lines.

1 - We will try SIMD and decide if it is worth it to run SIMD.
1.1 - If it is worth it, we will continue to run SIMD and we will
halve the simd_last_sleep_cycle variable.
1.2 - If it is not worth it, we will double the simd_last_sleep_cycle
and we will not run SIMD for these many lines.
1.3 - After skipping simd_last_sleep_cycle lines, we will go back to the #1.
Note: simd_last_sleep_cycle can not pass 1024, so we will run SIMD for
each 1024 lines at max.

With this heuristic the regression is limited by %2 in the worst case.

My worry is that the worst case is actually quite common. Sparse data
sets dominated by a lot of null values (and hence lots of special
characters) are very common. Are people prepared to accept a 2%
regression on load times for such data sets?

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

#19Nathan Bossart
nathandbossart@gmail.com
In reply to: Andrew Dunstan (#18)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Mon, Oct 20, 2025 at 10:02:23AM -0400, Andrew Dunstan wrote:

On 2025-10-16 Th 10:29 AM, Nazir Bilal Yavuz wrote:

With this heuristic the regression is limited by %2 in the worst case.

My worry is that the worst case is actually quite common. Sparse data sets
dominated by a lot of null values (and hence lots of special characters) are
very common. Are people prepared to accept a 2% regression on load times for
such data sets?

Without knowing how common it is, I think it's difficult to judge whether
2% is a reasonable trade-off. If <5% of workloads might see a small
regression while the other >95% see double-digit percentage improvements,
then I might argue that it's fine. But I'm not sure we have any way to
know those sorts of details at the moment.

I'm also at least a little skeptical about the 2% number. IME that's
generally within the noise range and can vary greatly between machines and
test runs.

--
nathan

#20Andrew Dunstan
andrew@dunslane.net
In reply to: Nathan Bossart (#19)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On 2025-10-20 Mo 1:04 PM, Nathan Bossart wrote:

On Mon, Oct 20, 2025 at 10:02:23AM -0400, Andrew Dunstan wrote:

On 2025-10-16 Th 10:29 AM, Nazir Bilal Yavuz wrote:

With this heuristic the regression is limited by %2 in the worst case.

My worry is that the worst case is actually quite common. Sparse data sets
dominated by a lot of null values (and hence lots of special characters) are
very common. Are people prepared to accept a 2% regression on load times for
such data sets?

Without knowing how common it is, I think it's difficult to judge whether
2% is a reasonable trade-off. If <5% of workloads might see a small
regression while the other >95% see double-digit percentage improvements,
then I might argue that it's fine. But I'm not sure we have any way to
know those sorts of details at the moment.

I guess what I don't understand is why we actually need to do the test
continuously, even using an adaptive algorithm. Data files in my
experience usually have lines with fairly similar shapes. It's highly
unlikely that you will get the the first 1000 (say) lines of a file that
are rich in special characters and then some later significant section
that isn't, or vice versa. Therefore, doing the test once should yield
the correct answer that can be applied to the rest of the file. That
should reduce the worst case regression to ~0% without sacrificing any
of the performance gains. I appreciate the elegance of what Bilal has
done here, but it does seem like overkill.

I'm also at least a little skeptical about the 2% number. IME that's
generally within the noise range and can vary greatly between machines and
test runs.

Fair point.

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

#21Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Andrew Dunstan (#20)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Mon, 20 Oct 2025 at 23:32, Andrew Dunstan <andrew@dunslane.net> wrote:

On 2025-10-20 Mo 1:04 PM, Nathan Bossart wrote:

On Mon, Oct 20, 2025 at 10:02:23AM -0400, Andrew Dunstan wrote:

On 2025-10-16 Th 10:29 AM, Nazir Bilal Yavuz wrote:

With this heuristic the regression is limited by %2 in the worst case.

My worry is that the worst case is actually quite common. Sparse data sets
dominated by a lot of null values (and hence lots of special characters) are
very common. Are people prepared to accept a 2% regression on load times for
such data sets?

Without knowing how common it is, I think it's difficult to judge whether
2% is a reasonable trade-off. If <5% of workloads might see a small
regression while the other >95% see double-digit percentage improvements,
then I might argue that it's fine. But I'm not sure we have any way to
know those sorts of details at the moment.

I guess what I don't understand is why we actually need to do the test continuously, even using an adaptive algorithm. Data files in my experience usually have lines with fairly similar shapes. It's highly unlikely that you will get the the first 1000 (say) lines of a file that are rich in special characters and then some later significant section that isn't, or vice versa. Therefore, doing the test once should yield the correct answer that can be applied to the rest of the file. That should reduce the worst case regression to ~0% without sacrificing any of the performance gains. I appreciate the elegance of what Bilal has done here, but it does seem like overkill.

I think the problem is deciding how many lines to process before
deciding for the rest. 1000 lines could work for the small sized data
but it might not work for the big sized data. Also, it might cause a
worse regressions for the small sized data. Because of this reason, I
tried to implement a heuristic that will work regardless of the size
of the data. The last heuristic I suggested will run SIMD for
approximately (#number_of_lines / 1024 [1024 is the max number of
lines to sleep before running SIMD again]) lines if all characters in
the data are special characters.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#22KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nazir Bilal Yavuz (#17)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Sat, Oct 18, 2025 at 10:01 PM Nazir Bilal Yavuz <byavuz81@gmail.com>
wrote:

Thank you so much for doing this! The results look nice, do you think
there are any other benchmarks that might be interesting to try?

I'm also trying the idea of doing SIMD inside quotes with prefix XOR

using carry less multiplication avoiding the slow path in all cases even
with weird looking input, but it needs to take into consideration the
availability of PCLMULQDQ instruction set with <wmmintrin.h> and here we
go, it quickly starts to become dirty OR we can wait for the decision to
start requiring x86-64-v2 or v3 which has SSE4.2 and AVX2.

I can not quite picture this, would you mind sharing a few examples or
patches?

The idea aims to avoid stopping at characters that are not actually special
in their position (inside quote, escaped ..etc)
This is done by creating a lot of masks from the original chunk, masks
like: quote_mask, escape_mask, odd escape sequences mask ; from these we
can deduce which quotes are not special to stop at
Then for inside quotes, we aim to know which characters in our chunk are
inside quotes (also keeping in track the previous chunk's quote state) and
there's a clever/fast way to do it [1]https://branchfree.org/2019/03/06/code-fragment-finding-quote-pairs-with-carry-less-multiply-pclmulqdq/.
After this you start to match with LF and CR ..etc, all this while
maintaining the state of what you've seen (the annoying part).
At the end you only reach the scalar path advancing by the position of
first real special character that requires special treatment.

However, after trying to implement this on the existing pipeline way of
COPY command [2]https://github.com/AyoubKaz07/postgres/commit/73c6ecfedae4cce5c3f375fd6074b1ca9dfe1daf (broken hopeless try, but has the idea), It becomes very
unreasonable for a lot of reasons:
- It is very challenging to correctly handle commas inside quoted fields,
and tracking quoted vs. unquoted state (especially across chunk boundaries,
or with escaped quotes) ....
- Using carry less multiplication (CLMUL) for prefix xor on a 16 bytes
chunk is overkill for some architectures where PCLMULQDQ latency is high
[3]: https://agner.org/optimize/instruction_tables.pdf
cycles).
- It starts to feel that handling these cases is inherently scalar, doing
all that work for a 16 bytes chunk would be unreasonable since it's not
free, compared to a simple help using SIMD and heuristic of Nazir which is
way nicer in general.

Currently we are at 200-400Mbps which isn't that terrible compared to
production and non production grade parsers (of course we don't only parse
in our case), also we are using SSE2 only so theoretically if we add
support for avx later on we'll have even better numbers.
Maybe more micro optimizations to the current heuristic can squeeze it more.

[1]: https://branchfree.org/2019/03/06/code-fragment-finding-quote-pairs-with-carry-less-multiply-pclmulqdq/
https://branchfree.org/2019/03/06/code-fragment-finding-quote-pairs-with-carry-less-multiply-pclmulqdq/
[2]: https://github.com/AyoubKaz07/postgres/commit/73c6ecfedae4cce5c3f375fd6074b1ca9dfe1daf
https://github.com/AyoubKaz07/postgres/commit/73c6ecfedae4cce5c3f375fd6074b1ca9dfe1daf
[3]: https://agner.org/optimize/instruction_tables.pdf
[4]: https://www.uops.info/table.html

Regards,
Ayoub Kazar.

#23KAZAR Ayoub
ma_kazar@esi.dz
In reply to: KAZAR Ayoub (#22)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Oct 21, 2025, 8:17 AM KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Currently we are at 200-400Mbps which isn't that terrible compared to
production and non production grade parsers (of course we don't only parse
in our case), also we are using SSE2 only so theoretically if we add
support for avx later on we'll have even better numbers.
Maybe more micro optimizations to the current heuristic can squeeze it
more.

[1]
https://branchfree.org/2019/03/06/code-fragment-finding-quote-pairs-with-carry-less-multiply-pclmulqdq/
[2]
https://github.com/AyoubKaz07/postgres/commit/73c6ecfedae4cce5c3f375fd6074b1ca9dfe1daf
[3] https://agner.org/optimize/instruction_tables.pdf
[4] https://www.uops.info/table.html

Regards,
Ayoub Kazar.

Sorry, I meant 200-400MB/s.

Regards.
Ayoub Kazar.

Show quoted text
#24Nathan Bossart
nathandbossart@gmail.com
In reply to: Nazir Bilal Yavuz (#21)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Oct 21, 2025 at 12:09:27AM +0300, Nazir Bilal Yavuz wrote:

I think the problem is deciding how many lines to process before
deciding for the rest. 1000 lines could work for the small sized data
but it might not work for the big sized data. Also, it might cause a
worse regressions for the small sized data.

IMHO we have some leeway with smaller amounts of data. If COPY FROM for
1000 rows takes 19 milliseconds as opposed to 11 milliseconds, it seems
unlikely users would be inconvenienced all that much. (Those numbers are
completely made up in order to illustrate my point.)

Because of this reason, I
tried to implement a heuristic that will work regardless of the size
of the data. The last heuristic I suggested will run SIMD for
approximately (#number_of_lines / 1024 [1024 is the max number of
lines to sleep before running SIMD again]) lines if all characters in
the data are special characters.

I wonder if we could mitigate the regression further by spacing out the
checks a bit more. It could be worth comparing a variety of values to
identify what works best with the test data.

--
nathan

#25Nathan Bossart
nathandbossart@gmail.com
In reply to: KAZAR Ayoub (#22)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Oct 21, 2025 at 08:17:01AM +0200, KAZAR Ayoub wrote:

I'm also trying the idea of doing SIMD inside quotes with prefix XOR
using carry less multiplication avoiding the slow path in all cases even
with weird looking input, but it needs to take into consideration the
availability of PCLMULQDQ instruction set with <wmmintrin.h> and here we
go, it quickly starts to become dirty OR we can wait for the decision to
start requiring x86-64-v2 or v3 which has SSE4.2 and AVX2.

[...]

Currently we are at 200-400Mbps which isn't that terrible compared to
production and non production grade parsers (of course we don't only parse
in our case), also we are using SSE2 only so theoretically if we add
support for avx later on we'll have even better numbers.
Maybe more micro optimizations to the current heuristic can squeeze it more.

I'd greatly prefer that we stick with SSE2/Neon (i.e., simd.h) unless the
gains are extraordinary. Beyond the inherent complexity of using
architecture-specific intrinsics, you also have to deal with configure-time
checks, runtime checks, and function pointer overhead juggling. That tends
to be a lot of work for the amount of gain.

--
nathan

#26Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Nathan Bossart (#24)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Tue, 21 Oct 2025 at 21:40, Nathan Bossart <nathandbossart@gmail.com> wrote:

On Tue, Oct 21, 2025 at 12:09:27AM +0300, Nazir Bilal Yavuz wrote:

I think the problem is deciding how many lines to process before
deciding for the rest. 1000 lines could work for the small sized data
but it might not work for the big sized data. Also, it might cause a
worse regressions for the small sized data.

IMHO we have some leeway with smaller amounts of data. If COPY FROM for
1000 rows takes 19 milliseconds as opposed to 11 milliseconds, it seems
unlikely users would be inconvenienced all that much. (Those numbers are
completely made up in order to illustrate my point.)

Because of this reason, I
tried to implement a heuristic that will work regardless of the size
of the data. The last heuristic I suggested will run SIMD for
approximately (#number_of_lines / 1024 [1024 is the max number of
lines to sleep before running SIMD again]) lines if all characters in
the data are special characters.

I wonder if we could mitigate the regression further by spacing out the
checks a bit more. It could be worth comparing a variety of values to
identify what works best with the test data.

Do you mean that instead of doubling the SIMD sleep, we should
multiply it by 3 (or another factor)? Or are you referring to
increasing the maximum sleep from 1024? Or possibly both?

--
Regards,
Nazir Bilal Yavuz
Microsoft

#27Nathan Bossart
nathandbossart@gmail.com
In reply to: Nazir Bilal Yavuz (#26)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Oct 22, 2025 at 03:33:37PM +0300, Nazir Bilal Yavuz wrote:

On Tue, 21 Oct 2025 at 21:40, Nathan Bossart <nathandbossart@gmail.com> wrote:

I wonder if we could mitigate the regression further by spacing out the
checks a bit more. It could be worth comparing a variety of values to
identify what works best with the test data.

Do you mean that instead of doubling the SIMD sleep, we should
multiply it by 3 (or another factor)? Or are you referring to
increasing the maximum sleep from 1024? Or possibly both?

I'm not sure of the precise details, but the main thrust of my suggestion
is to assume that whatever sampling you do to determine whether to use SIMD
is good for a larger chunk of data. That is, if you are sampling 1K lines
and then using the result to choose whether to use SIMD for the next 100K
lines, we could instead bump the latter number to 1M lines (or something).
That way we minimize the regression for relatively uniform data sets while
retaining some ability to adapt in case things change halfway through a
large table.

--
nathan

#28Andrew Dunstan
andrew@dunslane.net
In reply to: Nathan Bossart (#27)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On 2025-10-22 We 3:24 PM, Nathan Bossart wrote:

On Wed, Oct 22, 2025 at 03:33:37PM +0300, Nazir Bilal Yavuz wrote:

On Tue, 21 Oct 2025 at 21:40, Nathan Bossart <nathandbossart@gmail.com> wrote:

I wonder if we could mitigate the regression further by spacing out the
checks a bit more. It could be worth comparing a variety of values to
identify what works best with the test data.

Do you mean that instead of doubling the SIMD sleep, we should
multiply it by 3 (or another factor)? Or are you referring to
increasing the maximum sleep from 1024? Or possibly both?

I'm not sure of the precise details, but the main thrust of my suggestion
is to assume that whatever sampling you do to determine whether to use SIMD
is good for a larger chunk of data. That is, if you are sampling 1K lines
and then using the result to choose whether to use SIMD for the next 100K
lines, we could instead bump the latter number to 1M lines (or something).
That way we minimize the regression for relatively uniform data sets while
retaining some ability to adapt in case things change halfway through a
large table.

I'd be ok with numbers like this, although I suspect the numbers of
cases where we see shape shifts like this in the middle of a data set
would be vanishingly small.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#29Manni Wood
manni.wood@enterprisedb.com
In reply to: Andrew Dunstan (#28)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Oct 29, 2025 at 5:23 PM Andrew Dunstan <andrew@dunslane.net> wrote:

On 2025-10-22 We 3:24 PM, Nathan Bossart wrote:

On Wed, Oct 22, 2025 at 03:33:37PM +0300, Nazir Bilal Yavuz wrote:

On Tue, 21 Oct 2025 at 21:40, Nathan Bossart <nathandbossart@gmail.com>

wrote:

I wonder if we could mitigate the regression further by spacing out the
checks a bit more. It could be worth comparing a variety of values to
identify what works best with the test data.

Do you mean that instead of doubling the SIMD sleep, we should
multiply it by 3 (or another factor)? Or are you referring to
increasing the maximum sleep from 1024? Or possibly both?

I'm not sure of the precise details, but the main thrust of my suggestion
is to assume that whatever sampling you do to determine whether to use

SIMD

is good for a larger chunk of data. That is, if you are sampling 1K

lines

and then using the result to choose whether to use SIMD for the next 100K
lines, we could instead bump the latter number to 1M lines (or

something).

That way we minimize the regression for relatively uniform data sets

while

retaining some ability to adapt in case things change halfway through a
large table.

I'd be ok with numbers like this, although I suspect the numbers of
cases where we see shape shifts like this in the middle of a data set
would be vanishingly small.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

Hello!

I wanted reproduce the results using files attached by Shinya Kato and
Ayoub Kazar. I installed a postgres compiled from master, and then I
installed a postgres built from master plus Nazir Bilal Yavuz's v3 patches
applied.

The master+v3patches postgres naturally performed better on copying into
the database: anywhere from 11% better for the t.csv file produced by
Shinyo's test.sql, to 35% better copying in the t_4096_none.csv file
created by Ayoub Kazar's simd-copy-from-bench.sql.

But here's where it gets weird. The two files created by Ayoub Kazar's
simd-copy-from-bench.sql that are supposed to be slower, t_4096_escape.txt,
and t_4096_quote.csv, actually ran faster on my machine, by 11% and 5%
respectively.

This seems impossible.

A few things I should note:

I timed the commands using the Unix time command, like so:

time psql -X -U mwood -h localhost -d postgres -c '\copy t from
/tmp/t_4096_escape.txt'

For each file, I timed the copy 6 times and took the average.

This was done on my work Linux machine while also running Chrome and an
Open Office spreadsheet; not a dedicated machine only running postgres.

All of the copy results took between 4.5 seconds (Shinyo's t.csv copied
into postgres compiled from master) to 2 seconds (Ayoub
Kazar's t_4096_none.csv copied into postgres compiled from master plus
Nazir's v3 patches).

Perhaps I need to fiddle with the provided SQL to produce larger files to
get longer run times? Maybe sub-second differences won't tell as
interesting a story as minutes-long copy commands?

Thanks for reading this.
--
-- Manni Wood EDB: https://www.enterprisedb.com

#30KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Manni Wood (#29)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Nov 11, 2025 at 11:23 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

Hello!

I wanted reproduce the results using files attached by Shinya Kato and
Ayoub Kazar. I installed a postgres compiled from master, and then I
installed a postgres built from master plus Nazir Bilal Yavuz's v3 patches
applied.

The master+v3patches postgres naturally performed better on copying into
the database: anywhere from 11% better for the t.csv file produced by
Shinyo's test.sql, to 35% better copying in the t_4096_none.csv file
created by Ayoub Kazar's simd-copy-from-bench.sql.

But here's where it gets weird. The two files created by Ayoub Kazar's
simd-copy-from-bench.sql that are supposed to be slower, t_4096_escape.txt,
and t_4096_quote.csv, actually ran faster on my machine, by 11% and 5%
respectively.

This seems impossible.

A few things I should note:

I timed the commands using the Unix time command, like so:

time psql -X -U mwood -h localhost -d postgres -c '\copy t from
/tmp/t_4096_escape.txt'

For each file, I timed the copy 6 times and took the average.

This was done on my work Linux machine while also running Chrome and an
Open Office spreadsheet; not a dedicated machine only running postgres.

Hello,
I think if you do a perf benchmark (if it still reproduces) it would
probably be possible to explain why it's performing like that looking at
the CPI and other metrics and compare it to my findings.
What i also suggest is to make the data close even closer to the worst case
i.e: more special characters where it hurts the switching between SIMD and
scalar processing (in simd-copy-from-bench.sql file), if still does a good
job then there's something to look at.

All of the copy results took between 4.5 seconds (Shinyo's t.csv copied
into postgres compiled from master) to 2 seconds (Ayoub
Kazar's t_4096_none.csv copied into postgres compiled from master plus
Nazir's v3 patches).

Perhaps I need to fiddle with the provided SQL to produce larger files to
get longer run times? Maybe sub-second differences won't tell as
interesting a story as minutes-long copy commands?

I did try it on some GBs (around 2-5GB only), the differences were not that
much, but if you can run this on more GBs (at least 10GB) it would be good
to look at, although i don't suspect anything interesting since the shape
of data is the same for the totality of the COPY.

Thanks for reading this.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Thanks for the info.

Regards,
Ayoub Kazar.

#31Manni Wood
manni.wood@enterprisedb.com
In reply to: KAZAR Ayoub (#30)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Nov 12, 2025 at 8:44 AM KAZAR Ayoub <ma_kazar@esi.dz> wrote:

On Tue, Nov 11, 2025 at 11:23 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

Hello!

I wanted reproduce the results using files attached by Shinya Kato and
Ayoub Kazar. I installed a postgres compiled from master, and then I
installed a postgres built from master plus Nazir Bilal Yavuz's v3 patches
applied.

The master+v3patches postgres naturally performed better on copying into
the database: anywhere from 11% better for the t.csv file produced by
Shinyo's test.sql, to 35% better copying in the t_4096_none.csv file
created by Ayoub Kazar's simd-copy-from-bench.sql.

But here's where it gets weird. The two files created by Ayoub Kazar's
simd-copy-from-bench.sql that are supposed to be slower, t_4096_escape.txt,
and t_4096_quote.csv, actually ran faster on my machine, by 11% and 5%
respectively.

This seems impossible.

A few things I should note:

I timed the commands using the Unix time command, like so:

time psql -X -U mwood -h localhost -d postgres -c '\copy t from
/tmp/t_4096_escape.txt'

For each file, I timed the copy 6 times and took the average.

This was done on my work Linux machine while also running Chrome and an
Open Office spreadsheet; not a dedicated machine only running postgres.

Hello,
I think if you do a perf benchmark (if it still reproduces) it would
probably be possible to explain why it's performing like that looking at
the CPI and other metrics and compare it to my findings.
What i also suggest is to make the data close even closer to the worst
case i.e: more special characters where it hurts the switching between SIMD
and scalar processing (in simd-copy-from-bench.sql file), if still does a
good job then there's something to look at.

All of the copy results took between 4.5 seconds (Shinyo's t.csv copied
into postgres compiled from master) to 2 seconds (Ayoub
Kazar's t_4096_none.csv copied into postgres compiled from master plus
Nazir's v3 patches).

Perhaps I need to fiddle with the provided SQL to produce larger files to
get longer run times? Maybe sub-second differences won't tell as
interesting a story as minutes-long copy commands?

I did try it on some GBs (around 2-5GB only), the differences were not
that much, but if you can run this on more GBs (at least 10GB) it would be
good to look at, although i don't suspect anything interesting since the
shape of data is the same for the totality of the COPY.

Thanks for reading this.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Thanks for the info.

Regards,
Ayoub Kazar.

Hello again!

It looks like using 10 times the data removed the apparent speedup in the
simd code when the simd code has to deal with t_4096_escape.txt
and t_4096_quote.csv. When both files contain 1,000,000 lines each,
postgres master+v3patch imports 0.63% slower and 0.54% slower respectively.
For 1,000,000 lines of t_4096_none.txt, the v3 patch yields a 30% speedup.
For 1,000,000 lines of t_4096_none.csv, the v3 patch yields a 33% speedup.

I got these numbers just via simple timing, though this time I used psql's
\timing feature. I left psql running rather than launching it each time as
I did when I used the unix "time" command. I ran the copy command 5 times
for each file and averaged the results. Again, this happened on a Linux
machine that also happened to be running Chrome and Open Office's
spreadsheet.

I should probably try to construct some .txt or .csv files that would trip
up the simd on/off heuristic in the v3 patch.

If data "in the wild" tend to be roughly the same "shape" from row to row,
as Andrew's experience has shown, I imagine these million row results bode
well for the v3 patch...
--
-- Manni Wood EDB: https://www.enterprisedb.com

#32Nathan Bossart
nathandbossart@gmail.com
In reply to: Manni Wood (#31)
Re: Speed up COPY FROM text/CSV parsing using SIMD

I'd like to mark myself as the committer this one, but I noticed that the
commitfest entry [0]https://commitfest.postgresql.org/patch/5952/ has been marked as Withdrawn. Could someone either
reopen it or create a new one as appropriate (assuming there is a desire to
continue with it)? I'm hoping to start spending more time on it soon.

[0]: https://commitfest.postgresql.org/patch/5952/

--
nathan

#33Shinya Kato
shinya11.kato@gmail.com
In reply to: Nathan Bossart (#32)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Nov 18, 2025, 07:16 Nathan Bossart <nathandbossart@gmail.com> wrote:

I'd like to mark myself as the committer this one, but I noticed that the
commitfest entry [0] has been marked as Withdrawn. Could someone either
reopen it or create a new one as appropriate (assuming there is a desire to
continue with it)? I'm hoping to start spending more time on it soon.

[0] https://commitfest.postgresql.org/patch/5952/

I closed this entry because I currently don't have enough time to continue
developing this patch. It is fine if someone else reopens it; I will do my
best to see the patch whenever I can.

Shinya

#34Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Shinya Kato (#33)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Tue, 18 Nov 2025 at 01:53, Shinya Kato <shinya11.kato@gmail.com> wrote:

On Tue, Nov 18, 2025, 07:16 Nathan Bossart <nathandbossart@gmail.com> wrote:

I'd like to mark myself as the committer this one, but I noticed that the
commitfest entry [0] has been marked as Withdrawn. Could someone either
reopen it or create a new one as appropriate (assuming there is a desire to
continue with it)? I'm hoping to start spending more time on it soon.

[0] https://commitfest.postgresql.org/patch/5952/

I closed this entry because I currently don't have enough time to continue developing this patch. It is fine if someone else reopens it; I will do my best to see the patch whenever I can.

Thank you for all your work on this patch.

I would like to continue working on this but I am not sure what are
the correct steps to reopen this commitfest entry. Do I just need to
change commitfest entry's status to 'Needs review'?

--
Regards,
Nazir Bilal Yavuz
Microsoft

#35Andrew Dunstan
andrew@dunslane.net
In reply to: Nazir Bilal Yavuz (#34)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On 2025-11-18 Tu 3:04 AM, Nazir Bilal Yavuz wrote:

Hi,

On Tue, 18 Nov 2025 at 01:53, Shinya Kato <shinya11.kato@gmail.com> wrote:

On Tue, Nov 18, 2025, 07:16 Nathan Bossart <nathandbossart@gmail.com> wrote:

I'd like to mark myself as the committer this one, but I noticed that the
commitfest entry [0] has been marked as Withdrawn. Could someone either
reopen it or create a new one as appropriate (assuming there is a desire to
continue with it)? I'm hoping to start spending more time on it soon.

[0] https://commitfest.postgresql.org/patch/5952/

I closed this entry because I currently don't have enough time to continue developing this patch. It is fine if someone else reopens it; I will do my best to see the patch whenever I can.

Thank you for all your work on this patch.

I would like to continue working on this but I am not sure what are
the correct steps to reopen this commitfest entry. Do I just need to
change commitfest entry's status to 'Needs review'?

That should do it, I believe.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#36Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Andrew Dunstan (#35)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Tue, 18 Nov 2025 at 17:01, Andrew Dunstan <andrew@dunslane.net> wrote:

On 2025-11-18 Tu 3:04 AM, Nazir Bilal Yavuz wrote:

Hi,

On Tue, 18 Nov 2025 at 01:53, Shinya Kato <shinya11.kato@gmail.com> wrote:

On Tue, Nov 18, 2025, 07:16 Nathan Bossart <nathandbossart@gmail.com> wrote:

I'd like to mark myself as the committer this one, but I noticed that the
commitfest entry [0] has been marked as Withdrawn. Could someone either
reopen it or create a new one as appropriate (assuming there is a desire to
continue with it)? I'm hoping to start spending more time on it soon.

[0] https://commitfest.postgresql.org/patch/5952/

I closed this entry because I currently don't have enough time to continue developing this patch. It is fine if someone else reopens it; I will do my best to see the patch whenever I can.

Thank you for all your work on this patch.

I would like to continue working on this but I am not sure what are
the correct steps to reopen this commitfest entry. Do I just need to
change commitfest entry's status to 'Needs review'?

That should do it, I believe.

Thanks, done.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#37KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nathan Bossart (#32)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Mon, Nov 17, 2025, 11:16 PM Nathan Bossart <nathandbossart@gmail.com>
wrote:

(assuming there is a desire to
continue with it)?

I'm hoping to start spending more time on it soon.

Somethings worth noting for future reference (so someone else wouldn't
waste time thinking about it), previously I tried extra several micro
optimizations inside and around CopyReadLineText:

SIMD alignment*:* Forcing 16-byte aligned buffers so we could use aligned
memory instructions (_mm_load_si128 vs _mm_loadu_si128) provided no
measurable benefit on modern CPUs (there's definitely a thread somewhere
talking about it that i didn't encounter yet). This likely explains why
simd.h exclusively uses unaligned load intrinsics the performance
difference has become negligible since Nehalem processors.

Memory prefetching: Explicit prefetch instructions for the COPY buffer
pipeline (copy_raw_buf, input buffers, etc.) either showed no improvement
or slight regression. Multiple chunks are already within a cache line,
other buffers are too far to prefetch and the next part of the buffer is
easily prefetched, nothing special, so it turns out to be not worth having
more uops.

Instruction-level parallelism: Spreading too many independent vector
operations to increase ILP eventually degrades performance, likely due to
backend saturation observed through perf (execution port and execution
units contention most likely ?)
.....

This simply suggests that further optimization work should focus on the
pipeline as a whole for large benefits (parallel copy[0]/messages/by-id/CAA4eK1+kpddvvLxWm4BuG_AhVvYz8mKAEa7osxp_X0d4ZEiV=g@mail.gmail.com, maybe ?).

[0]: /messages/by-id/CAA4eK1+kpddvvLxWm4BuG_AhVvYz8mKAEa7osxp_X0d4ZEiV=g@mail.gmail.com
/messages/by-id/CAA4eK1+kpddvvLxWm4BuG_AhVvYz8mKAEa7osxp_X0d4ZEiV=g@mail.gmail.com

--
Regards,
Ayoub Kazar

#38Nathan Bossart
nathandbossart@gmail.com
In reply to: Nazir Bilal Yavuz (#36)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Nov 18, 2025 at 05:20:05PM +0300, Nazir Bilal Yavuz wrote:

Thanks, done.

I took a look at the v3 patches. Here are my high-level thoughts:

+    /*
+     * Parse data and transfer into line_buf. To get benefit from inlining,
+     * call CopyReadLineText() with the constant boolean variables.
+     */
+    if (cstate->simd_continue)
+        result = CopyReadLineText(cstate, is_csv, true);
+    else
+        result = CopyReadLineText(cstate, is_csv, false);

I'm curious whether this actually generates different code, and if it does,
if it's actually faster. We're already branching on cstate->simd_continue
here.

+            /* Load a chunk of data into a vector register */
+            vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);

In other places, processing 2 or 4 vectors of data at a time has proven
faster. Have you tried that here?

+            /* \n and \r are not special inside quotes */
+            if (!in_quote)
+                match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+            if (is_csv)
+            {
+                match = vector8_or(match, vector8_eq(chunk, quote));
+                if (escapec != '\0')
+                    match = vector8_or(match, vector8_eq(chunk, escape));
+            }
+            else
+                match = vector8_or(match, vector8_eq(chunk, bs));

The amount of branching here catches my eye. Some branching might be
unavoidable, but in general we want to keep these SIMD paths as branch-free
as possible.

+                /*
+                 * Found a special character. Advance up to that point and let
+                 * the scalar code handle it.
+                 */
+                int         advance = pg_rightmost_one_pos32(mask);
+
+                input_buf_ptr += advance;
+                simd_total_advance += advance;

Do we actually need to advance here? Or could we just fall through to the
scalar path? My suspicion is that this extra code doesn't gain us much.

+            if (simd_last_sleep_cycle == 0)
+                simd_last_sleep_cycle = 1;
+            else if (simd_last_sleep_cycle >= SIMD_SLEEP_MAX / 2)
+                simd_last_sleep_cycle = SIMD_SLEEP_MAX;
+            else
+                simd_last_sleep_cycle <<= 1;
+            cstate->simd_current_sleep_cycle = simd_last_sleep_cycle;
+            cstate->simd_last_sleep_cycle = simd_last_sleep_cycle;

IMHO we should be looking for ways to simplify this should-we-use-SIMD
code. For example, perhaps we could just disable the SIMD path for 10K or
100K lines any time a special character is found. I'm dubious that a lot
of complexity is warranted.

--
nathan

#39Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Nathan Bossart (#38)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

Thank you for looking into this!

On Thu, 20 Nov 2025 at 00:01, Nathan Bossart <nathandbossart@gmail.com> wrote:

On Tue, Nov 18, 2025 at 05:20:05PM +0300, Nazir Bilal Yavuz wrote:

Thanks, done.

I took a look at the v3 patches. Here are my high-level thoughts:

+    /*
+     * Parse data and transfer into line_buf. To get benefit from inlining,
+     * call CopyReadLineText() with the constant boolean variables.
+     */
+    if (cstate->simd_continue)
+        result = CopyReadLineText(cstate, is_csv, true);
+    else
+        result = CopyReadLineText(cstate, is_csv, false);

I'm curious whether this actually generates different code, and if it does,
if it's actually faster. We're already branching on cstate->simd_continue
here.

I had the same doubts before but my benchmark shows nice speedup. I
used a test which is full of delimiters. The current code gives 2700
ms but when I changed these lines with the 'result =
CopyReadLineText(cstate, is_csv, cstate->simd_continue);', the result
was 2920 ms. I compiled code with both -O3 and -O2 and the results
were similar.

+            /* Load a chunk of data into a vector register */
+            vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);

In other places, processing 2 or 4 vectors of data at a time has proven
faster. Have you tried that here?

Sorry, I could not find the related code piece. I only saw the
vector8_load() inside of hex_decode_safe() function and its comment
says:

/*
* We must process 2 vectors at a time since the output will be half the
* length of the input.
*/

But this does not mention any speedup from using 2 vectors at a time.
Could you please show the related code?

+            /* \n and \r are not special inside quotes */
+            if (!in_quote)
+                match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+            if (is_csv)
+            {
+                match = vector8_or(match, vector8_eq(chunk, quote));
+                if (escapec != '\0')
+                    match = vector8_or(match, vector8_eq(chunk, escape));
+            }
+            else
+                match = vector8_or(match, vector8_eq(chunk, bs));

The amount of branching here catches my eye. Some branching might be
unavoidable, but in general we want to keep these SIMD paths as branch-free
as possible.

You are right, I will check these branches and will try to remove as
many branches as possible.

+                /*
+                 * Found a special character. Advance up to that point and let
+                 * the scalar code handle it.
+                 */
+                int         advance = pg_rightmost_one_pos32(mask);
+
+                input_buf_ptr += advance;
+                simd_total_advance += advance;

Do we actually need to advance here? Or could we just fall through to the
scalar path? My suspicion is that this extra code doesn't gain us much.

My testing shows that if we advance more than ~5 characters then SIMD
is worth it, but if we advance less than ~5; then code causes a
regression. I used this information while writing a heuristic.

+            if (simd_last_sleep_cycle == 0)
+                simd_last_sleep_cycle = 1;
+            else if (simd_last_sleep_cycle >= SIMD_SLEEP_MAX / 2)
+                simd_last_sleep_cycle = SIMD_SLEEP_MAX;
+            else
+                simd_last_sleep_cycle <<= 1;
+            cstate->simd_current_sleep_cycle = simd_last_sleep_cycle;
+            cstate->simd_last_sleep_cycle = simd_last_sleep_cycle;

IMHO we should be looking for ways to simplify this should-we-use-SIMD
code. For example, perhaps we could just disable the SIMD path for 10K or
100K lines any time a special character is found. I'm dubious that a lot
of complexity is warranted.

I think this is a bit too harsh since SIMD is still worth it if SIMD
can advance more than ~5 character average. I am trying to use SIMD as
much as possible when it is worth it but what you said can remove the
regression completely, perhaps that is the correct way.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#40Andrew Dunstan
andrew@dunslane.net
In reply to: Nazir Bilal Yavuz (#39)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On 2025-11-20 Th 7:55 AM, Nazir Bilal Yavuz wrote:

Hi,

Thank you for looking into this!

On Thu, 20 Nov 2025 at 00:01, Nathan Bossart <nathandbossart@gmail.com> wrote:

IMHO we should be looking for ways to simplify this should-we-use-SIMD
code. For example, perhaps we could just disable the SIMD path for 10K or
100K lines any time a special character is found. I'm dubious that a lot
of complexity is warranted.

I think this is a bit too harsh since SIMD is still worth it if SIMD
can advance more than ~5 character average. I am trying to use SIMD as
much as possible when it is worth it but what you said can remove the
regression completely, perhaps that is the correct way.

Perhaps a very small regression (say under 1%) in the worst case would
be OK. But the closer you can get that to zero the more acceptable this
will be. Very large loads of sparse data, which will often have lots of
special characters AIUI, are very common, so we should not dismiss the
worst case as an outlier. I still like the idea of testing, say, a
thousand lines every million, or something like that.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#41Nathan Bossart
nathandbossart@gmail.com
In reply to: Nazir Bilal Yavuz (#39)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Thu, Nov 20, 2025 at 03:55:43PM +0300, Nazir Bilal Yavuz wrote:

On Thu, 20 Nov 2025 at 00:01, Nathan Bossart <nathandbossart@gmail.com> wrote:

+            /* Load a chunk of data into a vector register */
+            vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);

In other places, processing 2 or 4 vectors of data at a time has proven
faster. Have you tried that here?

Sorry, I could not find the related code piece. I only saw the
vector8_load() inside of hex_decode_safe() function and its comment
says:

/*
* We must process 2 vectors at a time since the output will be half the
* length of the input.
*/

But this does not mention any speedup from using 2 vectors at a time.
Could you please show the related code?

See pg_lfind32().

--
nathan

#42Manni Wood
manni.wood@enterprisedb.com
In reply to: Nathan Bossart (#41)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hello.

I tried Ayoub Kazar's test files again, using Nazir Bilal Yavuz's v3
patches, but with one difference since my last attempt: this time, I used 5
million lines per file. For each 5 million line file, I ran the import 5
times and averaged the results.

(I found that even using 1 million lines could sometimes produce surprising
speedups where the newer algorithm should be at least a tiny bit slower
than the non-simd version.)

The text file with no special characters is 30% faster. The CSV file with
no special characters is 39% faster. The text file with roughly 1/3rd
special characters is 0.5% slower. The CSV file with roughly 1/3rd special
characters is 2.7% slower.

I also tried files that alternated lines with no special characters and
lines with 1/3rd special characters, thinking I could force the algorithm
to continually check whether or not it should use simd and therefore force
more overhead in the try-simd/don't-try-simd housekeeping code. The text
file was still 50% faster. The CSV file was still 13% faster.

On Mon, Nov 24, 2025 at 3:59 PM Nathan Bossart <nathandbossart@gmail.com>
wrote:

On Thu, Nov 20, 2025 at 03:55:43PM +0300, Nazir Bilal Yavuz wrote:

On Thu, 20 Nov 2025 at 00:01, Nathan Bossart <nathandbossart@gmail.com>

wrote:

+            /* Load a chunk of data into a vector register */
+            vector8_load(&chunk, (const uint8 *)

&copy_input_buf[input_buf_ptr]);

In other places, processing 2 or 4 vectors of data at a time has proven
faster. Have you tried that here?

Sorry, I could not find the related code piece. I only saw the
vector8_load() inside of hex_decode_safe() function and its comment
says:

/*
* We must process 2 vectors at a time since the output will be half the
* length of the input.
*/

But this does not mention any speedup from using 2 vectors at a time.
Could you please show the related code?

See pg_lfind32().

--
nathan

--
-- Manni Wood EDB: https://www.enterprisedb.com

#43KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nathan Bossart (#38)
2 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hello,
On Wed, Nov 19, 2025 at 10:01 PM Nathan Bossart <nathandbossart@gmail.com>
wrote:

On Tue, Nov 18, 2025 at 05:20:05PM +0300, Nazir Bilal Yavuz wrote:

Thanks, done.

I took a look at the v3 patches. Here are my high-level thoughts:

+    /*
+     * Parse data and transfer into line_buf. To get benefit from
inlining,
+     * call CopyReadLineText() with the constant boolean variables.
+     */
+    if (cstate->simd_continue)
+        result = CopyReadLineText(cstate, is_csv, true);
+    else
+        result = CopyReadLineText(cstate, is_csv, false);

I'm curious whether this actually generates different code, and if it does,
if it's actually faster. We're already branching on cstate->simd_continue
here.

I've compiled both versions with -O2 and confirmed they generate different
code. When simd_continue is passed as a constant to CopyReadLineText, the
compiler optimizes out the condition checks from the SIMD path.
A small benchmark on a 1GB+ file shows the expected benefit which is around
6% performance improvement.
I've attached the assembly outputs in case someone wants to check something
else.

Regards,
Ayoub Kazar

Attachments:

copyfromparse-constant.asmapplication/octet-stream; name=copyfromparse-constant.asmDownload
copyfromparse-variable.asmapplication/octet-stream; name=copyfromparse-variable.asmDownload
#44Manni Wood
manni.wood@enterprisedb.com
In reply to: KAZAR Ayoub (#43)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Nov 26, 2025 at 5:51 AM KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
On Wed, Nov 19, 2025 at 10:01 PM Nathan Bossart <nathandbossart@gmail.com>
wrote:

On Tue, Nov 18, 2025 at 05:20:05PM +0300, Nazir Bilal Yavuz wrote:

Thanks, done.

I took a look at the v3 patches. Here are my high-level thoughts:

+    /*
+     * Parse data and transfer into line_buf. To get benefit from
inlining,
+     * call CopyReadLineText() with the constant boolean variables.
+     */
+    if (cstate->simd_continue)
+        result = CopyReadLineText(cstate, is_csv, true);
+    else
+        result = CopyReadLineText(cstate, is_csv, false);

I'm curious whether this actually generates different code, and if it
does,
if it's actually faster. We're already branching on cstate->simd_continue
here.

I've compiled both versions with -O2 and confirmed they generate different
code. When simd_continue is passed as a constant to CopyReadLineText, the
compiler optimizes out the condition checks from the SIMD path.
A small benchmark on a 1GB+ file shows the expected benefit which is
around 6% performance improvement.
I've attached the assembly outputs in case someone wants to check
something else.

Regards,
Ayoub Kazar

Correction to my last post:

I also tried files that alternated lines with no special characters and
lines with 1/3rd special characters, thinking I could force the algorithm
to continually check whether or not it should use simd and therefore force
more overhead in the try-simd/don't-try-simd housekeeping code. The text
file was still 20% faster (not 50% faster as I originally stated --- that
was a typo). The CSV file was still 13% faster.

Also, apologies for posting at the top in my last e-mail.
--
-- Manni Wood EDB: https://www.enterprisedb.com

#45Manni Wood
manni.wood@enterprisedb.com
In reply to: Manni Wood (#44)
3 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Nov 26, 2025 at 8:21 AM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Wed, Nov 26, 2025 at 5:51 AM KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
On Wed, Nov 19, 2025 at 10:01 PM Nathan Bossart <nathandbossart@gmail.com>
wrote:

On Tue, Nov 18, 2025 at 05:20:05PM +0300, Nazir Bilal Yavuz wrote:

Thanks, done.

I took a look at the v3 patches. Here are my high-level thoughts:

+    /*
+     * Parse data and transfer into line_buf. To get benefit from
inlining,
+     * call CopyReadLineText() with the constant boolean variables.
+     */
+    if (cstate->simd_continue)
+        result = CopyReadLineText(cstate, is_csv, true);
+    else
+        result = CopyReadLineText(cstate, is_csv, false);

I'm curious whether this actually generates different code, and if it
does,
if it's actually faster. We're already branching on
cstate->simd_continue
here.

I've compiled both versions with -O2 and confirmed they generate
different code. When simd_continue is passed as a constant to
CopyReadLineText, the compiler optimizes out the condition checks from the
SIMD path.
A small benchmark on a 1GB+ file shows the expected benefit which is
around 6% performance improvement.
I've attached the assembly outputs in case someone wants to check
something else.

Regards,
Ayoub Kazar

Correction to my last post:

I also tried files that alternated lines with no special characters and
lines with 1/3rd special characters, thinking I could force the algorithm
to continually check whether or not it should use simd and therefore force
more overhead in the try-simd/don't-try-simd housekeeping code. The text
file was still 20% faster (not 50% faster as I originally stated --- that
was a typo). The CSV file was still 13% faster.

Also, apologies for posting at the top in my last e-mail.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Hello, all.

Andrew, I tried your suggestion of just reading the first chunk of the copy
file to determine if SIMD is worth using. Attached are v4 versions of the
patches showing a first attempt at doing that.

I attached test.sh.txt to show how I've been testing, with 5 million lines
of the various copy file variations introduced by Ayub Kazar.

The text copy with no special chars is 30% faster. The CSV copy with no
special chars is 48% faster. The text with 1/3rd escapes is 3% slower. The
CSV with 1/3rd quotes is 0.27% slower.

This set of patches follows the simplest suggestion of just testing the
first N lines (actually first N bytes) of the file and then deciding
whether or not to enable SIMD. This set of patches does not follow Andrew's
later suggestion of maybe checking again every million lines or so.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Attachments:

test.sh.txttext/plain; charset=US-ASCII; name=test.sh.txtDownload
v4-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v4-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 38b587dda44cb7160ee734cdea55a573f302c3a9 Mon Sep 17 00:00:00 2001
From: Manni Wood <manni.wood@enterprisedb.com>
Date: Fri, 5 Dec 2025 18:33:46 -0600
Subject: [PATCH v4 2/2] Speed up COPY FROM text/CSV parsing using SIMD

Authors: Shinya Kato <shinya11.kato@gmail.com>,
Nazir Bilal Yavuz <byavuz81@gmail.com>,
Ayoub Kazar <ma_kazar@esi.dz>
Reviewers: Andrew Dunstan <andrew@dunslane.net>
Descussion:
https://www.postgresql.org/message-id/flat/CAOzEurSW8cNr6TPKsjrstnPfhf4QyQqB4tnPXGGe8N4e_v7Jig@mail.gmail.com
---
 src/backend/commands/copyfrom.c          |  3 +++
 src/backend/commands/copyfromparse.c     | 29 +++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 11 +++++++++
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 12781963b4f..e638623e5b5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1720,6 +1720,9 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->cur_attname = NULL;
 	cstate->cur_attval = NULL;
 	cstate->relname_only = false;
+	cstate->special_chars_encountered = 0;
+	cstate->checked_simd = false;
+	cstate->use_simd = false;

 	/*
 	 * Allocate buffers for the input pipeline.
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 1edb525f072..8cfdfcd4cd8 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1346,6 +1346,28 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)

 #ifndef USE_NO_SIMD

+		/*
+		 * Wait until we have read more than BYTES_PROCESSED_UNTIL_SIMD_CHECK.
+		 * cstate->bytes_processed will grow an unpredictable amount with each
+		 * call to this function, so just wait until we have crossed the
+		 * threshold.
+		 */
+		if (!cstate->checked_simd && cstate->bytes_processed > BYTES_PROCESSED_UNTIL_SIMD_CHECK)
+		{
+			cstate->checked_simd = true;
+
+			/*
+			 * If we have not read too many special characters
+			 * (SPECIAL_CHAR_SIMD_THRESHOLD) then start using SIMD to speed up
+			 * processing. This heuristic assumes that input does not vary too
+			 * much from line to line and that number of special characters
+			 * encountered in the first BYTES_PROCESSED_UNTIL_SIMD_CHECK are
+			 * indicitive of the whole file.
+			 */
+			if (cstate->special_chars_encountered < SPECIAL_CHAR_SIMD_THRESHOLD)
+				cstate->use_simd = true;
+		}
+
 		/*
 		 * Use SIMD instructions to efficiently scan the input buffer for
 		 * special characters (e.g., newline, carriage return, quote, and
@@ -1358,7 +1380,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * sequentially. - The remaining buffer is smaller than one vector
 		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
 		 */
-		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (cstate->use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match = vector8_broadcast(0);
@@ -1415,6 +1437,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 */
 			if (c == '\r')
 			{
+				cstate->special_chars_encountered++;
 				IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			}

@@ -1446,6 +1469,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \r */
 		if (c == '\r' && (!is_csv || !in_quote))
 		{
+			cstate->special_chars_encountered++;
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
 				cstate->eol_type == EOL_CRNL)
@@ -1502,6 +1526,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \n */
 		if (c == '\n' && (!is_csv || !in_quote))
 		{
+			cstate->special_chars_encountered++;
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -1524,6 +1549,8 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		{
 			char		c2;

+			cstate->special_chars_encountered++;
+
 			IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			IF_NEED_REFILL_AND_EOF_BREAK(0);

diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..215215f909f 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,17 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)

 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* the amount of bytes to read until checking if we should try simd */
+#define BYTES_PROCESSED_UNTIL_SIMD_CHECK 100000
+	/* the number of special chars read below which we use simd */
+#define SPECIAL_CHAR_SIMD_THRESHOLD 20000
+	uint64		special_chars_encountered;	/* number of special chars
+											 * encountered so far */
+	bool		checked_simd;	/* we read BYTES_PROCESSED_UNTIL_SIMD_CHECK
+								 * and checked if we should use SIMD on the
+								 * rest of the file */
+	bool		use_simd;		/* use simd to speed up copying */
 } CopyFromStateData;

 extern void ReceiveCopyBegin(CopyFromState cstate);
--
2.52.0

v4-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v4-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 0b1f786bf58c3d90e078d4afa83b7d43dda08491 Mon Sep 17 00:00:00 2001
From: Manni Wood <manni.wood@enterprisedb.com>
Date: Fri, 5 Dec 2025 18:30:00 -0600
Subject: [PATCH v4 1/2] Speed up COPY FROM text/CSV parsing using SIMD

Authors: Shinya Kato <shinya11.kato@gmail.com>,
Nazir Bilal Yavuz <byavuz81@gmail.com>,
Ayoub Kazar <ma_kazar@esi.dz>
Reviewers: Andrew Dunstan <andrew@dunslane.net>
Descussion:
https://www.postgresql.org/message-id/flat/CAOzEurSW8cNr6TPKsjrstnPfhf4QyQqB4tnPXGGe8N4e_v7Jig@mail.gmail.com
---
 src/backend/commands/copyfromparse.c | 73 ++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index a09e7fbace3..1edb525f072 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -71,7 +71,9 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
 #include "port/pg_bswap.h"
+#include "port/simd.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 
@@ -1255,6 +1257,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
+#ifndef USE_NO_SIMD
+	Vector8		nl = vector8_broadcast('\n');
+	Vector8		cr = vector8_broadcast('\r');
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		quote = vector8_broadcast(0);
+	Vector8		escape = vector8_broadcast(0);
+#endif
+
 	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
@@ -1262,6 +1272,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
+
+#ifndef USE_NO_SIMD
+		quote = vector8_broadcast(quotec);
+		if (quotec != escapec)
+			escape = vector8_broadcast(escapec);
+#endif
 	}
 
 	/*
@@ -1328,6 +1344,63 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			need_data = false;
 		}
 
+#ifndef USE_NO_SIMD
+
+		/*
+		 * Use SIMD instructions to efficiently scan the input buffer for
+		 * special characters (e.g., newline, carriage return, quote, and
+		 * escape). This is faster than byte-by-byte iteration, especially on
+		 * large buffers.
+		 *
+		 * We do not apply the SIMD fast path in either of the following
+		 * cases: - When the previously processed character was an escape
+		 * character (last_was_esc), since the next byte must be examined
+		 * sequentially. - The remaining buffer is smaller than one vector
+		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
+		 */
+		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match = vector8_broadcast(0);
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
+
+			/* \n and \r are not special inside quotes */
+			if (!in_quote)
+				match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+			if (is_csv)
+			{
+				match = vector8_or(match, vector8_eq(chunk, quote));
+				if (escapec != '\0')
+					match = vector8_or(match, vector8_eq(chunk, escape));
+			}
+			else
+				match = vector8_or(match, vector8_eq(chunk, bs));
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int			advance = pg_rightmost_one_pos32(mask);
+
+				input_buf_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				input_buf_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 		/* OK to fetch a character */
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
-- 
2.52.0

#46Bilal Yavuz
byavuz81@gmail.com
In reply to: Manni Wood (#45)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Sat, 6 Dec 2025 at 04:40, Manni Wood <manni.wood@enterprisedb.com> wrote:

Hello, all.

Andrew, I tried your suggestion of just reading the first chunk of the copy file to determine if SIMD is worth using. Attached are v4 versions of the patches showing a first attempt at doing that.

Thank you for doing this!

I attached test.sh.txt to show how I've been testing, with 5 million lines of the various copy file variations introduced by Ayub Kazar.

The text copy with no special chars is 30% faster. The CSV copy with no special chars is 48% faster. The text with 1/3rd escapes is 3% slower. The CSV with 1/3rd quotes is 0.27% slower.

This set of patches follows the simplest suggestion of just testing the first N lines (actually first N bytes) of the file and then deciding whether or not to enable SIMD. This set of patches does not follow Andrew's later suggestion of maybe checking again every million lines or so.

My input-generation script is not ready to share yet, but the inputs
follow this format: text_${n}.input, where n represents the number of
normal characters before the delimiter. For example:

n = 0 -> "\n\n\n\n\n..." (no normal characters)
n = 1 -> "a\n..." (1 normal character before the delimiter)
...
n = 5 -> "aaaaa\n..."
… continuing up to n = 32.

Each line has 4096 chars and there are a total of 100000 lines in each
input file.

I only benchmarked the text format. I compared the latest heuristic I
shared [1]/messages/by-id/CAN55FZ1KF7XNpm2XyG=M-sFUODai=6Z8a11xE3s4YRBeBKY3tA@mail.gmail.com with the current method. The benchmarks show roughly a ~16%
regression at the worst case (n = 2), with regressions up to n = 5.
For the remaining values, performance was similar.

Actual comparison of timings (in ms):

current method / heuristic
n = 0 -> 3252.7253 / 2856.2753 (%12)
n = 1 -> 2910.321 / 2520.7717 (%13)
n = 2 -> 2865.008 / 2403.2017 (%16)
n = 3 -> 2608.649 / 2353.1477 (%9)
n = 4 -> 2460.74 / 2300.1783 (%6)
n = 5 -> 2451.696 / 2362.1573 (%3)
No difference for the rest.

Side note: Sorry for the delay in responding, I will continue working
on this next week.

[1]: /messages/by-id/CAN55FZ1KF7XNpm2XyG=M-sFUODai=6Z8a11xE3s4YRBeBKY3tA@mail.gmail.com

--
Regards,
Nazir Bilal Yavuz
Microsoft

#47Bilal Yavuz
byavuz81@gmail.com
In reply to: Bilal Yavuz (#46)
3 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Sat, 6 Dec 2025 at 10:55, Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

On Sat, 6 Dec 2025 at 04:40, Manni Wood <manni.wood@enterprisedb.com> wrote:

Hello, all.

Andrew, I tried your suggestion of just reading the first chunk of the copy file to determine if SIMD is worth using. Attached are v4 versions of the patches showing a first attempt at doing that.

Thank you for doing this!

I attached test.sh.txt to show how I've been testing, with 5 million lines of the various copy file variations introduced by Ayub Kazar.

The text copy with no special chars is 30% faster. The CSV copy with no special chars is 48% faster. The text with 1/3rd escapes is 3% slower. The CSV with 1/3rd quotes is 0.27% slower.

This set of patches follows the simplest suggestion of just testing the first N lines (actually first N bytes) of the file and then deciding whether or not to enable SIMD. This set of patches does not follow Andrew's later suggestion of maybe checking again every million lines or so.

My input-generation script is not ready to share yet, but the inputs
follow this format: text_${n}.input, where n represents the number of
normal characters before the delimiter. For example:

n = 0 -> "\n\n\n\n\n..." (no normal characters)
n = 1 -> "a\n..." (1 normal character before the delimiter)
...
n = 5 -> "aaaaa\n..."
… continuing up to n = 32.

Each line has 4096 chars and there are a total of 100000 lines in each
input file.

I only benchmarked the text format. I compared the latest heuristic I
shared [1] with the current method. The benchmarks show roughly a ~16%
regression at the worst case (n = 2), with regressions up to n = 5.
For the remaining values, performance was similar.

I tried to improve the v4 patchset. My changes are:

1 - I changed CopyReadLineText() to an inline function and sent the
use_simd variable as an argument to get help from inlining.

2 - A main for loop in the CopyReadLineText() function is called many
times, so I moved the use_simd check to the CopyReadLine() function.

3 - Instead of 'bytes_processed', I used 'chars_processed' because
cstate->bytes_processed is increased before we process them and this
can cause wrong results.

4 - Because of #2 and #3, instead of having
'SPECIAL_CHAR_SIMD_THRESHOLD', I used the ratio of 'chars_processed /
special_chars_encountered' to determine whether we want to use SIMD.

5 - cstate->special_chars_encountered is incremented wrongly for the
CSV case. It is not incremented for the quote and escape delimiters. I
moved all increments of cstate->special_chars_encountered to the
central place and tried to optimize it but it still causes a
regression as it creates one more branching.

With these changes, I am able to decrease the regression to %10 from
%16. Regression decreases to %7 if I modify #5 for the only text input
but I did not do that.

My changes are in the 0003.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachments:

v4.1-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v4.1-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From a1b4d28069786c3fb506c79e096312fcfd585fdb Mon Sep 17 00:00:00 2001
From: Shinya Kato <shinya11.kato@gmail.com>
Date: Mon, 28 Jul 2025 22:08:20 +0900
Subject: [PATCH v4.1 1/3] Speed up COPY FROM text/CSV parsing using SIMD

---
 src/backend/commands/copyfromparse.c | 76 ++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 62afcd8fad1..cf110767542 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -71,7 +71,9 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
 #include "port/pg_bswap.h"
+#include "port/simd.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 
@@ -1255,6 +1257,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
+#ifndef USE_NO_SIMD
+	Vector8		nl = vector8_broadcast('\n');
+	Vector8		cr = vector8_broadcast('\r');
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		quote = vector8_broadcast(0);
+	Vector8		escape = vector8_broadcast(0);
+#endif
+
 	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
@@ -1262,6 +1272,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
+
+#ifndef USE_NO_SIMD
+		quote = vector8_broadcast(quotec);
+		if (quotec != escapec)
+			escape = vector8_broadcast(escapec);
+#endif
 	}
 
 	/*
@@ -1328,6 +1344,66 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			need_data = false;
 		}
 
+#ifndef USE_NO_SIMD
+
+		/*
+		 * Use SIMD instructions to efficiently scan the input buffer for
+		 * special characters (e.g., newline, carriage return, quote, and
+		 * escape). This is faster than byte-by-byte iteration, especially on
+		 * large buffers.
+		 *
+		 * We do not apply the SIMD fast path in either of the following
+		 * cases: - When the previously processed character was an escape
+		 * character (last_was_esc), since the next byte must be examined
+		 * sequentially. - The remaining buffer is smaller than one vector
+		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
+		 */
+		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match = vector8_broadcast(0);
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
+
+			if (is_csv)
+			{
+				/* \n and \r are not special inside quotes */
+				if (!in_quote)
+					match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+				match = vector8_or(match, vector8_eq(chunk, quote));
+				if (escapec != '\0')
+					match = vector8_or(match, vector8_eq(chunk, escape));
+			}
+			else
+			{
+				match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+				match = vector8_or(match, vector8_eq(chunk, bs));
+			}
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int			advance = pg_rightmost_one_pos32(mask);
+
+				input_buf_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				input_buf_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 		/* OK to fetch a character */
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
-- 
2.51.0

v4.1-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v4.1-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 3a2f9ff26755a5248b7a33770f4603fec483d3bc Mon Sep 17 00:00:00 2001
From: Manni Wood <manni.wood@enterprisedb.com>
Date: Fri, 5 Dec 2025 18:33:46 -0600
Subject: [PATCH v4.1 2/3] Speed up COPY FROM text/CSV parsing using SIMD

Authors: Shinya Kato <shinya11.kato@gmail.com>,
Nazir Bilal Yavuz <byavuz81@gmail.com>,
Ayoub Kazar <ma_kazar@esi.dz>
Reviewers: Andrew Dunstan <andrew@dunslane.net>
Descussion:
https://www.postgresql.org/message-id/flat/CAOzEurSW8cNr6TPKsjrstnPfhf4QyQqB4tnPXGGe8N4e_v7Jig@mail.gmail.com
---
 src/include/commands/copyfrom_internal.h | 11 +++++++++
 src/backend/commands/copyfrom.c          |  3 +++
 src/backend/commands/copyfromparse.c     | 29 +++++++++++++++++++++++-
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..215215f909f 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,17 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* the amount of bytes to read until checking if we should try simd */
+#define BYTES_PROCESSED_UNTIL_SIMD_CHECK 100000
+	/* the number of special chars read below which we use simd */
+#define SPECIAL_CHAR_SIMD_THRESHOLD 20000
+	uint64		special_chars_encountered;	/* number of special chars
+											 * encountered so far */
+	bool		checked_simd;	/* we read BYTES_PROCESSED_UNTIL_SIMD_CHECK
+								 * and checked if we should use SIMD on the
+								 * rest of the file */
+	bool		use_simd;		/* use simd to speed up copying */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 12781963b4f..e638623e5b5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1720,6 +1720,9 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->cur_attname = NULL;
 	cstate->cur_attval = NULL;
 	cstate->relname_only = false;
+	cstate->special_chars_encountered = 0;
+	cstate->checked_simd = false;
+	cstate->use_simd = false;
 
 	/*
 	 * Allocate buffers for the input pipeline.
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index cf110767542..549b56c21fb 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1346,6 +1346,28 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 
 #ifndef USE_NO_SIMD
 
+		/*
+		 * Wait until we have read more than BYTES_PROCESSED_UNTIL_SIMD_CHECK.
+		 * cstate->bytes_processed will grow an unpredictable amount with each
+		 * call to this function, so just wait until we have crossed the
+		 * threshold.
+		 */
+		if (!cstate->checked_simd && cstate->bytes_processed > BYTES_PROCESSED_UNTIL_SIMD_CHECK)
+		{
+			cstate->checked_simd = true;
+
+			/*
+			 * If we have not read too many special characters
+			 * (SPECIAL_CHAR_SIMD_THRESHOLD) then start using SIMD to speed up
+			 * processing. This heuristic assumes that input does not vary too
+			 * much from line to line and that number of special characters
+			 * encountered in the first BYTES_PROCESSED_UNTIL_SIMD_CHECK are
+			 * indicitive of the whole file.
+			 */
+			if (cstate->special_chars_encountered < SPECIAL_CHAR_SIMD_THRESHOLD)
+				cstate->use_simd = true;
+		}
+
 		/*
 		 * Use SIMD instructions to efficiently scan the input buffer for
 		 * special characters (e.g., newline, carriage return, quote, and
@@ -1358,7 +1380,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * sequentially. - The remaining buffer is smaller than one vector
 		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
 		 */
-		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (cstate->use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match = vector8_broadcast(0);
@@ -1418,6 +1440,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 */
 			if (c == '\r')
 			{
+				cstate->special_chars_encountered++;
 				IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			}
 
@@ -1449,6 +1472,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \r */
 		if (c == '\r' && (!is_csv || !in_quote))
 		{
+			cstate->special_chars_encountered++;
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
 				cstate->eol_type == EOL_CRNL)
@@ -1505,6 +1529,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \n */
 		if (c == '\n' && (!is_csv || !in_quote))
 		{
+			cstate->special_chars_encountered++;
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -1527,6 +1552,8 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		{
 			char		c2;
 
+			cstate->special_chars_encountered++;
+
 			IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			IF_NEED_REFILL_AND_EOF_BREAK(0);
 
-- 
2.51.0

v4.1-0003-Feedback-Changes.patchtext/x-patch; charset=US-ASCII; name=v4.1-0003-Feedback-Changes.patchDownload
From 8d0e6766175abac15b39884126c29da03657be40 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Tue, 9 Dec 2025 15:32:10 +0300
Subject: [PATCH v4.1 3/3] Feedback / Changes

---
 src/include/commands/copyfrom_internal.h |  9 +--
 src/backend/commands/copyfrom.c          |  1 +
 src/backend/commands/copyfromparse.c     | 88 +++++++++++++++---------
 3 files changed, 60 insertions(+), 38 deletions(-)

diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 215215f909f..397720bf875 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,12 +183,13 @@ typedef struct CopyFromStateData
 	uint64		bytes_processed;	/* number of bytes processed so far */
 
 	/* the amount of bytes to read until checking if we should try simd */
-#define BYTES_PROCESSED_UNTIL_SIMD_CHECK 100000
-	/* the number of special chars read below which we use simd */
-#define SPECIAL_CHAR_SIMD_THRESHOLD 20000
+#define CHARS_PROCESSED_UNTIL_SIMD_CHECK 100000
+	/* the ratio of special chars read below which we use simd */
+#define SPECIAL_CHAR_SIMD_RATIO 4
+	uint64		chars_processed;
 	uint64		special_chars_encountered;	/* number of special chars
 											 * encountered so far */
-	bool		checked_simd;	/* we read BYTES_PROCESSED_UNTIL_SIMD_CHECK
+	bool		checked_simd;	/* we read CHARS_PROCESSED_UNTIL_SIMD_CHECK
 								 * and checked if we should use SIMD on the
 								 * rest of the file */
 	bool		use_simd;		/* use simd to speed up copying */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index e638623e5b5..d44dd16eced 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1720,6 +1720,7 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->cur_attname = NULL;
 	cstate->cur_attval = NULL;
 	cstate->relname_only = false;
+	cstate->chars_processed = 0;
 	cstate->special_chars_encountered = 0;
 	cstate->checked_simd = false;
 	cstate->use_simd = false;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 549b56c21fb..86a268d0df9 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -143,7 +143,7 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate, bool is_csv);
-static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate, bool is_csv, bool use_simd);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -1173,8 +1173,40 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 	resetStringInfo(&cstate->line_buf);
 	cstate->line_buf_valid = false;
 
-	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate, is_csv);
+#ifndef USE_NO_SIMD
+
+	/*
+	 * Wait until we have read more than CHARS_PROCESSED_UNTIL_SIMD_CHECK.
+	 * cstate->bytes_processed will grow an unpredictable amount with each
+	 * call to this function, so just wait until we have crossed the
+	 * threshold.
+	 */
+	if (!cstate->checked_simd && cstate->chars_processed > CHARS_PROCESSED_UNTIL_SIMD_CHECK)
+	{
+		cstate->checked_simd = true;
+
+		/*
+		 * If we have not read too many special characters then start using
+		 * SIMD to speed up processing. This heuristic assumes that input does
+		 * not vary too much from line to line and that number of special
+		 * characters encountered in the first
+		 * CHARS_PROCESSED_UNTIL_SIMD_CHECK are indicitive of the whole file.
+		 */
+		if (cstate->chars_processed / SPECIAL_CHAR_SIMD_RATIO >= cstate->special_chars_encountered)
+		{
+			cstate->use_simd = true;
+		}
+	}
+#endif
+
+	/*
+	 * Parse data and transfer into line_buf. To get benefit from inlining,
+	 * call CopyReadLineText() with the constant boolean variables.
+	 */
+	if (cstate->use_simd)
+		result = CopyReadLineText(cstate, is_csv, true);
+	else
+		result = CopyReadLineText(cstate, is_csv, false);
 
 	if (result)
 	{
@@ -1241,8 +1273,8 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv, bool use_simd)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1309,7 +1341,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	input_buf_ptr = cstate->input_buf_index;
 	copy_buf_len = cstate->input_buf_len;
 
-	for (;;)
+	for (;; cstate->chars_processed++)
 	{
 		int			prev_raw_ptr;
 		char		c;
@@ -1346,28 +1378,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 
 #ifndef USE_NO_SIMD
 
-		/*
-		 * Wait until we have read more than BYTES_PROCESSED_UNTIL_SIMD_CHECK.
-		 * cstate->bytes_processed will grow an unpredictable amount with each
-		 * call to this function, so just wait until we have crossed the
-		 * threshold.
-		 */
-		if (!cstate->checked_simd && cstate->bytes_processed > BYTES_PROCESSED_UNTIL_SIMD_CHECK)
-		{
-			cstate->checked_simd = true;
-
-			/*
-			 * If we have not read too many special characters
-			 * (SPECIAL_CHAR_SIMD_THRESHOLD) then start using SIMD to speed up
-			 * processing. This heuristic assumes that input does not vary too
-			 * much from line to line and that number of special characters
-			 * encountered in the first BYTES_PROCESSED_UNTIL_SIMD_CHECK are
-			 * indicitive of the whole file.
-			 */
-			if (cstate->special_chars_encountered < SPECIAL_CHAR_SIMD_THRESHOLD)
-				cstate->use_simd = true;
-		}
-
 		/*
 		 * Use SIMD instructions to efficiently scan the input buffer for
 		 * special characters (e.g., newline, carriage return, quote, and
@@ -1380,7 +1390,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * sequentially. - The remaining buffer is smaller than one vector
 		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
 		 */
-		if (cstate->use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match = vector8_broadcast(0);
@@ -1430,6 +1440,21 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
+		/* Use this calculation decide whether to use SIMD later */
+		if (!use_simd && unlikely(!cstate->checked_simd))
+		{
+			if (is_csv)
+			{
+				if (c == '\r' || c == '\n' || c == quotec || c == escapec)
+					cstate->special_chars_encountered++;
+			}
+			else
+			{
+				if (c == '\r' || c == '\n' || c == '\\')
+					cstate->special_chars_encountered++;
+			}
+		}
+
 		if (is_csv)
 		{
 			/*
@@ -1440,7 +1465,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 */
 			if (c == '\r')
 			{
-				cstate->special_chars_encountered++;
 				IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			}
 
@@ -1472,7 +1496,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \r */
 		if (c == '\r' && (!is_csv || !in_quote))
 		{
-			cstate->special_chars_encountered++;
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
 				cstate->eol_type == EOL_CRNL)
@@ -1529,7 +1552,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \n */
 		if (c == '\n' && (!is_csv || !in_quote))
 		{
-			cstate->special_chars_encountered++;
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -1552,8 +1574,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		{
 			char		c2;
 
-			cstate->special_chars_encountered++;
-
 			IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			IF_NEED_REFILL_AND_EOF_BREAK(0);
 
-- 
2.51.0

#48Manni Wood
manni.wood@enterprisedb.com
In reply to: Bilal Yavuz (#47)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Dec 9, 2025 at 7:40 AM Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

On Sat, 6 Dec 2025 at 10:55, Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

On Sat, 6 Dec 2025 at 04:40, Manni Wood <manni.wood@enterprisedb.com>

wrote:

Hello, all.

Andrew, I tried your suggestion of just reading the first chunk of the

copy file to determine if SIMD is worth using. Attached are v4 versions of
the patches showing a first attempt at doing that.

Thank you for doing this!

I attached test.sh.txt to show how I've been testing, with 5 million

lines of the various copy file variations introduced by Ayub Kazar.

The text copy with no special chars is 30% faster. The CSV copy with

no special chars is 48% faster. The text with 1/3rd escapes is 3% slower.
The CSV with 1/3rd quotes is 0.27% slower.

This set of patches follows the simplest suggestion of just testing

the first N lines (actually first N bytes) of the file and then deciding
whether or not to enable SIMD. This set of patches does not follow Andrew's
later suggestion of maybe checking again every million lines or so.

My input-generation script is not ready to share yet, but the inputs
follow this format: text_${n}.input, where n represents the number of
normal characters before the delimiter. For example:

n = 0 -> "\n\n\n\n\n..." (no normal characters)
n = 1 -> "a\n..." (1 normal character before the delimiter)
...
n = 5 -> "aaaaa\n..."
… continuing up to n = 32.

Each line has 4096 chars and there are a total of 100000 lines in each
input file.

I only benchmarked the text format. I compared the latest heuristic I
shared [1] with the current method. The benchmarks show roughly a ~16%
regression at the worst case (n = 2), with regressions up to n = 5.
For the remaining values, performance was similar.

I tried to improve the v4 patchset. My changes are:

1 - I changed CopyReadLineText() to an inline function and sent the
use_simd variable as an argument to get help from inlining.

2 - A main for loop in the CopyReadLineText() function is called many
times, so I moved the use_simd check to the CopyReadLine() function.

3 - Instead of 'bytes_processed', I used 'chars_processed' because
cstate->bytes_processed is increased before we process them and this
can cause wrong results.

4 - Because of #2 and #3, instead of having
'SPECIAL_CHAR_SIMD_THRESHOLD', I used the ratio of 'chars_processed /
special_chars_encountered' to determine whether we want to use SIMD.

5 - cstate->special_chars_encountered is incremented wrongly for the
CSV case. It is not incremented for the quote and escape delimiters. I
moved all increments of cstate->special_chars_encountered to the
central place and tried to optimize it but it still causes a
regression as it creates one more branching.

With these changes, I am able to decrease the regression to %10 from
%16. Regression decreases to %7 if I modify #5 for the only text input
but I did not do that.

My changes are in the 0003.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Bilal Yavuz (Nazir Bilal Yavuz?), I did not get a chance to do any work on
this today, but wanted to thank you for finding my logic errors in counting
special chars for CSV, and hacking on my naive solution to make it faster.
By attempting Andrew Dunstan's suggestion, I got a better feel for the
reality that the "housekeeping" code produces a significant amount of
overhead.
--
-- Manni Wood EDB: https://www.enterprisedb.com

#49Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Manni Wood (#48)
3 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Wed, 10 Dec 2025 at 01:13, Manni Wood <manni.wood@enterprisedb.com> wrote:

Bilal Yavuz (Nazir Bilal Yavuz?),

It is Nazir Bilal Yavuz, I changed some settings on my phone and it
seems that it affected my mail account, hopefully it should be fixed
now.

I did not get a chance to do any work on this today, but wanted to thank you for finding my logic errors in counting special chars for CSV, and hacking on my naive solution to make it faster. By attempting Andrew Dunstan's suggestion, I got a better feel for the reality that the "housekeeping" code produces a significant amount of overhead.

You are welcome! v4.1 has some problems with in_quote case in SIMD
handling code and counting cstate->chars_processed variable. I fixed
them in v4.2.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Attachments:

v4.2-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v4.2-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From e4546b0612bd2fde6190a9ade6e60a1f08299184 Mon Sep 17 00:00:00 2001
From: Manni Wood <manni.wood@enterprisedb.com>
Date: Fri, 5 Dec 2025 18:30:00 -0600
Subject: [PATCH v4.2 1/3] Speed up COPY FROM text/CSV parsing using SIMD

Authors: Shinya Kato <shinya11.kato@gmail.com>,
Nazir Bilal Yavuz <byavuz81@gmail.com>,
Ayoub Kazar <ma_kazar@esi.dz>
Reviewers: Andrew Dunstan <andrew@dunslane.net>
Descussion:
https://www.postgresql.org/message-id/flat/CAOzEurSW8cNr6TPKsjrstnPfhf4QyQqB4tnPXGGe8N4e_v7Jig@mail.gmail.com
---
 src/backend/commands/copyfromparse.c | 73 ++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 62afcd8fad1..673d6683a72 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -71,7 +71,9 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
 #include "port/pg_bswap.h"
+#include "port/simd.h"
 #include "utils/builtins.h"
 #include "utils/rel.h"
 
@@ -1255,6 +1257,14 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
+#ifndef USE_NO_SIMD
+	Vector8		nl = vector8_broadcast('\n');
+	Vector8		cr = vector8_broadcast('\r');
+	Vector8		bs = vector8_broadcast('\\');
+	Vector8		quote = vector8_broadcast(0);
+	Vector8		escape = vector8_broadcast(0);
+#endif
+
 	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
@@ -1262,6 +1272,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
+
+#ifndef USE_NO_SIMD
+		quote = vector8_broadcast(quotec);
+		if (quotec != escapec)
+			escape = vector8_broadcast(escapec);
+#endif
 	}
 
 	/*
@@ -1328,6 +1344,63 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			need_data = false;
 		}
 
+#ifndef USE_NO_SIMD
+
+		/*
+		 * Use SIMD instructions to efficiently scan the input buffer for
+		 * special characters (e.g., newline, carriage return, quote, and
+		 * escape). This is faster than byte-by-byte iteration, especially on
+		 * large buffers.
+		 *
+		 * We do not apply the SIMD fast path in either of the following
+		 * cases: - When the previously processed character was an escape
+		 * character (last_was_esc), since the next byte must be examined
+		 * sequentially. - The remaining buffer is smaller than one vector
+		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
+		 */
+		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		{
+			Vector8		chunk;
+			Vector8		match = vector8_broadcast(0);
+			uint32		mask;
+
+			/* Load a chunk of data into a vector register */
+			vector8_load(&chunk, (const uint8 *) &copy_input_buf[input_buf_ptr]);
+
+			/* \n and \r are not special inside quotes */
+			if (!in_quote)
+				match = vector8_or(vector8_eq(chunk, nl), vector8_eq(chunk, cr));
+
+			if (is_csv)
+			{
+				match = vector8_or(match, vector8_eq(chunk, quote));
+				if (escapec != '\0')
+					match = vector8_or(match, vector8_eq(chunk, escape));
+			}
+			else
+				match = vector8_or(match, vector8_eq(chunk, bs));
+
+			/* Check if we found any special characters */
+			mask = vector8_highbit_mask(match);
+			if (mask != 0)
+			{
+				/*
+				 * Found a special character. Advance up to that point and let
+				 * the scalar code handle it.
+				 */
+				int			advance = pg_rightmost_one_pos32(mask);
+
+				input_buf_ptr += advance;
+			}
+			else
+			{
+				/* No special characters found, so skip the entire chunk */
+				input_buf_ptr += sizeof(Vector8);
+				continue;
+			}
+		}
+#endif
+
 		/* OK to fetch a character */
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
-- 
2.51.0

v4.2-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=v4.2-0002-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patchDownload
From 92ac4ada1e4833f81ce30164b48868dc1ade102f Mon Sep 17 00:00:00 2001
From: Manni Wood <manni.wood@enterprisedb.com>
Date: Fri, 5 Dec 2025 18:33:46 -0600
Subject: [PATCH v4.2 2/3] Speed up COPY FROM text/CSV parsing using SIMD

Authors: Shinya Kato <shinya11.kato@gmail.com>,
Nazir Bilal Yavuz <byavuz81@gmail.com>,
Ayoub Kazar <ma_kazar@esi.dz>
Reviewers: Andrew Dunstan <andrew@dunslane.net>
Descussion:
https://www.postgresql.org/message-id/flat/CAOzEurSW8cNr6TPKsjrstnPfhf4QyQqB4tnPXGGe8N4e_v7Jig@mail.gmail.com
---
 src/include/commands/copyfrom_internal.h | 11 +++++++++
 src/backend/commands/copyfrom.c          |  3 +++
 src/backend/commands/copyfromparse.c     | 29 +++++++++++++++++++++++-
 3 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..215215f909f 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,17 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* the amount of bytes to read until checking if we should try simd */
+#define BYTES_PROCESSED_UNTIL_SIMD_CHECK 100000
+	/* the number of special chars read below which we use simd */
+#define SPECIAL_CHAR_SIMD_THRESHOLD 20000
+	uint64		special_chars_encountered;	/* number of special chars
+											 * encountered so far */
+	bool		checked_simd;	/* we read BYTES_PROCESSED_UNTIL_SIMD_CHECK
+								 * and checked if we should use SIMD on the
+								 * rest of the file */
+	bool		use_simd;		/* use simd to speed up copying */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 2ae3d2ba86e..6711c0cfcdd 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1720,6 +1720,9 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->cur_attname = NULL;
 	cstate->cur_attval = NULL;
 	cstate->relname_only = false;
+	cstate->special_chars_encountered = 0;
+	cstate->checked_simd = false;
+	cstate->use_simd = false;
 
 	/*
 	 * Allocate buffers for the input pipeline.
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 673d6683a72..d548674c8ff 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1346,6 +1346,28 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 
 #ifndef USE_NO_SIMD
 
+		/*
+		 * Wait until we have read more than BYTES_PROCESSED_UNTIL_SIMD_CHECK.
+		 * cstate->bytes_processed will grow an unpredictable amount with each
+		 * call to this function, so just wait until we have crossed the
+		 * threshold.
+		 */
+		if (!cstate->checked_simd && cstate->bytes_processed > BYTES_PROCESSED_UNTIL_SIMD_CHECK)
+		{
+			cstate->checked_simd = true;
+
+			/*
+			 * If we have not read too many special characters
+			 * (SPECIAL_CHAR_SIMD_THRESHOLD) then start using SIMD to speed up
+			 * processing. This heuristic assumes that input does not vary too
+			 * much from line to line and that number of special characters
+			 * encountered in the first BYTES_PROCESSED_UNTIL_SIMD_CHECK are
+			 * indicitive of the whole file.
+			 */
+			if (cstate->special_chars_encountered < SPECIAL_CHAR_SIMD_THRESHOLD)
+				cstate->use_simd = true;
+		}
+
 		/*
 		 * Use SIMD instructions to efficiently scan the input buffer for
 		 * special characters (e.g., newline, carriage return, quote, and
@@ -1358,7 +1380,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * sequentially. - The remaining buffer is smaller than one vector
 		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
 		 */
-		if (!last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (cstate->use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match = vector8_broadcast(0);
@@ -1415,6 +1437,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 */
 			if (c == '\r')
 			{
+				cstate->special_chars_encountered++;
 				IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			}
 
@@ -1446,6 +1469,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \r */
 		if (c == '\r' && (!is_csv || !in_quote))
 		{
+			cstate->special_chars_encountered++;
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
 				cstate->eol_type == EOL_CRNL)
@@ -1502,6 +1526,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \n */
 		if (c == '\n' && (!is_csv || !in_quote))
 		{
+			cstate->special_chars_encountered++;
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -1524,6 +1549,8 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		{
 			char		c2;
 
+			cstate->special_chars_encountered++;
+
 			IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			IF_NEED_REFILL_AND_EOF_BREAK(0);
 
-- 
2.51.0

v4.2-0003-Feedback-Changes.patchtext/x-patch; charset=US-ASCII; name=v4.2-0003-Feedback-Changes.patchDownload
From 128574f80963c5b532c8aa7e7fad84a7e6e20874 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Tue, 9 Dec 2025 15:32:10 +0300
Subject: [PATCH v4.2 3/3] Feedback / Changes

---
 src/include/commands/copyfrom_internal.h |  9 +--
 src/backend/commands/copyfrom.c          |  1 +
 src/backend/commands/copyfromparse.c     | 92 +++++++++++++++---------
 3 files changed, 65 insertions(+), 37 deletions(-)

diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 215215f909f..397720bf875 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,12 +183,13 @@ typedef struct CopyFromStateData
 	uint64		bytes_processed;	/* number of bytes processed so far */
 
 	/* the amount of bytes to read until checking if we should try simd */
-#define BYTES_PROCESSED_UNTIL_SIMD_CHECK 100000
-	/* the number of special chars read below which we use simd */
-#define SPECIAL_CHAR_SIMD_THRESHOLD 20000
+#define CHARS_PROCESSED_UNTIL_SIMD_CHECK 100000
+	/* the ratio of special chars read below which we use simd */
+#define SPECIAL_CHAR_SIMD_RATIO 4
+	uint64		chars_processed;
 	uint64		special_chars_encountered;	/* number of special chars
 											 * encountered so far */
-	bool		checked_simd;	/* we read BYTES_PROCESSED_UNTIL_SIMD_CHECK
+	bool		checked_simd;	/* we read CHARS_PROCESSED_UNTIL_SIMD_CHECK
 								 * and checked if we should use SIMD on the
 								 * rest of the file */
 	bool		use_simd;		/* use simd to speed up copying */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 6711c0cfcdd..2b77ba2556c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1720,6 +1720,7 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->cur_attname = NULL;
 	cstate->cur_attval = NULL;
 	cstate->relname_only = false;
+	cstate->chars_processed = 0;
 	cstate->special_chars_encountered = 0;
 	cstate->checked_simd = false;
 	cstate->use_simd = false;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d548674c8ff..720222152da 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -143,7 +143,7 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate, bool is_csv);
-static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate, bool is_csv, bool use_simd);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -1173,8 +1173,40 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 	resetStringInfo(&cstate->line_buf);
 	cstate->line_buf_valid = false;
 
-	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate, is_csv);
+#ifndef USE_NO_SIMD
+
+	/*
+	 * Wait until we have read more than CHARS_PROCESSED_UNTIL_SIMD_CHECK.
+	 * cstate->bytes_processed will grow an unpredictable amount with each
+	 * call to this function, so just wait until we have crossed the
+	 * threshold.
+	 */
+	if (!cstate->checked_simd && cstate->chars_processed > CHARS_PROCESSED_UNTIL_SIMD_CHECK)
+	{
+		cstate->checked_simd = true;
+
+		/*
+		 * If we have not read too many special characters then start using
+		 * SIMD to speed up processing. This heuristic assumes that input does
+		 * not vary too much from line to line and that number of special
+		 * characters encountered in the first
+		 * CHARS_PROCESSED_UNTIL_SIMD_CHECK are indicitive of the whole file.
+		 */
+		if (cstate->chars_processed / SPECIAL_CHAR_SIMD_RATIO >= cstate->special_chars_encountered)
+		{
+			cstate->use_simd = true;
+		}
+	}
+#endif
+
+	/*
+	 * Parse data and transfer into line_buf. To get benefit from inlining,
+	 * call CopyReadLineText() with the constant boolean variables.
+	 */
+	if (cstate->use_simd)
+		result = CopyReadLineText(cstate, is_csv, true);
+	else
+		result = CopyReadLineText(cstate, is_csv, false);
 
 	if (result)
 	{
@@ -1241,11 +1273,12 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv, bool use_simd)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
+	int			start_input_buf_ptr;
 	int			copy_buf_len;
 	bool		need_data = false;
 	bool		hit_eof = false;
@@ -1309,6 +1342,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	input_buf_ptr = cstate->input_buf_index;
 	copy_buf_len = cstate->input_buf_len;
 
+	start_input_buf_ptr = input_buf_ptr;
 	for (;;)
 	{
 		int			prev_raw_ptr;
@@ -1327,9 +1361,11 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			REFILL_LINEBUF;
 
 			CopyLoadInputBuf(cstate);
+			cstate->chars_processed += (input_buf_ptr - start_input_buf_ptr);
 			/* update our local variables */
 			hit_eof = cstate->input_reached_eof;
 			input_buf_ptr = cstate->input_buf_index;
+			start_input_buf_ptr = input_buf_ptr;
 			copy_buf_len = cstate->input_buf_len;
 
 			/*
@@ -1346,28 +1382,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 
 #ifndef USE_NO_SIMD
 
-		/*
-		 * Wait until we have read more than BYTES_PROCESSED_UNTIL_SIMD_CHECK.
-		 * cstate->bytes_processed will grow an unpredictable amount with each
-		 * call to this function, so just wait until we have crossed the
-		 * threshold.
-		 */
-		if (!cstate->checked_simd && cstate->bytes_processed > BYTES_PROCESSED_UNTIL_SIMD_CHECK)
-		{
-			cstate->checked_simd = true;
-
-			/*
-			 * If we have not read too many special characters
-			 * (SPECIAL_CHAR_SIMD_THRESHOLD) then start using SIMD to speed up
-			 * processing. This heuristic assumes that input does not vary too
-			 * much from line to line and that number of special characters
-			 * encountered in the first BYTES_PROCESSED_UNTIL_SIMD_CHECK are
-			 * indicitive of the whole file.
-			 */
-			if (cstate->special_chars_encountered < SPECIAL_CHAR_SIMD_THRESHOLD)
-				cstate->use_simd = true;
-		}
-
 		/*
 		 * Use SIMD instructions to efficiently scan the input buffer for
 		 * special characters (e.g., newline, carriage return, quote, and
@@ -1380,7 +1394,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		 * sequentially. - The remaining buffer is smaller than one vector
 		 * width (sizeof(Vector8)); SIMD operates on fixed-size chunks.
 		 */
-		if (cstate->use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
+		if (use_simd && !last_was_esc && copy_buf_len - input_buf_ptr >= sizeof(Vector8))
 		{
 			Vector8		chunk;
 			Vector8		match = vector8_broadcast(0);
@@ -1427,6 +1441,21 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
+		/* Use this calculation decide whether to use SIMD later */
+		if (!use_simd && unlikely(!cstate->checked_simd))
+		{
+			if (is_csv)
+			{
+				if (c == '\r' || c == '\n' || c == quotec || c == escapec)
+					cstate->special_chars_encountered++;
+			}
+			else
+			{
+				if (c == '\r' || c == '\n' || c == '\\')
+					cstate->special_chars_encountered++;
+			}
+		}
+
 		if (is_csv)
 		{
 			/*
@@ -1437,7 +1466,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 */
 			if (c == '\r')
 			{
-				cstate->special_chars_encountered++;
 				IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			}
 
@@ -1469,7 +1497,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \r */
 		if (c == '\r' && (!is_csv || !in_quote))
 		{
-			cstate->special_chars_encountered++;
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
 				cstate->eol_type == EOL_CRNL)
@@ -1526,7 +1553,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \n */
 		if (c == '\n' && (!is_csv || !in_quote))
 		{
-			cstate->special_chars_encountered++;
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -1549,8 +1575,6 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		{
 			char		c2;
 
-			cstate->special_chars_encountered++;
-
 			IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
 			IF_NEED_REFILL_AND_EOF_BREAK(0);
 
@@ -1635,6 +1659,8 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	 */
 	REFILL_LINEBUF;
 
+	cstate->chars_processed += (input_buf_ptr - start_input_buf_ptr);
+
 	return result;
 }
 
-- 
2.51.0

#50Mark Wong
markwkm@gmail.com
In reply to: Bilal Yavuz (#47)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi everyone,

On Tue, Dec 09, 2025 at 04:40:19PM +0300, Bilal Yavuz wrote:

Hi,

On Sat, 6 Dec 2025 at 10:55, Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

On Sat, 6 Dec 2025 at 04:40, Manni Wood <manni.wood@enterprisedb.com> wrote:

Hello, all.

Andrew, I tried your suggestion of just reading the first chunk of the copy file to determine if SIMD is worth using. Attached are v4 versions of the patches showing a first attempt at doing that.

Thank you for doing this!

I attached test.sh.txt to show how I've been testing, with 5 million lines of the various copy file variations introduced by Ayub Kazar.

The text copy with no special chars is 30% faster. The CSV copy with no special chars is 48% faster. The text with 1/3rd escapes is 3% slower. The CSV with 1/3rd quotes is 0.27% slower.

This set of patches follows the simplest suggestion of just testing the first N lines (actually first N bytes) of the file and then deciding whether or not to enable SIMD. This set of patches does not follow Andrew's later suggestion of maybe checking again every million lines or so.

My input-generation script is not ready to share yet, but the inputs
follow this format: text_${n}.input, where n represents the number of
normal characters before the delimiter. For example:

n = 0 -> "\n\n\n\n\n..." (no normal characters)
n = 1 -> "a\n..." (1 normal character before the delimiter)
...
n = 5 -> "aaaaa\n..."
… continuing up to n = 32.

Each line has 4096 chars and there are a total of 100000 lines in each
input file.

I only benchmarked the text format. I compared the latest heuristic I
shared [1] with the current method. The benchmarks show roughly a ~16%
regression at the worst case (n = 2), with regressions up to n = 5.
For the remaining values, performance was similar.

I tried to improve the v4 patchset. My changes are:

1 - I changed CopyReadLineText() to an inline function and sent the
use_simd variable as an argument to get help from inlining.

2 - A main for loop in the CopyReadLineText() function is called many
times, so I moved the use_simd check to the CopyReadLine() function.

3 - Instead of 'bytes_processed', I used 'chars_processed' because
cstate->bytes_processed is increased before we process them and this
can cause wrong results.

4 - Because of #2 and #3, instead of having
'SPECIAL_CHAR_SIMD_THRESHOLD', I used the ratio of 'chars_processed /
special_chars_encountered' to determine whether we want to use SIMD.

5 - cstate->special_chars_encountered is incremented wrongly for the
CSV case. It is not incremented for the quote and escape delimiters. I
moved all increments of cstate->special_chars_encountered to the
central place and tried to optimize it but it still causes a
regression as it creates one more branching.

With these changes, I am able to decrease the regression to %10 from
%16. Regression decreases to %7 if I modify #5 for the only text input
but I did not do that.

My changes are in the 0003.

I was helping collect some data, but I'm a little behind sharing what I
ran against the v4.1 patches (on commit 07961ef8) with the v4.2 version
out there...

I hope it's still helpfule that I share what I collected even though
they are not quite as nice, but maybe it's more about how/where I ran
them.

My laptop has a Intel(R) Core(TM) Ultra 7 165H, where most of these
tests were using up 95%+ of one of the cores (I have hyperthreading
disabled), and using about 10% the ssd's capacity.

Summarizing my results from the same script Manni ran, I didn't see as
much as an improvement in the positive tests, and then saw more negative
results in the other tests.

text copy with no special chars: 18% improvement of 15s from 80s before
the patch

CSV copy with no special chars: 23% improvement of 23s from 96s before
the patch

text with 1/3rd escapes: 6% slower, an additional 5s to 85 seconds
before the patch

CSV with 1/3rd quotes: 7% slower, an additional 10 seconds to 129
seconds before the patch

I'm wondering if my laptop/processor isn't the best test bed for this...

Regards,
Mark
--
Mark Wong <markwkm@gmail.com>
EDB https://enterprisedb.com

#51Manni Wood
manni.wood@enterprisedb.com
In reply to: Mark Wong (#50)
2 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Fri, Dec 12, 2025 at 2:42 PM Mark Wong <markwkm@gmail.com> wrote:

Hi everyone,

On Tue, Dec 09, 2025 at 04:40:19PM +0300, Bilal Yavuz wrote:

Hi,

On Sat, 6 Dec 2025 at 10:55, Bilal Yavuz <byavuz81@gmail.com> wrote:

Hi,

On Sat, 6 Dec 2025 at 04:40, Manni Wood <manni.wood@enterprisedb.com>

wrote:

Hello, all.

Andrew, I tried your suggestion of just reading the first chunk of

the copy file to determine if SIMD is worth using. Attached are v4 versions
of the patches showing a first attempt at doing that.

Thank you for doing this!

I attached test.sh.txt to show how I've been testing, with 5 million

lines of the various copy file variations introduced by Ayub Kazar.

The text copy with no special chars is 30% faster. The CSV copy with

no special chars is 48% faster. The text with 1/3rd escapes is 3% slower.
The CSV with 1/3rd quotes is 0.27% slower.

This set of patches follows the simplest suggestion of just testing

the first N lines (actually first N bytes) of the file and then deciding
whether or not to enable SIMD. This set of patches does not follow Andrew's
later suggestion of maybe checking again every million lines or so.

My input-generation script is not ready to share yet, but the inputs
follow this format: text_${n}.input, where n represents the number of
normal characters before the delimiter. For example:

n = 0 -> "\n\n\n\n\n..." (no normal characters)
n = 1 -> "a\n..." (1 normal character before the delimiter)
...
n = 5 -> "aaaaa\n..."
… continuing up to n = 32.

Each line has 4096 chars and there are a total of 100000 lines in each
input file.

I only benchmarked the text format. I compared the latest heuristic I
shared [1] with the current method. The benchmarks show roughly a ~16%
regression at the worst case (n = 2), with regressions up to n = 5.
For the remaining values, performance was similar.

I tried to improve the v4 patchset. My changes are:

1 - I changed CopyReadLineText() to an inline function and sent the
use_simd variable as an argument to get help from inlining.

2 - A main for loop in the CopyReadLineText() function is called many
times, so I moved the use_simd check to the CopyReadLine() function.

3 - Instead of 'bytes_processed', I used 'chars_processed' because
cstate->bytes_processed is increased before we process them and this
can cause wrong results.

4 - Because of #2 and #3, instead of having
'SPECIAL_CHAR_SIMD_THRESHOLD', I used the ratio of 'chars_processed /
special_chars_encountered' to determine whether we want to use SIMD.

5 - cstate->special_chars_encountered is incremented wrongly for the
CSV case. It is not incremented for the quote and escape delimiters. I
moved all increments of cstate->special_chars_encountered to the
central place and tried to optimize it but it still causes a
regression as it creates one more branching.

With these changes, I am able to decrease the regression to %10 from
%16. Regression decreases to %7 if I modify #5 for the only text input
but I did not do that.

My changes are in the 0003.

I was helping collect some data, but I'm a little behind sharing what I
ran against the v4.1 patches (on commit 07961ef8) with the v4.2 version
out there...

I hope it's still helpfule that I share what I collected even though
they are not quite as nice, but maybe it's more about how/where I ran
them.

My laptop has a Intel(R) Core(TM) Ultra 7 165H, where most of these
tests were using up 95%+ of one of the cores (I have hyperthreading
disabled), and using about 10% the ssd's capacity.

Summarizing my results from the same script Manni ran, I didn't see as
much as an improvement in the positive tests, and then saw more negative
results in the other tests.

text copy with no special chars: 18% improvement of 15s from 80s before
the patch

CSV copy with no special chars: 23% improvement of 23s from 96s before
the patch

text with 1/3rd escapes: 6% slower, an additional 5s to 85 seconds
before the patch

CSV with 1/3rd quotes: 7% slower, an additional 10 seconds to 129
seconds before the patch

I'm wondering if my laptop/processor isn't the best test bed for this...

Regards,
Mark
--
Mark Wong <markwkm@gmail.com>
EDB https://enterprisedb.com

Hello, Everyone!

I have attached two files. 1) the shell script that Mark and I have been
using to get our test results, and 2) a screenshot of a spreadsheet of my
latest test results. (Please let me know if there's a different format than
a screenshot that I could share my spreadsheet in.)

I took greater care this time to compile all three variants of Postgres
(master at bfb335df, master at bfb335df with v4.2 patches installed, master
at bfb335df with v3 patches installed) with the same gcc optimization flags
that would be used to build Postgres packages. To the best of my knowledge,
the two gcc flags of greatest interest would be -g and -O2. I built all
three variants of Postgres using meson like so:

BRANCH=$(git branch --show-current)
meson setup build --prefix=/home/mwood/compiled-pg-instances/${BRANCH}
--buildtype=debugoptimized

It occurred to me that in addition to end users only caring about 1) wall
clock time (is the speedup noticeable in "real time" or just technically
faster / uses less CPU?) and 2) Postgres binaries compiled with the same
optimization level one would get when installing Postgres from packages
like .deb or .rpm; in other words, will the user see speedups without
having do manually compile postgres.

My interesting finding, on my laptop (ThinkPad P14s Gen 1 running Ubuntu
24.04.3), is different from Mark Wong's. On my laptop, using three Postgres
installations all compiled with the -O2 optimization flag, I see speedups
with the v4.2 patch except for a 2% slowdown with CSV with 1/3rd quotes (a
2% slowdown). But with Nazir's proposed v3 patch, I see improvements across
the board. So even for a text file with 1/3rd escape characters, and even
with a CSV file with 1/3rd quotes, I see speedups of 11% and 26%
respectively.

The format of these test files originally comes from Ayoub Kazar's test
scripts; all Mark and I have done in playing with them is make them much
larger: 5,000,000 rows, based on the assumption that longer tests are
better tests.

I find my results interesting enough that I'd be curious to know if anybody
else can reproduce them. It is very interesting that Mark's results are
noticeably different from mine.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Attachments:

manni-simd-copy-bench-v1.2.1.shapplication/x-shellscript; name=manni-simd-copy-bench-v1.2.1.shDownload
simd_copy_performance_2025_12_12.pngimage/png; name=simd_copy_performance_2025_12_12.pngDownload
�PNG


IHDR�C
5&�sBIT|d�tEXtSoftwaregnome-screenshot��>-tEXtCreation TimeFri 12 Dec 2025 04:41:46 PM CST0� IDATx���{|������7b��������5m$�"�S$�����S�1����&���&j*Vd"K4�M����?�lv�������������>��{��}?����t=11+��@DDDDDDDDDDDD�^�D��������������('""""""""""""bJ��������������X�q"""""""""""""�D��������������('""""""""""""bJ��������������X�q�X�n�Vb����k��(�T�����~;J�:��CU�Z�Azt���?g���?��o���w*�{������w�eN	|;������x�~�%>-��R���<�3l�.^�x�������<��$eK��Icc�.]Brrr�������&�������V�_��P��:�9��k��#��?�8��g�r���
-��>��N�<���C,V��ys�����|�v�*����k��c�~�e�V�)S��7nd��|�{U�>��m�g��b�NT�T��=zr�T���E���|�y���y*�TL'��4�J�+��� ����;w��v��2u���������s�.DGG������Ol��k����-3�����j_V�YK���S������g��c
��j~��{
|���������.����G�^�F��+""""""""""r/3���U'w2���w���%�W�b������#������0��bH+4�S��o�:��Oh���.���8v�7��`�~�9+W�!��m��^ej``�vqqq�z�'Oyy�?�gf�~�u�?b��p~��0�G������=�b������/g=�
���&;�>�:~�X��-K�7�Y�t_m�������g7~�6��1�
�u���K����*,�wg����#��]�g��������.�V�$x�����>��S>�,��_DDDDDDDDDDDn1{"������C^2���/oo�+V(����x�u�?�k�n���x�IZ�j����S��XN||<�,�T�R��==������\����+Oe�<q�������1�G���=h����m�N���/`��`��{4u����R�"���;�+W���Y.��.��2���j���2++������gf������������f������-V���}��:�\�V���-���M���������N��x}�@���Z<""""""""""ro1{".	��qu��_�������)66�W^�A�G�Q���<���������7��
��}���e��!:������c
�]�&o���8q��O�G���+��O�s�]�v�9�������R�	���	��5��
w��c��a��U���qv6�q��a�z|�i��cY�46f��y\�~=]9���i����+��+��][���H�S�`g�g��U�l��H�\���r����C�������p+���[i��H�j�d����III|��Wy*����,Y�����/3*T���)�^�6]b��G���Y��N�x��T�T�-_���o�t����_v��A��3~�C��DE����
����INN&99�-[�X����\�|9���k�<w���>���q��E���i��i����;o3g�(�xDDDDDDDDDD��d�9���H�Q������V�����$��m��c�����qrr&���������ty��,���U�=J�9�����;���X������������r�XYY�d�rL&���&<|'�=N�=�����m���M���J�*��0���>����<d(e��`��7�?o.�j����W��o�����_�q��?O�����899��s�_g���n�,����I��?a"��������m��j9�[�f�\�����mOyy���HD�wxm`�����(%K�$r�~z��<{{�1����3M�����������M��p6l�e|C���q��s'�=K��Yn�ju0{���5��k��a4>��~�7n�����O�R�b�4~�1III|���t�����������k�Y�68�u%J��G����ik�X,���#G��@�r7o���P�\9z��c�:EDDDDDDDD��v��"���o�����Nq.�V�VT(_��~�F
����Fn���]q6����������#3g�f��!����M�F
����K����_(]�4�{������_������2e�0p@V�Z����aoo��wg�����_�WS��<i"oO��Z���T��������h�������n����7����2n����[6o�����������������6<<p��%�O���KEj�����7+?���uj��#�}sk����;w����������8;;g����5*�p���\�	)�?�8���
s�/�x����3�V���ekX����������@��-�K�{�y���cprv�t}����;�;��/������x�.^����9s�����6$'%��������)C��e(]��*V�N�:���n����W/O�<p�+��-w��Ev���3����������������t���2e���^�m��5K�.���������9��q�o�����
����!��""����'&��|������w_������H����q��9boo���_�t������\H������c�%��O<�����5:5	���'X�|'O��Z�GX�z5��h�.	���q|������8���R����ny���y�ys�l�L�[c�P���>�+U�|�
�*U����XG~��i����_��������;G��2��`�[���-prJIt=�\x<��A���]D��6d0G���;3gQ���'hn� �������aSx�J;�����q�w_���8u��y2��L�2L?�,1��W�n]_������cogO����f
9���O�<��s9v,eh����g���oG9�����<��-_��O?��i��IEDDDDDDDDD��\�V|���Lg��pj��A�����Hu*�T )1���f���|�{g��! `4�^�M��~�y��h!����w9��'K�.Q"�n`�d���3�/e���O�&t���.]^�x����[-��i%(���R%S�v�����r�
G��W���������Os|E�q���S�(Y�X��o&����2x�P�/[�����m���=_���-sL�g_H��7��~�������S��+W;;�,o���$��=��K�\�	`cc�ahQ'''^~��O�J||<9����SY���G�N��2/�������?���������0��?R��s���bcc1�M�q�m&LHI�}��^�N�����&N��9o������x���%���C��f/?6�o�����5-Z��X�77�t��� '�����ys���l�d��v��V""""""""""9Y�d1�v�S�Xq�{�&�M2lS�n=���G��}�f�7���.A�������m3v(((7�����|��\�V�>��9B����k��>)�������76��l��f1NP�t���\;K��c�U�K��s��h�Hrr2�����{M��fW��e5oVv�i�L�|��+++76����3��������9��'�d�������m�S�Or�t���g�]��tz�#���Y�j
%J�H]gcc���{#2��v�������x4h��2!%�y������J���<��s������x�kW&L�t�=�<<`oo�w�}�����������q��qv.����R�f-&M����!��x�F&M�H������l�&�F���Q#�9u
�A�Y�~���Y�|���,zo1�
H��]8}�4�G�������7�-��6u��>}����W�^a��	���o��DDDDDDDDD����g������Y�p��i��sR��{=���)����a��%:�KA�|��mRF^[�dQ��/�=�Kf��r�����s�������:�B�N�;w��Z����7�6bo���]�2ep._�}�~�t��}����:u���g����Obgg�n�?��C�r�R�y��a��!���O<���Y�f���Y��s'��<q��]�P�b%�l
���1�6>�>���������t��.^���5��n��2/^���U���	<dh�u�O�qx�	��_|��7G�B�N��k�;�_�,Y�����j�JF�C�R�R�%%%�b�rj��C���q9y��|{
��#d�G�7��|�#�!��)�:�����"99��������_x�)/���u�$����gy���\�rWWW�M�����}��z�7��"8x

<dZ����������HV����Cyx�[�z
z����eK�7���m��s�&
s#�=�
B�$\���2�Z)����J����g�R�B�,�)�=�,(l�V�W{�-�7�.stt��CU9s��E�8�u>������'����+��w���%���8�]����[�����������'��������N	�v����I��f�Z�rp ..�V<���z��v����?O�v����H����v��}������a���b��m+V,�G��Tvu�u��K��A���>m*��]����X��v��g�A�?��/������g���fIL
2����e��H���S�O�4���C}��|��kkk.�{�:u�������~���~Brr2u������
$	7m��M��k��$''��Awg�HJJJ��R�JL�:;;;\]]�>mF�����[��'OX .��-^�(C���<�\��+GL��Yv���Y�68OI���={��c�����S��~��T�X���^����P�T)���M|��~����#��};����G��)[�,������������c�7Q�
X�x���h���+�z����	'1������z����"�*,�2e����-�M�0m��k��;bcc��_}��������������5�W��kj�����r�oZcF���/i��[����_~�n��!C)Y�$������.�_�����m�<�N�����i��1�L���2�L��3O7��F����*T����`����2uZ���M/������n�����K����#���s���h��7����Y�������������g7=z������Q�yq��yN�>M���?jdj��={v���n�>}����g��2�Rt���BI8x��G	�I�v�X���{�����>��%KR�L��z���T�R�"�������������������~�:~���<�If)wC�������]�?	w���l���q�+T`��6���q��5����o�g�:
�o��{�~�:���G�j��1��\N���_~�?O�$(hs��M��_`��<<�p�|�����KE������#�X�^^�l��������dy�:�k�����d��wf�����������O���i]�x�M���?���w�>�,�2��o������qc�b���8993x�P����n���������~�����S�fF�����Z�m�������;'��:u��Q"`���������X�d1�j����%����������)�;;93~��{o!���l��A���2[����<p�`�dXggg���]��/]�d~5������?�������S�v��oG�M`��|� """""""""�s$�k������o��!������\��|��t=19�����������?��-��G����Y�}��	WS�[�����2E�g.�����������`oo��k�X��C6n�e�V��������M�Y��+W��i������G�o�._����?�_0���C�������Z�G��b�"�'"""""""""r�����*au��%����R�J���
�1�;M�=��VVV|�9�=
NNm��~���O7W\v�X�G\I��Lp���2�K��K���C�������.�R��������{O�?�[������]{����'eA(W�\j�?K�{�W�\ac�&�+���3����A�)^�x����))������E��[AK�����q��w����a�/����	�I��w32��Z�%�p���m�Ze�ED��o�~���\�2}��-�hDDDDDDDDDD�-������p���V���6�#G1o�\��w��Hj�rO]��_�R�*
���)��q��U��s��x��e���t�d�3]w��%�n+U=�DDDDDDDDDDD��z�a7bbb����,q^^���]����p�p#���s�.t��
kkk~�����`���M��M)"""""""""""r?i���v����/���#VV�������;3f�qc�����}?��s����r��<����=K��v���3=���g���m�
M��cMvxM����})�L��-]@CS������������]�I��X�z�u�m����gZd����~~/�����sy���
�����qqq��'=0r��
*0u��\%�
lhJG�R4u���~�����"""""""""""r����g��!�����H��T�_�l��9�����l�R���<h(���r������;�s�e&��w�����X����a�/k2l���$�L��fdX7��K<�XC=�DDDDDDDDDDD�����=��d������pF��o�����������sILL�w�><���qz�_���Sh1u7�q�)�qq��	�;�a{S�u�I�t��k�����O��]HJJbM�j&N�@�
.xyy��a#�V}���N��������
��s������C�B��h|���;�?x���
R��E���#������~�����\�B�l�7{"NDDDDDDDDDDDDR��bW�U����8{�}���>����*�0x�`���(�(��[��R�qEI�>�x���$%%�i?kkk�����}
lh�'k��kR���Kd��n���R54��������������5z�������=�����8��7VVV�������=���	lm��>T7�q~���#I��)/���*��
lhJG�R4u���~��3���������EGo_�J�U��vr"����%3��Cp��6^�����Ws�LG���q:���V<����^�2F`�=�~�C1�_����Lu8SX9�3�G��3-a�������S�zq�X�����~���s��`��Tb<���0��P�O����mSX�	��~�2�r��up���O�~d�7�pk�,��������w��~�~+��os����1��GgB��"���c���7`�sp���X����r��_��7(��K	l�Z��d+��A�|����_����eX$~+������p�����a?�/��kQ�!DDDDDDDD����4m���M�v(�[�����W^������g���jcKW�w6N�w���]o���1���D�kn���s��ykipp�o�?�U��_��jUr����
���������,r	d�h#�~'n��G�07��3~�V��*.2��4`T��8�s�����^���D��~�5�����0W��p2`T#�i�gU��L2*%�E���W�|��W����{"�������V"&�bf����b��s3V���)�D��EL�����~�;��k�I^���s���K���@N{Z�~�B)W���q�x�5����������]�K�;�Bs��o�+p�a��3�^^C��Gb�]V,��W#�Lz����~o����Q�r���v�"���[�)eab��GA�xTv������`r;�\�y��x�����b���Sz
yz��u�����9�6��_n�������1�!8�Isw�t��3T���Oa�!"""""""""����(��@�#��deb<Q��aP�������/�`������E�Jk�oD�W&��vS4�=<��$
��(u�d�����I�����a��s1��~��=��O��,v?a���i#�6&"g���17���������[�F-{�<�N@��|ucX��Q,�P�F�CR�c"zm?�������=�3�j��������5j5�u��������qD,A{�z��^�#��f���1�-A���W��.�����5E�Js��fN���k����qDLnM����4���k�~aT�\;���0}`{<����9 IDAT���W{�M&���}�&���mQ��9D�����}�3gHk��G�W��{��L�g�z��lO��[�����hHJ5�z�~�"�O����|M:-"�T8-jP��������E[�����M��C��~�n�r.��@pD\��ew<w9��%�l��z����}��9��9���h(�^iM�Z5���9=��c��)3�q��n�g�`�o�k�=����SY�Y>/ ���P5k�����l�9�=�F{��A=���X���+�vM+���m�w��M![�x�9��{�������������H�)�Gq�s4�#��v#p�?���	�0���3��e	�!�>��7C'�c��D���D�e� (�����x����_5�^������Wm��N����qQ�D�j���9���B�8x�6��69���D����������DE�I<`:I�)�G"�:$^"��<��Zb���(B6F��y3���?!L�FL"����I�#q�6�M�/���,
x��X�x"�
b���:�8�5<g��I��H��c�\L�#�9�o'�{�$��;�2n�J�����B	xm�]������5����r+�E���;�c�h�C
���Bx	_�'���gz�iz���� �m�9k:�GM`�!t�$��v��13�9�7�!L�J�	�<�2s�/�e��6u)+G?��%���*���������L�b��w3g���-��&�K��,b#�����kk��H�}�	|�����1�97H�9�7�b�1���������	�6����6Nx�J�� �|��|$kl��a(��W��~��y��Dwz����v�y������?�L��I�_��z�1d����h���c�J���x\!`�t��X�"""""""""���wh�kq����o�YVk(�>@&�U�H���O�1���1>)C���-��>��8o_�h��d�����f�C��l���i{(���1k���a�|1:��~rL&%p�����vq�h���q7�5zSmq0�G�16�C�#��>�����y����~�n,�:����V6�yA(�=�qo�J�W��^��p ������'������y�[>h��oc��������r��p�"bV���R;.S)w��q�n����<������~����vL������}	��O��vr����>��w<���r��h4��X��d���YT�����c������5��5��n����~��W��0 �N7�~`����F�����	;��z�w�X��'u�Tw����4}����S�D��"��������+%�qo�����a+��`���D�g��M)\of�<]�}y���xf[��c���G��o�cVxs��F�/wf���n�����8�7%�o�kc��w����,m���\���?D��Ai�������a�����a�[<�9��,�-�z������������=/<��;�o�&�r����~����������K��XL�L���7�0�:���C�3�43��;a��NV������	����]��~"""""""""r���D�����1��4/MK��V"�i�����#1D�>�
��������38��7��4s[����%��P��i;�97���lH�+�K���xW}��=������*�{3�rJ�D��c��A����P.�M�eF#���D����S��C���$(2��rQD]s����e����������xL����������>�xy����t&���"G7����E�5���`O�*��*�9���d��>F�o�W��j.��0��u�_3�(Jd�%hH�v������9�1`(������l
l��������L����_�R�!��^NI�����_���0��O��9|�'�8��c�>��eYBa��L4Q�j��O�l28cl\�E�D��������T�
��M�����x7����_O��l_���~�;�����C���pk3�^[�0i�3����z.���
w|���c;���\\o���q���.�
�]���C��8��1d������i���
�v/���1��s��<������������������Ef`ce�5m���o��=�L�%���������d�{\=�k���?�`����+F�j�'�=�������9��D1��.e�Xo2KJ����D(��q8b����.n����rQ��q�PHy��go�m��_�~�~� ,$�.���_3oL�bd���t���Q����L?(���������\3�I���	A�x�c������8�As�����������-�1$�:{"��_`���0Vq��OA��"���������K��I��("����� B__��W��K���+�F��l�x���K��yq�W���>fM�N���`����0��P��^*"""""""""�1�qn%+������l�:2���{U��E\���&�w�~8>����n�\��:7@���D�/���<�<x*����X������"���a���1��C5<j@��!D$��Q��R�F\O��U4�t�* ��pBw��k#�^�����!��b08��f8F�O��^u����<������)�[]W.���� 2��R��'>�X�3-�qw6���K��L�.��VMDo	f�ew�=�!�"1�����=�J�u�����x<�epq��p��c�\[�D��7w����95��%�([w��t��:��5�5��xl���O�r���#��X�"���n���"���i���9=s
�]�����H���$�c�n��NDDDDDDDD���#�oU6����G�]4^���S��"e����}z}"������St�����]������Z<1�D���Mp1��r��U7��A��>���L8As��Ot��0{JAlD(a_�{}#���	�P��
s�a�8��E������1{�p9��!�:�����aB�;:��~Ts���(�D���5�������1gta��ch+Wb>&�x�sg#����s��'���b��xw�;Sfw}0�r���nq'�����|�m��e/�]?���
����C|!���
�mu�#qX�
��1|�A0��|p8�����%omS�����<g����s^���"����������U)��&���z1}D�q����Cx�=�Y��H.��R����6=��`R�|�@Lxs"\������������X5���H����GbA!������L7��s�������r�p"�9��b;������9���i��&��!��E��o�������**�v��<���b�0����(K��w	+�K�5?����������%�=W��������"��8��o�3bB���S^�0�^��/�b��&dB?���f���Jz����]Mb��F_��������q��K7<vL'``$�V����L��p�����w|g�Tq��f,�&1b*{��#�a=�S�q�k��!���)C+�p���C�;n��O��g���1}q?Z� eN������{�@f�3��nO�1j��]�����g7^x��F�#r�&VVw�l������0����)�������>f��LJ����k���/~�{az?:uC��
a��DF�i��Yz:^;��!a7*q�������~F��v�q�gH �b���8����o(~�����Yl9��p�:�Y�c>yP�s����wf����{!/���;��?y#:��X7�����L^�sp���X���s�1���N`����~��6�E�V�ot�x?����";������9�s��
�]sf��9��b�������"�P���y��fXQ�sV���������XV���O6��z&>Y$�DDDDDDDDD���>G��������������('""""""""""""b�RDDDDDDDDDDDD��#NDDDDDDDDDDDD����%�DDDDDDDDDDDDD,@�8P"NDDDDDDDDDDDD����%�DDDDDDDDDDDDD,@�8P"NDDDDDDDDDDDD�������4))�������I.�@DDDDDDDDDDDDD,��q���$$&���D��n""""""""""""r��x".9�HHL�tU"""""""""""""E�Eq��I\OH���""""""""""""r��X"�z�z����������������"��k�ILR?���U���V*>����T��_����������u�)�E������7Ys�:�;VP�I�g�m��v���#;E%�"�V$�����"�YYT�{v�y��Pa������"�%""RTX��'����N�p�6���Xakm���U���(9���IHJ"!19�=�)�/m�����~�H|y/j��K|a�O����uF��v��\K���Z��+�P2}2�~z�v�wZgQ��(�a���������.*�=;��<��s���O����oQ��)J�����p��v�lm���G�9$%%cJH���\����k��u����}I�I�����������,sl'����k��g��k[gq{pz��w���yV��g�9�������6E����y��b4���*��S�w����(��64ebb��p6�V����Fis�����6�\���m�������u����+����lY���\�Sa�O����Y��N,#��o���9��=}��v������~�z>k�;;;�>T
/��T�X9��
��3s�`�!�:���Ya��Y����������**�=;��<��s���O��]��>�DDD22K���d0]K��{;[kJ,25����)��	y�R��
�;j')h�x�dV����X�r9��iI�z���7����]�f�����������'C2���?+��6s���`Y}_�����2{�t^4�J��H:�������}�,o���+�Jl��-�JR�)��;������<���5zw��<YY�����7�]�v����4l����p��6lL�gZ�k���+��A���,?�HRR2���# `$�u��Q�9������U�{C��4��������JI�BP�`����)��-8d��e�q�����\�9�W�>?�nYA����/_��oO���F�8��\�q	������p�Em/""R�Y��fn/������v����������������O��7�����C�B��MbR����������+�=�~���`N�9
@���������8������v�\���G�6�������9nW�v]&N�R��OD��|��Cbccy�q#����<P$�/��DD����_�w���Z��C�B�(EL�����\���0�-&�=W�92�����X�.�+�/�i��%J��kwZ�jc���]g����7����]\*�v���)c��DDD$�|%����s5����&�e�����A+�T���n��?�����x�o?�:v��pS������>Z��t��z��C���iS������
���qw���o���j�zo&�:H��]s�~���f�_
F��-�<q�>��v(�������Tj����wmv������W_X��vlE���Q�v�66���J��o@�6m(U�!��o�r�
K-���T�T��S��;�iS&s���	���wY�;/^d�;S�����K�R��}��kWs�p*T��3>�n������I����k�o�R�s�v�>���#�?�<��q���70q�T %7v�(gP�Re�������3������������y��T��N������kP�n��
|�v5]�v�C�N�N��z����Q�����i�C��je�YqyM��I�o�|��������\�{V�8���D\.�p�6�X�r�����,ZA�g[���a���3kK�-���������VRR����s�[�[�3<<�eE��V��X�j>?I�v�:Y�"q��A���������G�[����
>4k�i���`��������[����'�l$|�v����z�z��kw*WvM�oN/h>��E����z��O�������6�u�����{�_a9��QB>�@l��\�r����y�]{�k[�X�|�9��}��H���7+++����<q<
���������F�9���K�����=�
,��]������e��wIHH��q�h�:������D���x������q����/���G([�,���.��+U��S^\�~�_G����������'R�|�\��u�}K���q}P=@�F��b���\�p''�����M@�?�����)���x?h�������x\���(�����_�+f��{
zv����a���]������G����E����-5j����yj�r�h�����kj��Err���z"��?O��[����1����/��#n���3z#,����;���Y�t�-���L�2�-[6��=�P��?�<.\0{���?������K�N/fh���;���P�;�)�			��]7��r���f{��5h�$�MyM����:!!���U9�WQ�����w��+����>����#����s�����!C����j���7������f�n�W���8����	�y�/11�3������h����?|����me��1��Xv��~�0�/7}�}�:w�v�:�/-�l�����Y�da��������w���v�:T�^���=<�3�f�Kz)����	�3c*/t���SMy��y��`_
���������d.99�eKQ�L\\*r�����c�����3[[�\�����Y��������#c���o��4l���>����m|��H�7]��?J�.��������u��~K�v*&���x�"��������O���;�k&��
��G��6c��s���7������Y�f�=�����9�d~��W����N�����o�|)����U���l�r�>x���[�b	���T�Q���K]��GR�tif���:���e���9�v�;R�L�/��5��������3���?Fd��w�[�fa�fQ�u���v��=`kk��{�#r���xgN�
�x��o�:���$))�e�}7�jRf�N�����o%� e��I��0��S&1��������#/����k��-K����\�~]t�K������[~=��3�ym�`�[8�#GS�F����UP=4������o�,[�(�6�_K�~�Vo^��,Q�f����?��;;{�_�V�1���XZ>{���k�\�w��Q�zycoo�a������g��{�b��4�`�*._�L�%�:|������5���cS��x�"�V����3h�XCzt�N��%x�u+�
�����������2��A8;;s��5�k���+V�z������g��Y|�n=!7�5l+�O���#��jjT�n��L+�\�-�������<x���}����v����1%p"c�[<Wj��K��us5�d^����O����cM�x�{����'O���ow������������+C���O?�O��!szA���H|�E6|�J���vv�H�}��n��v������
�����F'.�?��'���v��������+++����������2�
'g����&O�������@�P�/v}�g[��!���~#��ox7m�����DNJJ�X����axgKz�a7Z�n�'����s�st�TL�~�1�����Q��������o��'O����4{�^0������+9z�W�+F�z��B�)[�,��_�{�Nt}�Gj����dj�$&N�|6J�j���/ta����D��t�����\�t�(�l��/�������O��
����5�J'11�1f�������q7�J|�;S��������G�^���=�`2���w��Ly�����-�?�r���������'=� (h;v|]��8�.���~Y���� �[�����h��{���_��R���n��?b��mwM"n�����%]b���E��Ge���Z�G��V��X�
r��g�mM\l,��e��7i��+��ov�d��Y�o�����������0�6|���������p'���EQ IDAT;��'�'11�ao���'<5K�_�"CS�vXJ{;��2�L�./;*���C�+�V-[)�R>���7^F�:������������_n����NaZ��_��mXO���S�\Y6}�)K�/#`t���=z��A+���/O5i��5k�8i"�>Xi��1y9p+	w����&�?n4k<����			,�����q?|��5k>��� ��iN=��:���� �^�I�F���/��v�:�Z�j�K����+++�y�VR���<
<��������^�>�������:���3����R��*A+���K=-��*,���)���^���#�*U���c��G����@��=x+`W�\�)oo������Q���e���s.D����7��u��_���4�6��{)]������w�q5��_���(N���\J�r-226�a��\�l#��f�s��\�a����6��P�r�%BQ�������T�_��y=u����}��������?�tx
z��WXYYWX��i�X�X�{�ffX0�K���!�g�/x��>C����xp0�D�A�^�Q��-�����o,,j`��1�w����+�>}��S�i��  `v|���`��NTR#��'��� ==

4����M]���[�n������=#�,S���z��W�L����Ax��\��o�!��FMJOO��cG��U��6�k�������Z3f���93������V�z�Mo�"g���=xeu�F$���`+�+��[Q7���Q����6uB�7j���(\�z]�������������;s��ou�������h��8�K�mM�6C��<9GiEG�A��cx�/�L����<|x�<s��Q�5k��5j��������KQ��6�2;�\�~
+W����-x
�H�e�v�����HKMUke��i3����=+��L�Q%T����CiX��r���t��%�$���Sh����;,F�o�hppv"�����<�sLKp��]�;;��5j��k�������X��V� ����=U�,�������#�����P�F
L��s���hdz��vY���s��V,�S5�r033CG�����~�������+x��Y���;w���0ej�z�g���������B_�d#Q���q��?��i��q�%�z���+��	..�)H���s=~�V�����I�\�7�o����HL|���{�V_��F���?n��U�ak+���N��?��F
t����o]��>��q���@�����Kq��}����.�-�{�^���e��[6���*_bHS�d����	�W��'O�d?���5���Q��_�v�/]�G{g?����Ys����0���>t�|[+SS$k�/�#��q(X��z��[P������x���
����a��\�������U��F�J
�������{k�f#�G�q���/�T���f����L#S����>��,������nG�`�1�������FY�1������Wy�d�~Q4�v����x��9BCO�[_����Z��W�n=,X��9��#!�q����-�������Fzz�,^�����N�:��^E���6�����w����[�~�m���FT�M��]��89�e^��n **����ry��UMWt���SE��5Bi���8��7$�$g�����Fr����QM�"9Y�������S��S�u�d�|��ma���-u����;g��������s��?��k����.���5z,�?���B������������Q�SRjJE~~��#"��N�����L�1�W����s=�j��?�������u�	��i���	����/^ **
iiih��e�D\��+B`�W�F\\\v"�N��7IMMM���T�XZ���iUS�h\������.o�]��&owy��w
���W�����q�x0�L�K��T{2N�P`������s���G�<��?���������Q<�y�h{�I���A06��;�����)�fW��Z[�X�L��y���Y5@bbb�o�v�|���{���n�z�u+
������m�D]������!�����Fd$,k����_c����=%5���8r��.��-�q��1��������B��1�K�oh��~�q�-]����>�6m��VVy��Fl
���]���tC}[���%	���	�fo���+8u2}m��h,%����ajj��. ##cG{�����033+p��^�����[Q��Qiiix�<��&��,�G�}��YI����ky(�JT-��_�m��;�����@MK�
��X�*��go��Q��j5q���`dd�>}r'>��8r��Vo�Y[����K1{�x�H�������~�n���q��U���?��o���8|�P���,Y���i��<x�@�e������������@}[9U'��7US7�x�<�����,���D[�d���p@�;B�UTO�m���<{����7o�L&�{}K���t;:��x9���7"55����4���P�zu<xp�FtU�^���*W��#������>W���p�g4kI����_#�c����I��M?��@5"���R�*F������	���D"��Qc5�!���g�T����8""������=�c��(�H����d�|�~�]8���Z!55����8�Z�(���$�x�
4n������h��<k�	!`'�c�w�����}f�J��a�:\�xW�_C�� ����6���zoH�`&�\\\Z`��9X�p�]���_����q�m�/�N��-���g��-�e�F���`��5��fS*����������f��Y�#�J������"6��Z�8pp�s�_�ts����K��.\I��d���R�J<���f�S�����[�`������]��Y_}9��]���%>��������������U+0���\���{���*$���s��n-F2�������������U+����6u���\k���8i*���#h��->�H����������H�Z��M�b���S�M���>����{;!����������(W�^���>������Q��Z;�'�v�k�)���={���&M���T���Cx�y�� �:0R.�1C[�]Z{�n��000@t�m�j�r�B����g�_�V�e�}�Y7u�}Y��K���l�����odd|5��
)?2�:���
�L�$.�J[��
����
C��:�K�=|�G����'�VM{S]���X�h)�Y�zzz���I�Q�2�y�"!���q��Q+��(������SgN�4�FMOK�����5*������}%^7J�1��&b|��.]��k
L������q?~��w�x�GMy��7�;du���u�6��o�Q��b��y��3����J9���LN���r�r""���7"N")6���!��_��h�~���uk��BBCq��}4ut�H���t�v��zzz��#��������o���������k���n�B��xXf^8�x�A��G���6 �H���S�d������~>:&7n�@������3>0
�aaah�N�=22J������i�gc����k���1mee
�v;���ky]8��X��H?��	��nb���jO���w�����[�kee[_���!===�����w`aaSS3��������=�kl����=��O'���P�/[�u�7�k�]����Q��0�a���0�����D��7`gW17�6o�-Z�Dsg���D��28;�@S33U/5�{��];�k����X~E����SX���..po����.���vv
`S�.v��	))����ALL4������J�������x�ysT�j�
"��`ee
������
�86u*p�w� ��s���N���O��~���R�Q�iq�_�Zd\1��������^�x���Q������;�acS7_'�����C�J��������If��={vC*��uk��&�5.���j�{���#���1WX"��?��u�Y!�%9Y�}�����{��F�

�Bt����9�q��!9��}*v���j���������[������-�L���S�|����HY�f	��C�7os�h�z%
�"_��V�����s��T���M�TV�}��&��h�f�w@�����.]�X���4������M���e���%������cP����7@{��r=���#6mZ��C���Y�1���!BN��w�g'���_�t�.]��{{���k��w���E�V��)Y�+���;UgI�wT��������\���c"G�Q%S�D��H/&����Q�u������������h�Bl�����^��
;v�����z��h��y������v���=g.���'U�VE�=���������m�O��<z�{��/����c��Ex��:xx����x��!j��Y���WZG�����������:���Z��|x��0���G��M4R��K��sh����^{�������4�.���{���_@���F���p,�h��n��A���3��e#F���}ou�D����������HHP�����+7����1��y�a���p^����c��@ng���O?�[QQX�H��c{{�n��gLC���g�.��Q�h���DjJ��,/��?m��TZ���q��dd�#����6j��,����z�
|�v5�:5��g�^��t*����KRSSq��U\�t	�5kf��k�����/��B{�HKK����fo6G��_�����Tj����z	���AhhH���Mq����R�
��J;\h�g���x������'|����#&&����������o���~���z����F`�D�7
m�����H����#F�zu��@�����i����
+38�_�stE�u�^�����K�;��D�1�����D�{��/��7�t��|����f�zm��Q����\.���!���W`���}#H���r�����JCS��J��,k�Am���8U�[#K����s��c���������.]�-�>���A^T@r�j�������0{�4L�45�ca��6�����sf���tzy�����������@����UP��^���2	GDD�]�qz�3�*-]���<��6v�'��w���P��-��,�����;����mS'O��E1s�l��Q���*	8k��^�3g���L�A�a�O?Z�h�OF����;�j�j�d2x�����u$���i7.�wj\\,�F�������4uz��G���{�F�I�R�%��������V`���
�p
��C��Sc���dMI��s���*|J.�����/6m\���'P�f-����Y5�?����Js�v��Mh`g��������+���"".�Z��077����io�Q3g���������1r�'V�{��po�����aWX��u�^�������Y�3���_062V�(�A�_���:^C��]��U1m�,��[���b�����7@����^�����'�US�	)�J����X��?����u��w�"����e;�?��'CO���)z���m[6eo3|�Hl�q���+,,j���#�ze��&����P*�y��P�HLL���!d2sH$z��AF%W��%��j!����=�Z�ja������d=�+��]��a�����Taa�!--m����7*v��7����������u�._���{�hPA���������:����Q��JI�Z�d'���y���5�����h��:u�������b����FD�%��1�,�5��.�%�7��/A����^Ov".�g����Z����������4ch��G����X�;�-��;+��Ei�;w��c���*�r��+~����dd���o���c>Ajj*���
�������Q������K���=o������}]���:�G���::���������
�,�=%M������~}5;mNF�@Zz�F������Eh�q��������	�@������s��4nn�����K��9{P�fjJM�t�B�����Kk���J��8z$7nD���+����Zl��7h�\�����X�bM�c}��������{�Z���2uz�G��*���M�!h]``v���w�n�tYY4�s6oyY�p�n����T��?P�����<�Z^�5k��G���Q����{�|S�Ag]�v�dd����6cv����
�m����g�����k���X��A�������f��htcm��������2��ON���~��F�
1
��_���[q��I<{�q���i{t3�:�
�+��	8]��iI<|��V.��sRQ��4����������1����K�����b�C*����G�<�����k�>9GC���GWr��Cjj*�Y�k�W�8LDD���#�J�L���a"-�rty}��k��*�������5���U����1v�T���i�d2s,�_���_����������t��}%�1�n�����e�F�D"A���MP��m�&����\����a�b��L����4m�P(]����/����A�d2s,�[��[7���p$)������.tJ�2�cj��}��HLV�~�W��T�O�����j�>x�@�N]�j�&$$x9�-��9G����-emwW���v��,Iu+IR-��l����5��B���<J5*��F���[O#������r=�==m�>9���9���$���pDDD�Y��c�zz���JI��T_@__}��&�J*=] %��k�i������O��������#����(���u�^��S�|�S���q���kp��E��< "*���733����i;*BQ�����P(�P(���������8����PTx"�����vNa�.]9�(QG�h��1&N���5���u��O_�����?��S���55/����xz�3�d��:X�<��MR����|Y��1���HS�}�5���$���R�`j�9��!)��:�J���k�H]�
C�8?���i�����vY*|����HII�T���FEIII����"_?��@���<�V�6���cI�*qV����p�Rm���z���a�F�����={��j���u[�:���A��sv�h��1��q�����^W�N�I$�?*.=C�Er�i�����Er�3��;�^	M�6��sM��>i��!j;\���K"�*cT��������h���f
,���ga+���XE�~"""R?m'�^w������
m�ADDD�$������@rJZ��o�1WA^$�!5��SRR���%����*�&�;�36�.�n���o��7�t���q))�8�,��'�}4��u����J���=5�^2u��^#""""""����������0���'���@�k��Jz�@RJ�#���`�Y&��n�����)�����d��_�����H3J��KT���[gE������=�[Q�HMM-gi%chh[�=:t��/	���^A�z~�ue�6��x<�v�����4�U{�^5���t�����C��C�~�X�����9���(?�%� 5-��)*s����@zz<M�CF�@rZ:RRKP�H��,��k�|��Z�R�?��O����_P���4���+#���R*�L)`Y5���:��]~Aq�c;Mx���W���.]���0F�������?��j}~y�"""�G��8HIM/��d�z0���@OzzU�e*���[ZF��E���@�&b
*��k�|juP��eE��i �����_���Z&����������O��Qq��i�9fm��g�.��e�J����J����c���{Q�z��qH���5?��p�"""�%jO�eK���h8SlR��k�|R/m�'�����8��0�^ax�}u��O����
���01��N��|�2��]~��(����qH ����]*X���R�Ea�����!m�,�|~u�EDD�+4��J?M%Qe����Aj��^�DDDDDDDDDDDD�Z*h2���������9:�������������^/��2/!���32 8o3UU��� IDATr���)#C C����]���������������,4:5ea��$����F�DDDDDDDDDDDDD�����������������*#&��������������4��8"""""""""""""
`"�������������H��#""""""""""""�&��������������4��8"""""""""""""
�!��� """"""""""""�l8"�������������H��#""""""""""""�&��������������4��8"""""""""""""
`"�������������H��{���j;""""""""""""*%&��������������4�@�P�>��������
U�V�vHDDDDDDDDDDDD�Z�F��)p`�$5{`c�2�sqY�G/��Q=��uFt���&rw��.��rE@%���m]7�n�������������������+_"..{B���#
���������!��z0�&��0���=a��G�*/L�W��x1w����M�$�HJDDDDDDDDDDD�i���DDXMo������� "1�	e�o��m��j�z(.x;��a�(O8XY���x� ���N ���4J�H�o����=��
����C""""""""""""����F�2
A{�a�k��9�u�2���2��Cl������lS��"!
��D��m��'l�i[��}8�C:�B�X�����'$���+���5:��Y��z�yD�2��\��{9dV���J��=aP����1;�lsJ ��Z���ccW�$:�0������-���E�?��?�g""""""""""""R�2�����c;�.����	|����S=��*�_7���Uq�<����0�w�������d�8�	���q����-Z�r�e����q�F033Cbb"������9���A�F����pDDDDDDDDDDDD�V�q�p��@��7!�P�{x��A�W�C�k&#� �@�^/����.0.{�:-kd�6�pY>|�L333@�6mP��6��������m�h%."""""""""""���Lc���8�p�,��-]����{��k�Ee�!����~��TY�p*�J�ey�0��2��@DDDDDDDDDDD�:*�����AP��w�������d��tKY��*#`���rZ������!���#�d/����'q/����6���C���Z���������������*��8�Ua�\���mg�DD���}q�B�m��
����� ��k�����x�L&��3g \�v-\[�Nn���-�_����B���#"""""""""""R�
O��������K}�����7���:�����3h�B����`"������������H�$B�� �h���h��m�����n<NH@5�j022B��}5��CVBr�����7@��-��k���J�e�h�i&��������������SSi��� """"""""""""����#""""""""""""�&��������������4��8"""""""""""""
0

�vDDDDDDDDDDDDD��D��"�DQ�����=995��R4�)ObN�][wm�Aep<��N��Nt�D��N*/���a�����a�����a�����a�����a�����N85%�0GDDDDDDDDDDDD�L�iqDDDDDDDDDDDDD�D�0GDDDDDDDDDDDD���
�������
WQ����}u���J�AK'����,� 54�i����5�ki;:�))�~���'��)�6p�:^�������V��FPzMXI����QGx�|�-������������1��!p�&�jxT����k|��:,j�xYo�]����LXo������q����8����gP��k���^OO/`���Pc�W�(��`�������e�h�s\�0��Gb�p���iQ�s���
������a�/��|��
-��C1���tNm���O:a�Ow��$��n��6^�|��6�v�+�x�o���o&����P,�|";.�w#yn�pO/`���p��/V�t��>������'����v��<���6�C�Si�����F�����7�#�=$%5[����[�j����U��	q�(1
�B"������wP����W��9��2/|���~��{����Sm�F*��r.�=����s�X-����E+�b}�E���R����6����I1�c�\,�����#�h�c�V�:����V�#�`����X�y�W���EGP����cH�����EX��,��1��t�~U8���M�c�.mC��������|�5|'3	G�Mj
��+8y�)�[U<�x�����M&U��3vwt���L*h[����9�0��Ju}������h^,&�����<�hE�{4)�sh���g�5���{��)uP��38t��{�C��
��i;$*���=5D�V���CR����k�������z��p���a�+�p:��������$���H��i�sD>�D���GU{���{�a�BvD "�2HO��C�c��Z����\B��~�s�D���� ]��a���T��m�Hj������]"2Ih;��[�s\��8R�{y}�/�s��x��E
���	 E=���J������T�R|O���9/p%�n5@��=��~:�?��)���J-�!N��=�}]�zc��V�a��II��cS{8Z�N/57�)+JwTkg[}��{
���JID�}%���=�Q_
S������R�8�',�|�����9�pDyY84�E�\~*���8�Pm�����V��� t���#�x@��w?���>1���}u��M`����E�C�i]���s}�+���SS����:#��hng�V���G�?����iM��Y��=�����s�,Z)��)=`�V��������J��rz���X���C�S�q�<�i���sh)>8�4�!��'��e_��t��$��\
��X����^:�}���V�f�������>���1ic��V<DD%���;Qf����c?���_pDQ^F��\��]��U�i$�����o?�vd�9�;�-����)�����5f��F!����M;��qq�(�{"�7����8�r�]Q�Y�f�{;�r_��������v��2��~�uC������
V�8UH�k�4�.�{�j/�O�uq�r�[r�Y��t����^G&N�%G���+D��:O�q�
����2F\�
$v���Z3L�t��������^g��a����K ���
�nLD�&I���U`QM
��g�7����y�X�t6��K��G],�vc��('}8���?�=�c�O`�^#�F����R�6��
�b��080�vH�#�)�j��N�
<�\���#1��I�����zm�=�!5�}}c�+�{b��Fv1�S^����4��3�b��X�p$:[�PMO������R�8����0a�!����c��_p6A5�r����_������ql�N\��}�8��*��p��	��a�����+_<���`�+,"�Y)����-��;���s�P�
�R^����1���u��r1�<L�P��?8����7�v8�E_��z����8vG��h^SU��v'�����U������u��8V�3�����t@U���V�veO����=[���n�5����8]���c�`�4ti���@����}ulx1��HO���0�# %R+7;���u����������|�:>q)r�;r
��[j;�������x��Sw�1,<F`�OgN��M9�g��`l��&����6##�T���`��*��S~���D<F-x������@D�J
�����%��.X9t��6y�Kj�������r%~�7C�T+�oH#c������!�:����N`�G{����M�j���{S	��e�������v&�������R���������d��]�;��Mx�����;�1-���V���N]�;�}8W{�=�(�S��,Vx��\�'''�F�vZ��4�I�)�k���0����`�����a���I����=���:�=���:�=���:�=���:�=��SY����5�`�	���J������������������,Z�����y�D|��s,5��)��������������JZ���D������8"""""""""""""
0���G�iqDDDDDDDDDDDDD�D�H�9"�Dij;""""""""""""�"I��T"�x�	�k���0H�����z��i;""zM��Sy�n��Hx>�=�""R�Ot��P'���������������H��#""""""""""""�&��������������4��8"""""""""""""
Po".E�S;f����a�5�ZwMDDDDDDDDDDDD�*Qc".w���}������v[���p7��D"y���
���a���PK:Py�[�g�co��s$�%8~���WN�+?���>L:,A�Rh;"����v"(&Im{T��>�oc��w�y(�:�Cxb�����3�nmI�A���7����^yQ���Na��w`g�k�����������_���
LM`�1�D��;i���_���^�v�����C���a_����=A��=`g��.S1�����O'�gDDTAbNb��3P��iiO��?���G������	^;c
�Ty%#]����>{��m��B���`r�7an(���'|VC\Z�����<�II�B��i��cHS��T��_������{�}�6D�������������(��'80�%���������y��}:B���HF����6����G�n��x�����	��c�o��>Q�]��n��s�$#buo����k3"�!Z�F�y��c%�]�U��t����b��8�5�U���������?�&��lyt��c���JH�o�6���}�zOU�����'��>/_�*a�+Na�[#��|��%�6� i��gD�~v��?�v?���������D�D�jL�IQ���X���L$��mIY�����9���2��w��`$6^,��K~���b����=��'A"z=$^���kt�����*�O���n�0�K�b6~����B�ubo��>����s��Q�.����<o-�������6^���s�Q�>���q�����q5M	�R����G���n��
Y���6BF�a�9�����KF���?��X"��E\�X��$�i��~�
���G��j��"����x�P�%��d^t�E����1~�J(lB��Dl�	���w��&�"���v!6��yR������r��1w�|��Y���/�+)$�n��*_y� �W"������z/)������O(���Fq�^S��q���}xA�l��h���M��;O���`|�*Z)��H��y����s�g�kX�y�\��O�`����_��E��)����DP�	f��G��y�f���GP\F)��d���EU�iO�c%6�i�BI����Q\����B�MgV��$DT��wjJ�T��+yw��7��V#0�46h<<��7�����;3=HL���1�g�*H{�������!�ML`��	��? $^ j�P�=� <Q�#���:D)����=,!1����,��D��Ryv5���a�uf������#&�?����j$fVp��}RU��Ft�c������������`VV/�f}�X�z
.���.����M�`��|�;����vF4���>+���&�28����2O���Z�1��5T���8l��I�-��LzW�k��F����z9����tv�������)�k��>zv,��nMaW�=����u��J���,�{��99�;�>���������q�v|:��>���`���PB���_�G��pl�G�~X�wfXq
�����$t������������X{���@����[����Ij:�����JT"|������_�@���pD�@����]n�1<p��G��1>��I��`e���{�Cq�
��u�`��|xwj��\:�w�;�J���x������?�am`���������X�Ul�4k�]C��0��������������FDD�e��zL�A��-aW�v]'a�����l�����HV6�W���j��t@�K���=
����*7���:��"_@qx)��nA������g���v�;����#:��
�j��v��0_�t��>���S^�����d�Xt����I�"�;x�R�n�s���Aqx)�� *|3|�zam��B�P����>��Y���[�J&�U����D\��"M�$��2����HF���������y���H��<�� ��Fy j��8���\fOk�������66����/G�Em
�w����CT#���Y���@���������~B(�i�j�8x�gs��3�s�=#{�
�VMa�,�����
�w�[0����}o��v�H6��G����XS&5s����>r�7t�����W~@����|8����X;g+0�Kx����n
����)d�Zp��
����^@�0�	B��=�FD�����2c���[5D�#��k;�:4����
}T��/�u��8��-U��fn��X�����V��h�f�p�:kC��������}G��<�����y]x-�	k����KX7���A
�FN{��m_��;�����&�p���]#+����f�
�����YJ|�%����Q���(�5�2Qe���:�v����-���P��>�.B��#x����K���-C�f�#�(����5�o�L6)Na�[K��yw�����n,F~w��F�I�q?]HB��i�,7��Op &�O��2����5n(zx��cC;����(7�U���\���{�����y���{������RUf�I��c�1e���#��<g��r���G����#���#��l�|fSx���*)�[�����$K�q��w3�
�z�vpusG���J,G"��t�P�gW���_��W���k!�8r<��I������@��D����G����0��=/���	�&��M������O�����yG��t�j�zB>`�<�G���[�-mEw�S"!���0�EF�m�Vq��=��E��40m.��Vmo,@�/�"�OS=T.���
���qbM7��W�
��OK}a5d���'�;	���[��.�m�
�������|�A�oa����y������@"��c�?:���#N~/<e����������l`+������&�)c�w���e��Wc@�G���
qb^gay��b�&��R&P�]�&<1Wy��eGS=�6bYxb��������h�H������\x.�W$�
��$�`l"�f�%R�H�'�l;�>��	o�:�s�Aq�a��yp���q���tE,��Lu�B��8��h1s�u!���&.�7(^����b��!�R��1N8��'6D<"��������2Q^x�?�T�84�]8��'bSU���%d�����uO�LnVr1d�u!Rb����'��n�*�a�q��=q3�G��\S8|�O$��|c�D��+�w[{��wJ�=�'\�����E`t��
_�7��}'�b[U���p<O���\�Dw!��D�%d����0�A���b{T��5�m(�m��r������ ��D�����u[N	'������Jq�Y�H� ��J�U�1=)�/1�����tKl� ��V�Q�E���	��u���E�H'�{
�a�2�_Jq3`��^xP$�&���������f�x������gB<<)�wi$\��%2�k2�����ERj���"���M:�lw&���B�r��)b��8��4q"!C��:B8d�\���������^���Lx6i+f��'?l*dN���salP]�����$!DR����A��#�"��W��TO8L�W$�9��6�Kx;��� y���%�.Q�w��
�������Xrg�� IDATs��*��m���E�&/!�P]3%�N�������C3Y1~S��}�$nn����sJ��n����!����!���]UyE���2w�G�*��E?���fl��4V8���ss�PaePKxN�*�b_���U���Y�����������2�5JqyU��L�B(D�_?�2x��uX��t����'��d�����.6��w���0V�X>X����������L������["p����}%N<�-��K
_%<��k"r�,��N
Dw�`��*D��-�_G����sb~�F�m��=H��'���c���rRF�F%����a�h���C���Y�P�:1�S7��\I�I"ly?!o����X�q>*@�s�$���<?<)��/6\x^�k��kv���DX�����9��g���T�k���K����p��&�2�0�r��l�2��FN��^x��h�������w�&��<��������U���-�+\Z��O_��t$/	��M���B$]k�5�~I�OY!�����H$=<)f��'<����:U�LM���E�B��-ke�SHa�{
+��b���"!���0�EXe�����nM:��{.���8�]Xy|%N�
3[Zc�Ab��H��'G�
��-�6CN������K�������*�[L{���$)Nw��'��E�w����C���D�
q�����f�3��'��u�����iJD�����&�poe���B�%�#�`��	����e�:�8���
���4���pD�5���}��0
������	\�5��Y[x:Y#����O�|�<,���������F�X���Y~3�=�3������`�1����{�/�w�C��;t7J�xv��wa�1B� ��w�g[x��M��t����������@DB��7i=�� ��b�����2�B���Pd���?��������OS=�^��������#|�fa��IX��N��wK�<����?���)��"�J=2���6�g'W��fm�`e�N- 3d�p4}��%`�.����.�[� o�n6i��y%�!3MC����~�������a~_�<�=A�o"��Xxw���^c�]�2�V�����
Gw'���*o#�b<�- 3x��y�w1~T��Z���'�r1B���{y��6B�q��t���� ��	� 6M��J�
=�����4�h8k����{�	�&��y��������F?=��><G���t=�����b;�?[���W�=��A&L����!�Z�tP2�6p�y�(��9U,�p��	rS	�m����r�Np�I`l�.
�������>�.�f��p�5�U���t�	EL,i���	Nl�����(�|�Bl��2��=����b�ic����5��v�2h/�2G���v��.�06����ID�5���I�G��u�Dxuj+������Wp��5�����sa���#a]�	:�������Q00���7&:���p�/�lu�g����������P/�����)+�$�dH����6au�6��U�VAwC�T��*�F�k�}R��Z��+��X�q,5�t��Ks4���q��$z�* ?�(Q�����c[��{�9�������i��������KB3�>�cp�

���n�-�{�Y#����b�z+�
|%[qY~GR�	
��D�}J��6���}C���&�S���G$&������9,���w�h����8�/(v}�D��v�{
���=$����d�6b>�]kI���Z����Dl�@��=�������N8���i��`��W��2�_�mY@��v$O{k��W}}��<��XR�')��Yt��S):TL����~1X8��S=> ��_:��e��`v�:�7
8W������)xk?���u5�	w����W$
�����kBQK;o�M\���F�c��#:%@�iE���.�����X�k���sB�`��y�|G���t�a����n���:�����hS�H����^��u�$��l�W�i3���1G�D�����:e��n����{�~|�((.�1���n�U^�{��xo��vM��z	����~5�zQa�����]�+P��#6�����7�#���c{b5������:��=q��J������c�~� e@&Sw^���i��
D��T������Xm(;���J�;I�
��_N<U�����@�����Po���&���x~�p������w=^�6nE�c(�]���`�C~�����l/����y��=CT�6����W��4���+����n0WW���v�	�y������|u���8��g��}gU����������M�8;L]����
�����N�m>N��x���$����^�q�y��U����yf�r=������C��
�e5�A�����f��Wa0�O|�V+�U�t�P�TT�����1�e�A��9�_HP:��k����t�a3 @��P!���( ��[���x���n���zi�I�e��;���k����Hzu%��� ��-6O~��&���4<��q-�=�m�7l�������:��.��Gmh�*����s�����bT�������U��s��z���L`�_���t}�5�/���2��,?����1�8^�F�k+��o$������K���q�Ip+j����oH�����B
�8�������kkU�����j��B\0JP�|)@!�TC��oyu#�g�R�����C[���Ex�lO��?�^<K���J����:�Y|_�.���>!�|�`���M��Nw\(��z���J�e>��3�bu���3�����W^O>���
���LC���a����^�=�s��#��'�2����.w�41�x��;=h�ch����!W���z�h	D;�E����t�����(�����%���8�t�SX�{���G����PB��K�M;���gT�1����m��T����5�����5TS��)PQO9��g >"���o�:���0�V��MdM{��)$��>k��VN&n��'�I�����g����{����=����F��>S���[^I��W/\�w-&�|E�;����p��>��K���T����"��S��3y@@{R���������|���[�K�����z`�����[��mj��\�F�A
tR5��\�9�8�|��J�{I�4��^W�(�X�!}�
��B��x�]GV��0V��LT�
mG!�;(�u����'�sQ\�9�����7��1��qC�+F�j����t��V�>�G��_�����U_o^�����������!g���x}����'kq�~�{���\����l��lv�����d~�`�4��;�HyW�WV�R3n����!�E��:�N��h��0&�YV�*f�_�������sm��a���?687��Y@��+6L����v��rWW\+���w������m�\����,�>K��d����y@{������>_����gI���Q����Ii�dQ��pn`����z%J��d�gq!k�d�����_&{�Wg���S=J������1�F&p���.�L���Q{��
���x��*��C������o����6��-
�O���oc&I�v��*t��!Sz����v#����(��{�_�n�J�����9P0���:�M����6��~�����pV�a�����*
��$�j�V���xk��2t0�~�)�K�P��A����2�>�R��O�-o���+4��|�����>���?��x��z+UZ���Am����G�i��Ow�	!��D��"}�\�C�����>����L�E@0�!O�h�6�{�!%(���3(����B�s���*.��O�G��t���*
�O;�}���9�����54���KV��_W��1�����S��������Q�U�Th�P�`�����}e����^A7��}-�7odM��D�b��F����*��#\m�����wf��voy;�!W7]v:M�h�*|5��X�q���;I��P��I����m�%��u�m,b�������2{{������zF�W�Z:�Q5�V����
t�QI�K��m�������:;���F��g�������?�,�f��d�w�b�S������V��wv�Q!Z@S�y���$g���������Y��t_��4QG��4��\��:�w�u���S����������E��&��X�n%��1kg1]OP���s��8��
��?�w��L��8H��?����	t]g�k�`�/�L!j�<����]��yy���;��k����������+��m�.]�x9�&������F�zS#��+QC���I#������]�r�������;+����W2w���������:p�:p���u93����QwWp-�C��58��'c��h iH����!������sW��QE
0�(

�(�����_a��GL��^�F����p9�G
����F�����
(?���g���|�}���V�}&�<�JH����#)���NW���[���������W�hW
**�����^L���xK
)��D5��H?dG��=r^XD�����K��V�ib�!.^���}��ITW#P�k�?��u����gi���������.�Du�%HE	hTVw�5�����l��h��>����dW�K���;�W�}��x��C���h�o�2�v��]a���3��8�h{����3�^v��w�;�1�~�/�j�)X_�/�Nx�x��D��t���������m�F�Q};�q?��������	�/.��#�Q=:P����
L���Y��}����|�4��`!���������������z�������@;����2x�6��v�n�c������f��Q��KB/���y���>������o�w-�1��(�����;��/��s��8���7��-���IC�6����16���_����c��a�����9+���_��pQu������&>�j�=��r�]�6��l~��G�]
�7�U�t��A1k�HX��<����Q:��V���e��m�T_�XU�Y�����7-%w�Q����oPXu1a���NP+�M���`9kw���Z9��!��{��|TS@0Q�bQ6�'c�l���(��v�5:�����^Q$�+c�s}P��Q�z)�;��4}3����3H����*���P�v�C��v�kK)�hT����(ZY�3u����k�d�������Y�o�3�$o�xf���{b��5y���v�]rW��w��B�8Z���c[�'�1����@{L="����(��:r#��r�u��{���?�����m���~m�~�X:uivY����^���m������-F�0u�}�e��l{1]��c�s�jl���������H,��>b��-�O/�U7��C�h)+v���f�$.���g�5F�F\�)y�r�^GB�[�e���fu:�4��
�c�������f����w	���`)k�}U�(\���!��d\:KS6����}��~��3v}�?G�5��u�$G^���x�R��z�������##��G�(
�A�I�w��O�4c5�.1o�D!��3�Q��^�#������A��|�=�����;p$���2l�#���$i�_H��e�c�{<)�5f-$��u�+4��J���I�?6W����jq���4���$E��p�p��.�2-�)�!xV?E��~h4�����e��GY?���#�.��)��d�����,�%�=����,!!:��>q�G2a�����dw%���>���_c�!��+���%�����
�������������M��n�"�>�U=�u9�N'�&�!���T�S^	U:����O&*,���KP��]w���*	4�I\�����J�}���d����@2�?������(�e�+i�U{�2�w��_�����'���!]��2^��j<��a�#OA�+���&��>N��t�,fB�<AI�8l��h�����CvW�FLX�Kg	!�h��!��� �_/��1~�q�0�?C������JTI&���������H���-(s�;Q�O�c9:�4����I|��D�'>s�^���a�D���X�������eU@�u8����A�j����'�I���QS��6���Me^j�n �` ��8�S���5���%��g�2��/���&2^��_
#�!&5�����J������@��q�O)tu{��n��	/����;���A�����_v�a��������`k)o5w��vX�6���#�N��n��O!�������~S;�����p"�a4:,���I������6G�.
+�$�O=���h��|�����U�h�������i}�_�3���n����?`Y7��h;1q#��a��^�������!�Wr��!�� ����P�5���yY����zQ�(�97`�]���$9u�9`��B���0��?��:Z��!J�������>���!������G���0e�����J��M�#��j�'��I�C�h0`0�����������YG����c|����7�H�B��#%�Nb��l4�l�|6�����W��_O��;��g������	����u���Ex�6��;I�����C������b9)��(iV;�c��;-��!�`hk���v�d����k��X����M�o���/����h9v�V�;������8i(��M��w�2`<I����:B�����e"!D�e�u���������;�B�sWy0��F�S��K�FS6o ��tN5�_|��76��)�e��~
q����\����s��A����������I�s����i��=�w�������]�����L!���d���r�U��{,�����{��/u9�m"��X����;�s��I�]T$?i}$M�)�|��f'<�sP.+����em�K��'a�
��y���\��e'��OZ��!M.���gP���>�	�'���_�/����[��7���B���po("��rD�m�*r�C��x��B�|J7��S������.1����p3�#����pB!D+q���=�A��}�0��Kr��B\��&w>:�O�����0{��'��:�iV�6{���B�c)�H���u�$2�y�C��|��=q<���M,��<�����1�&/����Z��qU�pf>���id����8!�.�:���5&d�a���8��~F!��H�����0�T!D�!���K�V!DK�����4B�$?i}.�4��B!�B!�B!�B�[
?��f��p]��B!�B!�B!����)E�p9L?B!�B!�B\>�����4i}.�4��)�B!�B!�B!��	HG�B!�B!�B!�?��B!�B!�B!��' qB!�B!�B!�B�Z�d�{��`�*�=�L�������-y	!�B!�B!�B!.
-7#���w^[�71���0�	�zx{�G=�bW��x>"g�"
='���tf����6�5�\��03�����'T�|��d�������1��{b0����u^!�B\�|�����,�`0���;,���_�>l�2��1��fg���x4������[�xo�v-~��{�S\������?�����S�2�u��#��@�����Kq�V4���������m���]m�B��9����}������
:�r��g�l�bhk%e�7��/�7�?�{�� ��kp5;�j����$�c&Q�;��/��%+����z�|�H�� qi��t�V��0y#o'�O������9O�w���I����B!��R�rq����_���A�����0�i�R~��n~2��,�A��Ex�US�'�sn w��(�=]P7�-\����8L��V�A�3�Ii
.
 ����`�s%�\w��B!���l�~E��kHZ�	���k��
H�O��}��JW���_p�����QJ��^�3���Y�i�O�o��-�G���O��S�^�������c-�K��/�?h�'�+^���������9�v`�_\AIs;�Z0�<�2�����g?��N$��o����Z��o�wE���m������{B!�B�v-�G\;���v@�~�Y��������
)��w�9�B;��; IDAT�h$��Pf������t[�
b������!�D�����y�,�����}H�-���n����Ip�%���U&d�����o
��V%|X&��sI�]K`������+����d���M�������N��
���������A;���?������������|�A��}h;�F_c8i]��{�:1{s��F���M~���0�=�zy����#�lA��2�������B������v,#��>��`�h%>�uJ|:���Q����^OL�6��c�AT�+0-��f�b�
�u�Wz��Q��i��0b�:H�������9+�B�6��V���7�#����I�'QOm>���/�$��ArW/"����TS��H��6��^A�3�q���F&f�1��XBTL���a�d����h�������!��t�;��z��7�G��{1�����K�N�����P���g��1UI��I�
�h"j`*9;����w+����1�
F������o�}����#��������do�_O��}�RR��J��o��#�G�����[��;~�
�"�ly����	5^�1�N����S�&Rl$.?5�����Mh�\J���U��e��_}+�=��_��E��N��G�w�ExX(Q�f������������G81M&o���E;�>�H�%�@���#g����#F;���?S}_QS��S����8g<L�%�({���*�g�v�%�'c�d�������(Y>���[	��ns0���
�V�8����)oN^~f��9�}%�/�a������cN]��:P�+�i�Z:������_z��{���#f����pb��������}��e����:���z�_��m|����p/&eP"�����~.����F��$N[�_���0K�G5���'��t��CYRZ#�=�I=���y�Jd���~��H�J���qN���W��J����@�a�m|�����p��~h��;Q#-\�jD����s;�a6�V�W����a��E`G+}G>���=6������#�Q��Bk$��������Nxt)3�cD������F��O?{3�Ww(U����!���C ���n�`�1
_�3���p�q�U���oJs�?@;�o����1,�������,b���s���:HNB81�lC�w6�|R�]��^��w����3��7��B!�B-����<7��$��}�����R��������'��h�p������G���;P�;����{�n�7n!w��K��������^W�IZ���G"h_�
JP��C�k��
A��;J�>E�coa|�O$t�(|y���Wm��u���a��;0��aQ��r
�_���Cd����,�����{�+I���P��.��*�d�����O�y,�������)-x�x�?���-I��EPP��
��_����$tv��S8�}D����^Y�}�+��	���$f��W#r_�7����?p3��SHL�;�!�2+
�g9;�?�����5��?O�
���[B��.�EFC
eB!�����M�&��e�&�o$;�KV�D��g����v���p���:3�A,GvP��Bz74��ieS������,�P���]=�s����u7Jw3��%x�@;�!�Zq�u��op��O����~{�,�g�~i
�:
����I��!���p��#������G��$�%�����@���)�x�/������[I��4&�������-y�d�V2f��M���vP���;���SN��?0[�����{��q��M�������>%wz6�~/���=���H�B����J�wyq����mE�of�������C��������������M�����J����
Ja����{�ZR�U$O�Gqy���S��{��p�`Q�
����J���$F-$m�vv��HF������\��r)K*��vE���n�Pp���'��6=���6��/g����3H���K��]���b�=k<�
,�����b�(VI���.~�����v���=���0!����xa��0@�'�������8���C9�^�4��Z�������f���P�v���Pr���Z���G'���7
�wS�t������K��'�7yV�rV/!����>���:J��Ax?���gw45����i�X#��2�	������N����|��%wg9��c���"g�Q��k0�j�x�F��%�iV,��#��7�=���C��
��M����?E�J��N~�%�C�-����b���?@��w����X;���1����y�F�4V����Lf�7�f���P��O(��)�F#0|3IL}��u��Y���fr�����{(]GF�&�3?��m�W?���
V��a���"����:��n��T����D��M�t��?P����L�����*+&?I����������+�;���w;������	!�B!Ni������������aLJ����h������uV����|��i�Hz2���X�{��,�b��H��&b�I����~������k�+!0k�[���8]Y	�1v:��f������dM�BF��Q9�k���
��[��������a {�o�(,C��u��^ y�X�b��{��u,6+��6���>v,j�����u��vA�f��N��Ide������s%.M��w@ORf�`���dO{�(�S��v�2
�����;i4I�����6�|X���L%��x&Y��������pL��L2�$���$	��g�M�D��q�SRu���f�k��n���B!�e���}����{c�4��o<�����oOb��+MQ;a8���N)��>3{��42�tm�A����g�����PP\�c�o1�����������3<��~7�(*V������1�V����?�2 ��;	/|�{�4�j��&�S���G$&����nI�=�'V���*I��C��G��9��T#x�M8�
�f
D;�>y���������1���+)*�����UQ�r1�?G�qS_!cPqU��{�+��X�?�C��b���=P��#6���i�M�����p����+V<<�b�&�}��BJ�t��x3o�x��a2�E���j���j/��c��r%t���l��!�?�6nE�c(�]���`�C~����T����Jb/�R��}8�6(�����xc�$������?�hkO�7����Po!a\2q��FQo"*��7Zy#�^����S��G���?V�A��h_,W��4O��8���GcP@��
���������Y���
S�a	Q�D���s���?����=s�a���������'V�8�#Zamj%�v(��������`kO�.7�rI�v��x�]�������_�_U#�x������#c���^!{t��{�XX�?���kl��M5�t�i�����Y}�cH��h�e��$���������X�k���sB�`��y$E\y��wO��P1Y�"PCL���`���mj~S(�����j�{F�<�.,��7b$��/(v����w��oAC�^��X!�B��V�u�����s(�%��I���*����n0��G�|
����Nu"�1���lA�����M����F�������o�
RPM����Q���M!����$t�W�|��A��h���mU��*�����h��x���M��[���7a2�q����o���?�NQ	��N�&��?����` ��8��'�x��;����F?��c�����t���L��MN����� }`�y������b&�B4�liv�����Z���������(���+k:������v����@�}�SX����������;��`��3�z���5 ���V�0������`�bmh;
q�A��+�X6>�`�����1�g����G
QOw"*8^�|U�2�j���J������@�J�g��{�K!��g�����n�T}��Kw0�O��%��	��|~W��Sn"��������`��<�u��i	�v(!*��;P�1���W�����[%D%����#�U��5h)L�U�p�����%��x���%���3��u4n�8So#�������g?�C|e(5�Z	>'��N'�Fz�`T���y��+g�O=O��-��7�=��`����G�^���_�IT�x�~���hx=_����x��aT����\n������_��_��`�`���[�>�i��}�T�������tXk��T����������{`lk�������w��+���c��2�5�������������<S:vBU�����������t�I���p��u����$���9���I[�O�t(?H���c	:So���q5�)�y����
m��~�=���n�<
�{B!�B��Z�#����v�������d�$'�����������=j��Q�!wue�_�A4@5�QO5���q����#q��(FSu�����(����z��-�b�4��~��uj��;-�����-9�~����~mc'LJ|G<x��N�WG3j�
S`�����y�&�FQ�Tv{����+�<��K�xq�U7i�q��hI�6n	.w	E�|M���}������B!��"�2V���r��[��A����PQq�cC;���}=����>:�"�~\.%+&b�d&��p�^r���U�)X�����95Ph�����e����:��N�j&��X�n%��1kg1]OP���s��8���>#>@����|g���x�����$w���
Ja�������G�4T�So���>����u����kI�ZO�H�F�sYQ����b�:��)��T�g:MO��cT������i�����R=�I��.?�4�V��F�;�0T���'���_@0��@�k��,Z�
��wH	�'y�g��F^���}�=�g���M��NU>���(!����r�S��4����������?W�������c��6�|����y���(M�b��3�'k��b�Sg�s����I���-��
]G�~������T�pj�9
�k��kf�4#�Mj M�*�G��;t)��:�qk����dj������I]F��8
��#g�wM�UQQ����������
&��XG��K����\T@�r/�����d?�/��d�C$/���%�/%���:2
��O��p\��w�9���07�m8���������z�Z��-�B!�hP�u���f�?�f��y9;�����;e]�����|Y�=���
�es�Z����d���$
�:Sq��A����]I��%��b~��H`�{p���p_�.��Y=��9��?�mWP���sc�c:��Zi1���%ku	��UX@��aT������@I���J��I`�m��xy��K�z���p	t��f�hZ����J6�����)�N��wP���u���~�`�y��d�����C��LG�g��n%q�.������1��bTT�Bq�SBTL&�Es�;�z��_A�1JV�B��/�o�U�QCL�L&TU��
�������^�<>�=��3�w$�\�c\6���H��O,`J����k���~V����H��NX�����U�mo;��wn��p�GKY��(T�9k$q���jNG\�AJ\�a������>b��-��]�����K�����TR��$R�_vG�gi������T�6������(�	K��vU/�����K5��{�Rrw�_c�V�BL��TE�g�/q����J���P{����^zT�bI��C��SV,^�7<��KF���9���Q�`�����%�q�(yu>���N
�����Dq�/�FwG+X��}�C�1
��A�Y����%���3�L:��<��$�w������w�;�����#l�2�v�������>sEeA�)�����W�Y
���(��ZJ|��]�������&�o�9��������v����y�j�}��3F��T�Z��vA�4�v5�=;p�����������N�������5��1?4V���������k(M�|���NDE[����z�������h�����m�4����fSXV�xX�n"������RR����O��5�*O]�����l�����=>�%�����y�c�/=	���#��j�Au�4V�p�|�b����8_[J�G���~ZP#�^���Tz4�mPL��|A�^}U������&���w����f�{B!�B��Zv������}��~��3v}�?G�5��u�$G^u�8��8�v�&}�����,��	���$t����(����r�

��Opx���_������D�ww$��$lA��3v��V��jq�8��F�a$�[�m�9���:�+�HZ���I�q��{��� �kcJ�zr
k��ES�h&��[�WL���I�8;�{��g�����+��ASY4�a��o�>2�%���um������:m��v�%~�_����=���B!��r�D<�������f#i}0	}n��Q}��:����I��#���F#fk,i�f��6����%��e��Z@�����4�j.%Mu�)]��w�d�Il���(�6�=�-���V3����;-��!�`hk���v�d�U�w�B�$qlJ&�Cxt}���2d�����.b��u:���H��
IU�$>�v�z���s�pLu��t/�O���q���[��_���/Q�n��������O}��h��K����m�3G�-����M�BBW�w`�m��#�_/��#p��&k�]�J7���%����[1�����������v!a��J2IOLt}�G��dlA����0/�KF�^D�n%j�����X�X�'���z\G��>��6�#��^�-��U�}���L^�S���sL����7��I����+�J������D��5t	��aB�����J��z����%>����c����Z:7�qbv�e1��	Jz�a����yY����zQ�(�l�7`�]W���`�	�����GZq$FX)�O��o�
����8lQ�}�/[���Y�\��;�iy�F�R���g��t������]�a5�����=��S��f��X,��a��V�*CH�_AV�^D�c����'`���9[N?;g���5���N�M�C��K�����n8������	����Lx�������O5v"��zS��=�����`EUOl]Q{
'}�/�MB��w�����a��:��:�x�X��$&�NL��oFr���qi��E=�T���w*=������aV��aZ���tI�L���p{IK4b�������:�Jq�UI���n��'�B!�8����E�F�[��w�����f��M�����h
��\�}��F����^�&,�@(]Nbt"K:$�� ���s��/���o��'�Bq	����,��k�����.&U��{,�����{�Y(�����O��$wo�,B!~~����w�-�����'^	�|�6������`�z�B!~~����H��>�C�HmD�7���q��> ���k�ya>y��Xb�����B!�h�g)}z��x;�*���O�������#�~��4���'�,�����-@��_zW!�B!.��K�75v<9/�HL}����E�I��H�8��%��Bq�L�2!u�/��������������B\��c�g���$������P�f>"��!�B!.�KiJqQ���
!�B!�B!.����H��>�C����B!�B!�B!�B�[
?��f��p]�!�B!�B!�B!%KS�V�r�~z���k}$MZI��G���%i��H��>�&���I�#i��H��>�&���I�#i��H��>�C����B!�B!�B!�B��#N!�B!�B!�B���t�	!�B!�B!�B���8!�B!�B!�B!~-y��Eo����s��Ww������-y	!�B!�B!�B!.
-7#�|?���n����}�o<s_%k�m�s�����J�_I��*Q3��3�'��Q����O����g���?u`����C���7���sUI���8K+�<���m��~�3��<]tqih��E����� ��kp��4�.^���.���"��u������?-�"~O�� D��������U�E���V�\����=�<^�V��:��� IDAT��B6m��Y�>���(�:^MP�]������{n$i�jr�M���`�s%�\�S_]�Z<�2�����9W����R6���7~\�1���%g��h?O������K�E�\����=��c��+(���V/B\H]~u�����Rp<-�"~O�� D��������U�E������h�{"y�������N����z�����GN����-�����=z��u��?��
��q���IOZU���~�g�����=�uB�uM�������ut�{�>a�N���C*�����:?����;:�(]t��I��#'>��O_3����N����R��
�-�z���N?��m�����[#��5���=�@/:r�~�����G����m�Az�������z�������W�����M��xM�_����I��o��������c����X����9MkH�f�����_{D���O�k��;J�t����\��o�����{������z���u�������w=�������^�S���E�����t[��t��]w�������7<y�n8W�]N��O��D�nI���a���+M4����
>�:��>o�����n��^����p�����~O�z�nR����>l�*�]}��u���E����M�N��}��(�:`��4�����zW�p�I�`���a=k[y?����&�������]w�'��E����{���'G��[v���E���%�o�����^��?>#��52VOzq��>^Q�sr��'�Bh�i+e�G�
RV��B=���?��.�9M$��p$��<^��zH�?�����!MZ�#N�u���G/^>S��^wW���ku����.|CO��	��'��^/r��
�t��W��V�����`��1�����g��l@E�\/��M����7U9������+]�sK��u]�����["F�k�'t��*=)2\�ju'��w�����m������z��u{����u���-�[�>�/*���pZ��n�'8����m=)2JO����7g������u�}^���#���
&�#������m
������3��uG�H}������UzR��z\��Q��zB�p=)���@T_'!s������^�[�<�����^0��[��Y]p���f��l����>��;���w���%�j��gK�F����=�/b�-C_�w{R��|�g��E�M|W��
����=��A=u��W��W�����'t
��-����w����u��u��#^}���tGg���_V]����<����i�{�0���}���.����n�n=�|6���z\W��\�����E��W�����,x{�M�������R�s�n7u�?�u��r{O���u���.)+�$e)+�"e���'����4�<���<�&��%�?E�x���'��]i�rKSVfG�<:�~���;#	��c�������Sd$�� ��5:[���?q����)�Z�g1etR��6rW����T���������������1�3�y�0gJ�q1�b\��dLSX,��M(���4�j7E�#��|�Tt�7\q�L��RM4�9���T3&9���C�~�"����������s�s}�u}�s��s��O'����K1`���l<��H?��i�F����&Xdr�����_��2b����W��$2�~��c�����c@������ LzqA��p=��v�C{C �xz��+�m�}e��^����!.R��������+�;n0�j5��V��y�����Y	[�:,��5����kf���?����������vd�?b���5�����qX@��Q�y*����<r��R��,\����J�������b����:�P�������!�z������KW+�um�pz8c��"������N�`9�&����C��Q�n�6�r�"�m���1�	� �"F�-�U��N�<VhM<V��x���x��Xs���8��Y����x�Z^���+����k�v��_�+�&�v�	���zg9��^p)Q=�P(�������Y-�yRWv�	�b��p���'@)B%(*�+�P^�B���eo�V�O0�����P(Pt~	{�������1k�OBL����_�B��'H�mU�"T����(iz����rb"4�8�^!b��_�l��&W�QB��q���Td-z��oB������q�*��Q������%+r��@0������[�t�KG�0���n�D-���s0K.�Y��C	��f=p!�lD�{@�P@��=���:@��*���*�_a��2��ZJ KE�RSyLz�:
,�(��P��%V�����r��Fn���0v�x��Zx�p��X���X����9��p���8��9����	�w���_��3��?�4�}��cG�������x(����;��6aO���?3B!6��0vGP��R�$$K�Y�V��j�����RQ����B��2%0o�)WEx��X�����I�M����i�����juo����W_:�����#�0������f�aX�|���Y���Rh�����������>����w��������juCWw ��]��|��nPy�!I��(���A���iobE��oa'�a���mV����"��;@��;��Z:B����1)C*�^vb	5�3�Z������C�M�	�KUc9n'�5+�+�+�9+0vgp�o=��[�x7�9��;�ow�:�U���6l��gHY�:��n���{�C?$j\���IH2 M����i���ku��2���W��
�������'!���DJ�i����u9����� ��C�����e�
��% ��u�?�lE���W� %�P�O}��$�?����3!�����?��At{�m�V�j��w.R�)���_�<2L��-g���W�{��9�);NB�����=Y�O!m�����s�7��A��9���"JgCJ�r�v�Q]okoO����iD��!uU�2(�i�lL�p7��������O#���7��U&�'>G\d��a9{�*�>*%0��'�@������o#R�^uno�?��x!}�wW;q�����_h��D�~���sl�������v��	��$C:���������A�)�k�����q���r���jh�|�c+�I<Vh���
<V`�����x��w��6�N8�s�g������������oy����SIIIS7Kr����S���� Zv�"�h�����b�]"�v��:�
�T�
"�� ��� xxS��]d��lr�����L�h��C:AA���uO�Z�T���O�n����E���?$��0Zs������(n����M��@�1S��f#�u�QA~����[K������D{f<I���	U��)Z�%��W��x���$[�d�'WD�.�5��x�r�& u��w����K�]�DT�~<��(�V�W������g�^�D���)nx�����M�!oQ���o�Z�e���C@�������E��R������p2��6���Io����@����sR�;����NW���CI��'�o��?O���	y]���KJ���
:�~�z*��$�����z��'��5c�y�@b�A4w{>mH���)~�3d�MZ�0�[�����vb7�S�w����.���J�3�����%������s����,�I/*I0�����e�<G����2�L�E�A~���J�Gw
_�����>N��v��4w�-�Z�*�X��
�x����5����s|��_�s<��r��������b� �[����n�R�l���
��`��*�f-������Wk�5���pL8.#cR8;�����6��-�M��qic�H��9CsO�����F����������
���
����������s|s�����!&Mz5ek��c�1�c�1�c�1�c����
k	��0ol<2������&RVL�1)k\����uS�Q.���=.����C��%ce��1���}����!qC2��;��r1v7�|�z��[���k>�gZ�}+���8�3���j������m�?�������������o���pL����pL����pL����pL����pL����&���1�c�1�c�1�c�1���@��m��8��`��.c�1�c�1�c�1�c.��)�[�?�������������o���pL����pL����pL����pL����pL���~5%c�1�c�1�c�1�c-�I7��v{s��1�c�1�c�1�c����&��S*��]�c�1�c�1�c�1�~S����1�c�1�c�1�c����w��*��y�<'���c�1�c�1�c�1�s{�#��-6m�7~Uvl�U7��22�>�B���?���!{��P(������-"�G����v�*��q4
������$�CB�?b6^j���u/��S��_L�^�|b5�1b��_n��w�I-��U��'BY�����<�?&l������o�h=���F�s�q�z#�R�'#���$����'s�Q��
o!P�	~o��T�ci�\�u�T:�����*�S?9����)���z����f"����?��m2�*8/��I-<Vh�x��X��|�~8&�p�o�8�3����F��_pt�v��Gj�q���}�=�[�`������������i�2�{�:�	-YT�:���|�R��h���r�j��c������}���K� ��;����h
��F�������G�0qr%H�q�����"v+a�YG�(B���P���u��}i�Z���`Z�
l�^E��3�P�Fr!/�c������~�8/��I5<Vh�x��X��|�~8&�p�o�8�3�&4����3��E����Es���Xw$!B�E{~/|���_���R&=���v�_i�MB��&@>���_�{���E��X,�~��a�'��0�1h��������`.&g'7��u��n"t!dA6.}��#�x����
��;C��H,\0!==�P�1x���	�u/A�.��%d���O�MV�������28����-�yA�P@�S���`*Kl�u/A�P"d�'HQ�k�,�{g�p��7�?�x�����'���37�\�K��g�:4~����/�W#����������?T���m�B����|$!Zb�����������}��\��,��s:?��
���6���>^P(�1)G�����|v�E������t<�Cd_��p�����H�u��\n�R�V����Y�������U�N�4�f����X
����7����`�����G�w7�(��n8&m#&M�2LBj�G��'�����W0�
��G'����h*��]!�}2��z
'%g��:	/<U�1��t�������"d�,�����E,�s_a���zB��a���:[��;q������J��>��[v|:.#c��1F<���G���S������*��>)�w���!"p�
d�z�^�?�N#�H	��������s�<�(B4:�t�
�qY�B86��yn)������E�i{#�����0��&J`�4�u��_p����}���2��:�^^������K7���i6"����~z#&|�V�����1a����hFM���
���:�K���8&������x��Z���'��ISp���9��D�����i�2���Lt�{J��m2��m���~]���3�)J�A�|�b��e3F�VP�K���D�N���=�N������3��u��?���6��'t�=���_�\���I���h�������� ��b�V����� ���d��h����Q���S�as��u��m�����A�t$��O)�L>�N@@G2~�
�,Gi�D=���z�s�G:�Kj�t3������A"@�����j��	�&N�R"K����KQ��R��CI�7i��f��K9��-}�`�K�����3d'"{�R2z����D�Ql�E�=Nv"��;).��g�$[���)�?�;�}�%O��5�!{�R2x*�0�s9����t����������v��t��M�+�(q�#�����m�2������d��h�[!�}�r�����G):�"���sQS��*Y�����z���}d'���1�
}������Ly�"H;�MJ=�Y��un{�V����b'��|�2M?���!�;�?��y<}�R���5� ����f��������d?���^*2L���,�]�M]����_L�N��K#Ik����V�<�i
_�-U��K�d9�/J�8�^��
�7����K�Kw��~���1J{��w����n�J��]H�:i�Q��q�3�v��m$�XgH$SA�l�]��l��z�`���b�"��]Tp�F�> c�e:�k�?A�"��q���hR�F����<~�G�I��e?�E��Ql��;�F*�R������J/%����i�Q��WN��o��w��.$*�(s�$�<O�Yg�^JdI�#������Q�D9I$zx;�\
v�g�����g�]��A�D����Vj������^Y6[�\���H�o���a��[X��|2�}��l?E����1���>�
���q����5/qL�/&M�c+�X��y�O��5�pL�/&M�9�s<�xv��
1��6y��v`��m��k�/�������%�~��^�h���l��)��<cD�S��C�����|j;R��!�OH�?z�'��������@)���+�������5/�U���W�#����M���C!:F#<*f<����?��IH~=����z��P��N����^����~�!�|���W���U�0�k`=^ea������ ,[��8�N@dX�@�?7"{��X�U���X>,������`���`.$@�SO&�yJ����v>r��q��RX���Z�"OaM�_�gO#6�/60�"�(T�*�w�\���K0��G����(�����3��_����m�8, z�(�<�g�N��E[�Wl�R�W15�j ����>l.���0b�O"����A0��!����/5�O#+�t��#*�Axsw��\8�?�D��p����a��YVd��������x��G���,�-x>c�(��J�R�u�1i;1iV���}��L�]����o�pH(����!e�K�

�(53z0����C�6wED��=x?���~�<T����}�"��PuV����6=���!��^�5ee�/��x�������_�
����a��	��"�I��o���<~���,��s��\�����^l��4J	������zU>o�4�R`�7��6 !�~EU�pD��P�
��LD�t<��W`\1��-Y����i��j��?b�~-R�^�\���_��*b��������!�h��T��5�����)���//qL�/&���
m4/�X��b������	���b��8���|�9��b��V��jJ��8|��N��b'voY�q�����[�&P�P�@�h x��Q�W�
�f�U�	y��������Pl��v�-F|P)������P�W#dl�����6HD���axt�6(����������P<5�����w�JP@�Y!9xor�Ka) v�F,�� B��(��"�+����-���Pu�8d�����s;@����:`����?J�*�9A��f�T�JzDb��T��G�pd?h�
G����O+�*c@����Pt�<,��ba�

4Q�a���?��J�(68����*L���
(���X�[C�K�VX�EU���PA���I�:�K_a�����iU(�{��a��/��W7�pL�/&�K:����a��T����an�O���y�|�����s�tDuE�����A��Yy�*J�A�P,����HE���a��&����'������f#B�J�
�����OU����U�?�.Py�
�t6�O��X��=e�1���a6[`�j��4�lE����
�C]��7��k`�����c!�}1KT�"B�e��!�!Tm;B��c���R��T�u��s�����F�*����A.�A����v�p^r���1q��4/+����c�Kw�& IDAT�	k���'��I���F�	�x��	�k5�qw^��F*Y,����`�����J
��x
k��{��8�d�@�O'�#��[���\d�-G\XG�nX��{-�*�������yd}�����*
����M3��yX�	�J
������)B���.�R>:�/�ZXZ��^��6��~�:@�~�K�U�deI:� �QI����KZ�=��/����l��6X�+ox����t��04>���_"��sub�v��K�,I����G�����T9n.m����6f#,�*��9����_A
�x$�V9���c�=jq=i�|���@��T����`�K��8~]�M�qL��j1i�"������|�[6"��u���Esa��!���Y�����$HU�N�&��:�����O;����ga������S=�7~rK�7��&!v�Q���v"�������j��\[qh��P��6�M����V�����T�bL��
�/>c�C���H��o��:��0��������E,�5�D/%P�n�:�;B�����;dH��+r\��.��h�C��Fl�M^*�M�������2�K�������X���%+�_LXq>��x��m��f�	�x��	�k���8eoD/����n�[C��!����%H�����K��{��s��)T���0]������},�p�/��x�������/o��]�w��.�y��`N_��3���mL�6)G���`?����#c�,_��C���� P��-�:�#J�.'�G��0������e��������z��1�`��������9����$d���HI?
uX�B�����"�8�l���P��N�*O�MN{�w�J�vN�j=��m�A2��� D��!uUF���%0m���������� ~��O\���h<��o���d�i�,���`��f������;�z���/�����)�9���-�Oz������_x�������z(�i�"������VpL���1�e���}���u��!!g�Lx��e�&����K�}���>Uz<������9����H�~��W����t��,>���Oc������
��wPuVA�R_��w����
@���Y��!���u�+,�6"��U��v���G�G	��9���B��W�(#c�4,�r�[3&�d=�LB���L���8e*�w�����c����hj�m�.��B������Gr7�9��'g��������oqn{�������.���
��Q����b�����*��3�eS��@?eCv{Y�l�1a���R=x��1�<Vh�y��
��t�O��9�cr;8���|�9��b��b�<�\�;��u���� c6�=	i#gS����9�#]9D�&>EZQAH�������l����1��N��_�*�����v�s���D���/LyWn�D{^���U&�����QbPg�j��MZ����3���l2R�y+�y��z�_i�g�H
�n�s2X*�(o��d���Yv��T6�)Y�b��~��� tD�L�'�tg�:!c����3��[���W�rN��~���l��FqC� �oo=�����l5'�%�R+��z��GGQ��������3>���d�@q�'P��@�ykI?f>��X6���C�l�P���I������Sbv�� ���Yd�q�
��(q!���j�N@j�/����lZ������������g"`"����w�'�W;�q�&e^�����'����+�os�d�v�[5�tj5��d>���.�p��I����������n�����br���h���������0�[�
0�6_����n���������e���Y�<H���)�$��I6�g� ���0��"�v�VJ��_N� ?�<_1�o}q��;)>��}�0�HQ3V���
$�Ds����q��=��G?C���������+&���Nq��H�'�oo�
y�2���|L�b:E�=j�N8��:i@���DD��Iz�t�3'
=(j�z:i�Y19�n������lr�	]H�@Q�Pl��uN�L�V��F@jo_2��M��}I?������(��>}�8r2%.�A��)�|���hx��|�������*+�D9�;���]���1a���R7�K���-���x��Z��2n�O8&��[�9�s<�x�����(��M�$���9xr@Hk�q�������w�I�~��ho~��>.\@�^�Z���G?A��,Dm��8�N
/p������4�;�'�����I�H��>�?���_3�kc�����F$k�����n�
��6&w�K��c�~��E<Vh9<V`����������n����9����!&|g�1�c�1�c�1�c����qv{��i2�c�1�c�1�c�1����)�[�?�������������o���pL����pL����pL����pL����pL���~5%c�1�c�1�c�1�c-@q ��6�D�|�Gk�1�c�1�c�1�c�1�����-�
��2�c�1�c�1�k=|���
1�WS2�c�1�c�1�c�1��Fc�1�c�1�c�1�c-�o�1�c�1�c�1�c�1��t#�n�7w9c�1�c�1�c�1��M�h�BJ�������?����vP{v����1;�/:�f!c�1�c�1�c�1�kk����7JP�0��d�\�+���7��S�1��=P>�L2��q4
�����������.$��B��/��/����c�1��U%0-��R��������_�<W�O�c��(
({���$G�����~�4�B�^�_�ld��^�n��9��yA�P@���{��t�7X>�)h:������m��l����@�c�1�c�5I3�W�_J	:)�o�M�2�{�:�	wp���,���^:Z���@2�B����!��9�]<4����c�1�k=��:�c?���@T���w��T��X<-��w�s���/BZ�:���nY���@l�������_"����,�S�1u����
,f������� ��M�Q��Eoa��Rr�e�_�?�SW���z*c�1�c���i�'�~�5�2�H�GD����`���4�����CD#f��!;.#k|?(�`����������s*�)_F�����'
�C�#��U�g�"����Q�>P)�P���������x��m�����8m=�2���%�J���	#���*�,��k��2o���a ���za>v�Rm}�7����1�c�����a�d�P����td^���1��PC������~
k�9dn���s�;���������_�8k�i�V�����B���q�l�jN`�����CH�O���p
��!��H��e ����z��.?�c�1�cM�|7����G��D������
��S��m�8ko�k�����8�������a��>�.�_XE�]������o��]����E��&��7�C������4$FvF��EH\w���C*d��\��D��<8�$�'#[�^'���HI	�:�=lN����b����c�1�kM2$����`T�����C�c�� C���iX�zC+�����Z
�S�`��L�Rh|�V����C�q�S�a>�#o-4��}"��0�����oq��;�z�*J"�����N^0���3�]��)��g�1�c�1�h�+��AD�?DU��'�?��9��(�m+��b�:"dZ_���{_C��S���6o9Y5s?��X�{`v�b��/�q�c������#q��".����1����Z~��,�����U^7)�E��CP@��A8�u�+-<������Z!c�1�c��C�vx,B�!z�`h
�A��?a��hv,��P<:V{ZN�)@�f��H�����|�!B%������$;�G�.)@� ZP$� C�P�,O 8�`�r���^�O��$t���|�c�1�k��{"�?����o����������8��]~�^wr��z��z;�)x��v�er,����L�s�����		6X�W���HIz��`���%uF$l9��q�T=��a��Pu�8d���.]YrY��\;c�1�c��t�~�[�;�h=�����!|���� �@�x�c	l�E����"4�rq�Q�,�V|b'�J��lU��2$��t!@���	Aql��]�_���}����7�c�1�c��������b����s���3iz)���M��W{��'1���0���K*����C	��i0�~&�y���I��%�3d�s���l���-�.wso�1�c�1�x�"��@�����9��v�4��~��I*{��!�|������Z�
d��2�@.<
��z_oh
T���a�	���/�d��(-�t/�a�h|�HgN���m������G
��E��i8�c�1�k��{"�+�e��/��a�gX��5�����������#���C�i�_���
0�[���7b���
���B����!6�-�['�uYn�c�1�X+rH�^��W?A�D��2��}�LG0"��B4�E���!uKd���H���/
���/F���u��tp!'m����5���@�s��
������;=�"6RD��2a�	��E������F��:�m�L�y��c�1�cm\3��k�<�#<){���m�dD���MW`�8Q���>
��#!o��Q����~'�'a�/C+���B(7c�1�c�	#&����T�����H��07,F�O'@|s�o@�y5]8� B>�'���������F���Pi!��8d~�:t�
�c���
�����Q��H���\�G�oDrP&��M�,XF�`��P�
���21�c�1�k��G��>��'��v1X3�p�z�����`�1�c�1�c�1�����������8�c�1�c�1�c�1�Z��c�1�c�1�c�1�c���8�c�1�c�1�c�1�Z��c�1�c�1�c�1�c�(�~M�]�[����]��~���.c�1�c�1�c�1�X�RQ�����<9 ���������W��.k������������vql����pL����pL����pL����pL�����
1�WS2�c�1�c�1�c�1��Fc�1�c�1�c�1�c-�o�1�c�1�c�1�c�1��Fc�1�c�1�c�1�c-��Y�����������
x������7�=�f�c�1�c�1�c�1�cmA3>�N�k
�t�/|�|	����cG>�o4�k
����0J���r�f��o�2�ih:��Rk@���`*&��[,�
���-�����T����}aX~��s���a������n:������#�`p7O��0���v��@�^	M�H$�;�Q����K�!Ps�s;� ��u%0-���f���G~������^�B���R����v�j�������T�P�����X��W>����!�����C�s�QV����r�GJ�������]�%0m�3F?
?��B�`��������u���
�Oz�U����1}5�k�y	L�^�F�<��A�����#&�T�Pj
����1��c>"t^P*U����~��	
����O9�Ig-O+o'E���x�OQO[)�y�D���P(������?T��tpb��P>U�
4��[U#����`�����N�����i�������e�B��`;P|s�C�Tc�������U;i��3�R\����j|J���z���r<�{�6�/+<��i����g���J�h���z����m9����-�:���*}����6���=�l�D��u���B}�6"W����1�	(��K7�;/��c��q4u��g?�I��6������5���r�m��:Wc��j�|O�zp$�.]o�c�cR��1i	��?@��'�����`��*����7�}����x����t�c��$��Ro�s�S\�#�<~�=Oo�9R5
��8�W#���-��?�,�R����U�a�j���B�}�����w5b��v�G������4����<�����>��q�+��`�
��1X\���b����U�����P#����R��M���k���w����5T~�Z5���S��7i���f[e]�~���g������]�:������p����|���37*?,�R�d�F�G������{���G�:�e��C��q���
�e��.�5�s�F�/^;F�C�I;��<�#�_G�A=�0_���Q�oE���~S�6��!�;���3�)���Nn�3���e��D$S����x��e�%�� ���m%K��r�1�n��d)u]Gw6v2�%E�n������d�r�2���v�,���$��t���S���d�����7�������9�]A��Y��r��T����fQ������~��
��W|[g=�����w%�����O%���+u���)Z�f��I�U���K�#}I?ek�8����(��I})nWa�U����������(���N:��(/m�(�������;��������|4��C��t�NJ%��V�"����?�%�_���Iu��9�b�47�v}�M�(�WO�ex�t��JDT���O��CIk|������.���������m�G�k�����~f+��Q�Zg�eI�#]���\�/L@�>�{���V�
������P��x������K���������]��*�5�����u9^����~d����x�
�@������c��f�;Gk��~���w�*��)y�c9��r�����*����Z)s�02�<���<B��;�V�cW}�e�t��?O�����f����H�3�����>���
����M!������z���w����c������`
O���$Q�;����1�L6��2�^��\����IM.�$�H��(��c>�{�S�R-&��������w%f� ��J'�gU�=�8~s�����������t���v��� ����c�F��[�]��Z/&��a.r��~�u�vu�~k�QC�9�j����~�����e0���1��v��t������c�����w��I}����\��
\�q����_;kz�wu���c����G:��[�
.�(s����}�6�o����k;i�z@:E�(�p]��1�j�Z���]�s���]���s���b�|7�����7f������y���+6��u^��-|#���m�3\�N��d�����Y����Rt����X�
�U�}����3���V��`mi��$�R���3�?��1��aA�'���8��{B}�����������T�=���~�V���E���-�9������~�����[������aPz�RG��~�>��Z)uL��k,���K�u�8����.�Y��KG���A�`��W�C��u}������I�L9������u�+��Q�����	����8W���K���(�J����q���T6p�V�Fc��.�	Yv:/�������u��~�R�
 ���.����A�������k�(yxp�
\"��D�kv:�4������*�j'����<�1W�$u����$���@�Uj�g�)*`8%�����W�����V:i�Jv�N��w}#�e{t�Nl���*��;���Jl]�����d�L���D9������:7US�������F{�������Q�
}���]o��D.�A�]�{�7�,��W�}�q
������u���/���]j�t���\Y�^���S���4w�2��s#�m�5�Xq���8��B�L'wePf������O��<�*��FLjr9&����$2���x���5�[=&e���L_P��#��[��i����>��N�x�J,�����w���Q+���>�ENq������y:�J��yQ=���1J��/��������K��O\��*����������nm����ty���cFw��v��<_�yz��}'�MVm�g����+��q��UL���4p=����}��>�([���h�Z���]
��.���*�������{5��R�����0n�t��y�Vm�{+�r�����
��u�t(���$y��E�n�@���J�rE�]1YL���>P�$�v�$��R�|���y�-� IDATe�A��f��`;K�#�{��p�7f�Z��z
_��S�������R:_0����W�I��w������l+U�Q���I*�9�/���"z�����?4�J������5�����|� �������5z0��(<���K�r�>����!B9?y���W�����HBz(\��,�&���cX�x{�d���,�a�?}��6�5�K�9�a�w�s/����0���`P��������OA;,ZO�"��|���H�_�q�*\�����6��b+L',���
v�J<w���e;�/}������CU�j��7T��p�F��^�����V���!�|�G�Zh�?Dh�7`:a�@����S�@%�l����v��B�."{�I��s��}F@��G!���\
�O��}��C�q�3�^�V�^]�Bw��U������U;]�sesU0c�����v�4�]�����.Pk5�O�������l�6't�a��;9� [��[Q��l���`��{��������>P����B �=���+���{��5
��.���\Y������n2���0U�
u�n�����cE>�
�+L�3F�v:B7d$���#[�|�f���aT+\����I���U�F�� z6b�E[SWU;&��1���,�#��X��!��>�um��[C�o�q��q���
�L@�9�������T6z��Po�"��X�����<���F��4.���!8���Z��j��Kv�����uL\�]�v=�U�2�.�g�A���kgM����Os���!B%�
�e	���X�h'
���"�
��:��������&�����Z���}WC}d��\���V�|7������0}���T�@�kam��XK�%����$��5���d�kw�E�'�'�K�������@G���H�����a���yZ_��;�v��GBzZ��*f� �����Y0�����8�K�f�E����J��"����!��c��s��[4
���\,�j=�<k/L�p�C�c#��W�$w�vx,�����a;�s�D��d�u�w+���q6bV]G��	0��I��i4�|1x�V��?DB��:B7�m��[1Xs�E�|t1�c����e]Ax�Io ~�'�>S��O.�"��e0���H�n�y��;�?>t4S�"��S�b7"~��
��<�����g�Mr^$:�
	���K�y6��-H��t�.�l����a��)o9���C�d���|B�l��3�Xj��i� ��M��D�&A�P}(E�J�����#s�h&�A�w�p��Iv���DOr�����V;wu����0g(LSw����9���D����b� T�*�����
����I����*�Ug;\�sw���H������	�����C�����2�<��}
���E��?@�@����B���"dO�����+BT�D�h��>��e]��Z�,�i�|,/���A=����6/�R���`
|qaV���[,�M��H�h@����?�r�6bR���{UR�zl�?�I��!��1u}1i��T:�
q���������oh������9����"4�vPt��T� ����3.��w�Z�����yzq�F�G
������a����a-�/]����h�/�!����.�s����eL��ni�U��5��b�V�su��)y�>�t��~=��)v��n	R�\�|MvG�6�N��s�`�LO@B�������U�@�1�Kn/��e
����@�o���9�'��Q�]�U����k�3&~������j��P���/k�(B�=	s�����!�a��X��"W��w�?�����
��5�z�+��1�J�7�g!.T�����c���=/%!�[WN���g�����q����~o`^�C
�JQ���q�����������r�"D�D�������6�9������/�_x�c�����@�����{�����[d��X�6��2���Q+$���;��_�c��5��Na��������% 9.#k�H�x
9g��v���E:l�<)go��+��a��>q��B��z	sb��.9V;��#n�X�{6�
�o+&!aK�����O�y��p2k%���1j�j����w?�z�\��������HNz������G�������EU���=�yf��rhM���Z��v��V1�%�����ZZ����)�f>\K�e_0�+n�b�2Z�����t���a%�����3��0s��$��_�����9�����?���9��#���qP��	MR&�'���H$��Apz�uA;i��n7����@��`��?F��?���~~� ��5�K����js,��:K�v�����xR2A��LL�v#�f����5�^�p2��.�[a��	����:��v������j��W;���\*O�����
.��X���r|����e�G�|��XP�����Sv����������������`N_M�~�����`������CF��S
o�Kb�F�3b���X8Ye��tt7�+�:q�����vh��`���%�e�7��Q����t��9���I�~��
0n�D���2o��9~y�uT�&��j� gz6LI[Pi�
���(�G����h,���;��i�_Np�N��#@t�#�?�x��y+� ��#d�(�I�����n1[0���]"���V�\��y��B�_�}�9~����}��5�r��X=��M����X}e �a
Rkb�W�v�#�q}~����H�����3�`���eMO�j[�%P�������x����OF�q����?�"��}��3Y{���)��W.��`t����`�]���_��(��o�F�;-
0�>����o;����/b��S�\��r�J$*��#���$�w��b��CHwd�����eo>��'���w-v��r@(�l��?2��\���V�����V��x���l�`�����2�����q(������_�������v���M�D���(����
���*>�� (�C���(�Q���	�U�T�t<��;��[T��5	���B��j�8$�Qz�#��=!���U(����H�7��S��������_>E��r�4r��~�����fT0"^?���7����]����b@���P�?@5X�NU��@����r~��A���.5o����Y�(T���u{��4$�w�;	P $4�*��q%�/�`�!a>3��W;�b|�ILG����W�02
J��AqH�����a
�
U��0V}��	_{kO�4���
���53T�w���i'�g+�\O�H���������v�SF�a5��3~�Y_V{����\��M�������:��J�|` ������m\����Z6�[Q��jX���@���B��-5��o��w##&2��������?��;�?)�%?����R��H��<�������w>nH=�K����@��_�Kb��"���GP\!�����_]��n���o�XO��Iy7����xdl�'r'5?�����M��]>����n�je}�.������r3�u�F�!�������G��:�!��b�p<Q>����Qm����X��QD�A��\?3����2>�Mx!��h�?������G
�h�[u��skg����h���������R=l�2��ZOh{��=B�v"T7�9���&���6��z��e*��;n�K�G
���_����`t �l�{�3io��Uy�{6�C����3R���F��f�����[O@�[���'�7t�z�Cnw��v� al:
��y7��;���'Ba����C1"s����v`�#b�O���SXo�AD��fl���#�|�:���a�f�
P
��e�l�7x� �h���xcz�l���P���kD4���%��������N���`�=cb�r����u3��t,rWL����1V�?�3sr��Q{�����*D���a�>���`,����+�I��2
����|��I��SDt��Pk~��n���U�CVud(�u��(G	�w�
2�#��/��(�[
k-��T���}�|���(���E������/����Y��Y�s���<�����g�����O{����U�s�7��]�Z!l'�F!e���w���C��G����|:oFy��P����p�=�Iz��[Px�a7�}`[}R����q�a�]����@�z����U�����*����H�(�1a�Xvl���������0F������k\��D��n������>�$B�_����@���d��Q����^�s�����Hx~T���s������6��K�f�0�m���Mw�c\�G|��=�"u���w�Y��C���!PXO	��n��
�J|�a}\#74s����lG�A7�9\���(���
0:�C��_<�[Q�.S��#'E���`�J���%M<��`N������Q����5����eN��o�(�rsR~�2L]aB��$z>��O�o">�w�!��.B������(�Sk_-"��9w���B�te7a�9��`<	F��	�J\��������|����{r�o��;C�4�]}�����x'�O)���z������=��Dd��B�E���|gM�l�*��~�����5Q� Q;�s������;y'_�	�o:��8��v���29���K�G
��J������m���/���N���]�/�T��p����Rv������5>����8e$%��D���MG���#]�P�9Z�~�kU�~�P�z�*ze%�
�f��-�>>���2��DR���mn�0��)Q�]t�lDD�NP����Y��?���PRt�R��Qj���c]�����&up7B`o�N��]g�w��'�>L�8g�7i�g����[t��jw�eEz�$�R����R���H��q}")q~�&6�J�~���T�j���B��5~��i������^p8��-��K�-'h��H���2\M��xJ�����&Mx�G<U����"��/4k����)=:�q��Z{���w�������2r��k�w�a����
���K��m�D�N�f��U��.�~RF�S�&;����(!�+�������?(kb)�CI;e)��cn���#{�<�FS��G�W|����3�,O�q���4��N��mJF�>�������5�5��J�vb��N�}��}A�V�.a;��F�w���V<_�+�i�kO�ZD��3h���x*:g}����G��n-�
G�~����������
��I������h�on�_��v�}�����+g\)�nS�|�++ME��
u�����2�
z�m����?6r�J�f���/m!�G�k3l��a�s��]lD0�P;4�������SH�*�\q������5q�5'�a���C��c�Q����#�����NyAJ�A�5�
���I�.u�&>l�1e1m��k�~Op���:]��f��A�xr�0���4i�?#(BI7{U��	�H.��\nx���4�]��\��H��d�9����)���!����:�������JV�L���	����o�.W;�G)��u��h��)��R��M�n{�.�Zfk|��=
�wB�w��x�q'h"#"�m���J����]�
Fs��E�������hL;��4�L��4�����L��4�L��4�L��4�L��4�L�q'h"���3��`0��`0��`0�1�B��`0��`0��`0��	�q��`0��`0��`0F'�.�1��`0��`0��`0���`�����h-���]`t0/^��.0��`0��`0��`t(��E�/�vu�D��}���6p��E���`�H���`��ta�J���`�H���`�H���`�H���`�H����4a��d0��`0��`0��`0:v!��`0��`0��`0�����8��`0��`0��`0�`���`0��`0��`0�N �����S��b#�\i�`���wi����y����a0��`0��`0��`0n:�q���?���5k�n�J�*�uc�?e�u���5D�����u��$
�~���{ �+������[�z�]�x Q:
��C�����u�<D�1i�����`���1�`�d2�h�c�����wz+2c"���ZL]�f�<�uP{�sF#��� {@�s�\����1F�<	3���7�������?"v���q}:
���6m�}�
0��L�������w�s�e�#D����_�7[��}!=�9�*�C��Y.B����q������z����#X3�	G;=U1���c6>��
��~��1�����8Q
����?w�m������u"4:�z� �v�m�q��H�>yw9B���x��&;�Dl__x�G!MD�c�!f'�>@F�u�!H��I�I,���}.�d���Z���	1z�������z(���?�b[Z�	n2t� ��!1�����v�/�/�h�/!h<
kn�/;g0:!����Y�G �� X��u.s��������#��@���(����9�y�EY����l�G���#^Z��g�/�l����L�!$f��s�k��������C�W�9���NW�6M�|�U\���~���oM���0��]-���x�\����B9u���!��DT��87���q�Uv�r<o���=J�N��cj�@F��z��b�%�W7�"�;��O�G;>��S�'>c���j�����6�oN����S���4�_��/�rd��H���F`M�w=��/�����Dk4��LUqsP���5���q��b|�s	��������Kh�������{��.����.�O�<���K_���'�"�3`0���2�3�C�^9t1�s�X���H�{?R
O�T���"�ze�{�e=�5�+Pn���Y���>
���e����;�)�	���6aV����T��(��io���&P�/�c��^�
��?�^E���Z�����9�>��}	5k��9�.R�vC5��4V`�H+���E��+�T�;�����~�K�#'��X�����[-�����"�������,�<���
������X3���A~�����:T2����#	�V>�e�\�����������8A��u�/y
k�O"��k��
���0k�1��z,�<��8~W��~)���
U/��5;�1m),7��T%�?~������YGAQ`_���H��?���y��B�+m:��^T�}}��5���c�!l'����:�X'n�����/���2�7�� ����1L���F�A��u�"$gF��_��P}fl��<���i��}*��tw�U�4�=��)Y��^����H�.A�i��?����F������}��$����!�M�^2�|�s�������+S1kor��F��2,�9������^�V�p�E�q+R��H�mph���4�l�y�����!g��`������}��OP}�8����ff���l�A����y�����/������\�h�&B>D!����%��[4������K�AV�.�o��
�&Q(�����eKf"�@�������	?��i�������;i�[� h���Q]�_F��?����e_����]������[{�9�`x�3��.������a#�������LN-��y�"��
��:����G����X�Fl��O=��/m�P��f�F$��������.s���I} ���t���6�~��.�=5��cx�]s]8G���!���Q�y��:�z���L����:��t���N8*���p�BWw�
�d2T��f��I���Y7];A9���U'����V��taq�[Q�����J��'��w(w�c�]t��]�y*���JM?6�S��w���M��lT�t��>���mUQn|%m����q�U�O��T]�� IDATv����
^H�4��5b3SiQ!��ong�R
���Y�dnif~B��;�sk���Z����}����li�F�z�����J%�cI3��x;'��*�W�f��REPJQM����(!l(e��7}V�!�T1oP��&�
SH=�
*olW�����>��h-e�m���#�4��8��r�����Rjt���m��-��+F��r�,e�Z���i��li���z���N{�����Z�R��c�z]��R#�(i�%QM����/{����|tAJvb3�m[�E��F;9O#H3���~�������
_��lT�j��5��1���L�lT�j,�to��Dk41���{/��n������v.i=G�~t�(d�.��q��R��}i�g����n���:G|m��m��VW{�����)CI3c�#._;A�#S����t�J%���*���n������|���k'(g� J*��;��u��>�X��!-4!a(�o3"�x`)[J��x��K���oB95�T���vU|����@6i���X���Ik����\A��l'��80�H#���hu�8R'����b�%�W7��-��9@�A|��[{�9�
��G�h�3��.'��n���V�s��=���rjMl�i��HJX����n���x�=%R�Y��S��K� �$Y�!�z�!���[��D$�L�q��b|�s	��(��4����]���<rT"���W<}��=�TH8�b�q'h�����T��l �����~pCJ��2\��7-*���0Y��X�-�������;��������nb"��n;�a��*�F�A���x�p�*�4��)�R��i3���!a���R�=��S�:R�g�����]��.-����j(4�P�2�M��#���q<�"f��_����qH����
0=�2J9 x�<��:����>�wW�����|���s�zC�]O{�;g��`9S�
��s�"#~0��r����;��1zVA�.��De}oD�	j�E�p(�j�PYK�P��-p/ g� �w]�r�C�
�{��b�/A�������?�!��sR`_E�SH�K(�ce=w�|b���hB��z��=������.C�_��q$N'j�@��J���	�#<�D��f����X018��C��v?��-s�~��A�q��"4Jw���IL��`����g� H�
r�S�������3(X�k�[��y��-b�Fg���5�r����B�h��^P�B�WU�b�M\$��b�����8P�#q����C�{W!���G)X���������x��<O<Z-@� ��.[=l���]�VX���l�dD5>�-i���h�#��2��	��i�	�}�����h�J��g�I��y�����PN�����y`�a>�	���>*:����_M����{k�Q*v"���;�`�q���C�r���z^By5 ���\h���BsJ���at>c�X=@`��fiMN��������4����B��k���
U�E�:`��5���V�R���7K�F�5=��`��@��'��^�`��a������y������qG(�H����h|���k_-rT��=x�.A{�����$�w1��h�z�I\�w4��)3���1�(�p�5���X}�
�z�{����yYH���!�sbL����(0�gD����Xm�����A���5�w
~���x�\�j"gb�p�(^�G��<�����
�Z�������OPy�����z��(����`�<�y���,Z�Gb�y�T�)�����.�r�3d�|���(�UPt���D��&����s;����:��C�f,2�R���(L&��y��a�n�g^��Wg�����p8{�V�����n�.|��Ny�p��22G�0�1��x���W�����.X��!u��P�-C����h"�o���f�����e������y #f~�K��1���5_ 7�<7���69
9I�� �~�;GmD��,$�yW�5�a�R�q0r	J
��>S��%s���k�9}��5��3#���n��3����
�p[�9��L0�wC=�u�*>���� ��@���H�����'�vm<����Ht�<��[a6�A��/f}x�e�#������P/"�@����s��j�J��Z���]s����
�����Z���	����{_�\G�jb�������������Z�	�,:�O���pr[��6����X<�7Bb�!��9����k�B�j���
B�x���]�(���q�##�~��"k��|�q���:����1~
�}�&d#m��s�{����������>f/@� �L����yMH��!_���C���$�e c�?Qi��<�E(v�G����T��C���i7Z�;*�H����o�����W���x[	��My��]�;����s�%��~����q'��y+� ��#d�(�I������E��~�+X0��>����]��QY���\L��|)���Y\���a��������0ul*Jcr�m�D�Ee�,��,��au�b�����P��	MR&�'���H$��Apz��<�e�����V�n��u�����{A3�5dM{�@��_!e^�p'�?en/pRW�]�RD=p��>EP��P����C_D�������S�B7�
���������NP�^=����F��:X(l��p�3�����sR�?����C�m8�����H�Y��%{[�5���g"a�G�����wd�h"��+�����	i�hW"�����r�z�,U(�0�����j�a�G(}�)$F����qsRw<�5e�`�XP�X;>_������\�A��,��;�CU���:Rc������CF��S����v�`t���7�� �K}�A�oQ��
�����Wa�bD�5����|�"�c�#y���;�P(���YH��"�����j?*j	��ob��~�6��Fc���H��!(�s),b����0;�cB�A�{dd&#��2����;�	�n�AP��_>��&�"�����~��z`�$�*�t������C�U�-LGwc���g���M�x!V���N�r!{��v�U�6g#��o���d�Bk�����p����{�SX�0~�~������4�ON�rL/�G�������B'_��Ix+,�7��^��v�	}�T����|��� ���>�A��t$F�����X0Y��2�/�����g[���w�Z��`����������5Gmc_���������'����/��@�����@���a0�(��#5�sT[��tt;����{Q�Q����B�� ������({�q=�6_W�x�.�O���P�OA����+����{k�����_���=B��`��C��-Pe�mo���xz:�����4�qP�����9]���(^�2���`g>R�������u0�����.{l~��U�"V�9�5*w�D��:�?*�0�>���;����P���w(T����cY�V�,~�9���������d�=�,?V�5�������W`:�������QP*P�CB\_��<���7��y>���#c�?�;�}��[���M���Gc��>5Qs�����_�����q!T�(tS2�3�?�?-m^�f���7T���j\�����[>j��B��qH�����Eg���	z@9 A6�_7������������	�L&�<f.��?B��a�?��s�c����Pp�T8����x�<���~�5P��CEp(���e?���"W{��4$�>.i{`?��w�f�����H��>�/��f,C��!���������N������P%���c���y��Nh���&�?��M���}����#(��aL|T�����u:���K�2*�o���u=����%Y��_���u������k'"���{_a{������nF������W�x�.�d�O�_�_AD������j�A(���m��~���9u�^``H��=m\���������.�l{D��)�����
���o����=��'T��cM(�]�n��"_�/R�����@�q���l6���P~�o�����
�=��;R��D�F�U�g����}y�Q��Woy3�O�F#���q�����A��\,NT���1�pP�l������^_����)�
��z#"r��0c��(h������q
�������B9�{Ka��ED�����������>���(�����=X0��������HN���(��F�����@?x	�����y@@o��
����:�[��}����]�P�n&��E��i�x��_���V��$c�����J��t6��]���I����<#2w��|��
F�>�5'�iw�����:�w��G���@;7���U=���3
)c�������$
6�jbFN�*�f����9�������o������� �(M�����G�U����y��u�RL]aB��$z>�PD�}�.�(G	��/���I�����e����O������w<�����%��jR{zC7��,TPk~��n�c�U�CVud�$�oM��O���k��<����b�G�Ws����lG�A7�9\��G���v�`t
�d$�������w0���F��#�
E��n�����4�X���������e��B�v����0&�7�6nh�3�����8h�2X�-��$�;cx��U���1�����][Oa��QH^�/�{2�'Q�j3Lq����;�i������&��!�4�_��F�.���Q�����}���u:��M���21u��8�	
0��}4� ��bX�hn�����
�#��	���.����b�9���g�Nx���z�����8>����z�mBdN1�".��k7qiMN
�G�i���Ss�b�����}�������a����L;�����t�����/��^�B�5a��#5>v:�e�W}����C52�@�u�P������h.�������<2j�����B����Vz�Q���w���J:�b0�m���/���N���]���si+%*��7��Ti�It�0���4i�?#(BI7{U^���87��mJi!�T]�%�vwSJ��i����v���eM�!ep(i�,��c��0���@���Q��&��RI:�
.�H6C����.B������f�6�>B@/R�M�\}�����R��������}F(���=��O(}���9��4�3h}���1��N*/���}A6"���B���I(#�O$��=J����������T��(�����	���4�4��/����f��U��.�~RF�S�&�v\��9�GGQ����n�=�T��p/����5D7�T�d<�d����z�PJ���*-7���^I%��x�������
���^4i��=�oMD��+R��a�������9��O��&�S>�G����s������zR$q�H�&ut<�op����V�����FS���Z��I�%E�! Ex���j���H7�9��"�sWn����I�@"�+�i�kO�ZD��3h����h3l���q6\M��Sh�k�����(!�����Z��4���{�v�K�`3S���I~?�S�:�
��k<�M���������$8�t��R����s�/���4�!�4�����m�&DD��)��y�J���v����bqI$���P�����Ej;�/�4i����-W�GI�	�*�!��:�R'��X�	��X^��g'��C����!���O���T#,W��^���a�p=���[�m�-��\�W;$�x"�X��x�.~������O$%eo�j�j4$�N�������hD��k4��+���C��S6����p��X�����K��\���v�h<��;�1�}���~���K���w1D�4��6��C����������x�"������`����`�H���`��ta�J���`�H���`�H���`�H���`�H����4a��d0��`0��`0��`0:v!��`0��`0��`0�����8��`0��`0��`0�`���`0��`0��`0�N@v��K��N��_���.0:��/vu��`0��`0��`0:��������J���N�o��]�F�x�"�Nb0M��Dz0M~�0m��Dz0M��Dz0M��Dz0M��Dz0M��Dz�	��GS2��`0��`0��`0���`0��`0��`0��`t�B��`0��`0��`0��	�q��`0��`0��`0F'���zt+����~���~��S���{;�	��`0��`0��`0����~g����{����uk�`����G%��uX�������F��A?�1�dJL��u�������.�����#b��\����Px�j�f����H�A���h1u�^�y�Obq����d*����w��d���w�#D;	�w��x`{�VNAT�=�=�������u���([�*F��!�q�����|�1�vX�!y��'�QQ�b������ub��DQ����v��|���j��G���n���>���D�#��a��a�7n<����;�U�DTb�s\��S/��t�1^B����.F<��_��}�&�@�z*%MD����/�s?��z�9��Y���	1z����]������F�w9�jN*j��0n2t� ��!1�����vx������L&C�f<{��W;��.D�w	�I
0l|!r������|�S���5��^�5���#X3�	���YOF���z�9%5;a�����{0U�y�%�7���+�@�p?���P���S�{��#X3�)��y���]7���_t%m������$D��Yw"�wP� �g3"���>s�.F,W�������3D������c��U�aD��Zj��x��D��D8W��v`���;��j�Hs�K���1F�<	3���7����7���g���<O�G^!��T��!I��������{r���5H^����g�)������)�s�M��	"�*��io=�w;
0���&�{��]�@<1o��/sP�S�������8n�W�9D+�f����	�>�w���rn�cH,n�mL��XE�.�9�^_�����
��PG�`����h�g��`������9����wXDDt��K�n����a�
~�J,7���r��J��T��W!�~�\�p�������&�z�����7d�RE��H5�
*��$���R"#(q���b!���)%2��6}��h��L�FO�m�~$�>����)��4Y,f���i��(����x����#����sd2��S� ��O�t��T�Jj�PJ�t��/hW�8R�?G��?�hS�����H?���
'��-*��8Wy*_2�TqoP��G�V*]:�T�7����|����N�QR\����a�i�Y��vj����n��~��h�Wd#+���5)Mq��a�Nz�TO�C���6j3n��h-e�kIL�&,�)gd()
�,<B6/�o��V*}3���oQ��;������������D�N�a�]�����rR���s����E�E����[���T��<V���~R$i����/]%����B��NM���a�H7w+�_2Q��?SB�xZ�����y����
��d��/�:�a�DBv�W;wER��I3�Sy�v?)����������������f�V���$�T������������
+��K��o��S�����7�tK����j'�[����VJ����-��7�sH��I,��a9L9�������A)E5���U���CH;w+U�����>���k]����p�v���5����Qnc�6�������<�iE� ��+������?��T\�a�]sG�����>�����,��+4[`��%cH3��gk�D0W�v�rG��j�����7T}`#�D�!m�d#"[�*JJ�M�N"����K���	��`o���y����]{�D�����'��7�ts79��_)!|(��k������[ShO;�Hc��>�gI IDATM��	��*����og=@����#�d���"�x���*Z=>��X�	jb����C(a�I���;1�H#��q�Z�,3��F�������D�_=@j�p{�1��
�i��K0gkG}�����������I�]�#�����^�H���"���'������q���H��������C�M);j�,�)=���9��~�4��������J6� m�{�����Y���rj��&'#NN��;��6���3e$����J��/Q���^��{?����%������MT���W�"m`7R�}�r�=A�q������T0w4�e�G9{������7�N�C�H�q�����y-.�HiO��������Ole�H6���'�r�v��Y�f*xa i�\�NL�)}�@Jr�-�O�`���9GW>���0J�z��|
��
��c��J��9��|N��a^�/�Y�2]�Q����	�
3L� ��/�����W�wk��kw�H�W���l�C���V���a�h}cr�xs>#���3�JX����*V��[��v�
�%�g�+���V*y3������I��v�������T���vU|�|���q=_'�:��'�i����G��Tp�}G��&�J�v�b�u�lf*-*���M��\;�T���T�J_��G����!u�T����*���iJ�|��'v���4���������(q�������+�Qj�@G�s��m�����3G��9�7�Hs��D��q+�T\2�QBx|���7b��$�����63U������X��S��mTjj<'�*W������|�WnMl�i��HJX��+��J����{�=�/��������~�:R�KD<��d�5������X���.<�i,���\�vv%�
����1���L��7��b���q-.^{CZ�8hK�&�W	�p�����<hU^��}+�,W�R�'}i�g���i���:��[���-��`NmiU=���x��d�9�vMn��	W�U��7�P�_l��U*�K�9�4��)����V�M"��7����$\�����QR�����u���TP|�Y����i��)���A������y�`�����;����J�;�;A�}4�~W"����5yx��@�l����N��t��,y:�]@�8���G�&��;�`��G��<���(^�4�7�33Z�If������?�1R����ewaBvr�<�������i���(������/�l���sue/Vg/G��������s!w�]�0/
�}L�����k�}���u�F���������g�[�A��Q������F�������9�P��4�"glO�m\����|?��!B���!q�C��7�x���HD(�@�cH�4�@�cs�	����*(��S����(~p:L@����
�[����C��>�z��~��
����A�xZ��j
q?�t��Bk�v(B��l���15q��+�Qn��x\��2X�Cly�G�C	�*X��&.�	�_��@%x����������8	T���a����y�*�
E���A�4��[��{����|v�����z�x$D��y��}�5������N�E�[�����X��8ts��S���Tp�A�
����?m�+���>:�}��������X�e�Ph"��`:]��V?;A�n���������_�[a<�
�PB��)�R��i3��7Z�y�!������b�[(�^@��A.�"2������D�������(=�(�
�*��@�N��������>��^�p(�j�PY+U;a���K�����3�t>�Q�1�>����{�N�B�7��7��P�����h�t�Uv�������VA5:�@|��.����_��x!a�5����*�"g����\������|W����e>��un-b�B(�U�����B����3�����#%����\���r�+��y��3�p��>BJ���W!1����cIo���)���1�}[����+�h�I�	C���'
��;�}�P)}o/(U!���`i�r,���9�����z@��#�u��	��u���
�y�c
;� ���F��0!����?�%,����������5 !st������&���([;Q���LZ��sm��E�FR�@pp�Q�j-��B�&��]� �\�=��.�io�W(gkG}���#��t�������W��G���������j\����A�QC�
�
�p�K�mF �R.Bz�R��= 2�!kn6L\;���}[Q|�������S����������z��������A�_����0]��P���C<�YK!}v6�,|J��Pet�+�I���BVv����8d,�A��l$G��T�h%�oo'�0�A��OP}��]sc~���i�a�|$�]G��h=���s,�>�������������&7����:�}���!e����[a6�A��/f}x�e�#������P/"�@����s��d�J�����y�#L�'��T�'rd��]q��S�� ��?���Q0�|��L��G��U��?p���	F�����X��h�Z�kl�z�o������D�EaM0�AN�~��e!1��������d�{#$fr/i���y�8�h��N�(���q�##�~$<���i�I��1�;�12j#Bff!9�c��P�����y
��E@,W�`<nF.A��?�gjP�dr�z<���b�������"�_k���e^�����&Bv�z0[�F����t�m����FBf"��!D�
����e�-�|
�BZ��5+xp�	<�����l�9�/i;a�Q(c�������D�������=)+��~^|��>P������>����#��7P:`.V��v+|�	#�	o����q.1!@� �L���7m�Z���w�|���N�"�Sw����M�f�!}�����%h'"�)C��&����s;����:|��
**,����g��|�����"�����7�Ap����x�1wDrZh[�	�v�Zkz���<���m��S8����z@��qA����j��������������z�`;���OA��L�?p	���!+����@���O��8�����*R�r��
�����W�>�]�������H� ���m���A���C����K!��xn{[���H���iG}�����F��q^������[�5^��~e��^��T�A,���@@/�q�_��`xV�V��O!H&����`����k�0�D���H���������J�N^��w6� (J��@N!�/�/q�J�����vJ(9���;����!�sP������2�u����w[��_�~�xLXkE���A����6��7a��T���`�����v���Bb�����'L�!�� ���.P�������a��*��H�����������&V���m��A>`4V_�m��|�7����sq�+��#J�^����K��6c�%����?����C�m8�����H�Y��%{aE/������r����o���'��2�Y3���(4�G����w�ir����?C?�,�s?{�6��C�U�-LGwc���gI����N`������EV��P�Z��{�]�qsRw<�5e�`�XP�X;�/��=�������8�.\��r�S�`���UA���H�JV���A
9�k��yX�6Ga�����.�������]���YH�L�E���r�g�������\:��qd���������	v�S<�n&�������J�Nw\�� u~:�����z�,����`Y���}H�>P�6�_��v��Fe�:�jr1a�{0\�/�/���&?��N�����VX�oB��i�Z�+��Z����B�����\����;u��z`�$�*=��~��X��RW�]�RD=p��>EP��P�����=�I�D��_B���4�NBo�@\����	�U/b8���;~�z���oM�`��)z9o�n����: ���S�y�)����Rh[;��$�u�5	^'�k��~>�r����zA3�5dM{�@��_!e^�p'�?e���l5bq��0
v�����7H�I�~H����������=22��UJ�m��^��8
��
��E��g���������<S�C�:�����yJX��c��Z��7��5�R�
�
�������_-[4u�MW,��x�2�b0�����RsHr9���1\�a�s���|<|���}���y_>�s�g�<�Y2/��r���o�8����������6�4o$����{��A���8�x�&'#c����z*}'�m����KT��h^X��vc�������Pu�����P��#yh'}���|��v�*�� ��
0��(��cM�h*�a�[��!��t��_�\�h�l�FRdcg/_������[��4��,(��4#b]�w��i����ZBZ���`��������`=<B�#��Q|�6Sr�
�t�3�>�vy���!���@4���	�*0���a?�"_H��R��;?���#�V���7qC{���q�p����j���`>��YC;�*����0��y@,t�o?�4��8�w�����QEG5��+F�;#���`�\�����\�!o#�gK\�#G u^t�~���&���nAa^{��a���B!������*B{�a������y
�"F#.�7P�T���>
}������NIEq�B����}��������6?E�e�T
�Xj���-��0�~DP��e�\�����!}�N�.��{�����P���r���D��G����~�����b7�F��U@�c t����[��Im;=������b���JaQ���U�k'��TqE��./6���u�b�} ��W*� ����Bwhc'"��g!����q���}����jh�n�T�m�v���bgh�4��f�
7���SF��\_�M��F�����X�A�A���.oe{i'^�
��?a��S�^��d��W]z�A��~hB���FcN	@@��#+����.��=������`c��2������	������`����K0�2j���p����Y3��������h���<A�_=��'o]=�w�`:f��e_�k`kr��/��xj
�#>:��q-���<�J��:c� ��f�I
L������O~	�g"����/��9�xjW���[�L���w�iy}�����q�����
�c�`�?>B������
t�?��p�_��+B���M�R3��"���`p,Ei9����E��K@�	,|J��!oC�G�������Tm���%/�F������B4�S@P��=M4�VN���1X�h2�]?c���YS?B�����k�Io�I�����8��{�c�"3��d!�uI"�@�����ukQT���3��:b�P���������>�}�'�K�x�Q��*�oD������C���a,�S� ����Ql���>�:A�����{��P�`����@� ����""~~}��,�'����8��E�@��6��&�G`�Ic����['F z�X��	���k��N�*�L��������{a��A��-5���_/$m���7LB��g��[���H����8����_C:�����t�e
h�zC%�Gv������W7�s�!�n���y_A`9���vB��P�����������C#�����:I�~�]�����<�����>1%�f�fW�!52��*Q������~U����%���Q��b�h�*������xI�T��&��I�l<
���t��G���S��� 96��;V(�J?�����>�a������>P��\r�7.�'��>i��t��t��{G#�������M�j�c'�u�:�+�}U�!��?#�_�$�%����z:k"�}w���"�idr��v���0��^������v"�+H��=a��o��v)��kM�y>Z����$�k%rjsw��������>j~_�b�\>����yE�!���U;!���	H�|���bG<9�)r�����A����� �S7������y�&��n���|�'o]=�w�*��%b�KK��_�~�b��GadT[>h�&N��t�0,l���
M��X>�	$�����A���Y������P6�N$Xv-E��Y��/'������aA��[54�]����S���S������z�>o$��
kg,������p��Yx`��,u�7l�+��%m�`��	������c����s,gLOa �*�f��l�����s+c�Y
�X��~L0�a1+4����1�q�U��0}Y���z���"��1k�t��f����r������;0a��Y��&c��YRH'��l����
��!`[Sv�1�9�{�7�7��S��r�?�r
n���o�&4��	�������`�����7$1u�m`�����1f;���B����
��^76�>��1���R���SL����;���v��ji����^b��]����v�~�os������]�V��
��t{��7���_1�ua��Z>|"[��p����W;��3��=���u�=o��)���i�
b�o�g%V���a����X��U0�����\��pz�a�1��[�u���j��u�:1�E������\�f����i��i}A;i���W=��q�l�7��'���aL���}�L�R�e��
>��u�F���k�/f	�=�0U��,yU��v���e�S�b���:0�EO��v�����0���]�)M����+�XjdD#-=�+�Xy��L���A��������v��&�����v/y��B�2uX,K]�>���?+��DV���L+(�
��mc�N�����@�o:���\|�uW*���W;s?�1+���wt�]��_�����:��&+��%a�a,!ss#�Z�+��t�K�}�|�\�S�O����Y���iN=�����q������|C�D���C�!k��+0���6��1�L��`B�0���!.��"+^5�E����w�Nd�:.��������{�17�x�I���1���+|*�0����l��O1�:�i�Oe�\j8��sO?�m=���a>8�i�&�y�_���w����ule����j�1Bw;��)���	>O��l���3�������Z��y�{
9j`_��<���x������	�f�#L�m����rn�kl��\�5xac�\�y�����\K���5���M�����N�D�chG|y���� n1.\@��=��D �|��� M|���i�{�&�i�{�&�i�{�&�i�{�&�i�{�&����	��@AAAAAA�zGAAAAAA�zGAAAAAA�zGAAAAAA����/Y[7���aPL[7���\�p���@AAAAAqK�ko��<T��M n={�l�&-������A�����A��r!m}��� M|��� M|��� M|��� M|����4��)	� � � � � � �6@�� � � � � � �6@�� � � � � � �6@�� � � � � � �6�w+OV�MV��'W$�����B�S��KAAAAAAD���}g+���|��A��HX����[v�h��}����W��>{��F�$����:w�R���[`�f��-;31R�2�q������
��(Z��i�P���{.5>��UH�����L��	�������@(
���\�c�����OxA�;@�Y�a3>n���s�=� ���kV��.x���>���(�jC����a��m<�
)O#"�^(�jD�g"��5U���B��_�_�B��+@<����7��u_�t5�u��i;�
7�<���g�h����F����-����Ex�����H�Pj�1}�1��Bpl��<r�c�TcR�'�m����� �������6�W��<�\-�� IDATS�p�LY
C%�Obn�}n���"]��������O�J����7l���d�I<8����7����{=����7�c�r����X��I{�>��3������1S���t����~� n-�\����H����'�(��G����������J�v��,��$zt�2H���j��.Wh���e�\!-n:*�u�<��V�$9���er��c��]�����_�u�"c'�����h~^��}8.���������-�
��#q�S�����������mH������u����{��+x�~��c�k'�8�w��	��������K��'��kR�������2r����9zs�9r��vZ��b�����pB���~�\�l�&����}~���z@-�~��'M����qZ.�z8V6tA*��Y�>���nZKq��]q�������B�V����=�}���,6*|���j$M�k�Hh��l�_F~��XX9�G/�����������R$���f��Pb2`�p��KQ$2X��AR�ah�?E����~J��ii�=�HLS06�84����M��1=�3����&�L����w�[�t���^����\|�E�`>�??=�Wk�,J��c��� 	�-������b;�&��u�:�*A��� �}	��AB���!��+�6����	�\Lu
��}�-9�X�?�i3�"��Xo^��#X���v���f_��d��z��"
��D�c���E��!�@od��k�^d�=���sP$�����"����)�a:��r�{��&#k�w@kt�V�#�;ar�!&�+�����H����?���9�S��#e
����#{���&a��+�}���H���0Gh�>s~:�#�B�
��]�j`X:
�s�H�;
��}��:�YS�w��������U�"_��+N���=H�{���"��3��9H�<����Qb4@���j��>NA�z�1f�~�|������ Z�A3a������F�?}�O��q��e���r������U��t$f��n�>�����iA���
�O_��`����QM��w0X	��EH��vX����m��]���6��� y�b����x�
��?���%�n,P�����I��k��j/��x5�^���������j)������h��pc�L_5Gn^��G_�K����$���1�^4�x�s�����E8o�����g'�<���0D���d�~v�+�!���&r���+����w�p��7���.��P!��7��/�wI��D�rM������m�d���Yy&�����s���vZ��b������V��.����>N�l�&2����&���z��_��Yx�����8����c���K�T}�g��
�g�]t	�yoBs I���]`����������/�0�j������/-a��n��K0����/o�������m��\1��+���h�������d+[���
e�n��7���i�2�u7�^�a����Y������k����|��J��b����j�I�x�H�M����{��-��b	��v������YRd4�8PY�y[
�+��^��	�`�`?)K��`��*�+?�v<M������l���o�-,g|(��9�^=�����-9�lu��0]�
m�X��A,|�&�F���u��~'�EO^�������N���Z4������Ob%�r��w
�d�p����M����ys����v\i�e�����)3[��\�������g6��,�_(K����t��3��������},9,�%l�����Yr�C,i[��+Y1�i�8�e���e��b	k�n��������ylk�������w�b�Q�w��rO�
IL;����^�g���-��_�d,���c%����5�z�-���_6���v���g|���|6�����R�m),z��lY�h��[\;���j5�d9���I�?�V�����y++4�]Kb%�������f�
.4��6�I_����+�����`�u���9�3.��������u�m^_��5����$^�G�|K��H�dE�~���r���	/�s��Z�4��<{�Z}4.��J�>�EGNe;��Id�o��6rzrr]�O1�&7�����y�����P��{����������\h<'������+�K�|�3�F����]���:��l3K�2V����=�r.���y�L-���h�H�l,g6[mmf���Z��;wk�&�57�<��.p�VN��1�FW\��8-{�����`cle�Y\� �Q�P�(_��4Q���g}!������"��7���8�?I��w�a�%���#�o���'0�@e��v@2��Q��=�����"@�a3V9>Q�,0�6�O��XV((j<�zZ��O��'�/�����B��-Y���o!kT���
�
O[�>����r�I�TwGh����U#��%�@+�E�����s�mG!�Q�^��@����s��/��CP�;��
�����*��%Xp4i3�� ��������c4�]�[�j��3����FR��:A;|����,�>��%[!E�B���/}8�h<���T`��ak�L��������^�����H�{�j��F�����j t��Q����"1��
|��A�4�n�Vd"�WS0k\H�K'h��F��j�����`Q�!T����F��S
�������J�cI����������l���A��g/�����
{Ql�]���x�o@*x����2�O�-�%A�`���F����
������d��%�#��pnf�;���5�|[U��@B�C��K�������B/���#Z��.��}%n.�f�Ph�*�s��g�K>�\A�0��
s�][y�� ��}�
�cm��J�����^6'��m�����nC�
#���C��v�����j�&���g��5>�xy�O��=�������s�5A�JKa���/��l'50�.�h?�e�@���|���
K�z��=rs�������R���7�r��p��4�������������mSZ����qxSg�>��� ����������78����Z���	���r���j�I��s~���w�yu?����3M��8�����������_�)��z�j~�Hm�-}L���i���C�����~������[y���J��E0����e(��2TH^z����
+b�?EIY�`��w�{�#B���:d�������s�"��2��.�*� (�S.*R����}�D+$��� @�W�"� \���w#y�����'���"-�	�
t�	��i��������Q��Z�+���.Z}�
�����y�XwAS��X�C�*r�
�]��������o����E����C��?4~�X}s�tGP�h,�����7�T��P�Zq��C�K��/���X]����c��<�ChR�GR�{���KOA��9);@��/����i�7��b?�w�o$B�SK ����m$�������R�}���M���G!-%Y��l6b����p�d����
>��R��������{O�C��$���Z��r������	�}�D�F$���Q�Ml�f�c�����}���o�`Zr����)w�yl��LC�D�����IS[uP}J�B��*�����
1Y:�1F�O���>o`��H��\��b?��>�3�-���/�M���G����bm������^{���]S���`�x
�Cp����8p��r}�|M���G?������.V��_�F>K�/@�j���o�������W�`:n��C�����Q<o�
8y�����+��o���v�zz7�������&s��������w5:���r��c�C6w�`�8���"kj$T~�@6?�������vY�����g�o�&�~�>?�����@�o-M�{~���^��1^.�a�y���U�0I��mX�2�*�e��~|q�p�<���@�~*����d���N�@�w�@'~�*�G -}:t}{C;�e����"�������	�H�{h�������I�����������{A�g�]yq�!p��V~TJHW�No�HE�#Ak��]:� @B�����`����������Dwk��(��UHJ?��#0[�0�������8�"�@7��
+������|�����tz6�z#q�C��)�����f����b��_�h�������o�O�G���M�@F�`>���$����I�����`��V<��n�H�R���
TAT-�����!���� h�&dO�}�����d���	%��a�x9��������vk��	
�$����E�V�/C?{�����H�(2s}���'��?!��I�����
�n�[H�@����_�8#�e
LS���WX^tV�����S��w	��
*�o1��$�
4aO#��D}����>�udL~��G�43#�������3	�%���1�=����=m<���.�-:
��rf�D��g0�i�*����K(�_	]����x �u��D�����@����l-��� ��?pzA&�6���~�=����$>�b�,�������g�5}��k'�c8��Z�	��X��q��XT]����Uku�'@������n�T	P?:�^�#��D��&�������.p��sszG��v������s��������w��6x���W����k2����B�*+g's�����W�������9F�Vi���UJ�n|W>?��W������7��{~�7���]����u�@��w�����n�#"�3}��P�^;�]����{w�����:t��I����r&>� ���"<� �V�9K���?4!]�j[�I�� tG����b5l�"�L�jg�|@�m�� ��j�VP}F��
q��\f�.����y/6��RX�������{�����P*Pt�/,<V��O"��>��}
�G`�����Z����P�
�	����#y�>�[��|4��v�U�"���a,���X���8{y�+���;�aX�������c�������{0:�5\y��}-G�oP`dlD�WW�e�6B��NPG�@��������B�N���+v������+&@#�M�p�2-���Q���1i����c���I�tn?��A7J�:���������R��dA������\e"]F���0�29����P�������S
,��p�e��Ir��<^hia(0@�����@�RA3d4��H(<�D�^����Mt��n�03��Zd���&�?A�j��������.(zO�'���"�g6����������@~	�g"����/�!V�A��0���d^�Dd��,��<V��}�PO+��/�@R�^l��?��\��A71Yz���B�+-^�����_k�3_{�����E�<!���B����j���x1����j���<{�d�����+�!(8���=�]���	xP�_���\�-�������~
��Y���+�-����p�8�}W=������e���z�]&�{}�&��
<�82N����������;���Be�����>�I��^��2?���T���>k42��<���]8���x���w�������Np��u����3n�{�8����W1�c.��*�OX���W�(���U���a�ei���"�$n������������X���v0'��"�G|rV}�� ����O@�X44��3�I`�J���W���C�������������V�n	�O#1J.@tBx��~a6�`���VG i�o ��`���������H����0IO"g�Qh�%`������c����>�FF yW%J���k�wB�v����a�����R�|UX�������(�d����xb"tuoJ}�V[�^?��W1F`�Ij���l���9G`��&�~?4h�~��o�?b�aK�������]D��tL��D��{a��A�&>M�vL�L��X+�R�
�����C�
]ZJ#;q����Ef$-�B��rTB��.@_P�(��/�xW1���
��q�'�7v��������VN���1X�h2�]�`��.�O��Y���
����v�/�����NOZ:k���6�����t,�@*�}����P�bd\w�[[?f����:�]�~^"F���a'����[��(����q�����m|>�P��h���B>��slU�e�R$O�����������u�6,����I����_:|�t��{G#4P��\��r���>����#k�t,����������0�U�������_k��������+�vE
L����@����������G@34��g��*��K2y�*z5_!'�����g?E�����0hx���\��!�n���y_9r�!�h'�m����
�����/����8\�U��9!d�q4����)N.����
O������8����S(y���|��v�}��=����bM�����s~-�W���.rb�����k������� UF���0I�_������5�{n�����cx��HH��=a��ow�3�n���&�<��S��]�kg,����@���?��Mp�����������U0���}�2�D1��`�:������Xo:�.��USYt��~]�f�D�@_�l�1f����^b��]����v�~tg+e��woz�n#X��c�1����qQL��'�g����z�e
���gq\��o];���t!]�:,���?����t��},52�%��l����NF���{���S0!�/�����v���a����X��U0�����\��pz�a�1��[�u}���m_]���#X��Z
�h�q�Z�7$1M�kl����`������.L;|"[V7�����I�V$V���,ap����+o�.[Y��kL��=`�����Y��"���7mG�f6V��6���bP3m�p�{!��(k�#��UL2�e���C?�&WO��H7�\o�\��8�t����<�	:1M�h������]�t��	�l| 0u_-�F����N6w������v`�����7hb+���V;�-tg��S���KM��7�q+�����o��g�6n1+����U�	�f�#����7��$V��.���8F��]|Ssr����:��9(�+�l����VP0L��(W���-�+�_s�=k�89�����4a���"�1��L��&fv��xv������[34��J��W0�}5.���+�����bZu�����ks3��k���O1����L���P����{;a���{�|�No�9���N��9������9!7w����\���D�Jg��8��'lG�g�~����N�x;���������7�x�_��!g%���1�����s=.�9c����4��k�%������I�����8�w�.{��\��j����&�:&���L���V4�@��]�7�	�(c��/��b���-������g[7�h���A�����A��r!m}��� M|��� M|��� M|��� M|����4i���AAAAAA��B�� � � � � � �6@�� � � � � � �6@�� � � � � � �6�8X�%k�F4�?�i�&��.�u� � � � � � n)~������
��	�m�g��m��\�p���1H��4�=H�_.���A�����A�����A�����A�����A��w�&�4%AAAAAAA��AAAAAAAA��AAAAAAAA��AAAAAAAA�Z� �'G6d�����
_K
��K�|	/��'$���p�����"� � � � � � ��B+���;���+=�@��?���|��a���v5��r>)��7Zw5��9�U0|�:"�A��� �l����Hm ����M������~�@(�&�"�rR��_F���C��l��Y����c�{@�Q��C�c�������>���(�jC����a�7m�T��:���������M� IDATk0~0
J�mg�P�nu/6�2����>]�P��T
6���a������-�
��#q�1�u�/�����t����L�����tp"��}C�����G�|��������1��}!{�3��(Z��i�P���{.������T�s��P�*�go6=����.��Ir3��O.�Qb\M�7�c�r�g��n?���^M����:;��I�����4�o�Q���1H[�4n�U(�`���������6���6��vU�GZTW��!s�7c]<�
��UP>��_���bX7��>���j/���"~��|sK�Rk���#7=AJ5&��9��	rv]��<��Em8F������_�G�����?���x6��b_�bM���q��Rj0����?���/��x���?_�Krx���Obn�}n��:]d����g�@h����X�0~�9���/���=���1rcE<��)������D#q����W.3m��B�Q�������A�tf=��#�������������)/#��P(
��N>��ud�A4�cL�������x��EGB���~��t��>�������g����6�v�x��P&�x��ZYj�1^o����#?�x��_y�������5����(B���i���c������xa'���G�.�@������307�1�T*��C9�_	�#�p7�F��H��N���T#~A�/#?�9�(��z��f��R$���f��Pb2`�p��KQ$���`�����6#)2q��nt��L��3B�_-����y�E�`�r[�!g�+�>}
������a���JP��5Hk_B��eM���w2v_�����F"��XDv�h���M0_oh';2��
�50,����J������>dE������Ht<�Y8#��wPx����A\�
�|�
����Z�IN�l��B.�����l\���v_q��� ��=��
�y�c��8��.�|�~z��<��W��.X��AR�ah�?E����~J��ii�=�8�t��tz5�&���o$4]noO7^������4���R,��1�?p5��Ab�a�,�������:c
���K�$�V���������
2v�J�dM��!r.�&���`\19�P��)HZ/9�x�C$�d}�,v�?�;��~�����s6������)�y�����y�,O_�b���
�>���_2\������x��N���C�	����]K��=�U�����J�>A|�
$fl��^��y��v�7�v^��l/��G��9m�[���9�c��� y���x�����������/�����?4�������
�6����yd��3�K��1T�z�C�U,G�_�;^R��~��9����<�	|8W�_F~��XX9�G/����������d|��g>g�E���`�r��`�H����'�|���`�E�P��&4����AGN��%������4�_(7��3�rR�An�M�ud�A��1���,ys0}3vR�9R{�E����In��DS����Z O�s��8�lU���	������{��j�Nc�^�3w�G�x���8�������5�>H��� d�F��",�:�������c����![��~���yA��nWK���o��36�c5�
�_S���U7���g�^��v_���K,���� |�����uZ����rf�YX��P>�sf��&��oe��>e��2���c9�����k+�����o��~������v�����V���s��/�%m�`��9,:d4[c�����m���6�X��3]�X��P��u��~%�����Ye���j'�r}�Zt��/���Yt����#��3Xt�T��\�kDV������8��[��d}��K�.d([`�f�
IL;�-V|�f���?gI��,�@e�������o�B�M������c�&�����Xjd�_�u�=y��]1��+���h�����������lc+Y�����r���'8�|�J��e�{��VK�������b���X���n���W����Z6��	�`x�F�8�o<:�KvR�y[
��:[�9�i���3�X��n5�����,�4�w��w]d���e������9G4rj���Y�E����ly\��u��fa%�������6�}up����,9�!'�)��c�f�����5V�+��0|�p�2Y�sRK�������`�f���������6����/��drn����$/�v����z�%�����L��,�0w�m��w��{��]��(��{{�~N�K���l=���������������v�!;�p[�z2�e5��|m"�D������X���L��+���R� 6�%��Z�:���)g|�N��H�1���l���qa,n����mf�a�l�)�����nc|�������9n{�{�&�sc�L<iN��������/��8�0���k�����������1.�_WC��������e����*g'�yYp��N�9���]�7�	���7�����}5��l�,0�6�O��X*'(j<��Y��R��#m���;W���^1�]L������H�}��alX�z�G!�Q�^��@��-�s��/��CP�n���3�����v/	�X��06��U�=�E,,��qi���N���A��w
LG��C�Z��3�����M�.Pk� �����g*�U���U��"�g?CZl(���0}�A�v@�8�������V���`T�����=V?��`�,:���=��	T6y�����]��m�ZaD\�t�=��zM4�����^�O[�^��A~? ����A��	��[-a��:�,��Icj`>]
�~����c��IKj�n<���7 ��XzM�����f��G%�/�unf�;������<V!;�U�}��|y&���������k�����E����".����Bwh���(�m���j t��Q����"1��
|��A��+�>qa�v	�c�b����"b�S���-�Db�`X�.r��5�_�s���/�����=��j\���S7�
E+2���)�5.d�U���1�����D��PTUx4�L�w�����=6cN���+���P<�I��v�����w��>��Q���VO��aK!��������9������.�t�[���+��Q����Ur�����"�&x�)�U}F�u��_���0�]��?�b�nk	<�������v8�lM���	�x�hF�������k��Af�y�?������K��c|sb������h�T���b���Y��"����O�~��x[hL;���>�w���� �n�?:��6�c���*�;���iY(��^�z�1������X�l�;�uZ��y�XwAS�_�P���X^=YS#��sg7U��D!�� $��B��9���|i�O�8m�cM�>O�0�5��>��
�E����C��?8��	��&!mF:��k�������!��o����7��F��kH~?
��+E��S�dC�/@�j���DtT �?^}�5@<��E+���A����������Ga6�u��P8{2f����	B��Z ��`���tAht8�_��C�9��^�r�]�tU y�}{��-������G�G!l2�:`VTW���O�C��$������*Rg.����=��81I�.sZ���4B��JL����y(4~}z8���@V�%H�",�3(�����O���C$�7"9uu��3i2}E;7���cC��`�&��v�$���*�1��`��������@|���][�����.�N��q���/:����;��S�A�Pt�����0k��
/�T���!�5.F#k�������&�xp�6�����C���T��x�M\��������VP��;��7�m����*�G����U�$��G��j���7�K8���s�6��X�*EX���zk��d��Pd y�A�2��3��UH��!4)�#��=z�!�A3rW��$1Hg�a��|��$H���V�]�U�AP:[��������u<�)�h%R������~*�a���{�9�7�x�%8��'5�9����|���x���M�I��ZP�~������Ojl��db|sbD��'������D��S���*�,��o'!\���_��N�Qp>���ps�*��]�����"���SW�������O�p���"��������u��sg�'�#u���	CBJ
t~'�768��l0�F�����E��*���"qv2�7��@��(l�C����S����K���BR�!����j���N$V���y����_�~�xb<b���>�udL~��G�43#�������Nj������+D$��R9�aT]��Qbe���(t3?���bL����o�����	�:@��?!��I�����
�n�[H�@���P�Y}�P]+��?Vti�z�;X6����e�Xv�!�E�  @��j/�o�TF�6b��P������'�6� y�����,�V+���+� -���q��#y�CP�	PG>���D}]�BK]���4F�R%@��D�z���k���H�
��*�T���72�0�7��=��7������=��6�m�j`����CF���'w��9c��|�������5��2
�i������"�8Z�~�x����#���	s�&������q�DG�K`�+��@F�`>���$����]�&U��`�&��e ����r��M��*.�s������VQ��OP��'v��6�~�<�������X�a.t�����)����n��������S�<i�������/c��0X�l������������ h�&dO������]�|Dt�)�!`���v��9��	P)!]�:��.Am�	���oLD+� HP@�v�@J"��7��^��{��z��Z�+�x�If��iy��6&��'-����_d�w����O�U�cD���1�91���w�o����W���2
�����	����:u:��3/����4���;;�������ww<�{wC��5����a�i����:wJl]08q�w�I�'c��H7��}uJ�?4!]�j[����4LP�{a]�[�50�����H���B��2�
�O������0�r~	��^�Dj�_����;?���#�V���7qC{���q�%K�X� ����������U03������6O����.#�K�k����H��Kt:!(8���~��.�t�<�u,��~�����z
��y�5��������!�����$�zA��0^l�.�����4�
��p}*tG����b5l�"�L�jg��
W{/�8�a�S�Ph��.Kpy����������
T*4CF#����C_A�>���Ri��%Hv�c'�.�:A�'6�7����C�{A��6��B�c��]v
�
`��w�v
�����W�3����SM���3�'���������
(:�1v]1��y�����v����\�]�E���&.�L��o�5����b7�F��U@�c t�����7�����%��#�:/:i?�}��7_�{L��S�
/��R����a��b,"�o�/i��R3�8�?��<'�I��Z�dA���������~�<��SRQ���3���2����K=2��g6/�mg�#H��Urnu�����]��i����ZBZ���`|�%^Ua��]�`�jE�����sZJ��T
�Xj�]n@�eM?"(��T��u��)��E�w�&�L�����TyF�34}�9��'���M�wWKp'��ys�6_X��&�A@�^���1������.�rc�;��?z����1������4�����*���EtHT������Q����WOv��z@=�/���KmG������������C���ykWcq�8��+p����{����~��}��'� ��#f������9��c]��b@��]�]������Z��:!�����g;�>t��C��o�fTWXv-E��Y���%������a��K;j�^�0|�8]e)���*,��F^�a�n�
�S���X�m�u��"��1���0��������a�����L�j`X9
�N�`���w����' Q�r����w�S��q�������""~>�*�c��E������;�7*J���i��"�(�{�!�z=��Q*�?���;�$r6�f\b�
����q�F�� ���a������������NaE9�)�b�&C�2�}b�LW1���5�R�
���mS������e����bj�����Z�e�A����q!�����03g��<����s����s�����k�(���? !�����?5�y4@��a�b��24����~�Gv[�= V��������Na���������N"w�&�������a'��6��D>l���X���~����54�tF��E���-u��v;L��P�~b����a'��Xp������~��(�P���F�=1�:k[�SX�[��h��)aP-8�WoA���VM��7�}��]�_+��K]/�| ����0�4��-��o�����0�W!X�_�����a�74@w�Kh�A)�e��[ai2���(������R�������c�g�E��H\r��]��$3�yf\�	���F����lt��*�GN�lh/��W���S���y����7l{�zL�-�sj!p�����"A<�9[N@��
r���Z����H\���@�_����39��vZ�{�K���B�~���NzA�"�6#���n�?���0$��-w���Oq87	�w?e8�����g�8o;taBB�/#�*��[n�x�s	h����k��5�gu5���A��s\�&v���� �_n�w���#.0����X1���H�[2�8���)~����-��+����AP�������#��8�s���~���]���8T�uwW���?����q.n�8�7h�'�+���5��4{��"x�!y���T�����0�G���o[?s���R�<O��Y���uS~O��z������(���@E�������� R�DR���Tn�NDD��$��m=U�%�<�u*������;(e��r_B_R���u%������]�	J�i��@%���Ss���1�2_R��A�����0�{u)e���~u#��]�����M���k/�����<k��
T��5R�M��J�h��l�	������Xt6�h����� HI�6�����v�j/R�;��{_J,�nS���'7��h�]3!�K�I�hW������J�)H����H��}�
�i��_��-���W[�:�{M�H�YA���HHMI������R�� ��%���U��{�����I"Ue?K�����,���+h������3�rum�5h��0R-�j`�I'��H���Y�8x�q����qo
���	�x�+2��3��T�?�����R�(I=������LIC���)FL�U����[J[jPJxX��d�+��xA����B{�>�S��+\��Dd>�M��H�<Z��,�]��lR��h����03�3�G9u3�rwWc+��+�+?��q$�H��R���1�S��h��Wvp^��o����2.�d>^$���5���C�����>��	$� ���Tdc'��1��
e'"�M1e�j�K����)~h I��R|��rw�iC;�B�|.��cO�c�[x�y�1��yLpO:��nh.�V��L��g�������bs��1����O:7Gc�n���{-9K���v���vu'�j��|�NX9�'�]��5h�ED�[���)�c�Q�]
�M������wW�sp�<����5�<�&�\��������x\��k�ypM<����5�<�&�����5hrk�����p8���p8���p8���p�B���p8���p8���p8����8���p8���p8���p8��q���p8���p8���p8N�u��k��Jt�����U��d��U�p8���p8���p8����x�-���7�x,2������\�p���
 IDAT�����jpn����5�<�&���������x\��k�ypM<����5�<�&������x�M������p8���p8���p8N��8���p8���p8���p8�.�/�q8���p8���p8���p8]_��p8���p8���p8���p����W��}X�����_��5��q8���p8���p8���p8�:�g�_�~R���@�u�3��1}����RH�@Y=�~!�G�{B��`+��\�+��?A�WH���O��V$��$F�	///�?9f��@t��0J�///�+�a���l�w9�G"����u��gg����_�XQ�y�=
��=,�&m=���!����?��,kK�^�������x	��� j�����6&y�/�~�te���0����^�l�6]������^=�����s=M� ��G���3���n����S����^Z�~Y�[8[�T����)��8�n8S��K����Q���2�9��?7.4Oo�,���xyA��	��/���) �79g�������#A�$=%�WM���g!6m8�����@���+0*y���4@��/���6Kw��m�s{+�bx�����}��w����w1.��awF)� ��"8v&V���;��-H�����|�0u�>D�e;c'�p�X��0������S���Gp87�
�9�^L�v>B��M��]>{������#?-��n��m����������W
|�.F��������[r��r�m�+��'u!�ta��}+�0l|{zA"Wa�����J���i?���_�%�|�:�+���%�?b"�������G�o`i��}�Y��vU�1��C04�
�~�B��X:�i�w
�]�`{}���
,{l����?I�.�]Lgr�&-8�g��b�oma�U\������g'����q�1���qN���|�#�v��y�n��N�)cL��9��x��V��,�v����h�>��.g8���MS���~%O����;F2��f��]n����W�f����qz����K��%Jd��hc'�c#5�a������.��(�,����������;W����;��B��`LI{B��?�p<��d��8��a�����e��0k�?2��F��,�8������m"X����=gn���a��/���O_�Ux4�
_�1+�s�����:�N����w�_}�#g���Z�CnY-�G?Bl�j$�yg��o�I������EN�w��������D��z��6u0�� 1\��'B`�mE<��}Qn~�w��}0��%H�~���q�f,A��,Z�=��}�#�}�
�`� 1�$��{���K����D��@E5�Z�����t;��>IF�F�R��G���\��EfY;j� sJ:��B��A3?�5��{�G�_A���H=8��/�X�%2��#u���w.41�����������z��y���"��e�C<�����]�0�_��7�D�����9Mrv%O���?�g�z�4�J�b���~��e-vb��	���W(��A�6�f[����G!h��lt%�������2��Kq�'�� 1y7�o~�r]V�0!'��&�;�:�]�����eh7�l|)[�ZN�*�;i�����`u�2�6�q�l�����
r�}��
�>a�<Zo�+���`2^�|�f�[����`:����"��!D�mW��[�Q�"v�I�m�U��� �=���5]�f�Xmz9%�A�oP�^�Y���<�q�+��g� u�b�ASY��EO�t�4d���%�&�b��~b[?��H�8E�T]<��1"V�LE�9q����
<)ck���H���	Pz��[_���e$}R���15�#g�k��bW��Q^�)��� !}�[��
L{lE�5�����vw1&�R:�+8�������\�om�e�U��)7}���	���p\a�?ox�c[{�b�+;��y�����x��7�h���4�������j���#�?�r���&����~����E@�d�~C�1���~����-� p�X�M����@�x&R��m���O� �c�k��	���H���	���1B��E�_F��J�eY1����}8�s����&�����n�&���=ze�>����Yg9T���'"U�����"��E��'(i�A26���H�l���o�m,L�|����*���
�Bq����4(�R�N����x�RB� ����/���������U��!e��/)'��m�?ZN�h��e"�_�4�b�X@I����H�.^�\��fJ�LR��Y�eP��z��4��$�O��~�2�=N2o/����}�;g$�}�H4�2�V�\�t�[HRA iP4���������D��?�m�6����3S���$W�K�u�6k4P��`R�����K��*p$����R^_�L�o������]A��$���������d����H�1UY�%�UPVL�o���l���<*�5_C��5�I>��n����H����^R��Y���G�M�F�z��Q��HR��L�F7�����qC)n��f�;~^�D��l�m%��|���:��D$�^[Efs�v{Z�#�9Z7!�b����8�+�P\he��'}^")��������#S��o��Y����$Ru����R��|�U�C�����K�t�����41j�I>�v���h���jR��a��5:���J���2���b�~N����l'5()4���\$2���-�����"�/{�������L�+�[��l��e����G;�%�ICYe���kk�m���0�����D���=5�iW������Mz���{�H&f���I��m4Q�;1�����&!��#-���o���tg��t-]����9�6�b�b��
-4����(R�����l1�\w���=�L�����u��2��P|������#{����p�l����dK����'u��9��[�[I�
���~�h�mS�H1}��F�&����������DEoD�<�u�B����x�q���7bjb.Y@*�|�9�����|��&5{()�!J,h�95#���e���Tn���J_3�T!�S��k��s��
LM�r��Xm���:2���������h'�t�&�+�����s���S\�ox����1��.���8����]���T3�����a��n��	���E��5���6������!V������I>�r���{�Y���e}�bW��I�JRFSVY=���i��/Z���Q�k�rQ��|��~����s;�s�������x��<~
���w�u'�����R:�t����$
:��3'!u�w��� 6P���n�MWP��t���� ���Qc�Ea�0��^�T�e��>K��� x{�>C���H�X��A�(���Y���g�����EB�*��;������� }Q*����
x[�zv+�FO����0>#YS~�������t��G$L;7@��$fMz8�%��?��j%�=��3�{k������4{	�����<d����
�������^���A����o)����
Qj�?eK`z0Q�$�c�`���P�I�Z���
WP�&��N��	���@w�{r�7����A{����q����J4���
Re(��]=��?�!��9���C2�[���H}����){e��\a2'���uY�������������~�,�2	�^��!8���<��F���r/�__��/@[y	F�	���#5f0|%�����lUe:���� �{������c���h`�mC��+`j:�U�=_IH�*L�`���\��(F�Cl�]@���X�r���e��.�zX�x�x�w@.m�c���+*`	���O��I��F��G ��i:{�b �w��'�A%���P��C,�R��h�}�U�������6e_��)j�]m/�db�����g�����Eb�v����mNwa�\�������~��8"&ba�V~C;q�~���O�P9���QV�����������p��g����\;��.}�sc�p���cmrg>i�bH�Qo~���0��@���G���������������_�1�#�&�`4�J�LFX�VL�Px�����'Q^���Z�#} ��(7��:O�b����-������0�07504��2�8�'vtD?���W�	�K��uw�<1S!�qD�]��`��I�s�����C�2�q_�&�!P+{�����l�\����H��:�bM�J2��� w~Lq�b��8��['W`jb�����V����������y��p�������F�9��>l;�����;��1��8��9��������r>���c���T��i7G������������l2�h�6j?��h7b�]>���\��N�W�fn�{W�v�	>RM��"����0��k�@�v9rN�������iW�e>�s����~�E����={.���fn��8!d��M �vdNKB�����J�WA��=�F��oPX��X{��O�b���
�[wB�{�����i�HI~JE��r�H� 	K�2e<T2��<"�k� qZ"����XV�%#Jw� .m12g$!s������n�~���	���#k�T$%'#.�'h�B����H�HGzF��\��H]����H�����D�������A�� �@U���D���
���o!I���o�WO)��]F��D��Q�y�e�]�[H���y;W���@����w���Ab[B��G�X��h�x#�G��W�Y�4��>��D����������N$�g��a!tW�v�������!���*k:���-�A�����DW����H����%�PI]$ ���	����R�
���^����HMNB�������6�w(�?
�v����J
�1���*�	M���������Q��0�\�������@��D�����gw�3��Ob��������*d.|��m�a�I�jM�w�6�!� ������t,I3>�<y	CZ���~�Q��#l��(4�f�C �NCf|�������S�?3	�v��v�M%���F����'��v�sb�W���eeFD��@ye	�3`��w�o���,�>�����4��^g�u�������������7��$qwI}��i�9Y�S���_(�Q��"���"q�!���c�:;
�^��r�#�G��T�;����#�a��_C��@SY���#�����V��7��B��� @h����y��"�8����Z
�I�a���t�	���@���������~w"X�4�����\mX��c!���Bp�<?s���HM{
��C,���+_GJ�}p��35�����dk�����za��	������nJ��h?�����������+�
LM:����o�0�*
ff�v����#oI;��bi?�q������;3� xf�g���Btg���x��E[y�g�RN����q0G���C����M�[?�6�u$E����v1�����+��%�����s�$�PE������T_Lg��l
4�f�l���u*��	���; }i	R���vYW0�N��s��������p8����uZ_d���e���Q��a�����<���_���A�Y��%m����%�����,4bJ���h�Cl^a�
�B��p�[����A���������x=,��������2�B_���n�k2a�]����=�����B�58���d����{A���� x�n�D��!|r?��O1oLH�7S��U���
�^C��+(��c����6cr�^�vS��=���'�q��?E��O#.��/��J%��6��0�������j�`���0�:��B-s`�>#i��PW/F�=w!,�s�F?	E__HmrH��V��"a�C��g��zY�7C63	��s��4]�f�8�_cB�� %���:Z��_��Xoc�	����
����2g*T�$�PO{I��P|��}��J��9���[�C���9	���K��d��m_�,@" {|
���r�&�����PUk`i��0�K����1OQ��	�<#�p�� �c}P������$n
*-/����)�����im�Z'a��;�~uu�O_m���d$���%ga4Q�yX3���<����K�l�OMDT;[t`�?���w/H{��2>
)�< ���P{��F��W��1ut�#2�m����������NlX�^2 ?�/�~
�F�c�r#>����|`��A�����A����7Y	������r�H��$�>^~��7�1J8	�)#�rL�O��������A�-@���%�����7��Dm���+0���a�I�� �Y�'A\����D��D�������������������`���6q$�FbU�C�U���f*�Q\�����7'������
���@o4Bj7�� a�>�Dv>����2�g@����0^<�\�q����2�M�5��?���l#�'1&Co�\�����������b�U��0��>w�:���/oI;��q<�q������;1���������;s4������|��R'�.�s��4��#i2x�&�R{�D=;�����c�[��\��;ps��������1/������(}�I�}!�mm{��u�+P�~2��/"a�!��,��9wb�����3?���p��N/����B��2��q��Z�y�M���?�}����oF}�h@��4�Z{���al4�j}B��v�r�B��v�&�l*��{��yRA���"v�Vi�Z���k
����������L^������A��H�>Ma��~}���N�����ml���R�I+�ko����OC���Rx����<��Z�j
�.c2���z�6�:���@s����}!��*f,�������(��e������//������?y���B4�x��!�������0U�,[�@�%hu?�?���E�,���R�Rh6��x��4�E��{
�:#��#Nzj�`���������p����}��_���C��h|����C�[�wqW����/c�a,rw� 1�������_��������g�5��|���A�9���&���0
�m0����.��)�^�
�����)o��_8�^������9{�r���HY���
]L�v9N5�����Y�a�$BwJ<�pc��6����"R��Ym��3(���r^�/1S���sJ���;#���A����B*�B>l,b�(��nq�{��yaTL��r;���g}�[
y��@����J�n�u<��7C�����:b���vb�����Q��e��=���S��JQ����}�}�K�Y����pnF��O����n+D�l!6]��X��gM
0���,���<��)�l���:"��#L{���9�C{���M�0H~yO��<����^PL�v��f�Ek&C.��`%�����+��W��O������b=����|b]o(����%������9�������{��T
YH4b�����q�/i��y�&��}��{���B�i�!P�=���(��u.���_���������p����Hx�>L�i]���r����|[����+s0��t��������m�jE'����4��s��)�0����Xs!��Yc����9�3z��������T���r>��
�GV�{�&nb:��M�"N���Kg1��|�)��[jO��\��y �G��}U�����y��`~��_�_"o��Z^/!��S��9y J?/�l��(���.��gZ�9�SM����\���tz!�7����������+��������/����a~z�iD��`�g�9���y�����g��!	��S,�T!"��w�}�12\��h9L"`:�K,�.�u��I�(p[���#o���[a�z���'�A�+������!gY

�q���z
a~�AWV]=A4A�{���cO�:��=aD���0��������+m��!�M���
���[3�+����AP=��� "�����g��]����h~2�$4�P��&
������w�2���cl����r IDATC���B�#'y64�a��C��W�M�(1��<r&Gbx�N�?�^�^����h�X
(-��
E����}��E(����Ws)�aH�[����u�v�
(�p&���B��iPv$�~��S��X��j����y���B|������)����M����9
��|R�!�%������3��v;L��P�z���
�;7���Ek��	P7c��C`8�1r��B��`��M&������2��?���AP��L���&R�d$�������w�������A��!w��L�c�2=Wf"�~�����M����_[H����4P���R(��C<������4�^P����V��\���(@�h�}�v�����w_D�{��!r�_��?`�G����V��{1o���}#�1���3���v���wI��u:���4�mJT����[���!���
��sb�V$��b�N�b�,�x���W�Y��Q/`��M������"0*��2�����t��<��%_X�Gj:�������:t��~�4GK��ht"Y�n:
��xD=8�y�4�;���wb���0k�E��l�*��g��dr�I�vlqu]w}����0\59V?\�a%4�@�M�p��������_�������2�����������+g��lM��{a�h��[r��K(�[
S�.b����o��+����eL@0]u�����=�5?]K�
2�&>��q+����8G`�o{l�{���p~i8���S�����A'�Xs!��Yc�!C�s4���1������K��t@+��hX>R~��]���9�}C?��$F��9�9�`; {�����97��eK�#,nqK�]�O��)P�z���2g�BV�{�kO@s�"�CC�/�������;���sc��������p���8T�u���+�Pb��dOP��Rz� �{G�LD������A@/R-�|fA����Pl������h/�����NPfxo�=#)Ww�rx����")@@/RLYA���Dr���i��{*Z�<)|��C�i�����rc�fJ�r��Tl���}i�I����a�r�u"�J�EP�BE5�,�����;��U^#2���e�)6���s�dCgP���.��fr��������V��k������Y����%x�!y���#��*M�MjF���gI���W��Oe�:0�2���+a<��O� �_��,�"�E�f����,�^�FT��b�)(io��<�)e\8�|�H�J�k�����B�)=r�f���.�6Ss�R��Z�i���]�	J�i�6������y�����H����)~h I��R|�����UWA��E�`�My�XJ��i��
�}c)�z|��jb����u���9�?)����f���# iP4%e$c�k�����4����!����Q���uo�!���#f����Y�T��0e�R��r*z�a����f�*|�bzZ>��j��&��jb(	H� Ex��w��3{l�*/���[��,;o�fk��O4��4{������)�e�+��D�9hW���Y��Q�Svb������h�mS�H����o���u�"M8��M��3}��D���D
���40����s�J*����2f�+��H��K�i��x��{t���{�o��~A�����.^m���FDd6P���Hx7�Bc(ec����'u��9��)Z�j���RPMD"U������-�,t,ei�[O���[\����f-{��Aw))b��]�K-xJ�����D�*Z4���^$�"$���n�r��NX���	�T�?�����R�(I=��Xc�+��G�G��:�yK<n���\i��~�n+�[�9����<�c���]���������?������8��Z�>��N\�9���C��xW��5�oC�9W�i�Oa�R���������w9�E�'"j4��������w0��4F��!V?9������ v���w+?����u��!��v�4���n��f;i4Q���[�'B���1�Q��|�i�j������c�w.�V~c�����A/""�B|�M1����j8�I������e�z+"��;��W#���%_Wq�����������v������x\�_.\[��k�ypM<����5�<�&������x\��k�y�4���DL�@����
}Yi�@8���F���t�p���p8���p8���p8�[
�:t�F�F��?A~����fm7!vN6�-
_��p8���p8���p8���U���n*}����3�wwE8���p8���p8���p8��E���p8���p8���p8��x*��������uw8���p8���p8���p8&^DtK-�}�M1����jpn2.\@�������k�ypM<����5�����<�&������x\��k�ypM<����5�<�&���A�5%���p8���p8���p8����8���p8���p8���p8��q���p8���p8���p8N��8���p8���p8���p8�.��q?�p$/|v&��[>����eo��I/���������v�R���p8���p8���p8��B'�~�������?��������o,�Q��p�j�<d���Gp�Z����p8��%�������H�?�%�����x��c�������!���a�Ng�p�����z��!�>��0���Oc�oH���e�d�N���W5�nxId����������i���������p��~S�R#����+���9�^��D�Y�~h���
�>ya��#���0��0}����RH�@Y}���g��~�=%����
�`j�~Y}K�?�`E0�J��>��������V#��4�W\u�AoM��?�H�����m�%��Wo���j�n��HP=IO	�U�p����(���Y�!����%>�i�I�%�a�wXt��@�����NoAj\�%=�;H�����`�R�(�������G����@[Oh�'^����|�R��#X=�qK��r��\��I��,�bi�{���6�a��>����`��$=%8l"��n��t�c�����I��>8����t9����{@"W!a�����=���#|�m����n����>������G�y��
h�����6��N]����ro�4i���_�p����GL�R[���=.����H�}�=������U���M����,}���8��h������m�9�X��C����N�zs5vg`���/�cgb���[�c���ue�������Xq��Xd�wt�l��4�MD����)Ep�\�|j;�
�cB�s.�&-�� Ga�8�b-����}�7��P~sk!V��8$�� ����/��#?-�c,��S��]������r~�1���������]����)�pr��MS�� '�4�O������3�'N����:KCQ]��-�=cn���e�k���������|:�p���;T�u����<��?��U�� \;��k�ypM<����T����FRf�6J*#Y���*�u���5"��7�������eT�)�rc�s�_�=����/���]����*h���I5g��/��r?e�"���o4S��8R}������5�+#��C��b������ %%�?HUz-{��Sh��k�5h�O��OB���F����1������I*
�����e��$����2�AR��������� u�J�6���w����|5�)}h��l���z*/�����Ue�D�s�n�R���b�
Z7!�jf*]4���oS��Q����"��m*�i[����Uy3I��K��y��x��LT�N,)b��"�d�ki�;1N�0j2H4�2O��h��-o�*0������'(3z0��l���_)6(�R4�Dd�����,d
���%�v?eMB�1+,z],���`�[���j��?�%�S��o[��|������Tup%��#U�WdnWC"�n%��(]SK�h��7�H1�]�u�{��}F)��H����;5�j�K�}���oh���I5{�C�f�I}A2)C��*�Y2
T��)G��S?��k��Sdn$2W�����o��J�F���"��wi��{��}J)��P��o�l>G�&��r�����e2����q[m������9"��R))���e��U1S����sQ'n�&����&�I��ER��CTuQK�2��<�y�����=���\���C����(��F��|D�!V;a�+�Q�N����URKD"��Zm�icf*~GM���c��<���	3��o�D�>���Dd.[I�A����L$�k�b���i�6�������*�._���]l��oI"E����|��"I���-y�3�nVL�������I+�����a��E�H9��Te6����j��|*���c)e��I�*�}�x�2�=IqsR(.(��������QQ��������X�a�]m��]?�����L�bOG����V���X��w�m���QX����1�V���I���.��~�������!w�����`l�T�v������xm4i4��)!$�W*�3R���$(^�"�e*]<�d!�'�b��W&�/%TSJ�����1��~=>�Q@E�g����P�_y�������I�_��O�\�E�,���Z&3��0����@�~
���D��_'u��$$���76R��:���H�l��-�ca����,���S�)%f0I/dA�Q`45h���w%-�G�Aw���b��T��oz	B_R��H���5�i�4K��������,Q���B ����2z0I�A���)KS�r�,����Ym�Amo�sT�e����x+W�O�uf��l�m%��^��T�#i��~RE����H�1U5�*(+&����� �T#��UcIk7�Ww���
���PRx��`_$����f�Nn3n�iI_g����N�+�,RQ�J
}�����{�x�{�J�z�u�j�N�}���������-C�k��*�y�K�����������3H8�����-��s�-8F�f=jPRh �o�HFM:��g���MT<Wm�$0���R����Bs�JR7/��]y�j��F�Nz���{�P�1�FRzI�dQ���G8��|�r�D�r�uBA���(w�u�G_�l���5�;AY#S��o]K�>i,�M���['��{()$���\��T�Z6Z���=d�;���\���B���c6Pq~�������hh��wbH5meMB��I���94���.:lf?���O��qO68��2	)�o�'d<@)��V���W�o��m[�h��k<G��}���$R����\��v����X�e*z5���w���x��yt�d���np�����O��:��hN��ErV<12}�+�����Xj��KJ�|����nq�+��S�7��uB)v��&�[(.4��N9��DN}73&���a�����^�����1�,&uP�����7�����QU�U2�,����qf��.����D��b��;D��	����������in�����l���\���H�k�I1�m*���A{�/��Q����k4��k�����ca<�����p@^~��.����p8N���@����c��,G��rF�Io9����v���-@��t�"��f<�x��� a��Q3�j:���w�s�G@����T��nGR�E�����C?����g���	������	P��7��?���UHQ]�f�d�O�
D�Al����(6\���t����gG����H=	KKn���ldM��2&c���!@��4U g�i('OA��Gh7��Q�?��s�!.PD���b���@������=��X�h2|w�!!��5A�%��.d��x
8�)RS�P|�d.�#d�#�����P�umzzC���� ^B���tK�#�!� ������7@w�d��I�������!����|n)��k��6X�\:W�y��C='j�w������E�0	�B ���dAr�EH� ��rpc
������V=�0|%����~���]�t���(��-�-��C���@64r���P�e�(�����%0=��~�����A��,����,�=h�b/(F�Cl�]@���X�r���e��@�4�G?���Lg�TD��v����������@&��XQc��:�H!4�7����NEs���@�)@*G���E%>`<���9�}+�u4�o>�7 V�Dy}_��m���[[�r������J/^���m��Y_�q�e��>	HCG">�!�>{y+�@��{�*�!>�(���,�l�u�04���xRG'��D���VJ=����/_�m���P��u���r�e%U�*C!,�4�_���,Z���Z�!�`4�J�LFX�va�Px��va���+q��lai�o)|����d���=��A�(�&����4k�#����)�]{A���������`(��M!P+�����Va2]�N�7���IO){	K�}���#s�V|���=8�_v�d�u�����S$FX�+�������Z2���������Km���5(�w:�M��=������V����Z�!�������&��s���13�bi0����P99@�\$�����7�~��I��-�/�����+0��!w���mf���'���EL �u�yW�eKq��y������)��N;�g��F���Y��Z��]Yf��b|��{<�s<�������?W����17��u��"���p8?;�R(�r���(,�@�M5�~^�,Z�*��;��X�]k�B�a>��c��oE/@�{$�_����H��@��-A�����PwZ������H���!#�A<��/� 6�AH�X��)���9����a�����B��$d�\���^��s4
����Aa�b�a��>
�A��������~�b����3I����	���6�}����ys s�
��������L~R\���������=�a3��1�3R�3�}���n}��l�\��x)�� )�8W��^(B�^�} Q��-"��x����ac�F��9X5#�n�����H����%�PI�&F�DMf�R�>�Z=��s��x����}w����P6R��I�_���f��"�5W�;�F,B��?��)Q�h62�}x�ElZ2�5��_�^��0K���|RPL|I���zJ��2�&B��d�
��'X]?�3�!�vp���X8�/�#�"��
�_p��`��X6�f|y�$��S�	���F���N=��*�������*`:��ek��6�d�
�,�>������_(��#?;:� �-@����]!�.����k�!�OOC�u�B�3Y�m�D 4]��D���Xo��p������	T�|���MHJY��=*�p����D��+�[�q�z~�#5�)hg���o�P�|)1���&b�	��%�J�����(��
���������4��p�+��~Ys���$�^df|	������mU�PO
)o~Me-����XS._[mS�IW������UJ@�9��`y/����=vb��i-�4c�:��a��������f�k=A�����q��}�Om���t$���1��$"uv��c��G|�����w�x����0����a��f�����5(+3"*m�+K�t��f��|�w�����������c)T���@��������e�?��'�Md���Wh���j��v��v����4q+Gq�l0�l�6�)�k���
�7�
dHHNE���\oDi��������� ��w9��w�� 7��c<:�S����C�:����W��GeY��n`�O�~O��c<���/q�G����gaa��/�q8���`zA1q2���39�H���6���7m0L��P����?.�*���k������1� )!1����W[1k���PK!��lS��_�����7
mk�������[��`ib�:�jW�q����?I��������;��{>��s�~��Ct�~D[��������.����?��-�%��&�fxG��J�S9��hH��-����K�c�xN���L�����%�),:��Z+��V�m�CI!�_�$b����$�����Y�<�Dgp� IDATJt[nW1n�`���,,�nc��o��(<��3��KEylv����xJ9^��������h�Ks;�_�%���*��#&�Zbku1�{��_X�M4:����������#�<�J���(��1�E7�K������?���W�U�����fzc
�����;��qS�>�&��}�$����s���j`�u����`Q�=Nb$�l���h+�FO�p��.����;���A����w�����~���K��9����1I�7�]����,,&~rb�	������
��%5$��!I>n>��\5���8�
�Gu��{kk��U�ISFq�q�3�7��L��]�H
kK`�?�w��t�a�U����UFH$'r+���,���9$��L"��!"�ml�� ��
k�{�]+X��H���*i������c���6?v�bbX�Z���c�v�U8��E�c�~��*��Fkb�l�����qAd������������[�Y����b
w�%�����X���>cbX���I��$b��HH��H������^�Vf���#���t:1�fP~��)O���j��%�Jb�H��������E��x?�%���j'
V~���7b�����F��u�O�����,�<��qW�r���w�%��]GlT'l��!V���S��2��{��x8���#�O�q��WW)�e�$�u)i��(..f����������c�5�Ce��;pX0�o"aB2�����Y|�u#?
5����9~�|��
5�u��X[�"|�D��GpW�%'��1������������]��Eu���Q��ur.����m�}�������V<%U:A���������:��>������5WM1��5J-}\��g/���C��~�>������m$>1��nm0���C��p\�s)$�^�]5���uW��F�6?K5���<���v>$�-�w��L���w<��Y_����	>�{�P/MZ�q�������Iy��v�����yd�
v���v����<6.�1��<2}�~�_������W��$�����Rv���`S	��L%���}�:m�����8VX1-]n�`mg�NKY�y���hM`���>J������(��H��k�@�������,��
���F�~�vV�q�\�������������~yX�wU�f�n4���r����Z�"�:]\��/E���l�wz�=!�F0��{0rW��2�s���2��k2V������U~V�m��8)>y���(��	�@������Yz��������Q���A���>���y,} �����y��mK���~�t+-�w�VZ��~?�x�����C�����
������F���&{�������m0Q�~MD�6r��n�"{�ZR"�X,�G>F������2F��'�2�+���w�%�gL"��>Y5����'��C���c����
�$08������{p�t�!�)���I\�����p�*R{������`o���c!	���1�V>9������c���U����D������4�e�����#������W�� �+���w.�kp4w���Wb��RwC��e87�����<�71��)�s���>����V71�Ov�{�^��
���o2�GL�+�	4�(�T-c��me����E�&��	�	����Z�G��{	ln���`I�Ov�v�s �n���U���A����kO��
8�N�N'����V�>�-�=�O�B��J��d���W�������>����,]�Oo��z
1#&2mxG�������z-�����D���nWa�Zq��5��=�l�7>�������OA�qy�uM=-?=u���=~��>��Q_m��G�K������0�������so���%8}���+�B9k?���~8~��p%k?�[����*?��}J��������8w�4��>��]��y�UsL��FY��G��rt�k+Y�����
�9z��7?/�#������a?(-�x�S�y�U3_�]����F�6?���~�:�)g��s9�����2�j@�z�5~�W���~�����[}�4i
K�]d����Y����j�;�Z�����zeO��MV-^���4��1w�:�X�����Q�1i�(��4�.��_Kx���_�M����s�%�K��I(��;i����j1�o�c�@���l�z��{a�����O��,�g�!�@!CGxo�[o`p\�=�3{���8��Z��������Yb�qm%����o����������t����)8R
%�^��_�6�[m����8��e��O�����|L����,��{�s���9�;F����cI���9�?c:���^F��/�������`��/pm�+K"H��Vz��iV�y���nBb���P#�>�n��������n$�+b�s=p�t�Bx����������$��P��'�8D�����.?J��<�AQ�::����+F���}�����w>�	�3�$������'��m���7d�7/�y19&2r�_�wW�k�?((�L��V-�g���SH�����8�F
'��	����#��&�Z���8���~0q3�-2�����7�;�{#��:R�����������9H�����W�I�;��m!'o�z\���kH���v�K�+����N#����e�pF���+&�����'w��S��r�*����[�����~�&\���8&��3��{�A��f�t��+C��^���WL\���M����+��������I��w��~������("=y�a3H{�����������c����#"������'����}����g�|L��(�EL�f���9dX�����V�o;�m��,b��S�5��_VLo�������k����������I�:�������t���]	,���z��NH��x���Nx��G�^!];b�u��'{F<���=G�%{�\��G���������w_�o������M���z���Aw��dTc��^a
�b����q����
����AV�1���R������q�_u�G����%�������t����������q��z����	��9��5W�1��e�%>���SI7����\IH�����}_����������W��$��%u��9h�=o2��8����w���������3��F�6�_}�_{���j��u+���C\��pzB��������u\���~b�:�]�_����������"H#8x���.��@�]���4=�I�SsL<f��8��e����w�^-�z�����4��f�o��K���9�����Mho&�u�4�������I�_���L��3cP��q�9-��������g1K�1�L�=dN���i�I�f���f�i����N�����7c���Lkps��ufa�����`F43��5s�w}���0���bZ���f�}s�������c���+��0c_��,5M�py�i3$���4M�����Q����[��/������Nx����=��^������_��i~��|y�m�L:�����!�x�����h�77k�u�s���M����I�����l&�+���� 3|re����9iH�iolF��inp~]�6�m���5w���L�<��9�[�w�i����qv�3�aD'�����Y�*��0{�9�[��zm/3q�&��DE2�0c��X���.�f���6M���
3���&~�M��!fx����#��3�l�s`�����.�13*�Ni�f�-�+���R�\U�q�d[�;*�ul��������3������
��|���f��bk���������:����G�?��K�7�w�a����XL�CW3��mu^��CsR��f�����O��enx�3��%��k?s����=�1�j����@3�m3���f����R��h:���Q�s~���������G��=�i��Ks���}<�27�d:�,�|�����������c�GLL�4K��mNi�
�i���q�y?{�<\�L��>��N9�2W��0��V�����<?����5��p��z���s�����bR�27�y���V3���5'�[��{z>�=w���ns����!���0:t=-�>���#s�����a��
1C���l'���+���9��w�F{3�����*�v#�D����G�n���o���W�����'�f��1fT�6��w����sw]���s��c���}�i�f���fL���m%��`c'>�}�c��z�vK'����9l�rsm1���swm}��]s��*��W_}\��KLG���
�N�|^�Tqa��<f��=k�ko�7%�t�P���ns�c7���u~�m�����1f���6��Sm�W�P�n����>��NS�������uN�~����'���17�!�a���>�G���uW��OL��=����CL,�i6�����-9��#�|C��C�t��!?�b��(&M�b��4��x�,��C��� o����)>5����b��(&M�b��(&M�b��(&M�b��(&M�b���brn��@�8�F�W�"""""�X�kG���Q��""""""""�4"NDDDDDDDDDDDD�X6�~`��B��+.�p�� """"""""""""���4�*���n�}��!���C�

:���@�kz��G1iz��.���QL����QL����QL����QL����QL���CL45�������������H#P"NDDDDDDDDDDDD�('""""""""""""���i~
^��n���yfgs��9����������8x��6�������
������������������#������y�X����|�d?o�����s_�3O�^����p}����������������\(8"�A��1�['K�:+_�����������I�vmh��DDDDDDDDDDDDD.
F\����Z7�A��e����A�E
������������������8�}�����2��b2�l��mcnMDDDDDDDDDDDD��h�D\�Qv���Uj���	��+�����F��������������HS�8��G���2K��-��*(��VW`7ek"""""""""""""M�_�>����K����p.�g������#��0�8�!�}�F��n��H���[DDDDDDDDDDDD�ikX"�"+�G>M��5���A�|�A��P5���"""""""""""""?sJ��������������4%�DDDDDDDDDDDDD�q"""""""""""""�@�8�F�D�������������H#�l���<��8[W\��|ADDDDDDDDDDDD�'�i�T"��-9��#�|C��C�t��!""?�w~���G1iz��G1iz��G1iz��G1iz��G1iz~1���"""""""""""""�@�8�F�D�������������H#P"NDDDDDDDDDDDD�4<����K'q��cY��������������g�'""""""""""""�S��D��Z�2o"��Vg�]�1+V��o�[6l3��g�"z���[���c������d-���_����V������w����+_/?N��h"_��o���M2���k	�F?A��	���>)�]�_v�|���T~���=|!%�>��]���9��;�>��nL�����i{�9��^H�����o2YG��{�F�S�c���&�Z�o�n'��r�[�}�����:�^b.�0qF�@��}����0,u����*�������.J���X_'u��<�v����-�K����`�nZoe��]d�p�KrAro�����I�1������-��c�d&u���I�Y~~�bt}�
{��x���� """""""""��4|j�-j|�d���=��a�^IK�&�{�rRb������O]��cB�Q����+I�N|x��[	8����Z�DG��������f�{m���{_b��o���b����c�\�[l��M%��5��K�����%F�������A�=������1��Va8��������WD1r�v���{+)�X:e���D��K+���&{�X����.��y���7`�K~���d�K�d=p5��/y?�T�2x���2�"mKm��2
V<A���
%4<������g�����`#���9����c��p�(�S~Mh���oB�	+*��h+i�IhX(�!�������s�%�%����s��C��6����}�F=@������?�W��$:�*;�"i��S	A����������Q�O�(G�q���~��La��v���z����!tD����y#;�����l%5*���I�v\F������Q�e8W���aW�1,���I��"����(Y���>��QA��N�Y�>V���LR�D8.!0l�K�I��CD���5�T�pm~���[�h������QP��F��d,X��=c�����������t�����Qq�,�s�-�������c��������6o�\�1{�M�,�3�q�:�Jqf����VX��D�3��QV�}o�:����.��<Ov�����"o{��s����&��:&��=w�%st��6��%�����h���<m������'�p���GJk,w���k������[E;���"�].2��[6�A����rT�s�o	�s&G��9�w���Vv"b�2{��zE�������8������1��!1$%�c�R���^[���8�^a���=���g>`����x��O��t�cd�u$�������S��{3aW�s(i����;l"I��!:�::����d{e�+F�yv�����Q��Mh��DWiS�]�I�	�cH(}`����=�QF|���������H�4<W�����u����{#�$��[A�����{��,d��k��2��E��``4���Hq3��%�������4�� r ��\������;*j�{8iO���	nyz��
�K������;�x�Tbc����D��E�u=��?l�wJE��p��C���OE�{+���H��5�~p�N��������A�&$~���c��*�����$}��
��f}R�5*hI�������6��~����:�b2�J?�����~
	�w3�}v��&gN/v�G��dD�����QO1��5�$/d��!����;�������%��g����M������������^!f�l�Y�M"�Y(��Ka�Y�\J\�3��=�0����M��6dN�NA�9do����m�ZP���u�&?����I���p-y���M-����q����m��{�Z���H?���Y�����������M�$��ax�<N��y)?F��$��E�"���Zk�{��A��7qLy���I�<��U;��}�3w?���8W���^_�>���QL��������+�3}����x����Lr|L��
�J>%cJ�>�]�
�'�3�uF�{�OVAb��bY����:�C��*e��?��:+����)�c!�H ��s����g�����>&kW;��=H����=�����9��s���`i�2�����Y�w�#u�x<��/�5�����[���[p���� ���qJ��D�~�y	�\�O�������i�� e��SI��������i����sD��O���O�����myf�����Q3)�
y;w�{��86N!�����g�����P�1���r�#�*�z���E�-Q\�u>���0i�aJ�r�3����M�g��6�3��{g>k��16��=���E;�����;�����g���R����k%[��x�u��.�7y�.%e�f��s�������,7�
�9���&9����|Ys^$�U=i�����7��;�ubN�������$y��&o�n��������<a�_]����(������X��<0�>���d�����(K?;����Q�q9Y�%d�s�zl$����]�-�+����jI���L{t<�f�'&��{�P���]�����B<E��vt�G|��j�����3r�����KW���q�_`��#I������:Ks+?2�Ys&���Lf��_����p���D�����8��^����<��B�����o��~i���%��-�1]�I����J�����%�b�H���������w�k�p��!o��,�������	��c�p!���y�x��m8�|� IDAT���Ni��;	c���^E^����{?�w-���_����@�kMHd(�]�����g������MH�����#lx���V������/O+����d���;��q%�����\
��z��p� 6<�[7]�!.�%�
���kIh��viSg]�������u��&|�H�tZ[�E�cX�N~�c[�����!�"�����`0�D�9�SZ�k@9�����_xhO��/1mP�3����C��n ����?[�g�Y�N��/�mw��8��.���x����OTp �[d���1�b����{8��k�`X�$��%�
�lo��$,������
�a��vb���>R��������^��,7���A��9��s`+�����?d������_~��=���o�U�x�����	�t	���7$�s���PX~f2��e���+�M����	���w
��,���V��B����Dt�KB�w�����)9{�uK(�����&}Q&��R��������[�K���quCB����8<H�����/o�\I�������w��������<
k9|�1Q~���!V�Yq�C��������b�%�a]��RXR�z�!&�f�~@�6u�����38�f�~`�� �����y�������������O]�$�"y��wX��;�_���7�`��v��O��]�����wb�X��������S��r���#�
`X���x��D�������O���!k���C�n[{�^���@��BW��C��X?+���@1�E��i���X���?��V��`�������Zh3�#�Z���4l/T��$>1���O����4q�\En����$�����OQ1���w�fYZ`X��8W0�����!
��`z��X,,�qi����j�����+�~����+F���dy������������v�������R\���Z����X��SXRZ�2�W}�d��O�MK�V�[w>��(���Qhe�&���X/>mT�a��j_��G#�Z�?0���@�7��x��}G��_�g����/��D)�������r;`������>(���~�,�\e��Z�����1�g��U���1���$�
�Nq��J�Ey�Fp=�#o#��-�p��_Bx�b:}C^���m���N����u������m���y8�{��<\�4F���ZYn�������Q5�.kV��d��(v����WV+�_�(�w'��arw��`K��^����+7��}��
������L���q�]H|��t�y�����S��������cs�~YZ�@���ppS�	~6le�������
_�q$�i�D=Y*�7�,p��BOk�P�Nj�p?�7)��Sr�RZVi������LDDDDDDDDD���%��s������o��g��������Gc�������f�6dW�-E������$���P�n���p��@��n��k*/?��T?�@{[����i�����6��G�Tw�
�Z����=��d@Se�9�i�<�M�+������m�x������n���c���:�e�,L��ngV~	�iV�}���N�����{�Lf� v����&f��L�qi
ej���w��;=_�p��&0��~e*qS|r�S��[7���g]���Z���2��9����Z�\���>����\V���p���ly��I+jyf�����H��*
���B?
f�C��}���S�S��SR���3����-��cJ����&u�\��.����y���17b;��2:t':�����.�@Dg!�����Mv�a�Ga�h"n�g��_����.���b�K*�@�"7��a����l��dKl�K��Mq���]��%�������6�&��8�v��c��7�Pz;��f@K�=�e��u�>�d�H>��]�c�_J�ox�����~�'�kzVi�Ku�_��{�S�#��F��p������bj{������������8����J��O��_a��wX�xs'
!������:���c��F�%��E8��q��x\[If:��|FX��708������lFd���;�X{b�$��/Y/�!}�2=����1z� >���-����a�`�*�����g5E~��I�1������[1�v�[�����umz��|��%�Z���e�K���]#�6����X�Y1h�=A����
��y(��)n[W":��2�k�B��cx�
q4�o%.���K����J>e�����"�^������M�j����;����Bt��5$�|�ep�M8����C�q
V�D��C����z�c���#���n���N����k�dbKlm�_�J��<O���d�h�=�+!�6��1����;D��b<��'���b��l.��g�$�g��z�*x\����=����
��Fq�\��/�&&�59������o�O`x��W�� &�r�����)X�"YG������$�;������Z��m��-d���nQ5>S�l��G�EL���W�3��wH_�)�^�pVBzv��K�,"��
��
���O���8n	��WF��x��/�n��5!�����j�&b�/��,!}K��Y�{����]5$F���2�Enh���3h�-�J��
(p�e8s�A~���k������Z����[� m�6�'~�d������������Q���1]F�r�R�n'5��{��]$��]���-	�7���H��A���'k��de- �x���;<�=G�%{y*Qg���j��8�"���8�=N���U�+w��%u�]p�r*Ik��dL�J����v�G�����@J�K����e
+Q���dw�g���Qw51�$���H(�+�#o$",��3��-����s� d�h����EF�3�����B��qL{�����5$�8�x�<b"�#00����2��������*[�^8��HL�uD]�q����d���4������I`�p��&�����:l�{�.��C5k��
���A��Atx4��;���T��k�M8����#�D���pR�����!��{3="?�)&
����0�N��	��%a����Wa����c�	ou�a�q�y�YC�|.�/F�!$�+eV�nDDE3x�b��a�z��e~��\����8zt�]X{DhX��,�R`�At�?������[��~������(��#��e��o"��zFFv�c��;�b�������,�a��L���~"B�"���d�=F�C�0kXBKvSt�m-p
���%����Dy��2�q�:l'e�z�������H�I��c�5��=�{�VB�#�����a�F{���E����w��1�X�5r8��-$D�Ht����:s���x����I���5s!��DL�BD�(��8���b�������ps���]9�:DPP��.����>)}�R��6C;4hU�%�����Y��$��=����$��_�����y,��M�� �OIv/�Q��N��I��{��AK�X��I=�L�7}e�?�+o��
�q�3!�s�~��K�mz��G1iz��G1iz��G1iz��G1iz�����~D�����(�%&��:q�P�u$��F��������=��6���4��yb\C����._P1�HU��Y�
������S�o��,���q+p��P�Y���Q�}"""""""""�8���yv-�w��C�eXd��.����1>y�����D�x��q3I���FY{M`�=��5�e
J.�����\��0}�
L���g$�q%���v�@�����y]c��nM'.""""""""�3tN�h%"?��(6u����W��8Wkk�c��dz�\��q��&������rH�c4�
��w)����=�Z~��wADDDDDDDDD���i���\ps�]qY��]�,�i^P����ps���]9�:DPP��.���]���4=�I����t)�M�b��(&M�b��(&M�b��(&M�b��(&M�b���b��)EDDDDDDDDDDDD�q"""""""""""""�@�8�F�D�������������H#�k��u��o�3;���f�a��|�&��������@s����D�5�hx�EDDDDDDDDDDDD��&������y�X���W��]e\�/�F�n�&DDDDDDDDDDDDD.@
���A��1=�v��-U^?��'LZ\l���"""""""""""""?e
���E���k�}�W��l~1��B���������oNDDDDDDDDDDDD�B��D\M.j�uw��N�q���o���[�6��B'������I�����Wq���)�;m6l���N���E�&������w�������"���[\�>���Wd4��DDDDDDDDDDDDD���������%f�������U}y�����U��>���e\E���iZJ��hX"�"+�G>M��5���>��y_�V/""""""""""""r�j��)EDDDDDDDDDDDD~���iJ��������������4%�DDDDDDDDDDDDD�q"""""""""""""�@�8�F`����y�q������.��������������O�4/�D�[r��G��.��c�"((�|CDDDDDDD� �7hz��G1iz��G1iz~1���"""""""""""""�@�8�F�D�������������H#P"NDDDDDDDDDDDD�4<����K'q��cY������~���G��D���d������&������y�X�����������lhq7������%�]�O�w
�����#)����=����d>p#��������)?��a�1ig��=I����R�_�'x/�%zw�a���k\w}���c�;�#m�7��)�`�@��m;0,���q���}.ZGRxF�����l�FD�f�m���pOXD~�Y���������H��}-�z���K��9��Y�2uq�����p\�-�#���$2{�'����w�[f���)���({�qr�4������.��L%�@�8V�$����%4$��{&�yF�O��(��%4��4��D��8��G�IhH(�!��O��2
�=������������l�M�s�o�XW����e�$-��p����?m�����%w������ 0r(�7�|�����������$�w���������eG�z�t�C����;J���#����V���D�#e�f\�{n��3��]I��E�'{�-X,����8O�#�����T���a����\din%���^����[��O���_�O��������L����_�"m��c��}on�cXI��{��z��� ���tzS~������&�n�w���b����)�k	���Y��*#��_h������#N��6�%�����}�1�]s�o}�{��|���`��m�\G�qr��w����k� :6��e�j=������}��|����a�����7�~��dn�w��%w^�2�D�#u���W��d/[���9����^}(e8WM�H[o;����������(��	}�������
��{��r�{�k�,��(�z����`��10������
�����]OU�u}�E�A�b;�x�k�2
�M��O�{�Y��X���p��K|���7��o'�g,#�_]{|�>"}�/	mw������o���Z?[F���y����2��:x��EJ�����9��%�l��k�������Fh�X�6�p�4�������v���1��o#�U3�Q�O^Q���n�o	�w����9��s��x\��d�����[�m~�"���z9����YM|����nP~������[�}���G�������������p"""""�50���~���p;A����K����r����6-Z�/��GGpQ��&�_{�����}����4u��$d�4ML���G����_��0��m}��Z�8
����F�����1M����G_O����_���k�E����_����\���;�����w9xv-"a�L�����u-�(?J����8P��������7^B���)�����K��{����%;%��\���);pD]O`s_K��|-��W=$,���m�0�w���wk�)QF��IZ������3������Tr���I�Z5���x����w�)������7i<�2���������w�E�'��U��S���!���gwA>�;�r�h�jJ 7!�e���	����i��:�
��m0(�x��X;]�QG\���0�CB&����;H�!ml
��mM�k�"���O��g������V��B��kJ62{H{�'!��y����G�Z���7]��� ��������S���-��{�9Q������$q�����~.2MJw�>� c����o�mW��=�/V,�X�\����Xj���p���������w#�].�;HU��������,K������6Rg����	�UI���d��v$NO�;~-�����)iu�u���&	���Y�����m�y'k_��z��o���
k�Z����dM�%vJ>����]�%������@�k{�<���2��?�Y�+f��E�W.�_�@��%$�Z�FjS~���sI��y��D�Q2��'f��Se*��w��iA��>������������^��%��CO.��U�&�M������I���d$?I�����:�7���'&�
�:�#{����� =�s
7���]SIZ����%)���U�(>��"?%u���������s�+��Q�M�X-�����~�sY"�q���9���/(.x�iqA����?���m{�>�~�<qd�Q��b�����wY�����&��op��U�5[��/��_�h+�FL"��t��N�'w���d���_���GB�Z��ng>���I�2��X7���uG�H�Q�&>�����o������9��:��E�]��:�m<����f���k<��+��,��{�����d�����OY����o�����dU\��MP���p��A������_���������SS�hq�k'����%[_��'������F����y*��x���/�G�~5K)��VR��t��g$���/h�+A�����{z���K��'�v���s�o�Y����<)}���b!0��7f1}�
�����o2�'�9J�����b1�������k\�2���#>�6�f�:�"i��F1sA�:J�����0�'���f"��"����z�F��KF�:F�]G��/po~���c���{����5�\���7\���56��a�$��A�����$���>Dt���QCI������V9���1��V�~�bd�{+)Q����tme��[	
%4�bT��e�x����Jhx#����r_�s�Dz�\Ehd4���H��D+�g���h���=S���Av��+�!b�D���Ct�u��
K��p����D"��VC�7��;�	R�\L�?��������%���������U����dO�
���DDE��r�%g�XhO��1���
O�F
JL{�-����5��Z;�i��Iw'�~�_�]�_")�:�.��9�����q��d=,��������e�\�=��������3���]N�xt�XNR�nm"���*����f���d,�C|X)��O�\���qSH�u���HX�9sb���l����N���D���_k�{����������d��p�xj���	���d����%���,'�O4��`�{]��`��R
w��}Y/b��Zb���������%�S�i�o�c�PB#cI��0�!�N������l�e8W��{l�����7�+�489�������EU�����)\��3��1I���R\+1+!+%m��R�M���Z���j�vK7����XQ`j`j�����eLr����$�?���&���z�zs�\��9�y���<����������.���9������H�Q��As�8�sG��q���Qm���';-l<q�����;���&�{;�����4�w���:�o��K�������v���5�
r��B�C����#&Z{����m����.�j�d(�}�Ii�~D���G1�<�Ul�rH��r������as��f8����"�Xw0���T}t
��7}���SGf������  IDATK���>DN~=�N���x�H�����O���E���+��{�]
�F�����������@����&�$&��3��?�9"J�"����������}7Q��+�@����@H��dd~uv=%���<�9�}��^%�����<N��t�F���h�p1s�'g�+�P�#����������0�z��aFZ.y�V�*���b�����

'���������Y�Ys�9e�9u��^@Bf�V�wf��7��?X�4��xUf������>~��B���hG676��-LuN�	�}/9�{�G���q>���1}	�����o�t*���n����[��5�bB��SP�9i�DL�!��	c���>=������� a�3D�0��t#l@(F��8K�d'��t>'��6�E��>M���(�cr_�X������U�&� ����{;O����L�w-���*��F��G�v0x�-�����B���r���%�n
EU��hI����<���bl�����������z��7��^�?�����X�-��y_�br��P�q����4�6��9�Ni�pU��[����;�F��
�d+D�O%��	c��$���:��ly��dQ��0�E���q�vn`b���3Kv����g7�v��Lu�������������1Ny�L�W��a��0	���*�������4�����_���@��jF�����&n�`��B?+�����U�mI"�o )��o���O�����'��/�BqEi| �6?����p���Q�Lah�V,]����0��NA�y��wH����iS��P�m�$�V���<~�k���k�m�H�fo�
���i���$�w;��W0����uJ���86�#���,/&7q8������d.O$L[���3�r64�v����3Hs�31~,�0��:�����K��?��S��sH�����p��aQ��{	��"����2f���	C���t	�.�f�%o�f�:ng������>y�r�a���e�p��%X=�mW!P�c���&
��=o'|N��G���H��8��Y��+�l[�De-1S�_R�{�L��w�����!gn({'��-��w�8�_X?a��R�wf�����c�h'Y��2u�AJ�%�p
������n	�mBf�O��<6MiO����:|��������N���4�q��_���W��?��c�B��oc�*<�UieL]������Y��4&K
����y_��k�K�A�3S	�����#u�"����.����Z{�C+��~7���^K'�����t'��LbGL�1�o���!o�x\�?{����k�}����u������?�m�������nR�b

@��"�y�3�Xv.�B	�P=�����'1u��L+>�0�a�_��c���Y[���_x��+) '�k��{a��c������������W��0k-����������m_���I����~�y:�*�z��{�l��|�5q{v��n���	I=34�1rv�$&s79	�U���8����<�#
��s�&/���Q�}��������X��y��������7����T=uPKk���u7���{r66�#���t�B��$r�������L"i�����B��D����G�VX�G�o39������]�F+T_3�r��+]�!�{�+�Q� ��l����</� #����6w1YEm��5t}�pM�x�a��pk+r��3O`I���i�D��6qs�#-�E�LcI{k��0�"���.�?{���d��m���b b����6U`)�������
�{���s�$��S��k86���D���Y+�ax���~��f"w"g�db��c�4����a�`�l{�|b?����R��d��E���X�����n�MYJ���5:���[���C�8�>�
����9BN�7hG�;v6�������	&2�=C��7q�QXzD�pM*So=���{IC�����8v�������+*f���w;q�
cw3J�c�I���E������)i�e��}1�eOQ+����t������1�����]RF�x����������i�bV��q!�����k���r�9�M���D�c��WiG��a��Vj4'����Z0��W���]�����oDu@�B�K��$o�%3S�L��	�����s�Rf�iEL�T������y]��X��M��!��tV��}w!�Ct�'�m
����F��W�l��-pc���h#��K��%�M����2�R���%/��� ah���1�]��|���x�[3I�a	��	���g�K[�u�W5�wm���������������%��f��r�w:��|���.�����:��n���K�B!�M��	��0`l��o�����\��a��i2=^�����/3u�L�?��b�{���H�-�������=�AB��a��Na�7���������(!O�0sq�1{7���^\Gw��f��f��#fT3��	���
��Ty1��^ vJ,�Sb���v�c��*������1D��Jy;�i�� ]V�k�0��:sO_(r�np.�6�O$��m�G>J��v�?X���-1YC	��
�����g?�|��	�iF+rQ��@��{�|�������F?�a�%�n��
���d���9r��cT�L��{0|����M^�G8�u����#��B��o(�����D�1`��0�

���"&����3�~��r���Zb�m a]�Za�������������wb��6wS{][�&��o�h�OX��c�)X���p�r�om���f�BoD��B����[�n���W��
�C#����zh��|+j��X
PiI��
��g�
��F�*������ u��h�#����-/���)��������Vwv�����Vt
g����K��T(=�'f���Uv"��v�����q:�����������U�����j���a���OSs�Z���=N�s����SXR�RuH%��A9Ia�O��-];��O����gn������G��?�J�X�7#.�3�����&���M��}������������N{s+���_������e~����D�^��<�q�;�!cs�|_�V�Ex�����e~���?3qp���D����O������y�����?�i�g�"nB_,�H���S=u��l�
R�|�����G���h?4�.r5���&*�z�]�=>S�^�44�\����#uc���,�>������z���j�zC�7`o=v���2��1���uv��V�:u;U����i8����/�|����<�
~������i����5���UB5�� n�����z���NA�Vp�(=���O_�f�5��V�a���Z�3�>N�7�3k�V���GW"C�� ���wXW-;Q�9�1�Nn 5��P^LN�
B�b�+���b��F�r���#<q
Y�o��r.����������P{?O��|���@�1b���^6)�����}�j��Q������5����\�F��l4b��=���7�hc�k���(����z+hE�
�D����^��:�~p��To���R^��]}�Q����Z�1sb+���0��z��tn a�GX�� ��z�_�}����n4o#&�>�i����#w�����\@�����`M�����}����_�&��������������#j�?Q��D��W7p_��S�v�H��kl���%N&ac/ ���v#?�E�����?��>NN~�3BI��p5��[����������@.v�!^����UO�n�A��Oq�O���%1��b���Y�8`	�I�(���%bf,a>�._��s^�S���2r��V���2hY�!�������&��^�����<���X��8�5�|Ug=	!�B�+��y�w������^�	N�����/���b3�0=���Gh�%��?��r"s}�I�JN����ceG��
��������V1���Njh%n
�N����]��r�{�qQ�<^����I���</��y�,��=hG>g���=�~{y�e���O�����}v�E�uN������'��y�FN�7��xWy_S�����/@��jE����`9�����ae'9��~��_0���p��Q�t�+������,r{��9�=����(�;^z��oF�T��<�P�	��F�z=z��1+�s�5����	ZG�X�r8����K���4%��#�m������l����o�\9��v�c�G��"���;4O���JQ�*�������?m��w���y �N�Y��;����Hy~@o��a_9���~���'���Jg���a�����~&����o�_T�}Y]Z_�^���&�?���V���u�����c��y�2b�(�m���Q�{�L��t@���G!�2OgC����(�n������zaC�(�*�z�������c���g�0���*ogW*?J��'I�=A�����9�I��>~���x���I�B+�r.jn\%�P�8j���[H7����z�9:�����>�D~I)��S�Y�G���r���)X<��5���v�.i�A=����m���G������R���������U���EeGQ������3�Z��6�W����
U�q=
������������'���:0~���;�>�3z�{Xx�F���b0���+:OFjiy�kf������SP}��?��J1�������kt�w2cy&9�_Sz�M^b?�K� �eOV{�RX�������Q�}��>r6����S���%c�
g;M������E�g��������(����jm����N� �����%=���\��tc�1���j�q���b�OT�::pu���a����f�v19i���e�=���o$[�H����Tl�}����dd7cPD�:���VL*�P|�C���`�*����S�3����Rs�9���Qr�������9���	p�|�������4'�%�0\��'�w�W�>7��t
U��C�� nw�'�v�RZ�(hg������Y��G��!r���o��BP�Q2f������
����\�}��:K�}�D+��<���Es�:�kj5E[I�qGBY�6�0c��/���K���f��?a��B����iS������������+l?�%f�-��m������`�;��I�b�5<�Yb� ��^@��Bm����Lzf��O�B�n'6���g����[�����_�F*)����b�O$�{,� nd�-�~�1I��b�0����(��!d�(,{7��i<�}*���(���=��)��6_x���"x��3����v�l��{@������yFA���9�J�z�� -Q*�����PR���I!�B\Q������_d|�+�����W'�����)���y���'�L���
-�/�:�/~���AZI��AXs�8R\���Z�V�=���o���y��p����+�K��JL>-�u?f�md�mS���$�Z��J7b68�t���0�3���c�q�:Y�7���wC4D��\+�U�M����,���;(\>��\�`������6�p�t0��gr6�������.(j;�R�U�6���um0�i��G��)z��r7.�)�v���6��p�~�\�]�����O_2��p8p��ea��l^:z���g�>���'����Q��������=Y�AR'?I��D6�LEE���(f@+T=T-��Lg�0����c�����U;�+*(-�g��X��C�Nr�l$���o��L@���$���=�����5�s�S��U,[�'jF&�a��s|�����>��v�	�Ba�
��m[�0��9�)6��d/��Y,W����v����9~��K
k������R�yt���a�>�y�@��P}|	�������9����g{�{����}���1���X\����O�nK��0,���E������}�&c>Z���z=��b���~9[�B��z�P�O�r�-s��Q<���_��eK6W0��e�������=�S��Z��{^�$���Qg����y����!��$L�%f�*�����9o��^(����.���K����~h�������+JkU+����}�9�a/j��Cef_�������\������u�����~(���N��b���!���P�6XG�D�(
w�)������
*e��tR7�	y��Z�i��:U�_G����m?8�IK$��T�������
I
e4�%;��@�����
B����vt���'8\��;���i���=��#?�]��9i�O1�VT��,�sf���jC�C`�[I��t���OD]�?��n�`_�����3�o����	�iG>'c�&U���nf$� Lw�|���1�nnOB��<��]K	��|��[a�s;��k���W�U��� 3���]�����|�
.
�����{����K�bw���k�CR�F�����������������G��\�8�����Bt]Cc}I��<��<���^-�D��#���0��+������S0�\E����F����Ym}��ED��v��vR�|A�����������gZme����'c{sZe ��+���[W�(/���,�2k^#������H���</|R�}��
��/�R�zv����6�S1w�J�?��������j)�s~�������g������2\����d������G�������j{'���Xt���f�x*?�m�r�=`���E����R���U�yU���~��l'u��m�^u��6��K�����S�A����3:�v[�w�����BV��Ly�khU���zB!�W������6�E�����Y�!k�/��C����?t��)/������u}�pq����
����wHY�E��WH�=v��/�44*��{��H���|�Z�r�Rv!;��;a��!��]�h����3k�[�1����[��������?����KN-C���(|;��cw�e8r?"����������j�H��o��g	��>���3�D�����}��w;,A�q�Z���M��^���������eU������q��b5����u%�;<�k��wI������������.<�Yz��3?�����GE���P#f?��_%�y*1���C�5�� v����<��E[I[�)���6X�����d���<���~������T��cn�k]g��������������CYW�M�]"n���C�
 ���(���
��}QUh�u�$"YC��(�3��������7{5����Fc�����@��/<u�$����Zs�����|{�h�hTQ�g^��������=���}�/[��?��Jb[�A����ZZb�����V�#�C������/�t#rT\kW`;���,'m
��?��P�T++��M*��m����.?J��<����o�b�^��u=�#�k���cl���tA����ZZ�����K*��|L��u8�<%�����5�r�G��$O�%mwC��6g�����=�2��	��Ve�g%�nD�z����3c�����bg/ ��G�v6�[��/�?x);�WM9��~�����\Q�&�ZF��Eg�z,����%���!��|?��:�s�i���W�`�>����
i�'���r���?����t����V����36���,�����������^�t���2���>D�3���G�5����I}ya��.�&t��iG�$k��:G���1����y�3���G��OpUfs:��IN�;��Yc�}�l 5�zM�~���H����x��T�FTD�C�2f��=�];�m���w��9��S����#�8�������V�$_���.'p���b	������7W���*��}*��a��g$�=7d�+>��t�>���yf���(C<�����	�R��AC��f&��N!�yzn����3[�VX�?�����U����o�^H��Z����h�[*��"z�����<���w��r���	1� ��v��4wl-/����������x�;�*Y�N�G��V\�<��]@����t�v��%U��-���I�?�`������/G�L���DNy��.�r
���D�@jA�s3���L���g"�&��Xh����n��_�	`����5��1(������]bg�	�������9�����_����g(V��,��lrf�A��V�����]��2�n�%PR IDAT����\^L������qs��p�5~���[��M��
=;�C�:�?�K��S�����K������D�TTyI���L�5��
E��k�s����e���$,O%u�?Y���Qp���}����W5�o��D�������OYJ�^���Z�����E��f��W��?�������=��Qe�6�(�%/���J�=�p�r�]OX���'*�n�s {^�|B�����u��B!�����'�p	�g���F�Kln�G�yu*�1tS�Zpo|�����<��I�p�b_�����$��#|�:6�~�[�t� &�>F��)u�F��'����F2h�*��)�����,q��1���Y�!����j�G����4�(���o!��a,rv!���P��3�]���/=�E5>=�pG���h\Y+�������^�yLV+��_�5�3O�������^@X���L&��K�_�`Q�P���m|����������.z<��aFR":`2[�x��A��0�D��1un,���0u�����y�s;Q�`���������I���f�����&m������b�G����z�RF~|_�0`���{���5�������R5�I�3�q/{���?b
!�y7IO����(��X��C�B")"��z�~L|k��)�R�����a0I+^��9�@k ��0��uX��/|�?m��2����?9��[7���ky��O/"��D[tx��$�GX��i�8?!yZ��~]g"�_ ��<�],V"���^�:�=���,`�Lz�/���a0�#��(��1���3��L����`m��[2� ����%X�c5��~[�2_���O��w0My�E�
��kG��g�8�:a����*��X�T�d#�Z
�Fjb/�����5��Q�����������<�3���W#�W�d���s������;�8�a�u��sz(���@
�����6��Z�������ug�zw#z�;$�����7����2�9��>Mz���}+t�	�w5)Cn��%���7�R4o�z���S0�z;��i�{'��#�c����M�5�AS>D����Wbtm���E� cR�8z#!���Nx���{�s>�A�����#����t���,a��$n�v��@�1���^��$���y,S#��)o�!��4y����[:���uQ:1�)B�c�O?�#c�v���{lU>��E�;�(��J)���u/"\��6����o�'u#g�]����Kod���D,�H���\?��#Iy+�}>�==C�,���faf
���6���7�&$(���QduNL��E�b�8�������6��f�S�x���U�H�K��>t1]����As��!���dvL��i��������,�����j���jDZ�������{��$N>�{����t�@Lm�DdIZ����W���D�Z���H��=�������g���� �y���_I��y���S�_(�B�s}PK�Cz��3�����������{���&z��<O7p_��8p���D]�4�����
`��b"�f�0���������Y�Jf!~��o���C+P������s2U��
����mf_-�>+!���z����u$j��D|�
��f�!��;��V����*�I��d
��H\�u���4����*�]�}�|�#y�����������_@\h������H�b"u�^��D�oC��$�k�P�o���G%���qam���s�FXAVCs�/P8 ����/�yO;����\B��L����x�z� ���q�}�|�C��I%'�)L����G�B%p�K�� 27�T��5���7}9��n"'�.L��z>����H^�Jt���n��%�������������y�8_��D1�:�����N��s=
Z�����?�B!�o�WEE�o�	��-9��+�r����:D�N�.�n!~������_�6�N�����B!�W�7hz�N����G����:iz��:��H!��3e�/N�]�a;R��i}����	%�B!�B!���\�i��B�&��aO�qo�
�=��4���
�'��(?J�����x���}���V�

�-�5}B���d8~��c5�)R��}����7~m��/ j���������Iy�O�C�!�B!�%CS�&�JH?B!�B!�/#�M��I�#u��H�4=R'M��P'24�B!�B!�B!���������2�:��p�wA!�B!�B!�B�z����I��O�������G����:����mz�N����G����:iz�N����G����:iz�N��+�NdhJ!�B!�B!�B!.	�	!�B!�B!�Bq	H N!�B!�B!�B�K@qB!�B!�B!�B\�F�������!9����s~������+�z���H�q�7���I�����B!�B!�B!���kd �������:���������Q/�eT�2�}�eat� �B!�B!�B!��B4rh��t8�Y�����=�v��'���f`��x7ncB!�B!�B!�B�f4~���-���G�{3'�q��d�	!�B!�B!�B�+G�q�q�e�~oz�t��p�B!�B!�B!��7�4W����?���G���B!�B!�B!�������8�9�;s���	!�B!�B!�B�+��Q�����c������I|~�]<����{�����h�s�E�U!�B!�B!�B!~;�k�r���mLm^M��$�!�B!�B!�B!~�.�qB!�B!�B!�B\�$'�B!�B!�B!�% �8!�B!�B!�B!.	�	!�B!�B!�Bq	H N!�B!�B!�B�K@qB!�B!�B!�B\^��~Vq�w�Bul��r��B!�B!�B!�������M�>����B.�n�����Ct���r���r>5=R'M������m�#u��H�4=R'M��I�#u��H�4=R'M��I�#u��\	u"CS
!�B!�B!�Bq	H N!�B!�B!�B�K@qB!�B!�B!�B\�B!�B!�B!���5z
'�l}o�.�O����o[�?��r��-�\O��1�w��9!�B!�B!�B!~�w�C�_��c��o����K�������"K-���'x��M:Q����B���������W���_������s/&��AKv����h����/��?��a�Q2F�B��p���������i�����i�z��������O�C��������;Iw'��������_��������������S�bWl�]^c���d��}�!�9u��K!�B!�B!������t8�Y�����:���Wc�CJ\�9��������Z��{��*!j�����D�E�\��}	���vD,�����B-/&/�5R����A?.�z�he���a�F	w�gW.�A;��2�EP~���O�\���m��X��O�J��
�y�VF� ��Y�l��'���z���z&qk�(��(�B!�B!�B�~5~���-k�[;n��;���3������qM�Fo�a%���>��u�[�t	�`���8+��������&L�f�;Z�|y5���N�q7��e&��8"�����%�9����a�7����*3��>!���xuz��d�\
���c����aQ��o u��3�i;����)����������c����I��_0Q�d��{(�����[��7��L������|�d<c�|D��qDNY���;V1��[�����`�,��l��v���!���
}[���'����j�I#{��t�;����Z�
��y#7~����$r�D�����644k^bP����G0kceP�d'��t&��m�� _��%�il���s�T-CH���.jP8��f�k��O?��v�WT�V���l�����w7ax�$�vRG��P����&Y�K���v0b���ep��e����� b��W��2!�B!�B!�������l����R-��G����z�^��#�p�~��W�b�7�W�%��7���ga�q���DAr�U��������A32q��BQ�����H��O����J���p����>� �Vo�<d c�����	�� �N���i���+��>E�Lx�T%������3������k��E;������Rzx-��SH^�U�`VKn�SC�6e)�s�btf;b:�#'y+��Z�8���r&ck�/q���]BX�"b^��yT��D����V~���-���M�_��6�!j�X7�gW>�&�H�0���?�w7��K��85}�����T�f�����
$���������54-?�<�)(/&?;�
��t��9���A^��ti�/������_���ZF����������0�=�Z�Y��l�*�Gj|����hm��R�B!�B!�B���K����:��o0��yK�=��.��C�B���ihc�����=L]���\xS�qY'���I�3c������X8������m=���.Exw=��,��$�����]K��+����0���wXWPe�0���
��j��|B�.=���5a��8���&uXW���
DL�!��5(jg����,�7����>6�3"UJ���l �_�p��������D��c�~�������C�]���Z�?p�=������m����s��'��26�F+����^u�i����8S�_�=�,�d�����e���������*!s��\4Vo/�"7�����x={?{V=��q1>�]�5\��q����Dr�_c�n%/q2	=V�[3YTI��[Qu2��B!�B!�B�_����nG�����p����s�MG:]���VXF�b�(+��W�
���B���������PMO&��
�[C	��K���S��?u
��J�RXRG��\2�.�br��%k�
";6�����H2�d���J������a���*��z�8�0j4�����p9��p�
�<������g8�����FU
!3���x�S��t~�c�cti���n��������p��R��O����e����Y����IRtO���8�cr-���H���PT��=�N�HX�.X<A���[r)�7�UA�*��"n��X|��x�� ��������ET|����B!�B!�Bq������_d|�+�����W'��������������D��a������N�_�S�����p��gSVIco��y�o���h@��.O0C;H��Df�{����pQx���n�������J+@����P��(�������D��I�|���"***��+��km��Z-j;�R�g>+��w�U3�.����G�AO��u��~�~�,�kM������3�1�����87�N��U��*�#X�S0��e�������=�����)�v�K�����#c^��|t���}���w5���<����������R�K�Z���ck�0��b(���bu^(�O�o�Zl;���	=�m�;Dul���o/��!�B!�B!��=k\ ���mc^d�����u�f�2^�1�V�Mb��o��l)����f�*/���JR�����l6���^���"��%�U�X�r��e�����	�LF\19�����E��y��a
������f��O_Njf)sa+�7�J�B��o���N"��T��1�>K6����s����%�g)�+7��*�v�K��(�/$x�i��e��w?!'7����3����'3k�4����:�3/�{'��=@��m��[UY����3�1;vg)P�#�#��J���6�5g)[�����1��cI��P�sGc�M�{'��/B��i��p-#v�v4�3����7n��������r?�~����s������.���U_b��������P��wYT�]��~��m�����l��j�u��z<B�������~�"B!�B!�B��pi���\tm��"qC�bK|��a����/L�^c����eQ�[L�~K��{���/����<�J�};��\M����z%���H����/���,L|s�R��7�5��[����zf�h��}d���: �Z#��s;�^d�����kd�)��^�Q�fam�}�q8�H�����mE%0�:���
�����������	�h
#.[������X�{/�^��I� ��{1z�����(Q�-D�B�]�X��BX���S
�Fjb/�����5��Q�����W%�H��0�+���SY^L���H��"iRoT���M��|2	��D��@��y�
�X�D.q��u�{\����#� ��9��(�H���
�{���t�@^^X&D`��B��5�Z!�B!�B!������75��g[r��W�%Xs1��}���(�k����_��C�������
!~�|jz�N����/���G����:iz�N����G����:iz�N����G��������'�B!�B!�B!D�kx!��
)?J�����x���}���V�W���%�B!�B!���#��3�6�K*�_��B4���? �r��B!�B!�B�+�M)�B!�B!�B!�%��i�g�{'.�C������T��N]�]B!�B!�B!��htm:�v�����z�wA\"�:I�U��t��!��51R'�_R�M��I�#u��H�4=R'M��I�#u��H�4=R'M��I�s%��ov��o�t��� .���9r�wA!�B!�B!����9��B!�B!�B!��$'�B!�B!�B!�% �8!�B!�B!�B!.��������1�~��<��~NT����kyi�Hn�A��o����FoJ!�B!�B!�B�����N|�������T�kY����������3��PZ�x��om������JS�s�kD����o�����p����QR��%������:�O��J��e�Ue���'L�gc�*��]��D�9��?^�c�8�-	��
!����}�d)#�$r����Z��7��3�Y�~���Rqo����0���`	c��Oq�W~��6�	B���Ko$��)��>^��>!6�Q+����c��t�;���
�b[��Ll�v`-�a7`h��4���q��X��(�nA�~iGj�Km���
d�������(�o!��
�z=�9ik�8w;B!�B!�B!~U��57�;f6Kc���u�3>Q|��:n����;�=�������q-��XCH������a���}":�g�#z6�l��C?��K�����'9�CY?���3q�K�;���SYTE��;P�XJ�>��)�I&��<|��v`51�^�=t9�c.�+���q�����X'01CO����LB�>���!�}�m�<�m��$��Z����c?��Y�VF� ��Y�l��'���z���z&qk�(�o�����^�pf/c�;_��ekB!�B!�Bq�42w�u6��y�?���#��>��?�������qN�{�R�/��$'��8m��#�5�������}T�u�����P����SII9�%���Z��%��J�k��B����F�kj�R��n������h�a��c`i��9�C�5�/��B��1�#����y��99s�}_s_3t�s}��?�7�V�0��UP[�x-�~#Hy���g������c���&���;b6c�7�+���.��xh	w�Ad����<D���'��m3�K����������D���g�G�M��	���q�8���H��;	�'<"�����V3U���!�NtLI�}|�d�g�"R��\��(��X{l*j�;L[�5��K�n6A�r��
="Z��Fd�H�W�l=Cb�wI_�)@�'L�����7y���#a�T�x+6�[�n���m.<Tc�<��S'�c0������������:NX��h6�]�py!Q�Q3xt"n�
�O��R�%�������5���/�8�W8Z���4�6���������6�I��a8�<���P��D��S~&��������WO!���n��$G~����""""""""""���W��"��}7�o?�/�RY������B/����� IDAT���Db�[O���t����w`3����WM i�bg|���������G��{�����L�YKaQ>C?&mtF�VM�l�W'{����g���Y�@��O)|m����)��d�z����m������b^J���y<�O~������)�_$��S��Dc�sI<g��RP����#p�z�����-��|;	����IZn�\���o\L��sq��j�@\��(�W�7 �@��7�z?qf���m����7T,�A�����3��
��{��������J�����u"�P�	���`u)�S��Y���6�I{b��=mui�	���%Y��|�����m%x�v0s��X�`�:��� k�4<�!�q5uTvTE�'��j�����^�<�;g�2u�	KP6�>�iC���'�M&6�����3;?���
n��^2���Jrds��[9n�J��2<�@��s�}�=����F,1��)a�!
s��9���W`�B�
���N����X��&0_G��{	.-�Y��������l]	��#���X������C��
�=�Sd&aHoo�d�����b�����������_�"�b��$���J�=r�{�|�$yp4?0w���>V
�zW�!�o*���5f��0�[A���\�;
a��GqXL@S�;��e�z������:u�����p?�/��a_}#=F�������\u��/K���H��J������Dz����ck��������',e�e����-��s2���?�A��QL\u�[��	d�'0qDg,~g���@��$b;c��k���{[	��NDDDDDDDDD�'�/�;�J>a��{���*�f_1?�������'���6r`_!����5����o�I..� f����,B����@L&&�	k��w�D�S=��?'�`>9�2p�y0Y�M���Z�`�����3c	2}�����C��%g��X�9f%�W�_������s���$�U�� ��,��E�f6,U�(���x��`�X��e������]��t�<z_Vs/,���!Ng)��
<e����}���x�����9$:Z��>;����z-�*�g��Fd��
���}u���!�������:H��~$���<�u�t�����I=�����)�k)�31`1c�s(i����vv����.P�v7��sH��&q|2����H��@�5�aw������p�liN@����EDDDDDDDDD|�_�^]����i�RR��������gM�_�{(���q�T�cc;��
�K�%�v���\�	ccNX���������4;@�nL[���N�/h�Y��������]\B���t����[��;���cU��#�C���������	��7��X��%��wqN000cl�y�+������W���),�����w`�7���u��`�j�{�?0s���<�Uu��S.�[����&V�h�c$���_u�K_b��GNq3������������
�[Q@��;�����	��^v?Y��L�~���#K��:{x�#��[h;�����0_�=;V/%����H�qO��YM�����[Bj��
-P��p������X�&Jb�""""""""""r��o".��3�R������Og��f���+&�y�
��daZ7kN�E�;IrE���0z>�v�1������g$Y{����qM	�>�X���������
�&��k�~D���Vs"�t��q!Y[����M�� ���5S�R�d�#`|N���C�p�0Z��l�l,��4�����GT�� �Q
�;���wxw!!DF4��_������`��|J{_k����V���#o�h|N�3���d��KPF��&��xv"�C�x��_s��8
�Rs_
�A�~��@%�-�)���9������G�0m���-���5����`s%E�G��-�i/����G�R��������h��Z�2��><a���c��p�I��O1�����)�1����UTTWS]�S�i*�M��/x�O+�Al6� ��i�������f�>�z���K�(�O^��r�0�J�r""""""""""����'Ro���M������Lth. d�<����Rlg9�in������`�'1"��f6�G��e��dO�S�y,=��5��#b�
{�,������f�1�������!1D:bI�yiI��{�_l�f�D�g�]n"88���w���0��%n�#DoO#�LH�cG��hU@�>L��4��D:"�u����h����w	��E8��{��
�#)�7�:�=bn%r�����x�@%�[>���� �� ��H��)��P���S�����6�L8����d=������(��D6krt�R��N���N=Y����nW���fB��H������q9$�E��d7�U����fJk���%}�#TL���d"l�{D��AZ����;U��n'��U��������>��w�01
f�;��9�1�#�Y�;���������������u���������S[7v)�@Z=������R{��t�
�^ 5��eX�g�����3A���� ������Wr�Q��sH�r���\z���K��m�9�zr�Ro}�z�{���������'�G=�=���QO|�z�{.��h"N�?���V>��;���\�Z�M����-���uq��Y��`L�����Q���w(��S(��F�CU5�]]���IE\;������v�������8MgL�,Rg|�������3����i���+�L,��#�k��.CDDDDDDDDDD|�f8���+���?n�������}���������	���,��N�m���U�4�Hz�}�Ns���!d��?+IDDDDDDDDDD�bu�q?�+&��.��.�B�#��#�}}?sF�i~�e�P������������H�������[p@���q����l+Z&�����pp^$���W&"""""""""""�0�����5���p`j��.C��p���)��U�*"��{�����QO.^���QO|�z�{���������'�G=�=���QO|����&�]�\�������Y���������aE""""""""""""
KA�4��W\������G����gl���DDDDDDDDDDD��� NM���l|>���Z0�7������Z��|8m��6vy""""""""""""�������r?!63sF�	4{���������B�����e����"����f�Kz��7����}��3������(��Pn���������Q!������������\,��4e�~V�����G3{ncnr����|��A�f�My��d�:������F!_n���RI��_l
�����;�� �D��kj9���}	�g
�F�y��'�|@j��$.����4�J���Gk. $f ��w������H�	�z��{)s7����4g���yr����a�,�����D�����%}��
v�j�_��� 9�o%�e?�?R�`%��LB��'��>��5O��g��������W]��~�z
����/�hM���cl�����P��o(w;��e���?�����@����V��s��@��j�����]B��"�Y�d��md
l���4W�8'|L��S���G�5�Q2�}��k�����>����)�����3q�W�|������x�&\k�2���p����������xiK�`6}���'l z�l/."\����q�������C.x��5N�������p=���/���V�����XYB�n�a;\�7��#�@3�����0D�����m��!q`"�U+����q�V�\<�a��%�����������JHD$�w$c�j����$<�!R��5t 9��@�F2����p����1jE5��k�������XC�H7�
V�h��I����Y!Q���][��U��8~:h�b�/�d2�����	+��E����[cD�f�\�tu������|z���6=I�2����c�\����D��R�t�)z�bK_��J������H����~���i�J<E�I���;]�k����L�=O��`��gI0�|��,�X�snB�H��1������8�NZV���=��0��0���Gp-I!<l �9z6W����
$gO��?q�����c��=w��dn��Nxv�����bjf#2n$��=�0v-&m���	�p\y���n+���;q�ZM�u����}��#���C��bm���0�}*?�3����#6�=�^N���|��{��K�=���0z<�y��;��������7���k�!�G�AH��|0'��=;��>��g��x������Q�9���D��}i��*"""""""""��zq�?a��/��]"�tk� ����e�7a���0['���(���G���MR��E���������}�g5�S��Il�������9����J�����	��u��L�x�����9���	d����k�NlI:I���c� kB������w�[$�%k�g�%�|@��
���`w��.z���������x���]����TW�!k�{�A������:x����h;�G�����N_G`�f�I���0��,��eP/o}�]X0}�~��81@�3c�4��*����p��+
V�;�=���In���'����i�fw�b��������E��5�}v}����SR���k>�p� �y$mIM/�>!o���Y�9���/����b�@�y3Y�>�����,)���D^uV����@��
DMy�R�{���@�����TP4/�1��$y�p�C�m=�y���b-�A��ix��B��j�{��������������=
�:�hQ����VS<�������?��{�g���O3�{bG�!��>|����������-��������6'2�^l��������o g�!�~��6�7	w�w�M�<>�������N7ih4�}�KR��������Ylh3������2����Wx�P�}�7�7�������\�����8����z�)�^���,��
'J7��8�.�c�a�-����{6��lA��;�����=$���r�������6�	c���l23hda�&���=1��P��?��*���#k�g\K�S/3�_{�3c����d�_�5���Y3I�x�I��\�9jUI����m����a��p�{�|�$yp��=u���>V
�zMOSGSl���hwrM�����`
�J��C�Oy���M�D�I�g%��1�\�^&}��x��1�w%��#�����w#iD<��%l?���g�G���GCBK��;�R���[���M&���-�znW)F�-$�jK�?�S\^
���m������4�,��������[R�t�f���>����DYp<�K��WI��K�[��~_�����/��x�2��8�3�g�;=��AMH�r&�����<�I�������K��	8����;M)�R��4���.�����*���2��������,����n�V}��6���m$voy�9����s�W�T�/�;�-[gRtC
���hqY��?��N�26|�9�����7S���_� N��!
�I��y$����D@�r���`���C���?����]~PY����q{DY����{��b;�Z�^J�oaRL��%!��3(�l���Hzu	3{&o���$��OQY5�����Y$Z63�_��H�����2�������I��"i�T��]T�v���m��|YM�zL���w�Y������&*��������"m��7>��)�1f���j��+��Ip��_-�S��X��G���,�S^Q�����5������Z�`x�T�?+���f��������do���w(��MB�gw�*W�,�Z'������]�e M&B�����"56�!u��������V�s�h��^C��]��nv��f
'u���Oh9�>���.{*3�����|���a!z�3�l���C;���+����(XR�9��D���������!�����������\��������ml��K<>*����~�bvU4����	|�9�~��m�I������|J\X��c����4������4�"OS���`�q�#��S�TA�@V<x��Z��=��fX������O�^���Ij�,�{�%����t�s����'��s��H�����hz/�' y��S�S��8)�������������U56�j�{�?����	5V|�G�Mg_������-r�~�������&0&�C��w��)a������p���!����G8���tU�qtZ������9���|�9��r��c�;��f����]����a��(��%����a1�������,��I���)Z��gY�~OV`
��������=����S�J�W/%�rR�z��.����
��d�[��*�������c�X���O\�A��Ok�r��>�OW�_s���+K7Q�s)�y$?��	K�z5���/��+�[�GvQS���z��p�%Yk�7~���
�=6>o��*"""""""""���qA]���,yu.�32����KO��}�	��]y������?�����-H�pr���_����H8i�)[T_"�W����#n���;��)���M�����9�o�t�e9����=������%����">�M���F5�%���2u��+I��������ND��
s����S�;���G���":fk�����U�9N��2>g���)��L���'�����a%�?:�<3�IKvqp������e=E{N���W�V� yDy��5zJ�#g�:c��KJ��,��]�p�f]��_�����.^@�����p��('��0���s��w*��d�n�<[���Dt��3��g�@\�[)��4�]A\�p��xgu��D���e�B��}
U���q����j��o�w���l���,X��R���-�',x1���>�)��WQq|��i*�M��/x��0��06.'���F����4�)�)��,���_�x?��E���j��lG��z��j����&>�M�������N��Uw���]0�:`��K�N��w���+.�>Y����W�Z��8��V��������#�rRxt;�Q&��x��0f���������o�w�P�q��I������N�Co��N�$Km����#i��$U�N�.�N�)%w���.���g�#$���hG4i�{���/����������}�D������y�O��o������1q���x���j���3ly����yOc�A�#�HG,ik�p8Zr���(�A���4��:�Tkl���"�l'1�JL&a�� �����=���1O��=���p��N���$�X��dU�_Kb�]If��		�"u�-��%����Qf�;��9�1�#���������cw�E!6�&".�<�/��y��d���|����0��'�fo5�Y~�,=��5�9�o�t���I��J��Q$�����;	�M�!/c��(��I�
�*�;�g��_ o�i���US��NbL�z�WN��7]��TBU5�N�/GdhH���l!2�EO��=�M�Oy���)$��Mt�Hz����I�-�	��#�O$�������I=�����=�������t+�Qq$-0���3�v��UDDDDDDDDD�����i)>\_�]��i`{���m���]��9�=H�y7���T����x6��'	����6|�gt��g������|e#\����q�G=�x���G=�=���QO|�z�{���������'�G=�=�BO4'"��R~���aA�/H�u}��`x�}_�k�(�� ND��(�K�6��1�I���H�~��;�7��2�'""""""""""��������������:�������/HDDDDDDDDDD|�&�DDDDDDDDDDDDD���uV7v��M���]��������������i����/� �����5�����w�^��m��e�\�}�=���QO.^���QO|�z�{���������'�G=�=���QO|���-M)""""""""""""r(�8� IDAT9���������������
�DDDDDDDDDDDDD��zq�%�x���0�7�!���,���y�����O���F��?F}/#""""""""""""rA�_W���-����������\��x#_����_��/���Y�*������`2�j~��E�0z.�������X��#<U?��F�R��o#��+����%a�T��|wg��xF_B��B�q5_���`�M�?�W-=q�{��;'PT^
���/\���{�<��&g�[f�#�%�����=��t��������-�'��{��X�����������H��q����s����@�@�����
��/�m�QLJ�F�S�*�s+�_����TW�`�o1��c����i���f.3���O���y	��c�3W���vQ0���f��g�5�3�}����h��������WC�!
�D��g����6�mJ��~�����������Q�����Z	��w�be	m��F[��7@y"5���w����k��/������D?��X@S����o������?X��Y�#���m$��{�'<,���P��ez������)�{�^}��N-�X,���r�f{��g����;���n�:���G0�����PB""��{ �\���q��gKtM
�}G�S�[f�#,���}	�:��U_�Z�B����_��Fut�l�
�O��R����cb����{a8	�s�����lYD����}��b���?}
r�Lo�x��1����=`y?���������p�c�Hz�c<'�_���z;Zpy!]�H����9�l$-*���SI��"#�'<f k���wNDDDDDDDDDD|Y��8�������.�G��j�S�����>y[���7��F��G�Z�CA����W��lI��?�C���'�M&6p�#K��@��O������������A��k����"��uo�����,�?�3[���s�L����4f�[o�F��Il�������9����J�*)����E��nf���L�q���y�?3�m���%�[���*l1���pq����^Z�C��D�:�3s����d�t�@��9d���k/;��������_)(�N���g=Bj���x������������ v_&��?��:D�����*��M�R��Eb�>����sz���I��>a�WPZ�$k���	���1�����]���h-�EL��I��e8b�(""""""""""����/��?_���6��x+-.;�KD��q���n8��W@�
�gL�V@S�=���;,XS
TR��Jo~���W�x�=�������	�� �6�F���_Ba�I�f��b��k)�)��k�����_�����6�	c���-�?0����>X.7A�����>d$q���k�>������e�u�J�a��;�Q]���5�M�x���M>w�<8�{�;�Gr+o�[�>tT}O������=�nA�����������\Gd�U�]��;�_�%a��E���H����~N,?��}EL��K�
G�h�������w�=k��g���\x.�}EDDDDDDDDD.B�����������(�p��N�#������hd����Wcnw'�1�����8�J�[�����N�y�R��b���/����I#qf�
�x���HV����T4�a	4�`�a���Q~7����,V�J]{�}3?��C�)��s_M~V����r*����n�G���j�j���q:Kq�j��G�fT���/�S2�*���)?��b����kjI�?'���m��9�Q��X�%�|�<f?�P��DDDDDDDDDD��/�soe�������x|T2#�������:�f�+fD��,�V��������\�������y�A�z�V������`�����l���������ZK[��wcZQ�����Ij�W�v3�������a��crm&�Kw�k���3s��X��9�s�q{�hj!���X�x���+�����3c�]���x�}��{Z�����
z9��&x<��{����<��hF2��[2q��y��:��V
\�����������\��ue��o�������`vF/=������6������Y����:����4��I��,_���	�Y��5���"&��Ki�@��O�r�0��s����p�5'�&\��x�XR��:u	Cs����z?4��-_��xp�}��H+�@��=�K������:����T����r�y���@\�P�_�E�~�R���sH=�"Ou������R�;���
~�:+*O=�u�?�$s�G�p����gF1i�.|�,�:"#�Q���{��|��Sz����,�sX�AM�8H�k)tT\�}����8����=�Lm�1igW2�����k��������k���)��o�������s5I�^&��uzw����pzO)!�sx�����d�W��hW���Z�����<� �We3�����k����}��x/�m�D>��}���T5��h&3��L���H�MD�Mih�:j��$|�<��Z�����G���U_�p�9�vF	a��,����V=u��S����B��}�6�i��#�tD��%m�GKj]���=�L&B~��C�fb��Z�F>B��4"����<FqD�����]K���b_��]���J^�A$wq��h*9���������������T]]}A��������eH��w/m���I�u�O���k���L�ES�"��>���������������'�G=�=���QO|�z�{��������\
=�D�\�<[1���	4�B8�!
��u��Q�`u����L����EDDDDDDDDDDDI-;d�\�;�c��7v""""""""""""��D��������������y`Z�����.�\�i���K9-Suu��}���;�F7v�����K��m�����O�G=�=���K��=���QO|�z�{���������'�G=�=����z��)EDDDDDDDDDDDD�q"""""""""""""���8��@A��������������y�W���,c�����m7s_�����gu>.""""""""""""r)��D\�~V�����G3{ncnr����|]����7P�r�����%cB	h�)�FxL����,��X?����`2����q���\����J����=�PlT�pvc�4����o���c{����V��*��1��{4y����w}q��x��I�r�a���$}�.��.KDDDDDDDDDD�<�_����?��^���
���P�_�����|N*q.L&:�9<1��)�
w��L�o��)���sqU�������������y�8���Su�9cYO<Mq�gI���������d��I{�u�Uu&���~��	�������B���d������������\,��G���J�?P��+Kh��6����|\����'}�RlO,"k�`��Y�������F���t�
j����oi#��X������<k^#c�����b\k_&%���X��E���{���D?�[��g����/�5��m�IY�U����S%��J���N\�@Sl]�!2p�;��]�����������H��w��<�"�%�H�Vg~\�<[W�_v��n�r�s������l�v�Q���m�mk��������l����]��k�Z��vw�f����e[����Y�����j��4����#�7xs�GaUGb�o""""""""""r��W���4�
m16�VZ\v��E����`������{�!���Xbzx�a��9���a�����%���%��Z�����L���{����.�pm.������uu`�h��t��f��&�u�
��D����$���h��DDDDDDDDDDD\������eq&E7�0))�X�V��"g�d�lxp�g>x�{�:1�L�L&�QOS�}�O���W��``��������L`xp�/'8�
���Hzu	3{&o���$��OQ��K]6�d�o��>qg����$/���u�p������N���]�����������H������[Y��6����������>�����+�����\�,���0�L���Hs�����E��~O����Zwc��\�t���s��PZ��S�����������#8�f��*Nxa�{���^����?B��M����~��KS���UE�&���X��s?q�/���S<�Z����������������~qBPW���v�O����Yi}')Cn!v\��������.��U�I9���H:�=���}�SF2m�2~��l����I/��������a�������N��V�:d
��o2��U��u"��U�Z0�T�)�@����,��o�����<e]�,�9Za,XN��_��
�����i"��B8����8���9Qc�)x�w�s��mA�����y�B�_��Si����X�
	�|#�hf#z�[X��J��>����#�c�����&mw��x<s!!�D;�Is����~�
��\n:��s$�f�_Ij�D�7}}�n��)aC'1&t=���'r�����7vq"""""""""""
N����k�c�s,�\�����Q�L;��,��c���s�kE���e�[�~I|���{���=_�����+��{t�wO���Y�o����Yn&yA����Oq"5,1CHlSH���0N{�!
^�;���2�S��Qu"""""""""""r�Q'�#s��L l�X&�:P�a�%���&Nz�Y�S'"""""""""""�"-M)rs�����{�cl��y���� �`i"NDDDDDDDDDDDD�<0�]�aucq���l��%��������������������
�>\_�]��i`{���m���]��EA�'��������������'�G=�=���QO|�z�{��������\
=���"""""""""""""���8��@A��������������y� NDDDDDDDDDDDD�<���	�K�1g�R�\����/�a���3�.|��/y��UC�����������YDDDDDDDDDDDD���o"�b?+^[�W���=7�17�x{�F�������'�����4��<�������:�@U�%���)$�t$�YL�[��c����Y^��N��Hj��$.����wC�:���#����	��v���H[�
�� �b2�������wy�1>'#.��?�����J�g�������S}�zS�2����M�!���#z�|�F��[f�#�%�����e|N��e?�'u���d���0�L;�1i��:�=D��[N������7�t�DDDDDDDDDDD�7�������1�W�i{C(��7���?�_]o���~�5�W� ����KA%��F�c�l<��&o�W�K��5�NJ�%z�T�<�~,w2m�6��n��Tu��'���P�c�"��~M���$�x���}H�����6�mJ����w�[�����?J��3�_'�����E�I�<��@S��5'���������1�2wz�ww.'��+N{��g%����"��5R�� ����]�$kHs�F?E��#�����S]]}�������Q�u�����������������z��o����f���v����� �����~�'��&�W/������%�S�!l�b�'�����%���";�"7=��.�l$-*���SI��"#�'<f k�:�5���;�y���?�[�#�	'��hr�����C���Iz5�iC��n�b�t/�/�M��g��������n$�Gb�.�7�5�UcY��0`q��@�!�������X�O���x����I|8���((�-�:���O��� ���x'�����I���W���x�����/�����?q���DqSwg�����qF��'�����%)x��?;�{�99^���H���u������������t��p���_dC�D����������E�1�N7Y����}�\M.�M��ot!�O�)�L���c�xm�7\����]���h-�EL��I��e8����u���hF������[W3��-���F�)S`�8W�����$D�<����{��A��o�	-c��� �g����W2q��O����
v�����7��	mQ}���H�&�Y_��z&i�-xr�>*�qQ0�+��9�$m|"a���$�1���9�����uL���*��_`ng'���,����os�9S���3mS;R��%�z��)""""""""""���?�+��?_���6��x+-.*��`��j�v-��w"�����������U���lXj]����v�T������0�	�,�#�A���Nd�u��v��t'�!#�kw�]K���8�� ���8���0_m�v�i[�!�-�9���viu��kx�n����j��k�X6'����!�6���IR��%&-��WP�����;�l��}+���C��s�!���(��a��]'�:�/l�2p{*03�@3FY)��BV�s��[K��q��;���"""""""""""�S������eq&E7�0))�����5Y��`s)��=��b�n����	�dY1��S^������p�7���?f?�`@�Ar���5 ��+�cVz'�N���nJ]{�}3&&����!��������,3�`�?{�U���9Jx(\gk�����IM([��W[1-euK�J�6��\�5����)�k�e�������+�k���&Z��Y��(��X�|��H��z\�\�s~��s�3�un���������G
g�����}Z����E)�����N.��)�8%�^��6lG:�wg��L����3
GT<#^����d��-$���3����.��Y�G�_�")�F��
$}���.����5sI�c�x�e`X��*��D�3��*��37/ �����-�n8��jV�+�������������))<9q������Q|1�1��#���@z'� 4�S���u7�#s�g'{����\]B�]�g�v0�z����v�v���S��3M�a�a%q���|�*��<�s���w`+\D��oNXv���;���"]@ �����#���#w6��TN]`�����[)���W��p�Nh��4�?a�$e�\V����x
��C����1�c����	����+7{C��A�o<P�}�A�G�
�V7%G�^��B���4�}0�W�v�<�[)\�p��O�i��'""""""""""�s�������~�]�~�����LOg�3�i\{�G���b��&�?A\�zS��ueD����B�q(�Y��x'�^"�g*�����������b�����X���|�-$��p�r�Tt^y��b��ixO�����?)m�I��k����20�����t�
i�Q��`�����[�L�)H��d*�� ��8���-�����h����e��
!g�a����D�b�����������zq`R83���p�>h@D�h!AX����v�ywnd���v��#������w�6|�g��,,u���f�k����=�zl���5_b��8�����������������S
��Org=��q9bk����/�����xq!?��k�D�J��WtK\}gR��T�����d���O4'oTW"Wc	��m�^g� ��V��2�?�������)\�kj��A���k����`����O(�SV��6��d�M��w���1��L���=�6���p����qD�}�����;�;����a�Hjq5F�D����p������I>��hWF�d��$e���h�$q����2����}3�����k�5:�������������`��|5{Z�3�hmw����a��{�nBCC/v�&s�� ;�5��l{���gQ*	/\�������)?'�O�G9�?���K��?���QN��r���������('�G9�?����r���"�:�9I�w�l����(���S2_[������'""""""""""R��$^�2`�4��>��<�u
KO��Z���I����&����"""""""""""r~.v"r�fp3 IDAT4 f�B���N��Eg^GDDDDDDDDDDD.u�����������������k>:�<v���
�/v"""""""""""""gd��|�T!���y��>�b�!����	

��a�\t?����('�/���('�G9�?���QN��r���������('��J�����*����������������DDDDDDDDDDDDDj�
q"""""""""""""�������K��������H~:����������Er�'yg�Y�C�������������\2jV�+��{s�]�0f������]���U./������A�j�\9�m�'4%���x�O\����H�&��s���U���~-q=�����m���;a=&`�����:X,���UV�F��:m�w��<��3�O�6����G�������Z?�{�oiz�x
Jk���'h���=�������yKqW��*>������#_dt|s��	�%�@s?��|p��-�@����B���9	��0s��sBQ������z$��3�����j�����|>J�k��s�����[�8�����S�ta������P0o	�JR������Z=�������qD[j�8U�;����B
U\���xj�@���@�t�-�Jh�v�Z(��_,���~w�D=~��rypv�OB�2W|V�Km��`K��$�m��Hx�Q�DFD�y�,
�>(�G��X\������m[Vt���P������s��D���s�1�z~:vps9�=HlT$��H\q���l;&�I�2��m����T��qbz�������%&.��G��v8��J��V�3w�=����&�p�Hh}�`+�VI����������u����C�V���c�[�X�y:�#�H��:����>�+
��{���5|9���zW�����=���8s����������1��4<�n�+����;�wcc��6lI]��u3�����w�g9cG��lR{&�����&""""""""""���(����^���$�xcEQ.gw�wvCE89��$u%�o��u
B�����ID�n2�<D����k>c��7���F�+*�-��w;�]����r�
�L�A��0����:�D<����#������K�r��WRH]�d����o* ���L2���?@����k(�0��MY$6>�[�~	�����Gx��2���>8����xK���=�@��i�0;���LKf�� F,���M���b##�N����o$��M��<���q_e����s�n�ds��WX���lY0s��dl��bZ�3^s'(�����1b����19���-�m���qID�Jd��L��	8��DDDDDDDDDD�RU�B\���:����ct��4����X�|1/�A���3g���5�)�>��������>���2��g�\r�6$�����&{�A�!�*
8!�H~�f�"���8����j�������(*���+(�%��;<@��M0J?''�"��#�^�Gt���9_��hOR��5+2�%�%������&���"�+�Y��[^��v�;��'py�����w��x�������v5\O������=r�t�7'.���)K�7�
��O�9����I��0�F��'<���g��Np-�]���Z ��3*�=xO�z,�v�������������%�fo�:t��2(�%���"�n���mS��{)(�A��o�<�����2�����+I1f��V2�m;����H�3q�:�a7E{6��!��U7���{�`[��a9������)�XC���LE�CXCl��bFl�A����z��m�W�����b#(�
�����c5RT\v�;{�i��Q1eg7R���"�nr��J���{��W^����S~�b[�U�I����{�k�����5�8z��e���MDDDDDDDDDD.Y5��+�������������))<9q�5��\7�?������A����{g�T��P�:2����w���2�o�{���`�Pr�3���[�CE��������-9�Ie�����#�a�j��8���>b]��u�
����};����bXq�CI������yx���g=�I93M��s��;�5��?�5���������������B�3��wY4�5f��33=�����Y�w=5��s��
'����������[E�%���a�$1���Y��Mp���F���
<�g.;�����}�W�Y�w|[Qx����p
d��9��(����J\�����s�'��|�n�����{��������|��(^�������8���n}��������;����b
s`X���#���3��S1]�w�,F�F��,���8����w�����b
�������{yY�{	�k06�k5G�Hm��FR������82%�q�3�Jr��tk{;��H�M���M$��L�h�����v2�pF����n]�1���������.��lr�I_�4�9�����FDc�Xj��nC�c����Y��4,�>�g&q�������e"9����R�b�a����@���%������V���`zB	����n���L��cp�mjO�����|"q�.:���;�n��M]y�k���l��A��M����k06�g��wI=��hmw����a��{�nBCC/v"��O�G9�?���K��?���QN��r���������('�G9�?����r��8�Z�B�������������H-P!NDDDDDDDDDDDD��'""""""""""""R,���w��8WMnh|�C9#�����
q������;��v��Mhh��CDD��{��������('�G9�?���QN��r���������\	9���"""""""""""""�@�8�Z�B�������������H-P!NDDDDDDDDDDDD��t�[�2k�b
<&��[�/�z�|���3��:�����w~����	�A����������������u��������.v3_KgxK�.X��?� �q���������?���pr.���������>~Y����]���x�v>��g`��@lx��o�]����H�����!�� k�t��m*n�w����%{�7g�m�^������x�|W��������w�s�����b9���Jd�����0��%�C7&~��Y����a��r^��b!�M�~��X{��j��X^X���&������h�|�~��+���t�:��=��O��9z�[_�s��'���d�n��}��.��D>]%7�{�}�/��k*r�0���?T9��d�%��ur��4n������Y$EY	�{<�U������[D�GtO&���b��������^�y\�)�y?M��f��4����~������9��7����������������^��"���x�O}���L
���������W��������/<g���=�fbbA�����L��)��Gz�mIdD$����l��sfn�Oj�-Y,5�&i��U��n;�\�I!m�g��+^NjT3z���� w��#��������������Y!.�1=F�����zK8��~J����|^m�@a����}�Z2W�8�k���Y�����"&]�>��������&�q��i�I?���'��h�����|>|>eE��k�9��7�h1��a-X8r�'��(^���xRV]K���P�m���$��!����m<P�A�e,O��9_U�������L�;~��o��4�T��r��3m>a�3o�>U�z7��o&�oc���r���������|7�;�r�����3�AF�"�mN��=��#u>$g}J��3���x���m�^r�<FZqg2��{��q|�U�����k�F�1�������[��:�=����"7��9�d��XX���q#��?�8??��c�������|�_u������}N��3�]�O��|��������hq��u����5�L��E�
�|(���H�1������r�4e����o<�OI:��6 ��"�g<���'���� �]����c�jE��0��a2���9���~�o5~G\��Fp P����o%�c;B���~�^>�1�zt����X�� \�����	����U �#?{fT�*O���$�k"�"��r�m�kWnS���w�4<��	$����n
���U��a�����8s�t:G��:��u�%2�)�}���n#k����X��q%!��;��V"c2b`wb�n��$����&}Hb�o����9��>�>}|����=S)�F������
f>����3e0��-�S~y��>��O�c�p���FH1�Cl�n�
*���]~GR���-�����������&}�tR���b'��CL��7K�<B�q�bU�:��]g$�}��������X\�3(&�}��6}gW5�r���{_5 v�C8�� k�):��t���h�,��=L���S�`�5pKg=�+����],]��cH�t3��;H5����A��0w.'c�A���$�p`o��s7��?��&s����'� �K����=����=��GF�����U_V�����~��
�w=��1�p~�yU���U�>r��=��),��;�V��nm[C���>�5x����E��Sw��.L��c{4���v�x�6o�{C'Z7�ao{������o�|��������nl'��c��y5��|����p�s�����sl`
kM�3���Gz�V'eO��FzW�	]�V���E'""""""""r���@��d��
�%�h��nCZ��;IC^������w�g����^v��6����'�-?6}��c�W$�������g	#�DI�7����-�^��j<�SV�-�G��O��]/����e�W����c�������+�B���)��(#N���Q��|�7�����o�}�A���01)�3����!e����O�}-�{�h��dk��y[�y�!��&R�e
��?#gHCrffP���%����";�O��0�����/�x�Y�wjN��Y,�����y��YL�q��������5e9����\/�9	�7Q����;����.���k__}�2�z���#�EC0��1�Q2�SY��3��_F������)(�?�^���\���,���U�����V�����I�(a��-��T*�F���7�����6{'���RZ��B�O8�5<Z�1B�����/���O(4!��{h��.[���:Zx����|�.</�M�`�9q9�a�i?D�f��MuX���"s��I�����X3�a�nn��e����
��g���	�m����9����z�!a8C��Q��3�=������%x
> ��q�WS�}��a8�G��N����xw��ls��:��zX;O���1����S��i��j/���I�pc��!""""""""�3�y!�t�L���M�1:�v����u"q-�%0�J���hX�%�9%��hv��%,\��p��O��[�]���]r��������������������["~O�������3�����l��?k��#�����<������p'��z��k)�ab���6�&��
X�F\��}���RHP��$�u@@"�F�l����M1��#��y(*��5>kXkbZ9��Er�9�9>^����-����U������G;kl�����g������\����a�����
q���?�������J����]`�k@����q	����c
��UtS�\����#�l�:�X��:�v\mo��!��jv]z��eaI���,�U�a�����aT������(*��}�^J�������W����a]�)�><s1����[�T�n1���E����E���S*�F��,�M;v�YW?��.{:���'��>�{#&&gt'"B�
���l�kga�~�	��0�m�;�]���I���[���z�����(:`�|�v.�[��cm�>EnqeW��5�o9��-(�AK��4���2����7e2������5+�:���������"��6������k�����x6��
n&���H�1����.������J��M8{��e�\����d�V�+��Z	�����o�a�V���������h��9�������vQr�,����xMW> 6��������������]�zd[	
��7�[�Zw���Y����<���1�p��M��e!��'U���&w	�h��^n<��`���V�����R`@���x�-9s��w/%�AX�U���v���(*����������y\�e�Ku���:��+��w��Z(�K��\���X{���e�[PAA6\���y_F���96����j@�[����J\��Dty��Z�Y������5s��x�e`��\^vr�����W7�pra�q/����� ���p��
�>���{��W?`�J�Rf��{�Z�Nr�l��&G�I��"�0G�o��:�{�0R_G�������#��0c0#}�am��*�������� ��Fx������,����GQv
��lU��w�S�����8�z���	#��:tc��NDDDDDDDD�O�
q%�X�r3[�5��CSx<%�''.`{�[��u+<C�#����kH�����q�<�m����������)��o��@��f����\L����6�a
���{���Y�x�c�:����%��{�[������<�Ws�C�$38��E���|���[����,��c������[I7k�L^q�)J��`���f��!w������%��q�����c(���r����
h�#��	;�W��?�}u�<��)��-�u�.�z����v�v���S�3�����8�{�7����mz��o��$�q��j���sw
Va6�[��~+J�R�>�����r5E��_�+�R�i'4
�~�	�n�����~7yY�������h�#��-�}s|Q�t�_��4]w&f���qv���`�%��������j`n���UV�z�^��{)XQ���
	mn�j�����M��n���0�o
(<r}���7��I�k�b�R�3�����*sY��%7z����DDDDDDDDDjI�
q!����,��3�������gz�,������g���7���c��D���<��AR;K'M�������d����������=V������
{�N8�
�U��.�x8\����r):tl�����1����]d?7����W��X'*�E�����+�,^G��)2�}�g���s#k6�<U�����������y0��a{�8E���`���K�s�YSeJ�d/%V�'���#��`��I��D����)�A�'d�
�&����v7�Qe,���cV\��,�$�����s|�qUs,�u��������7�V'�����7o"����uF�����n�z����^w�d�r���}�e-��z��V
1�u!1�M���1}���'�;���]�����;�w���
��Y�&K]$w�#�zb���-of��+��^2��Kw�)�_��WK�m�����7�'�2>�������f$�yr�)���q]����f}�0�&2����09��LM��[q=���1��x�w��U�>
��#g��`%"�F�u���SQL3����/,D�n�M1Hr~F����������:���v�`��	z�����s������ea���4r��|f&��f��x����L��)""""""""����#N���#��}�q�W�/�����<g�y���G��F�$��6��0�Qb����t���SF%����l�,�%���v���c����o8����v$
�@����lK����qeH�:���g��qc;]|���1����q_	�TVeXq��H����6������D���/
p��i����4q��e��
G�2E?���=!'?�7�z��b1��fB�68�����5c�G3y�B��iFs�gL%�;���-q8"H��n�^D��
	g�5�rZg���=���{�j:J<���X�v��Y@/�UX���4o���f�t�K�>���X8.�����9;�q��,}���.@�9�S�L��	D��b�y���3g IDAT�.����]�6����X"�.���,��u�\O���-�����������%v&/�8�^1{�D�~���p9�!�Qk��G�H�~��T+�����1�Y8�V��u�Q?[�oH��=i2In}�)��H����I���D<�
y_�RT����M�S)���e�lR����D)w7����?�f�{
���bg���+����c}�I="�����$9��������&�����V���	��p9����i�0�{���a=���}&w����mq������6��An�H�������S�)X�,���������+�&���������?��|�K�	�Gk���}��C.���wz���+��%���)K���t��S(�������3���G��4x�;�j2��ER�9�^[�3�/���(�G����g�0p 	]b�m�����U�,�7�\�Hr&�����.?�{��������('�G9�?���QN��r���������\	9QG��\Yw%�OC�����:	=��$sg��l�E88��T�>�f�����ZW��K~v
��C���q-fl����2h��a&��g�?��|w�DDDDDDDDD.�D�
S��'�^/��>�[�-��s>i+�^K���~6�},��Y4��nc�����[�k�{��|�������X�K���$w���'""""""""r�������'�9�s�Mr5W7Z s��Z
����X���3��=/�NEDDDDDDDDD�0���!""""""""""""r��|����b�Z����;�3��|�K����<�l{���l������^�0D.����r�����r���������('�G9�?���QN��r���s%�DSS���������������DDDDDDDDDDDDDj�
q"""""""""""""�@�8�ZP��n]��9�)���o���G�q�/��xgF:��<Dp�(�{�!��"f�W����=�7w1��c�k�o������P)[��:+����W���e�
(=t���+�A<+���!GP,Av";$0��%�K}�k'������'�I4�F�FA�8H�s���y������k'��#m���]�)i}Zd	"v�z�4"s�4:�����������������Q�A���-���w��DDDDDDDDDDD.#5+�5�������`Bo	'��O���l���v���a` ��#xyp�u/P�r8�{^
��/��0����()|�	��l�� ��^���r���\P������C����X6�����-?�����cr������m�P��F�'X��2RZ\}�������3�1��;���k��~������h�+h�����������\
j���@���@�t�-�Jh�v���������/���i�;��J���x�M������O����	�a
�����B��l�w�NUd�����3v�/1��:�.���;�er��e�#�I}k3�wY����R��+a�k���<��q��O���89��*Y/<J���4mA�Qp��Sw��������>��X��ti][��������[�HRW|w�c�����Xm�<n8	-�[?���
d��`M�KA�q�|J�K��qX�v��D��v�����G�w�������e��N���i9��-I�y;��Y[�Cr�;���9xX&�:��f�1g	���S8g��]C���))|��Z&<�v�t���x#���p�g�N����czY/������(Y0���MAyu8	���,�&��0�����o �{$F��L^����
kg�����B�������b�E�y����BEDDDDDDDDDD�5/������3��I?F'�N���U6��n�����a#���������8�&�������{���}2f���!���Q��G�SK(�4��67`m|q�Z��N��t�7'��k���a#���X�����}���0pvy�������8H���)���]
��D���i����f{)���Bk^_�[�?�u�3�L���NDDDDDDDDDD�gT�B��l\�A�-�LL��(�5���u�����O�'|_�	v�K'�d��1L/%���������X,,��g)�4��?t�PY����,?~30�^�2��������������]5�� �#�w`X1��|Q��N8�q�
���u���J��[�Y����������ZdX����e��T�Z4%��c����5����+G�
q%�X�r3[�5��CSx<%�''.`{���{�w���
FM�����H����K�� �5���
d,��I]T���L|��c�k�����|>|>eE,�����2��E�����J
�Rt�M8B�R!6w�9�I2�SYYt�������p�p=q���X7��%���%�:�|��1���0RbV�T��h������������\,5+%��g����fas��'�������nR�F�����v����� �V�J��I��� �Z�b�pt�C��!L~u)�����T��,���ubC�R�.�E�����+:����5�C��{/�P����!!��m������+�2�R����/��)�f]HO's����|w������	�>O_�~"""""""""""������
������a,I!6�!AW���������{5��F���/x�^�[$E�T�N��`<����}?!w�4����&�m,������- u��l��p�G��6��0=V~s����,gD�$��a�S���$O�3q;'m��-�Y��<O��w��iEDDDDDDDDD�Jb��|��K�>Z����c/vr����������E�~+�n��#c���\�o��t?����('�/���('�G9�?���QN��r���������('��J��:�D��w�|&N�7��}�������������\�T�����;�6l��o�,����"""""""""""��j�eKDjO�^���;���'""""""""""""R,���w��8WMnh|�C9#�����
q������;��v��Mhh��C������('�G9�|)��G9�?���QN��r���������('�G9�?WBN45�������������H-P!NDDDDDDDDDDDD��'""""""""""""RT��5�A��������I��V�K~��]��2�u�������n��=A�_Xj����������������YG\������b�1��t������u|M�q
3�����
��iAd�8��'�U���� ,�<L�����J?%-�z,��������?s�b�{�}[�:F�mE��=�|���w�,����=��R����0����q=���w��3"�-��:��c��
<���������#_dt|s��	�%�@s?���=d������_�����4Z�����_K���}���>�u�^c\���<�y��5~#��[q\u����H3���*+�Y������y�����y����3|���%n��������Jw�����vlGh����l��*~l��v!���sd\�+&��wV�>�A����e�Q18�����$�k"�"��r�m�kWnS���w�4<��	$��o��x7���m��}����`��;��{�Rxvs�b�9
IQ�S�P���)di�S���	�H-�%q�$&<�+�!V���%.�B�F�q9���@��d��
�%�h��|���_sW�M^�����N=qn�;�[����1����flGV����L����o���e/�\5��)+���#���H���F��W�+���}��m�������l!����x�K�>!����";�N��+*[�Z`>����&1qE#F��Q�����H����#�B�&�h��4%=��F�q�;xg�>n���I����3�R������D�h
A9?F�{H�.a��|��{�|�l���:��:�5����$w��h�K��S��B���J��o��u<V7�W��8+��<�mJ�X�`�����6����	]q�����r�����L���!1��3��o&I^�8&�n���'""""""""""r���w�dPpK*�c�+���xv|7�DC����2����.������J��M8{��e�\����d�V�S��Z	�����o�a�V����:���-�<�n��X,,+�_������W����|/���Hn����~�iW37�eP���N`���WdW�����������\yj�u�&������������xCG�x�~��D���#0�2"�`��M��ZB�WMI����A�R��:(�Rb��r
D����6�
lX�����`�0K��yl[g��3}���'���~�A^��?!gY>;�1��*�a[�"��G���)��%r��L��Q�""""""""""r��Y!.�=��~�4��������D��;H�a'a�t�%����=��sq����%[�}��|�����'����P\Q����2
��":�s������-G������1���>���E��i���N���������������������#.�K��&7��c�b�YN��ob3�g�O�1'""""""""""r9��;�Dj]="����pw���O,7���9���{W��8� 7j$�������!��e,.�����0*��PV~d�g�-yW�WtcW}�	��}��L�����+l�Js�]�X,�C���}W�:X��'k��3n�Y=��k�H���r���O�=S)��������������\q,>���z���<�l{���l������^�0D.����r�����r���������('�G9�?���QN��r���s%�Dq"""""""""""""�@�8�Z�B�������������H-P!NDDDDDDDDDDDD�X>\���bq�����b� """"""""""""rF��wI�>Z����c/vr�����������eA���QN��rr�Rn��r���������('�G9�?���QN��r����hjJ�Z�B�������������H-P!NDDDDDDDDDDDD��'""""""""""""Rj����K�5g1�@�����=n�����_�a��	lp3�����/.D�"""""""""""""~�fqe{xo�b������������}��{g5�=����tFw��w����?�.P�rY3w�����r�O�����1ccn���/~�������AK�>��������+�>�f�E���u9{�Q^��?!c��D6���Q�����X�""""""""""ri�Y!.�1=F�����zK8��~J��/����{~<t��}?r-�u-(l��7���>��������L�;~�U|��b���dn#s������.7�v5g�q<���>�6���1�K������n&�YPL��7H��N��K��|�����������%������Jw�����vlGh������g� 9%�����}�hX�D,R�Y�I1M�*������wP������gPL(��^�m��n�Oj�6DFE��i�=R��n#k����X��q%!}�w�������D:���������K�u�yW�%��hR����;�M�����9"�<�9r��4 v�C8�� k�w'�|/�o'�����m[�4*��90��tc��clL�����y�/�?�������q=�lt5A�"�<�U�Tv�y7�Ye�.�
{������>rG��q�T
�s�d3��=��c~Ktc���$t	��i#E��/�����8J>%��W�8,�G;�e;�]���#���>���r�2v��a�\@����l��?�d�N&G|N������A��g���������������:c�BZBZBi���b����ln��&j����d�����z�~7C+C7M(Y��_X�`��%+���������A���y/j���~><v��|�u>�Lx=�����]8'��Z1
g��I~x<��!�`+�K��l��$g�*)X����W������A�c#)S���������%��Y]H���Lw����&���g��y���q\Q=���I��5�;��(��+�+�X�O�]�/c���'�8DQa��W��i>�F�b�3�~�Y��P����$e���N��[I�KI�X���;q��'vw*IS���^I�c�){�U��le���q��L��k�`��\6#j��d���q�]�F��?Dlh�������]�#;��X""""""""""">�����]�5k���������W��\��79���G�l���{����O�g#f�h{��a�	�tB�n<5���������y��CW����F�{I�@�����jL�SY�lYHb����Jl���~�����u1o�>���_3������������R����U2�Z)�]���p���8�W���>�� ����7�������7��M����~�Xc/�����_c"z!�]��-�Nv��=J|��p����5�����������������I�oC�?���x�s	��D�:�x��=dO�-)��`��{����������������n����e��4
n�����KO^���F�e����(�@�����_�EN�{��H�������g
�+����KI�"�]��b�b����
�\%��^�������
���B��o�2����V`��>���O����F6�9�������v7���#�����S�(<p\�|s��������p��Q��_�;Tz����.��nJ<�c���)W��/X��uf��X�q��)���\�Y�'�|?��3w�Tb���+""""""""""r�����l��+d��,�����u��d?z�m��f�"����B��~�X���4��8~�������Eb�'|�=��z���	�W�>N��k���x��^{�<��KI�)+7���������9��2��{����G��E�O|�)�'=���@F-�����A
A�+qy�0	�����3
J�u��A����f�����
e�2�uU�	S��ak�����K�p""""""""""rQ�[�I`g����0?5������0����8��d����`i�F�v8i8��{�9������.r�{��2���;1��P��g����J?a���(1M�kFx����KY��;�:H�������z`�N@��xJ�;2��G�f�K�V��y#M0�����M����t������PI����Wu1a����L`kC\\E��PP������>�q�~�V}HZV��u����l;���O�7������L^a��c:�������i?�T�DDDDDDDDDD��5�������% �	�"����e�z?"#������](���N1��W��#��X����`��$��	C�_G��n�(��O����5n �] �ME�KM7?vQE�I����NQ���-�S���Y��M���pt�"�E.��I���������&O �u���������R�{�6����J��+f��Gh?f,K��G�
�����i�4���x�qk�� ���?f�s\�����%���3�+�,5�^Z�\��%�?��X"""""""""""����z�aS�g��\����aH=��w/!!!
�O�Y;���%$g�B|p��ms�b�/"j�r&t����U��GJ������y�Y.m���R������������('�G9�=���QN|�r�{��������\9QG�H��&�e>�?.�xZ�]�*��G����NDDDDDDDDDDD�
q"ue�!q�d�W�#e���^�����M��2����{MDDDDDDDDDDD.-~
����h���9�j���&������/�'��������������4u������������������6x:�s�����ADDDDDDDDDDDD�V��{Q�6l����1
����{���a�\�{�=���QN.]���QN|�r�{��������('�G9�=���QN|���-M)""""""""""""r�'""""""""""""r�'""""""""""""r�'""""""""""""r��u��m�xy�J
�&��[�7�1��t5��^��/�E�Ws��� IDAT&��{������R1����������������u�U���+�:f4��2�f7�,����X��
�<K��y��u�����\.*q��EB�0��W`�:�����p�{��S��'�#v8��;�U�����a�q��/�������:��s��J����S\Q��TR���Y��X�u=�+""""""""""ra��g
����3�wl�6Bn
�������g�wv:�;���*B��8T���K�h!B%��I��?���$2�����R�C�:�A��>w�yxlq'�K�3S�mr�k��;�O(�A��B���E�|;sR��q���O`���i�bF��)""""""""""���G�@6�|���FH��	��74.�__��b'��p�p�����fN[�c�2��=Lth��;����^���n�@���h�8�t����""c:g-�*07��Gx,#F�����$�����<�1�#�� ��h2��XD�$o�_�m������ ��HBl;�ZiO����T�[Hx�����-����K?$�S=��^w~#]%ucM�W-q�2�c�o'c�o���z�MD�
g��}5�����ytA�+�&��,�'v�U�'{l,�&�S���c5��d�����@���]T����r�gI�)��l�N���a�Ih}�B������������E���8�>g��_����v=�Z�o��)�[2O<3��_Yi~U#l��4�x��!��f�����s�v� q��8���I����9��`+�/vg��QL��~�n&���[����F��D�.������[���v3��fT/�X����=���;N��kH��!�?���
ve��������`���GT�'d|Zv��f)�������9��}�����y*j�����9nh���L�j��u_R����i�q-�����}>���
�t#���}�/zs�������W�`�p�7����'x���V�0h�h��F�8o9�i�
]F��t*q���c?H��?�n<L��v�NDDDDDDDDDD.vu/�����Y���� �%�F�+��������2�h�5��-�;�D����`��k+�$?�}�Q����Xe�LB$�o�U�!f���A�tX�|;�+w�<���&����aC���]��}�����RQ����� ��V��F��x;c��%�]M���
��
������S����y,N���}�������Z����O`Wc|�.i2(pW`t��y#�����������-VO :4�]��b��I�u����(Z:������bW�q�N����������y>z��e�$M�5��������������%�n�����l^�F�M#��}����%��1����9T���k
��������e�t`���k�����]������3�_�YZF��^� �Vs��P��K��[�Z,X,�a���������;{��4�/sW��`�����	j���]���  ���U�����3�Gb3�`� e_��=8>��{N";��8w�LB����}�����<�||������v��aE��$�}�"���������~��Io�>���Z�RDDDDDDDDDD.
u+��ma�{�l��xzTO$%���������������$&M�]�/�+5������A�����rb��,\������l�#�^�=���*e�0h|�	'�N�#���_��z��s�J��k�?����I��:���`vo���O���g�U&�y$6��2<~�������Uc� e��~�b�@H<���j��k�U����'\%�m)�]��fm�+R�g�|e:I�����;�9��-k�X���G�W�������I�H������PDDDDDDDDDD������qo�C���OMe~j*�&������>���2�.`��8Z��G����2b����������Y�Ye�Z=�}������NT�n�?YJ�����Iz��q�c�6���h�<����O��/�<z/�[���]S��l|�>���.�h��}��	��t�U���V`\�q���%?s	����C��w)kMdHx�q�����	�~���f�w�$(���hV�|�C����K��mz1�$�o)��U�$�u7����3��Y��v�b5�����������:ka���V�G}_}���Q$�)e���h�8�(i#&�Q���������J"&�9�FVZ��c�Rrf
��W�Lc���<����kp��#`�l��_s�192��qe���HT��D=4���h�6��Vb�����3���I=�>��$��o)�~�	}k:�<��sY�����E~���
�w!*2��;ne��	���Q���?�{Fo"yP_zt������=���Mj��
��f���T"�^���0\=������{��n03&�P0i$i���=V�M��U���Fb�����������?�k�EDDDDDDDDDD.9��{���ac.wv�i�0������������������^{�Q{Q��9���1#{&��'��=��s8%��%�������|��$�RN|�rr�Rn}�r�{��������('�G9�=���QN|�r�{.���#N���D>4��]���w��K�?'}�z�C%��"������������*��/�)�I��g�������:H��gY���!����������������_C �k�'�^�Z.�kF��Lrk�����sd"""""""""""r1QG��������������y`�(o����8W-�n�DDDDDDDDDDDDDje�z�U!n��\����aH=��w/!!!
��%A�'�������������('�G9�=���QN|�r�{��������\9���"""""""""""""��
q"""""""""""""��
q"""""""""""""��
q"""""""""""""��_]8��6�f~���^h���_��9����un:�|e�}4�?9���G�""""""""""""">�nq��x�����s�����V��e�q��G��P�ci0.����-���S�rY�l|�����
��� �},�O!c�wu��<�a�I=�q*)�ZJNq��CU�{a1�_���{��<�3��.$�������Mf�L������������)u+��Z1h�$�����=�����m��.6����?!�:bs}��oOS�9��f<�2��aFf!e��)X<���E$�B���K�����J���<����Y���iC	�YN}����
���2s��(���,\@��������YCG#""""""""""�{�e�8��)���6�0�3����6kua�����e8�B��%���s��{�.�����/��$����D���[�M�1�WG"�G�>�>�PPZ�=s��Awd����h���m�����4����I�t��s�������1����v���%�'e�R�d��BLs;��Wa��	������,�#	��hj�Ut<�>�SF�~$�����pW$g���bE'�tq0=IY��������������������z)�9z=���^gj�2�����gaA|H����
!w�(�� ��|\/�Z����8����S����o������\7����1��6�I��D2��������cL���{�{��:�E��WH�����$�~��ik����U��H>����2h�h��F�8o9�i�?$��9q=#0���2�C"�L�7���Ac����fD���=59�?T�23��i��������V���������������n����l��������-����}�Q�����S^Q]�;T�
��h�����kA��L����k�����VV"����n&��{������|7��m(�g��@�+�'����Y����?����x>�?�&m$����|
p���wq��������8�-�����'�����1���l��� ��V��F��x;c��%�]��� ����QV�9����T��D��w������dS	�8����M[���-�|��}���6Qz+��R!N��_3"�<���
l-��
�;$�s�8x(��P��/X��Qf��X�qs�+7eUV�������13FO$�������*�������V�,X,,Mo%y��v{N(�URV��lp���}��:��&��oOP��$/���r���a������JDDDDDDDDDDD|O�
qW�g����1��<�������L�G�-��b{�y{����{��������gL���p�]����M �o./��A���c�X3=h@�k�U���x�������q�����Jf>9��R/�8?#��7)9���=����]�j4#�n����{E�(����i���tg=�������������\,��G�?�.�3���d��i�FZ����u�����x�k������n89��I�0#^���b�����K)�kCL�G���V}HZ�VL�����m���;m��M|�
V,}���,|���	���W=���N���I�2��iY�������s�������0sT2K
���
�1�v�o��=_�O�p���h��pGsl5KW�<����������+,9i�K�4��'r~m��x�E��>��B@�/���fnV�Z7����X4����~#Aa���iR��hC��Y$|5���Wbm?W�?2c`��d��1/&���,����i��u&���DDF=�U�j�M��U���Fb���q�o>���z�I{��L|�j�G�O�;���[
��eB�������U�$�0��,�uLG�����I]�X,X��!o��
������}
������������O�x����
�ac.wv�i�0��������������I��X�t'�Z/>H������9i�q�]���tQ��.q���QN.]���QN|�r�{��������('�G9�=���QN|���u���TF��C���5�Q���s%ik!��>*������������\&T��{����� 3��BQ�i�K=��:�e6�1���������������H�Qo�H]�5#����v���d��P�������������PG��������������y`�(o�i���]-�n�DDDDDDDDDDDDDje�z�U!n��\����aH=��w/!!!
��%A�'�������������('�G9�=���QN|�r�{��������\9���"""""""""""""��
q"""""""""""""��
q"""""""""""""��
q"""""""""""""��_]8��6�f~���^h���_�����O�z��e�;�E�d�G�"""""""""""""��u������N�#�1k�_x�[%������!��~�w�
!�����\n<_#yp/����b1j���S���]��e-%������Z�kZu�LA���>�bd���p�?�M���9S�+��$D����JP�CL����`������������\xu+��Z1h�$�����=�����m�
Bz�bjb7B��z
U.+�O����������}��`�X���8x
y/�o'cN*9;�;�xu���>�D�M��c��H<���q6;��g�t��O��w)�j79�CY5z���m�`EDDDDDDDDDD@���^3��}`��`v�v%��_C������\Ed�����n����K&,�#?c,��^��z���H>���
1���<�1�#�� ���#�s���8�I�k���IDX+�M�����O����o8C����N7��},#m����8�����~�����#�6Z�E�g�r\fu��Y����iAT�G�:�^"zL����;s���YR�C-/~�0=IY����~����1=���7c�� �{o�l_����!Bi�R�s�z�7�����e�/z���U.k���7����H^�����qy�`k�38�4y4�m#I���W��Q4'����$gmb��u���L���KJ�5���p=Nz���_D��TF��O�!�
������O�Y5*���!���n���<�_bU�?���Q���H�t�?g��g��k&�[��=�-9�W�:�?ptI����9��g��CqZ9������`P�����B���1�fkb��_�EDDDDDDDDDDR�*����w���[qGl�>c���KK���q�2�+��/2b`'ZX��N��}'�5V����;pN\h�kA��!D~�.�5]qV{b�GTwo9:���e��(�����7��M����~�Xc/��qVgg������[��������cr\�3 �N�~���8���Q����m��q�8u��lz��'^�9��5i�pDDDDDDDDDDD.����>��l*��pq�iK�j�9W~���<+r6���{*\��`�e����o;�@fz(q�%g�-X-,���dl���KO�5FAv��[�@;��2<����p�d3l�(�����?��N��1���AE��|?4�~d/9����\�*qe�'n���&i��;e���������������n�9W�g���������_h���a��?�'���E�v������7���'�#�f9��r�3�?&{}9�}cq�|g��_0a�����,�
h�
�� G�����!a'��0�()�����R4
�nX(L��h��y��r�����b6lv�T�)��#������s�K@%�����3�N|ku���������������������8��<~�q��������mt���o'm�`�_���=��8s?9��R���aV�*1�[�����p�=�����IYVI����_��$�����l$}��{=K�E�����o��1��h�������0����o!�>���|�u�Mo���)�����n'o���w���������KH\��"�����������\���4��yb�L��i��f@�@,��d�+��Yij��7VAj����'��WFJ��DE�L�C�)	�>�Qg
���F��HD�r�c�wV��?��HJ�?@Ld}f�7y����w�4)	{�������������^?���&����������`R��%@��!o��
���������|��M#!�*,5K�Z,�������DDDDDDDDDDD.Q�x_�\�w=���9��6$��E�1�b��J���/�.��	<���N(�UU����������ry�]Cj><�����9�������Y���5�*)x���5�������_��������|�������������������QG�H}1��dpgbF-�U�����^�g�(���(""""""""""r�QG�H}1n n�h�'��O�g�����f�c1:6��T�����a$��y��~-�_�O���9�v�3c������DDDDDDDDDDD����)EDDDDDDDDDDDD��Gy�
��jy]pC� """"""""""""R+�����
q6�rg���C����{			i�0D.	�=����('�.���('�G9�=���QN|�r�{��������('��r����9T�9T�9T�9��:����y5���B���xp0��^M��U��h%n�-����n��>b�yu��+������G�c����l�JV/[���K�}}%_��f��T�������p��z�Z.����"�KA�+�XDt�c�Y����S�jt�����e$�.���TR0����N��=nts�b�������c�W2"��L\���Q�2����h��8/o}*��9��M����������9��Z��x�S���3G��b!���1�������,�ndh����>y6����6��=&�����4�����\N�G����z�����0(�����|�1�YI��A��w�	]DDDDDDDDDD.u+��Z1h�$�����=�����m����~O?���m����)�����yL*q-M"&�y<]&�Q�5eE��������YG&���QP�����������X=��)Yx���;gn'}���~��=�?�e������3&NxWm�#yo�j��6���������A���y��CNf.�v���(Y IDAT:���#�'�����F����x4���$.���O_e�����n�g�����Q��;�E��[Z]L57�FJ��������w��Z���^3��}`��`v�v%�`���kn�6B��N���>'�������e�O{�����w�����.�1���S�l-������������/�y��N��H��
p�WF��E��&�E�0~1E/���G���*K6}}��O{/x6���.aXYi��?�VwfU$o���\s.����'u��W8�����}������'��+����]iAD�8FLILx�v���/�m4e�`���>o���b'&����K��3 ��q���&�����?gj���d;U�y���
}���o���W�����>j2I�o�z�? wV?�_���g�`��������I��AOL >T�f����������H���uv�z�7�����e�/z���e����/�qh�w;}����<[��Sz3	�o�~�9{�_�8�NF=v����>���"�qEuw��T\=����;���&�����
�����2V��zr!��{��H~l:e����K+��1�i�
���q6I�> |�����Hd'c�T2j]�1�n&�H��\�����/����_�U�������a���"��������z�����G��������J�V�������s����������I8g�A��n�6$�y��!7c���x�Mg��P������������{�� �i�b
 ��x2�}pl��PeR��y2&�����F�<iy������[!�b?�s7����u"���m�g�����xk�<>n9�q	����3'�#����9��{�����~��Ko�mgY�3��WX��c8v?�����E���7&-�{����o]}����N����O�yb�������!��$
���� r�<��V���	���!��f�o�=�Ad�������=v[b���^R�~Qa�P�.�,�N���y_"���_�<�>��k��Fvb�a�.%���|Fv�^��_�(~��H��oA�X���}���`�8&n����Ckr�G��D����5�kH��>�c'z�q��rn�v��!�X���^%�j)IcP�(�(���n)���c
��T��zI�A�H{a-���Iz�����h�8�����>��l*��pq�iK��e��4
n���h�����CY�Y,\xBA( �Y��O%�����j
q�M�
+&&&`�Y��PV����&�Z�
$.�dn����K������#�R������'lN{oe����N�������1�7��\��#��w�Y~VN��U�Oy#�G�]��-����{���+V�w�JVU�����'_z��|?���dP���c��f�<�M����)����k?��HN�'����.[�f�n��>OO`�]7��p/IO'���T�'��d��=����&��h��	zb��w��u&&4g�H�m�q�T`97u+�]����g�������O��30�!f!��+d�������x")�'�.g�9��%�7{�D�H��'��������G�;� TQR���i�.v�PR��s����h%�n (��2��������,V���d���o|��	�k�l<����,_{-Tx(���Su���J+(��D���H��_�{ly�������a�n;L���#�����9Sm������P���������e��q�!���p�������ic��3�W�S0��Y�4r0`Q>y��N@�?S�(�p��T��%��_0f��N���9d;���*O�������������������q�8�<���V���k�MIl�����;d.\���T���2k�@Z��2�"�]1�V
��e�����,��2q������I������4&�������1{��.'�pS_\C@���^�������~W���{
��~��u_`�v ��56;�@%�R4mV���1j�7��{��C�Vo����9�>G��o?���`�Gx���y})�n���Z��@TxS
�^MQ������Uy�J\c�� ����X����Q'���0��d���FOc��v'�W�{�F
vw��O���W\����nV�"z�'�}�{�[t�O\�-����|;+d���N�������Z���c�����8���<&�n��mq��W""""""""""RGu,���/���������J"&�9�FVZ��c�Rrf
���,������Ih������oc��S�V�c�@t�@\�����t�M��}�,x�q?'&2���_0���c�r���>�:� X������`,���`��jP6�c_ ��Pb�=�s���t�&&n�-�����������[g������'��+���HD��)��Id���w�����7`��W���i�Iz6�N����{����5�������P�������_������1�O�����$��a	��4d���������I��A#'\��@�u/���@��}I\�e�??���������������X�^�E�^������9����z�w�^BBB4��	��/!9��#��1w.&��"�,gB�zXr����H���0q�+�;T��T���I�������������('�G9�=���QN|�r�{��������\9������wLB�|R���]Z�]�*��G��������`� �z�#������:3�����DDDDDDDDDDD��Q!N�GF�O&|�8R��;�e���L�t+)S�����k(��|�w$��������������q�����������\���1��������k�g�^�P]�N��wHl�8DDDDDDDDDDD.C��9,�m�6t���u�
�������������H�,^���*�m�����c:�g{��%$$����$���{����\��[�������('�G9�=���QN|�r�{�������!'Z�RDDDDDDDDDDDD�<P!NDDDDDDDDDDDD�<P!NDDDDDDDDDDDD�<P!NDDDDDDDDDDDD�<���������s��[�����k{�i��������������\��W��w��9!�<�����n��^����}����S�r����v	]��^��� �KC_��U����BT�+�X,G��-#0v�^���)?'��t�L�q��g��e��o��N����+�c����6�������kO�;������F~�y6����6�������m%�����W`�6��ST���U��O��@,A����������{���K��Mx�N���OH���9M��u�s�����CD]������qd�����s�{EDDDDDDDDD��W�B���&M��
����������������)h�T�Z�DL��x�L"��k���!%>�������p�X�����r�^/�o����
���$L��S���)���c��M���c�V�Z�~M�7�4Xl
��	��_$����c���:�I�T�GZ�>ve����$��&`n{���%h���*q�>����!���|��Q)u|��/K��� ��#IY�����:H���H�����}�����S1&�����e���sJv��1�����7��gxN�������������%�^��s��B�>0ac0	;c����"g�����V����i�=����?��e0��5p�"�����`���1���!un\�&"�Q��KL��	hI�o�:�1�7���
�tg���bh��X�  ,��I�q�^<�@��X�n�.��;3 �f�.�y��;�%Y�:26������3:��,&kn'����nA��N�E;��s�v���3�Tu������������Z������Ac��k���G�0�n�Y�x*(�zW�����]8��>6���BV��7��e���.��N 2�Ax��2�r��p������Y��K|�s�%�������`��U�7�<���7������	��m2v~W�s�w�z�����������\�����o.{��]�H_��C�9��5���LB����p���$��q~�������#�`+�C��1i*E=_$���=�9���(�x�����_���E��<@����=��u��5��G��>%�����/���,)�[���Fb���$+�zl���V��'.2�\^�hC�wu���$���z���z��!q���
������<��3um(�c��iS�?E�j3�l7%�-��u�c����t|OQ�^�����y(N����f8�A���Qv���������G��[�P���{]�����94[���K��������w�r����&"""""""""">�n����l��������-����}���k����%������A����D������]zn���:�-;�)���)gpb;���3pv�^�����^��������3���S7���p���OL#����MJ�����i;��8�����kH��T$7#��'�q����Or������~,�y��w��f�<{�^����M��8:t&2��O��������>v���������%d�����b�\���������y*0��~w�6���W�-��� �6��JN,�}����86_��Qu�W_QR��0���N�q�����o����9���^��R��V�B��b�����M%���"4m��������)F���PV~%�
R��R�}*i����WS�;lb�������g����������E�S�3��P�J:$�CZE�����VK)K1[��M��G���]����T�2p����X�ae���.h���Wr�O�$���AdF�I����G���=�����^�{��*�4��S
�O��
���pj{�����@kz���Vfo����n"e���7<|,��sv�>$�7���g��~L��L��T�����w��c=���O��2��70��i���]���>J��?��G��7P�������K���Q��{�FW�1����j%�T��JPZs��jU��P����3����1�����
+�q�6m	Vt������Uq���C[��\m��]�z��B!�B!�B��k^"��H��d�+������Z��2�Nnj�u��]JP\>��bUv���O�/���^���:���z	�JG!�>��fI@���bJ�ug;����h������=�[��2g'q���R��\�3��o�|���_�S�m8V�L��s<,�-�C~Op�j�������H�q���x�"s�s�Y�3���=	�����T@��n�C��D���={�;�J��a��sw���E���I0�a=1	5��Srf������@p�ntE�O!���C�J���h�To��3�(>�:��{���n�;u��3%{�s:�������s���P�t���v�]�B!�B!�B������V�bg�;��~�
��<�=T����r��G��x'�b�~j�J���$��%�`+��zF\k�c�`��[�������{
�_���0�A�9T���6�$����d�d�>���P]N��g�0����[�����)oQ��^�U�~7��{���,��%�|��*
�Mf^��H�\���p��N�������n���gf��p�nD��_���i,&}x�M���fi��+J�~(��`���o���8�-o��"���.t�
'��/2�Pu�{dlmE�C�0�Z�9Yk?�����I�7��zM�qM��/1'
#�����p�_I^�I�2����D=Jr�v|����w�B!�B!�B\����bi�m�:�W�e�8����o�'l�J����{%��s��R�&�h�r�U$G�oc"z��F�`���Fo������&A�$�w�1q��d�s������m�����b07eq%�H[�O��S�aO�F������_�����,
7?Gt��������b/�O<@���:�G�t&q��{f`m���s`�k��y��p�W���no&a��y�����nb����+�ITp;��o'��wXX����U�MZ��2
�b���y�
����gp$��nr��4�u�C��
��/�-G���'<�&<G9>�+�B!�B!�����4���?���|n�}��!.�����S�K]
!.r<������\�$��Gb�$&�Gb�$&�Gb�$&�Gb�$&�Gb������8!�B!�B!�B!.I�	!�B!�B!�BqH"N!�B!�B!�B��@qB!�B!�B!�B\�O�}�]�J4U��B.u�B!�B!�B!��I�i��*���|n�}��!.�����S�K]
!.r<������\�$��Gb�$&�Gb�$&�Gb�$&�Gb�$&�Gb�������B!�B!�B!�B\��B!�B!�B!��"�D�B!�B!�B!��$��B!�B!�B!��������z��*��]W�=8�A��9����<�����_�?TinqB!�B!�B!�B�*4oF\�����������o<���Mk�����}�����'?�[7���
T�s�+$���o�No""&�Q/n��B@�>���-��t���;ZI����2
��p�]��K������}�f;�w���Z�;_�_����i_,�%5\����8O�}��k��;���2��|6�+�+��+���,D=���Y{�g���5�f��
&������^JD���Z���L��3m��^C���5} y���
o��g�SN�,~�mZ�kc���UWhg�/�B!�B!�����D\`��O��.
�������};~����6�C����D�h�*JV�#:�/�c��U����������2��
8O%?B�2��M���w����MSH��w��O�(=���}������rL�o'c��:/�w����`����EZ�v��K@9�����������q����!���[����f��Y�z��#
?�{������?�g����r��<�"�]�o����a�=��%;P��B!�B!�B�W.�3���3<��n!9�����}�`Sy������.D1�J����s�c����9c5b���'�9[����Zh(����1L{'��-�=�d��D�F�62����1v����[,;�hk��cI]���3����g��:�1�DF�����l� ��D�)|�CO��r
�6�F�07)�R8��:�u:a)kpV�3;�0s�f~J���iJH�1
���^<����a>�q�]0��J��	X�y���?�.\���og��d�!&,�`����{��3	�>?[q���q~N�V��I������}�=�k}�n�'�B!�B!�W���3��,o�y��w��X�!N��y?��[���"I8�t�]����H���1�{���R�n��}�������E��hG������/�E��v�,Io ���vR�$��%��m�~$��k��eVTk���1�M���-��������.�Tc��O<35
����C{�p�m����gg� ���Q�����p'<O��=�������]�q*7�u�p��}Gq����](f��>��9u�\u�$������w9�;)��@D���:�b,�CQ�$��B!�B!��J��;��G���g�F�k:qkO���ov��6w=/�D��cX����6�I2���D��n7j��`C��fT~@��/0��x���V�;�!�w0���;sHO���P�=-*�8�q�
{�'���3Q���r:�.O�t����u����-k�7�CB��z;�-Y#o�;�M��
{P�?�4�YO.E��i����
[���$]��f��"�Ycza�;�G��Rk�J�8�~��enhM���TP�w���l@����������]�((��WQP��q�+��.B!�B!�B!~����;Q����d�p�?�,.�x����I���?`���9{	#z����^f�
W���D�)A&��������H��NNm�Q;��g��I��P�JV�����p�N	4�?�^@k4�~d�O~���X��{�,�������fQP����]�&������IX���o���Udy|�����S�j�� IDAT!'r:��u��B��XJ�R���a��@U���Pk�����$E�5���V��q��rP�����|}�j�y����W�.[Q�0��`!�B!�B!��"5/wM$IF���?��C���G�HJD'��t�c�����������{
�_x����B�2���tr��Q���c�Y>�`2����z�H����h����K� 6���������:F��.�_��(\6�Y%��pN2�_M���-������������S���;��c�����)����3�����`7���B�O��Z�dW	t�`���k�������N�B1s��#�������������B!�B!�B�_^3�
S��,yg=�o�A��'������c���_�u!|	������pJ<�V�m��Z�d�\���q��F%�Z;;�`�����,S��^���r1�Lt�<3-�V���8w!����C�:���?]@��J��:
{�g���e��"��f�]2��>���Z��*�|{��8��'�I��~���$��$T����MI��$�h��6�d����.@������q��j��d���U����n�_N�{H�7��zM?sM��/1'
#����'�B!�B!�������O��6y�+���a������6d%�������y[#(]�X�v9��*�#���1=�]�W�nv|��sq��QJ0��o;�:Ub�K���.�������K�����*�C���<y�k�K0%�g��P2�v�h�Kz�l|�	�s
71��U���$*�Q����;,��<���*�&-d[�v���w9m��X��^��lOp�38��Y79�W�<�B!�B!�B�K�i�v�������s[��K]
q�>|�N�:]�jqY����HL�����%��?�#1�?�#1�?�#1�?�#1�?�s%�Df�	!�B!�B!�BqH"N!�B!�B!�B��@qB!�B!�B!�B\��B!�B!�B!��"�}��3�RW��:^r�� �B!�B!�B!�O:M�~U�����s[��K]
q�>|�N�:]�jqY����HL�����%��?�#1�?�#1�?�#1�?�#1�?�s%�D��B!�B!�B!��"�D�B!�B!�B!��$��B!�B!�B!��$'�B!�B!�B!�E��
/x���?�P�������
?I�_&��7-0�Zb�7��	�hu*-�B!�B!�B!��k�������_���xe��x�o��l��SU��{�8�%��d��xN�p�)�rI
����j�)[l$NX��2���]}��!��Z�d����{���I������[��mSb�
%��@�u��f��M!k��5�/�p��5�v"��F�7���oQx������x�C���n�i[g.��J�6��H^]�y��5��#*�jtzQ	3�9x�-��m���g	����C���[�e�l~���p�-u��6R���]]������0c��NXv�C!�B!�B!����D\`��O��.
�������};��Nh��Jw��)�H��$��M��*����Q�
S��������V������3���dm9�)H��z������`W�7z����5L����i2�,����u3��r��$?�g��M�����d���Q���������e���4
Ms�14('o�X&n�����q��d%��?.�X�pn�I����Ly�Gv�>He��4��<���kH=g��� N_
�<��-�A�^�~��(6�c��_"�2��B!�B!�B����<#��;��`������	�w���i<0(�&�����w!�W*�-�>�'��w��tr���
R��EDd�Quf1����j�$�A��#�=�>"����B�(^;���o$�A����W7�J���l��O�%�y&��������D��j\���?��)�0����?����F\|?�!FC,�����K����)����#���T|���o��?���L��n�j�������Q��$%���}7)s����qR���>�iCo����'�$!p[�}����Sl����XC�X��DZlr��'��<��'$b11t����=�T�'�B!�B!���\�D���gy{�����E��q�l����I���^�sw|������Rnh�������]��F{�U�H{l.���S����M��e)/m�]�5�'<K���)�UD������H�	
��y)�wb��
��)��9�������J�{�~I�����z���_b������lOC�A$F:�?>�Ek7�������B�����yk3���]3Z���S��y2�������[���
�{W���VNZE���xh@�v�p50/2��Q�	�Qw��&���`0���tP�{R6SP�R�a	����|o,���B!�B!�B!D#4/Wy���;qVj�����$���8|��-������������U��E_OP\V�o�y�����-����������=�����Ob'�NR���g1�n'��zn������p-u@9>�5��^�`�
'�
;�N���=IL���w6Q�j��s�*��a���4a?*���8����D�^A�0u�����^�Nrl�m��7�Er��<�L�������H�?]J��V�����z���7��H���9\,}������)n�3��A�ZA^����K�K��+��]����V���;�.g�����q���C�X����-@�Vqn~���_��(?su�*_O��g���cz�M
!�B!�B!�M��D��R�f,'s����	gq1��t���.^{�i^�^�O?��s�Wo��NrG[4E�g��)�{�d5��G^��B���/�
k�NS��;9�rPI�Z�*�TW�,s��$Y���e.���S*X���r�]�v:(�������cY�z	D]������hQ�S����$�x���Ge%�-�`.�G���(���f��}���oc;���g��r'�&O$�W;�-��1Ln���6�5�'�����F��
:�����Q�)�Y�����������c7g���h8���0o��������J��*��Gd@	��E��0�R��{�<G/�Y�T!�B!�B!�h��%���$��H���x�1���I)����;����O!���xa��$�D'��1�G\J[,�2q�C�&k��M��Jw�gx�n7�1��hDO��I��E%@@kLATw������'Q��uf�)�������k����M����{Y��	DMC�����9$�$��;�#s��j-�����3o��(����J��w���������u:t��d���D��[q�~����z�FBe��y�t��~���8��fZlk\J7�B��t n�����dcoB��
��]��L��X����]�R�*����1�?a����K�����0�X�`��CP�e�����!�B!�B!�����g����8K�YO�[o�>�	��
��N1�����j�,��n�(��D3�G���>E��XLzL���WB��"T@=��k�b���{��X
���P�����fQ���Oh@[���b�b5;����6�`�=�n'���v��s���!�v]���d3�F�b����kf�����X�!�lX�t��x{!%����+b��E�v�Lb���L����2����2n@�6���q�{�s'�����(|1����l+�<�|���=���-3�gJ���5KS. �x�5��s�x��M5I��
���F�ZO9��KYX��a���R�5SF���3OL���o��f#"H~@ �B!�B!���43'�ET���}������'!���3o�$��%�������|�E��b��q��a���F���D
����T1��N������!"�Z�q�1�_@Z��gU���>�^�9.�xf�i�l�����G�
�
�N���I
�'����@�������/�7�<g�y�E�z�3��:��/S9d1O�������"�u��,�D����!��L����7�kJ��H�-M��S9Ek^d���A��A��L�4��[��N)"q�BR�_�����qXl��R�.��JcY�Z��D�B!�B!�B�&�i����r���|n�}��!.�����S��XB�/��;������^^R�_��<��������Kb�$&�Gb�$&�Gb�$&�Gb�$&�Gb�$&��J�����'����=~-%�}E�����D,I8!�B!�B!�B�.u��(���M�@������2�)>�yZ�B!�B!�B!~	���-C�!�[3�y��"B!�B!�B!��"���B!�B!�B!�B\�O�}�]�J4U��B.u�B!�B!�B!��I�i��*���|n�}��!.�����S�K]
!�B!�B�F�C�#1�?�#1�?�s%�D��B!�B!�B!��"�D�B!�B!�B!��$��B!�B!�B!��$'�B!�B!�B!�E��
/x���?�P��������~
��^�Y��M�������7�Q��Qg!�B!�B!�B!�^�f�U�����N���+��s}���f+��+(zw9�������l�TH������W�Kj��Nw����58�� �w�W�^��^��=ke�-��R7w��sa���j���
�^��4��s2�����RWD4[���}�",VNXFa�vA�Pw�J��,�����/N=D����T\������=����.�
��n��R��b'��Oq�_��f0��^o$"n,�>mb��u�G��S�@��A���o�>>����ng�������d����[Q���/�>v��cV��K]?RE����l�����`�Pfo���_A��"�'���������K�W���5�f����������5���q*�B!��I�q�a�>���(�����9N�����/;�U�-���]�Vt����m���Z\��IX�
����w }�f����s��%���_,�������u��O\��"�y�C���#�(6���m'�t1�S��I4���	>���q���p�����_��bI�]���)�|����^�������2n�+��VP|�E��Gp-}����y���*)6a��.E%�,��&}��^o��[9E[>�}w&����u��O�����1!DV�?��e.��>"b��8�$oB('�f��$���c��W�B!�����e������0u{�I}<����VT|�w^x�Y�_�_��n��+�s�+��;���p���R����]����AXx��H�������?	{����"�G��DT�X�o��A��N%�<��+����-/�2c
%�+I����OZ�p��E���e�BD�Hm���x����1��S7:��������t��U$�G�V�uu�2�G������&b�R�"�|-�����2����D�_G�mhM��z��%:2�KQ�&������G��� �0�l������31u�\C������ "���W?mx�@�'>����Fj�������)�(>u3�����S�%�~��R���^��I�����@��)�*��?�������No"j��w?k�������I��0�l7��L��d��8�l7����I5�Ku9���L���6z�l	�-��������"���N���6�H���F�����V���^2'=@�9]����'U�d?���7z������^n�5e������������v���kl�^���Kj�p���|��k��u'��\����T�?��C(��]P���P����=���fl����~#_$��������&ux<�bn&,���)�}��ku��[�������������t��o$,�N��
�Q��a"l#IOt��;ZI~�-�D���������Z�������=�����������D
��(['��[�'K���I���az��s�?_��K�������O����G���c���U�7q�<D����� *2�(�0fo��Z�5�������g�����1�����u�t�>�u�T
��a����yi4��%���]�j���L���:�fL�^}h���N�������>�i������L
r_�f�5>��D��"u�v��?M��|�>�O����@���sU�!�"�~�KTc�G%%Y�����S���4xmRE��)��t!�w4��L!�y��-s��_��s�Y����[?W�4v�����I�U)~�~�lO�����3{"Q�����]��zq|���2�����3� �����-�9���?����"I��J?�uu��^�a���	�._���{�|�sg1����� *���N�zm�s�_������=�����1�cJ������f�d��T��EX{#awO }�s$�o#�c0QCf��q���P�}��A53o�cI]����F_gz��{��$�G���Vy���}��/�9�a���i���g�9�k��O_�_���5m��_E��FF��_w#M��B!��WM�@���Z�������5�s�6g����������mxQ�����C?�lv9�n���V��C��}����]���4�����^7j�2�h��-����}F�v��K;��W�b����i�	���S�i���j��Ze����>4���e���9��j���><���i�VY��6n���uR�������Ks���;���9R�����]'5���6��A3��M+����U��������|��Z��D���V�}����@K����-���N-chO�:���6U��5�=��6�������}?h��_i�h�����i���C#4���5��J�`�@������4��S��T�f�_��8���,����	��?w�f�R��j���ZJ�.Z�������U�zCK���d���(���Y�����-�Z�����3FkS��y��d��C_�|������7h�Ih��
Q��g�i����8������)��{�65k��pk����L1�{bVK����=����|��Nh�c����5���8��fh��Xm^a�����z�j����|�����1����~8�������g���p�f�k��x����6�W�2�=�u�R+x�4S���/��\Gvj�GX5S������5u��M�-�4M�d��,]kbV�������ZJ�-an�v���
V��,��jw���2}��#g�f��{my�wZ��D�r�3�x�pj�F��l����'5��=���=5���~��$��������&������Uj�v`E�fP�k�r<���m�f7��a������������|�o���x�����Nm������4MS����4SHeh�v���4���61��s�=k���6.k�Vy�R+x)A3�����:��r'j�#����5��[�8�f�������}Z��S���
[��i����J����%�[gh������]���C�i�f����q�����c��6n���oF�����i�V� Q3��^[���3cq���6S���W�������=���5��/<��	��966~��h.��f��G��Wv�>��C����kJ���z=��sgE�Gn?s=R�w-���'�:�g��5[�{���j�u���|�E�M�B�<��k�J3~^�X��Vy�smj�N������ge�Z\W�6����}^���,�>�*��:�_�}]����W?o��UOS���|V�~��p��4��4����}n�����@�G�����'�5���=��T����Z��\�u�smj�������]����|��>b�����qs��Y<1�uo��zo��}�{C}!��f�M�����*\��C{jS���S4��y���6�W;����V��I�r�mXh+�t��p�������9<c���61�S���bm���k&S_O�4�:�k��9���o����v`E�f�=����|�A���:�q��s�i5����hn-�@��W��q@�x��Y����iM�����U\r�#1�?�#1�?�s%��y3�*��3'�J�V�t ���~���
��w���"0]c$"�'��?�S~�&�B����7�����~Ul����J�������{��RMI�q����m�/��c5�w� IDAT�PB�!m���[+(�5(G�'}Y��J���Y��	�u��'�,�	�D�e���3����(��)�wt�>�6�O��/;	���s�,��`k,��WA`7�z�b���=T���H3j��J�^r���<|,q�Wy�;z�#��S�����l��z�Pv�
�bKz{�2S�m����{8C(=�c\���w?lx�@���
C`5��+���oT:��k�����d}�0ll"�@�B����y����m���>�}������d�N�K���dz�39�a�����>XL�D���!��D��p��`����K���s�na������Y:,�3�a�XM���7t������A=p�����5�'7�����^�a����;���M���q�2��������'�cY[���/��?��;�f�	����lb\�M(��g[��Ob��r�?�)�%aF�����)��{�`}tm��Z��ic���O�@w&eM���j���/vk{����_��B1�!������)���SW��[�7�km�1a�=[�U@k,���������w�C\�`h��w����{��(�{Z0T:qxY6�5�a��������>$'���44[�G�+�u(���*�?K��B�
��!���4fR���W�����&��9��F�����G�|C�>
s�AX�mb���@9�����L\h����>���j�����?��Q��N���a�"i1�Bun�1
]DOy��}���d��g�:X�?��C���c���=�n ��q�uo�b�LT������������IB�g�0�<@b��(
�y���4_��v�q�qc���2v4����H�3��
��<r9���zc��S����P��q��d���pV���4����{�Z1`q=�5�Q�����4��������\��w,e���1Ox��~������
��`��d�&=���a1��y�<��������u(!7e����C	��5����������r���|��%��9�;q#Fb<La��I��^�d��t��f��=����s|��X^�s�ozs�b�P%�wXO��-�1sH��"e�C�*��YS���h��_W!�B����D��R�f,'s����	gq1��t��6���`_������~��t����3����]��Iu9��&{�W���oe���z�S��+Zb4��A�����f������3�}KI�^O�}$�6{��z%P0)��]ic�@9�����)fv� ���{O.9G�H�?sL	���%P�>@w���
��8����p�'�:���d�9@�w�U�e�(��>����U�����{%�S��5����()q�j`�@��p�D��l���)�l��8e�e��(����������E�� %��[���Y��,sC���%@�r���b@��z���?�@H<7e�l�����G m��8O�E�����P����W��+]�UPK?f��;	3�@��6�-JT��
�����y���5	�6�#m�7��vC�1���/z����j��e����=z�=�)�i)15�T,��Y�g��6E�����$�������Y����������]K���u�No0�������E���>�z�����^�ke#��V(A����c�O��
?uJ	4�:�[C��L�����U�`�Loj����/x��.������Nin��8D��G�6z���'����1��z��M'����u�B�
G�q��;I���m*�]������8���g���_
��]�ca#�gJZ����WG]��/�;�5�6m������1��d��	��&����:�8�6U��s����z%�u�T���A\g�0]U���y�����7���4f�jXS��&}��}�py[H����7P����S�����?a5�=|&Y�O-Y��Ai��x�5���h�x����Uv��Y�(��B���<�m����>�h_���J��_	����{��X+
��k���1�����:��������&]g����d����dn�7�����:��#P�q>o�9��V(����_;6��Hs'��{�Gp
n�	�B!�B�Z5/wM$IF���?��C���G�HJD��@ny�n���<5>�����r/���W�B���2��9;�[�5�������}~�yS1`<��}���z�(��w+Zc���V�Rt��uI�h��K��yV��v��o����pxZJ@��Z-��e�A������G��M8���:�����M�H�:Y>��zV0��]��z*������{��]'�l����=�oB;`�F����n�>[��e��$O]��6����y�u�{|)]�5{���Ob
2�����Cn/j�&jS(�w2n��|X|��(�3�q������G��_S�enhc��!2�����T>t���ix�!�53L��b�6�u��E�9{�X�y�K������rJvR�nB�����>J��G����m����?!�H{��v,&�gI�m(�l��Y/F����+���������cn>sS
�������j��$��H������}���`������yL�gO�jh���u��������<����e��:��-�1k��y�w�R��70����5�:&�
���v�����;�3���q�e���]���c�����������&m�>�B�S�|Df�?=3K
�������a���Cm����PQY'�����W��������*j���5����TW�>��.��kr�Qe�>�o������9v����o3������r���W����X��a��/q�{���������Fl��u���Kl�~�����5�y_�TQ�z2����e�/��6���w��5�����^�y~|���ej�u��x�JbB7��3������{��zj����y��A�Q���~�)�6+^n`�����B!�B�_R�q���8K�YO�[o�>�	��5�]���'<�+����'zM�k+�Y~��/ncO���*J6�A��c��
��������MWh����l#%U*�R�$���K)Q��%���1(:(����E
?P������;Oz��Y�>�0� =����S���(���e^��	hK��X�����}�`o3.|�F��p�W,&���G�{�R�&�Ja��2�b��55���y8���{��/��O�������!�f�gv�~/�"�����I��.�m�<�^	�IT�kQ
��r'	�.2�fy�U��L������PU���?����=K�U%o�H�&����p~��_d�},9�'���"{b1����die�7�d�y���N��o0��\}���0����w�d����Y�(*�^�+I��i?�3|����,��vv>!}S**%�3�4�g�&����K�g2m��Y+2��A��g�:x����r���5cH�Q
rpw�T�����Ut ��p�~������>L�����P�
�w�!k���>aun�z��z�����_;�~�c�'��&c�q���Mg[�
D�71�����3I�����]��<p	���G))���FDPP����j
�*�g������D\`7���)^[3~U�S��u��	{�'�k�����\�������K�������U�*��o��1z�����56�y���������z���=	4=��]�)��M6rv��^��?�*�n�S��3�C��	9�e�7s�=%8���> k���[�f]��3�������}�!�������]���,��u�+dd.&����%;��
������y'�/�,�n�f��������^���vx��o�0^Uy?n*�q��,�-s�����H�z�r���j�����9���s�)4��r����ku�:/6�:�G�N������}K���+���E���|��s�y�.'o�3dSI�-���e���(n��u�+�B!��#�L�	q���?�%���QD���V���#,������Mz����[�1�/�l���U���I
�A��x���L����'�%��U8��J����8}?���p-��Z�><�(��i�~���S��0�N�y;)����{(��a��_���� ����Vu+�1�g\x���,�s1k@/��75t	�p��������b��Q��f��<���=�������a�0�(k�g��`�^�eB/���/������q��"��4�=�{�.JgR�FJ�[�}3Q�����^
<+�5��nE�{��������O'czO��n@��D���H����3���k8��^C��$�}Q1���S���4l�>�&�sI������c���0�J���'�AD�h�

%�	��kI��G�������'� �E�m������%��g��I�����6,����j��]��������9���2��P#���L��������pgA�k���L�u��X���1Rz$�:��y�{e�&�����O���)/����0���\�<v��D
�Dy�y&��w����:Lwz��!��qL��l������.p7c��������U�"�E���9�mx�|�hR_ho��](���b�Ito�q#��8�q�],z"���uo�{?��r	����X[���=��xQs�%�����Z.�t	���mGK������^�@�s�Wik�l�S��-��m`�Vo}���s�����?��	�d%tD����>N~��d<�y��!v���H
G��L����-�G\��m�5�}F��R��v3�8R2U�c������c�)J�!Lj"=!�`���U:�GT�Z��a�k���2�1~�������������������
�N�y�0ScP���Q��0VSX-`���U�V!���T�M�6|���������MW4�9�Cbj`�:��@���\Vl.���3����T������K`�=�|���3��sou9��@�W��$x���:�5S������s�����;}t�$��FX��+�"q^��zhy�a����|����<�t��,(G�������H�����uo7x3������35'�/�S��+�.m�����������k�s\l�<S"^}�+�wb�����q�E�r|��x��1���������]1�������9Q��H]����7g^A!�BH{��k�s�n�/���a����]�p={��%����0���^�X%]��H����S`I�����owin�I��e����m����N��%����l�{ZW�L�U�K�;)
����q��V<���5���8�B7�
���EZ���.BZ�����K�75i^o"o�(7s�
�
r����J��b��PL��I�C1i(&���:�D~�*Q�,�a3`,�;��D�@h[�r�B����B~���a����9�����G!�B�����7����!�h�F������^h���!��
�8@!�W����xi'B|�z$�<p�KD!�Biz4%i�����B!�B~�;j�C1i(&�������?���N�	=��B!�B!�B!�����`���q���m|Q6!�B!�B!�B!M@��$������B!�B\��C�������?���b��PL��I�s'��MI!�B!�B!�B�M@�!�B!�B!�B�	�B!�B!�B!�B!7]�#�B!�B!�B!�&�n�.������poD>?������kq�R%��e\�[�������Z]hB!�B!�B!�B������(����|K��o����`�7����gf����c��}�	7�7]�#-U]���~��:�
6'^��`��sPX�����2D�@������x8a�1�9w@%L�6�Xbo�m{$Ajh6������6���/���+�M�[�<������r3�>E��n�N� M������4�u�L��y�����-�~���<������?��������i;h��F�.$k�0q���l�-nU_�u����%uy��*�N�9���^r�M)G[���nR_6�}�����i�(<������^�n���xv+R
�@�A����=�x�W]��I�!���_��B!�����q�����?���k.�p��y�?���~dt���~�~N��b����9���?
���4Ng��,����������d=�
�?�
�&��xn-�����Q]���%�:�}�\�n��qj�>�r`)����)����vI�����7����_K���"v�W(X2��.�[�%���r�*b�N��������B��y0��0��i�|d��Z����� m������B!�B��M�yZw�EL�s�u�;F�����\�����_B���/��#�Q	����T��&4�cf�h�r��y��f�L�;���C@��k�9O�U���D���&X�>�v��@S�'!{�b$�8MR]
��c��F�G��tL����-5�,�r^C�J/��1s\��+A�>q)��TuC���B,;�E��@@�a�QH\������s���
�w��)�1q�I��a��Q������9a.��:ON���7;�.�@�E��IK�_� [�0�	S^@�a4�����|w����)��6]����o#�0�~�����cX8�!&�B�A����m:��k�<��>��`
t������,D����T�<�eD��A��1s���+�z�$�>��=P��0s=L���I�.G���!Z����(��w���q�"a� ��{A>���w�����"n�L�$��.����g#�p.�c���U���t}4��3���t*9�:)������?9B||��~RF!�K_���K�����[<	q)�`mtg��z��������H��pl�Yg�xlb)���a�h��F� ������N~����/�3;,q��ED�����
a��"��W����jDO�s����#X4n���k6f&rO�T�#oJt�3�<f���QW%��F#@��q#��ZD����p|#��
p�G������^��9�G=
E/(#������W�A����d��/���$%�������~�#�l�u���M���y����� eG�9�i���5����kB����kd���@
4�QH��*��1�:�\	�i�#Wk5�h
��lwm�vG����>�*:}��o���u?6���M�H�3�Mj/-<v�<r���������rgF"`�llX�J��,��N;�!:e
��R���.Ou�j����}6��J��3X4�/"�=Z�<�-��J�j]��6�?�
��������o%Lf 2��1G�����]n��X!J���B��@V�|��<�b5{�(������9\Fb<jEn��k�`����8���1���C��j�R+���#54�&"n� ����	�p����v�3_+��dm6���~���# zI��l������!.�v�+�\�����!l�Xd�[��<���MLy��m��~���_.6��At?��.G���"�E'��H]���!�G��?@�]	�����h.�B��Q��&�-5#v�Dh�m\L8��7%��$��:���A��,���.��ck�'1�%�B!�k#��VV�i����Y*�?�|�-�1��}oo�����_���H�q���z���>dQ��,)��1��e�;L/�����g�*+�<>�A�<�6_e�����x��>�-?q���s�� ����1&���)L��Y��t��Dvj�H�2��
�\��SKnS�}���WN���u��?K�Z���K���������������%�ta���2[U��}�f
���C_g�O��X�����TQ���u���f�G��g��k�]����j�4ccLd�f�z�'�R�(k��,q�.f������L��k,����R���}�i�~����2�\��s�3c�Y>g�tu[�i�����������K��+���h#��������/~���z��5�6���,1D�b3v�b����������?9��&�c��Y��8����.���'V2�������q���d��d���0��4[84�E����c�������f�5�'�l�0m�6-��]��C��2U��Y��k��5�Y�UV�}r��!+�����"�*�Xq��q��kS�g�-��,�����`�"+X�{��V���.g��k�2���g�V� IDAT�zm�L��X~f�~�-��2�0W��s=�i�Lt��l�u�=���:��v+����Yg�ud/�jvV��T!b��Wu�FS
u��F�[%����3��O������a�~f�b��5��9����U1g��`+��f�G�0��OX��:c�s,��~L9�=V`�������y�mr���5	LU����f<��%�9��-?��*���uP/�q��������������jr�r��s�_4��s�eJ����Uf�������=��9��C�4y�����>6-D����j�Yf)���V3^�&;d���v�������|_�t�8�h�h5S�����r��K_:������C��T%�=o������l���7��m�L��;�-�w�g��W�u��T�\g��IL�����v(#����\��x�!,)����m���f(��^,��n/\��������`7�Ct,1��Yd0C�l����}��3���p��3���igx�{�����=���q�;vjESi������;�-<Q�(�R}�SY�r����J����1������`�rO0���6������C
���X!�w�����p���Y��slu���gq��tL;�3f�4����x����(��"���1�!��/�^�ub�p��}lZ���8����<^�x�;�|����;�����},)���x�6��L��k���
�s>��5K�x��g8bb7��:3.�o����v��Q;c��i8�����7����~���.}�NNb�O��
�D2��?4���������j�|�4[=�q�q�Y�3�!�9Wj�&����6]e���l���*g���c��j�z�'�rcn�z��
����b��PL��I�C1i(&�����b��q�R?tV;C���B�D���WwZV���������A��rt7L���P�?������T�#��~�G<w�f+
������H�x�T#_Ab�S���������(�}�����>����kWs��� vJ"A~P
|Ic���iX�]<����t?Pq��KP�~�� ���#���u��:�`;��7}kEG�F���C���"/���	��
��C0k�,��w2��#���0*�}������D@%���Q�T~P�G@�{���m`GXJ�F�g��FF��H��Jh���)�$��8�9&a���@������y���Q����?]��Y-���W��e-��~]��H�������o��b!���UB;4*���j�q\���:���
���Z�^��s[A�4����o���$���c0D����9Xj3(��8h�2�%�\����6�{��#l\
����PkU@��&����'�A��"��MA��=�wW&����N���_��������
(�B��GXD����F^�M�xn?r9����������p(��a��:���{|���/8�j,�v��j ���<���A���������a��.�$�T�����X��<I�A��/��O�A~�f8�>pw"kU.
�vp!��|�����V��]��H��e�!H�?�i�j�����d~�0:J���}�=�!~J�r/��q$N
���������G�U�������!Z����H���|8�(��9���H���~����
�C��c�
{C||�#W{w�~�K0H<^N����p���A�W�z�S{i��s��0k��'!������4^zQ�3Gj�[������L�8����}������Xj��|���W>C��J�v|���!�w����[���J�j���w[�e�������>����<2Je_�.�����o����
�yGD��f�9<�G���us�KM���-Gs�T���so9t�3@%w�C������,��N������[����T<�%���;�1��?�����;xW���F��a?��K���}����Wf�x�2��8��X����a�T�q0t>���q���"}��=t�� �"�����������F ���u!�P��_pJ��U�l�g<�y	!�B!w��]��*�����9f�/�V�	�;����_`-�t{�wl���;F%D���AQs����{p��[Gp�<5��:C!���Ja�������^^^���R�~�9O'&Devpr�s?��+��:�8|��,�������}������(@���W�^LT<��Db���od#o�S�nx
ZU���E����h�E�V;uq�z��|y��5������7Y�	��26z�Y%l�_�5���SN�3\%,e�G-y��hx�����f����������"n�z����8���/9��Y��0~_���:��y{U�|P�������b�>,��w����>��n��P��x��z��=�!�����Y�������`�^�1�Q���R8���a�(4�x�e��r����d5?�q���P
[�|��\'%��rX**��7x,m57�A�+��!D��?��rr-���v�/����l�Mdp����M�������W��V"A�������x�:mX��G9��'���o��{\�XJ�c^���X���	�w�`.ww,��&xx��(@��_{����<��k��N[�Q�e6T�d�����������#89E�������5������FLBB���xu0���w��D�9��y�������$�O���%������?	�w�����N#o�h�58.����o]�o���:Ws������&��.������Q�]�$1v:��;6T^kb!�5�h�x���� �������r�yc*��@��z�0�wR�G9l��Ml;��5{�&E���bE)l���kc�+x���f�3���S-J�������H��a^L0��G u�AXE�x���������WA��_�
:X��J���!av�r��4�AN�8�����*��&�y	!�B!w��]��/��F��?��^�;�w���Q�)�P����EG������8�3 ��'�T��~�wrA�\X�a����]�T>��O`�b`���S����[������ V�7N����uNx�6�*jO��e�I����/��`�Qf����d����&Vo=
K�N$���4a.�+�w���|������E,uN�7�|-���A�.��S9��
a�����a}��{��M�}��l�/�e���>�f5|7Z%
�%!uo7����1�O����[�>J�����.]\�G��!�ydO�3����c�����������Y�R�
�����Y?eO����^�d���1�v���]���C��bL�b���~r��o�B���6���������+T��a��z�c����cU��(���@9�9����S��<�7���6��Akcu��<�:��o���'�z������������p,8��
6�v��x����������o�Zp���>(%�xx_��L-h�Mh/-:vT��e	�.�CT��X������P��y[�u�*Y\�\"y��I�{�]a�4�#��m3���!.���co�C�9Oy��xX^7���.�2&��������8+����)X��7F�;k�
�yG�q���jb��q�n���)�Q+r{�N?n��&��7�\�����S���
�*^)���x�I�SN�
*j�!���f�m��S�7�q.��?���u�c*F��0���
����.�����������0���P�MK�o�x�c$������o\���i<�j���B!�rGh��8t�2����[����5�U�k�r���I1/VZG��/�q�.}�����'�\x����_`����/������_�������Zd��@�����"����Oyw�:�/��`<�3Pqy+���������[��a`=���������P��������I`@�l�`������J���<r&<���u/�����:�ATT L�r+]�o�9�Y$�:��k�(_)�������q
"D���A���]�y�������rn�'�x�`��F���:�wH����]��+6|j��Z���8�����uP`]�hr�Q<=��F���_���|�M}X����0��B�XYRv9�"�������JW�jf=���!�Yw�7�����A��@���@^��.��+�������:��`���9'�q���6���&����lE;���D����=����xX���v!k�W�����;w*�m9��S�r�L�' l�JG=yw�:T?_����]EAM?���a'lzh}���v���1��b�m�^��(*aZ?�v;/��;�x�?��
���
�d�Vm��R���C����#�g�'5��������m���?����������s{i����?Aj�	Q��#{�tp��c�����/+���P�Y�6&��Y�@'U�J���{�C�k�Rb���c�[����`	�|�Zs����6�H������KO�*��Q������'/��0�������W�Ab�t���������������g*k\d�s�:�0���~���.���x[\�s��m���]��r
��f�M��0,n|��f��&�r����{l��B��_eo;�����.���U;���z�`t���� �0y%��@��~(�2��GCk��[������:����<��n���8stA�#��X=�7��W5{�K!�B�c��B!74��*��~*5b�{!zh 8�<@�#Tz-,�!L�A�R���Bl�{�GLG���(x}04Z4���\���2@<��aJxyq�L���m�:��G ��u�b�cV�e�E�B@����CT��p�+!S>��.�11�7��a|'����wWDMya���S�! �u�����������9����A���LH��P"W\E��$h�2h_���'O#Q�
/�cH����G�������B���4�|-�}$����(�d���v�$��(g�iC����
�����x.�$��PF�#!�zqQ�C�6i���������������?��P����P=���#�G<�Bm�|5��Rg�8�
x��uh���u������V�E�Z�������}���h�2��	$L	�i�`hB�9�p�_���	�)�q��8:�C(|�q��3PX��t��p�S>n���5w�C��q�����Q6����tc��%P�xWN[�� q�$�`�??5��c�{�n�iEPT�������p/��iC�9������6:�:�i���vs�����0���&P��Q�g!���P����Cj�HD������R2����{��xw�a����yj=R�C�;�P����.=���H\��?Bth��5��8
�g�p�o%ywE��� �j5�^���l���vv�?t6�g��89����Z���H�x�cU#�"Qu��!@=mZD7�gM!��{�7������"-�!�!/a���NOC^�}��2�{,\;�
�N�~����2�4�F;r;�I�_���Kz��1$�C���zvP��D���(>#v�4�������R�u��R���p�k�3w�#���D���H�Hm��8�c��
��;��H�Q";�?4�($������Os��<�G�}�v��1�mZ���
�Y��cF�|���4|G\Sq}�r��OC��#:�3�O�����i�O-}��z�?�����>~=T�M��Fv��|�~;�OFa�A��I��y��<x�. �
�sy~�8����)�=lt�B��m���?
�����PxyA=�s�f/C��\�*>-��B!�B�^����e�&���!v��A�����g���qu)r'E!���0.v�.2@�6$�x~Kwc�M��z��e����m�����>!7�o���������`s�[M~��oN�[aoS@����m���[�V�5�i�.�=��DD�|Y��7���kp�c��-����~+�qSb �G��)���D���m����l���@��Y�W����ax�+$���x�v����f}"�������?���b��PL��I�s'���!R�pp"Cc���O*a��&���2��<�(\��0����R�8Q3�_����(O��p|#�-�u|<��B!�B!�Z� 2B~[��0+�;,zu0�D��@z��o]�~����\�U���C_C����n+n�J��NA��|�������S��T���-C��������z��-E���!�h�F������^p�������+0N��eg�}y�_j����#��-6c=�����Q�B!�B����)I�p',?%�B!�W��P�C1i(&�������?���b���	1�e>�B!�B!�B!��^���U������K�	!�B!�B!�B��MI��;a�)!�B!��B����I�C1i(&�������?���N�	=��B!�B!�B!����.�B!�B!�B!�r��8B!�B!�B!�Bn�G!�B!�B!�B�M���
\.���e��3����|~F����n�[�q��t���	1��}mQfB!�B!�B!�B������(����|K��o����`�(���=y�_�~f&fD��O?����6*6��U�"wB�������=����W�.$k�0q��7g�R�#H

B���[��_1��P�%r�|��Ka�����dJ�F� ���V����>Dj��Pt��Bm@������������m�+���1!�y��~b������Q��u��@�G����������^xuQ#r�\�����;��i�K�mX�&������0x
+\�n[�+aZ��d*$������DB0�����K�;�?d�b�Sr�INnDjl(�dwA������Uln�+a���= � ��~,�m;��~._����<���v�5����H���y7l�����J���B��05�]J�#,09���kk�y���n�>��&�������A����B!�����q�����?���k.�p�����Bq_T�.��kWQQ���@~�W�����"v�W(X2|u9
r� ������>��<���UX��W�5{��(\6��2�n9	��}H=����/���e��MH���50]����%�V��i�nk��K���P���e8�
�v���R��|��e0��hP�J��� q����o`9�O�������k�E��3�]�	cQ;��p�����������y�xr�����5���7� n�q������M,��rl���-f��e/�����9b>]���?�^��Mg��_ao�����\:c�?��LB���-8�Z\���S�I}�i�vH�H����]X�t3L��F�$/5�c.$�'���+{,�������B!�Bn�6yG�u�\�D?�Y��#a�@�e]����8�~*����������������'�#Rm@���M`���A^��:w��������������	�j����a�	�@�Ct�*�1�I�Ia��������{f)�
���.�q�������!z�F�+��	*� w�K�~�NJ���`���]�}�����u�! 4i�NB������ y�HD��G@��375.W��9�q�:����V<�
��:��_1���A�����A�z~�1H[������vC�~,2����3N�����U��83������%�c7���N�������E����9e�������'!6gPv��v�Q�A���7��z�$�>��=P��0s=L��.����]���"���3��#M���d�
��.
KA����`M?�������??�E�/x�A~�}��04J�q��6^���|�����H0A�I�},RW�P
���a��Q�����9W[�u^�Ka|��s��nT
rkV��F���5�?�<��!�V����+4���T�TB(|	���.�	�<�l�e_#s�`j�	�B��W��A��+q�mE���;{�_��r�f3b�r�?�J/g�3���\<���1�t��.jDNZ��2��D0��9��z���a����7�����/�� IDAT����6xrs��n8
��9H����H\�������C�������O8���,������X�<	���@������+����������HU7����
���H

D����6:u/h�'�����Z�aQ�7V@%��
V�5�O7��J�9�u.l�
�c[�f�~������e�^L�+z7���B?	�#!����-�@%�[�Ath?G�������8$�����f�����M,8���3�>�wP��P��!����FyD��=���t$
���
u���QPds��V���#@q��_NXc�uxj;
W��kG�T�7}<9c���@����y;�B���}����o0/�"G�K�#}�sUr`���Qo���u�$zL\v��
3��B���H���
��	�.~n��Yw�k�g��u��V�1��N,����g#�p.�c���U���f���'�abx �u6��V�F�I���%�8,��}��3�*;�E��@@�a�QH\����u�RM^L�4�zg��^��9���G��W��	'q��>���%���Xx_%�-���p7.�eQ����X
0N�,�]!Y]c� �}��������uK24��������i"4��i������U�w�l��p-�c�y�u7&B!�B~�X�,���M������R~�mz�u����Yeu%;���M}'����z��s0��6(-io��?_���+��W��o}�,U��K_�Y{2��o����6��1�����~�-��2�0;c�]��C4,~�	��?cI!��v�g�V%����3���,=�������1���>�V��2V%�C����g�[K�ek2S����\��(c��,i�RV`����e�����-V�f2S�g�O\e�kF3�����Jc���3�A�b�9E���d��c�9�o������8���1�DvjiS���
.������S��m.��������T�;��~���a�	�0Kcv��,1D�s���@3���h\/�^����C���G��e`��%�1{��,�e����!��&��������L5�v��u�.}���>���1_84�E����*+�>g��[�X��P��
��d���a�U�1��l����2v	;u�:�md���2�=V`���?cIA�X��o]�Y�O��5��T��YlPK�9�K_������?�C3L=��DV�qK������� #��B��6��:��FS
}�\i��K���f���,cY��(���m��`���l��,��eG����t��ycS���y'�6�+C��,�|�qhO�d��laaE3c ����g���l������q�z��)���N��A���f�'_c�G�g�����3�Sf�����L�+����L;������,{����j~vq#���aQcc���^�g��3�f�U��1K�L�z��6��N��c�'�t����,���Ms��S�5�+S}�m>�S�����iA<�����'�sl�x����C�bj?�V�<���?`��?����b{����f���$�G2&8r��ng����T���/�1�V���c?`��{��:���qrOd���d*��>Z�Ey�*��0��@6kW��xs�0uog]1����l���YT�f��`���Y�����#�g,)��_�*�5�9��3���#�7�=v	;d��,'���
�����3;�n;�����{8[n�*�����1��9�M��r�1&���qL��,[]�S����-.�����4�����C��������m��,S*�8�sq+K���20[c��������-3f/\��r����h�����]�z���q�m��J����.9�b��cf������A��v�5��,�k$]���G<��3s��S���q�c�������3��3����/�X�������%��1V%�=�������l�h��1�n[���������Gt����f(kBN��hLh��&�b���4�x_%�-��r;.JmC"�7�aM���[9���$�K�m2�`��\X�nS�]�h�}��~���b��PL��I�C1i(&���������������:���'B ��k\���?����#Jt��#�A���q��H�C���A��&���>��"����)�����c��?���>�|e��y��B7�C{�k����{C||,�{�xw�~�K0twt������Z��B�\�8,_�*�����j��4>*���+p��IA��N5QZ?2�Z�NJ�wWbA���������$T#G@�{�?m����}���*x�2�SB��Xf������Y3�(�=		����w�4��
�c�Y���
��;C���{���9�B���VX*��?��>��?%j���8'�h����:��W��e-��~]��H��-�u�tC"��{���(t*?��#�������6�#,�B�XT��aV�����7�?��|���b��,O_|����t/�N2����M_�Z�����z�P�����Z��)�����I����yu��d�4~]�"r���',@jx�G������m��^��_GBD/({A��X�YN���a<�#�������4R��*�&>��1����m��X����w��~�]:K�G�U�A^^��;����`��3(X2
�wg�'�G���^@��	���C�Um
���3(��D���Q��O$To@��U.��:�#�������{��I������!x�@3b<���wSr�~g�J�p�0v8�,�0�d���xn?rO�7%z?��|���C���hN�n������N�pCn����~(�_��C8��;"i�P�����J��<Q��m;a}|2#���W���r�~"L�� �"����n�����0o�8�������j���pl%�&���H��F��S(�<z�}�������\����PzLm������c�����1/���-
�TCGA}i6�����{!�b���<I�A��/��O�A~�f[mY_�
pA� i������#me|"4�@9	��`;y���%?{��}}-�k5&���r�{��/a4����A����#��w�P.�����D	��5*_��!�w����2��30�_����9���^���^�c�L5Q��p��������1��\Ss��!7��X"5�z�����|��?����{�XrA���y��h=�
F<���n��{R�E�b#:���FX�c��B������!�B!����3LU%8��9�,���j2�r�P��=;��"�����&\��=����H��-��a��|���G@�C�����x�+V�q������2;8��}7�
��_������W��V"A������^��2�%����������(� J�2|8��B����w1�#��(7'��X4o��� �9)��(W
��IH���F���.�����99_g�>����j�:����A�K�q����������	�w�`�?��5[�|�5��?�q3�;?����-�7Y����)u�P]
�������#L��=�D������H��a^L0��G u�AX��������O���5hU7�'/����)�B��Y�8��.��b�����W�b;�=k�A\��~������Q����
�[[W���r��P�
�����+�f����@,��E�B��.xyy!`�G0�����x^��}��"q�Sv�o��y����?��7f!��^P�<��7�������wg�M���0?:�..����>�y�������<�a���tL�R��e�����9}�i�S��J%s�C��
>���T?��/���p�'PN�����>����
V��0o|	����R�~�9��V!u�
	��Z�~)��:L��C����x4T�b%��*a�2Q�?���O��r��XZ�D��`(:x����U��iK��B��%�8�6������3|��W	K�ep�O!A+�������yo)��FA�@Gp�<u?'�6A���#,'�"��ng[������\=��S�����p�<dv�r��I}���U��7���d��5�������9^�;�o���}A�.G����vw���'0����
*����x��#89E������CNq���fhR.���
�aRz,q;�z������k�1.���<��M,�� v�#0���`��-���G��/��{R�@g�b���f�%?���S��
G\���f��B!��;S��-�����h����/���;bt�(��
���8�d*_N��=�������f��P>��z_�EA:)�{<i����B�Pb9l5���r�sH_��.��y4�9n"2�K����q���a>VS���
������	�����+���}��m1����h�E������*a��Y��!��n,Z��������[�?�'�z���
0�j�������>�z}	6����oP~	�6�\a�f�R��~���"{[�Y�H���
I���T���#`�?I�����&Vo=
K�N$���4a.�+����'b�|[�.��c�x�s�l���������H����\�Xr���{h��E�x��������A��*����y��Rm�Z<���F�<{,��C���r�O8%���!����|����UeG��l�#�����=����4 j���7���Ka\����P}�>2w��o[�n��u\���c�w�����;�*a=}�M�O\OWt��U:���p�o���vr�_�*���[��	���]���c���_4s�������R� �>����+����{��x|RC����o�x�c$�����$���p|%�~��������/�}��
30q���-������P�
i//�m�G��l������/��x���q�e;j&��9b9l��|�w�6��1����QGBD������UB�|�����v�^�����X9��h������b�s���C�$>�����������[�N�
��c�M��}$�B8�7���#j�7�3f��>��0^~W����c��,Os�������o��_=�5�yMC���mR���QP]���y�\��������f�=�}|�3���l�aD�������m�d>A!�B�#���aG(�_����[>�Y�_���s�|��x����jU�������\���?C�~dm;�x�3dm<eD��IE�����m���?�����1Y�������[	���������>���Y;NA���9���<�����h'����oD�	/�
p��YV]L�+����1Q�����'H�0!j�zd��n�t,��S��j���l�2��6d��u��0�����a-���a�C��s�t�'��y�o�t �@usO��(|
�N�a����Gju_��cm�����|��Zy?>?!g�S���Q��A�zm/(:)�u���Q�0�Y��G��Dj�2
���H������w^d����z�����Rm��Ul�q�L<���������N�	���S�X�Y���\��W�*��d�
Uh����A�����.�#����@�6�8Wd|��I�"q�Q�c���V$#k�GX~�3?�����u��!:�+���A~*�`��-4�*����H;�B��ld�� o�[�=w��UYo�k�r�
WQ��E\�*$c��Fl��7��UdO~���	H?����'���a���<��x�}���}?���}~��q��9q{i�
�!iWN����4AK���A�Fh-����������C�S�z�0�BcP�!�Q���tKX*���V!7�lU�M��Hm����[n�b�#&>a�	����X��&6c�3<bsI�<�A~��~��~��W�W������9�s���{sK]y��)O����W�{i�x�����7`
{yg�������SY��I�@9u5f��-]��j�c��'�X��l�5]Q(�����^�G��p}������a�2���m�(g�]W�l��qL���BU��0�a��]�i��5�3�{7"���0��'J���1T��q/!w��bN�`����������oQ�_,�K[)��}~���������n�X�6g�9�\&�������sA��8���Q'��m?��y���X���o�PF@�O	�������y�(��>�;��g'�1���X��e�F����
B-����j����*�mG��|���0O���m�"K\�H$j���Y���G!)B�0����������uK�w�.$���@!�	!�B!�9z~�u�x�
w�|��P��������r�����E`�S(	+�0�����)HW�	�w!D3��:������/#3���$ :j0���C�����eA	X�f���@)�#$��o #L|7�2l����d��|p���i1wIo�
��(Jj@j����P�5rg,�u���=�n����)!(���:R�uo��W>��c�V�����9�p-�s�#p������Rk�GR�#0����=�ES��?4Y���!�+�
mx
rO8���o�%���_��{�k���������B��s��2�c���d��|��?���
f'>����7� ut<��zD�����2�S��{!+��X;z�@���k�j���9X�������d�����������Q[�q���!>���.�����1�!Dc�����j:4�
q3^F���0i�B�W�
1�����/�G��(�g�6���qo�K~&�fdf�m��6�������#]��rO`������1}g/L{����"����|	�r3��B�U����P��(�2��^�Y����X����������b�h�]�NnF��g�Gb�����?��W����1���#��8��w��9���qH����^gBv}\2��r���j)R��]�[ �K�����;�Z�c}���z��n������;\"OH�����G�+G� �q�N�K�+b��3����������������CQ6u�:=����R7�6��n`��	[J`���F�M��K[�T����~��	J����������lG��A ,��N,�����%�7%��W���~������u\9c��1a������H]2q���S
C�����ZuS��n��a_8
�P
��Y7w�x!2(�����I��������.��$���`T!3f���(}�&=���y�n��:�t�<����tB�4zd���om�??Y	p�9
�����}���a�*�:H�%4	���#1RcT��G`�x
�r�`��:�M~�c���5��8�z��^kON��m1'�E�rC����5�%���%�UcR��=��6����y��ZU��cP?6�a���c���>�M��<����@�1���cWOB!�B�+�c����>+=��ot1H������O�]�_�e�3�^/��i�;}�l{�a��=�w�E�����������1�a��yc��O[�ri������#>���� ���'l�w	!�����PgF1�|(&������t>���b���1�3��B����S�9��N���v��*�OB!�B!�B�	��!L����~2�������F�
�9� ���y����n���8��c���E�=����Y	��#u���=��?4��!wf�_�d��<E:���O�,�$�B!��
=��t
7��SB!�Bq���|(&������t>���b��PL:��!&�hJB!�B!�B!�B�����~U+���]A7��B!�B!�B!�H�GS�N�fX~J!�B!���C������t>���b��PL:�I�s3��MI!�B!�B!�B�u@�!�B!�B!�B��B!�B!�B!�B!�]�#�B!�B!�B!�:�k�.�}�l���p{?D?=��5��������������odQfB!�B!�B!�B:�������G��5���/X��oxex-vn�[M������5�0m�	����Q�A�&7��j�o�
��Vh_.����m;�!^�\	m�d�h;� IDAT���}������0L�~����D-��G#�����Wu�P�6�?�l��,��5�D�����m�,� ��4
*�z���L�C����U�5ZQ����y�������!Qc�x�I�>���|�)��QP�}�x�G��c�D�k]�Z�>R,��A��y(�a@�����%um���}\����D�k\��Un��rD��b�����kuX���q[��]},�u��UW���C�}~l<:��^���(�t�r���6��s�p|&������[���qA���c�7��
��p�w�������V���c�V��5_c�����0.8����B!�B~=�w!N���s���p������n=o���8���
�n�
}4����l�Nz2�t>u�P8�iL�-�)�7�f�/Gz�N�g|�c�r��q w��w��W���|
��|X+������'����B���`Z�)��Oa��@�My�G[2�skEL��Q�����v�Z�0,:xyc�������m��`�?���C�����*���Nq�V�s/��;�1������h���M��J\j�A���(>��6/tGy�e����o�����oOh��k�T/�sG^��NyG�
:v*?Gq���p ;����B!��k�!g%mE�1&�)�.
Bj�P(n���W���^�3l�����\��{#7?��U�����4�j5�o��4��>�*���(+��@-�g":42�
��Y�=|��>_ ����LD�����!��C����U�@o0"~�&Xj�U4��������5!=5���G��
�g<�ZYw�q����G��GW�������������<�V�G����P���a9+Kl�/w�K�p���=m�[ ��A������|�Ka��2����*W��)>+I#� ��!#��������w �O�C����l��b��p(�]�5 u�fX��-��F�eW��#�����/�YD"���������m����uky�����9�>�/x�t#F��}�r�]����Q8�}�,d>c�@��������P�C� s�h��������6
��8{���O8���} ��aU�e�3�>���{s`T�:����64������u�P8���i�`������"�l}���}�����>�������	���Q'���I���'(\2IY�a��2!*T\59���6�hs����P�0�\+��'c��GZ��P���X��t��;��D-�������������c����_�R22�7��\���0�n�l���!$~i���� u�;(��$=9��8rxm�����e�zj?k��5��`��~7��<�x�x�T8�)O
�Zy��i�QX������-�F�������]�C"�5�b���r�����5h��s��0�b_{r��qs�����fq��'�V�xj�ZX�$#D7��5!�:q�n�S{��������B����v��}�9��C��>���X�r���5M��c��6�LG����m����(5�W}��i��e�h=e5����kN#��X��3����	����4��|�n�� =��f��ka�<S��N���	�w�&��y~j|����
���K�zd�I���f��<��V���P$�uD�S��X7�����}�����N����B��mT��c��g��J��'A:���[��v��bn���_,����I�S_x�X��j���/@��v���|^��s]*����\� sL*��h��(��B_�0��U�8�A�$���U���/�37z7R9������6d�D!D���D�����v�u|�����o��d)V<���
G%��pt2M��h����f<m���mm���B!���X��������)9���������~������}��lJ�[����{?�K>����������q����j�n�.f��7�q�"v����"�f��TC�f
O0'c�^4��`��0����L52U�����Y���f��T1S��#?2��n�`�O���K�]v�9���f��*���jf
P2���Y��'�����<�Ta����g���a�v�������9�6|~�.f��;�9�=�3-��9/~����f�b���9-������+;�lV��6�e�����bv���g���0�_/fz�]Vf�����1Sp�������c�`����X)����!YJ�W;��T�K���W���&�����^ge���yf����}�r;�],=�nf�W�*��YE����a�U�z�1���i��Y�3�1�	�R
g+�\��~��{��2c�mYL���a��f��y�<�-*�����R�7�q��������T�_������i�g��X��T��vX�0vfK����uG��1���bAL7s;�.�iF���]�*~n���"b��#�\u�L��2{�2fP��a�^�O[?a���b�)2���vL��~O���Z=���E�by�'3M��>�$�g�����,.g�X�#���Z�^Pym��r�p�]�KbN��ZY��IL<��8rI�5o_O���U���i�g�����
��,y���bkO\r��Sl�
3���9��6���������}�<��`�
�0�y+;�d,S�{�������OYF�@������+��g����.���^eebes��:�����8��A}���&�R���y�X��{V��O��R���-���L��|�}|�
c�1g�;,c�2Vf���ib�q�����*6�d������lZ���C����'����(Y�x����U���\C{\�.w�<+x._��t�/c�~��
�%�,_���L3�u����YE�?XzDO���e��I��Q�t�V�Kf<7�e��h/�a&�os�:��E1�,n�����lc;�Md�Z��9�#9�]v����X��}�z��4_J���y%A�G�e�1i0S?���,�Wllm�����-�����1�^;FhMfg6��:6�����l9�K���N{���K.�l[TR�W��^P�*|�������iL���M�����P8���`k�?�c�����?�c��)��3>�o�������z��c��w�a*~KYV����Mr���kw���sg��6���OYFD?��a�l�g��n����������1M}\������P_6������3����s��xI��������$.e,���l����0W�[���#�����O*�]��-��������ufR�"����y�F����a(&������t>���b��PL:��!&�[�<����d���^�>�����%���1s�?���,���
t�E��zHnnu�p�������q�D	G��b����l�'p��{d&�A���%���w�k�\3~����G\����w��B�,���
���!�w05~����R��S��C7u;�G�!}�]���4b ��O�ZW��?LqB�����;`�YQ}������ x?�~�	���z{�u���XL�J�N%4�2l���@!�;�>j�\�}����
/���n��s�|l�j$����sb����CP,��}V=l<2��:h�����hX�E�F���������a1��k"�UT�j�T�jgEB:�����3�A] ���K�wC���0���?�#����Z�J>D1�!=A+>&)�a�'���K3�}����lN8�����Bz�(?��
���C���|�Fh��j(RG��~�8��;���X����W����v�$����?�	�#��1��O���/_��F�na�##A�|��.�k�
�J��U8f���0�`���j��MC������a��C�����y��������L9�	��.�5N�b�����6Q��B�sI�B�����a>lm�E��
�3!wM�mNp��b���]�u��~`=Vl���nP'/���1���6�S�"uD_��
G��DZ����v��O�d��Y�K�<�+�E��t����42��d�\�v���]@7p������'����������|oW��������?�qs���1������a��
j�xL� T
N�����{�����Xhx��CT������9�LN�F!�G���[Qfk_���&��4�}\��6sH�B1��c�:�o�TPv����}��|!���s��B3b����g���,�M�)�?����V�����B���*%y�P�&GC�5��R������a��(|� ���A��v�+m_�� ��������|����>l4�{W�p�8�l���#u�]�5_�fn�����&�{���*�L�!X	���0�z�Qi�u�����&���Hr��j�����PW;��1/B!�BH�k������������?�f6�B��Pu��oL����
~v�����P�U7z�	�~���w�.e�%�:8)YY0�}���v����xB�<��>+�Q����\(����l��P�)�=,>6L&C���`i|��Oe���B�9���o� ^����=o���WA���8���N�5���m���O\�{\Q]5�7�(�A�|��������P^�I(]`w�N|���������������z��� ��R�M�����E���>�=�h�.�:p�n���M���!�h�Su?�=���H��f��#`�
��������`
w��S"�o�#�C����:���*�<ul�`��;�t�A&�A�}����S�/|
��~���z��"~V�#���`�Xao�<�m]����/��]|�������3VZ�9����m(�A���v�#�j}���6Q4��%�B��E?�c��p���>����bJ������^�C���a��"t���G�����4�eN��G55��=�I�,w�<��|R8%�|Cy8�G�qs���K?����E^y��T����G�����=H_�+b��p�(�uH��A|l�/9���<V����M������������t^q|k�a��_2&���?�`��a���5��=�����f�56�����*���<���@��A���|!�0N�����7	�Qw4|��X���j�k��fs����U?���;%��.1�c���XJv�?I��7���|^��.���p/,���a��������u���|����[�|��/l���92��2����_S{���m��M�9'����@��m���B!�r��B�o���t8N,��z�9��I7$��FE/���	��,FzF6>�������q�C��P���q6�!���U���"E�i�������������$N���7���Sd�c�0�P��3P{Y����p���},v���i�>o���/<��5_����s�zg��-����k�ZX�����C�?����0-�����@�����=8(UwNG��Z��tW��#��w���=�Q�PG�@�
�d)���S;��U5����=
U�m4?���A�����a���X��^�B���b���/�c��&�u�}Y�^�.u��*��5'��8����>n�����N��	��i�c���30}�]XP�b�Y
��M/66���j8[u���H����<��W��J7+<����+��3lIV�����/~=�K��n;�����(DF�|�T_�8����p��@��7����\nx.�����&�i>n�o�zY���]��o��Z�=�?��.������+4�s�:��;����h�
T���e��W��{#��p,*�iRVva'�����>���<�q�w�J���B�9��9��s��%@	�o������8��"�l�:��c���-��}����J���e���no(��K@j���M[P�� ��k��/��6���x�u�h�����
���qc7�
�a��jn�/��U�vd?����|r����.n��o|z�o�����Q;�Z�
����H!�B!�A�.��TQ���m����A��`
��T������a�,��C?E�O���_/�<
�����;�7�;pL�`����b#�� �Z����
MW���nh"@8�;N��U�d�?q����Y�i�-�������U_ �~X�'��"�8���Q�v!o���I��}��ja=�
���)����=�Zy�u�F1���y�?QRw/��mZ��"�V���QxR<y�8�	�Ot�&"����T��a������ @�n��o�1j��&*���>0�*�
��n/Vn:
�C�k��r�|���bX�J���[�Clq2��	��X�����}��S�#�h�*��0^.B��/�]�i��������:���mT�E��c ��u���Ph����b�<�7��r��P�}�	q��pr/
�U-��
js�������=8���.�p��nD�M/�)zA��
,G-��_�x���ru �����1�d�?�~�#������&��84����Z��J�q�j���z@�C`���;��=��7����a�����R\q�K(��/�5�4�7~{��^����&|-����'����hW�q�������}����"L����y��������vm]����C��*�����j���[]��1�0o���7v��V����6Z��A��d�:�n3�\��fb�����W���C��'_p�{�C`�:���X�.y��(�;���p	e[=�O��_���nk�?�����,(�q	���=�{�K����2.x$5v���D�����p���q����[������A�`��jzA��q�}����:���>�H�����?���ep�����r�A8.3�\[�"!�B!�t�v^�#�:�������uU!u�1��<
�L���a�3�����P��� igL_�q�]���E��$�YW�7vCf�t���kF�0��/0!�.�h�c�]�����8��N��y�0h#���6��`rnFf�Z�I��2��xs{��O��	���mRw��/����/'�)��$LD"���H=�Qq�^�i�5(���Yt�&���Q��j����������v��YobA�1����L���D��w�2��j[�@P�����C������P�V�a8|�Phk�����D��?��~F��^0���y�}0*��3Z�x�>�E�l��M������CQ6u�:=����R7�`7'���h�+Pn��N����}~�������F������A9�����1P��I)�n�����=�o��6�`�y
F�V��<W|U��>F��������/��\�K_��Wc~�`��{���`�4�7��S�i������7������Q�u�g��P$���#��!�+�
mx
r�7�X!@�M�u��Xh�gA��|p���i1w5+�?4c_Ff�!LOI@t�`����:+��4H�1
zsRG���G��KH-:�wL�oC����1`��A�~5��u��������|R7���B�zq=wcBd?��7��]��4�'�;��d��2l����d(�>mmW���x)�5�#)�uFd�������+��*�������{N�L��J/5�W�����9�p-�s�#p�*�V����0�:�rd_�?���]=��VU��}�[��H���6+�m�P���r�2L�zg�����u���fd/,�q�|$+�N������~�=Xj�w�C� w\����������zVu�:�)�?B�>�8O1���%���>�P�$��[���6wL	z�����1M��S�h��(�����������e.,��N,�����%�7%��W���~(c_h����?�����C��~V)��v����	!�B!���c���Vz5��b���w��O�>7��\w����O.D��-�����\�9L����A���t��6�^:y�Z�?����bK�/b�
����
�^L��k�G�t�����a�X��gC����S��/��rT-������M�a�d�Bu>���b��PL:�I�C1�|(&���ZG!�B�9��C�[�"��������!�!�F���0N�K
�!l~ IDAT�B��sP��y�7!�B!��8��|BnB���H��w��>b��q��;3�V�N�������w���TH���1�|�!�M��"{�4X.��5�"rW=�����A�9d����s����X�a���W<��	�� �0	�|��S����N:�r� nF��-C|�+��=c_���|xd)!�B!�������S���B!�B�;��P�C1�|(&������t>���b���1��@	!�B!�B!�B�d�K>�U����w���B!�B!�B!��=��t
7��SB!�Bq���|(&������t>���b��PL:��!&�hJB!�B!�B!�B��G!�B!�B!�B�u@�!�B!�B!�B��B!�B!�B!�B!�A�]��P��c���?����/?�g�~��9�U��+B!�B!�B!�B:���g���~������W~���Q=���`������t���M@8����Xy��W������K8�n\J�:������������-���}#�+�V����:p����0�n�l����H
�!�����8G7azb$�]�5`���a~�2�I�9�
���Ep�sS�����M:�:z��s��B�9���~�>��>�������g���Z���F��90w���NM�i]5���#D������:�����!Z�L�8:��$����_�4�7����:v�1I+���u3��#4n�v�;B��x-Q����=�+������8�!
J�G� :����/��"v��a!�B!�N�/�]���;����)��v]���
>����O�(,_��K�G9����[����]7���C����)dm�H�7(X��'~�'
�aXt�(��,��4�0�����.K�vL�UXF,��3`����1m��_� 7�>>�n����_/$��eKG����Mnn�i���f�W���#zwm��r�I�]�C��",^��_������/�f�cG��v��A�����G����e�K����/w���B!�B�K�/����_����a�������5�r��n��P\�����G9i
��/��V@&WA����;�� �S���uWA7+K�>�����W+ � :m>
O�N�	�P������V��~t
������Rg���mA���Pl��|���j
���!�DL_���j9��w0!*��r�D�A���>���^�	#��t�J�����U_`����1*��~u�N���dN���m���"L���?u���]s
�S�����a��dLX�����W��l}��}��q�,d?9����a+Bfd(��:"n��k,���E�W:Oa��QQv�����6�w�;�@�!�Y�H9!=������ �� ����`��bE��0y�� 5�����6d�D!D���D������Nn@R��w�����k���-�=���g�`��G����S�����w�K��e����0=-������C��a���0��"0t2��qx2G�6\m���b���^;z2&�~���	7!s�!��S8�	����2(CG s�!8GW ZcBf���6D`O5��!�/�#�0!�5��!��&w�s�h/u)�h�~�4L0�A���p��e>�	5��`��~7����x���w�W&�U�p���Y�|2�I�9N������q/�^����
s��,���rU�Dh��
'�M�Bf�#���@`�d������C�B�a�+G���&!�1������	��cO`^�[���c�m�4�5c�{�Y�t� ��y�5}��4"��Y(�]���%�H���s(��4���
F���K��!R9W8�.&D��ym�X�,�u�����6m����j��F��y(o�������V����PD�M@������6*����p�s�@��V1�M\���F����Y/`��oQ�3I3������m�c�cw���=m�[ ��h<��,7�s-�O�B������p������*����\� sL*�����$����gC$���q���!�yl��^��8�N�1�G|��Wy��u��@t�	������$�@L�|�MuD��Xl��_6�����ZTD�q�u�v�&Uf��!�s7o�/�2�����,��/d��/}��K����!Dy��ofm����<�"��Lh5cQP��sm�'@�����@�X�����4ZDOY}-gJ���Z������I���'(\2IY�q�
����O�Vw���Ca}�$��e�3�F�a������c���6ojZG!�Bq��������W���
�����=�m�8Y�����Y����W������q!����v��1���|��m������M~v�/c�V��:�������,=�'�L���/;Y����*l<[{�,��9����1U���1���ib�q�3�e�X���,}a����x����b���e�����y��]���D+����g�c�M,1l[p�F������Il��K�����#�,1��UX��l�$�	�V�$]i�.�v73�+b�����uf
����*�.;��S�L�:+�_e��q�6Y��s��\a�R�:�UVv�'vlU����6���eUy)�&�2@��W�,�����wXb?�(�d����-��~2����9c��Y��[k��[��4�����X��x.������,���Mb�����`��9�=�v�J\��]���'6���nL�j��],#�/K\�-c�O��!YJ��&�;�,��M�b[��N����N\�X.0����!��a�^��lcyc#�n�.f�\�=W;���\Gf��2"��w�mUW��S�lZ������
`'�����-Id����U����eq9���2c�#���Z�^P��e�2>�A�4��\��:�����������i��Y�3�1�	�R
g+�\b�#��)@�L�2�e�������3�������!x[T^�������(���fH��d]l������[Px�9/�V���-�i"_�'g�;,c�2q|�h�+��cR8��=���b�U�Ke���l���=���V�v��b�#���#�j5�-S�L�*;p��d�R9�i�]����m9q���_��A���Z�%����2M��+�%3��2
+c��Kr��~�]<�V��3w1��]l���,e��l+w�0����i�������.bn��C=��	�y��)�i<!������g�_0K�V���y���bF��3�x:-������+;��*��g�'�u_3
�e����XG�k���?e��x�����x�1�)�e����W��6!����L���,��Yf=��-�����|�l��S��l��P1�2�!sL���0�_/fz�]Vf�����1Sp����1�q�69��&��*�b���T#_gev��#9w�:~�W��h����[?��i�y�M�}6�q�y9��t<tQj�I�x�u\sm����2"��n�.foO��X�4q��2k�{V�t��g��m����P'W����g�~��
��>������23/�C���M�Ir��Q��
eu��m�	�ky�c��lQL8�[����6�c�D6���t.������;]���Xc�������3c�K��y����q�"v3�|���uL����c^e;�?2������}�i��^�!��,eY�:���8�y�}�n4�{��x���b��PL:�I�C1�|(&����v���1����m�K�h�����?��S�����5�q�w6�\s5�J���?��t:r��H��SX �C�F���`?z�:��n���:��|� �F���)Xk��r�������V�
���X;3��-
���z�d��
���i�x��|�Bow��qP�}��sQ|�p?��Z���[a+������P�T��_�c�����H�H�=R����@�C9��:X*/@���%��y,^(�#��h�o�Z���n���?E��a�������?!ch��L3b����g���,�M�)�}�Q��B�sI�B�����a>l�$����#�V����:����2p����9G�G����M�P�e
�J��I��J+���!���UW��S(�~�1>���)^���bAr�V�1�
��C���&RuPL�!��8�#4��6XkXC�{����GF�>�6��ud,A���&�i���Pnq�����##�A�� n|L��Pnq=�U��z�~�*|(4�`G���h���%"��M��"�'J},Rb���C���q�w�#��)@��	.bV�z:����
�����Ol�������
�}�s��P��8��=2��R
@���`�;��eiu��@��o����:|8L�r�SA��Pe����N=q�@�$u�0�BP�G��,n�R��P���c��^��zp7����%nW��"{������C���q�s���
e{J!�?��n�z���;��<�H�\���Ql����e~�	��]�h��Gc�,��ND��7�Ud���>:h\K������
����Q����|EI�7(,<MJ��U���]�
���F�[<�5��1��XL�J�N%4�2l������C��x�9�q�������:�&oy�a��4�X�7m?>h�&>��9�cO������|<$�����NH��~L�'h���0������Z��:��"����q�`��,��[���X��nP�����Nl9z@5��������3>������2C�x�������_��:�}��
<�1��������?�qs���1��s��$�����)��N���r9���r/
rH���B���I1�����n�������/_�@������@z�6+�!���h�8�\|��C	!�B!7�v]�SDf���va�G��{�[��_�&Rt�PU���N��+?��C�P<�n�q�8%�|����r�A|1�����G�d�,�C�R
>���S��8n>
�^���P�u�2d2���Pp��3n�� (+v�!�?����#0<����M`���y(�V���j�o��x]�X�x���w�����ye������<m����r�L��B�@we�����[����z�8q<4�w�r�$�G��y?�F���A�w�Pc�Sp
��� ��Q�/w��l[�jd������<�������*j4L���V8���L\$��Q8�.&$d�@�lY�,�hn�Kl8�_}��
\�3Ou �?�����2�2��7>��b�]p]t	�����J���;�����g���p�4��7���������r���Mj���U$^�&�},3�[����H���SV���O'�8E�~��^��xj���V�x���D�M9�I9�N!o�����������s�!�����{+���!qr���[��k�������M���rC�h��1��v��m���	�q[r=�TxhY��[[c�<�F����|���������F��a�;�}�:d\K���m�#�]	���4���
V�����#I�������b���ur��.>s�U���a��E���4O����4�kl������8������<&Y�sn�k8����
������C�����]��q�]��^G.�a���<G�W���tO�A��V��ue��>ju��<�z�ck�;�!�q� }�V�����Y���!i��Q�����������?���C�������w�V�kQ��.C`�J��s
�����2����D��Y���%��f�
�����B!���G����-<JM����"�����hR��B�w_���`orRG�r���qyS��<E&>�^c�>u�A��?a��������Bd��GI�o����u��1��?����kq������.>6W�|Y,��D��3P����Eu��*���	��{r���0��|
'c`��1{������]�p���.�?������D�P
{M�����d������	�����������9�Zsx�_�����z�I����v`w\�7:�u=UnG�sKa�����;&
n8	��8�Z��v��{���s�::�F������[�$H_�hclmJ��PG����W��k�������Fwl���tC`��n�������6���.m�����`]���`K2�r��<|��W=��#����zA�7�]�i������nEh��'~�w���(?��s��U.���!�m�a����� �C=����=��'B��������r��B%p4�������O��l]����c7������<��5����P����o\�����"$�B K�~T�J[}^�q]���~N8��.�����@�x�z�"�8�]�M�7<�=O�5�,��C�r�d}CZ�@��+�s�v�U_ w��P%<��7Qp��F�6������p�x�(��j�������2�K��Oy�����jy�����K����{�
M�����o�W:�a�#����eg1
�A�c��|��A`��XT^���v"�_���5���}^����.7+B!�B�K�]��� e�<�6�����x����a�;x��i�?�V���q�|���b����R�m������r	����~����VAjO#?�a$��z�=��/����z�G��P���Ba�x��Q����_{y|]P��(}������C��v(r�������yX��C|r
mR������7p(#���P��wPp�<A���8.�*����d(Z��m(S�$esFQ��Ww��]1-��U��)�7%��������L����]KWl�+�l��%�����F������������9���x�x���s���s��g���k���o�����G��.�����c �Gw��S��p���w
OW����z�o9T^��T�����b�h��Ug)������p����Y�w�Iy%��9ad��5�'.}�=����6�������y����o�f��q�����F�1�C����!eU5-���u�P�V����1}�hK�����|�%�y��vx�M��"������{��I2����M�jbr����H���8�5��n���~Z��fj�1i�-����U��&��O|;a!���������G?�&�����g�{���O�]8���k�u;��c��i��s uN*���H�XI\�j�V�k��
���7��U
�c��l,�p��1�������]�}B#z�����������mx������c���X:���wpV�����o9t�&����$-*&f�Z�W�����,���%{i��������l�p��u��u�(��R��V@/bbB(����m�<@��?'a�^�6�/�����C��`cF�{�\�6���,l(��:�y,j���bU5I��~?����TU4\���=���5�������&�k���U;I�#\'�$m�LC�b����6V�%w��HL$����8�)s^��y�����~��|;���	�c�u���66��[cuvU{�>�i�:���'�����B��c��$���5c��G?�=o�p��8�M�E�^���F�+KI?z3q#���
=�&.����2k�m��}���sp�4���%?��t]9�:���i��������H;j�q"�UU��i1]r��������<��G���y���(�=���&�������@�S9�%>��x��c�EX��sL�����4V���2rVK�VQ�~�I~
�!�	��'���q$O�>�3�;�N�Q�Ea�<�ut�����i�>�O��2�y��m��A���0q��"���bH*�����,�AJN1��V���Dp���`��nn#&o�'!�?�Hu��:�r|&5^o���B*Hq�9�q�*��v���yz���AP����N�E���Isl����y������%9|?��^��d���	�7���9XC��N����3�~9����:B�>>�fl��;�����H2�%
}��8����`��1v�	bf��5����YF�h��W9��(w�<�qO��l��M����b�������(������D��m�` IDATQ,^3��-�b�X�Z�I����r��%��J���F��������
='�#��m�-�	a!����m������������\.?B'��]��4q���c}0��E�����A�}����n>�����w;>����#����>#���f��#��P�������7�:��>E�O<��c��$-�����4�t���w<�&�H��J�9���>���y���n�8n�G� �����7z��,�68�61��uf��Q8_�	A���Ny��QC��n� m�J������`���&svrM���9�
��������t mR��x���g�9����TV�u��P_|� ��s?�Snj�*�}����^$�\F�s9�}

%����n*��8ny�v��!dW&cC�$n:���M�����5[��l��^^q�g5���{d���f�Lqyu#c����v��5�	\�K���r��O��_j�g��6���$e���g �h"f�Bb��IZ{���3/�����=��]C���5K�6������h�W�����U�8��/���6��J
�q_S#M��mL
�>>&�n��A��q��.�?9
��G�#l���xf=�E��~���:�����n�N��?�P�*�������0A�0u����=�#�-$����2�F�B��b�]��_4�#�%��9."""""r|����U?|'7w�]�jH;u���u�������y�akngc���\������	Qf��Z���T}B��1�\���F\r�K���w�?���;I>����H���J���y����w=6pu��r������?�}���x���(&�G1�>����b�q"�:�8JT\c�f��V�c;�Q�_�������e$r�7���������C""""""�LW�6��U���5�HX����Yq���2���V�%k�0�n�%aQ��Q}�Lw3k�8�����_���3�u�7_�o�k�r���{9�K�:~
�X\Y�m�}HDDDDDD�IKS�W���������4D��>���QL��b�}���x���\
1���"""""""""""""�����w�U3�n�Y����)�+\
�OEDDDD���{{���(&�G1�>���QL��b�}�s5�DKS��������������%�DDDDDDDDDDDDD��q"""""""""""""�@�8�v�f��3�/�0�q�r��~���=Os�������V��Vh�D\�6lz�s�~5/��T�����n��|}��B�rU��1���wqE�����������e�U}B���X���M+TI��u��T�l3��#og���mZ��_��{��k x�|
����K�����[��f�M���lO��la?��.��7�5����$Z�2u��mS�z\�V3,$�%�?o���&���2���_�m�m��{H��K�����WC����l,���]����/�#��5�H�q��$�sF�ob�&������&��������[����s��~������e=NM���G"""""""������>g�>��G�-�q�6r����O�w!�-\'������U"������<�����M��N�cl��*�w������]r�I�{����pU�[�����{�=
����6%�2�{���f3���W�*W��$y����}J�>���x�w#�L�JzUl=n������}�h��:ck{���!,�{��	]���oL���)�~$""""""^������#��`&���n2t������V�}����FX��a���������#d���9��MXc����Y�Ey��k�r��F�8s4�]BI������l'���d�g�8&�%����9�����M���wb
����)����,Y�lX'�!q�pl}�&q��fTb_=�`�'�bXT�C,�����y���������1u�!�'����Gc5���)��u���P��?y+���5���K��G������������0��C_\<f�cH��f���q�����a�c�8��;\;�	�>��kkf�9��9���Z���{H�'vf�#��~a5�wW�$Y���-<kx���,�>��u��c|������J����:����F1���:�B;[#,t�%__Z�/?!w��	��=���;{�r�L����3!\'I�
��g���<@����bl������M�?�}bjT�;NcH�pWS���f����g~4u^T}B���f�i#v�z�����cK&
!,<���0l���y�L��s��I��_1�|=>�&����u���1Z������#�����w�u�����Q�}�3�F�q�)2�9��������Q�o���el��=����jbC�$����x��>HX�����~��Z��UR���f�����$�9��hjb6q&�q?�j����1$�I#)n8���	��p�o6�<q�$k���\��P�=�"y�8WN�!u����<4�a3^������^K.��i3c����hcgo������E��{��Nslgjxs>�����
��}	�����8�V����f���������t=�3G�[��&������$O�"8���8Oy��������a�4��������]�
�5����y����eN�O��iL������eLN�C"��[�>�O�N��x��!CI\�'
�>�q��#�����������']�����W�����pal�-�h�qht�&5>�9�~�a!�,8>[���>L�p�����D�nWc����]�	��Xg]������5t%_{���r��%���YG�$�p�kOcc�������|��.W~�mY%��]�^��n��s~��9o�p'E{w��hw���W���5I�����>���M���Iy�U�/�IW����8���O�x�����|��$��'�o+6�3k�uuw��NS�I8)�oSP�KJ��$�Lm`y�r������+�������Z��\G���~��C���0�����=
�N���H��b��������r/O�����U>@��r*J����
27�s��mmU���}���S��,��%�s��F��<
OW��AA��z�Yv~TR��]J��b�fhA{��VJ{!���K�J��EzQ��G�N�K�+�K���������c? i���fq�Q�,����E��I�n&%�Is���$��K�c����~�6���$��P��l���D����������M�!z6S���e�����������L��a!i�}�D����Giy5�>@��]��}
jn���'AwEq�u������h��(�B�C�(�����l�D��'Is�����b������������M���Q���C��&9���57]GH����l��E{�I4lf����w�f�����6���uaV�I*>�L�Gi,�t��f�(������cz���w(������$>���9Y�s�"�gn��p;E�:#��i�������c�cF��a�1������{5�����&�A?'��
�Pv������EdM����(�����5��V�]Lb5���2�m����o���g�F���Rp0���H]��*<��*����$g������LvK�8�N�6��,q�ec���#�����\���;�\Kj�,3�"a��$!f�z�.E����T���E;	[�.e�����_T�A����3�+�B�n"�G �K�pM]���$�s~EF�8�?����X.'y�;�0��9�y�1����q�����Xs�5m����p��CeD����{�:#��s���c;�3�������P�r�5�X��|}�Q�#&���^L�$#�<I��f�����u����f�6�'[r�����r��$e�Q�����+j�K�C��6���f��aR�\K��i:�d���y�����q�p
�����G�]�=�X�i�b��pyS����eEw��{?I3�������iU"��8�
�7�����(k����?A��W�)^�P�7������
�uc#n�Y�����-�|��7c�z�C����	���:���l@w�'��b�o��=�
���h�>`�N���TZ��l�m;4p$�=��
��������
���<���X��'��G���K~�m�����kX���1�[��O
���
V|�M�I���0��Z�p��A�(.���9��0>��b.'�y�$������6t����9}o�f��(�8���.,'z����^^A��w)�}(�;�l���F���$���F��=���gG��:J���5	3?,c~A���m��e:�A��n�%�=��������;15p��CF2kf<�?��wj���.�"����|v;*p�c7�GB�W�.�����v ��0��kv���sw���\�0}�0�&��+)�g3�o�����v�	j��8��`G>����y-�v"r�/�����ub'���N��lp���B��<�������I����tbz����k���9J	���c/������3
&~t_����S�=K��m8>J��[?��!��"2w��_��B3����s'����}�k(?A��C�G��'�����:��� ��DhD�������k��/c���fG�,C���za��s�=D���	k���2*\���G�5���)�
�S�{xz�
���36�N����&NKh�tH���q�n��t�^K��������R���@���Z�������q��x��c�N��"�o�Ad�@L��!��gI)���h���=1���XsYm�������1�����:�~�
�(���|���~=sg#��{��Z�����s�<d2�����kob&O!:����V�J�}��e��Z�n'nZ�}�0��������8�m�����G_�*	� �x)s�m��yY���:��Fc�����G1O�FL�k������|�������c����D\@�t^��&9��$g�*&G����x�w�II��*q9����o��0v��=p���%S�&8�>>>Oz{#�����o ����_���7)
�b�,e���|�P��/5���o4�9����e�f%�ay2���w�X��X���&=K���f�a�l�XW_�������S������M��z'����(f��k��r'ooC�hd����������~v;{=4�}��N��I��O�w)c����]�rP��
c���7�
�4TRz�%3K:a���h�����&��#qC����vL�/TTUc�1[���;x���b�C����#���c�R�D����j��WR��7�������.
����t��n�����O(���h�u<�7a�:Ki������#���z�T�_�����@��o�:��(����V�p8��}�/��|����b?��I�y>��7LQ��fY��8o'��`�F��X��q�`����>� ���P��M��_0��*����<9�=?��y����,���>�>>��R����-������X��N�q��>���o�p�$\G�F�����/�8"��k|���H���j����M�����l[��\��:	���N���YV�D�S�Z�����O� ���n}/��e�V>��y�C�l�5�C ���G�`�T3.U{>������i�����8s
�4�yI��j��|}��c�rR�8E�������!��<|�G5�\���!""""""^�
��[�WN���Mz���
����x|���3�H?�N�*���R�U.���p��u�$}���$�V�WTWWs��`n��`K>{9���������Ns���o'�<n��r'eU�E��k�����e��xy�^J�n#1 ��S�m���t",��w���C�s�~�r��]�^s���m��-��d��M��|�rr��#��[����#���7��y�F���`"��=����iP�Y�\~un(�������w��~#Y�������V@w����];�����c��p,������0c����~Q��>�G��P��u�����������A�c�,��������	X�M�V����]�q���DP�M��������(-�8��u�	�b��x_&���:�_VS]}�O�������:��7:".���M����M��������~���'
�������_o���A=�aqay�c^}&��������z����Y�j}_2�������[��)|q$��3}�����IM\��+�B�C�(����o�t����:��n���O�.��d�\����u���E$,�O��TTWS]�.O�A�]7�m��7�'{v��k�����sq\�i�-�n�a��N�!m�?0����W^ �D+�����:I�\.\U5%5���d�F�+��]������vm�o��K��3�������32p�oX��?�i��lze5��GX��#'�>��o�������X���J�I���c���^N��2��M����-�ls?_U�a���l�`��kp�$w�6��#�����_vt�[�p����<��mp0��0����N�1�n�������=���F��M$f`��C���I�9K��`�������6R~��r#������~�-�8��6��,�Dh�����B�5?t/[���������	�xCM�Ug)\�Gr�a���Z��)�^���O��y��]K��FfZy����~�����n�B1t�K�NR���|���r]���������N���p���i>��f����)�������6���OhDo\�����Pu��
���z!.���Y��B�G��&����XL>-�����U�HVF.vW58�I��!��y�q�	���`�������/9���Id\x���s��}���1C1�ZI��X��4�L�����c�(���s��t58����IX���s�=�&.����2������O��|���]K��@`��?-��QTb��;����[g���FO#��k�Sx?BM7��$K=^��q9�PT~�3�y�u�r>����c��Xs9<�������9Jw�#}���������[��������g P�=�Od����m[��V?O}���e_���nK��iUg�]�+�I���,�:B�������qjX�kw�~��u�_#A!7�<�{y����9y�+�J1�����!����w�v��D����xv�������|����8�V2���	&���d%n���C0����E��!�E�6��=Ft�g��~>�y�y���/���m��'n�����P+��>����7b���IQX-�$���g��vi���C1>Ctd�20<��������T�:�6l��0l�L�����-�������`:����������{c
��	����������g�����"�P|�k,5�� ������eh����puw���TV��<�/a���u���/}�����9����=�@3�����p�����-�iU�>���"J�
r'Vza�y���o":��/���4����?e�����4�@�'fa��<��^�!d���_[sc�L�Q3H0�aj������2�}���W/V.#�����>��xtK~7�P�O��s47F���-`;��9����X���=�
`:����)xba+a���Xu�����8Z�7���D"�r�QM��+�c���}��u��P_|� ��s?�����2t'a�H�z����X���]t��a�L�[v-ic�$���$D��6b��`�{_U`0��	�'}�8bG��5��(������nF�3'�`|����CE��u������������1�G��
�5����'��G`�<���y�����F����x���1���]�9�B����Y��}����O��BG=L�!��+���
�1kr(�f����H�peBXH�{��O��k@�����z�C��A��Y-��WU�oDL��F�$��q�c#���fl�8Oc�#{>I�71��5������b�V�G���[t
�s����V4~�����ID~��h��a����|'�N��<���ci��)#e���>X'��4$��lO���TWW�~��N�n�l����6v��)�u�v���:��$
�F��m�O��f���<��5��1��-T�8 IDATO���vj����r9��<*����?�n���~!��/'v\q[62���_z�����!�BU���p)�?G��M&���t�*�����1���QL��b�}���x���(&��j��f������O�]��?"a�mW�6""""""""""r�]��\""����5�HX�W�yOL�-ZK���[��!�����|�\�pR^I"�������$O�E����6F�7i+j�r�U��9�$��j������v1q-y��D��M��-'����]��?B'�H�SQW���ob�Bk/�M��6C��DDDDDD����)�+\
�OEDDDD���{{���(&�G1�>���QL��b�}�s5�DKS�������������������V������W�
"""""""""""""iiJ�
W��S�o��'���x���K��>���QL��b�}���x���(&�G1�>����b��)EDDDDDDDDDDDD��q"""""""""""""�@�8�v�D�������������H;h�D����H��89����V���#<��_��?K�������DDDDDDDDDDDDD�^�$���a�{���s����m��g���Z���>��ag�j���w���1��=�gU��N�Fp�z���<d>���
RI��u��T��.U��9�?���������Y�.��s���������+i]=�+?����������W+�r��+���j�������������\-Z����s�go�s�}D�R������'�S#{�1�n�������j(a"R��1F��ZGV��u�r�LF�qc`B:�w���si�G�\�J��/��^�7��{,���8v�f�k�Q`����H����*��*y��B���fwr��-��,�H��q��y"""""""""""W�V'���������8�;~\L�t$�#P~�m�����t��@�D�������j%��R��E�c������3����a�4������<�M���wH�6��k�c��{���slgjxs>�ul3�����P�My��zI�:��\GHa�����#�k�z,���y�g�����1v�r����3�{X2ia�a���a?��C�d�}���EN!��Q��Op�������%�Ol&y��d�g�C�H\{��r��%��0�B����I���IJG�2��'���!��������p��L]�w��>���8����BF�v�f�*�E�����>����������b#��������^�Y
������^�OpdI��v�,?����X��n6���������������D\�q�e�0�gwa24�d+;@��^���<r�-���\eL������6Q|>yv�}����z�B���3��9�y�1�����3<�`q�-$��������i_�������H/����b9�����4�2�b�v���TW�(xq,��#����cy����x���c~�������)�:B��GHHd��(��M�a3�g���@,;T�s�l�{��
SpmXH��3u��c4)/>It��$����C(^�����$m�G�����O����r�I��<���|t���cp�����cyh���"z�Kl\:����)�^/g��<�3�aY�����l�D��D�%�IY���E�R��
�o�A�����������6�������|[�qyq6�o����<w���'8��L��_�e�J�������
�k}e�j�	�����]E���X���c���u
 ed���@�H&����������E$��w�=D[��UR����&7w��"I/~���ab�kO�5^���N2
�]���t'����2-����D����D����,�/q|�����#dm>�y�s�������'c��������k=�.�"��La�����v1g��e����0���7�z�������O�G�X�![_J#2��{d����1���2�/""""""""""�-Z5#. b:�o{��mo��i�#�H�L��+�oH���D$D*	'���{���d����l]�C�d�M
w[����e�����#�	���k���.��C������<�'�3��<�����*��	eU��g��7a�:Kiy�C��@�Z��|����g/���:N�;����,��2�������Y"�)b-]��bA������]�C���������kj�����v|���W����N'���c�	
I���q�_jSDDDDDDDDDD�[����kP�A��:D�������<:}:�/���r�`���N��#a�&��x����;�N��1���[oIE�Y�����-$?���	�(����/�l}�?�M�:I��y�Z�����g�]ny�������x�����������M1#A�n���a�R���8xy�-8w,"a�~bV������wyz�.�����'�\��+�9�k�d��S^w�Z�.�]F���n�/�3o����/��u�.��"""""""""""^��q��L|v>��0@��<��_���jV���*5�eO��g���K�\�9�������ZJ�&���fni*kF~�����b�@%���Sx���E�7a�0c��^'-�C��<-���p�S,.I��q5KI����\.�7���cq�l��r�
+?��5���
�bj������!�����/p��D���:+(=vg`?�=��&�Od���Us������^�}OQ|����c;�*>���;a���������%�?X2#��C_�����id�|
�a
�G����J��)<����[DDDDDDDDDD�
k�q"m�x��{S��c,��jhfB�x;��
RG��m�v�<H�9�����FL �Lt���
}��8����`��1v�	bf��5��e�|�u39;I]�Ia�<l]:��]�����.�T����2C���O$�h��2
�HX��x�r�#�J��!,������A~XKcEL)#`���:a�!���	�0q��"���bH*�����,�A��
���P����cQE���CB�[�my��q�l����!�Y��ENfc�Xz�c0��	�'}�8bG��5��(�����n��#�=v	k>���������������x����o�z��������+]
ic�N��[�nW�"�	:���b�}��.���(&�G1�>���QL��b�}���x���(&��j��f���������������%�DDDDDDDDDDDDD��q"""""""""""""�@�8�v��v�;�W�-u��]�tDDDDDDDDDDDDD<�����V%�������mW���N�:E�n��t5D�t>y���(&�]���QL��b�}���x���(&�G1�>���QL���-M)""""""""""""���iJ���������������%�DDDDDDDDDDDDD��o[t&�%�\�#����0p��
����<[
7�d������m�;��63���a�{���s���8����~��^��������p|�&{��:�Rc�	{|3�����$-.�����I�'x�|
��(���-��-�h]]�>!sJ��o�Y���)��]26��n�s'I}�_W��zz�����,����|�<gC��vh}"��������m�}KM". ��s�r�m������c�h����`�E�������U�u��\�7�Q�G�������s��\ZF�2���{������M����F`lE1�]�Y��{���x�!�'tm�Jz������33����j�������q��������<G���������������|K�:W~�od���!����Ms��g{O�w%~�`�������<�Ab��������0�
���q�5�g�9d=l�:iS#���y,��0)9��:mS����U���=�����>$�|���f�'F��.���<��Huf����:�To���5G=����<���D���;~���{�q�=,�4���0������C�!w2���A�"����(�E�'8�B��
�]�P~�Q����[�x]Y��a��N�1�J����6W�%w�0�G��P3�DDDDDDDDDD��.W~�mY%��]���\1��5���3�����-�Z�7����?��m��|�����o9���1���g�s���c�����gx|�,�z[HX���'�����\'I��+2*��^����rp9���i<�e�������\.
^���H��n�X�a�c,�|7��_�q�B�o�u
���6�������f�h���Y+.$���[���h�\����"a���M�����z�jQ��������V��X��O�/�`������s""""""""""��|[�qyq6�o����<w���'8�����L�;0}�&��#���9��0Lu�\�����c]���������?��@����M���L�CK{��;	��H8���{��t!��g��Mn�|�E�^���+�������k����d�6���N��?!eZ���������
v���X�_�������`L-lz�jy�b�1���lg��������d������"""""""""""m�U3�"����7���&9�V19b��������+�e2��r�s8��9s����f��|z� >������Q~���vc��L���nk0����}9�_"qD8����s�����yH�]P���'��q�r��������PV�����.��&�Ug)-�:b0�[+��U��,cKcX���$E�����?0����`�0�]> ��!L���{f��������������g�5�����?������x�g���q	�����p����~p$����o�q�c'���2�q|��=�Y��/�X�����Q6a�_VS������'��B]'��;�\�\?T+!t��o"��g�������������M1^a��a�!�l9��n�~4�cz��7-#��>�t�a��wp�wDDDDDDDDDDD.S�����?������OS�#��z������)r<q� ��q������6sKP��
����1~ZL��K��a��;��+\�#����3�y�u�r>�l`�O�\�~��%#I�W��d�;M�w
�rA��l�C�O%5#��~�b����k�){���$v%������Gs��7��c���:�m��N��bb�n ��V�'�f���%e��m_q�Vj�q"m�x��{S��c,��jh��J���B*Hq�9��� ��|"�c1�TG0����*0�G��
�5����'��G`�<�����
,���I��L
s�a��|||�>�<���>�����a�I;Zq�LC/V.#�����>��xtK~7��v�!���HX����W��������^B����<���~���d�N&����������������H������L5�����9�v��!m���St���JWC�;A���QL��b����z���(&�G1�>���QL��b�}���x���\
1��8�v�D�������������H;P"NDDDDDDDDDDDD�('""""""""""""�|��{��JW��n�������������������G>�����D�;���s��JWC���S���������w��'���x���K��>���QL��b�}���x���(&�G1�>����b��)EDDDDDDDDDDDD��q"""""""""""""�@�8�v�D�������������H;h�D����H��89�j��"""""""""""""�em��+;��M�q���y��4K%��e�G���aQ1L}~���V�l_�@��)���+�9��=��_���Z��K�����[�^��.����)��>�g����i�F�$������������������B�q_}���-|n���[��~]�Y*����-��8���Y�e�%%�E��'������ul��-$��F���%���W�6�p��Kn�?�{O�;9C+��>f.Ox���_��m������������H;ju"�����>;��C���O���4��,Y�����/|���{"�����#�Y��U�Pu��U�M��+���C��Cfv9����Q!5��!y�����r����.���K(��7`w�g�9��'q�����d���q�$�o���������H�������u������IB�
Pu����!>�/���G�jw�����BF�v�f�\�I���������,Y�l�M�Ib����o$(|�k�H��5�f�#'���Y#�rK&
�iK��s�<���L����:����F�X��]�4gSG��������Q�:a��K�$c_M}��%��0s�������������wT�q����U����������"��<����}��c���}L��;1|p������ t�6JK��O4�9�%_C��ZD���}dg�� 2g?I��/�s���"��^��S�3
�����;����9���?vQ��Q�V>B����u������������� ��m�w���F�!7�$�?���%�IY���E�R��
�o�A����ps��,�����E�)8���[����������i�RW�u�,A��f<Bz@"[�~@��l
��>k��G����D�J��-�x�o�q��$�|{�R
>:C��18��c��3kj�1���2�f�{]G�xC:�"nhF;EDDDDDDDDDD�;|[�qyq6�o����<w���'(�v��o���s/����[���\
\N'�AF���x��)����mn��2������2��'���L^I�d�����2�Y3���:�������G�{��0�}��Q/���[8����6.�2���o
u�0���!��$e�)-q�����6E��lS�M�Z��L�����6���W�2�]
,
2MLiwM������~>#j@���~>�b������sx�g?��J���-���W��k��u������3�C�?3��X� �H�{������z�[x�'�����8�.��q����f��,`���cVP���������c2��_<������w+3�P��KH}C�����#�#n&�����������g�����(b�q#vs{B��?�
������������s����;+?d��Y�5����`��<p�cunWNN���
��������S�
�������d��y�z�
��b%��������c�����SM��?������b2�0��x~ee���J��������|+��p�O^L��:�kt��+6k����jN:��
�F`X4�?�U�T�G=��z���o�r���P]wV�Q���������U���O��'k��4�0\�����F��������O�)""""""""""r>j�q"M���z��H���q����2���RZiP�J"�k:0��x�^�6- ��	0`���T*ty�S������f��$�v9��?���g�^��O��O�o���<�[�����>E��e'N	p�6s�M$�~����)~9��Yw��t���T�������5����=~U��Z�������
���zOu��M����,��*�o�?�����F$""""""""""r�h�B�%�����#�|z�E���I���x��OXL��
�AY�l�G����������C"	mw{�{k)E.�*�"o#��I�)���,k�GL �U��l���p��K��Ok
a�7dN���m�\����5�`���������������?7��"���yG�#��g��������o�l���NJ�V`l�����
~���~��U��$����r�r��O�������m���8����������0NU����
���L�i�����2��u�������������+�'>�
�Of���C��'���K�w.�<v)y/��fnO�������3f$�W��QA�#�d��p��0Y��&|��$v����;
a���	X�0�p��(R�����&�{����-�p')�[���o�w���v�m�7�^��r�%�O��A7�����O3eHG��#a�������!a����U��g���y/�~���k!ik?�>7��:��<�!C�k^Bl�g���{2qdE��3c�����qQ��[l��MP�2�i> IDATK��x�����{9���^�Y����0��8�;id;w��s���F#������o�����^o���al[L��E8.cJ�K�;��������������������('�G9�=���QN|�r�{���������9QG�H�iE�=cqn�����l?�o�I���z�m�`DDDDDDDDDDD��
q"M)h(3��J�����Q��t�W�4fn������7�"""""""""""'������l�SY��Q�:l���zXsG!""""""""""��'""""""""""""�L���6wg����;�z��^�YU�[W��
}���4��;w��s��CD�I��{��s�r�{��������('�G9�=���QN|�r�{��s>�DSS�������������4�DDDDDDDDDDDDD��
q"""""""""""""M@�8�&��X�W���_���g���+��<�W���K���d���l�EDDDDDDDDDDDD|X�t�U|���O9hiU���j���[����T����VN���\���0|���b����,�G�����������m�@�#��/~G�E�>����}��^|g�K1Yl8�N`��}�;�)]��#�!4$����07gF]c��w���Bp�l��^��Kp�iWz1
g�hq&�����Jpd�_\�����^*��v�M��c����\�����u�gl|�]�I���i>��TS�|)y�U
�F�(����A�.������������������~���9���yQkq��?ziy�������y!	����[/�m�;���g���&y����+0����W���i!9k3�>bF�R~������O�'�W>�������d�K��N=��sRG�E*#I_�8�V��e��S	��}�t��9��x�^���H���)�5�k������2���x�<r��c����/P�iq�p�=a���]t��O�r������!���a6�)�>#e�_)�4w4""""""""""g��*�����}��w%���a���|���'���k����
9;����D3�2���Hz��B�!�=�M��P{0�H'�'�KY�����M�M�-/QZ_�����c�<V,xG�g������?Nl�@���&j`l����*���K����-�
[�-8�wQ����!
�g������=���8��j�/Gw��H���pv���u�B�����>���\����'��gX�)�Wb>I-���8c���"i��u�5���j��<�)^��Q�	hm!82����������2c�:R��`���������;aia!8"����1��1�o��:���.�rY��L������_������PBCB0~���}�O^#)�F�."�k$��S��mp�z{��,��]���SkX!�r;+���������~��-��v���e�;�y���|�`%��T��F�.{;�q�Y5\Y�IZR������!%�E��C���1n�s�<R����
[7;�:W�l�������P�������l=	�`����?� osM��U��<��
o{��*?#m��u���[)��p�VMY�J�<����X���(6_����w����UA$O�v���9V+���"����SR�6Q�������\f���������*�/�#��o���r��M �[8	�������/�8�#B��d��2���dN�If�����A���$�	"%ge����J����+w�<?c8_P��M���K���p��J����T���o�[>!}�����R��������V������4�e��/��=���1��"q��=|\����]��],
Q�<�)ZS��{��\~9��D����C�A=�l��m��.}��H\�L��=�0#��D\JA��[F|��L���K��1dWX�����W����I>�!��3�����d})��Q����t�2c�?��.�A~d����_MT�
����8�^J�k7�_+<_�bA�����7������KXo|��]O�>��}^:e�*0�3F�������=Kl������-L�/�"s�����	�7�oH��,��O����4k����{1O�F���l8":2�E�6nT�ZDDDDDDDDD�����;+?d��Y�5����`�������O�Z�^�t������*:���$���{�0[�G���m��_���!o�0��s����L�s)PM��	$~p9�����`{�`�X���=��Z2�-JJsH��G���)�o�����(#��G	�|�����}B����5�}�=dN{���GIRw]��,���:
���t���9,���h�~�����������i��d2a	{��o�:�dc.v��j
8�3��������&�	��D`l*�_����J��������|+��p�O^L��)-i������[������������4H�����%W������L��1<��b����E����X�Y��>2�����JM����=dO}����I_�FB��i=n�Wc8n'��UX�V�}o'��A~�'��.��
{���,xg�d��^��t�B� "G��)�zR�����\��{?#;����w���������(x�7��k�:����H���K�S�r4���$q��������D��t`F���z�TmZ@T��xW�mZ/���8��n�F�����v9�@y��/��.��jb{�����^�gB
�"~���{�""""""""""r��g	&n�4�2-���>��?X��_�?�!n�BI�+�kCHD7�����v<�)X�6��#���l����M5���������n=���g%$�#��r�+?���G�m5�3�)�l�2�9'���$�������j�k�<2���xj
��^7��
��2�H��G#DN�?A�/��q���Gv�:o�������o�f�����=n�J��9$��v������R�2�:UQ��7��t�t���n6���������1:�#6���������.~���W�*�%y�oIY����8�\����K�j�{���
�M^,""""""""""M�'��o����S��L&L�&���S��L���V2����L6F/����$����������pw�����)�7�����?���|�[`ja#~i	��o!�d���9J�~I��\��?���G��N��JBF�db�B����c��N��#�����>�I{�.v�������>!��5����]�$���u�o�����ZLYe���M��I���'�`��p�}�����2�#X��k����9�3�Kx{�(��8cF�}E��>���;�+�	,�Wo���?L=�a���'��?��y����+�#�����_�+[��H||��2<��8����na�c��)�z\��[/�ZNDDDDDDDDD�AL^����F�+���>��C���;���ss�!������,��3������1�-&~�"�1���Oc�;��('�.���('�G9�=���QN|�r�{��������('��|��:�D���i�w�%��f�+����M���ms#"""""""""r�S!ND�3�d.[������[w�<�����
=�1��:���3���������&���Hh�8|�m�\Vk�(DDDDDDDDDD���i�O
��u�$]��Ss� """"""""""""R/���=�
q�
��������F�s�N:w���a��4	��|�rr�Rn}�r�{��������('�G9�=���QN|�r�{���hjJ�&�B�������������HP!NDDDDDDDDDDDD�	�'""""""""""""����p	�<�{;��
���{O��D����e4�P""""""""""""">�q
q��,�SZZ�n��������w�|��L��$'����e49��%)��m=�!F�G��
�ry4i�~>��l����Fq������u�����.��Z. �k$�_\���}��1w�-�����	)�[W.�)}e(������=��,k"{8�Y�0<{�u�Gsq{������L���!��������W�4D�#s��#={�{��XR���'=��?����%Y���4�"M��9s��K��
��I����������4���~���9���yQkqU{��������m��t�N�����_���D06/$���Tt�������#������oj����=_���|��(�?��]�(]���&.��7���t�hVAI�����#~�2\�Q�r-���p�^��a]0��'��O)ziV����}��?z��XE����T���Sj���Z����+�|j:�A�\�l)Ye`6�}��c�B��y��O�h�5���Zg����[�]sG#"""""""""rNjp!�r�������~W������|W������O=������45�4"�m 3�}���W�P$9�#n�b_J�*�D}�sgb'�f���bog���V��L�n,�]���2��N�fX�p��
��Kv��P��+g
��s���9#�`��������E��R�w���j
�F~�$D�=2��e��\F����_|������O�8'���$�9g�5�E��������s��a����Q���v������
>x��wN&o���> %�/�`�,���'��#�l�}�F�"e�D^Gp�pOZFY��so���v���Bp�0R�m��f��,�O�����PB#c�����}��/~������K��Op{��e(	!}���*�������������iX!�r;+���������>��G*��W�^�||#������JSJ#i������2�is��31��������|�� �����8���� ����Q��)���5SUV� ���n������s�D��,B�-��{��:������f���G�9Z����!���5���m�S����I��a9����t}�i������:���<�\U/�FZ��do��j�F^��"s�:��sF��=��d�;�(�]�O�#K�G�^�ek�L��WHY�������qG����O)Y6
c�,�6���D3����(�UF��@2'=N�����&~�J�g�R����I�D���<��?&t�?�������H`��d|yh�ch�E9���""""""""""�x�rrei�r?`_�<{hc�c��0��������.1cs����?�e@����[����	�����8w�>b������J��.�g"f����M��
s�?�1��'�����&	c
�p�l��C<)]p��l���i�n�Z���p}F�^�aj�TS�x���I{��/?:��mI`�h���Lo��g5�+���P���W�u$i���Y�^;�1�W��n		���f��/#�|��5�,�>��
�)Fv�A��G\�5p�~�<������]#�Q2`?yV���0	�;`� 	G���k���"��+��/Q�z3q^�#������6�[+����������������J�:��#yg���Z�!���32�zL}���Wq�U��t79���3����i�����36���!��G� ��5g{�������%��Q�k#��I~pN�T�u�����_S����	c����iD�^#�k��8�9��M�=I,�q����{����Z�
glX@��
��&��5����k�g����=�&\K�@�=��������k�
�4(��&L-�^XD��i![b���wTl~P������X	0�����e����&L&��=H^�e;����jN:��
�F`X4�?��X0[��MT��:��!""""""""""�k�qu��bz��{���M�����M����3��[D|�{����}��d<5���������uQC��`�����0��"W��8�e�pr�����W��&msE�����V&M$����|M���.rUS���6�����d��8y��&���^��/x���>�����zvo]I�6���S�>n������y��{��t����8�-	�]Un*�<�)�PL��6����z��@y�S�\_��9�&g������M��;I\������������������+�Y���>�;�j��.��;&���^^@�s�tI�
%r��=�S������<����B�c����������a�I�����={(�-��9��v�(���!��TR�"���d���v�j����<�?!�:�����=~n\n/����WQuT��j��Du���]���!��)�7,u�_\_S�~�0�-��������8"����wH[��:K���E�F��S��AY�4��@���!�b�_DZam7��#��Of����gp�8��Za�I��-���n����v�7XDDDDDDDDD��5MG�Hc0�%s�oj��;��p7��(�����)�)
��dt�1�l'v5���<"�����&P�R]��u�}���|R�v:&7�[^���������I�evB����#�W_K&�z��+���)W����s(�{\��q��`�\���n��x��O\��l���]%E���H����$v�D���:g���~ af"��{]�9�1B��Ho1���*���#���v3>����Ix���S=�t�����,F��Bp\6���'���X�O"}V��Gh�����dxzd���~R����	#<�}�8�i�����I��Z�]O��'""""""""""g���z��V�u�������aH#��s'�;wn�0��SM�����8�sx
M9d?y������������������=���K��=���QN|�r�{��������('�G9�=���9r��89��"���8��IZ��"�gl���U��`�DDDDDDDDDD��
q"rn��i�R0���\w�<����I`�l&�9qZOi8�@��9�=�������^����������������9Mq"""""""""""""M��I�:osq������C������U��u�������aH#��s'�;wn�0DD���q�G99w)��G9�=���QN|�r�{��������('�G9�=�CN45�������������HP!NDDDDDDDDDDDD�	�'""""""""""""�T�i~�u�}�x��/�~�9�h��E/,�_���`�>�]��s��%��RDDDDDDDDDDDD�g5NG\��,�����V5�/	c�3/0?5���/��-��E��t��%)��m�{�������RL��X�y���y�]���0+�~�(�����jJ_��da���1����J"�d"����=d������1j�3a:�	�����m'\��k�Lc@�82w86�E�h�����O:f�0�!o�
�N�<��g?yS����2��b9O5���l�Y���������w}LzQk�c������TS��8�2-$gm�b�G���B���S�V���-���i�G^K`�S�k;+%Y���7�e�S�����kO��R�� ����$��g�^/U�rH��b������s�C�/'e�J"��Nl�E�7��"e�J�������3v�2��J}�����Ibx��m���)""""""""""���*�����}��w%�8�����}
#�������X{����'�{ �vW5�?6�FJ\U�m1����+JN[@�X��}����+[t�$��C2��L4�}D�&+���j6��vb!���1�1�x���]U�(�,~���H�l{ds���N}�>C|���8���=����7��;������(�m�)`Un!s���Kk��q�]�-Fy.)c��]�I��x�n�c����%8�,��0`�������Gh�(R�a@�uw
g��eG:�\17�z-�5��g��2�@5eYbp�5�����U�����O��g���N@k���$/������1}){c�{OR��_M�
q��Y�]������\G���KVo��F���l�@"Gk�������P�������l=	�Y�� �,KgbD�z�"��u������F�$��u�<����O��f��NR;�g�����z3QAu�S����o��?�������������� IDAT�1�;'���C%���pN{���E�����������WIY��)kvQ����Y}([�I��@R���=�W����}/�������G��?��R�;��V��w���(���e�0��"m�>0��6�Q��	d�~K��0������f6�V>+��M��H��$��<�����1���I��Ul_�G��&���i:m�Cqx�E����~""""""""""�4T��,�aY�<;j(�=��������X�U�O��e����k	ow�?����jJ�>I��$>�L������	�nU��������Kk:�����|'�1����4��?���f��6�|����#��3�����p��O��nK��K�����Z�;��.��������`6_�y�J�fR�����~^����1��$���g�'2([���
�w���5�b�CL�`���S��?������c27Y>.���@�7>H���I��2������a�wZa� 	W����k�Vx�b��4����z3q��$t�-\Z�&�^E���5=����������H3kP!�?"�wV~����*k>##�������8�k�.�p%m�'M������>�M���2�����y�����9_�*��U7��S�g�F���dL�A��;H������{����PAl������qS��v�]wG1�7����:p*�Y�`������G�"u��u�\�HF@�V/,��shoK��V��*��A��[s/���=.�({���0�([� y�W��pct��9��[70sX�a�$/��vJK��L@;�+0<����������H3j�q'�#���GK���n9{��� 3]���<��^���'�_M��k)]����k����8��Ds��>�$��|����9j�{S.�k�X2*�����������A�}bm:�Za�s3���dW# ����n�������2�%*�Y���xt����8�!��	����>�V^5�/).�b�]N��wj��=�)y�/V�t���bu�v�_��t��$.����VDDDDDDDDDD�F��,��M��A������c�03������US<)���ya���{(-,��p�C~=��G��s�b�����!�~gv����~������'����6���3(��|�X������Ab�^J��{����t~<��Pfx��
!���`=�.��
��k%��qD�1������+*<�.���VE����/��wH�����r+��E�~Ws��#��Of����gp�8��Za�I��-����*�Va�,�>{i\M�'�@��d��M��|�>�&sK	Kr)^�����N����<����]������el!u�
��L�����=]��/�f����?�����Wb��vbOc��c��3�q�|���I��	�4���v�m��/��S2r�$u�@r����}K�O�M|��0w��p#��!���HRts���d�;�K@��$��	����a�&a�K��w&��/�6����0gD��'�>�E��#4�Ah�H2<=�`�u?)�\B��t��Q�4S�t���{e���B�����������4���=�����sCgs�!�l���t������WM�����8���|��^�/\YI�<��9�s�j��k�+���=���K��=���QN|�r�{��������('�G9�=���9r�_iE�,���{����&i�x<A���/\�}�(�*�����������4;�R+"g�����v+��"s�����wx��7�i2:%3gdwMK)"""""""""���;�3e�����������!jZ���������������8�&`��`����8SWt���!�����������������z��B���|n��l�0��������;7w"��{�=���QN�]���QN|�r�{��������('�G9�=���QN|���MM)""""""""""""�T�i*��������������4�DDDDDDDDDDDDD��_c]h_����}�;���[�.�e�s�AZ�����z�%�5��������������Ok�����Y��)-�j�Wmg�{k���SSyr�A�{5;ze89��%)��m�{��
��>������
������������#������PBC�<a!�{��7\M�+C��,xq=�q{]YI�L�>�����Q��x47F�y&L�>v��������s��i�G�����136����m�������o�[�����y��eMd��	d���>EDDDDDDDDD�g4���l�Y�����X[���b.iAe�>�������R�/45x8�O��q$�
fF�N*����6�<f:n{��
i�%�<��_PR�6���������Zbmg�$+���s�����|��Y1�~��}�S�^�����5���W�����jS)�\����;NRh*_N���D>5����06/$���Tt���M=�t�����#��/gP�L�8���L��)S�JY��_��B\������q���U���l�����m~2	��<�����7m/l�h"f�}G3gVQ��b�u�9(��KJ�^����W��������U���2��N�fX�p��
��Kvu��EZ�!���fl���MV����l8�+����;u#&6��v����������	�mk��
d����2���lG���O�8'���$�9g�5�E��hCM'^�2���a�������5�b���2f*���$
�g��0�}@J\_�.�rYF=O^m�Z����E��!����������C���s��'�r]#�v9.�TS��'G\ChX(����\�mm�`���^�&K6�o\DDDDDDDDD��5�W�����\����Gu�Um'o���|��R�����~+��U�V����������<�
���r�#�(�	:
b��t&F�m�@�^�D��������*w���kl7���������F�$��u�]s����O��f��.:�q={�_�w���
����-�eC���k
������`>����t}�i������:���<�\?�Z�*)��2e�.��w�?�e�2)�H��xB���jV:��%}�YR=����([�g�7�B��u�����\�;�EV|J��Q�f��a[H�(��2K��h�o���Y_�^3��	+	��K��bV�$}\�������R����z��������+KsX���r?��C���S����2���F�/��=��Rv�����E������R�?�}"m��������i�������3y���&�R��f��2f���]g-�8G��>a)y��#����w��$�U��t(��?����
����V��~��3��������;�%�����RS��������`6_�yW&io `�`�{����j�=��+Ix���C�=7~���q�Ni��!�opM��S��?������c27Y�4����!�A2�>�'o�J\�&�G�C$a�2�|M|�0�~6���"v7)J�����������OiPG�D"����U+?dU�|FF\���/��
:��[�����R�����g��"rr��2��?�^�CJH1�#���q���:7��3�Ncw�;���G����Gn$��9�tm�VX�ocx�d�|���VT�H\�N�u�q�6�1�y� 9��v��+�:�t���������:p*�Y�`������G�"u��uv��
�4(��&L-�^XD����Zb���wT�~P���������C�������=�-L�L&L�{���+�v�kch�������'""""""""""���k����N��`6�4��1�LY��	C�lQ��4c�YK��vh����L�5�(�c�7U4wt�c�������!Q���v�AT�
��ZC���)f��&v���._B���Xbbq�A�����?Ib�A2�>4��q~��S+l}�b����*#c��?���?{X�rR��D�=K�����nV<|�3��=~U����g5�/).�b�]N��wj��=�)y�o��������������Oi�B�%�����#���v�#���_H[���Y��v8i$7��'3z�_)v{�j����ROW��`�����2��$������a�I�����+��r�pw�$�]}��V�����k1s�\D��3����Gd�������s��	�s�j������y��/��!$"��v�����Tax�pm���=�;f����V}E���+����VE����/��wH�����r+��E�~Ws��#��Of��C������u�3~�""""""""""��i��8��`|K����L�w���n2�]Ix�9bvM�p&S{/� a��$t��sI�������^���8�N���\f'4<��;"y��d"O��f�Gl�+�\{;��.:�P5k�]P�c3��ob�6���������g�J�6��vK5�S�a2��D>E�����z!&����������	��	�:m 9n�^���%�'�&��E��^O������o$)��9{��t2�����% �i^����T�0W�0�%��;���b	K��g�3����H������� 4r$���.��qQ��[l�j}8�e�z�gU����|n��l�0��������;7w���)~v8����/c���E(c�b��-��pS�\z�~�{�=���QN�]���QN|�r�{��������('�G9�=���QN|���u���Y�������M�
��������&e��������z�'"g�����v+��"s��S�qeMc����y�y�("""""""""r��k�DD��-z*���;��a6����;
9��i�O
�y�;�3uE�N��������������H�L^���*��+���>��C���;���ss�!��r�{��������������('�G9�=���QN|�r�{���������9���"""""""""""""M@�8�&�B�������������HP!NDDDDDDDDDDDD�	4Z!n_��y��vT~���x��F����-����JDDDDDDDDDDDD��5N!��s�e}�AK���U�� -~�4i�1��V���T6�`r^��KRW�������#�=�����D.n��*�P�0������?&)�+�m����S���|��q�'o���L6F/���=�5�q�%��o��4�]������������9�����~`c�r~p�ET��B����Vz��hy��t�����pU�+N�����o���:�
��_K�����l���j����l�,���C�����L������@C#��L�q�[�N��>����V�j6�/��V{���}�A\_m���}������y�|9�'=B@�����v�Zb�t��#�u�{�����"p�.:�hcG.�:0��x�z���������M�M�-/Qj��,"""""""""""ukX!�r;+�������MG��3t�o�|;���z���Zh{q�mE:9_���E����t�����]n%�=�����`|����������_�)��e���

��c�R�O����d�����DDDDDDDDDDDD�hPi��4�e������0�����c�W��n����d��	�w�Z���ec�-�
?+�c���+)�6��v�,=�J�����bl�%��#qC�`�;�@�gd���y�
�����6b��Y�v��C�A=�������������������A�8��D�Y�!�V~��������S_���w�aQ�����c�Ca��`Fi
�&S��������a���J�6%������n�h����d��f`�����7���i����5�q#��`�|�T@�Y�z=����3g����3t]��~�7}I����?ws���W� �'���kzH�K�MJ��id�h�D��0��i��P���f��v�
r��R��&��{qv��,�k��d��H�3������L��@�k��DKQ������������w�<�E^q=;i�6��q��p���������g�����Ql�������q����z��������m����� )��UK��\�&����//id����gm����S�S��U�{�$g����:EDDDDDDDDDD����q����4���]�/���LH[�������8:jN���
�	����+���sj��k<I��d>�N��6�+���Y�)��Ebd��i�s�c�,r�bI�n_�ac�
��[�^o�Is��������7�>����MZ*SDDDDDDDDDDD~��g"N�9���:u0.�����������)i�7@��)uz����m93�D
&����������-]JI�`���_���8���Z��&W9��"a�R-U)"""""""""""��w�]D.��������mC^b���z�����]F����k���"F����������S��fN����������������2{������������������&�DDDDDDDDDDDDD���8�f� NDDDDDDDDDDDD�(�i�
=���uC����F�<�e�m���^=c.ur�:t����K]���>O�G=�=���z�{���������'�G=�=���QO|�z�{���c����i
�DDDDDDDDDDDDD���8�f� NDDDDDDDDDDDD��5��'���q"s���������$t�O���K�l�����h~�Az��8U����������������M���������9�OOg~��LK������!�M*�N%c�+L����r��E�Z~��V��9����_����5������j��{�$��C�:�m���#%�3���B���u���;��hp�
�'��������{��v:1�m	��U\5��*�T����ng�rN����3����\��?$mX,I����Xu^"��w��F�u������ """"""""""r	5qi�o���W��o�r?�>��[�������	,��C_y�v:�q1a)}����2}W~�X����l#�����]r��P��#�/{���O���
��}��
�A5Es'�^���G{a9�n��0n�C�`2i���c�+$��My�������������������_'��s�}�
�&q��x��8��_r���c�
��Zx������0_G��G��L#���?�h�{�|��I*��l���a�������dooO��$Ftw����sN�;^�o����cCx�Pb�=M�������6�7���G�3�Irv�{5G��~/��P�1�����:�^e[H��s���;~E�����1g�Q��N�n6A�nr��O���	hm�7����b�N�H���W�N�U�?���x�b���\�m������r��QDDDDDDDDDD��4-���-��<�����������+���������]�!u��dN�8@}�cu�g�V2�|��`d���X���Y�TS��
J����#���%l*;�R���l���d������q~�A���0��d����Vm���[�H1�`���(���Z>���j&���p}�a.6�:U_��H3�.������sW����
�
VPd��������D���<������4�'%�r(v{�68��R�G��o���]@N�����u���R�!""""""""""�5-�������]��?�B������/L�����*opr��������L����g!z�T�<����i�8�v'1�f���G���������1�f�:;�? ;�1���X�&�������>x`�q�������5��J�8���"3�#z/����w��)�p�f����J�kC���qv�~,����������� ������_NaY9;�������+��j���E�+9��0w�K�%��}������M{���w�Nt�`["""""""""""��iA���y��'xys�O��������k���V������z�=*;�J�����`���)C)_8��
���3U5
"�j<P7`�LX�`��A��R����� IDAT���q/�����t�}���Isa2�0���Iy�~����k��/k�D�p�(�	�b9��7��a�����K�eU�-��a��
������(=�����u�L'�S��J�0��
��
-��������. )�zB��H_�����l�b6Q^Vu�-"""""""""""S�����0��n�^��1cxf�U$=4��@+?MJ��$y��vt ihO��HU���%v<3�O}�b�����,��K��K�k7�e��wh[o���/H��b��l2����e��K3Y�d#�Y[��x���T�}��7����n��W������1n�6^�%(���a�QAye�o��;�����Sux<<G�H��l�V�z�������I	�C!}�h��}ua5������������E�� Bb�c��X��o���k~z�w���}O������E� M�I���9��8?y��5{Nm6w�')���g��w�te�1k>���N�?��q����X2���X����{������V���[����7qa�d//�}e������*��rq��M��<���y��������j��PSA����T�:�FBD9�rj'��)^<��g����%(���Q����I��\����
aQ�`94n��kP��(�Q���>EDDDDDDDDDD���������:u0.�
���.$/|���OI�����BL����dg��h���%j0�����p��i^_R�t)%����Z�J�7����kE����;1w!y�$��������0R��&�O�	3����'�����	
��9���v��s&�{����u��p��E������{�(����)�c��x������,�f�T�Z���eg�O��l*(��	��{�M�RM����L&�G�����
L&�W~z��9+������?e��M��s�������C���\�2./�W2:�l��dF�k��s����r��3Fb�;��rY�����'�G=��Ro}�z�{���������'�G=�=���QO|�z�{~=�D����C�
kK��e�w������5���@�p"""""""""""�%
�D.[��|4���2�4w���]��������L�y��9�X4#r9�B������>��01g��"���8�f`�P����K���w��%�������������4���x.� n��M��s�������C���\�2D~�y�=���QO~��[��������'�G=�=���QO|�z�{������CO�4�������������H3P'""""""""""""���������������4q"""""""""""""���I�>�&������@�%���0%����l������3x�s���|q*�4m"�D5�\�]��a~z:���gZB�9�������!��o}�J�����t �����}{z{M�ccp<�7�^3�p��|����H��L���Ps��a�1��N��/�����?�d�1z���q��NLp[B�WM���3��&%����U���Nx�U�ZZ��B����������7�zL&L����K&u����e
���d��c!�9���}�}������xb���S�)��KB{L���9}�g����J�9k��:���Sb�c��T�����	n�Sk;}�/>g���W����������{��������������[�����������vB�gf���4|L�;2a)}���q7�X~�X����l#�����]r��P��#�/{���O���
��5p]"���IY
�YR��_L��o&=�����#�N�#��""',eg�QJ��'���d<O����`������������7���3�<�(;.����f��6L�5���s��k�s�H<<�I�v4��YM��'��s2
>�t��D��N����Z����>v��S��f���D�9�� ���35q"�8��G�0o�����s�;���1��P�����#q��Xs�����$������uo��:=��Z��M~Q8lW���8�����I����nr�t�����}���L����;�3�irONI���6�7���G�3�IrN�Z5G��~/��P�1�����:�Ue[H��s���;~EnY�l#��O2��M�:�A��	��y�������H]r�����y�v�[�����lZ�;��O����$?�$IA������N]��d�_E��G���j*(Z�{����� 4:�I�l����?!iL,%���v���<�P{3O���K�z	���-[��Lz<��9�k|��H}�[�&'a7+��35-���-��<�����������+����K���� ���C��+�������F���.��[�\��w�q�U��b���A�RM��7(q���c0��>k��
���
��QhJ��M�,x�'�-���M����La�����5��
�M|��J�w�-���y;(\�Gj��M�N��1���D�>b������F�3kpW����;�����A����xo���jJ��C�
�Cbt�3j���}n�b���8����������jf�^G��w)?V����%��u�wyCC[� 5[��Z��=�Q2��$������j<�!;+���zj����X�v���<����d<�#�����f�QDDDDDDDDDD.oM����B��pv����z���c\�������B���$y^#u�������IL����Qlx0��&��zF���������;B���������3o%k}���g�w,7��|
��R*�#��L������|#q���u�G�)\���pv���=�~���i��w��jf��D���A=H~�F�r
?;Ji���N|�g�j�����\'���+0_k�v�i[MK��w'�Q������KI�[��P����k�V-� �Q���y/���v���h{����������X��u��3��10�������������^%����1��4_�""""""""""r�kZ��v^~�	^�\���q����mn"�b���Xz0n�P�N#cG�%*���AUM������r���&���l+�8�MJ���XYJ��W�Z��4g&�	S�[�������y����`m����.�k�XNO��[���TPZ�%��*���i4s�����Qzx3ck�0�NH����T_M���QY�un�+��b��t�k��U��?����x�`�[z�gjy#I���[P'4��:35���0(/sc��b=9i�!���2I����!G`�+p���~f�A��c�����������/���r���sr�
k@VW��v5G�_�����{""""""""""r�k���Wwa���p��$�c�����Hzh!�l���yd�3��Q��?>�c3���RKV��c����S_��8�D����q����L�k7�e��wh[o���/H��b��l2����e���RY�d#�Y[��x���T�}��7��u���/����
w�e5�c.�~m�KP���C-������%��Nw2���T���<�#��|��]��z�Q��bwk����fh���X���Y�Y���)Y�'Rm�M~��=�&���<�������v�J?3�AWR�o�uC�7�������~i��?c��Wy�x?E/�x�0�-�wa��"2����R~j�{�.\]��!���)))�����?�;=���Bn������F5q���������/�������`�+,��{���_Y��_,_�
/<5����A/r^~mpN�-�O^!}��S��]�I��&��t�]�]�d��O��.#�R~�pwb,�ENU,I
��f�ZA�v+q��M��;�&.�����4�[cZu�MBD�Y������d/��<���[	����i	��}�]r��l�}��?#!���9��x�/�B��kp�u!�����XD��o���MY�)q<@R��AX��c\Ti��f���G��
�#���a��?�iS��s�kG����n������|�9+���K'v�k���r�k�:��g�K��o�V�"�fk�5�v�����*��Z�u���`���O�5E��$�[���*��uH������ ��s�����f�R�o�{��7vr�M�s��jr���'u�`8\g���.$/|���OI�����BL����dg��h����%j0�����@d����h�RJB���r��o��
���SA�wb�B��Hr��u��a���M��Ff6a�O�}�#�v's�#���S�L��2�5�10�6����������mh�S;�9�V��d�|�U{�{?���0.����h6M�Ox���l�w��k�|��uEY���d/|K��8��"����^RA��e�����w`?�E������G�:�j2'e`�^8bMQ�4������{7%8n����%i�S�^���P~mp>��9�2:�Z������dO�mt��������EK������������y�<�e�^������3�R�!��C�		��e��b�&}�=�D����D�7�s-O!�����M���?���y�=���QO~��[��������'�G=�=���QO|�z�{������CO����\|�.$=2����k��lD��d������Q'""""""""""? ��[D����d��U0���P\y����
�gO#��$�\���"""""""""""��K]���@��!�7�l:�>���7�������������eJq"""""""""""""����`�9���]7��p�Ki����\VA������3�R�!��C�		��e���������'�G=��Ro}�z�{���������'�G=�=���QO|�z�{~=���"""""""""""""�@A�������������H3P'""""""""""""���������������4�&=����?Nd��������>���.����VP�2������ct���j�����Tsw=6�����O�i	]��:�[�����	�%����xs����HU������P�[����c�H'4y)����Q��W��~��JO��ZO�rF�������S����q��%�(����x"""""""""""����4�7|���+M�7t`�o���]�$������<�_E��e�B�}N��%����C��d�"�W}�5m������k�_7��@�9�V��b6���kG���)|�?�KT������������|M��;�1�6���=���g�\�|	���J�?P���V�"�����?�H-{���|��5a��ZAQ��BR�7d�t��xzZ��6G�p��w%��#<z���7�6B;G2p�2J��`�l��~AxD8�a����"�w"-��#'2::���/Rbxp�y���#����9���u�����~���	k�>�,z7���;�}�[���J��R�$��nI��8���<@Lm��A�������!��A8����w�tr�ys-O!�>���""""""""""""��iA�m����$�}��_����X��-�U�
����?�n�$����P��h���B�����ae����{�xa�n��"��������l��Yd�w�����H3�.������sW�������SR���|J��cw�!u����>G�'G)�7��i��=Z{���-���),)&s���'C����_��� uja�xiy&o����Es��4�I+�c�������I��PTYE�������{+�*��_T��l#���>J������8+"""""""""""�i���[�qw����`�ST�V~��*������
#��tm��8��E"���c�dn��\����o�N��[0_���=��
��;�J��\��!g��c��^P�������2���1��:a�l��������~��,���$�C
%�������~�qC{a����G�<DQIy�.G�rW��>r,q��v8z��O�"w���[P�i/-������Y�eJ?,~@P�{�{�-"""""""""""�5M�����O<����8~�8�p��M����m�2(�9����
��{1w�ORt5��������l�� �����h��Wg���j<�>D��m��
�d2a2�NH����Tx'��'�WSA��)��@����z37�����,XO��6X[P��q�1����?�'���LtI����|b��Lrg����%�J�����8z�������������H�iZwu��
��O�<f������b� ����/����xd�8���}
��%�(�q�7�-g��7�������NMv�1g5F�������N�U��xN��#��3d���$��F�+R���)��z^W����}��
�+�	j{au5d�l!a���uz\�e���������/+�R��-Rs7j:n}�DDDDDDDDDDD.�&.V�OH�}L������Ly���Z�E#!�Wd�y���I�V{�4?���������~D����5�T_��0w�	&}A	��
��8��O��I��Q
���t�n���8:Y�jJ��F���	6�j�8������n&�~�y�SPs33:��;US�Q�`[���
�L��y���I\�+qo^����$=q7�S ;b��Ga�t$:�&�����4�vS��a�kyJ����M��47��$
�J��O��7�0���%[9t$�{f��t�w�(��"�
�0�j��F���Lr�k��
GD8g�"��plu���=gX�C$��H�r����L|0������V)�OX��g�Ex�0�XJ���H�t�w+��D9$�9Hy�����h/��3c��8"o�1|>����_c'a�D��I4��(}�}E��qD�p��K����u}{FDDDDDDDDDDD����x.���6n�D��1����:DHH��.C�����'�G=�=���z�{���������'�G=�=���QO|�z�{���c��&�DDDDDDDDDDDDD���8�f� NDDDDDDDDDDDD�(�i�
=���uC����F�<�e�m���^=c.ur�:t����K]��H���8����p���G=�=���QO|�z�{���������'�G=�=?��hiJ�f� NDDDDDDDDDDDD�(�i
�DDDDDDDDDDDDD��_��}�M�'2wOl��@Kl}aJB*������`��v���#����S���������������k�D��j��������t��?���.�W���~H������3��j����u�"U-?����@Rl7�[����Bxl��|���U���A������5������W��i����3��<����w_�{o�����/��,�������S���D���u���;��h�`����dc��O���IQ�HZr��c�\�v@����VO���rF�������v��O�y��-�&�L�Q����$^��������~5�������l�
_�ODDDDDDDDD����4�7|���+M�7�2b�T~y�N�9��Q��mK`�N&?*��,�@���q�>A��/�*�M���c{o&�	O�_v���8����)����VM�Y/���S�K]K�|����h:�����K�r�m�]7pu�K�������[z3g�2�w8�������<�u��I��{���#a����K��z~� ��7��W7���$�M��Zci���O�KDDDDDDDDD���q�9�>��y��gP<�L�K��/O=�Z=�!����H���+�Z��h��!��e�&�J�����h������0#�]
�N%&���5�� uD,��\F�Q���[8���1S���C��$����n*��K#z`
h�5�I���N`�mKI�;���GD3z�o���Bjt�R�koO�����m!m��v'&6��W?8=�TSA���e`dZ���;00(��������"q�2\5�Z���Gxk�M��egL7P������7�zZ�p��%mmm�w�s�~='����vB��������E�
�8�=M��[([�����5����p��Dx�(�77�8�3�i�E
 IDATv�;6��'I����[��{��)Y�F�Dh����O�:�VO��
���jB�����g����uox�?��Z��M~Q8l�������g����u'���n�&���������8���nI��8� ���%&"GD8�f���J�Gx�(R��o�m�v�d�����j
&�����L�Y���rV~t�}Z�����G����_���/�B��A�l8M c�Q�9B�C18FNdtt��_��0(^6��Q�Nx���s���4u�C��;>��}f%��Z�����g���	�PT�}���*�c;{�s�����T�Z���[���N`���?����qW������4��}1�zc����W��R���w�}����]N���q�%���{�j����4��3���a�h�`$����U=���/(Y�G"��%�����:5��n	��<���]	�xM>��Q���NnO�s������L��IJ�=����.y��y3i�����|����[��M�������
�g=N��do��My�Y�������E��z���oQZZB�9O�$��?�c�1�O����Ple�I��,%��Q��Q
�
��hik��q�\k_"ue[�Z�	U�\l����e9�=���6������73#g+;�7��\���
����WI���{'I���#���@aQ>3:@��t
��MVR������d��B��p�Z�����obz����u������h�-�Q2��$����D�;��3p+�k>�n0�j�V�}�`77��:����O��jP�h��b��=���q������A����;uT��<���vf��A��"2�����!s�70.�Q�{��YU�>;���X6�������9i������������9�����MV�GT��[���i��~���������vz���/Q�������>5����X�O'y�6�s���h'�����Y�I]�)�����dr�?�p�����?�~����|�_)����y���i��[���C���dgl:�E��/xc�J����l�&�E�����^����d�M!��������������4��q�z�����5�X������ra��m��<�_���;��������b���6�-'#�j
&��d2��X��^��$/�����Dw�b�z'��kq.��,�)���2qx/l�f�#�c3J)�4p�I>�w_?0w��x+��x�;������������M~����=�0�	��x__�Wy����w~R��!����������r�;[���0o��� ��;��PC���gL���Wc��-2^���U���H^��(�����w
�;�`4a���`��}��0u!��?�G��s����{�	�7�~��E�4���c�NW�������J(��E�����=��!���2�g���(��=���5r�FX���p3������`�[MN����	���Z�D>����I��=����s�����P+������a#���Z9�~�~{(���O��'q���s�[��|��s�;���;������^�}����j2>��
6��C�!���:����7���
��+	�m�t�T�-��LX��f?��.�p�n�K�H�"�p�~����=���IDw�������1��;���%��{k��3��P�~1vo&��-zy?Ar|D�2��|W�GH�s=�
{��$�����k*NDDDDDDDDD|V���/���O���2��8�k�ms!-�>�/d�W�q��*.�h����[c�z�A6������_��"z�<�c0�O�S��6/ ���&L--|�����p'�L�_�I"�r�(�����W�
��>����R��=@+,�������[,�������*�3�~b���L&"%��s55-��]R�d�d�����s�]-��������. )�zB��H_SL|�s���?3��!'��9��%�����V,TP^�xbl0�X��(������m�_y��Mf&,~0a�� g[)�yoR��g����q�Z����6�g�Z[`2��%�K���X���_�m���)-;
�c�`��>������l=I�g!�)9�9�[00!��}���U�������b#���� K���������/\��`9��s�����u&���\|^^J9�z��X-������%K�'�em��V&��C���8�YM��������z�I������W��� B�����F���_s������34y!�XFM�K�;�1�G���O�g�l� u��_B�7<��Y��mX/��f����G�/o��
�j��=A�U�y��-X[�v��
����6���c����(��{��p^�c���&y�6�^��*�O��<���s�����0c�jv~RB�PH9��mG/���Uc�v�_��r�~m�~�t��9�UU'�>�w��u��t��� )��UK��\�&����������8H����L���x<���+���6�-W�{�`TPn�"8�,���_b����K�Y�Ma��$t;�4�g�d�N���Vy���;O����}k�����d��56�~U�OMKV�����'����*7�u�i�������`��q��$t����k��va�������|��S�����������������q�{��_���c��_����?������,�od�zgG�������QwP45��	(�U�Q��w��=���-����vV��e��w���5{(��3#SS'Di�-z01��&c�����8H����\���7�7��hM�?�(v{�r7���Sz8QAI�g���	j��_]B������+��0(����;�NV��������s�a��O"f�J��!,*���,-�<�9/�W.�b��[0���-�C���~�^pD���Ev�����_&c�����l7�w�cy������N�%����%)�}#;����Zy�����Gu��|e[�Z��R�<�������L���kZSA�����OpF�?F6l�`[�y�����a�����?;gp�G��X�,!{�Q�9B��Q�MX�}o�c��m�������"p�4K��$DT���m\�c�������b���f+wb����t7�>}�zSw"�>eU�F�5��2W��
�������Edl��[����O"k��'"""""""""���A�HsiC�o2�����M%&�=--8���F3V�����1wJ��*���Gt�� n|��i$�y��=�4rHs���g���C<sM�����NR�����{q��kG��������Lh��G���<�p>�������&&�Aro���r��D��V8����w=�|�9�s	Qbb��T����Q8{<3�>�s�V�
���1iD<}co�q_�	�I��c�������]C��-���.{o%�������wc�6��&����Qw�$yMbo>���k�\��?E����u��,Q�I�t5��"-��j����l>��t��h�A=HK����G��w����>��j)�������3�x:/�)!�_7�oh�c��$=7�����\M���Xz�������sh�{������U��dN�N���1���w�?)�'��G����$����`���u��L�s
���<��>�Id�+�x��~�g��N����X�<�#�&�;�C~�oH����-�2nB<�?�E�
v�� 8��w��,}&�9�'���&<�Ax��d��Jd���\/�K���x.��C�������3�R�!��C�		��e����1��XJ'�E���s� ��"+�UV�&��������^e��Rg�v���'�I�|�z���������'�G=�=���QO|�z�{���������z��8��s�&%�v���]�p�;��X��=��B8���l�sX/�p"""""""""">N_�����gL�0����&��������L���RWv&��r�`.��EDDDDDDDDD��R'"���f������y��!O\��6���V�%Z�RDDDDDDDDDDDD��6l�\�".�
�;\�DDDDDDDDDDDDDe�x<�U�q�&z����e�Ev��!BBB.u""�B�|�z���������'�G=�=���QO|�z�{���������z��)EDDDDDDDDDDDD���8�f� NDDDDDDDDDDDD�(�i~Mz�	7����=-��-��}�)	]��������������eGs��4m"�D5�\�]��a~z:���gZ���Y��}��jr��#c�&����[1���/YEI�j��3�6����^���n$-9��-o�\�v@����j�W.!�p%�~Eh��)r��{;���Usa��}��Dp�)�=���,����������������[���;'��"kXgL-������U�?���L6F�����g�h�k�����i�[L��-	��'�
��Uz������������l��{�z�n�|����-R:`��Ar]�����C���0]7���B�f:���P�����,}��L�;O([MJd7o�.�g��c4�w5G�q���{������������\$M\���������3:���V�U�=8�W'McXM���W6|@�nr�������|����x��E������<�u���c\�\+�@��|bf/c��[�c�=8>y���G���������AL�	���!w�F�uK����=�-(�;�`�`.|��}u�jJ�����5������Q���_;�O���|�K5f�@��O1h��f����r���skl�6��v��v����+�\U;����/N�����.���V��9S^�j�������J��f�������EY���M"E9�`��7)(�2�&SV������l7��*���mF�Y���iw���%�M]��+�~�J�b,	�
4Z��dH�AQ~�
(�������t�5�s�u�x��q^��k�+������������oO;�q���M�x``$L�����(���+���;����$D��h=��M&-;����|yj���c1�[����va#I:��
�*#m����������FB�H\�LBt�[�.lI�?�t�<l�:�dw�+#k�0���$����q�3}�f��a��\����(�f����\�_���E_��V��W�����������P���8n���#z�:�g�`��c����H{��:U����:������7�0+|������W�����x�����=��*��3dM������5���l*�A���X���9������][����*������]�`��G?�	lAQ$�>
Ued-x���j�]�����c�F-����F3x�
�~Y�#���[������`�C����jp}NbX�'��v�!�	�5��z>��8��66����_��,#'u��0,�v6v}��S����<����6�Y���"��;0���q�~��=H���0&.���XNkw�U��X�?����w����IxcSM!���z�y^������(��`����O����J
VL�wP{����=t�����)�hX!�Q3��I��X�l1S�<�����d�q��;0U��j����1u�f��&��������(�>�c
���:�������������g�&g[���`���#h���l��9��$��Q�[I��I�OOt�Pb���#�R�����q���~!gbK�^�_��T��V}��"�	��]�T���)^�7���"x�b�
���:�W���������@������s:�������}���a��a��v��������4�:v!�s��:v
cl�R�&���������"B�9�)�7�;���*#}Vs~���[�!g�_0�� �G7>^��~����4���Hn"u�R��	}l
�;a���/
�E�Z�Y����fQ:���l�#o���dL%��
5������9	�7���dv�.��]KAp�uq���Kx��e'S��H�����:�6�2d2���#��=��i�s������\5��%�LX�K��u$9�,�g����L��)��>��`���+�wY�������k���w7����Z�C��/������[I7Gy5������A3?%oK&)c���e����EDDDDDDDDD�S�
q�&z�����x��������P�-��W��������-��z�S,������p��O�s���M@�v��-�y������	k��XB�����f�!�%�T\�����G0a���}��t��.������A=C��<�����ObG�������2���D��a��5��I��&�O�1���������[���:����w�'5�f�����y����pzA��HX��~x=)Y���22S�!<
����r�;H��B��"�d���	������Mw<O�wfGu��o&��
�8���?g���s'���5���]�Fw���|�+���F���'�d/���P����>��8��6v�Gth)+W��
2������n����[��	p����k�>Ue�dd��1�������!�`oU��f���U�d��d����s�<b�^{�z������^������<<�����)G� ��H���[6��{��j������,�JDDDDDDDDD��iX!��m���3��]��#�p�~������g<�>��
|��U��6Oz����gN������'~D7��0Q��������������������C�E
��pr�+��n�o�C�k6��?���S�4������`�%���ZN~��	;���HP� ���G��b���O��A�m�3��=��c"�_�)(�����0 ���Bs�v�*o���V��M-0_h�{I��6�/���'H��\�0tS��������g4��9��u�>k�����p�<������-���{}*9E�I_�
KTV�z�l��L��>OM���5��������*��h2�,h���[�}�U$���c��Q!��'��M8�����3^���[��b�>�����f�����[
����U>'s�e�����_DDDDDDDDD��iX!��N���+�w'��c���:bF$��
-:�g�r�r�O�Kqy5%���;��������J]��o���mA�D����7z���������;�	)�Y�z'A�GT��������^���+I���v��g���l��b�Gr���b%9-�����&L��)u��>��+��q��#!�%��~�����m��|�x����C���Z��s�\p���"��v��m���,Y�����1��z��^R'?K�e��>�����?�i���\�w3����u�P�.������w7�m>���k���9���y���3^��6�5�0��N���k�9�GT;����.=��*7��_@[S����������E��B��z�)�,d��o�`�����)?���c�����V�p�@Ugx�����XB��(�����J�������WS:6��}+��P���
Y��,g*�|�S�p�'?�AA��kz ���=�DR��H|h����q��������I-�������W������$��1a-O;�U�����3td�d������~�s��������j�om���t=����_^�����XKA���Q��o�Aa�_�����������5�WQ�z1�
�^�)�k�j��,����;0��cir�5{>��|���6b�Y;k��a�[��}XI��I$d�B��?d4`�?���?1g�����������qg.�yF]UY+���.O��~�����`�F��~>��1�p����Zs�{;���|��~9��I?�����X~�����87.c���s�+���B�����m��Sd%���|�
�j����H�����H��{�[o��kB���	�9{���C���r;�M9�k�t��$�m�m�z~:�+�g�����!	Cb���@����
�3�$������MV��y�j�m��������v��� w�KD4��=����������9���	�>��dp��g?�Lk���!��?��'���)
�ChS#4j�}��X����=[��Z'�{)IO$�Z�k��8���e��J�v IDAT,���V��"��h"~K�������4I����(+Z�uq������AX������3��_,$a���i�pm�9�I��0��
�N�,����|�������������t��$����C��v����#l
������uW�y^�FB�Hf^D)����5��a(�������P&3���K��
��#�'"""""""""�����7�rScsv&���]�0�"��o����;��re$b�o7��h����?��<�rr�Rn=�r�y����x���('�G9�<���QN<�r�y�����d�zU��;k�gI/�����������n=��y����QB�=I��$��.�2��3����B�������������
q""g������'�r�!""""""""""�I��RDDDDDDDDDDDD�0l��\}���P�[���!�������������������7U������=m�;�����G``��C������('�G9�r)��G9�<���QN<�r�y����x���('�G9�<WCN�5��������������%�B��������������%�B��������������%�B��������������%���wq���	��y
f_o�1��cxvP6�w<��%l�����#�T��{�2�II,Hz�)���>����\J�����v��w�'����y�w���^��������?�/gThs����������P��%C;bh��/~��R��X�{��ql~������f��W��\5	[���Y���'�E��d����.������:F�����O��[S����x_k8��"�;�
b�Ei�[�4=�����ym%��
E.�z�
1|T�
���x�������tIS����v��2r��J���q_������W�%�.w��E��s��{�KJ�"""""""""""���q�8�����	<00�&�e]�Og>.r��}���_$����E�I|l2i���G�0���J���8C���O�A@�W�w����U���!�]����s�XLs}��}o%8$��+�������1�Z�1i/�f��8O�B�*#k��m�Oc�u� aq.n�8^~������~������)�j��g(�����j>3(����p�g%�K��wG>f����������Y�_`��I����uy���5w��n������m����W�o���L�����������\����F��rO$m:��m�{�|�.����S������G]rr����w�r�U_'��6��W���5\�����f&a&.������b�Z<'���=[J������������!��YT�[F�����K��
���0a������|�;�S�ve�F��O���)���_<���3���0��W��k	G&�:i KcO������e�����z� �f������}a�Tb�~�}����y�9+��q�^�4�G|��o��r��X�k��$��'�O��q���y��V��G�/�3�"������4�^;I���6�������u�y��q_4��7��c�C�4+�����_��t"��m7���V���?Nbs��C�)]����I�Nb#�k���]�Fw���|��q���x���������Lh
)pV��}��OH�bd�������c��N_ENI)9k>���Q�#�b6w&���:�0S�������a�c�A�E����G8];H������d2�o'?��uZ5""""""""""r�V��i�?��g�p��!��_q�i{���~����jA��g��z��U�����M��?�c��Vw��d���W�9��,�K��G�Y|1��<A����]�k�E[�������`  :��=����Y��������s1 ���qL�~q3�����*?���wr����C,""""""""""W���n�D����|w��=��#f�@[t������mj��	��1kiE?������9T�(��)�v��z?LM�v�W��GBFK�g�Duu5�b��<��@:��lG9���'��#�����M�]�����8��p��������I>*=Zg��O�!�F?L���r���]�\�����B��z�)�,d��o�`������,�E�K�*pW����p+Y����ra,�O����?���f��a��W}J��<����C������Xs�WT�3X����c
#��p�'����8�T�!o���EtH))S�m�YI��g�q���X#����RV������I���5�6�n���6���$/��f-���:m3V����k�����u����|k��S|��������������\�X������:���-$�������0�y�v����0��Z�=����Nep���U��2h9�G=a�i�;�s0�!z����?�:|�X�Hf/����G��'����<M��o�h4a
���=������|{��>�Q,�Gb��-bi������'H�s����;�ub��a@�?`
	f������L}&�2��Cn���L�����J ��C���aL����$��f��)���5��5�N�F/BC[b�jA�����%b����S��D��s
EDDDDDDDDDD�3TWW�����3����r�!��}���a�\t=y���('W.���('�G9�<���QN<�r�y����x���('��j��:�DDDDDDDDDDDDD.�DDDDDDDDDDDDD.�DDDDDDDDDDDDD.�DDDDDDDDDDDDD.������;���e����������������Y���S��������v����l��}^�0D���<�r�y��+�r�y����x���('�G9�<���QN<�r�y��s5�D[S�������������\*��������������\*��������������\*��������������\^
z�������`��c�=�g�;����5?�u{���:�A#���xq��p
��;RI%���/�Y�����W��	o~&���������2���n���#)j����'���[F��<Z�����co��y�=��U�Y2���6���D{u9��O�^Rk���Hk���z\����5KI/����/��9C��c��6}{WM���!�AR��Y���PI�����7�|w���|�5pk���|��k
uW�g�7U����f���O���a�6j���U�x=����d|[��+�CV4�t�:,/�?��wI���<�n�(�A��$�w�r�ou}F����-%d&����Op�]B�����W���������������4�#�]��4?�F�����+�	��c�7�����?������So�\ cs�a�8��':���I]�;$��:\%+&�;�=��m�:�t���87�N|������a�LZL��(#}b���N�el���O��:����?����ib	���>��v�v�e�����a3Ic�0jQ�����,��V�/���X#��|N�j��H��l�=6�b"ni6���!z�T�K��������LpH��n�UU+��Q�t->7�{�kd}_PO<n
V��������
������6�zu�]�[�a$e9���/!""""""""""W���5��=���}���3����^��>D�O�p^+#�����,Z��}*v��h�%<
K�2R��Tr~FjF%����;��}���#h���m�$eL����]�w�25��>�+��������DJ��)��I�3��p��L�� ��kI����u�����r��-L��K�6�Q��7�iR�nb���Dw%v�
�1�+u{+q,J`����[�����3g3}�;��#�����;���h-��Z��!�
}����������$
��B�#���c(��8	k����8�3���n7Y�&7k�����x���:s=y��@��xR��R�5����J"��C��Gqo�I�a��DDDDDDDDDD�����M��/{���1��{����y��Mm���`�7�l�F����TS�\ c�~D���rU.� c9�~�������-�����^�{=�����w��|��_����=�iA���3=������6���L�=6���wH\�E��������"h�pl�k�&�F=��k'�]�z[B�ZC��7���%�V����
).?{����>��I�C6L^`�:��H?2���k{ML�G}kK�����;�yu &��������=�~3�K�����#5c���H/h����k>�m?b#C05V1WDDDDDDDDDD�jX!��m���3��]��#�p�~����	l��.��aW~1�8�3�+\���r��m0���S�)�N��mX�����;���U>��j�2b���cb�\���GH�t/�POZ��D�K��q����)$��������u����"��)~�J�K�sXw�'�y����`0���w(8g!�M��?�.b@@#���/n������c1���^x�r�t���������f��OB�N

]��;)����d���g��,C�������������a��:����8��D�c������=�@__z<�]��������zo��K��:F�����`g#KV�$��v���V!��������[�W�/'��e�D�S��2k�'(�yb�[�S���(L��1��������>Zs�h&�����d����Rw���}@�^R����x>*>Buu5���',^g�37���I>*=Juu����O�!����br}E�����|^F����\F���:���o/Z������Vw�������DDDDDDDDDD����B��z�)�,d��o�`�������
����x���$���o{C������m�4�v�<���������!=���!��pn\�J�5��z��CbFM���m7�n��k�����d��R�������b��
�6��9�{�_��L�Q�*������;�!~���y������_�3���j��W�9K�n��}�,��a;����_������i���j7�Z19J���5I��H�U5�OS���b�\Dr��.?�'�����_0��=����6u3�*p~H��\\a*EDDDDDDDDD����B��C�"a5`��v��tF�e�03��������>1n���=����q�P��~�~�L��34��S��V�
b�K��APTz��e$��$�����+��[b��=1/M#��5`�[�
����6i=��9�������w��F��_�8�	�+����r��q��d��)���5��5�N�F/BC[b<���
����{�����g�����N<�z���=�y�N�C���`e��	m���7>������u�{D�Y���.K��P]]���@l��������\d���#00�r�!rE���y����\��[���x���('�G9�<���QN<�r�y����x��!'���T��T��T����6W_� .T���.w"""""""""""""ge����M�6ggr{O��C.�}��x���"�z�<���QN�\���QN<�r�y����x���('�G9�<���QN<���mM)""""""""""""r	�'""""""""""""r	�'""""""""""""r	�'""""""""""""r	x5��G\��}sw^���h������)/-��*8Tq����2�	��`�a�������������x��u���������,HJbA�+L����
!�����{�g�u&���*���*YO|G�� �y��k�_3��C��,)<Z�����O��?`��z\E��d�����;����i�o�����=�F�~����Y8s����K�c	�=G��������f��W��\5	[���Y����
m��q�~�U��XOg�����c���������������f5pk���|��k�\`;�����\O��.�6���jc���lR2��s���!+a��x�C:7���w���b�(���s�$MM:���i���Y�*���}�o.#/�\}�P����U��b��������c9F�IDDDDDDDDDD���q�8�����	<00�&�e]�O�N�����������n8�@��X�|q��#
Nt�����wH�Zu8���������`�C�5w�i]Je����Y�_`��I�����6�zu�]�[�a$e9����{I�� ��`�!�X����n7��OI���Qk��9�h
1�h���3���::�s�j��I��Hz���vC0qE��)����`���W�~��	�,�����8������[�rie��7p�T�X0�Q>&������]hUed-x����i�C��$,�����O�4����00��8e�E�G�����P�9I#��|fP0��-��:��*�_�,�;�c�1c8���pe�x�z:�:,��9�F����zE��W5]�""""""""""r�jX!�Q3��I��X�l1S�<�����������h�/w���}���M,�QX�������C��H��������!��I�y�LG9K�P:�q���i>��#���WV.������q3���D�#�����������@%����_oa��\r�9H�:���O��c �������������,�������m����
(�u���2k��$o�H�+f�����D��e$�������F��$��!��L����V����fQ:���l�#o���dL%���X����N��/d�KC0���KW�k������P\\@�p�Sg�Z�M��0{H(AC_eu��������!y�����<�Q���2��6���9����&��;�3�f}Lq��$v���q�������k����H��I?f��o�\�2��o�/�:J�""""""""""W����M��/{���1��{����y�������w����j�r�;�#:����rp����Gt7��8��'�;�{����]�G�{��5U���3��1 ������Gld��(�AZ�.���f�hBh�#��v���z���q}�Eq���/���?�q'����.�G������
},=���#`l�{BM�q���`������^�)�8�����������t�q<����5��Vw���/�)>G��t���|�`vTWL�fB���PH�����s~B�#��&���=��w�*rJJ�Y�1�����3�/m��������>��];H������d2�o'?����^UDDDDDDDDDD~;V��i�?��g�p��!��_q�i{��p~��lC3����el��aw�^�JN�v�Wm������	nJ���8wa00L�~q3�����,2w�~J1a�=�m����@��b�L�~'���M�3VR\r���wt ���r�����w��G�[��������	?�Z[�zAE��xF���������5W}Sk���\�c��xr��&>��*�1g�{I��6�/���'H��<����������l��N"O!?�q���d:G��9�aY)����L���_sL^gSDDDDDDDDDD~�V���������I�>�/l����	�1�)?����]�H��e���,Y�����1��ZE#~��X�?�G�G���>�W��35Ng`�m�.\�'�5�RM���r��,��(u7!���V=��@��4��[a�h!�{K��I����a�m�(������w��5��������
W�������059�s&+q��#!�%��~������o>�gS�	�p7��u�O��u�v���	��ur�������N����F?L���YO�������""""""""""W����&��CLye!��|�������H����������p�0��3���Y�(�����V���A��'y��5E�^R��c����V�h��PU]�M����M���
����&�o'"":��b	���PU�c�?I������������J���F���=1:�I��{�����U�������g�],�O����?���&S��A��>%yMnjr��|��p,��{KEe=�U�(��7��0����~��^J'�� IDAT��M�Y�'0�����RR��*��������UM�F�������=U�I�9����k������}�`
������|W5��`��t��\�����B��C�"a5`����;�ZE2{�����j�j'q���-O�N�H���aL����$;;7>������u�{D����jB�SI�/ �OW�[��:�{b^�FD��g�Yzv��|L=�
5�=v���[[��|�O<@��oN/^
�m���$6��;�*���&���Q�A�	���!O���[1MX�n��|,f�����W����~$��a�"F��z8q�KIz"��=gyN��
��_'��t���`��N�������g2)���:����^�M���L>u�Sy�3�C�D�}[^"VK�z=E~H�M9g�PDDDDDDDDDD~�������Um��������\d���#00�r�!rE���y����\��[���x���('�G9�<���QN<�r�y����x��!'���T��T��T����6W_� .T���.w"""""""""""""ge����M�6ggr{O��C.�}��x�������s�Rn=�r�y����x���('�G9�<���QN<�r�y���hkJ�K@�8�K@�8�K@�8�K��A�>�"��������@c����lt'��,��UY�+;�w������.7\��EDDDDDDDDDDDD<\�:��TRIs���l$%� ��Dw���[>��F|���II<������U_����W����>nA��h����f�����YRx������S�w%fi����J��,%����g����w��$m����9w ���"�}������5����C����>�U��x�?�w�~RG��_��(��%���U�E�u��+X�'��9G�%��U���`�Cn��`�p�[D,�Ksk����~���f��AX-7b0����{�x���y��5k0����`>�����h
1�3j���|��,y�+����Yu��6 �Ue�O@;�k��*��Z��������Wr}B����m�_��s��aOM.��~�������7�����{���/��������\1���������4D��<�������P�p�����1��8t�g����#���#R���f���m����YY��u��t'����2��E
(�A��$�wy����_��1���[���U�������������jA��_��j_L�s��{�KJ��������x�o?�L��%��U�'mbS��_N^��7, ���$��$v���
��T�����O\���.�����Y���i�G����?��g���7wR]]M��
�]�w��T�F�&�u�!�{/Y�w��W����
�b��������CU��&�����s����/g,"�U>��G�tb���~g$��
5�[]M��X,A����H���2��z��{����������yi`G�!���i~���	sYW�x������� ���8�~�(���Y���\��������G���*#'u��0,��p��y��?�!z�u!�&����������v��0qE��v�8?g��wLpH0���H��������!����}hM��p��d��L�����C�(wUY�d@h+|���{	�s�-���.'����>?�Qs7�ts����6�zu�]�[�a$e9����,��V�/���X#����#��^X|�_3�W�SN�D�o��Fp����r��1��OX���-�������f�"f�[d�~��C'����:�v�.'�B��`�}G2c� �{�"�����o{���^��=�-$kH0V�pf����Z�r�c�e#�c;lC��VT���\��,Q,):���������}s%�G�����������>��_`@�zn������(��`������l9w}NbX��������O�}%�K�3��;IZ5��>]0��	��(��|���#�Xyz<^F,w<@��QX�������+q9��uM�a#I��cMl���A�\���.���&y������Y3�������S�XD|TI_�%��4�_��L�qO~���^#I�{�:#uG>����P<�F�d|_3W�+��=��������_����=�c6�`j�������e)q]��9�<�w��k��;��i�������/nf�����n�s���������(���I��v~��sS�G�Hz����������5n
b����!w!�O���a��F��rO$1c_`���L�� �~���=���N�������W�������B[S��h�%<
K����g�fTbo�_��(�J�M�Y��oF�Z�W�Uf��o�y{8�+��8���=N�o<k�|C��u�W7a�����g��O	���+�v�_	p������:������_�?Ft���q3?!h��2�D����Zp)ZC�C�(��
��<r���t��$��m���>ny���q����Q��vR|����(�	��#n�NJ�?$����i��O���������H��_���E����0o�����v����{�����O��i>��#���WV.����Z�����3�yr��C��<���L�������&'u�x9����o�%g����C��4)�����1!9#���w���������IY:��S;�*)�����dpX�S^k����oJ~�8��2j�	k� o[�;o%a�l�����&�~ 3���5�d��{��������_�aD�:e��-�ND�f�Lg�T�HfF1�YS������$N�M��,[�zw$v�����H�����m�xnAacH^����%$�}�9�����������}�/l�����@in��f��m	���I\���2�������=)X�J���w2}�;<VO�����p���J��7H������j������8�����DDT��u5g������vDG�Z��r��|��w�<F�G�����r)�)��;������������X������t�3$��S7�����������\F
+�y��q_4��7��c�C�4+����"�9p]n1���s�`|K�e��n���c�~D���rU.� c9�~����_�D�N�������� s[l�����n��Q\Zw�?%�ad���
`lC�C���m�%�����U�d��d���L�?��z��3��<9�9������>6,R����6g���s'q�0y��� �"��|������.����f������������4!��5o{��[[bj�{��]�����z�H�_��z����kl�6$c���n�W����uH��������>6���y����j�N�y'ii�:����q������c����=�v�^��
��7R�,�)8�:�3���B����0�d�|������������D���Z`=���> m�/�^�^M�?������*q<��u@���������K(hw7����������;�M��h������.����������	�5�b����������O@Ob���l4`4����H~#��c���7�	BM0� �gS}��6�2,���!`�[$���r~�Q$,��N�y���[,}��:V���_���U�N.����9������
����v�8���a�|7���p�������`B��gbB������Z�\��SDDDDDDDD�rjX!��m���3��]��#�p�~����	l�����aW�A�v�s�ik/{�����2`�����S���U��DEa���{������0�0�?p����g]�)���T��s��fLUe��-��*�y�R�1}���B����&��z
�{I��6�/���'H������:�Cq�"4�`0`0����f

�)=e\w�~J1a��\2������.��9#�����`����Pp���y��	�`
���oX�������������7w�~*hRk������;1��b���������N�8��P��u(���5$)$�LbBQ��%�%��(��b�
��mF���ZC�Rr��ZCRW�t��'�L!m�VMm��25cQ�(9���?����:g�)���{���������_���d����(+�YN����c�{�,�2��N�=�M�sy)7�����k�0r�~�c��4r����p�oK,����u��J�/�qC����O��dw���Jd�"UC�ex���`�X������+���=����������eP�s7@s0[�)��{O$w��b�>��u�� c���^��|�#�^�E��x\[���!'e����t���3`j	6��U%��?ei�~l��z���L��^>��w�<8���'��f>�43�o^�������x_�K0*\������)""""""""r!5�������3��&���C<��r@��`��f��cI|(�'�k�����;�/�DK� bX��%K��L|�c��;K�V�V���Uc|����� ����6��������/(~�/���������(��Dj��L)���C����\w��o"�r
��?���0��������:u��oEn�u:��.7��n����,�d�+�	����-���N7�&��#q�n�t�B����������3�����������b����B��R��:*�.�A��Y����P������^�e&m���E:�� K[�^������8yu``�rn�`��������u�R����{a"�5�������/�F\���+SK��+(��?�X�)�������
�n��g��]5��&L��\�q��:�0�%����W���oW����Oc��L,=�g�k�)��`� �6��M?�|����e�P��Nq�����f\mq���s��3�#�����r���yF4	=�K�����;��������=~�
�z��l�y�r�r������p��������>��@����g����W��9m�����e�ko0g�����	h���1�y�
2��#s�b��N�R�-$��r�l��C�9v���dj;q��,]���l������p���f��E���y���&w�a�����Z�$�����U�@�G�0�Fx	���[6EN��c��,��uh5����~o�&g�X�.�q\���ul�_�2�[�1v�K��-���~�M���]�].�X��e����I|U87z��jZ`�{?Q{��������P3�0��~1���&l���(�]
��Ed,����������o 66��%Y�<�(�~�<n"&�4v�ro���w�;��H�(g��{9��(uVzs��#��WJiY�`��B(}�er�ys�.�Kj�,��]�}O6��C&�:���	�X�/�(�����?}-���������)}c���t
����Y�$�v����gc7y���
���G@�v��.��U8
��������ejq�.����0�{-�.x����4��a�s�6�{�oKB#l�y�5�SZX����2�P0/���y���j����*�#�[p�k>�;K��DU�&}��3��@�R�g;w����k`>�6J*Za��b�[���s\�G~����Y+J0����l�!�G�y:���������������B��CB����D�oj�(:LI|�E��������P�����?�$��e�����6�Wd��_�[�G�����y��u`����J2�\O��O�9�A��GIT�pr�%)�E��T��[U{���I��4+Fa����bH[���v���s�R��~�n��X���A�o�vm������������(z
{��1�T.!9�UJ���v|9��D���I��Y��2�r;q=��w�}��U
2��Ly�>���u;�n!ib����Z��O(��7��f>p�����|w�st<����� �wg��\�}��$��Ll�S?Z�kg�0�Ir�����#I���c:�~|��.���B���7w
Y�;s�����dv��)}�a���}��B"��-�<|��q�L��"s�r���d��n]q	>Ww%m���UK��t;[9�5������t������3�d�����?R
�^K����9�&�C#I����g	���1�k!��7�g�`b:]~�%@M�H|����_������7}+A��x�� t��$�������}3�bM�NB����!iC~���o��|�^{���������|cP(	����
��_w�X��yg����K)���o>Z�>����$�^�i���H�[Iz�n�#�������q�>M�y|w�0]�V<{H0�!1=��z_[�Dg����|<��j3�u����G��C��={���m��\4�(~��?�
�e=|��e��f��E�&M&&P��v����)�;�q�(&J��w~����G9iz���G9iz���G9iz���G9iz���G9iz.����_��3v�pX��.�Q��bn�~�=�]�"��k�8�f=��7tp��M���E�DD�.S;b��P4�%�E<�����c�~���[���-���P��9ejG��v:
i�T������`�&�B"""""""""""
��&""""""""""""r�|T��s��8Sm��zn""""""""""""���x<��U!n]�zn�u���sl��=�m��B�!"r^���('�\�m���4=�I���4=�I���4=�I���4=�I���4=CN�4��������������y�B��������������y�B��������������y�B��������������y���O��&��q���,���fXz���������s�N�����a�C��|�M�"""""""""""""M\�:�~���k������`N�_x:�#�+�`yf.��4��^f\��d��3*�Q�r(_Mr�>>>u^&�l����g����lQA�����:s��O����c�o��w�T�g���?��T����^���c^�
�Ft&!{��Y�
�K����x��Y88�+{2�����X�HX����;�'o�S���
�������i��f�$��������Y��_���^7
�2������""""""""""�h�\��?����c:�~���?��j�����64���������1]G�k���x���w�7�^3G����.f�������B��x���d�����_�.Nc�jf�����c!�S�1��}I�.;��6��r�2��`Z}���/���������;w��y>	�W��{_u���p���������� """"""""""Z#;���{?�����s��Y������]�r>��[� ��w���[�=tn����+B��#�f�����S�
��g�q#a�a�E�1u��bJ�{��n'j��w���Z��N\E�$9�����7xg
9A���;V�%�z=aQ�<�<g�/��c9iC�	���C�5�y���}�I{h"��9$L�vy���p������\a�;��������Br�m\F@H$	P���|�����"lh
�q��n��������$5�7��k	�R3f�y��
$yXzE�Lp��~��0��W��8c�lz���<�!�EGL��I�����*���a�FXD,���:������L�n����'����
z���LY����4�'o����7w�v��������9�9�}rg>L|���;.�P0�����������.���Q��������"��I�@�'?@�2F��34�^c�R�>2OU�f?A��@|�,�����[����0�
�?K��	����iq��#9���n��
�v�!aDE����O���EDDDDDDDDD�Bh\!��+����I�,-����g��w�q���M�[��zj6�����������;���o#o��d�ua�l�����$���m�jJ6�rlY�����#��E������8���],\�0�;qlc�B� ��_$g�D"�/m0���w,c�"�'���iR�q=Y��Q�q'F5`�&k��XX5���op�?�m�,����h����	�v�c��,�u��x~*�V]N���q��K���)�������6�&e��=����J�A��Gd��<��T���"f�r�:xE= IDAT6�����N�?B��M�������y���n�>��n�!�����h�P�����l�I��7QdDf�zJ
�"fo&3�|�Q}���I����n���%�����o�|��$�ZD����]=Hzbe/Ol0�[A�C�q
y���%��zk�$g������������,�9�1�g�_"i��N|��2YC��L�J���������G�S�	�E���$u.'s���0�YZ�%k_'f��]�p��D������>e��I��1icgSjK&}�Xc������1V����������G�z�RW|	����(���t�g�_�1��Qz����������������k\i��������*������++v�4����<������BB����V�7?GQ������7��wu'����m�r�F�c�E+���}�=�Z`���mJ������Pp	=��������mO\�9���wl��l�J�� .:K���G���ojG���X:���X:�I��j������GWP��5�]��ubz�����(;�c������e�����A+b�z�);�bL�� [O��_��wm�5�Nb�����=��Q����X���6����&����-e'_���#1��z]�v�C���,���F�����f 6���w�:�7X[�V,]{`k�%.�z>BZo73&�y\w���m�����a������������S����=E��b�v�h��;
+�p8+O�9c��l41tt<��>���Q�1��QT��h����?Hr��X,������'i��h>{�Q�}���^������to#��kB��K���;�@/�����.""""""""""�F�
q�m������r�t��O�����m�y����n�`�~�����M]�4�0�m��T�=��y��[1_����v��@�������#�YM���.���c�W|W�\��Hw��%�����d���I�sS���p� L5���	s`�����$�	'��>����W���"����f�����K���!x��8*�����2f����	wd�?a������o��_0�����s������~fK�k0_��vy;�N����c�C����]��sm��tu+�gZK�mEl��l��e���������kcLf3~�;qW�b_����L�QV|||�C�����{e�615:�hA9(.����p|c�,w��|���7��-��ti�y��z~G�.��1�j�p��wDDDDDDDDDDD.���~����t���z�g�^N��h������pE���x��n��i������$f�D�+�N��u���|MX,�:be�<��]������:�����!���������d�Ec�wpL��`�p���6p����o9i��kH��\���u3
�k�&k���O�����x<|���b=Q�����G_di�v���#��)�\�s��y:*���k���>��\��y&Lf���p�k��4����lVWl��q���x�Tr��PS@4`�*��������d$PE��$R��eJ�wx<*7�%�����s[�:�IzqE�����*;^�%����S���Mqa	�z�|����=��z����qB�
��	n���y�Wg7w""""""""""rN5r�����~���2���������6�����2c.^���)�t�W7�4R�;7�������{��1��Of�7�c�0cl*��HPxw�{�ai�����^!s���/�xR'�XA���~�.9k����]����1��9%��GX1�-��\�9��:�U�+vS��kDW�&(�����(3��jR����|o|��]�w�
���������C����i19�}��|vK���z��XEi�c�d�[���HlU87R�����`��i��H������D�KL��d��l�z����������������U�q��Sh$a�������eS�4�<EQ�����]d���Y*���O�����-�����l�n����7m�)��6�=X"�%��j2�������L��e;0��a���������m��������*9�Y��oj�u�x��v�1�MJ
��������Go'�f',r8K��`k����`�L������H\������c����;���`�
���� k(q|��;�[��<��������=2�����G@��$��U���9���I^�����������(z
{��1�T.!9�UJ��g�����������&�E��.��5�N6����p�4�Z�#�sO���y#�!1=��z_{v������w�UbB�'��s�"{ckYS���F���I����RM����G���q��Y����O@���C�'(�~��#���0���#�����X�M������"����ATD$Q���m3��cR��y�}�L�H|����_������7}+A�������D�&v%g�
�4��+�9��S�4���Ly�>���^���������m1����f��o+bG?BTIvk���R��%�,���������������x����l]�zn�u���sl��=�m���b�&s��,��+�8��-�1����Ks��v��]��i���ik^%��������3N��r����6=�I���4=�I���4=�I���4=�I���4=�I�s1�D�n�/�s5���H��	�j0v|@�#��ng�|��GU�����������Z���Y��������������S#�i�,w0.ei�~O��������I���BG&�i�m�I�>���7���CH��[��x"""""""""""?C*��/X�'k��:�_��7�b�9>i`w_z��s|Z�EKS��������������>��\� �T�k[_�DDDDDDDDDDDDDN������
q�
�sk����c{���m��:��B���G9��Rn����QN����QN����QN����QN�����r��)EDDDDDDDDDDDD��DDDDDDDDDDDDD��DDDDDDDDDDDDD��DDDDDDDDDDDDD��F���m���V��	�6��;�Ab��8��C^�����
�_�#N��� d����q?P��Wy��ox>��ET�jU1��Q��T��H�k�x��Yo��O�&h���&9��:/A�XR�}���tNRE��l��U���[�o�Dq���C�H��LB��szT�g���?��������t��|���������,�`���K�����^�����Y^���MN�����������}����)�@Z�
���~�bl���$�:3r�����k	��0��|C��Pg���e�����z?�7W~V�P������
R���r���C����l=��������������5�W��M�U����\��9m���������`�����%��4�mD7�������������#����x<������y/���#i��S�*��3+����r��h�9�L���zE�w��l=��fL5=���o������`�Z����RZ����o�B������E_$s����w^{y}�������� s��X�:����r�*��9I�9�{�mN��oSv�f�U�X�,�MSIx|����@��"����m���������O����������������4�+�r�MUs*6���O=�3s����++����_r7����\|{P_�J#��"4�>�m&JKqWT�X��"n$,<���8���������0e�:2Fb��-TT�b���	���C�7a�����M�I���{��HF���f<��O��FXh�)u:q�p,�@���	�����	�9��w����	��EJ���w!�S$a�wY����?3v|���f�lW����m����DrsH����w�u�[�Nph�>#�:�^�zM���P0�����������.���A��Q���>�3&>e	2�t�UQ��	�=d#���Yk�}�"����JB�[��_OX�2>����%��������j~�-��C����EXH0Q�'���p�1�����{Mu�>���F��nr'$�����:�^�DAy�=Y���wy���0z��[[H��O���!��=2�~������L�Zw"6.�P�~���
�k���'q}o�U\��]5�8��c�����A���X����(�O��<WEDDDDDDDDD�@�
q?���=8�����R�f��.g�ERd����m�����.����}��?���w�M[M��bV�
"kt2Y��f���:�H|y	��L��%����,-������5�q�V��?���>0G��������Q�^~��_U�Jd�b?RW|B��|�t�D��t�+<[�<��N����������;1�Zb=�����.�bA@W�"����u5��VQ��m�;�
l�#���H��@h�8f/�b���1�fF�S�6���%�>���+q��/�_"i��N|��2YC��L�J����z�q=;�2��3q�%���^3�������!%�%�����icI;��b�(�q
��?��x=����1k%�j�r;S�����W�����M�������������%��,��
y�� j�����Ez��G�>��>E��/$�����U;p�!fWI�W���E���a����3J��N��$>�7�\6���U�[�����Hu�~�	�h�R���k�q��IL�t�)^1����P,�>����mY?i,�����Q��[ampv������������'�+�5�ru;n�)���w�������?WPAE�� w��{*Zpe���� ���%9#n��/��N���
���d�
���V����({^������������+B�&��xl�����=	��n*�]�g���q;IDa�S�{I������������Ml����1���r��H��5���A\t�����h������]��t�������i}6y���SrW��>(���3:���c��w+f_��|�'������b��)���>�3�@��QX���y�B��V���>��n�b�9r	6(���������}	5���kx{(w�6<`jEh�H�'��:��y����}�;{+_��{�U��e5c�5,����c2�	�Y�|n�s��=Q��l#7w;�CG��Z,�����(zq�}����������@`wG���[F��EQ~!F�!��p��$r���i}����7>GT�%�yhf��K?��X"�#�W}������f��,���A�����x�/����i����G�L�E�GX�h2�����b���q�8���x�%l/-� q�~��W��ru'�Z������� {>����]�p�
qr���u��{O����N���c��
���p,��G����������n�y3G��|M�/��p���q9��l�|�]ZS81���u8e��(s�!/�&�j�*~!�������1��/���������V���^��>c���p/ge�m�y�{���������

�������;�������!��St�V8�������#�E����������|}��i�{N�G\��a�����Vf���-0���;��_o�qN��?a6_v��l�&�F�
�2(���wy%&s��2�$����������������RW�t�G\YN��f���x�G���6�9������'*o�`^O���dm���"""""""""�t4�w��t���q���yll2O�n����i��m	���9z�[Z�0��g�#R��%1�'_�w����v����X�!t���_�y��9sC��p��>�����}�9��BYs,�`��#����*?|����$�������Wc2������]�c���E��#q�n�t�B������,��2����
��=���\x���(��Dj��L)�����s��������1�u
��n�}X��hj���^�� �������l����Me��u����������H��2��~Pw���*�����q�� )� 9o�������1�E���Y�}c���d�WooGS��xr�������q�Ke������������+���#�Iy�_�K�������h~m�����s�w��
'�������s�D27�����n����Y��������-?&��hW����V�`�M����CT��z�A��{�:����y�nr&�e���7; ���^&w����]8���Y�=�w������-���vK��>Z�p��D����l��X��O����_V��x2��u��ej}6�rW��w�"2�m�}��p��Sh$a�������eS�4��j2\Yu�@-�����l�6}xs�U1���z	Qc?���=���Ny�'q�
���P�d!��p�����#q�F����"kn�TQ��	��_����Ft�X���?B�
���z��������������1�#a����)Kvxo*��9��_�gm1��O��l�};����DDDDDDDDDD.���D�kZ`8�q��dL~�R����x�������	��	����.������B*��s=QV����t�KX��!���,���3��}m�aZ�'}�����f�n�!m�/6���0a���XS�v�n���9��Db����y0��X��kM�5��>���	08@��7nqM��"b��������>�:]v�CM!�`3r�������o�o!ib����Z��O(��7��f>�{
1?�u��""��Nn��$E���J���#�����X�M��������D�&v%oT4a!Wa�}���/����S_��C�����6��	���������tf�a��N~�_���k��h�o�Jb�/>]�b�G��`�oO����X�&�"n�F��[	�������h����k	��t��~�/?�����c�>�u�c�"kL�=M���p0y�O#w�aL����`��/�]B3 �nf8"��"��N~�����������7�x<��UE`]�zn�u���sl��=�m��B�!?+U?{�������j�]���<���3���Rr��3��QN~����G9iz���G9iz���G9iz���G9iz���G9iz.���#ND~��,����K�K�Jn�~�=�]�"`����Sv��������������T;5��4
�v��O�h�K��x|[��1f?t�e
�1�iw�F�&N�8��0wL����_�@DDDDDDDDDDDN���9|>*X���A��6����!�������������������Y�����Q:9����C��m/t"��}jz���G9��Rn����QN����QN����QN����QN�����r��)EDDDDDDDDDDDD��DDDDDDDDDDDDD��DDDDDDDDDDDDD��DDDDDDDDDDDDD���������K�CI�a�_��kx~����Or�oF��s������������������4��%�x������3^`\D�VS��A��z���nK��W��H���.|��a}��\�������GO&g��:�r�69��i�9�M�����&t��e�
���������4����)��.!���8�����@Zt8#�}y'�M^�J�3�����??�����������~/�0��|���z?��xv������������9��B\�~6}VM���re�������G�is�����;i��s�B���{������{H_���N����o>��&S�>�"��T}���/���K~Y=�(��w���}�����BT��l��g���4�n
0v�f�KK)=�����c���H�X��q��k�Bg~J��?`5����1�����������H���B�!�T5�b�[<��S<3��l8�4e��� <�hn������KL� ��f,]������'����I:Q�HF��~1��}�d��Uz�Q���wFXh�����h����'������27}{|�f�+4���_J��op~�
�q�p!�$LX@����9�9�}rg>L|����\�"#���w����Kj;��0c�-y��8��������=| ��
�v�����<��-?b�X@|���5��^��y�����
��{�A�j��> ��1� IDATh��c�o	�A��.�f��cH�.�t���
������Bp��}���`�_�<��NrF�L��kq�����O-�:������S��S�F������+`Z� i�M�MK'�y��c���N�������a���U;0��&������<0���p�Gw,'mh4���wu(�F<O����k9i��'wG!�c��� �>�������g��c�3����;7�qL]S�H�P�w�{|<'�T�X2�^��E���s:�Y���q���Q���Wtc�c)j���s���R��H�]��������:o)y�p{�����c|[@��8�!+o%k��=�������E���a����3J��N��$>�7�^3��I9�}�����c���>������(2�a��"���������J\?�*�	~���%���f\�����e��AX�W���<�����������43��c���@�)���/)�� �kd�����w��3#�;H��*I����������������Q�q���$��Mi`o�#<���_���p�y����H�]F��DF.�#u�'�l�gJ�M��M����>��P�N��E�{j��l�~�����\���o�M�5�u�6�P��9���H|��\����*<P�o
����C�R����S�v'A�Ebm���Y��~#���Y������O��Ws�uUQ�B���LY�����d<�����e�F��B;�1{Y��]~��&k��XX5���op�?�m�,����h?�)/=FL�����G���2�G��rzLk�'!�l�VS����c���L��O��
���Isel]D��:�CJ6�'kT;J6�<vDDDDDDDDDD�i\!�Y���q�MaX~@��+W~��/k]>�|[;m�����I�����MF~mW���#1=�0Xz�0�3�-[���r6�::�P�N���y�(*wQ��}��$�g,�N��\G���47���;b��c��&����.�OV�NZ��+L����Y����}��To��f�w����oq�����~��N �}��a���d
9r�*��J��Bbf�c\���;���Cr�M���]�����&��J��3�V�����0T�"w�����������Ml����1���rk:���z�0��S,��,x�<n'�������:R��R<7����B�;+q����Ob�O�/������/!��0L��t����e�wo4��#	G��������{����N���DY.Z`�;b|?�x{���kjG���X:���X:�I��j���(��u�����>����-����6%���<�����$�*���R�;���}?�m�p�DDDDDDDDDD�|i\!��57^	�K�8�A�����m��][�H}�-�
��y�()��J��$���6l����@����GL�f�*]�z7e�615:|||���t�.�8��`6�^�o�5G�����2f����	wd�?a��
t�V�x���������[�Z���=�~\�~��.tU�?&=%��}�W4��s�)���`�>@YE%�������2�[W��7���7b2��9���r�7.�B����{�@s0[8�g.�W�g�w��l��{'���D]����_PZX�9�'1��qS��c��BL�	��,�:#mD9S2�w6N��?a����%�*��X�����$�	'��>����W���E8�����
�����;�>Wt!5�s��T��'�m�'��~����_��F4EDDDDDDDDD��j\!�����?��������d�\���w���6����J}��[�Y���0u	%Z�RN���cr���Q��1���'�=I��n�5�L������&��
W���vu����
<O���U$v�K�������b7��%
���sGb}���)�����Hx��'\]���$N�D��S���q}��=��9G+|+q��������]5i�H|m-K�T1��4T�;�`|����� ?���h����~�*�l���Lf�,m�{���s�q�����s}�YLX��J7�:�f��90_����P�6���a������B���Sv'a��=��k�m��$\�E��jsk�d���U�3�.�A�W6|�#�� ��q
�����!7+G��)���&,�k����:�\��hZ�-'��Q'�U0&sK0\��_m�.?�""""""""""r�4�[�_u�7)���Ks������\j����e�__g��wY��<^|ra���9�b� �������-����#Q!�.�����]����������c�I��w�"kn��=�(]�����Y�{�;1o�f��o�z?y�F�����Uu�&���I��.hj�{��0��1�z�W�Ue;�����CP�c��l��00�����J�f����`lYDR�����;���5$��	��xiI�VW�;z����b�6��_�+�'6����>�'��/3e�.lc�KX�w$v@���L�>o��]8���Y�G�)X"�%��C2W�`��w�\�
K��XMfB��������%*$S�.��?$c�n�����T���@�l�o"i�H*��%g����w$66��%Y�<��T�~�<n������h���pn����+&��e�k>�U}��%��wc^?�����2�0cl*��x�����

����w�Y[�b�"���)�s�\����3�N��\0������./z73��^�������o"�5���9����Hu+fS;_~���7�q3��0�M�JP�0,�`�=���]�t>�,��nN��������rI���=��cM�-�4�]�?�k�&3���(~�;�~/a��$����;Q���we��P���eJ�?�/�H��S�]q)~������:f�0sw��L%h�����z�SG�9��������P�����?�$�f�B�m1�[(�����kk>���Lf�����v������,$���[�'}�x��z=A!������	0�� ������`��:���V�Dz����F���I���b{Is���2$��Ha��G3���AZ�������/I�9����`
���C|���e_�;��� ��V�����(�g�"vl�O���G����Ks��dM�A���f�9���]�����]��O�Ise�<�qC,d��&�J���9�(""""""""""������Y���p=�����a�9�g���m{F�16����\�V,%����9�l~���RN����K�mz���G9iz���G9iz���G9iz���G9���>.�*}��gup)g�r0��$e�r&)��t\-����V��U�6!vCrK���������F��ml�B������KMk|�e�����&��1(jJb^���?�{�>���93���;�I�s5�D*��B!�B!�B!�h��B!�B!�B!���\��c��<��O\�f!�B!�B!�B�H*��B!�B!�B!�h�E��]�F\��={]�&!�B!�B!�B�&U]]���{������/w3�%v�����s��!�B�+�|��x$&������t<��Gb��HL:�I�#1�x$&����R!�B!�B!�B�v �8!�B!�B!�B!��$��B!�B!�B!�h��B!�B!�B!���\�;|��7W��������)���[M��M�Y��S���6�{�q�^w	�,�B!�B!�B!D�w�q�R��W���W,I}���������>���m�+s/�Me� 'om���.M����]�w�'��t*����3������n��r[�&�u�{�1������q�����������Q/�Bi�[gN�*�?mG�~C��y������������fV\|{r3�U�@�����8?.�����"��?({V2*(��K���������pm'TZ=f�$���������2r>���t�m���P�Tg���f��$2J����/=�x���d:uIb��{\��W���`��~q��� �m��!�B!�B����D\�1�|�����p}�.��Hf��0��z3��?�L������� �(�P�C;',���{'K�|�l�,�)�����Y�*�7y>E��?��C�Y�"���N��tA���,'{���9�-��
��z_�������TMc���]��O�uqM��O��TlN�u�vs��6yNP�����_��!O��@>��]�S8r���b'���S���������6;��
pn_���?�u����.O�����������V���3�S�t�x��=bwY�� ��)Y>��jC��!�B!�B!�l�����W�]���:/<�,���&;�zou�j��T�����g������7����������,���i�
��9E�d�"L�B���>���!�r7��@L����L�j'�S��b�l`T��FI�Z�3�aT�?*_�qI��i�2�z?��������V��:�e_�Tl&����g�0>�e���0y��9��)���2����Te���<�v�A��8u����%_���q����B4��u�9v�5��$��p���D�H~{�S��0n���s� C,$��}���s�r��	A��	mP�s7�P��s���!�2����E��v��r��>8�����|��\Z��a\����!n�������l�����Ti��i�
�nR���A�%��`�1SY8�A�{�v���G"�����K`�����(�a2c���I���u��kRVK��g���h�`�0m�������"���s7��[0�O$u�����O�OF���/�r��12&�0�l�r�`
�xv;[�3�/?����%���D'm����������;v�e�Z"�L$|�1l/�s}�M��Z���]�����G�������#l����*$-�?��%���;E_ z�llU����e��{�$��y�l�KO�G���{�$�Z|�V�8��:5��aX#L�����#�Y`���!�R��ec2�����6�@�x&�eT���]?W��FR&����������[}<�;�JB�=j�y�������1�������wd�n%������I�V[kC���47�������	��jcm��1l��A�)�L��7pT�0�?����U�V������;�s���"����Yc�����������Zm�I���Q���xc�w�+���;����q���������1�M@!�B!���vq������#8�������}�uk6r���f��c2������7_�������D��C��D��fa�Q��]~=���z���
U�x�t���m_��@*	K���>D����L�&�����
��e���7��2��y��]*����RW�UI�,XEJ���)8J�7N

��!�r�����%xp�r��9��K�$l��`K)%{�����U3�"��I�Q�*-�2|)�{3��?�f����E0�eJ��O��5�)��v8�a�������*�������������e�F
w��)1�����Vz��IIZ�#�EJ��d�x���cY�q������0,��75|��4����w��>q�A�1,�������ol��BTXlo�_������C?��97��4f�F�T���g)�g%{��{f ���p|_>�.^A�����6���'i�������L��D�@#q�7����tmtJ��y����e�6��e�8��E����*��J�D�;(��4��Vn��]x������d~���>�������9r��5d�C�k���|��C�����v��8��Cy�C��a_��7|I��M���Cr�����J��q��y���d�o�����h����UhF&�t����O���",~HK|�t�6����]�$�7?s�����a6���l���B{%���Z����
�{?�����#�1kL��l
���#��f�=��BW�}�`��c��)Y?	e��H������~�����_�(�3��+IY�>����y�8F�L��$�����������MxN`[�$�_E���
�_�R�	�'���jkmh}<x����cl�� �����U���$1��9�9�I��ef~)%��I	vRx��d����Cp����hv�nd�3���U���%33��o�W�;���Y0�-T1v���������=�(����������H�?���e,�R��������B!�B!��2]\"����}t��uZ�!\��Q�
P�9o._��'�L�\/7������uQy�o���"	1�j}1Xg�Z��]��f���b�a����t�>{��]j&��&�O�w��h[%U.Jr��}��H;�n Q/�O����i�&=���P}������5��Lf��'06;����� x�$��N@W�����S��7�}�3
�Z�r����P���O!>�n��b�2���G:c��
3�t���h����F�i�>4��^���G���v�I�����l}v4z
�������8�����S6�I���8����������>Q� x�}��i�5�c��3��?����=�)��^}a�r�l�������F>��G������=�Rr��������0�6��g7��8AI��8M�z��}�&k��=�{���
FG�Q��}H?�r�V�@3��a4���������>��&,��F���MHU"/����}�����3���>=�L�������P�2��-D��d���XBzz���
��q3��md��DO�D�V��/�G�G�y�U���ag�[�N�#f4>�� �c���!)���;��<H@����io'��H�������1~��+�&���������
��Z?�1���C&e�Jyi%��/qo��yV"a�����b�wE%nOW4~�s��^�
=�>�W��>�V�x���}I����o���B���}���p����w+Q3��@?���O�W�>*�e�����O����9������;a1������9]��G���d�NP���i<��������T�}���=�����A�~y���$n#N~}�L����m���4���=������)Y>�Oo-�B!�B!�X������[:q�����g�G��7����gC�[X&I8���t�8��d�����jo�)$e�4�O�xWk	�4�8U�k��qq���TV�aa�����JE@T*��������

g�JnJ3z.y9����b�7h�J����~n�����m�{���U�RYu���I�����bI\�������.�Itab��MF�g��G���X���������v�oM��w�8�
��.��{\�q��O'V����C� y��J���I����� �����	N�F6�������7��5tEs��nj��Y�����[��y*�!O`���a�8S�7g>j��N(U.����O}��j|�=��G�~L���qX�I������
$j� ���J�lI�y��J�o�d��}��h�u��^�2��\
��Q����E#p��=�����Y[��py|�4J6�����������s����T��#2���>�0j��8��Zz�[�g��)T��Y:�?�LL ��I���~
������G^��Y�IA����qz����Y���1!h;�Pu����P�#��VE�@���	����{U���oBq��>�F�hm���b�����\�A�E�iqjMw|k\��t���>���jP7���h�Z��~�kT���������c��ov�R����K��*��������m-N�?�����=�?3��B!�B!��Y��D�5���_��A������������RJ��R��o9O%��x|<X���-��gS*> ;s+�FcF��>�,����0vG}U����I^��Un�VK���K�����5�;�O��n��5(nw���^\v�Mh���0^�L�QY1�:y�{�mz�ZG���nW�{*'p)]	��n���f��O������l�^���.���������d����������v����h��SSWG�����Q�K����Z�9��/�@|���������bn�<7�����Z�0���>� IDATj<��_jq�o
��.�#���x�z���k���������8����q�q�r�B��E}U/�o~pv�@QP<�3���3���
WS�c�pc>��������]�^��i����2��������N��F�}���q��,�b������M��@�S��Q�����Ow�����k��Vw��?��u�I{j���[e������O���X�Nz�g(>=����zg&��Y��D��[^R����o�G��#��s#)�.�51���������hH�k`}r9YE�,�3���;gNO[s���_�&k���/��Q��
��=���7==V�T��5
D��g�w�d��}����-[���)�������0�� �/���?PWW����}[s��8u����h�3C����=�����B!�B!D{��D�u�U��,_����<AD������-r^]���������91�?��I!�U�'m�#$����d�r��L�>0yo��TJ^�
�R�b�7~�fh�� *�E��l����|�3$,������hvfz�%���h*����*j)9��5����Np�������oe���� �7dP�<��6��6n���9u�{�h_K���2I�s�{l��yn�����>���f���C��y���TT��[;S-P�#��d�~��(�(^B�ey����B�����5m��r��b��ye?���#�|t=K�ak:��n�c����m5��-��w�?I�����:���Q���a�;y��k��8j<�M������0������$��{���q�����iE�i�k~x�# �z���x��9F��"����|�j����;��#Qo_���C�[�Ua~�������Ux+���kHNZ����V�e%��&��(�.}���C���P�EO�~��
�!+#�����O��|\��ugv�����f�2?�&N��d�Oda���L�����/lN?��D
h�&`���`�Z*�����rx���2���
���0���U���G
�K�I��Oqypn&y�/I)�
u�!�����OC�����o�f���r-%���n�Y��M�6*h~=J�kC���1Z��'���������R����'�s��
�{��V���\���/������}%�>L��[��C�c�j'�;�TZ�pkq:k�7���W���cR�?D��]�=�'M�8?�B!�B!���qB������_Dp�
�C���i��g�#�U�iL������
��fF�6[��,}�n4�����+q�z����0������Z��!d������Q�]HX���X]	��'z�&y�XF������I���
u�]�l��M$�Ta|2�U#����wOL�� ���X[zF�9�w�.�6�Zt?��`"WTb�;���Q�8�(c7���lZEC�aF*?��h��n���_O���D�3�
5a��l��)��,Nde�hR&^GzR�c���{�a�1g���>�b3�1�,�u���h��D����m5�[��6����5�Bs�s��dO!X�iv1��0:���&,��~�T��a��S��=��P�O$�}�7��R���y�f�>��:=�l��c��u5��$�����������s��:;�t���/����}�����	�c����;�8����>���)�f����>r1�lz��8,~���El��*���Hc���������0M|���0������;�y��:�3�O���	����9hf�N����AM���P���2��C��[��X�J,��&��p��eZ��v#���t�shs�d4a2ZH�������$k�g���%�e7�������As;�Q!(N
���n�h�DoK� L3P?�<3G�D=8������)�L����&F��{��LI�{�cD[��h&�yK��%}�Nne�7�.���u�c��R0���+���I�������A��o9��Ww��0-�?���j������M$N��i!=	�R�����h)^��D�]C���X��qv��Nbg�S>k8�P3�&�u�Xj6���
�-T����u�~f����`T��Y�<��g@��ms~!�B!�B�+���������~q!w3_�f�K���#�����^��YIdLQ�Y��#���9F^�xRTO��|�������,��l��4��-�V������+��O?����T��,��O���ci^�sd~\����\si����a�c�o��V����(�������1�)D���t<��Gb��HL:�I�#1�x$&������t<WCL�"N�+�����,��&z���T��6)���<s����U�Wp�0�#	��A�I#������
����&a��:B!�B!�Bt<r�W�+Y��,�M������r�-E�}��J��\Ad� #�@���X���s?��������-l�'~�N`K��q2%�������o�	!�B!�B!.)��RtWC��B!��|��x$&������t<��Gb��HL:�I�#1�x$&����B!�B!�B!���v�EU�����r7A!�B!�B!�B�6����C��O�B���;E�#1�x$&������t<��Gb��HL:�I�#1�x������B!�B!�B!�B�I�	!�B!�B!�B�$'�B!�B!�B!D;�D�B!�B!�B!�����������:���~��wN���j���������up}F�z2�^w	�,�B!�B!�B!D�w�q�R��W���W,I}����������s�������,_��<7���7�����4Z\��'y�LA7�R�	�=c>��N���+> #�C���=
��x
�!|���^]��'�,j)_9_�/�^�������U*��8�������8�m$�&6�����������O�����<s�O2g�[���1������q_�woJ��A��8t�r7����q�������	Z��({V2*(��}'A9�-s���K7>�e�B!�B!��r]\"��{>�p�}C��K�D$�dz~�2i�\~u�~ps�?��r���]�F���{'K�|�l�,�)�����Y�*�7y>E��K�8��e���j�3x92����}�mtn��]v]��k(����8v���r
��������O��o���O�4��,�UJ��^����d�L�v��Y�?B�~
���4b�����y��A��R�|���qA�{����$c9i��8��:
��'�z ����Pmf��,���.��l�u[!�B!��
vq���]|U������������o��h��'�����|�9������5�\q�P�8����ep?
�!�3'����Y�iT(��b��;�7DZ���i��3�NT�$u�}B�
�J\�(	TKy�3�
�G���4.��=�q,!v��)���f����l!!i�7���+P�a{�w����4.��*=��z��L�������D�H.�
m�t��x���ny\Odo	�^{����z��]���L9�Y{5��7������myi�g�6��PJ� �B`����,�� �Q��7�='(z��D{�����P+��KQ��d$>��-��:#�i�J�������
�:����ha��-8=�{')a!D&%;�nL!�`�H�o���O�OF���CJ�R�A��'���E0?��t��+	Q����6(����)���=o�0f�w��1m�o���y���&�dZX\�C�����L�����l(�&�����5��&�$�D�6��3'C��&Q��'0O$��������P�����0���
f����t�X�����P�����^?��Ro({V2*d<iO����icB��v����
8��j��L�K������nw}��G��D��B`�	����L������������F{�/�aQ$���z_�!�f�O��������[1m��y<��\�t�x{_���6�(���`�J����M$���������Yc����V��:�������*o�f=Jd�CP �	��;=n�v�l�]0�[�{��K_�W���`b7�������#�S���2���N��Y}�l.��3���e����5�	��.mx����c�#���2},��� 0�H��
8���3��w�{q:�Ipz���}��(n�O���)�I	������*��XZ�'��a�4i6	F�5W�T���)��%�8����,���0>������R�������/n$eR8��N�����K�U�:�3����f���R�,�B!�B�+��%�~�������v(S�J"��!������M��g����p���u[q~w)�,�
��5���I^��mG	w��@�K�=��+T}�#�1�m�S�}��$,����i3~�2%���O(��7,������{�<��}@��w�t�KJ�HI\E�1��S�Eo}��71��T��Dy���%,��}e���%9w7e{X0p��K���L�o��u��}z��Z[��<�!b����7]k����tC:3C�o�^�ii�����{[�R�������:����Mba���rU�1������e��-#�����o��}���x���#x��TV:H��!{�B��z3i^Q�����+S���9�[�7w���(��Q��H�%������(9x�o���^���,[�	�t�	�g.����u�~�����2e�����E���>��\���c��Rh/�$�q\�#9�@
>��(��\��D�U�&�����������d�z�����_�'a��[J)�k'm�w����O�9��a1X��I���7I�9FaN!X&b�}Ge�{T�:��;�k��V��TSS��W"j����n����{U(NJ�_|�	
�_�T�������;o'%i	��)9z����q�{�e����Q^���b#��J��@��gI+=����$�z��m|n/ 5�9{Qu�f,��a��������	��NV+���J�L#��%����O��~��m���x����t����Q���F���UZDe�R��f����5�b_����_��S\���+f��P��]�mR��VPHY��X���l�'(��=I�W�d�������T}B��������q�>n�������z5����g�~�#�/�M�>�lW>	����\��v��R;����T�!e��lXD��o1>�3G�����cPo_Bl��m�l��M���H �t�<_RX����R
�E��$m�
m�E�j�w90�{��]%lM�I����9%'u�I�K��(V��3��F��z������QW�P�"��b�o�0���&�6�t�W8
��q�JR���z���������~m��
!�B!�B�+��%�:k����A��]��`�����>���=8k��r]w
����8���U�8O>=�.�!o��82_$!&�@�/�R�����2���FK7��q�q����g���K�������N��b����EI�����	c��
$�����6�0MS��/�I�u�P�����O���_7���e��G�&��
q�X����-���SP}���R�c#��#Y��A�0#�sw%���cE]�����?"/��+z����*�>����������n�c�yd�������,%G�,?���h3z�p����'(�}�i"�Co��O�db�P��s���������h����*'n�4f@�������y(�YGz�g(����_Y0�?����1��G�h|@=�A��j)��V��z�5E0it�>4?ez�����9���WA^��'L���t�8��X|>�~��'���J���F����|oE�s'y������8FQ�A��	�����
��j��8����Y�+����-w�9�mo%��#������sw9N����3�	C��>^�[��gG����AX/���g��>4��^���G���v�I*w��]{/�#{�Ow�S�&~Xob��+Z��lZ��m�q�����W7��0�6�~����/���k�J��J��1�l_�xM��Fj��Fy�%�����N��y^CW�O�R��U���D��v,#���!*O'��`�������t.g%J�~lE_�@��@�#���B�O��q�Q>=�����Z��g�]M��H�j��b}�~��Q^u�w_�0����u��1j���e���	Jr��y�������~�c��.#����5�+��)X��G��
�s,v!��,��s% d:O%����$���I/.eR�n��K�e|��HX?-��#�o�]Q��s"�C�������B!�B!�W��K���b�-�8P^�w|���#�_�]�
���B���?/������'�t>�1N�3Y��)����[�j
I�<���@�%@�p�[�������/SY�����g��
�J���C8�RpV�A�������_����J�lI��[���A����9��go�������+q��L��@��:����tEc|���O����}#�j�a��v�R}���9SQ�& @���P}���������(�	l_��<�q��o4.|�h5�P�\(�7�5~�3�W������I��K��9��������7={=��\��RY����k�l
7j��8���O�����������A�<	�8�t���_�pm��h��TV�W��2��Jw�Q��2��sG�;j�z=8?�v�z�a��Qc|*��E����#F} ����.=�X�����{�q���2�n4�);TN��nX�
�='������J�J{����B�����m|
~��rC��/\�mH����	�>@�q��O'V����C� y���my���O��j(�s��q<�5^?s��F����F���^c�����X6�^���*������0��E��I@q��>�F�h�ho�������qt���Y�����'.�/�F���V��s����	�.��4h}��j<�b�Qp:�������~{�ko'��S���	��h4��?Z]��O�s,�5���\���*6�����I\I������Y���1!h;�Pu���WI8��������B!�B!�W��K�]����o���x*1�9��0.�~�����_�p`��y�7����]��G��Qu�hWJ�dgn=�\&u����h����7FW���J���������R{u��Z����7�:
���pK��0����o��i��]�^�����9ye��g�Q�j
sln�����~�gw��@T�m��f���_k�Q�����K-�3�C����w$�b_OrAO}M]]5{�`����Q�=.<n\�S��%x~����N��QP�k������d����?K��\���F��d��T��V��O�*�&����5n\������v�����5����s*'p)]	����ie.i��<����7����E�5
�F���.%�aX��We�t��4�l�E���I��#~�|���a7��l%�����!���m�a�|;a��.XL��=X�~LM]u��3��&W�$>�	\�]�����@MMC+'pW��O>�����/~����c_A��	�gl9^�n\�o�{��h������;o�6������������0�� �/���?PWW�������_��_�&�Dq�w;$5�O�7'�9���Q�u�\��G�~f�����v7|(�8q�t'��G��>jt����O*��k��������A������O���s��)����6�\�>zGC�V����r\3�����M����������},�B!�Bq��D�u�U��,_����<AD���.����77�������	,��� �#U�'m�#$����d�r��L�>0yo��TJ^�
�R�b�7~�fh�� *�E��l����|�3$,������hvf�Uz<��-��5i������@K��7�� �_]M^��*�]�������-��������fA�!����-��E9Fy���\�����#�|t=K�akj����X�{��Qs����p����]���V�8���:8�'��y-��R�_
�6$l�h�{�Ub���$��{�����OQq�w��f���}�P~��rpy�U�_:7�<���|�=��L�o@����=b�~3i�z#�a��'�0�`�u-�������29���I"��>X�A�o���y�[M��7l��%��E IDAT�{�����V�z��;�\���a��^++��
�M
*���z/�/���M��0�-h���t���L��D�7s�o�[��+d&�Z*����������w�K�DQN_�wTn;�Z��_��s+� _B�D�m���������=GP��K��� ���]��u��m���w��Mzn
����{U�����s���u�wok�������S��}��ZS����T�O��b
����S�����l��Q��_�9����?�(ux����������V�Q�\[��g��D�����������d���e�Qw!,�])jj������pi�����=�%&�Q���	�hmm�E7��K7����*��>���R��4��R��)���)T�p����-�������u���K��B!�B!�W��O�	��'��~��+��n��
��e�0V��y�S�����o3	��b��-�Q�>~7u_�V��8�?��S�����j@���sI�;���[Qu�1*�	��	��0�.��'1�L�o��[�u��D��.D�d�i��T��?�B�Kc��������
�������1:T*5��\��0]�	�Md:�I��e��������n8Q#��{�CD
l�]^�&�H;�(�����&{
��@L��1E��Y>7a��;���b
�l�B^�I���H}"����1��:���7�����������pA7���F�����7�����W;qy-<O
�p���H�t�0+q
��[P��n8�O����1����l4�����O�M�q,]����1M��R��`4�l91�k,K���w�x�*_'�a������c|2�U#����wOL�� ���X{y?Z�K�o��0��Pa��
��c����IJu_�f��T���q��CM�Z�-q�1����6�����@��Z��Nph/{��4�4>j��N'J�AT�	s��d�fN	�dq"����3R��a�F�+*���CT�n�O`N���% �H���D������L���HO�!r�����=�9��m^�Z�:�C"0�gc

�41�#�3s��<�w��F5�9�k��������!����E���
$$�����Zo�O�3�\��I@`����X1v��Z�RP �Q+���0��Lz�=�P{�q�{��os�f n�rb�+��"  ���Y��i_�s�La7c�N���q�&��h%O�`4a�B��v��S�����!����h,�����dl"�_�i��s�/fc���;��>�4g;�!!�����b
3��!��Qh��#�����xg�����c!�B!�B�+������*�y������/w3�%v�����sA�Q��$2&���,��L����Z�/<@��_�5}��U^j��l�?1����������K������1=��G�~�x��=���k_��|����S�6�~2�_c�S�W�sEc��q��1�)D���t<��Gb��HL:�I�#1�x$&������t<WCL����B���&�����ui�G�C?���J�rp�������.������<��$.������97�>��u�q{@9�y-aC%	'�B!�B!��l�z:�BtL��Xg%Q2o���y�9�x�U��|I�^w��r���(���86�h���q��t�23)�������IP�������so+*.���I�%e��]�����8'�o))����+H{&��U�B!�B!�B�����C��O�B���;E�#1�x$&������t<��Gb��HL:�I�#1�x���t��!�B!�B!�B!�l�E�_Qq�{��B!�B!�B!�?+�5�����S!�B!�W���Gb��HL:�I�#1�x$&����R!�B!�B!�B�v �8!�B!�B!�B!��$��B!�B!�B!�h��B!�B!�B!��\|"������D�������J�_/^C��?��!��7B!�B!�B!����"q�R��W���W,I}�����������������!��v���������$O�)�T*5!�g�'{���=q�d�|�������#���p�5�nfT��Uu�|��������U�2��]4O�;sT�0�i;
�X����^]�4�m$�&6�������������Tm&!��Ju���#H;x�1��IJ��D�;�~m�HJ��A��8t����u'�6�?w�|�����p^�����l�`)�Yf��y�w^(�0u��06:k�2��-8���uL�q�1SY���3�K�x���	�2����
_��Q��HmtL[��O4���S�9F���&�����IId�����cT*
�T������y�& 8����]����F�����cdO��6��vZ���iv�6��X��0y/�����\�	�V��:���;���|�{V;O`�I�o'�����&�;�����7������R���6=km������F}��c3��9����c��3O�O^�� ����c�����|u~������	���cw7����w�cl97L#P��s���iA�1�l<��`z[U+�!W��GJ�Lz��|����\b�naZ����hmo�s{��0m�=~��W�!������^U�rp=�z	�_4�F9LZ�-h�}���`����M���Y���R���|Z�+��5bC�3j�f�{&}��g��]0��������g�������Y����M��}�h���3Vm&!�7�/�mz��h�B!�B���K��c�'��o�w�B��d�L����o���������,�8q��;Y���d{`iN)�o�����T�����)r��M[����z�C\�v�7.G�E��
���a�H%���K@\1����P��������r
�������H?�|�m.F?U�Xh��tW)�{]\S����2���g��]�o&��O���k��x>q�����;�b'��[�{�|���
[�?{wU�7~�C��9S�3�C����$�Lb2������l�b�)�������������Yy����`�k0MP1����Tj��d�X9$���A�G6������3����u�9���.t��c9�>��'��\��Z���H��*�u��H�����sX�s��ejj�t y�����t��� ���$��a�������u��YL���e���3�3?�q�������_%��}��]Oqm���255�������|�c$����:�<I�k��2���>iS�������7>���1����AWRku�oYD�+���y�\���,�aEtw�������{=m)���c�m?B���pl�#f��\�=�7:�WU�s����WD�5��E[pU��E�������`�C�,��,
F
���Q(�m"A�C��g�����S�u�������9[�}�,!����~�%��Z�[��{0y~�5�����~LA�����P|~�����#hB�0�e��&���rh��kq��$%��J�!��G����yn.�P�rw|Q�)�k���D�%��Va���n$�_@�F9����qF�!e�����"R6}zQp+w���>�������m#�������������J	��J�CX�����;�u�������!�B!�ty�v���}Ug*����>��������)+�?�Nc��>xq�p�_���u�q�����Q�<�gR�(���I���9f���Yb��.��1NYT��B�>���CPpA�A�����U�=��_<��'��|������y�_ j�|��x�Q���'�S 	���r�a�]�qB|�o�+G�`t��g�^c|����+	�������S��o0��p<�C��#��������&��?$=�>������j����>;�Y�3��������F�(J��,��a3�%��#h�2�+j��4y������xw��?$����(�1R�<����$��f��B5�d��x���@�!� �����R&���@���0�JP�d�>q��s�c�7��z��
�����6�a���	
��<i!�
���I�����l������F9F�������5���L�����}��z'�A�C��}����v���w��M������A���v�������=�14x����A����d������8��b��~a�4���3P}��Yf����;���O$q]2	��1���4��=������&��vS�a7s�j�������q?f�����\8J��3�O��[���Q�
&r�;��1{�u@y������@KK<Uh��g���W3O���G;>1�G��s��n���O��;�RG3�-������� �tgF0�t������|fa���
�?��y�d���P
TW�Ep���uAt9�wf���1�h��A`"fA��jo�rq]��U����H�F��z���a��7���$G��x%����%��������.�J��-�K�i9#�Qv��:4N�O����C�l!n����4���|��|��'q� �O�����z����GI�u7J^���p�9�����pkN�pU6�/�}:�������6�S.�X[�<��_Z����T�F���(�����}<m�[��X����QP{��)���j�4,����o���a=X�y��/\(%�b��z�u��������k�?V}��?���h�0~�\���3��vgHL]�v����������p��)�%���3�[�W�pOu�@��!�m���>������Z��Iq������QzjP����9�X����sX��� �3�C�{E\�5�}�PJ���]X�M]
�������Z���12�sp�� ��),�:�����h�
������6v~��h��|d#q��R4�%R�A�	�3%��rfh��$%����W����}����{�
�����Q�t���'6�6�w�j_�����=8n���J����U�}���$�0j�����1�V�B�����B!�mvy����R���8�a��D�*a���/��m���y�p�*	��K�;�����.�C�k�X?)������{j��xzA�g�u��b�M��uX'�b6���g=�
%���/(��&�C+�}!��^H�������a�Ab��$�YM�!����F���2����@����,��mU,36x��e?EsX��	s�_�R�7�����w~��*��R����;�a�8�������w�a���}�1,�������g���&���{�� d}�]?��������,,76h�*>gE��_A��"2���u�V�gk�\{^a���	\�
��N�5��Q��)���o v�F^�6��������.8�e�N�lE���h���T�-Gn&a�'�rY|���b�mh)iK���6��]�T�$��R������X���k�Q�wP�C	����v��{��^���`{i6q9~$f���*��$f/���5T}���I�>���/��z	K��n&"S}[�t�M���'TQ��}��?b��a�C�Nk����.�'>�I��)>ql�����,�T��=wu�5Z��@9�e�)8�Cb��,Y��\��xF�9I�}������z�D���L�*�y�(�H���f�r�K��5d��D`�
����j�S�.|���\l%g��z?m��^f�&c�u���%��#hC�xY�����<X�y������4w.Oj������k�Kl������Q6.%y�)w�1g	E�I�
��}��W8�6.���V�6H������Nb���CWRp�k&�\�+r.���]��.�E��	�x��s���y��P��Q7W�-�����^$vX�6�uY7]��:PAq�����/���d�\��y���$��������RB�&��k*T�Wo�R}���\#��]����+V�Gq�~j���OiBku�X���+r<�Il[^e��{�D��q	������b���CAE
��$oO��S�T��wp��`�����`U��.$��Od���q���U��q7�j����s�"�R���UH��M$|���h��_������m�n�����st���#��Z�W�pO-�L�����ormE�=J��GH��_��Zo�]u�	D;X1'���[��)�����������������-9_�	�HTXo�;���]��X{`yG���[Hxx�����`EYC�����������zgRp�F��Y=�	R��O�����G�>�`��uO����6�b�����%���������?`�a;�9��9�(�z����� ���}[�M�hu�,�u/�8�?��k,Qw�*�AA�9�pg��G��|n�~�b��P�(8���O(�YY���IWut!�B!~�./�I���>�=����������d����0}�'>�����c���~�!����	_��������$.:�7A��H���.S�[�KX����v1R^x���?&#_��YQ���C�}t4�ue�l��k�C�ED��O���8v.����H>}�L������/��|��Y��u��XfN�pb[�yc��e�](;7�
%dn)D1����12��������{�o���8����7�Q:�1G���M�Zz\����8��p��k��*�d/V�-DE����a����Pwr�/��g)8ac����}�F��S���\��i
���i�L����1M%�����������F�eN\J
��a���m�2��v�<=�?4������j����1�F����m�`�O��[Q���PV�K�i�x�����$3�0�S�9���#yf���<U�����c�X��I������G���_���He�a=x-fS3C'�>#=�$�����|��|Rw9Z(�fNs�N2l*�������C�c�����s@gt�0�~]����~��Gb���c������6��&�n�}i��\���O�<@���M�KT���-��&`��{07�=��x����5�/��E��	���1L$a����	��`L�um���G�������y��x"��G�_��R��������XBj�\��S�5�����
46.
���/��l
o�0�k��R��A}�?�������*�{���k?���z���������|��h��j�!#1���^z��!�ZkWZ��<���T�<��z�L,�=��
#f����/�|/KgtC��[��.x0�j�
�g��nb�z�g7��b���u��]�PJ>$��}�]�����K���Q��!��X
����x�y��>1�d� \{M��)�������/M�����\X��Z�S��r�j�&=����O��-/��#��sy�N���n�l����\.������I{q=Wu��<w�7��Y�}�R^z4j����c_8)���2t2��v�n�����-?{NS�e���v��"!�W9�s/6w�����{���+#���������r�w����>D���������R��q8b��<��C��7+6MWF�|�.Q�w�R�yGQ\_�k��p#��&4E;�u��yp'��a��H8�>��b#���s��������be���IS0k��0L|��W�W�Q��^�U�D����BG���,����q$V�J����c�������,��/�H=�v���
��%�m�p�V��r=�y8����	1|7F�b-.Gq�#��KXP��aU��+W��>gA����e�Xt�;P/�B!�h���y�d���p��������3Nu����8���!��>${��L��G�^b�m2z�h�n���t�n�?Qi��u.�Sg����4���u_Q����,��?��(=��P���Gd�_�`�^�Y���m�<5h|j�T\8���������!S�8t����U��N��>2m\���y������-�����H,
cu�,�_��(^�
������/p�6��r8S��?��Rq�J�P���B��PW*����A�z�)����~���jw�P�6��*4�kP��Qj�jU�aO8����#�������=��\X)����B�`���n��6�����'�j�����x���w��*�5����f��~L���f��q��Mj�nVXj��u	Y�������a�p����u����Z���qTT��@H3 IDAT����}OP�x�}�!�'�{���Gmn_.�p~�r;���&��D���>��X��|��^#�
���6��a��O((.�����j���&aSinE�9��,��}K��8RK�w���N}���b�����-�F��(��I��L���.6��s�b9�>��Q�i�p�*�kP*NR��A�j����h���>�����=����;Y����l�^�����<��rm_Sy�E���8����E�YVm)�+��u�m���;����[I�
��K�2�������([B���Q��G�9�N }� ���'!�~�F��Ed����6n���Oi��+���.x{{�����%�������z<����M����q��/��x.�Z�R����?�u�Q�������>d��v�w�����MeL{ax"���w�L�+�?����(<�J����U��C���/���*����ox��mY�A$�|���E5������VQ��G�:����-W5�^������-������YSSC�c3S�^������C����(�S��8r�Bo[N�#�#?��a	���y����V=K���P�������q,F����
����[��A���j�p�:]{.}5��PU����=�����|�U�_k�|�!j�>���I{����o����y��h�%�P9��
�;����e{�}�����1�3�*�A��"r�\�)��o,�����{��5wc��r����������}=U�}�!�jPs��
y�V!�B�������^��?>������9q<��3b����W��#~J�^2�>���w��3K���y��6#E)�}�Y��2t����>��6�@�T�����U��\�?�+�a�S����!*5:m�&*N^������w�"w����Y8��W���lKf�������~�A�Z>������-�����;<�%d��|�xS���~(8��kB�U�I������L\���V�����^T�(w�C����p��\��������r����V�y(���_C�7��������kf�������f��Q��5m7����l����oc���|?�����Z��RQ��[���h<+q5xS[�����:�����+X����\t,~����3�c���t6����.��:��gS�=kZy�
2����\�w��@A��m��B;x,����.R�j�D.x�_S����
���������ad��?�+H�x����I��[(��Cj*��hp5h?�U���<���X�Z��+g�K����:_��g�����7���P}���w���`�K�n�=��iA8
�q\T�)��*_5TV�_��i\�3
^Jh���J����h���h�=�������wv��nb�� q�`r�-%�60��~J�]X�"��5��b��)N���=��o{���O��x.^F;�	��~��E)uA�vO��V�;{,���,2wAg2��tgV��������y��f2�=�a�~��7��8��8�LfO_D^�������G��

��q���{���i*�O/���	��n��������tki��f������}�_��6`ZW?w>���}[k;/�s��n������v�#,_�����l�nG�P�Cf�n�o����a1t� +��]��;C+Cf��ho�JW�@��r����.>�(�)W�����^�����Z���k�6��|t��y��5��l*q�4j����	t������Y(�i��������m��Z�����m%�����k��;��[q��FFV��alj4������W������Vp���:�C9.�6��B!�u.������}�����Z������o�wo�,Z�����.���K��?@�K�W�PH9�uc6�~��:++�"3����q�!e�W�����7���rR�f�f�TQ��i�^��Y�
c�H���H/<�'�.�Nx�z���E�&�����	����R�����$�����-��0NC�k
�7�`��F9Fr���KIz��������5���~�0�X���.�G[����P�����[
pU�k��$m��u��mb/�U�� �k����4
���!*���7���E���E��wI��ex����s���S��j�x[p�m��P�1[Y
�>'i�������sD��������_�{���/��f��S��8�u����+F9������]��3��@��
P����<N��r�w��$���~��D�7���J�S3����/I_�EyP�����]�ztq�����)�������	�a3I����E��+s_y���Z���j{�;�{c�~���p]/a��
����:}���������fm����{��F�?��j[(�&��kH�s�o���W�{���-�M���\�R=kq�?�8�%.�`�}5@����(�'��DI��]��.��U�~8�=?���~@JV	�!FtM�*�K����6���u{6�����_V�m����d��D?P��=���'��������n���r����j_-Z��Z�����/W�xT}���W�������K8�����E��a��Cr���Cjn>�0��{;{�f��S��:�n�^�w�����V4]5����������(�il=���,o�;�:k_f������������3����G7�cQ��#y������bN����|���z�L�|v;�i����#c��l�=���C��v^"{6�3g����nc��)iQ~�	C��uj����H�p�0���yv��+{����5=Ok�K�N���P;���/������Ww.s�����iob�v,������H�����2z`��_���b����hq?�- e�0�s`q�����G�d3�M/�:���?�j&����m��h�b	T���N�������t7z�6RvUa�������J�����)�T[�1�i�(���B!�B���
���_"U��$�_J`�+D��g��e����-�L�}#���v�>��=� �4�����P�����V�/�C����e��
	r�A5z)�}�{>����-K���F7�NT��	
���������dV���x���'��#���Cr�,>��U�IL�{�w�d;����.��S��<zL$���n'!:����\�/�v�a}���~"�73�=�Fe�|����w2{�l����c���8�N�y3����>s�	s�42{MavH9I�%�q���J����y�v�u�����za}4������A3��nl����V3�2��y���qZb�.a���<��|�G[z\���x��"6�� +����{���5
��>��E��:�C�88C7.
�)G>&��������il6`����������87��K(���L�� S8��
��[Q�pQ=)�E����q��2�.���#X��67�N��������K{���@c�3�}�&�3�A�&��;��'���m��GQ���7�b��.�����MH���������U�������
�y�S}����7�cq��:^�F���0�6� �����=���_z9�1;>�Kc���c��>���y��Zh�T�.q��	��I�*��#��pl��;-��esX�������+��.xv���
�&u"��Pt��������&���!������*�+@5p��"wV�������6�Ei_�mF�9�<T���z�;�<6UsO��������X���6�S�[�i�����i�j�$g�c}q)����~<���n��1�}J(�����w�����T���tV�����b,^F����C��Z�ob������bL1�X�>f��?p$����U�#��p�W��h01>�C��C��K��G��a<>� �� �4��a�k-���=�o��=�f��
F���<1���v�!Z�G�@;q	������!��.xx���~[�\2S��/#�A��P�����U@m���+�#1�lCp�g���C����[��k�$�y���2�N������q�7��\Dx��j���=��4��TT<���=�*���Y��~M�Tw/�����n y�������,J6��������kk�h�=Pi1����[t�������}����v,���Vh�~�j���F�C�!yj���D������B!��7������r�{O.w
3���!�������w�v}G9�����DnIgvk?z��\��%j���(�����T�9+���a�",-��"D��z����$.�ne1���v��A>i,��o����z+.E�v�F��,���#Z�����k�]�����u����,�&Br�B\;I=G�6R&�N�_�K��*�.)��G����2�x�L:)����P&�KO���#u�0�s6���*��������
�g��D?.���:�� ��nX&�%);��b���N\�b��wz�c2�L��T�z+~�~���U$��B!�����'B�_U���S����<����n~�����D�6_�P�!��s��h�o�]�����hW���3���2g	��a����_����~I;!�B!��hdhJ�!��O�B!�B�2�o��G����2�x�L:)��G����-���"�B!�B!�B!�U��I��_TF@�2v�B!�B!�B!���dhJ�!��O��]��u<R&�^R���I�#e��H�t<R&��I�#e��H�t<R&��I��[(�R!�B!�B!�B��@qB!�B!�B!�B\�B!�B!�B!��*�@�B!�B!�B!�W��e��__���$���	�^��7�!,=������A����v��<������B!�B!�B!�Btx���o����:���^bnHYY6*~������������I��s�����	S�`��`Q��q�L3_�IB�@b�J������2c�7Wn�K�O�:)�N�I����x���xxh�����q����=��X���q$5W�m����{E
T�$c�������U�����7�^�G����Mq�{x��.���O��X��������s��=�(V:��	!�B!�B!�/���*Or��j��3�:w���^�i������l
��x\���9�},�)2��e��B�pb[?c�:b�."�%����3j��dn��������d�C�����z��I���OS��2���AT����Y�����vE)���W�)����D��)/�A}YkmMg��j�6e`kX'��a��K��Um��~��rt�>�.
!�B!�B!�o������}Ug*����>������
��#?�N����0!�?�]EV����.�����u�q�����Q�<�gR�(���I����
�?��I�)�p�^%&�����7M'�|�V�I���H������y�W����il����@4]��7E���'�������D\��Y_:�7a��X���>u��L�gFmmp�.#�(�We��;�\9������aF\�M�3>�V������'q� �O��(G6�8%�5x����/b-=��I|x�{2�������q�12�sp�� ��),�:��T[�A��$��`�������RT�7o8�Q�g�i��*����Su�)G>&�������g�UQ��4�|���b�O��S��G�)���8F�{`�[>

��f|��A,�X���|���1+�����4&b^���v�[��R�63B��y�d���PL�-��d�dI�7e�	!�B!�B!�h���~:K�����:�iO����uk7s����� f��w=�����k�q�R��D�"2�7����Z:�O
��j��;���2�*(;@�r/�X������q`Y�{q�{�!q�r�\587-".���Y���"1�InI�{]��Y�l'A��R�C%G�<������@�1,�����~����������OJ����cl���&,������~��a����%}e4�����r�]�}�~�N��rH
)!u�Aw��r���O�ZM��{�9�pp���F�9��1�d�����0�N���l���Y�]H�A�d��'H9�����k�Kl������Q6.%y�)����d�x��c��L��3��v���(���~$f����\��]���8�;H����9��;]��$��3����TJ�"b��j'E�"rW�Q�t�[��K�g��U,��P��!�7���M_�����*>g��%�&Q`+���!��_�8�n�]9�����a�v���:GG��8R.w�P!�B!�B!�����@\'
���0�� ��k2��N��I��{#������j������qJ:�h+���/�D��A��V������Y$�4�����eJm��\�q��������Hb�D�8D�����A:��}��g7L�b�Y{	x��T����X����]����]@���a�jR�)���DE�F�{Y+5(G��Q|S&������c��MLX���a�S������8�>��m��X7�*u4�B_��y��IS0k��0L|��W�����a����T=aP���Ow-S�
�4X����tRc�G�����s}F��������m��)��������V�����q�\���xz4n�o�[�i�L��P��c��Gq��$��7Q�b0������_�2��V�����G���T~����G�6���(�a�^�#!�W9_KV�B!�B!�B�����{2��k8\��G~�Y����B��A�����cO?��#���8��Vz7�$[�&xv�0�o�[wS���J���sI�:�>3�S���A��T��U�MT�j���U�/\e��������[�w{F�:+��~�LF<���>��O�LE`�}����>�a�#�������}]5�<U7��.P������	F���Nj��V@yKA8����j_M��WU�(;tF��F�� ��	��m-{/�����}Az�8m��Z9�)a=�^�Z�Y���u����k�p��*��z����A)+��{'����/�w����>��u���5j���p:����A�;y����G�A$�|���%�8!�B!�B!�h���]{C�� �~�'������L�K���w�@���'���ya�u���@oo�(m���%#�#�����=<��,����+��b�������qyvC�s=j_op5$(�)��+���f������(�W�Q�t���\����Q��CLH%[7���������������UCe%����r���{����$>�2���p�������������j�����*o\��:�+4��O?"�o�xK*)i�����\��
���a]�8�mO������vQ�:��W���Z4���\��W���l�5-~�[7-\�\_�r��^h�78�]�y���W��P����B!�B!��7��q��������+kI��c����L��x�������xu���K��D;T|I���{����q�I���y������M��Tr��@9�5m��&�5��G�Mc��3P}������\{^d�e���/���	������������M���e�%m)����z����-����/����Ol#=�[�>M���|�8
�8����;�=*�U�.��_Q^� G��A�<����|��>�-�M���%��0J��8Z��B?��O�gyN�#������������^x
�Ob]:�����/�H��)N���.)6�B�7���J��>������������������f��U
J���l)�U����s����{�n8?f��Re�8!�B!�B!�h���	q��O%y�R�_!*�4�cYa7�zK2S�61�a5�����H�x;��&"��X}<�G�!V���=���r�^�z�T'_OJ|4����1���L��L�-P����V������_u�}D��}x$����S�1�n���P������Y�'�L� rg��0������Py�j`4q�*Y>zF����%���D���/}B��PJQ�F�����1<���0;�����e��r�=[k����#��
�[�T;���>x�~?��[�S=z)�}���J�L���q�,k}4������A3��nU?b��L�?�`�z-��3���/�G�m�{�A���%U_ IDAT���Xt�����.bzO��a�HY:���Gd0d�Fz� ~���B!�B!�B4��������{O.w
3���!�������w��{7DG�#y�XRC�f�!���v�w���$��&qY4�f���h��q������m�#e��H�t<R&��I�#e��H�t<R&��I�#e����D2���s;q�C�Y��=d�����k0
��Y�pJE7,��� �B!�B!�B�v�G�B��C{7s��I\�g�+�����e$������z�}D�l[B!�B!�B�K&�8!D��~���L|���!�B!�B!������B!�B!�B!�B\������w��z���s��B!�B!�B!�-�����E�v����a��{7�v��qz���s��B\��u<R&�^R���I�#e��H�t<R&��I�#e��H�t<R&��I��[(�R!�B!�B!�B��@qB!�B!�B!�B\�B!�B!�B!��*�@�B!�B!�B!�W��e��__���$���	�^��7�!,�T�.�B!�B!�B!�o�ef�����_���������RAV������������S������
}�<W����?��?�?b!��+q�UoI�ZZy�u��m'.������<��o��������Zr��*F�#��.<�+v�J����S\��k'	!�I+��u6�
��������Tx*����_�
���5xh�������'8��>If�]��Z��:qn'!$�Q�v���%�'I�2�3�P�O�1�����R��u\zyUQ�j��,�X�m�	B!�B!�B����q�'9�E5C��
�;�{\/�4��c3�_{��Z�����y���jj\|��������5�����I��s��/_��d�J�z����'�����a)9G}�*��t����sg��?�G������E��������������X�����G�<����=/k�����tvm����!}�Clu����_9����E������������VDw�:?����gw���DlM
s_�v��O����������=�����|�S
^��*�B!�B!�B�Z]^ �l9�Wu�b�;����<��{�;�4��W�R�1+fN����[�����<r�'/2*���=���;������x���T�&���2���N��������A�E2*���j1��bE�7���MT@qY������DI�v��Yf�S�7i4���[�[���N�(N{�Q�xxk1N�'�������f�������5�E��
��*KH�7�5x������f���E��!ld|�k��j��f�1N��Sot�>���g�8{7I������c����O$��\��������{a��r:MAFJ�	}��uq��:��F�r�a�U�I�/L��O��D����0`��opf���1�h��A`"f�F�J
�����y�_ j�|�_�h������#j�u�I��(<��[����������}r�p�:��5���F�����~���
k~.��}���e�+	�6?E��#��'qW���Lp�
����
���3�&���<��S�l������1��h�z�o�$��O�2��;��)����	�����& ��u��������y��p�[S$K���;WJ���
�?��y�d����Z��B!�B!�B�L./��Y*�ug�!L{"��^%�[��������+e�0q����]Hr���<\A�����$c�n6������(��N�����=���}/Z�k�+�^�1���p�I��&c�2J���YM��x&��?8�]:����1D�����G8k�;v}���{��*(��c^���|����k�:���^H�������a�Ab��$�Y}���1R�?EjU4)�����
��U$���.Q^��M7�t�7����uO���k(�B���(��&�(����������
<��w�+����/K���@����>m }B#%m	������y�����]2�f�9���S�9�V4-��)��W�?;�,"�m�����]o��D��3�2��I�{�J
N��`�D���cE�)�asX>�n��O��a)���K��<B�O[���(?�8�ff�]];�b�u�1+�!��;h���^�������=g1�Y�W�@�����>��8��LXg��2/���L�����*��%n��.�IQ~.)���(�k�\��Y�l'A��R�C%G�<�������x.�~�8'&�J�����j��?AJa��LW�2b��aX����6����2+��Cg����YBQh��kB9���roB!�B!�BtL������M}p{��5s�'p�k�sI�W���7���X�q7����������Q{v���Rbj����bq��,��{�M���,'l,�8���h3zJ�;+Q��Gub��e`sV�<��k����}�����(��n)D�A}
���qX�v��F[��Q��`�\C".b Zm"W���s��Cl�������s0�i����p�RG]��&`,�������gb^p�U�XAlD�;���nb#����GmV��8�)���jjhB�~���o���D��"
��o*��s6��������[Q�i
��������|�9��Xz��w�^?X�G��F��F2S�j���Ph>����$��"j�x�*P�!���h��Q��9��^h���tP��s3x&)��Dy�c���X�{��F���7
�z����[�]��kv���l�}�&2���6�D���8P�����+��M�z��;�n�jbvi�\��GLcv�]�{�'|�t,>����l�4[���(�a���!�b{���5���X�70>�.��������`��d�Z!�B!�B!D�ty�8����;��q�����vk����q/O����n�i����<u�������N�8��D
u�0�	�c&1�����v��M�,��U����R���]������N.j����z��|(,M4P�e��m��9**>���~�������u��x����~��*�nLI� �5��A\�,q�~�'?Alh����Q�}�-b�zL g�����$����
%c���%�Q��d��=8�}B��f$�*|��sv��~9���L�����oZ@j�H��
����z>���IA&��:����M7�v���CX�=�h2��ge!�h�x1�9ckz
���l�� o�VB���f����8�b2�.>��b�<O�Q
��Qj0`0���M���i��pTb�RH56�`�8J����:����FYc���*6������ia_�;�&�93�����^b�u,�:�3~�{�;9�V��yC�ZW����]�U5����,�L_2�o$!�����v��2��?�`���Fc#�A7�pV���pc����eOV���`���n��~G�>'G]v�0U�i2���5-"""""""""7�����B�������xvt*�V��'�aZU�z����5�:�y�X���]�������cA��O�����7g���x5'(�`�H��6c��cx<J�. ��S�3K�_3���l?P���1�)2�����/�-�W,&g�
��z����;��K�	��y���O����FUW1��WqZB�	�N>~���]N��W���<�������B�G�=��Nh`>kd���3�8�����d�_�W1���)8��}z���u�g)���2m	�C�����9���v����b�+�Y�����_#B�.��5Tq����dYeA�FX�'2%9��m���(\4�)QLy%�����n"c���������3k������j�^3�~�����������p�@F.�}Y�����Q.B�W�#�m�}���=g����+M�,�q�t�y�N����{�""""""""""�\�7�j���iyu�2�2���
/��HM���x����������51�;070c�(y��'��J��cf��L�7
�-vU8)*���"�o�!��^B��Mi��������"��m%$8�������D�Z��9_c��x�/Y�j���C��X��mG��y�������s�"n�N���b��8��C���pT�:����Z�7������b���*�Q�*>%��=�����l'�n����c���vx'7m?=���KRL�G�mq�/V�<�^N�kDxt;��.!o�qp�'g�B6������;q����i�(��o�����]���n7T����� 1����s��T�N�/���
k�K�Z-��e��/�d�\F>�Nf�b�s�������N6B��_. uz!	�&���f�w`���(���y{��Dv&��������wX^��yE���f�+n9OX"��4�T����rJ>]B��#@��K�Xq�m���5���aL���G�K�O�5:����cl~7���� {=�
��Z��L�������������y!N�_������`+�NR�^�F��>�gR��$d�d�s�2f�o7YH;������������
{���C���!6!���� c�x
�Mj�/I���]����bB�����[2��I��f��;��������&D�=�.�-t_�O������3v@j|)3{t�K�W��0:s�K����X�I�Q�D���&��������yof.|��'���AH�_��,��T}'��.b�����b�������4h9��W���@x�G�C��_�{��v��;y�p��9�u=��nw��d��Vv1�{���$F����@zAc����>�)�?��^�y�9��]U���mI��*I���E�'$$��]0�/O]�0��GV�c�,���U�5"n��d�O������!�B���F,%���1������4����q���0`S�3���(p�SX�0�1�,d&6'$4��Ez�h����i6�4�����6�^=����w�������������1�a"���kN		��xNG���sdM�B�3a�����������L��s�����6�}Bz?@��v������������5����\�0��~���[�aH-+..�e��u���8D����7<O��}.^ �spI�/2g
3��Z'!�W�e����|��U�����u�;�����Rn}�r�{��������('�G9�=���QN|�r�{n���#N�JT�h��LYc�_�%���'8?�A��Dfm�(�h��)��"�����{m����$��������"���
S����m�3x�"FF�M7�\S�!���Y� �����I�L&�y]�B��^GW��D.WPG�m>����C���)q��q��u """"""""""r��hJ�k��������J�h���C�(�����
q�7m��.�u�����bZ�lY�a���
Bw�})��G9�=���QN|�r�{��������('�G9�=7BN4�RDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD���������������<��$q�v����|�C��G8R/��f�"������u5��������G����1�1�.rsp�I��^���^����jGD�8�TN.�{'	aD�~%��s��Ofba)�����\�(���@C �go�}�����D�q��Cd���W�8�9�W|�]�OI��@���5�g���P��7�=0�������Nf��&v������`����U�DXLO�^�����33�9�` $2���>��9��s(�����b�y���e.�����������f
�"�x�>|����y�^""""""""""��f���Cl���������?-���1,��zg)?�)Y�
�OhOP
����-	����YB���g������$��;���sJ���lb��l
�U
^��[���`F?��)�o~E��=1�u�3o�W8L0s�6�5�Y(��d�� o����7�~:k�����?����[X>�-��F3e�������g��$����B2�u$������c��2����c^${����z��?'� ����a|4�Z={-���9�9k@DDDDDDDDD�6��w���e���X��/�������U{#~f����<����
'�/���$}I��o�t�� �}���%)�1�m��Gj��t�iOH�Pb��a����{L{�Z����w)r{��O~�������-a��~_y�2
��@�6�-������[q�^���]	3�D`�p��A���@E� ����!������X�5��z�� c����� "<����.<�W����k�@r�0��!��w�o>Shr����[M�Z�x_�����t���o6�|�~������:�����IXx��C����Dt�N��G����emN`�@��H_�
�{?�G��)k��1bO-����:��(|�zE�'�A�5�����v�9�`|L$���I�y��;��:���~��j�����k|_b�WPb?R�!FK;��@z��)�8{��|���HHL �s������.���A��?p���0�!�^~����k��F����o%�G� g�&�=����g�3�1b##�EF`���\o'�{�����>�5	'}��>wu.xl�s��yv�s���-�/�_����9\%'��7���,e����J�j��lO����(��DR\�
	�I$���*���(Z1�{��"b�����Q�����J��f��y3�}�0kXl�A���}�drv?�3�gO��b��G��/�����?u�O�5�^Bo��&���W����`|"""""""""rEjV����c��t"��4����+).��P����vql+�k!X��X�H�����+����_����c}	2px�M��|�����s���+���u����`��F������c����[{����l����w�)tzp��D������1%E3���?z�5�y�
 ��G�������}=n���c��_|��+�
�����_��;Bs���r�c��o���-�v�"��58K�Qd-�J����a�W�(c��{o������CQ�C��|�����ff���&<��e�����ss}������[���B;�}@�	��s�FN���	RRRD�`����}��'����J��wy#�U��\3��	[���)�����nl�6�����P��w�F����/����]���E`�����U�BE?$��	1�_���G�8��5kq�y����?S�������N��������k�3���pS07������K�o]��v[H=����L��,qwv#}�*�=����#I]��5���Z@f�r��x����������~��[���#���>o$h�E��'<y*cB�2~��a?�����N�s�Ijx�����*k����5�^3��y�\W3e��DL��O��]�<!KY��8���IJ����l�Z��C��J��bd�l����U���|G
L"��7��rQZ��7�K�~w}eQ���m���d��|>��	/�����������I����eL!��{�>���?0f��K�'"""""""""��fU��f,MZ��c��f"lQ4�����w}Cq��X�}np���FX>�m��dUvM���M��)����������,�]��&��=���ED�QJn���|H����K1F
a��QXM��_�1��O���K;_YO���iJ����]>���f,�"��������1�v!��)j ��
�����	�����[4�L����V��$�%�K�u�f}�0nX��0t~M��bl5����W���9yE��/�>�:��[�=�S}o�t���(`f���-X{��>����(��>�nDR�[���B�����v��JD�x�M�3��q�=`����2q?&�T�����>K:�~wV_@���o2���P?�u���L��r�����9N��)XM��t�#R��Bh��9�n�vP��I��]�AB����)q������s�1�����"|�`b-7X�>A��w��|�A����%�{����b��%eZ!��'ih9���2�}
���I�IDATFe^F�/��s�w|� ��G �3c��#��	�W}���pR��������N��=�k+���d:4�� ����{w=v�?����=N����'���@���g,����E��{��do
���$bZ�z�oY�kY��\:>�l5+�6��7����r��~��-����=�Z�X�pr��z�SF���������
����E������~���1����M`�1��"t����7��5{pW��v��T����MH����C}�^��QeD]����T�����tn����SrpS�WW�$fP�gE��}N��L�G��-�s��^��J�gp�+����:D)�N��f$$����(�~�'?��h09�����x��ua��.N���w�0O�o�3���,ST�#�Q��e����;��X�o�g��GH����5����9k��[X>�n�����{�n.�����7�X��y�A������V^/���w����9�m����`��gel��XF�����~f�A����Wp�Kkl�(#�o&o��#�z����\f�/K�����"��%S�FO���aw����I��'���'C��I_�E�����L�Sk+��Y�L{��?`

#v�d���[��1����u��0��p:.����pTV����.����������\�����B�������xvt*�V��'�aZ����?����Tn<~��{<>]�k�g��F�t�Uv�`��k������X>2�<E���X�M��U>`v��`�v�{V2��WqZB�	�N>~���\N����p�p��h2pk+B��R\9�u$��;o�q��
jK����ZL��u&$b�@����LR���XC7%%��Xe�I��fL�x�[������/q?�������o����d4�&f�74��e��?����E6���ck��������M��]N�����q�8\gJ+��Nh`���L��%�o~w����y��9�2�BL�p:g���(w!���	�t�����-�0+�8	]����uf��������YG��8�\���AFN��
�R0'��i���X,�>����*���/]1UW#������)��!�A9�:���{N���(�?!��\|���b�+��<o��(8����DDDDDDDDD��j^h���iyu�2�2���
+����a3�������Yb����Q1���wae��D���=����h+!�������~�KX��T"o�P���x�]M�E�b���!s�w8*�.�>$k�v��s�2��������$F:�Z���&e.z��k���;��i{���U���&��"f�������Y�n7T�]h16������U�8+���2Vl�y�G)*���"�o�!��^B��Mix�W+��������R9u�;d@���}�����*�B��&'7��=�c�
8w|B��C�v������#gq�w��7���;L�b	nKB�6�9����q��MHO�K���{
jKBB
�]��I�8J�����#q���/t������o���{��d-�O��u�_��������k�J���u+L?Rh/�����.��s��F�s�$�%2�pKc�A�a��0�
�����T�O�5:����������C������2�&�z��
���|z*�2
s����.b��/���� 1���K>������#{'1e�OW����������\�Zs����&i`;
�~���D��j�\���Hj�/I���]����bB�����fL=&�5!��wy��Z�O��t��5������	[L,�^�G��D�9/�2�3���`����������6h1��'2�G30�"e�_I������A��;�������4h9������+�H������Ib��Y��t�c�3DD&sW���L�2r�HL�����a�	[|!�
�wq��$t�Pb�c�MH&��`FF;��N����)%����]���g
5��E���D�������G�!�����-��y����B�Y{�0���
w������Q�g��4bK~���d��t~����@��$4Y�S�w�L^���9�>L���d^��)���Y�c�%mb�)`}&�y����-�a��=I�L&�yub���:�x����@�!��������iCp�9�);�����s�>t���Zt{���n�BR�&Rb�!�� 2�a����;���jHV�z��[��Q��z����sdM�B�3a��������<�[���l��I����h���L���X��?�1VJ���Xk����0i�m[_|�lA��WI�a*���FQ�?1s��W����������\�����`�����M��Kl]�!������-[�uW�h�o���.���X�����2
^~�~_����++d��7�z���&��w�k�������e�^����W�z��#�G��=���QN|�r�{��������('�G9�=����r�O�E������!]��.E.�w���C�v�RE8g)����L�+"""""""""r#���L""���������4�^�/y���yOW3��_���$6���������������P!N�*�&����u��:d������@D�������W$�u"""""""""rA��&""""""""""""r
>���S�A\��4�MDDDDDDDDDDDD|����\W����6p_���CjYqq1-[���0�*(w�G9�=���QN�})��G9�=���QN|�r�{��������('�G9�=7BN4�RDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD���������������<��$q-�������H��r��A������a-�,""""""""""""��j��3������3#c6c�]���r�������O���������Q\����EDDDDDDDDDDDD|\�:�J���
:����?����P~s���w��?\G�	
���z�Z	ZDDDDDDDDDDDD����w���e���R^^z��fw��#tn��{{���i��d7�U�����i\����q5M��	\���7�D��ih���VR��C�;�zv.�x�� >z;��R���C�
q��X���}�,
�D��h���?��#Mh��z�X:Dtx/��Z�ZDDDDDDDDDDDD�������w�����)�^�5G����)-���]E?����#�Z��X;A�����������������W�:?��o����KpF����6�;����&%��t$iXZj)l�V�B@���O�H�s^�<4�����EDDDDDDDDDDDD�K5M)"""""""""""""�R!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD�P!NDDDDDDDDDDDD�0|�q�����R-�5��DDDDDDDDDDDDD.���x��B��M��Kl]�!������-[�ur�;�������('���[�������('�G9�=���QN|�r�{������!'M)""""""""""""r
�'""""""""""""r
�'""""""""""""r
�'""""""""""""r
����v���r��BP�HM~��F\{��`�{��&��#��C"j!d�W�������|�����"7��k/+3s����|}>c��E��~��vb�y5+��b��t�U���i���a1�����&��-������m(/�{�����m5My���e���R^^z��fw��#t6�F���|����b�n7��8r���EDDDDDDDDDDDD|Y�:�~9��X1��H~6�-��p�J����'�?p-Mg�����!����'���0EDDDDDDDDDDDD�5���o���#�44b�E�����������9�����q���_!������������������6��7����r��~��-���'y3�0�wR^z�u���1
������m5���w�{��7����%�#�?�aZ5���ql��,R�=4���Q=[��8�Q����-��&�������E��^5>����������������f�)EDDDDDDDDDDDD�Z���w�n��IEND�B`�
#52Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Manni Wood (#51)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Sat, 13 Dec 2025 at 02:09, Manni Wood <manni.wood@enterprisedb.com> wrote:

Hello, Everyone!

I have attached two files. 1) the shell script that Mark and I have been using to get our test results, and 2) a screenshot of a spreadsheet of my latest test results. (Please let me know if there's a different format than a screenshot that I could share my spreadsheet in.)

I took greater care this time to compile all three variants of Postgres (master at bfb335df, master at bfb335df with v4.2 patches installed, master at bfb335df with v3 patches installed) with the same gcc optimization flags that would be used to build Postgres packages. To the best of my knowledge, the two gcc flags of greatest interest would be -g and -O2. I built all three variants of Postgres using meson like so:

BRANCH=$(git branch --show-current)
meson setup build --prefix=/home/mwood/compiled-pg-instances/${BRANCH} --buildtype=debugoptimized

It occurred to me that in addition to end users only caring about 1) wall clock time (is the speedup noticeable in "real time" or just technically faster / uses less CPU?) and 2) Postgres binaries compiled with the same optimization level one would get when installing Postgres from packages like .deb or .rpm; in other words, will the user see speedups without having do manually compile postgres.

My interesting finding, on my laptop (ThinkPad P14s Gen 1 running Ubuntu 24.04.3), is different from Mark Wong's. On my laptop, using three Postgres installations all compiled with the -O2 optimization flag, I see speedups with the v4.2 patch except for a 2% slowdown with CSV with 1/3rd quotes (a 2% slowdown). But with Nazir's proposed v3 patch, I see improvements across the board. So even for a text file with 1/3rd escape characters, and even with a CSV file with 1/3rd quotes, I see speedups of 11% and 26% respectively.

The format of these test files originally comes from Ayoub Kazar's test scripts; all Mark and I have done in playing with them is make them much larger: 5,000,000 rows, based on the assumption that longer tests are better tests.

I find my results interesting enough that I'd be curious to know if anybody else can reproduce them. It is very interesting that Mark's results are noticeably different from mine.

Thank you for sharing the benchmark script! I ran the benchmarks using
your script with --buildtype=debugoptimized. My results are below:

master: 85ddcc2f4c

text, no special: 102294
text, 1/3 special: 108946
csv, no special: 121831
csv, 1/3 special: 140063

v3

text, no special: 88890 (13.1% speedup)
text, 1/3 special: 110463 (1.4% regression)
csv, no special: 89781 (26.3% speedup)
csv, 1/3 special: 147094 (5.0% regression)

v4.2

text, no special: 87785 (14.2% speedup)
text, 1/3 special: 127008 (16.6% regression)
csv, no special: 88093 (27.7% speedup)
csv, 1/3 special: 164487 (17.4% regression)

One thing I noticed is that your benchmark timings appear to have some
variance. In my runs, I did not observe differences greater than one
second between runs. It is possible that this variance is affecting
your results.

Before running the benchmarks, I use the these commands [1]sudo cpupower frequency-set --governor=performance sudo cpupower idle-set -D 0 # disable idle echo "1" | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo (intel only) to improve
result stability; they might be helpful if you are not already using
something similar:

I did this benchmark on my local and my specs are Intel i5 13600k,
32GB Memory and SATA SSD.

[1]: sudo cpupower frequency-set --governor=performance sudo cpupower idle-set -D 0 # disable idle echo "1" | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo (intel only)
sudo cpupower frequency-set --governor=performance
sudo cpupower idle-set -D 0 # disable idle
echo "1" | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo (intel only)

--
Regards,
Nazir Bilal Yavuz
Microsoft

#53KAZAR Ayoub
ma_kazar@esi.dz
In reply to: Nazir Bilal Yavuz (#52)
2 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found that
COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as far as
the first special character is found, then fallback to scalar processing
for that character and re-enter the SIMD path again...
There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then continue
scalar path without re-entering SIMD again.
- This gives from 10% to 30% speedups depending on the weight of special
characters in the attribute, we don't lose anything here since it advances
with SIMD until it can't (using the previous scripts: 1/3, 2/3 specials
chars).

2) Do SIMD path, then use scalar path when we hit a special character, keep
re-entering the SIMD path each time.
- This is equivalent to the COPY FROM story, we'll need to find the same
heuristic to use for both COPY FROM/TO to reduce the regressions (same
regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as heavy
as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for COPY TO
will be trivial and always beneficial.
Attached is 0004 which is option 1 (SIMD without re-entering), 0005 is the
second one.

Regards,
Ayoub

Attachments:

0005-Speed-up-COPY-TO-text-CSV-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=0005-Speed-up-COPY-TO-text-CSV-using-SIMD.patchDownload
From 319e5402e35429943d80ba136f27e6185410e6f5 Mon Sep 17 00:00:00 2001
From: AyoubKAZ <kazarayoub2004@gmail.com>
Date: Wed, 24 Dec 2025 15:20:53 +0100
Subject: [PATCH] Speed up COPY TO text CSV using SIMD

---
 src/backend/commands/copyto.c | 252 ++++++++++++++++++++++------------
 1 file changed, 167 insertions(+), 85 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index e1306728509..b9d7b55f1ab 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -1268,38 +1268,63 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	if (cstate->encoding_embeds_ascii)
 	{
 		start = ptr;
-		#ifndef USE_NO_SIMD
+		const char *end = ptr + strlen(ptr);
+
+		while ((c = *ptr) != '\0')
+		{
+#ifndef USE_NO_SIMD
+			/*
+			 * SIMD fast path: scan ahead for special characters.
+			 * We re-enter this path after handling each special character
+			 * to maximize the benefit of vectorization.
+			 */
 			{
-				const char* end = ptr + strlen(ptr);
-				while (ptr + sizeof(Vector8) <= end) {
-					Vector8 chunk;
-					Vector8 control_mask;
-					Vector8 backslash_mask;
-					Vector8 delim_mask;
-					Vector8 special_mask;
-					uint32 mask;
+				
+				while (ptr + sizeof(Vector8) <= end)
+				{
+					Vector8		chunk;
+					Vector8		control_mask;
+					Vector8		backslash_mask;
+					Vector8		delim_mask;
+					Vector8		special_mask;
+					uint32		mask;
 
 					vector8_load(&chunk, (const uint8 *) ptr);
+					
+					/* Check for control characters (< 0x20) */
 					control_mask = vector8_gt(vector8_broadcast(0x20), chunk);
-					backslash_mask = vector8_eq(vector8_broadcast('\\'), chunk);
-					delim_mask = vector8_eq(vector8_broadcast(delimc), chunk);
+					
+					/* Check for backslash and delimiter */
+					backslash_mask = vector8_eq(chunk, vector8_broadcast('\\'));
+					delim_mask = vector8_eq(chunk, vector8_broadcast(delimc));
+					
 
-					special_mask = vector8_or(control_mask, vector8_or(backslash_mask, delim_mask));
+					/* Combine all masks */
+					special_mask = vector8_or(
+						vector8_or(control_mask, backslash_mask), delim_mask);
 
 					mask = vector8_highbit_mask(special_mask);
-					if (mask != 0) {
+					if (mask != 0)
+					{
+						/* Found special character, advance to it */
 						int advance = pg_rightmost_one_pos32(mask);
 						ptr += advance;
 						break;
 					}
 
+					/* No special characters in this chunk, advance */
 					ptr += sizeof(Vector8);
 				}
-			} 
-		#endif
+				
+				/* Update c after SIMD scan */
+				c = *ptr;
+			}
+#endif /* !USE_NO_SIMD */
+
+			/* Scalar handling - same code for SIMD and non-SIMD builds */
+			if (c == '\0')
+				break;
 
-		while ((c = *ptr) != '\0')
-		{
 			if ((unsigned char) c < (unsigned char) 0x20)
 			{
 				/*
@@ -1358,38 +1383,60 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	else
 	{
 		start = ptr;
-		#ifndef USE_NO_SIMD
+		const char *end = ptr + strlen(ptr);
+
+		while ((c = *ptr) != '\0')
+		{
+#ifndef USE_NO_SIMD
+			/*
+			 * SIMD fast path: scan ahead for special characters.
+			 */
 			{
-				const char* end = ptr + strlen(ptr);
-				while (ptr + sizeof(Vector8) <= end) {
-					Vector8 chunk;
-					Vector8 control_mask;
-					Vector8 backslash_mask;
-					Vector8 delim_mask;
-					Vector8 special_mask;
-					uint32 mask;
+				
+				while (ptr + sizeof(Vector8) <= end)
+				{
+					Vector8		chunk;
+					Vector8		control_mask;
+					Vector8		backslash_mask;
+					Vector8		delim_mask;
+					Vector8		special_mask;
+					uint32		mask;
 
 					vector8_load(&chunk, (const uint8 *) ptr);
+					
+					/* Check for control characters (< 0x20) */
 					control_mask = vector8_gt(vector8_broadcast(0x20), chunk);
-					backslash_mask = vector8_eq(vector8_broadcast('\\'), chunk);
-					delim_mask = vector8_eq(vector8_broadcast(delimc), chunk);
+					
+					/* Check for backslash and delimiter */
+					backslash_mask = vector8_eq(chunk, vector8_broadcast('\\'));
+					delim_mask = vector8_eq(chunk, vector8_broadcast(delimc));
 
-					special_mask = vector8_or(control_mask, vector8_or(backslash_mask, delim_mask));
+					/* Combine masks */
+					special_mask = vector8_or(control_mask, 
+											  vector8_or(backslash_mask, delim_mask));
 
 					mask = vector8_highbit_mask(special_mask);
-					if (mask != 0) {
+					if (mask != 0)
+					{
+						/* Found special character */
 						int advance = pg_rightmost_one_pos32(mask);
 						ptr += advance;
 						break;
 					}
 
+					/* No special characters, advance */
 					ptr += sizeof(Vector8);
 				}
-			} 
-		#endif
+				
+				/* Update c after SIMD scan */
+				c = *ptr;
+			}
+#endif /* !USE_NO_SIMD */
+
+			/* Scalar handling - same for SIMD and non-SIMD */
+			if (c == '\0')
+				break;
 
-		while ((c = *ptr) != '\0')
-		{
 			if ((unsigned char) c < (unsigned char) 0x20)
 			{
 				/*
@@ -1489,53 +1536,68 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 		else
 		{
 			const char *tptr = ptr;
+			const char *end = tptr + strlen(tptr);
+			
+			while ((c = *tptr) != '\0') 
+			{
+#ifndef USE_NO_SIMD
+			/*
+			 * SIMD accelerated quote detection.
+			 */
+			{	
+				Vector8		delim_vec;
+				Vector8		quote_vec;
+				Vector8		newline_vec;
+				Vector8		cr_vec;
+				
+				delim_vec = vector8_broadcast(delimc);
+				quote_vec = vector8_broadcast(quotec);
+				newline_vec = vector8_broadcast('\n');
+				cr_vec = vector8_broadcast('\r');
+
+				while (tptr + sizeof(Vector8) <= end)
+				{
+					Vector8		chunk;
+					Vector8		special_mask;
+					uint32		mask;
 
-			#ifndef USE_NO_SIMD
-				{	
-					const char* end = tptr + strlen(tptr);
-
-					Vector8 delim_mask = vector8_broadcast(delimc);
-					Vector8 quote_mask = vector8_broadcast(quotec);
-					Vector8 newline_mask = vector8_broadcast('\n');
-					Vector8 carriage_return_mask = vector8_broadcast('\r');
-
-					while (tptr + sizeof(Vector8) <= end) {
-						Vector8 chunk;
-						Vector8 special_mask;
-						uint32 mask;
-
-						vector8_load(&chunk, (const uint8 *) tptr);
-						special_mask = vector8_or(
-							vector8_or(vector8_eq(chunk, delim_mask),
-									   vector8_eq(chunk, quote_mask)),
-							vector8_or(vector8_eq(chunk, newline_mask),
-									   vector8_eq(chunk, carriage_return_mask))
-						);
-
-						mask = vector8_highbit_mask(special_mask);
-						if (mask != 0) {
-							tptr += pg_rightmost_one_pos32(mask);
-							use_quote = true;
-							break;
-						}
+					vector8_load(&chunk, (const uint8 *) tptr);
+					
+					special_mask = vector8_or(
+						vector8_or(vector8_eq(chunk, delim_vec),
+								   vector8_eq(chunk, quote_vec)),
+						vector8_or(vector8_eq(chunk, newline_vec),
+								   vector8_eq(chunk, cr_vec)));
 
-						tptr += sizeof(Vector8);
+					mask = vector8_highbit_mask(special_mask);
+					if (mask != 0)
+					{
+						tptr += pg_rightmost_one_pos32(mask);
+						use_quote = true;
+						break;
 					}
+
+					tptr += sizeof(Vector8);
 				}
-			#endif
+			}
+#endif /* !USE_NO_SIMD */
 
-			while ((c = *tptr) != '\0')
+			/*
+			 * Scalar scan for remaining bytes (tail after SIMD, or entire
+			 * string if USE_NO_SIMD).
+			 */
+			if ((c = *tptr) != '\0')
 			{
 				if (c == delimc || c == quotec || c == '\n' || c == '\r')
 				{
 					use_quote = true;
-					break;
 				}
 				if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
 					tptr += pg_encoding_mblen(cstate->file_encoding, tptr);
 				else
 					tptr++;
 			}
+			}
 		}
 	}
 
@@ -1548,37 +1610,57 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 		 */
 		start = ptr;
 
-		#ifndef USE_NO_SIMD
-			{	
-				const char* end = ptr + strlen(ptr);
-
-				Vector8 escape_mask = vector8_broadcast(escapec);
-				Vector8 quote_mask = vector8_broadcast(quotec);
+		const char *end = ptr + strlen(ptr);
 
-				while (ptr + sizeof(Vector8) <= end) {
-					Vector8 chunk;
-					Vector8 special_mask;
-					uint32 mask;
+		while ((c = *ptr) != '\0')
+		{
+#ifndef USE_NO_SIMD
+			/*
+			 * SIMD fast path: scan ahead for quote/escape characters.
+			 * Re-enter after handling each special character.
+			 */
+			{	
+				Vector8		escape_vec;
+				Vector8		quote_vec;
+				
+				/* Pre-compute broadcast vectors */
+				escape_vec = vector8_broadcast(escapec);
+				quote_vec = vector8_broadcast(quotec);
+
+				while (ptr + sizeof(Vector8) <= end)
+				{
+					Vector8		chunk;
+					Vector8		special_mask;
+					uint32		mask;
 
 					vector8_load(&chunk, (const uint8 *) ptr);
+					
 					special_mask = vector8_or(
-						vector8_eq(chunk, escape_mask), 
-							vector8_eq(chunk, quote_mask));
+						vector8_eq(chunk, escape_vec), 
+						vector8_eq(chunk, quote_vec));
 
 					mask = vector8_highbit_mask(special_mask);
-					if (mask != 0) {
-						ptr += pg_rightmost_one_pos32(mask);
-						use_quote = true;
+					if (mask != 0)
+					{
+						/* Found special character */
+						int advance = pg_rightmost_one_pos32(mask);
+						ptr += advance;
 						break;
 					}
 
+					/* No special characters in this chunk */
 					ptr += sizeof(Vector8);
 				}
+				
+				/* Update c after SIMD scan */
+				c = *ptr;
 			}
-		#endif
-		
-		while ((c = *ptr) != '\0')
-		{
+#endif /* !USE_NO_SIMD */
+
+			/* Scalar handling - same code for SIMD and non-SIMD builds */
+			if (c == '\0')
+				break;
+
 			if (c == quotec || c == escapec)
 			{
 				DUMPSOFAR();
-- 
2.34.1

0004-Speed-up-COPY-TO-text-CSV-using-SIMD.patchtext/x-patch; charset=US-ASCII; name=0004-Speed-up-COPY-TO-text-CSV-using-SIMD.patchDownload
From bfc580b17ad5e6d981adc146c24690afe4634ce1 Mon Sep 17 00:00:00 2001
From: AyoubKAZ <kazarayoub2004@gmail.com>
Date: Wed, 24 Dec 2025 12:55:15 +0100
Subject: [PATCH] Speed up COPY TO text CSV using SIMD

---
 src/backend/commands/copyto.c | 126 ++++++++++++++++++++++++++++++++++
 1 file changed, 126 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index dae91630ac3..e1306728509 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -31,6 +31,8 @@
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
 #include "pgstat.h"
+#include "port/pg_bitutils.h"
+#include "port/simd.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
 #include "utils/lsyscache.h"
@@ -1266,6 +1268,36 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	if (cstate->encoding_embeds_ascii)
 	{
 		start = ptr;
+		#ifndef USE_NO_SIMD
+			{
+				const char* end = ptr + strlen(ptr);
+				while (ptr + sizeof(Vector8) <= end) {
+					Vector8 chunk;
+					Vector8 control_mask;
+					Vector8 backslash_mask;
+					Vector8 delim_mask;
+					Vector8 special_mask;
+					uint32 mask;
+
+					vector8_load(&chunk, (const uint8 *) ptr);
+					control_mask = vector8_gt(vector8_broadcast(0x20), chunk);
+					backslash_mask = vector8_eq(vector8_broadcast('\\'), chunk);
+					delim_mask = vector8_eq(vector8_broadcast(delimc), chunk);
+
+					special_mask = vector8_or(control_mask, vector8_or(backslash_mask, delim_mask));
+
+					mask = vector8_highbit_mask(special_mask);
+					if (mask != 0) {
+						int advance = pg_rightmost_one_pos32(mask);
+						ptr += advance;
+						break;
+					}
+
+					ptr += sizeof(Vector8);
+				}
+			} 
+		#endif
+
 		while ((c = *ptr) != '\0')
 		{
 			if ((unsigned char) c < (unsigned char) 0x20)
@@ -1326,6 +1358,36 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	else
 	{
 		start = ptr;
+		#ifndef USE_NO_SIMD
+			{
+				const char* end = ptr + strlen(ptr);
+				while (ptr + sizeof(Vector8) <= end) {
+					Vector8 chunk;
+					Vector8 control_mask;
+					Vector8 backslash_mask;
+					Vector8 delim_mask;
+					Vector8 special_mask;
+					uint32 mask;
+
+					vector8_load(&chunk, (const uint8 *) ptr);
+					control_mask = vector8_gt(vector8_broadcast(0x20), chunk);
+					backslash_mask = vector8_eq(vector8_broadcast('\\'), chunk);
+					delim_mask = vector8_eq(vector8_broadcast(delimc), chunk);
+
+					special_mask = vector8_or(control_mask, vector8_or(backslash_mask, delim_mask));
+
+					mask = vector8_highbit_mask(special_mask);
+					if (mask != 0) {
+						int advance = pg_rightmost_one_pos32(mask);
+						ptr += advance;
+						break;
+					}
+
+					ptr += sizeof(Vector8);
+				}
+			} 
+		#endif
+
 		while ((c = *ptr) != '\0')
 		{
 			if ((unsigned char) c < (unsigned char) 0x20)
@@ -1428,6 +1490,40 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 		{
 			const char *tptr = ptr;
 
+			#ifndef USE_NO_SIMD
+				{	
+					const char* end = tptr + strlen(tptr);
+
+					Vector8 delim_mask = vector8_broadcast(delimc);
+					Vector8 quote_mask = vector8_broadcast(quotec);
+					Vector8 newline_mask = vector8_broadcast('\n');
+					Vector8 carriage_return_mask = vector8_broadcast('\r');
+
+					while (tptr + sizeof(Vector8) <= end) {
+						Vector8 chunk;
+						Vector8 special_mask;
+						uint32 mask;
+
+						vector8_load(&chunk, (const uint8 *) tptr);
+						special_mask = vector8_or(
+							vector8_or(vector8_eq(chunk, delim_mask),
+									   vector8_eq(chunk, quote_mask)),
+							vector8_or(vector8_eq(chunk, newline_mask),
+									   vector8_eq(chunk, carriage_return_mask))
+						);
+
+						mask = vector8_highbit_mask(special_mask);
+						if (mask != 0) {
+							tptr += pg_rightmost_one_pos32(mask);
+							use_quote = true;
+							break;
+						}
+
+						tptr += sizeof(Vector8);
+					}
+				}
+			#endif
+
 			while ((c = *tptr) != '\0')
 			{
 				if (c == delimc || c == quotec || c == '\n' || c == '\r')
@@ -1451,6 +1547,36 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 		 * We adopt the same optimization strategy as in CopyAttributeOutText
 		 */
 		start = ptr;
+
+		#ifndef USE_NO_SIMD
+			{	
+				const char* end = ptr + strlen(ptr);
+
+				Vector8 escape_mask = vector8_broadcast(escapec);
+				Vector8 quote_mask = vector8_broadcast(quotec);
+
+				while (ptr + sizeof(Vector8) <= end) {
+					Vector8 chunk;
+					Vector8 special_mask;
+					uint32 mask;
+
+					vector8_load(&chunk, (const uint8 *) ptr);
+					special_mask = vector8_or(
+						vector8_eq(chunk, escape_mask), 
+							vector8_eq(chunk, quote_mask));
+
+					mask = vector8_highbit_mask(special_mask);
+					if (mask != 0) {
+						ptr += pg_rightmost_one_pos32(mask);
+						use_quote = true;
+						break;
+					}
+
+					ptr += sizeof(Vector8);
+				}
+			}
+		#endif
+		
 		while ((c = *ptr) != '\0')
 		{
 			if (c == quotec || c == escapec)
-- 
2.34.1

#54Manni Wood
manni.wood@enterprisedb.com
In reply to: KAZAR Ayoub (#53)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Dec 24, 2025 at 9:08 AM KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found that
COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as far as
the first special character is found, then fallback to scalar processing
for that character and re-enter the SIMD path again...
There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then continue
scalar path without re-entering SIMD again.
- This gives from 10% to 30% speedups depending on the weight of special
characters in the attribute, we don't lose anything here since it advances
with SIMD until it can't (using the previous scripts: 1/3, 2/3 specials
chars).

2) Do SIMD path, then use scalar path when we hit a special character,
keep re-entering the SIMD path each time.
- This is equivalent to the COPY FROM story, we'll need to find the same
heuristic to use for both COPY FROM/TO to reduce the regressions (same
regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as heavy
as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for COPY TO
will be trivial and always beneficial.
Attached is 0004 which is option 1 (SIMD without re-entering), 0005 is the
second one.

Regards,
Ayoub

Hello, Nazir and Ayoub!

Nazir, sorry for the late reply, I am on holiday. :-) I wanted to thank you
for the tips on using cpupower to get less variance in my test results.

Ayoub, I suppose it was inevitable the SIMD patch would work for copying
out as well as copying in!

I am back at work on 5 Jan 2026, so I till try to carve out time to test
this then, using Nazir's tips.

Happy Holidays!

-Manni
--
-- Manni Wood EDB: https://www.enterprisedb.com

#55Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: KAZAR Ayoub (#53)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Wed, 24 Dec 2025 at 18:08, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found that COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as far as the first special character is found, then fallback to scalar processing for that character and re-enter the SIMD path again...
There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then continue scalar path without re-entering SIMD again.
- This gives from 10% to 30% speedups depending on the weight of special characters in the attribute, we don't lose anything here since it advances with SIMD until it can't (using the previous scripts: 1/3, 2/3 specials chars).

2) Do SIMD path, then use scalar path when we hit a special character, keep re-entering the SIMD path each time.
- This is equivalent to the COPY FROM story, we'll need to find the same heuristic to use for both COPY FROM/TO to reduce the regressions (same regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as heavy as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for COPY TO will be trivial and always beneficial.
Attached is 0004 which is option 1 (SIMD without re-entering), 0005 is the second one.

Patches look correct to me. I think we could move these SIMD code
portions into a shared function to remove duplication, although that
might have a performance impact. I have not benchmarked these patches
yet.

Another consideration is that these patches might need their own
thread, though I am not completely sure about this yet.

One question: what do you think about having a 0004-style approach for
COPY FROM? What I have in mind is running SIMD for each line & column,
stopping SIMD once it can no longer skip an entire chunk, and then
continuing with the next line & column.

--
Regards,
Nazir Bilal Yavuz
Microsoft

#56Manni Wood
manni.wood@enterprisedb.com
In reply to: Nazir Bilal Yavuz (#55)
1 attachment(s)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Dec 31, 2025 at 7:04 AM Nazir Bilal Yavuz <byavuz81@gmail.com>
wrote:

Hi,

On Wed, 24 Dec 2025 at 18:08, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found that

COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as far

as the first special character is found, then fallback to scalar processing
for that character and re-enter the SIMD path again...

There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then

continue scalar path without re-entering SIMD again.

- This gives from 10% to 30% speedups depending on the weight of special

characters in the attribute, we don't lose anything here since it advances
with SIMD until it can't (using the previous scripts: 1/3, 2/3 specials
chars).

2) Do SIMD path, then use scalar path when we hit a special character,

keep re-entering the SIMD path each time.

- This is equivalent to the COPY FROM story, we'll need to find the same

heuristic to use for both COPY FROM/TO to reduce the regressions (same
regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as

heavy as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for COPY

TO will be trivial and always beneficial.

Attached is 0004 which is option 1 (SIMD without re-entering), 0005 is

the second one.

Patches look correct to me. I think we could move these SIMD code
portions into a shared function to remove duplication, although that
might have a performance impact. I have not benchmarked these patches
yet.

Another consideration is that these patches might need their own
thread, though I am not completely sure about this yet.

One question: what do you think about having a 0004-style approach for
COPY FROM? What I have in mind is running SIMD for each line & column,
stopping SIMD once it can no longer skip an entire chunk, and then
continuing with the next line & column.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Hello, Nazir, I tried your suggested cpupower commands as well as disabling
turbo, and my results are indeed more uniform. (see attached screenshot of
my spreadsheet).

This time, I ran the tests on my Tower PC instead of on my laptop.

I also followed Mark Wong's advice and used the taskset command to pin my
postgres postmaster (and all of its children) to a single cpu core.

So when I start postgres, I do this to pin it to core 27:

${PGHOME}/bin/pg_ctl -D ${PGHOME}/data -l ${PGHOME}/logfile.txt start
PGPID=$(head -1 ${PGHOME}/data/postmaster.pid)
taskset --cpu-list -p 27 ${PGPID}

My results seem similar to yours:

master: Nazir 85ddcc2f4c | Manni 877ae5db

text, no special: 102294 | 302651
text, 1/3 special: 108946 | 326208
csv, no special: 121831 | 348930
csv, 1/3 special: 140063 | 439786

v3

text, no special: 88890 (13.1% speedup) | 227874 (24.7% speedup)
text, 1/3 special: 110463 (1.4% regression) | 322637 (1.1% speedup)
csv, no special: 89781 (26.3% speedup) | 226525 (35.1% speedup)
csv, 1/3 special: 147094 (5.0% regression) | 461501 (4.9% regression)

v4.2

text, no special: 87785 (14.2% speedup) | 225702 (25.4% speedup)
text, 1/3 special: 127008 (16.6% regression) | 343480 (5.3% regression)
csv, no special: 88093 (27.7% speedup) | 226633 (35.0% speedup)
csv, 1/3 special: 164487 (17.4% regression) | 510954 (16.2% regression)

It would seem that both your results and mine show a more serious
worst-case regression for the v4.2 patches than for the v3 patches. It
seems also that the speedups for v4.2 and v3 are similar.

I'm currently working with Mark Wong to see if his results continue to be
dissimilar (as they currently are now) and, if so, why.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Attachments:

simd_copy_performance_2025_01_06.pngimage/png; name=simd_copy_performance_2025_01_06.pngDownload
#57Manni Wood
manni.wood@enterprisedb.com
In reply to: Manni Wood (#56)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Tue, Jan 6, 2026 at 2:05 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Wed, Dec 31, 2025 at 7:04 AM Nazir Bilal Yavuz <byavuz81@gmail.com>
wrote:

Hi,

On Wed, 24 Dec 2025 at 18:08, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found

that COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as far

as the first special character is found, then fallback to scalar processing
for that character and re-enter the SIMD path again...

There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then

continue scalar path without re-entering SIMD again.

- This gives from 10% to 30% speedups depending on the weight of

special characters in the attribute, we don't lose anything here since it
advances with SIMD until it can't (using the previous scripts: 1/3, 2/3
specials chars).

2) Do SIMD path, then use scalar path when we hit a special character,

keep re-entering the SIMD path each time.

- This is equivalent to the COPY FROM story, we'll need to find the

same heuristic to use for both COPY FROM/TO to reduce the regressions (same
regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as

heavy as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for COPY

TO will be trivial and always beneficial.

Attached is 0004 which is option 1 (SIMD without re-entering), 0005 is

the second one.

Patches look correct to me. I think we could move these SIMD code
portions into a shared function to remove duplication, although that
might have a performance impact. I have not benchmarked these patches
yet.

Another consideration is that these patches might need their own
thread, though I am not completely sure about this yet.

One question: what do you think about having a 0004-style approach for
COPY FROM? What I have in mind is running SIMD for each line & column,
stopping SIMD once it can no longer skip an entire chunk, and then
continuing with the next line & column.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Hello, Nazir, I tried your suggested cpupower commands as well as
disabling turbo, and my results are indeed more uniform. (see attached
screenshot of my spreadsheet).

This time, I ran the tests on my Tower PC instead of on my laptop.

I also followed Mark Wong's advice and used the taskset command to pin my
postgres postmaster (and all of its children) to a single cpu core.

So when I start postgres, I do this to pin it to core 27:

${PGHOME}/bin/pg_ctl -D ${PGHOME}/data -l ${PGHOME}/logfile.txt start
PGPID=$(head -1 ${PGHOME}/data/postmaster.pid)
taskset --cpu-list -p 27 ${PGPID}

My results seem similar to yours:

master: Nazir 85ddcc2f4c | Manni 877ae5db

text, no special: 102294 | 302651
text, 1/3 special: 108946 | 326208
csv, no special: 121831 | 348930
csv, 1/3 special: 140063 | 439786

v3

text, no special: 88890 (13.1% speedup) | 227874 (24.7% speedup)
text, 1/3 special: 110463 (1.4% regression) | 322637 (1.1% speedup)
csv, no special: 89781 (26.3% speedup) | 226525 (35.1% speedup)
csv, 1/3 special: 147094 (5.0% regression) | 461501 (4.9% regression)

v4.2

text, no special: 87785 (14.2% speedup) | 225702 (25.4% speedup)
text, 1/3 special: 127008 (16.6% regression) | 343480 (5.3% regression)
csv, no special: 88093 (27.7% speedup) | 226633 (35.0% speedup)
csv, 1/3 special: 164487 (17.4% regression) | 510954 (16.2% regression)

It would seem that both your results and mine show a more serious
worst-case regression for the v4.2 patches than for the v3 patches. It
seems also that the speedups for v4.2 and v3 are similar.

I'm currently working with Mark Wong to see if his results continue to be
dissimilar (as they currently are now) and, if so, why.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Hello, all.

Now that I am following Nazir's on how to configure my CPU for performance
test run, and now that I am following Mark's advice on pinning the
postmaster to a particular CPU core, I figured I would share the scripts I
have been using to build, run, and test Postges with various patches
applied: https://github.com/manniwood/copysimdperf

With Nazir and Mark's tips, I have seen more consistent numbers on my tower
PC, as shared in a previous e-mail. But Mark and I saw rather variable
results on a different Linux system he has access to. So this has inspired
me to spin up an AWS EC2 instance and test that when I find the time. And
maybe re-test on my Linux laptop.

If anybody else is inspired to test on different setups, that would be
great.
--
-- Manni Wood EDB: https://www.enterprisedb.com

#58Manni Wood
manni.wood@enterprisedb.com
In reply to: Manni Wood (#57)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Wed, Jan 7, 2026 at 1:13 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Tue, Jan 6, 2026 at 2:05 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Wed, Dec 31, 2025 at 7:04 AM Nazir Bilal Yavuz <byavuz81@gmail.com>
wrote:

Hi,

On Wed, 24 Dec 2025 at 18:08, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found

that COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as

far as the first special character is found, then fallback to scalar
processing for that character and re-enter the SIMD path again...

There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then

continue scalar path without re-entering SIMD again.

- This gives from 10% to 30% speedups depending on the weight of

special characters in the attribute, we don't lose anything here since it
advances with SIMD until it can't (using the previous scripts: 1/3, 2/3
specials chars).

2) Do SIMD path, then use scalar path when we hit a special character,

keep re-entering the SIMD path each time.

- This is equivalent to the COPY FROM story, we'll need to find the

same heuristic to use for both COPY FROM/TO to reduce the regressions (same
regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as

heavy as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for

COPY TO will be trivial and always beneficial.

Attached is 0004 which is option 1 (SIMD without re-entering), 0005 is

the second one.

Patches look correct to me. I think we could move these SIMD code
portions into a shared function to remove duplication, although that
might have a performance impact. I have not benchmarked these patches
yet.

Another consideration is that these patches might need their own
thread, though I am not completely sure about this yet.

One question: what do you think about having a 0004-style approach for
COPY FROM? What I have in mind is running SIMD for each line & column,
stopping SIMD once it can no longer skip an entire chunk, and then
continuing with the next line & column.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Hello, Nazir, I tried your suggested cpupower commands as well as
disabling turbo, and my results are indeed more uniform. (see attached
screenshot of my spreadsheet).

This time, I ran the tests on my Tower PC instead of on my laptop.

I also followed Mark Wong's advice and used the taskset command to pin my
postgres postmaster (and all of its children) to a single cpu core.

So when I start postgres, I do this to pin it to core 27:

${PGHOME}/bin/pg_ctl -D ${PGHOME}/data -l ${PGHOME}/logfile.txt start
PGPID=$(head -1 ${PGHOME}/data/postmaster.pid)
taskset --cpu-list -p 27 ${PGPID}

My results seem similar to yours:

master: Nazir 85ddcc2f4c | Manni 877ae5db

text, no special: 102294 | 302651
text, 1/3 special: 108946 | 326208
csv, no special: 121831 | 348930
csv, 1/3 special: 140063 | 439786

v3

text, no special: 88890 (13.1% speedup) | 227874 (24.7% speedup)
text, 1/3 special: 110463 (1.4% regression) | 322637 (1.1% speedup)
csv, no special: 89781 (26.3% speedup) | 226525 (35.1% speedup)
csv, 1/3 special: 147094 (5.0% regression) | 461501 (4.9% regression)

v4.2

text, no special: 87785 (14.2% speedup) | 225702 (25.4% speedup)
text, 1/3 special: 127008 (16.6% regression) | 343480 (5.3% regression)
csv, no special: 88093 (27.7% speedup) | 226633 (35.0% speedup)
csv, 1/3 special: 164487 (17.4% regression) | 510954 (16.2% regression)

It would seem that both your results and mine show a more serious
worst-case regression for the v4.2 patches than for the v3 patches. It
seems also that the speedups for v4.2 and v3 are similar.

I'm currently working with Mark Wong to see if his results continue to be
dissimilar (as they currently are now) and, if so, why.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Hello, all.

Now that I am following Nazir's on how to configure my CPU for performance
test run, and now that I am following Mark's advice on pinning the
postmaster to a particular CPU core, I figured I would share the scripts I
have been using to build, run, and test Postges with various patches
applied: https://github.com/manniwood/copysimdperf

With Nazir and Mark's tips, I have seen more consistent numbers on my
tower PC, as shared in a previous e-mail. But Mark and I saw rather
variable results on a different Linux system he has access to. So this has
inspired me to spin up an AWS EC2 instance and test that when I find the
time. And maybe re-test on my Linux laptop.

If anybody else is inspired to test on different setups, that would be
great.
--
-- Manni Wood EDB: https://www.enterprisedb.com

I tested master (bfb335d) and v3 and v4.2 patches on an amazon ec2 instance
(t2.small) and, with Mark's help, proved that on such a small system with
default storage configured, IO will be the bottleneck and the v3 and v4.2
patches show no significant differences over master because the CPU is
always waiting on IO. This is presumably an experience Postgres users will
have when running on systems with IO so slow that the CPU is always waiting
for data.

I went in the other direction and tested an all-RAM setup on my tower PC. I
put the entire data dir in RAM for each postgres instance (master, v3
patch, v4.2 patch), and wrote and copied the test copyfiles from RAM. On
Linux, /ram/user/<myuserid> is tmpfs (ramdisk), so I just put everything
there. I had to shrink the data sizes compared to previous runs (to not run
out of ramdisk space) but Nazir's cpupower tips are making all of my test
runs much more uniform, so I no longer feel that I need huge data sizes to
get good results.

Here are the results when all of the files are on RAM disks:

master: bfb335df

text, no special: 30372
text, 1/3 special: 32665
csv, no special: 34925
csv, 1/3 special: 44044

v3

text, no special: 22840 (24.7% speedup)
text, 1/3 special: 32448 (0.6% speedup)
csv, no special: 22642 (35.1% speedup)
csv, 1/3 special: 46280 (5.1% regression)

v4.2

text, no special: 22677 (25.3% speedup)
text, 1/3 special: 34512 (6.5% regression)
csv, no special: 22686 (35.0% speedup)
csv, 1/3 special: 51411 (16.7% regression)

Assuming all-storage-is-RAM setups get us closer to the theoretical limit
of each patch, it looks like v3 holds up quite well to v4.2 in the best
case scenarios, while v3 has better performance than v4.2 in the worst-case
scenarios.

Let me know what you think!
--
-- Manni Wood EDB: https://www.enterprisedb.com

#59Manni Wood
manni.wood@enterprisedb.com
In reply to: Manni Wood (#58)
Re: Speed up COPY FROM text/CSV parsing using SIMD

On Thu, Jan 8, 2026 at 2:49 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Wed, Jan 7, 2026 at 1:13 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Tue, Jan 6, 2026 at 2:05 PM Manni Wood <manni.wood@enterprisedb.com>
wrote:

On Wed, Dec 31, 2025 at 7:04 AM Nazir Bilal Yavuz <byavuz81@gmail.com>
wrote:

Hi,

On Wed, 24 Dec 2025 at 18:08, KAZAR Ayoub <ma_kazar@esi.dz> wrote:

Hello,
Following the same path of optimizing COPY FROM using SIMD, i found

that COPY TO can also benefit from this.

I attached a small patch that uses SIMD to skip data and advance as

far as the first special character is found, then fallback to scalar
processing for that character and re-enter the SIMD path again...

There's two ways to do this:
1) Essentially we do SIMD until we find a special character, then

continue scalar path without re-entering SIMD again.

- This gives from 10% to 30% speedups depending on the weight of

special characters in the attribute, we don't lose anything here since it
advances with SIMD until it can't (using the previous scripts: 1/3, 2/3
specials chars).

2) Do SIMD path, then use scalar path when we hit a special

character, keep re-entering the SIMD path each time.

- This is equivalent to the COPY FROM story, we'll need to find the

same heuristic to use for both COPY FROM/TO to reduce the regressions (same
regressions: around from 20% to 30% with 1/3, 2/3 specials chars).

Something else to note is that the scalar path for COPY TO isn't as

heavy as the state machine in COPY FROM.

So if we find the sweet spot for the heuristic, doing the same for

COPY TO will be trivial and always beneficial.

Attached is 0004 which is option 1 (SIMD without re-entering), 0005

is the second one.

Patches look correct to me. I think we could move these SIMD code
portions into a shared function to remove duplication, although that
might have a performance impact. I have not benchmarked these patches
yet.

Another consideration is that these patches might need their own
thread, though I am not completely sure about this yet.

One question: what do you think about having a 0004-style approach for
COPY FROM? What I have in mind is running SIMD for each line & column,
stopping SIMD once it can no longer skip an entire chunk, and then
continuing with the next line & column.

--
Regards,
Nazir Bilal Yavuz
Microsoft

Hello, Nazir, I tried your suggested cpupower commands as well as
disabling turbo, and my results are indeed more uniform. (see attached
screenshot of my spreadsheet).

This time, I ran the tests on my Tower PC instead of on my laptop.

I also followed Mark Wong's advice and used the taskset command to pin
my postgres postmaster (and all of its children) to a single cpu core.

So when I start postgres, I do this to pin it to core 27:

${PGHOME}/bin/pg_ctl -D ${PGHOME}/data -l ${PGHOME}/logfile.txt start
PGPID=$(head -1 ${PGHOME}/data/postmaster.pid)
taskset --cpu-list -p 27 ${PGPID}

My results seem similar to yours:

master: Nazir 85ddcc2f4c | Manni 877ae5db

text, no special: 102294 | 302651
text, 1/3 special: 108946 | 326208
csv, no special: 121831 | 348930
csv, 1/3 special: 140063 | 439786

v3

text, no special: 88890 (13.1% speedup) | 227874 (24.7% speedup)
text, 1/3 special: 110463 (1.4% regression) | 322637 (1.1% speedup)
csv, no special: 89781 (26.3% speedup) | 226525 (35.1% speedup)
csv, 1/3 special: 147094 (5.0% regression) | 461501 (4.9% regression)

v4.2

text, no special: 87785 (14.2% speedup) | 225702 (25.4% speedup)
text, 1/3 special: 127008 (16.6% regression) | 343480 (5.3% regression)
csv, no special: 88093 (27.7% speedup) | 226633 (35.0% speedup)
csv, 1/3 special: 164487 (17.4% regression) | 510954 (16.2% regression)

It would seem that both your results and mine show a more serious
worst-case regression for the v4.2 patches than for the v3 patches. It
seems also that the speedups for v4.2 and v3 are similar.

I'm currently working with Mark Wong to see if his results continue to
be dissimilar (as they currently are now) and, if so, why.
--
-- Manni Wood EDB: https://www.enterprisedb.com

Hello, all.

Now that I am following Nazir's on how to configure my CPU for
performance test run, and now that I am following Mark's advice on pinning
the postmaster to a particular CPU core, I figured I would share the
scripts I have been using to build, run, and test Postges with various
patches applied: https://github.com/manniwood/copysimdperf

With Nazir and Mark's tips, I have seen more consistent numbers on my
tower PC, as shared in a previous e-mail. But Mark and I saw rather
variable results on a different Linux system he has access to. So this has
inspired me to spin up an AWS EC2 instance and test that when I find the
time. And maybe re-test on my Linux laptop.

If anybody else is inspired to test on different setups, that would be
great.
--
-- Manni Wood EDB: https://www.enterprisedb.com

I tested master (bfb335d) and v3 and v4.2 patches on an amazon ec2
instance (t2.small) and, with Mark's help, proved that on such a small
system with default storage configured, IO will be the bottleneck and the
v3 and v4.2 patches show no significant differences over master because the
CPU is always waiting on IO. This is presumably an experience Postgres
users will have when running on systems with IO so slow that the CPU is
always waiting for data.

I went in the other direction and tested an all-RAM setup on my tower PC.
I put the entire data dir in RAM for each postgres instance (master, v3
patch, v4.2 patch), and wrote and copied the test copyfiles from RAM. On
Linux, /ram/user/<myuserid> is tmpfs (ramdisk), so I just put everything
there. I had to shrink the data sizes compared to previous runs (to not run
out of ramdisk space) but Nazir's cpupower tips are making all of my test
runs much more uniform, so I no longer feel that I need huge data sizes to
get good results.

Here are the results when all of the files are on RAM disks:

master: bfb335df

text, no special: 30372
text, 1/3 special: 32665
csv, no special: 34925
csv, 1/3 special: 44044

v3

text, no special: 22840 (24.7% speedup)
text, 1/3 special: 32448 (0.6% speedup)
csv, no special: 22642 (35.1% speedup)
csv, 1/3 special: 46280 (5.1% regression)

v4.2

text, no special: 22677 (25.3% speedup)
text, 1/3 special: 34512 (6.5% regression)
csv, no special: 22686 (35.0% speedup)
csv, 1/3 special: 51411 (16.7% regression)

Assuming all-storage-is-RAM setups get us closer to the theoretical limit
of each patch, it looks like v3 holds up quite well to v4.2 in the best
case scenarios, while v3 has better performance than v4.2 in the worst-case
scenarios.

Let me know what you think!
--
-- Manni Wood EDB: https://www.enterprisedb.com

Ayoub Kazar, I tested your v4 "copy to" patch, doing everything in RAM, and
using the cpupower tips from above. (I wanted to test your v5, but `git
apply --check` gave me an error, so I can look at that another day.)

The results look great:

master: (forgot to get commit hash)

text, no special: 8165
text, 1/3 special: 22662
csv, no special: 9619
csv, 1/3 special: 23213

v4 (copy to)

text, no special: 4577 (43.9% speedup)
text, 1/3 special: 22847 (0.8% regression)
csv, no special: 4720 (50.9% speedup)
csv, 1/3 special: 23195 (0.07% regression)

Seems like a very clear win to me!
--
-- Manni Wood EDB: https://www.enterprisedb.com

#60Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Manni Wood (#56)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

Firstly, thank you for all of the benchmarks!

On Tue, 6 Jan 2026 at 23:05, Manni Wood <manni.wood@enterprisedb.com> wrote:

Hello, Nazir, I tried your suggested cpupower commands as well as disabling turbo, and my results are indeed more uniform. (see attached screenshot of my spreadsheet).

I am glad that it helped!

This time, I ran the tests on my Tower PC instead of on my laptop.

I also followed Mark Wong's advice and used the taskset command to pin my postgres postmaster (and all of its children) to a single cpu core.

That is nice advice, I should apply this. Thank you for sharing it.

So when I start postgres, I do this to pin it to core 27:

${PGHOME}/bin/pg_ctl -D ${PGHOME}/data -l ${PGHOME}/logfile.txt start
PGPID=$(head -1 ${PGHOME}/data/postmaster.pid)
taskset --cpu-list -p 27 ${PGPID}

My results seem similar to yours:

It is nice to see that we get similar results.

master: Nazir 85ddcc2f4c | Manni 877ae5db

text, no special: 102294 | 302651
text, 1/3 special: 108946 | 326208
csv, no special: 121831 | 348930
csv, 1/3 special: 140063 | 439786

v3

text, no special: 88890 (13.1% speedup) | 227874 (24.7% speedup)
text, 1/3 special: 110463 (1.4% regression) | 322637 (1.1% speedup)
csv, no special: 89781 (26.3% speedup) | 226525 (35.1% speedup)
csv, 1/3 special: 147094 (5.0% regression) | 461501 (4.9% regression)

v4.2

text, no special: 87785 (14.2% speedup) | 225702 (25.4% speedup)
text, 1/3 special: 127008 (16.6% regression) | 343480 (5.3% regression)
csv, no special: 88093 (27.7% speedup) | 226633 (35.0% speedup)
csv, 1/3 special: 164487 (17.4% regression) | 510954 (16.2% regression)

It would seem that both your results and mine show a more serious worst-case regression for the v4.2 patches than for the v3 patches. It seems also that the speedups for v4.2 and v3 are similar.

Yes, you are right. Also, the regression on the CSV is worse than
TEXT, do you have any idea why?

--
Regards,
Nazir Bilal Yavuz
Microsoft

#61Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Manni Wood (#57)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Wed, 7 Jan 2026 at 22:13, Manni Wood <manni.wood@enterprisedb.com> wrote:

Now that I am following Nazir's on how to configure my CPU for performance test run, and now that I am following Mark's advice on pinning the postmaster to a particular CPU core, I figured I would share the scripts I have been using to build, run, and test Postges with various patches applied: https://github.com/manniwood/copysimdperf

Thank you for sharing this! I will try to use it soon.

With Nazir and Mark's tips, I have seen more consistent numbers on my tower PC, as shared in a previous e-mail. But Mark and I saw rather variable results on a different Linux system he has access to. So this has inspired me to spin up an AWS EC2 instance and test that when I find the time. And maybe re-test on my Linux laptop.

Were you able to understand why Mark's benchmark results are different
from ours?

--
Regards,
Nazir Bilal Yavuz
Microsoft

#62Nazir Bilal Yavuz
byavuz81@gmail.com
In reply to: Manni Wood (#58)
Re: Speed up COPY FROM text/CSV parsing using SIMD

Hi,

On Thu, 8 Jan 2026 at 23:50, Manni Wood <manni.wood@enterprisedb.com> wrote:

I tested master (bfb335d) and v3 and v4.2 patches on an amazon ec2 instance (t2.small) and, with Mark's help, proved that on such a small system with default storage configured, IO will be the bottleneck and the v3 and v4.2 patches show no significant differences over master because the CPU is always waiting on IO. This is presumably an experience Postgres users will have when running on systems with IO so slow that the CPU is always waiting for data.

I think this is expected and acceptable since there is no regression.

I went in the other direction and tested an all-RAM setup on my tower PC. I put the entire data dir in RAM for each postgres instance (master, v3 patch, v4.2 patch), and wrote and copied the test copyfiles from RAM. On Linux, /ram/user/<myuserid> is tmpfs (ramdisk), so I just put everything there. I had to shrink the data sizes compared to previous runs (to not run out of ramdisk space) but Nazir's cpupower tips are making all of my test runs much more uniform, so I no longer feel that I need huge data sizes to get good results.

This is an informative scenario to test, thank you for doing this.

Here are the results when all of the files are on RAM disks:

master: bfb335df

text, no special: 30372
text, 1/3 special: 32665
csv, no special: 34925
csv, 1/3 special: 44044

v3

text, no special: 22840 (24.7% speedup)
text, 1/3 special: 32448 (0.6% speedup)
csv, no special: 22642 (35.1% speedup)
csv, 1/3 special: 46280 (5.1% regression)

v4.2

text, no special: 22677 (25.3% speedup)
text, 1/3 special: 34512 (6.5% regression)
csv, no special: 22686 (35.0% speedup)
csv, 1/3 special: 51411 (16.7% regression)

Assuming all-storage-is-RAM setups get us closer to the theoretical limit of each patch, it looks like v3 holds up quite well to v4.2 in the best case scenarios, while v3 has better performance than v4.2 in the worst-case scenarios.!

I agree with you, I think all-storage-is-RAM is the best scenario to
benchmark regressions.

Your all-storage-is-RAM benchmark results are similar to your normal
benchmark here [1]/messages/by-id/CAKWEB6qQmPejLwndzMcVqhO+u9vgUf44kYAKg4QtyG-=KH=YGg@mail.gmail.com. I expect the regressions in the all-storage-is-RAM
results to be worse than [1]/messages/by-id/CAKWEB6qQmPejLwndzMcVqhO+u9vgUf44kYAKg4QtyG-=KH=YGg@mail.gmail.com since the effect of SIMD will be more
visible as there is no IO wait. What do you think about that?

[1]: /messages/by-id/CAKWEB6qQmPejLwndzMcVqhO+u9vgUf44kYAKg4QtyG-=KH=YGg@mail.gmail.com

--
Regards,
Nazir Bilal Yavuz
Microsoft