.. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
..
.. SPDX-License-Identifier: MPL-2.0
..
.. This Source Code Form is subject to the terms of the Mozilla Public
.. License, v. 2.0.  If a copy of the MPL was not distributed with this
.. file, you can obtain one at https://mozilla.org/MPL/2.0/.
..
.. See the COPYRIGHT file distributed with this work for additional
.. information regarding copyright ownership.

.. _changelog:

Changelog
=========

.. note:: The following list contains detailed information about BIND9's
   development. Regular users should refer to :ref:`Release Notes <relnotes>`
   for changes relevant to them.

BIND 9.18.29
------------

New Features
~~~~~~~~~~~~

- Tighten 'max-recursion-queries' and add 'max-query-restarts' option.
  ``fe3ae71e90``

  There were cases in resolver.c when the `max-recursion-queries` quota
  was ineffective. It was possible to craft zones that would cause a
  resolver to waste resources by sending excessive queries while
  attempting to resolve a name. This has been addressed by correcting
  errors in the implementation of `max-recursion-queries`, and by
  reducing the default value from 100 to 32.

  In addition, a new `max-query-restarts` option has been added which
  limits the number of times a recursive server will follow CNAME or
  DNAME records before terminating resolution. This was previously a
  hard-coded limit of 16, and now defaults to 11.   :gl:`#4741`
  :gl:`!9283`

- Generate changelog from git log. ``21a0b6aef7``

  Use a single source of truth, the git log, to generate the list of
  CHANGES. Use the .rst format and include it in the ARM for a quick
  reference with proper gitlab links to issues and merge requests.
  :gl:`#75` :gl:`!9181`

Feature Changes
~~~~~~~~~~~~~~~

- Use _exit() in the fatal() function. ``e4c483f45f``

  Since the fatal() isn't a correct but rather abrupt termination of the
  program, we want to skip the various atexit() calls because not all
  memory might be freed during fatal() call, etc.  Using _exit() instead
  of exit() has this effect - the program will end, but no destructors
  or atexit routines will be called. :gl:`!9263`

- Fix data race in clean_finds_at_name. ``541726871d``

  Stop updating `find.result_v4` and `find.result_v4` in
  `clean_finds_at_name`. The values are supposed to be
  static. :gl:`#4118` :gl:`!9198`

Bug Fixes
~~~~~~~~~

- Reconfigure catz member zones during named reconfiguration.
  ``944d0dc942``

  During a reconfiguration named wasn't reconfiguring catalog zones'
  member zones. This has been fixed. :gl:`#4733`

- Disassociate the SSL object from the cached SSL_SESSION.
  ``64fde41253``

  When the SSL object was destroyed, it would invalidate all SSL_SESSION
  objects including the cached, but not yet used, TLS session objects.

  Properly disassociate the SSL object from the SSL_SESSION before we
  store it in the TLS session cache, so we can later destroy it without
  invalidating the cached TLS sessions. :gl:`#4834` :gl:`!9279`

- Attach/detach to the listening child socket when accepting TLS.
  ``3ead47daff``

  When TLS connection (TLSstream) connection was accepted, the children
  listening socket was not attached to sock->server and thus it could
  have been freed before all the accepted connections were actually
  closed.

  In turn, this would cause us to call isc_tls_free() too soon - causing
  cascade errors in pending SSL_read_ex() in the accepted connections.

  Properly attach and detach the children listening socket when
  accepting and closing the server connections. :gl:`#4833` :gl:`!9278`

- Make hypothesis optional for system tests. ``0d1953d7a8``

  Ensure that system tests can be executed without Python hypothesis
  package. :gl:`#4831` :gl:`!9268`

- Don't loop indefinitely when isc_task quantum is 'unlimited'
  ``674420df64``

  Don't run more events than already scheduled.  If the quantum is set
  to a high value, the task_run() would execute already scheduled, and
  all new events that result from running event->ev_action().

  Setting quantum to a number of scheduled events will postpone events
  scheduled after we enter the loop here to the next task_run()
  invocation. :gl:`!9257`

- Raise the log level of priming failures. ``c948babeeb``

  When a priming query is complete, it's currently logged at level
  ISC_LOG_DEBUG(1), regardless of success or failure. We are now raising
  it to ISC_LOG_NOTICE in the case of failure. [GL #3516] :gl:`#3516`
  :gl:`!9251`

- Add a compatibility shim for older libuv versions (< 1.19.0)
  ``61ff983f00``

  The uv_stream_get_write_queue_size() is supported only in relatively
  newer versions of libuv (1.19.0 or higher).  Provide a compatibility
  shim for this function , so BIND 9 can be built in environments with
  older libuv version.

- Remove extra newline from yaml output. ``1222dbe9f9``

  I split this into two commits, one for the actual newline removal, and
  one for issues I found, ruining the yaml output when some errors were
  outputted.

- CID 498025 and CID 498031: Overflowed constant INTEGER_OVERFLOW.
  ``bbdd888b8e``

  Add INSIST to fail if the multiplication would cause the variables to
  overflow. :gl:`#4798` :gl:`!9230`

- Remove unnecessary operations. ``2374a1a2bd``

  Decrementing optlen immediately before calling continue is unneccesary
  and inconsistent with the rest of dns_message_pseudosectiontoyaml and
  dns_message_pseudosectiontotext.  Coverity was also reporting an
  impossible false positive overflow of optlen (CID 499061). :gl:`!9224`

- Fix generation of 6to4-self name expansion from IPv4 address.
  ``df55c15ebb``

  The period between the most significant nibble of the encoded IPv4
  address and the 2.0.0.2.IP6.ARPA suffix was missing resulting in the
  wrong name being checked. Add system test for 6to4-self
  implementation. :gl:`#4766` :gl:`!9218`

- Fix false QNAME minimisation error being reported. ``4984afc80c``

  Remove the false positive "success resolving" log message when QNAME
  minimisation is in effect and the final result is NXDOMAIN.
  :gl:`#4784` :gl:`!9216`

- Dig +yaml was producing unexpected and/or invalid YAML output.
  ``2db62a4dba``

  :gl:`#4796` :gl:`!9214`

- SVBC alpn text parsing failed to reject zero length alpn.
  ``8f7be89052``

  :gl:`#4775` :gl:`!9210`

- Return SERVFAIL for a too long CNAME chain. ``f7de909b98``

  When cutting a long CNAME chain, named was returning NOERROR  instead
  of SERVFAIL (alongside with a partial answer). This has been fixed.
  :gl:`#4449` :gl:`!9204`

- Properly calculate the amount of system memory. ``9faf355a5c``

  On 32 bit machines isc_meminfo_totalphys could return an incorrect
  value. :gl:`#4799` :gl:`!9200`

- Update key lifetime and metadata after dnssec-policy reconfig.
  ``2107a64ee6``

  Adjust key state and timing metadata if dnssec-policy key lifetime
  configuration is updated, so that it also affects existing keys.
  :gl:`#4677` :gl:`!9192`

- Fix dig +timeout argument when using +https. ``381d6246d6``

  The +timeout argument was not used on DoH connections. This has been
  fixed.  :gl:`#4806` :gl:`!9161`


Changes prior to 9.18.28
------------------------

.. code-block:: none

		--- 9.18.28 released ---

	6404.	[security]	Remove SIG(0) support from named as a countermeasure
				for CVE-2024-1975. [GL #4480]

	6403.	[security]	qctx-zversion was not being cleared when it should have
				been leading to an assertion failure if it needed to be
				reused. (CVE-2024-4076) [GL #4507]

	6401.	[security]	An excessively large number of rrtypes per owner can
				slow down database query processing, so a limit has been
				placed on the number of rrtypes that can be stored per
				owner (node) in a cache or zone database. This is
				configured with the new "max-rrtypes-per-name" option,
				and defaults to 100. (CVE-2024-1737)
				[GL #3403] [GL #4548]

	6400.	[security]	Excessively large rdatasets can slow down database
				query processing, so a limit has been placed on the
				number of records that can be stored per rdataset
				in a cache or zone database. This is configured
				with the new "max-records-per-type" option, and
				defaults to 100. (CVE-2024-1737)
				[GL #497] [GL #3405]

	6399.	[security]	Malicious DNS client that sends many queries over
				TCP but never reads responses can cause server to
				respond slowly or not respond at all for other
				clients. (CVE-2024-0760) [GL #4481]

	6398.	[bug]		Fix potential data races in our DoH implementation
				related to HTTP/2 session object management and
				endpoints set object management after reconfiguration.
				We would like to thank Dzintars and Ivo from nic.lv
				for bringing this to our attention. [GL #4473]

	6397.	[bug]		Clear DNS_FETCHOPT_TRYSTALE_ONTIMEOUT when looking for
				parent NS records needed to get the DS result.
				[GL #4661]

	6395.	[bug]		Handle ISC_R_HOSTDOWN and ISC_R_NETDOWN in resolver.c.
				[GL #4736]

	6394.	[bug]		Named's -4 and -6 options now apply to zone primaries,
				also-notify and parental-agents.  Report when a zone
				has these options configured but does not have an IPv4
				or IPv6 address listed respectively. [GL #3472]

	6393.	[func]		Deal with uv_tcp_close_reset() error return codes
				more gracefully. [GL #4708]

	6392.	[bug]		Use a completely new memory context when flushing the
				cache. [GL #2744]

	6391.	[bug]		TCP client statistics could sometimes fail to decrease
				when accepting client connection fails. [GL #4742]

	6390.	[bug]		Fix a data race in isc_task_purgeevent(). [GL !8937]

	6389.	[bug]		dnssec-verify and dnssec-signzone could fail if there
				was an obscured DNSKEY RRset at a delegatation.
				[GL #4517]

	6388.	[bug]		Prevent an assertion failure caused by passing NULL to
				dns_dispatch_resume() when a dns_request times out close
				to view shutdown. [GL #4719]

	6386.	[bug]		When shutting down catzs->view could point to freed
				memory. Obtain a reference to the view to prevent this.
				[GL #4502]

	6385.	[func]		Relax SVCB alias mode checks to allow parameters.
				[GL #4704]

	6384.	[bug]		Remove infinite loop when including a directory in a
				zone file. [GL #4357]

	6383.	[bug]		Address an infinite loop in $GENERATE when a negative
				value was converted in nibble mode. [GL #4353]

	6382.	[bug]		Fix RPZ response's SOA record TTL, which was incorrectly
				set to 1 if 'add-soa' is used. [GL #3323]

.. code-block:: none

		--- 9.18.27 released ---

	6374.	[bug]		Skip to next RRSIG if signature has expired or is in
				the future rather than failing immediately. [GL #4586]

	6372.	[func]		Implement signature jitter for dnssec-policy. [GL #4554]

.. code-block:: none

		--- 9.18.26 released ---

	6364.	[protocol]	Add RESOLVER.ARPA to the built in empty zones.
				[GL #4580]

	6363.	[bug]		dig/mdig +ednsflags=<non-zero-value> did not re-enable
				EDNS if it had been disabled. [GL #4641]

	6361.	[bug]		Some invalid ISO 8601 durations were accepted
				erroneously. [GL #4624]

	6360.	[bug]		Don't return static-stub synthesised NS RRset.
				[GL #4608]

	6359.	[bug]		Fix bug in Depends (keymgr_dep) function. [GL #4552]

	6351.	[protocol]	Support for the RESINFO record type has been added.
				[GL #4413]

	6346.	[bug]		Cleaned up several minor bugs in the RBTDB dbiterator
				implementation. [GL !8741]

	6345.	[bug]		Added missing dns_rdataset_disassociate calls in
				validator.c:findnsec3proofs. [GL #4571]

	6340.	[test]		Fix incorrectly reported errors when running tests
				with `make test` on platforms with older pytest.
				[GL #4560]

	6338.	[func]		Optimize slabheader placement, so the infrastructure
				records are put in the beginning of the slabheader
				linked list. [GL !8675]

	6334.	[doc]		Improve ARM parental-agents definition. [GL #4531]

	6333.	[bug]		Fix the DNS_GETDB_STALEFIRST flag, which was defined
				incorrectly in lib/ns/query.c. [GL !8683]

	6330.	[doc]		Update ZSK minimum lifetime documentation in ARM, also
				depends on signing delay. [GL #4510]

	6328.	[func]		Add workaround to enforce dynamic linker to pull
				jemalloc earlier than libc to ensure all memory
				allocations are done via jemalloc. [GL #4404]

	6326.	[bug]		Changes to "listen-on" statements were ignored on
				reconfiguration unless the port or interface address was
				changed, making it impossible to change a related
				listener transport type. Thanks to Thomas Amgarten.
				[GL #4518] [GL #4528]

	6325.	[func]		Expose the TCP client count in statistics channel.
				[GL #4425]

	6324.	[bug]		Fix a possible crash in 'dig +nssearch +nofail' and
				'host -C' commands when one of the name servers returns
				SERVFAIL. [GL #4508]

	6313.	[bug]		When dnssec-policy is in effect the DNSKEY's TTLs in
				the zone where not being updated to match the policy.
				This lead to failures when DNSKEYs where updated as the
				TTLs mismatched. [GL #4466]

.. code-block:: none

		--- 9.18.25 released ---

	6356.	[bug]		Create the pruning task in the dns_cache_flush(), so
				the cache pruning still works after the flush.
				[GL #4621]

	6353.	[bug]		Improve the TTL-based cleaning by removing the expired
				headers from the heap, so they don't block the next
				cleaning round and clean more than a single item for
				each new addition to the RBTDB. [GL #4591]

	6352.	[bug]		Revert change 6319 and decrease lock contention during
				RBTDB tree pruning by not cleaning up nodes recursively
				within a single prune_tree() call. [GL #4596]

	6350.	[bug]		Address use after free in expire_lru_headers. [GL #4495]

.. code-block:: none

		--- 9.18.24 released ---

	6343.	[bug]		Fix case insensitive setting for isc_ht hashtable.
				[GL #4568]

.. code-block:: none

		--- 9.18.23 released ---

	6322.	[security]	Specific DNS answers could cause a denial-of-service
				condition due to DNS validation taking a long time.
				(CVE-2023-50387) [GL #4424]

				The same code change also addresses another problem:
				preparing NSEC3 closest encloser proofs could exhaust
				available CPU resources. (CVE-2023-50868) [GL #4459]

	6321.	[security]	Change 6315 inadvertently introduced regressions that
				could cause named to crash. [GL #4234]

	6320.	[bug]		Under some circumstances, the DoT code in client
				mode could process more than one message at a time when
				that was not expected. That has been fixed. [GL #4487]

.. code-block:: none

		--- 9.18.22 released ---

	6319.	[func]		Limit isc_task_send() overhead for RBTDB tree pruning.
				[GL #4383]

	6317.	[security]	Restore DNS64 state when handling a serve-stale timeout.
				(CVE-2023-5679) [GL #4334]

	6316.	[security]	Specific queries could trigger an assertion check with
				nxdomain-redirect enabled. (CVE-2023-5517) [GL #4281]

	6315.	[security]	Speed up parsing of DNS messages with many different
				names. (CVE-2023-4408) [GL #4234]

	6314.	[bug]		Address race conditions in dns_tsigkey_find().
				[GL #4182]

	6312.	[bug]		Conversion from NSEC3 signed to NSEC signed could
				temporarily put the zone into a state where it was
				treated as unsigned until the NSEC chain was built.
				Additionally conversion from one set of NSEC3 parameters
				to another could also temporarily put the zone into a
				state where it was treated as unsigned until the new
				NSEC3 chain was built. [GL #1794] [GL #4495]

	6310.	[bug]		Memory leak in zone.c:sign_zone. When named signed a
				zone it could leak dst_keys due to a misplaced
				'continue'. [GL #4488]

	6306.	[func]		Log more details about the cause of "not exact" errors.
				[GL #4500]

	6304.	[bug]		The wrong time was being used to determine what RRSIGs
				where to be generated when dnssec-policy was in use.
				[GL #4494]

	6302.	[func]		The "trust-anchor-telemetry" statement is no longer
				marked as experimental. This silences a relevant log
				message that was emitted even when the feature was
				explicitly disabled. [GL #4497]

	6300.	[bug]		Fix statistics export to use full 64 bit signed numbers
				instead of truncating values to unsigned 32 bits.
				[GL #4467]

	6299.	[port]		NetBSD has added 'hmac' to libc which collides with our
				use of 'hmac'. [GL #4478]

.. code-block:: none

		--- 9.18.21 released ---

	6297.	[bug]		Improve LRU cleaning behaviour. [GL #4448]

	6296.	[func]		The "resolver-nonbackoff-tries" and
				"resolver-retry-interval" options are deprecated;
				a warning will be logged if they are used. [GL #4405]

	6294.	[bug]		BIND might sometimes crash after startup or
				re-configuration when one 'tls' entry is used multiple
				times to connect to remote servers due to initialisation
				attempts from contexts of multiple threads. That has
				been fixed. [GL #4464]

	6290.	[bug]		Dig +yaml will now report "no servers could be reached"
				also for UDP setup failure when no other servers or
				tries are left. [GL #1229]

	6287.	[bug]		Recognize escapes when reading the public key from file.
				[GL !8502]

	6286.	[bug]		Dig +yaml will now report "no servers could be reached"
				on TCP connection failure as well as for UDP timeouts.
				[GL #4396]

	6282.	[func]		Deprecate AES-based DNS cookies. [GL #4421]

.. code-block:: none

		--- 9.18.20 released ---

	6280.	[bug]		Fix missing newlines in the output of "rndc nta -dump".
				[GL !8454]

	6277.	[bug]		Take into account local authoritative zones when
				falling back to serve-stale. [GL #4355]

	6275.	[bug]		Fix assertion failure when using lock-file configuration
				option together -X argument to named. [GL #4386]

	6274.	[bug]		The 'lock-file' file was being removed when it
				shouldn't have been making it ineffective if named was
				started 3 or more times. [GL #4387]

	6271.	[bug]		Fix a shutdown race in dns__catz_update_cb(). [GL #4381]

	6269.	[maint]		B.ROOT-SERVERS.NET addresses are now 170.247.170.2 and
				2801:1b8:10::b. [GL #4101]

	6267.	[func]		The timeouts for resending zone refresh queries over UDP
				were lowered to enable named to more quickly determine
				that a primary is down. [GL #4260]

	6265.	[bug]		Don't schedule resign operations on the raw version
				of an inline-signing zone. [GL #4350]

	6261.	[bug]		Fix a possible assertion failure on an error path in
				resolver.c:fctx_query(), when using an uninitialized
				link. [GL #4331]

	6254.	[cleanup]	Add semantic patch to do an explicit cast from char
				to unsigned char in ctype.h class of functions.
				[GL #4327]

	6252.	[test]		Python system tests have to be executed by invoking
				pytest directly. Executing them with the legacy test
				runner is no longer supported. [GL #4250]

	6250.	[bug]		The wrong covered value was being set by
				dns_ncache_current for RRSIG records in the returned
				rdataset structure. This resulted in TYPE0 being
				reported as the covered value of the RRSIG when dumping
				the cache contents. [GL #4314]

.. code-block:: none

		--- 9.18.19 released ---

	6246.	[security]	Fix use-after-free error in TLS DNS code when sending
				data. (CVE-2023-4236) [GL #4242]

	6245.	[security]	Limit the amount of recursion that can be performed
				by isccc_cc_fromwire. (CVE-2023-3341) [GL #4152]

	6244.	[bug]		Adjust log levels on malformed messages to NOTICE when
				transferring in a zone. [GL #4290]

	6241.	[bug]		Take into account the possibility of partial TLS writes
				in TLS DNS code. That helps to prevent DNS messages
				corruption on long DNS over TLS streams. [GL #4255]

	6240.	[bug]		Use dedicated per-worker thread jemalloc memory
				arenas for send buffers allocation to reduce memory
				consumption and avoid lock contention. [GL #4038]

	6239.	[func]		Deprecate the 'dnssec-must-be-secure' option.
				[GL #3700]

	6237.	[bug]		Address memory leaks due to not clearing OpenSSL error
				stack. [GL #4159]

	6235.	[doc]		Clarify BIND 9 time formats. [GL #4266]

	6234.	[bug]		Restore stale-refresh-time value after flushing the
				cache. [GL #4278]

	6232.	[bug]		Following the introduction of krb5-subdomain-self-rhs
				and ms-subdomain-self-rhs update rules, removal of
				nonexistent PTR and SRV records via UPDATE could fail.
				[GL #4280]

	6231.	[func]		Make nsupdate honor -v for SOA requests if the server
				is specified. [GL #1181]

	6230.	[bug]		Prevent an unnecessary query restart if a synthesized
				CNAME target points to the CNAME owner. [GL #3835]

	6227.	[bug]		Check the statistics-channel HTTP Content-length
				to prevent negative or overflowing values from
				causing a crash. [GL #4125]

	6224.	[bug]		Check the If-Modified-Since value length to prevent
				out-of-bounds write. [GL #4124]

.. code-block:: none

		--- 9.18.18 released ---

	6220.	[func]		Deprecate the 'dialup' and 'heartbeat-interval'
				options. [GL #3700]

	6219.	[bug]		Ignore 'max-zone-ttl' on 'dnssec-policy insecure'.
				[GL #4032]

	6215.	[protocol]	Return REFUSED to GSS-API TKEY requests if GSS-API
				support is not configured. [GL #4225]

	6213.	[bug]		Mark a primary server as temporarily unreachable if the
				TCP connection attempt times out. [GL #4215]

	6212.	[bug]		Don't process detach and close netmgr events when
				the netmgr has been paused. [GL #4200]

.. code-block:: none

		--- 9.18.17 released ---

	6206.	[bug]		Add shutdown checks in dns_catz_dbupdate_callback() to
				avoid a race with dns_catz_shutdown_catzs(). [GL #4171]

	6205.	[bug]		Restore support to read legacy HMAC-MD5 K file pairs.
				[GL #4154]

	6204.	[bug]		Use NS records for relaxed QNAME-minimization mode.
				This reduces the number of queries named makes when
				resolving, as it allows the non-existence of NS RRsets
				at non-referral nodes to be cached in addition to the
				referrals that are normally cached. [GL #3325]

	6200.	[bug]		Fix nslookup erroneously reporting a timeout when the
				input is delayed. [GL #4044]

	6199.	[bug]		Improve HTTP Connection: header protocol conformance
				in the statistics channel. [GL #4126]

	6198.	[func]		Remove the holes in the isc_result_t enum to compact
				the isc_result tables. [GL #4149]

	6197.	[bug]		Fix a data race between the dns_zone and dns_catz
				modules when registering/unregistering a database
				update notification callback for a catalog zone.
				[GL #4132]

	6196.	[cleanup]	Report "permission denied" instead of "unexpected error"
				when trying to update a zone file on a read-only file
				system. Thanks to Midnight Veil. [GL #4134]

	6193.	[bug]		Fix a catz db update notification callback registration
				logic error, which could crash named when receiving an
				AXFR update for a catalog zone while the previous update
				process of the catalog zone was already running.
				[GL #4136]

	6166.	[func]		Retry without DNS COOKIE on FORMERR if it appears that
				the FORMERR was due to the presence of a DNS COOKIE
				option. [GL #4049]

.. code-block:: none

		--- 9.18.16 released ---

	6192.	[security]	A query that prioritizes stale data over lookup
				triggers a fetch to refresh the stale data in cache.
				If the fetch is aborted for exceeding the recursion
				quota, it was possible for 'named' to enter an infinite
				callback loop and crash due to stack overflow. This has
				been fixed. (CVE-2023-2911) [GL #4089]

	6190.	[security]	Improve the overmem cleaning process to prevent the
				cache going over the configured limit. (CVE-2023-2828)
				[GL #4055]

	6188.	[performance]	Reduce memory consumption by allocating properly
				sized send buffers for stream-based transports.
				[GL #4038]

	6186.	[bug]		Fix a 'clients-per-query' miscalculation bug. When the
				'stale-answer-enable' options was enabled and the
				'stale-answer-client-timeout' option was enabled and
				larger than 0, named was taking two places from the
				'clients-per-query' limit for each client and was
				failing to gradually auto-tune its value, as configured.
				[GL #4074]

	6185.	[func]		Add "ClientQuota" statistics channel counter, which
				indicates the number of the resolver's spilled queries
				due to reaching the clients per query quota. [GL !7978]

	6183.	[bug]		Fix a serve-stale bug where a delegation from cache
				could be returned to the client. [GL #3950]

	6182.	[cleanup]	Remove configure checks for epoll, kqueue and
				/dev/poll. [GL #4098]

	6181.	[func]		The "tkey-dhkey" option has been deprecated; a
				warning will be logged when it is used. In a future
				release, Diffie-Hellman TKEY mode will be removed.
				[GL #3905]

	6180.	[bug]		The session key object could be incorrectly added
				to multiple different views' keyrings. [GL #4079]

	6179.	[bug]		Fix an interfacemgr use-after-free error in
				zoneconf.c:isself(). [GL #3765]

	6176.	[test]		Add support for using pytest & pytest-xdist to
				execute the system test suite. [GL #3978]

	6174.	[bug]		BIND could get stuck on reconfiguration when a
				'listen' statement for HTTP is removed from the
				configuration. That has been fixed. [GL #4071]

	6173.	[bug]		Properly process extra "nameserver" lines in
				resolv.conf otherwise the next line is not properly
				processed. [GL #4066]

	6169.	[bug]		named could crash when deleting inline-signing zones
				with "rndc delzone". [GL #4054]

	6165.	[bug]		Fix a logic error in dighost.c which could call the
				dighost_shutdown() callback twice and cause problems
				if the callback function was not idempotent. [GL #4039]

.. code-block:: none

		--- 9.18.15 released ---

	6164.	[bug]		Set the rndc idle read timeout back to 60 seconds,
				from the netmgr default of 30 seconds, in order to
				match the behavior of 9.16 and earlier. [GL #4046]

	6161.	[bug]		Fix log file rotation when using absolute path as
				file. [GL #3991]

	6157.	[bug]		When removing delegations in an OPTOUT range
				empty-non-terminal NSEC3 records generated by
				those delegations were not removed. [GL #4027]

	6156.	[bug]		Reimplement the maximum and idle timeouts for incoming
				zone tranfers. [GL #4004]

	6155.	[bug]		Treat ISC_R_INVALIDPROTO as a networking error
				in the dispatch code to avoid retrying with the
				same server. [GL #4005]

	6152.	[bug]		In dispatch, honour the configured source-port
				selection when UDP connection fails with address
				in use error.

				Also treat ISC_R_NOPERM same as ISC_R_ADDRINUSE.
				[GL #3986]

	6149.	[test]		As a workaround, include an OpenSSL header file before
				including cmocka.h in the unit tests, because OpenSSL
				3.1.0 uses __attribute__(malloc), conflicting with a
				redefined malloc in cmocka.h. [GL #4000]

.. code-block:: none

		--- 9.18.14 released ---

	6145.	[bug]		Fix a possible use-after-free bug in the
				dns__catz_done_cb() function. [GL #3997]

	6143.	[bug]		A reference counting problem on the error path in
				the xfrin_connect_done() might cause an assertion
				failure on shutdown.  [GL #3989]

	6142.	[bug]		Reduce the number of dns_dnssec_verify calls made
				determining if revoked keys needs to be removed from
				the trust anchors. [GL #3981]

	6141.	[bug]		Fix several issues in nsupdate timeout handling and
				update the -t option's documentation. [GL #3674]

	6138.	[doc]		Fix the DF-flag documentation on the outgoing
				UDP packets. [GL #3710]

	6136.	[cleanup]	Remove the isc_fsaccess API in favor of creating
				temporary file first and atomically replace the key
				with non-truncated content. [GL #3982]

	6132.	[doc]		Remove a dead link in the DNSSEC guide. [GL #3967]

	6129.	[cleanup]	Value stored to 'source' during its initialization is
				never read. [GL #3965]

	6128.	[bug]		Fix an omission in an earlier commit to avoid a race
				between the 'dns__catz_update_cb()' and
				'dns_catz_dbupdate_callback()' functions. [GL #3968]

	6126.	[cleanup]	Deprecate zone type "delegation-only" and the
				"delegation-only" and "root-delegation-only"
				options. [GL #3953]

	6125.	[bug]		Hold a catz reference while the update process is
				running, so that the catalog zone is not destroyed
				during shutdown until the update process is finished or
				properly canceled by the activated 'shuttingdown' flag.
				[GL #3955]

	6124.	[bug]		When changing from a NSEC3 capable DNSSEC algorithm to
				an NSEC3 incapable DNSSEC algorithm using KASP the zone
				could sometimes be incompletely signed. [GL #3937]

	6121.	[bug]		Fix BIND and dig zone transfer hanging when
				downloading large zones over TLS from a primary server,
				especially over unstable connections. [GL #3867]

.. code-block:: none

		--- 9.18.13 released ---

	6120.	[bug]		Use two pairs of dns_db_t and dns_dbversion_t in a
				catalog zone structure to avoid a race between the
				dns__catz_update_cb() and dns_catz_dbupdate_callback()
				functions. [GL #3907]

	6119.	[bug]		Make sure to revert the reconfigured zones to the
				previous version of the view, when the new view
				reconfiguration fails during the configuration of
				one of the configured zones. [GL #3911]

	6116.	[bug]		Fix error path cleanup issues in dns_catz_new_zones()
				and dns_catz_new_zone() functions. [GL #3900]

	6115.	[bug]		Unregister db update notify callback before detaching
				from the previous db inside the catz update notify
				callback. [GL #3777]

	6114.	[func]		Run the catalog zone update process on the offload
				threads. [GL #3881]

	6113.	[func]		Add shutdown signaling for catalog zones. [GL !7571]

	6112.	[func]		Add reference count tracing for dns_catz_zone_t and
				dns_catz_zones_t. [GL !7570]

	6105.	[bug]		Detach 'rpzs' and 'catzs' from the previous view in
				configure_rpz() and configure_catz(), respectively,
				just after attaching it to the new view. [GL #3880]

	6098.	[test]		Don't test HMAC-MD5 when not supported by libcrypto.
				[GL #3871]

	6096.	[bug]		Fix RPZ reference counting error on shutdown in
				dns__rpz_timer_cb(). [GL #3866]

	6095.	[test]		Test various 'islands of trust' configurations when
				using managed keys. [GL #3662]

	6094.	[bug]		Building against (or running with) libuv versions
				1.35.0 and 1.36.0 is now a fatal error.  The rules for
				mixing and matching compile-time and run-time libuv
				versions have been tightened for libuv versions between
				1.35.0 and 1.40.0. [GL #3840]

	6092.	[bug]		dnssec-cds failed to cleanup properly. [GL #3831]

	6089.	[bug]		Source ports configured for query-source,
				transfer-source, etc, were being ignored. (This
				feature is deprecated, but it is not yet removed,
				so the bug still needed fixing.) [GL #3790]

.. code-block:: none

		--- 9.18.12 released ---

	6083.	[bug]		Fix DNSRPS-enabled builds as they were inadvertently
				broken by change 6042. [GL #3827]

	6082.	[test]		fuzz/dns_message_checksig leaked memory when shutting
				down. [GL #3828]

	6081.	[bug]		Handle primary server address lookup failures in
				nsupdate more gracefully. [GL #3830]

	6080.	[bug]		'named -V' leaked memory. [GL #3829]

	6079.	[bug]		Force set the DS state after a 'rdnc dnssec -checkds'
				command. [GL #3822]

	6075.	[bug]		Add missing node lock when setting node->wild in
				add_wildcard_magic. [GL #3799]

	6074.	[func]		Refactor the isc_nm_xfr_allowed() function to return
				isc_result_t instead of boolean. [GL #3808]

	6073.	[bug]		Set RD=1 on DS requests to parental-agents. [GL #3783]

	6072.	[bug]		Avoid the OpenSSL lock contention when initializing
				Message Digest Contexts by using explicit algorithm
				fetching, initializing static contexts for every
				supported algorithms, and initializing the new context
				by copying the static copy. [GL #3795]

	6071.	[func]		The use of "port" when configuring query-source,
				transfer-source, notify-source and parental-source
				addresses has been deprecated, along with the
				use-v[46]-udp-ports and avoid-v[46]-udp-ports
				options. A warning will be logged when these
				options are used. In a future release, they
				will be removed. [GL #3781]


	6069.	[bug]		Detach from the view in zone_shutdown() to
				release the memory held by the dead view
				early. [GL #3801]

	6068.	[bug]		Downloading a zone via TLS from a server which does
				not negotiate "dot" ALPN token could crash BIND
				on shutdown. That has been fixed. [GL #3767]

	6057.	[bug]		Fix shutdown and error path bugs in the rpz unit.
				[GL #3735]

	5850.	[func]		Run the RPZ update process on the offload threads.
				[GL #3190]

.. code-block:: none

		--- 9.18.11 released ---

	6067.	[security]	Fix serve-stale crash when recursive clients soft quota
				is reached. (CVE-2022-3924) [GL #3619]

	6066.	[security]	Handle RRSIG lookups when serve-stale is active.
				(CVE-2022-3736) [GL #3622]

	6064.	[security]	An UPDATE message flood could cause named to exhaust all
				available memory. This flaw was addressed by adding a
				new "update-quota" statement that controls the number of
				simultaneous UPDATE messages that can be processed or
				forwarded. The default is 100. A stats counter has been
				added to record events when the update quota is
				exceeded, and the XML and JSON statistics version
				numbers have been updated. (CVE-2022-3094) [GL #3523]

	6062.	[func]		The DSCP implementation, which has been
				nonfunctional for some time, is now marked as
				obsolete and the implementation has been removed.
				Configuring DSCP values in named.conf has no
				effect, and a warning will be logged that
				the feature should no longer be used. [GL #3773]

	6061.	[bug]		Fix unexpected "Prohibited" extended DNS error
				on allow-recursion. [GL #3743]

	6060.	[bug]		Fix a use-after-free bug in dns_zonemgr_releasezone()
				by detaching from the zone manager outside of the write
				lock. [GL #3768]

	6059.	[bug]		In some serve stale scenarios, like when following an
				expired CNAME record, named could return SERVFAIL if the
				previous request wasn't successful. Consider non-stale
				data when in serve-stale mode. [GL #3678]

	6058.	[bug]		Prevent named from crashing when "rndc delzone"
				attempts to delete a zone added by a catalog zone.
				[GL #3745]

	6053.	[bug]		Fix an ADB quota management bug in resolver. [GL #3752]

	6051.	[bug]		Improve thread safety in the dns_dispatch unit.
				[GL #3178] [GL #3636]

	6050.	[bug]		Changes to the RPZ response-policy min-update-interval
				and add-soa options now take effect as expected when
				named is reconfigured. [GL #3740]

	6049.	[bug]		Exclude ABD hashtables from the ADB memory
				overmem checks and don't clean ADB names
				and ADB entries used in the last 10 seconds
				(ADB_CACHE_MINIMUM). [GL #3739]

	6048.	[bug]		Fix a log message error in dns_catz_update_from_db(),
				where serials with values of 2^31 or larger were logged
				incorrectly as negative numbers. [GL #3742]

	6047.	[bug]		Try the next server instead of trying the same
				server again on an outgoing query timeout.
				[GL #3637]

	6046.	[bug]		TLS session resumption might lead to handshake
				failures when client certificates are used for
				authentication (Mutual TLS).  This has been fixed.
				[GL #3725]

	6045.	[cleanup]	The list of supported DNSSEC algorithms changed log
				level from "warning" to "notice" to match named's other
				startup messages. [GL !7217]

	6044.	[bug]		There was an "RSASHA236" typo in a log message.
				[GL !7206]

	5845.	[bug]		Refactor the timer to keep track of posted events
				as to use isc_task_purgeevent() instead of using
				isc_task_purgerange().  The isc_task_purgeevent()
				has been refactored to purge a single event instead
				of walking through the list of posted events.
				[GL #3252]

	5830.	[func]		Implement incremental resizing of isc_ht hash tables to
				perform the rehashing gradually. The catalog zone
				implementation has been optimized to work with hundreds
				of thousands of member zones. [GL #3212] [GL #3744]

.. code-block:: none

		--- 9.18.10 released ---

	6043.	[bug]		The key file IO locks objects would never get
				deleted from the hashtable due to off-by-one error.
				[GL #3727]

	6042.	[bug]		ANY responses could sometimes have the wrong TTL.
				[GL #3613]

	6040.	[bug]		Speed up the named shutdown time by explicitly
				canceling all recursing ns_client objects for
				each ns_clientmgr. [GL #3183]

	6039.	[bug]		Removing a catalog zone from catalog-zones without
				also removing the referenced zone could leave a
				dangling pointer. [GL #3683]

	6036.	[bug]		nslookup and host were not honoring the selected port
				in TCP mode. [GL #3721]

	6034.	[func]		Deprecate alt-transfer-source, alt-transfer-source-v6
				and use-alt-transfer-source. [GL #3694]

	6031.	[bug]		Move the "final reference detached" log message
				from dns_zone unit to the DEBUG(1) log level.
				[GL #3707]

	6027.	[bug]		Fix assertion failure in isc_http API used by
				statschannel if the read callback would be called
				on HTTP request that has been already closed.
				[GL #3693]

	6026.	[cleanup]	Deduplicate time unit conversion factors.
				[GL !7033]

	6025.	[bug]		Copy TLS identifier when setting up primaries for
				catalog member zones. [GL #3638]

	6024.	[func]		Deprecate 'auto-dnssec'. [GL #3667]

	6022.	[performance]	The decompression implementation in dns_name_fromwire()
				is now smaller and faster. [GL #3655]

	6021.	[bug]		Use the current domain name when checking answers from
				a dual-stack-server. [GL #3607]

	6020.	[bug]		Ensure 'named-checkconf -z' respects the check-wildcard
				option when loading a zone.  [GL #1905]

	6019.	[func]		Deprecate `coresize`, `datasize`, `files`, and
				`stacksize` named.conf options. [GL #3676]


	6017.	[bug]		The view's zone table was not locked when it should
				have been leading to race conditions when external
				extensions that manipulate the zone table where in
				use. [GL #3468]

	6015.	[bug]		Some browsers (Firefox) send more than 10 HTTP
				headers.  Bump the number of allowed HTTP headers
				to 100. [GL #3670]

	5902.	[func]		NXDOMAIN cache records are no longer retained in
				the cache after expiry, even when serve-stale is
				in use. [GL #3386]

.. code-block:: none

		--- 9.18.9 released ---

	6013.	[bug]		Fix a crash that could happen when you change
				a dnssec-policy zone with NSEC3 to start using
				inline-signing. [GL #3591]

	6009.	[bug]		Don't trust a placeholder KEYDATA from the managed-keys
				zone by adding it into secroots. [GL #2895]

	6008.	[bug]		Fixed a race condition that could cause a crash
				in dns_zone_synckeyzone(). [GL #3617]

	6007.	[cleanup]	Don't enforce the jemalloc use on NetBSD. [GL #3634]

	6003.	[bug]		Fix an inheritance bug when setting the port on
				remote servers in configuration. [GL #3627]

	6002.	[bug]		Fix a resolver prefetch bug when the record's TTL value
				is equal to the configured prefetch eligibility value,
				but the record was erroneously not treated as eligible
				for prefetching. [GL #3603]

	6001.	[bug]		Always call dns_adb_endudpfetch() after calling
				dns_adb_beginudpfetch() for UDP queries in resolver.c,
				in order to adjust back the quota. [GL #3598]

	6000.	[bug]		Fix a startup issue on Solaris systems with many
				(reportedly > 510) CPUs. Thanks to Stacey Marshall from
				Oracle for deep investigation of the problem. [GL #3563]

	5999.	[bug]		rpz-ip rules could be ineffective in some scenarios
				with CD=1 queries. [GL #3247]

	5998.	[bug]		The RecursClients statistics counter could overflow
				in certain resolution scenarios. [GL #3584]

	5997.	[cleanup]	Less ceremonial UNEXPECTED_ERROR() and FATAL_ERROR()
				reporting macros. [GL !6914]

	5996.	[bug]		Fix a couple of bugs in cfg_print_duration(), which
				could result in generating incomplete duration values
				when printing the configuration using named-checkconf.
				[GL !6880]

	5994.	[func]		Refactor the isc_httpd implementation used in the
				statistics channel. [GL !6879]

.. code-block:: none

		--- 9.18.8 released ---

	5991.	[protocol]	Add support for parsing and validating "dohpath" to
				SVCB. [GL #3544]

	5990.	[test]		fuzz/dns_message_checksig now creates the key directory
				it uses when testing in /tmp at run time. [GL #3569]

	5988.	[bug]		Some out of memory conditions in opensslrsa_link.c
				could lead to memory leaks. [GL #3551]

	5984.	[func]		'named -V' now reports the list of supported
				DNSSEC/DS/HMAC algorithms and the supported TKEY modes.
				[GL #3541]

	5983.	[bug]		Changing just the TSIG key names for primaries in
				catalog zones' member zones was not effective.
				[GL #3557]

	5982.	[func]		Extend dig to allow requests to be signed using SIG(0)
				as well as providing a mechanism to specify the signing
				time. [GL !5923]

	5981.	[test]		Add dns_message_checksig fuzzer to check messages
				signed using TSIG or SIG(0). [GL !5923]

	5978.	[port]		The ability to use pkcs11 via engine_pkcs11 has been
				restored, by only using deprecated APIs in
				OpenSSL 3.0.0. BIND needs to be compiled with
				'-DOPENSSL_API_COMPAT=10100' specified in the CFLAGS
				at compile time. [GL !6711]

	5973.	[bug]		Fixed a possible invalid detach in UPDATE
				processing. [GL #3522]

	5972.	[bug]		Gracefully handle when the statschannel HTTP connection
				gets cancelled during sending data back to the client.
				[GL #3542]

	5970.	[func]		Log the reason why a query was refused. [GL !6669]

	5967.	[cleanup]	Flagged the "random-device" option (which was
				already nonoperational) as obsolete; configuring it
				will generate a warning.  [GL #3399]

	5963.	[bug]		Ensure struct named_server is properly initialized.
				[GL #6531]

.. code-block:: none

		--- 9.18.7 released ---

	5962.	[security]	Fix memory leak in EdDSA verify processing.
				(CVE-2022-38178) [GL #3487]

	5960.	[security]	Fix serve-stale crash that could happen when
				stale-answer-client-timeout was set to 0 and there was
				a stale CNAME in the cache for an incoming query.
				(CVE-2022-3080) [GL #3517]

	5959.	[security]	Fix memory leaks in the DH code when using OpenSSL 3.0.0
				and later versions. The openssldh_compare(),
				openssldh_paramcompare(), and openssldh_todns()
				functions were affected. (CVE-2022-2906) [GL #3491]

	5958.	[security]	When an HTTP connection was reused to get
				statistics from the stats channel, and zlib
				compression was in use, each successive
				response sent larger and larger blocks of memory,
				potentially reading past the end of the allocated
				buffer. (CVE-2022-2881) [GL #3493]

	5957.	[security]	Prevent excessive resource use while processing large
				delegations. (CVE-2022-2795) [GL #3394]

	5956.	[func]		Make RRL code treat all QNAMEs that are subject to
				wildcard processing within a given zone as the same
				name. [GL #3459]

	5955.	[port]		The libxml2 library has deprecated the usage of
				xmlInitThreads() and xmlCleanupThreads() functions. Use
				xmlInitParser() and xmlCleanupParser() instead.
				[GL #3518]

	5954.	[func]		Fallback to IDNA2003 processing in dig when IDNA2008
				conversion fails. [GL #3485]

	5953.	[bug]		Fix a crash on shutdown in delete_trace_entry(). Add
				mctx attach/detach pair to make sure that the memory
				context used by a memory pool is not destroyed before
				the memory pool itself. [GL #3515]

	5952.	[bug]		Use quotes around address strings in YAML output.
				[GL #3511]

	5951.	[bug]		In some cases, the dnstap query_message field was
				erroneously set when logging response messages.
				[GL #3501]

	5948.	[bug]		Fix nsec3.c:dns_nsec3_activex() function, add a missing
				dns_db_detachnode() call. [GL #3500]

	5947.	[func]		Change dnssec-policy to allow graceful transition from
				an NSEC only zone to NSEC3. [GL #3486]

	5946.	[bug]		Fix statistics channel's handling of multiple HTTP
				requests in a single connection which have non-empty
				request bodies. [GL #3463]

	5945.	[bug]		If parsing /etc/bind.key failed, delv could assert
				when trying to parse the built in trust anchors as
				the parser hadn't been reset. [GL !6468]

	5944.	[bug]		Fix +http-plain-get and +http-plain-post options
				support in dig. Thanks to Marco Davids at SIDN for
				reporting the problem. [GL !6672]

	5942.	[bug]		Fix tkey.c:buildquery() function's error handling by
				adding the missing cleanup code. [GL #3492]

	5941.	[func]		Zones with dnssec-policy now require dynamic DNS or
				inline-siging to be configured explicitly. [GL #3381]

	5938.	[bug]		An integer type overflow could cause an assertion
				failure when freeing memory. [GL #3483]

	5936.	[bug]		Don't enable serve-stale for lookups that error because
				it is a duplicate query or a query that would be
				dropped. [GL #2982]

	5935.	[bug]		Fix DiG lookup reference counting bug, which could
				be observed in NSSEARCH mode. [GL #3478]

.. code-block:: none

		--- 9.18.6 released ---

	5934.	[func]		Improve fetches-per-zone fetch limit logging to log
				the final allowed and spilled values of the fetch
				counters before the counter object gets destroyed.
				[GL #3461]

	5933.	[port]		Automatically disable RSASHA1 and NSEC3RSASHA1 in
				named on Fedorda 33, Oracle Linux 9 and RHEL9 when
				they are disabled by the security policy. [GL #3469]

	5932.	[bug]		Fix rndc dumpdb -expired and always include expired
				RRsets, not just for RBTDB_VIRTUAL time window.
				[GL #3462]

	5931.	[bug]		Fix DiG query error handling robustness in NSSEARCH
				mode by making sure that udp_ready(), tcp_connected(),
				and send_done() callbacks start the next query in chain
				even if there is some kind of error with the previous
				query. [GL #3419]

	5930.	[bug]		Fix DiG query retry and fail-over bug in UDP mode.
				Also simplify the overall retry and fail-over logic to
				make it behave predictably, and always respect the
				documented +retry/+tries count set by a command-line
				option (or use the default values of 2 or 3
				respectively). [GL #3407]

	5929.	[bug]		The "max-zone-ttl" option in "dnssec-policy" was
				not fully effective; it was used for timing key
				rollovers but did not actually place an upper limit
				on TTLs when loading a zone. This has been
				corrected, and the documentation has been clarified
				to indicate that the old "max-zone-ttl" zone option
				is now ignored when "dnssec-policy" is in use.
				[GL #2918]

	5927.	[bug]		A race was possible in dns_dispatch_connect()
				that could trigger an assertion failure if two
				threads called it near-simultaneously. [GL #3456]

	5926.	[func]		Handle transient TCP connect() EADDRINUSE failures
				on FreeBSD (and possibly other BSDs) by trying three
				times before giving up. [GL #3451]

	5925.	[bug]		With a forwarder configured for all queries, resolution
				failures encountered during DS chasing could trigger
				assertion failures due to a logic bug in
				resume_dslookup() that caused it to call
				dns_resolver_createfetch() with an invalid name.
				[GL #3439]

	5924.	[func]		When it's necessary to use AXFR to respond to an
				IXFR request, a message explaining the reason
				is now logged at level info. [GL #2683]

	5923.	[bug]		Fix inheritance for dnssec-policy when checking for
				inline-signing. [GL #3438]

	5922.	[bug]		Forwarding of UPDATE message could fail with the
				introduction of netmgr. This has been fixed. [GL #3389]

	5921.	[test]		Convert system tests to use a default DNSKEY algorithm
				where the test is not DNSKEY algorithm specific.
				[GL #3440]

.. code-block:: none

		--- 9.18.5 released ---

	5917.	[bug]		Update ifconfig.sh script as is miscomputed interface
				identifiers when destroying interfaces. [GL #3061]

	5916.	[bug]		When resolving a name, don't give up immediately if an
				authoritative server returns FORMERR; try the other
				servers first. [GL #3152]

	5915.	[bug]		Detect missing closing brace (}) and computational
				overflows in $GENERATE directives. [GL #3429]

	5914.	[bug]		When synth-from-dnssec generated a response using
				records from a higher zone, it could unexpectedly prove
				non-existance of records in a subordinate grafted-on
				namespace. [GL #3402]

	5911.	[bug]		Update HTTP listener settings on reconfiguration.
				[GL #3415]

	5910.	[cleanup]	Move built-in dnssec-policies into the defaultconf.
				These are now printed with 'named -C'. [GL !6467]

	5909.	[bug]		The server-side destination port was missing from dnstap
				captures of client traffic. [GL #3309]

	5908.	[bug]		Fix race conditions in route_connected(). [GL #3401]

	5907.	[bug]		Fix a crash in dig NS search mode when one of the NS
				server queries fail. [GL #3207]

	5905.	[bug]		When the TCP connection would be closed/reset between
				the connect/accept and the read, the uv_read_start()
				return value would be unexpected and cause an assertion
				failure. [GL #3400]

	5904.	[func]		Changed dnssec-signzone -H default to 0 additional
				NSEC3 iterations. [GL #3395]

	5903.	[bug]		When named checks that the OPCODE in a response matches
				that of the request, if there is a mismatch named logs
				an error.  Some of those error messages incorrectly
				used RCODE instead of OPCODE to lookup the nemonic.
				This has been corrected. [GL !6420]

	5901.	[bug]		When processing a catalog zone member zone make sure
				that there is no configured pre-existing forward-only
				forward zone with that name. [GL #2506]

.. code-block:: none

		--- 9.18.4 released ---

	5899.	[func]		Don't try to process DNSSEC-related and ZONEMD records
				in catz. [GL #3380]

	5896.	[func]		Add some more dnssec-policy checks to detect weird
				policies. [GL #1611]

	5895.	[test]		Add new set of unit test macros and move the unit
				tests under single namespace in /tests/. [GL !6243]

	5893.	[func]		Add TLS session resumption support to the client-side
				TLS code. [GL !6274]

	5891.	[func]		Key timing options for `dnssec-settime` and related
				utilities now accept "UNSET" times as printed by
				`dnssec-settime -p`. [GL #3361]

	5890.	[bug]		When the fetches-per-server quota was adjusted
				because of an authoritative server timing out more
				or less frequently, it was incorrectly set to 1
				rather than the intended value.  This has been
				fixed. [GL #3327]

	5888.	[bug]		Only write key files if the dnssec-policy keymgr has
				changed the metadata. [GL #3302]

	5837.	[func]		Key timing options for `dnssec-keygen` and
				`dnssec-settime` now accept times as printed by
				`dnssec-settime -p`. [GL !2947]

.. code-block:: none

		--- 9.18.3 released ---

	5886.	[security]	Fix a crash in DNS-over-HTTPS (DoH) code caused by
				premature TLS stream socket object deletion.
				(CVE-2022-1183) [GL #3216]

	5885.	[bug]		RPZ NSIP and NSDNAME rule processing didn't handle stub
				and static-stub zones at or above the query name.  This
				has now been addressed. [GL #3232]

	5882.	[contrib]	Avoid name space collision in dlz modules by prefixing
				functions with 'dlz_'. [GL !5778]

	5880.	[func]		Add new named command-line option -C to print built-in
				defaults. [GL #1326]

	5879.	[contrib]	dlz: Add FALLTHROUGH and UNREACHABLE macros. [GL #3306]

	5877.	[func]		Introduce the concept of broken catalog zones described
				in the DNS catalog zones draft version 5 document.
				[GL #3224]

	5876.	[func]		Add DNS Extended Errors when stale answers are returned
				from cache. [GL #2267]

	5875.	[bug]		Fixed a deadlock that could occur if an rndc
				connection arrived during the shutdown of network
				interfaces. [GL #3272]

	5873.	[bug]		Refactor the fctx_done() function to set fctx to
				NULL after detaching, so that reference counting
				errors will be easier to avoid. [GL #2969]

	5872.	[bug]		udp_recv() in dispatch could trigger an INSIST when the
				callback's result indicated success but the response
				was canceled in the meantime. [GL #3300]

	5866.	[bug]		Work around a jemalloc quirk which could trigger an
				out-of-memory condition in named over time. [GL #3287]

	5863.	[bug]		If there was a pending negative cache DS entry,
				validations depending upon it could fail. [GL #3279]

	5862.	[bug]		dig returned a 0 exit status on UDP connection failure.
				[GL #3235]

	5861.	[func]		Implement support for catalog zones change of ownership
				(coo) mechanism described in the DNS catalog zones draft
				version 5 document. [GL #3223]

	5860.	[func]		Implement support for catalog zones options new syntax
				based on catalog zones custom properties with "ext"
				suffix described in the DNS catalog zones draft version
				5 document. [GL #3222]

	5859.	[bug]		Fix an assertion failure when using dig with +nssearch
				and +tcp options by starting the next query in the
				send_done() callback (like in the UDP mode) instead
				of doing that recursively in start_tcp(). Also
				ensure that queries interrupted while connecting
				are detached properly. [GL #3144]

	5858.	[bug]		Don't remove CDS/CDNSKEY DELETE records on zone sign
				when using 'auto-dnssec maintain;'. [GL #2931]

	5854.	[func]		Implement reference counting for TLS contexts and
				allow reloading of TLS certificates on reconfiguration
				without destroying the underlying TCP listener sockets
				for TLS-based DNS transports. [GL #3122]

	5849.	[cleanup]	Remove use of exclusive mode in ns_interfacemgr in
				favor of rwlocked access to localhost and localnets
				members of dns_aclenv_t structure. [GL #3229]

	5842.	[cleanup]	Remove the task exclusive mode use in ns_clientmgr.
				[GL #3230]

	5839.	[func]		Add support for remote TLS certificates
				verification, both to BIND and dig, making it possible
				to implement Strict and Mutual TLS authentication,
				as described in RFC 9103, Section 9.3. [GL #3163]

.. code-block:: none

		--- 9.18.2 released ---

	5856.	[bug]		The "starting maxtime timer" message related to outgoing
				zone transfers was incorrectly logged at the ERROR level
				instead of DEBUG(1). [GL #3208]

	5855.	[bug]		Ensure that zone maintenance queries have a retry limit.
				[GL #3242]

	5853.	[bug]		When using both the `+qr` and `+y` options `dig` could
				crash if the connection to the first server was not
				successful. [GL #3244]

	5852.	[func]		Add new "reuseport" option to enable/disable load
				balancing of sockets. [GL #3249]

	5848.	[bug]		dig could hang in some cases involving multiple servers
				in a lookup, when a request fails and the next one
				refuses to start for some reason, for example if it was
				an IPv4 mapped IPv6 address. [GL #3248]

	5844.	[bug]		dig +nssearch was hanging until manually interrupted.
				[GL #3145]

	5843.	[bug]		When an UPDATE targets a zone that is not configured,
				the requested zone name is now logged in the "not
				authoritative" error message, so that it is easier to
				track down problematic update clients. [GL #3209]

	5838.	[cleanup]	When modifying a member zone in a catalog zone, and it
				is detected that the zone exists and was not created by
				the current catalog zone, distinguish the two cases when
				the zone was not added by a catalog zone at all, and
				when the zone was added by a different catalog zone,
				and log a warning message accordingly. [GL #3221]

	5836.	[bug]		Quote the dns64 prefix in error messages that complain
				about problems with it, to avoid confusion with the
				following dns64 ACLs. [GL #3210]

	5834.	[cleanup]	C99 variable-length arrays are difficult to use safely,
				so avoid them except in test code. [GL #3201]

	5833.	[bug]		When encountering socket error while trying to initiate
				a TCP connection to a server, dig could hang
				indefinitely, when there were more servers to try.
				[GL #3205]

	5832.	[bug]		When timing-out or having other types of socket errors
				during a query, dig wasn't trying to perform the lookup
				using other servers, in case they exist. [GL #3128]

	5831.	[bug]		When resending a UDP request in the result of a timeout,
				the recv_done() function in dighost.c was prepending
				the new query into the loookup's queries list instead
				of inserting, which could cause an assertion failure
				when the resent query's result was SERVFAIL. [GL #3020]

	5828.	[bug]		Replace single TCP write timer with per-TCP write
				timers. [GL #3200]

	5825.	[func]		Set the minimum MTU on UDPv6 and TCPv6 sockets and
				limit TCP maximum segment size (TCP_MAXSEG) to (1220)
				for both TCPv4 and TCPv6 sockets. [GL #2201]

	5824.	[bug]		Invalid dnssec-policy definitions were being accepted
				where the defined keys did not cover both KSK and ZSK
				roles for a given algorithm.  This is now checked for
				and the dnssec-policy is rejected if both roles are
				not present for all algorithms in use. [GL #3142]

	5823.	[func]		Replace hazard pointers based lock-free list with
				locked-list based queue that's simpler and has no or
				little performance impact. [GL #3180]

	5822.	[bug]		When calling dns_dispatch_send(), attach/detach
				dns_request_t object as the read callback could
				be called before send callback dereferencing
				dns_request_t object too early. [GL #3105]

	5821.	[bug]		Fix query context management issues in the TCP part
				of dig. [GL #3184]

.. code-block:: none

		--- 9.18.1 released ---

	5820.	[security]	An assertion could occur in resume_dslookup() if the
				fetch had been shut down earlier. (CVE-2022-0667)
				[GL #3129]

	5819.	[security]	Lookups involving a DNAME could trigger an INSIST when
				"synth-from-dnssec" was enabled. (CVE-2022-0635)
				[GL #3158]

	5818.	[security]	A synchronous call to closehandle_cb() caused
				isc__nm_process_sock_buffer() to be called recursively,
				which in turn left TCP connections hanging in the
				CLOSE_WAIT state blocking indefinitely when
				out-of-order processing was disabled. (CVE-2022-0396)
				[GL #3112]

	5817.	[security]	The rules for acceptance of records into the cache
				have been tightened to prevent the possibility of
				poisoning if forwarders send records outside
				the configured bailiwick. (CVE-2021-25220) [GL #2950]

	5816.	[bug]		Make BIND compile with LibreSSL 3.5.0, as it was using
				not very accurate pre-processor checks for using shims.
				[GL #3172]

	5815.	[bug]		If an oversized key name of a specific length was used
				in the text form of an HTTP or SVBC record, an INSIST
				could be triggered when parsing it. [GL #3175]

	5814.	[bug]		The RecursClients statistics counter could underflow
				in certain resolution scenarios. [GL #3147]

	5812.	[func]		Drop the artificial limit on the number of queries
				processed in a single TCP read callback. [GL #3141]

	5811.	[bug]		Reimplement the maximum and idle timeouts for outgoing
				zone transfers. [GL #1897]

	5809.	[bug]		Reset client TCP connection when data received cannot
				be parsed as a valid DNS request. [GL #3149]

	5808.	[bug]		Certain TCP failures were not caught and handled
				correctly by the dispatch manager, causing
				connections to time out rather than returning
				SERVFAIL. [GL #3133]

	5807.	[bug]		Add a TCP "write" timer, and time out writing
				connections after the "tcp-idle-timeout" period
				has elapsed. [GL #3132]

	5806.	[bug]		An error in checking the "blackhole" ACL could cause
				DNS requests sent by named to fail if the
				destination address or prefix was specifically
				excluded from the ACL. [GL #3157]

	5805.	[func]		The result of each resolver priming attempt is now
				included in the "resolver priming query complete" log
				message. [GL #3139]

	5804.	[func]		Add a debug log message when starting and ending
				the task exclusive mode. [GL #3137]

	5803.	[func]		Use compile-time paths in the documentation.
				[GL #2717]

	5802.	[test]		Add system test to test engine_pkcs11. [GL !5727]

	5801.	[bug]		Log "quota reached" message when hard quota
				is reached when accepting a connection. [GL #3125]

	5800.	[func]		Add ECS support to the DLZ interface. [GL #3082]

	5799.	[bug]		Use L1 cache-line size detected at runtime. [GL #3108]

	5798.	[test]		Add system test to test dnssec-keyfromlabel. [GL #3092]

	5797.	[bug]		A failed view configuration during a named
				reconfiguration procedure could cause inconsistencies
				in BIND internal structures, causing a crash or other
				unexpected errors. [GL #3060]

.. code-block:: none

		--- 9.18.0 released ---

	5796.	[bug]		Ignore the invalid (<= 0) values returned
				by the sysconf() check for the L1 cache line
				size.  [GL #3108]

	5795.	[bug]		rndc could crash when interrupted by a signal
				before receiving a response. [GL #3080]

	5794.	[func]		Set the IPV6_V6ONLY on all IPv6 sockets to
				restrict the IPv6 sockets to sending and
				receiving IPv6 packets only. [GL #3093]

	5793.	[bug]		Correctly detect and enable UDP recvmmsg support
				in all versions of libuv that support it. [GL #3095]

	5792.	[bug]		Don't schedule zone events on ISC_R_SHUTTINGDOWN
				event failures. [GL #3084]

	5791.	[func]		Remove workaround for servers returning FORMERR
				when receiving NOTIFY query with SOA record in
				ANSWER section. [GL #3086]

	5790.	[bug]		The control channel was incorrectly looking for
				ISC_R_CANCELED as a signal that the named is
				shutting down.  In the dispatch refactoring,
				the result code returned from network manager
				is now ISC_R_SHUTTINGDOWN.  Change the control
				channel code to use ISC_R_SHUTTINGDOWN result
				code to detect named being shut down. [GL #3079]

.. code-block:: none

		--- 9.17.22 released ---

	5789.	[bug]		Allow replacing expired zone signatures with
				signatures created by the KSK. [GL #3049]

	5788.	[bug]		An assertion could occur if a catalog zone event was
				scheduled while the task manager was being shut
				down. [GL #3074]

	5787.	[doc]		Update 'auto-dnssec' documentation, it may only be
				activated at zone level. [GL #3023]

	5786.	[bug]		Defer detaching from zone->raw in zone_shutdown() if
				the zone is in the process of being dumped to disk, to
				ensure that the unsigned serial number information is
				always written in the raw-format header of the signed
				version on an inline-signed zone. [GL #3071]

	5785.	[bug]		named could leak memory when two dnssec-policy clauses
				had the same name. named failed to log this error.
				[GL #3085]

	5784.	[func]		Implement TLS-contexts reuse. Reusing the
				previously created TLS context objects can reduce
				initialisation time for some configurations and enables
				TLS session resumption for incoming zone transfers over
				TLS (XoT). [GL #3067]

	5783.	[func]		named is now able to log TLS pre-master secrets for
				debugging purposes. This requires setting the
				SSLKEYLOGFILE environment variable appropriately.
				[GL #2723]

	5782.	[func]		Use ECDSA P-256 instead of a 4096-bit RSA when
				generating ephemeral key and certificate for the
				'tls ephemeral' configuration. [GL #2264]

	5781.	[bug]		Make BIND work with OpenSSL 3.0.1 as it is now
				enforcing minimum buffer lengths in EVP_MAC_final and
				hence EVP_DigestSignFinal.  rndc and TSIG at a minimum
				were broken by this change. [GL #3057]

	5780.	[bug]		The Linux kernel may send netlink messages
				indicating that network interfaces have changed
				when they have not. This caused frequent unnecessary
				re-scans of the interfaces.  Netlink messages now
				only trigger re-scanning if a new address is seen
				or an existing address is removed. [GL #3055]

	5779.	[test]		Drop cppcheck suppressions and workarounds. [GL #2886]

	5778.	[bug]		Destroyed TLS contexts could have been used after a
				reconfiguration, making BIND unable to serve queries
				over TLS and HTTPS. [GL #3053]

	5777.	[bug]		TCP connections could hang after receiving
				non-matching responses. [GL #3042]

	5776.	[bug]		Add a missing isc_condition_destroy() for nmsocket
				condition variable and add missing isc_mutex_destroy()
				for nmworker lock. [GL #3051]

.. code-block:: none

		--- 9.17.21 released ---

	5775.	[bug]		Added a timer in the resolver to kill fetches that
				have deadlocked as a result of dependency loops
				with the ADB or the validator. This condition is
				now logged with the message "shut down hung fetch
				while resolving '<name>/<type>'". [GL #3040]

	5774.	[func]		Restore NSEC Aggressive Cache ("synth-from-dnssec")
				as active by default. It is limited to NSEC only
				and by default ignores NSEC records with next name
				in form \000.domain. [GL #1265]

	5773.	[func]		Change the message when accepting TCP connection has
				failed to say "Accepting TCP connection failed" and
				change the log level for ISC_R_NOTCONNECTED, ISC_R_QUOTA
				and ISC_R_SOFTQUOTA results codes from ERROR to INFO.
				[GL #2700]

	5772.	[bug]		The resolver could hang on shutdown due to dispatch
				resources not being cleaned up when a TCP connection
				was reset. [GL #3026]

	5771.	[bug]		Use idn2 UseSTD3ASCIIRules=false to disable additional
				unicode validity checks because enabling the additional
				checks would break valid domain names that contains
				non-alphanumerical characters such as underscore
				character (_) or wildcard (*).  This reverts change
				[GL !5738] from the previous release. [GL #1610]

	5770.	[func]		BIND could abort on startup on systems using old
				OpenSSL versions when 'protocols' option is used inside
				a 'tls' statement. [GL !5602]

	5769.	[func]		Added support for client-side 'tls' parameters when
				doing incoming zone transfers via XoT. [GL !5602]

	5768.	[bug]		dnssec-dsfromkey failed to omit revoked keys. [GL #853]

	5767.	[func]		Extend allow-transfer option with 'port' and
				'transport' options to restrict zone transfers to
				a specific port and DNS transport protocol.
				[GL #2776]

	5766.	[func]		Unused 'tls' clause options 'ca-file' and 'hostname'
				were disabled. [GL !5600]

	5765.	[bug]		Fix a bug in DoH implementation making 'dig'
				abort when ALPN negotiation fails. [GL #3022]

	5764.	[bug]		dns_sdlz_putrr failed to process some valid resource
				records. [GL #3021]

	5763.	[bug]		Fix a bug in DoT code leading to an abort when
				a zone transfer ends with an unexpected DNS message.
				[GL #3004]

	5762.	[bug]		Fix a "named" crash related to removing and restoring a
				`catalog-zone` entry in the configuration file and
				running `rndc reconfig`. [GL #1608]

	5761.	[bug]		OpenSSL 3.0.0 support could fail to correctly read
				ECDSA private keys leading to incorrect signatures
				being generated. [GL #3014]

	5760.	[bug]		Prevent a possible use-after-free error in resolver.
				[GL #3018]

	5759.	[func]		Set Extended DNS Error Code 18 - Prohibited if query
				access is denied to the specific client. [GL #1836]

	5758.	[bug]		mdig now honors the operating system's preferred
				ephemeral port range. [GL #2374]

	5757.	[test]		Replace sed in nsupdate system test with awk to
				construct the nsupdate command.  The sed expression
				was not reliably changing the ttl. [GL #3003]

	5756.	[func]		Assign HTTP freshness lifetime to responses sent
				via DNS-over-HTTPS, according to the recommendations
				given in RFC 8484. [GL #2854]

.. code-block:: none

		--- 9.17.20 released ---

	5755.	[bug]		The statistics channel wasn't correctly handling
				multiple HTTP requests, or pipelined or truncated
				requests. [GL #2973]

	5754.	[bug]		"tls" statements may omit "key-file" and "cert-file",
				but if either one is specified, then both must be.
				[GL #2986]

	5753.	[placeholder]

	5752.	[bug]		Fix an assertion failure caused by missing member zones
				during a reload of a catalog zone. [GL #2308]

	5751.	[port]		Add support for OpenSSL 3.0.0.  OpenSSL 3.0.0
				deprecated 'engine' support.  If OpenSSL 3.0.0 has
				been built without support for deprecated functionality
				pkcs11 via engine_pkcs11 is no longer available.
				[GL #2843]

	5750.	[bug]		Fix a bug when comparing two RSA keys. There was a typo
				which caused the "p" prime factors to not being
				compared. [GL #2972]

	5749.	[bug]		Handle duplicate references to the same catalog
				zone gracefully. [GL #2916]

	5748.	[func]		Update "nsec3param" defaults to iterations 0, salt
				length 0. [GL #2956]

	5747.	[func]		Update rndc serve-stale status output to be less
				confusing. [GL #2742]

	5746.	[bug]		A lame server delegation could lead to a loop in which
				a resolver fetch depends on an ADB find which depends
				on the same resolver fetch. Previously, this would
				cause the fetch to hang until timing out, but after
				change #5730 it would hang forever. The condition is
				now detected and avoided. [GL #2927]

	5745.	[bug]		Fetch context objects now use attach/detach
				semantics to make it easier to find and debug
				reference-counting errors, and several such errors
				have been fixed. [GL #2953]

	5744.	[func]		The network manager is now used for netlink sockets
				to monitor network interface changes. This was the
				last remaining use of the old isc_socket and
				isc_socketmgr APIs, so they have now been removed.
				The "named -S" argument and the "reserved-sockets"
				option in named.conf have no function now, and are
				deprecated. "socketmgr" statistics are no longer
				reported in the statistics channel. [GL #2926]

	5743.	[func]		Add finer-grained "update-policy" rules,
				"krb5-subdomain-self-rhs" and "ms-subdomain-self-rhs",
				which restrict SRV and PTR record changes, allowing
				only records whose content matches the machine name
				embedded in the Kerberos principal making the change.
				[GL #481]

	5742.	[func]		ISC_LIKELY() and ISC_UNLIKELY() macros have been
				removed. [GL #2952]

	5741.	[bug]		Log files with "timestamp" suffixes could be left in
				place after rolling, even if the number of preserved
				log files exceeded the configured "versions" limit.
				[GL #828]

	5740.	[func]		Implement incremental resizing of RBT hash table to
				perform the rehashing gradually. [GL #2941]

	5739.	[func]		Change default of 'dnssec-dnskey-kskonly' to 'yes'.
				[GL #1316]

	5738.	[bug]		Enable idn2 UseSTD3ASCIIRules=true to implement
				additional unicode validity checks. [GL #1610]

	5737.	[bug]		Address Coverity warning in lib/dns/dnssec.c.
				[GL #2935]

.. code-block:: none

		--- 9.17.19 released ---

	5736.	[security]	The "lame-ttl" option is now forcibly set to 0. This
				effectively disables the lame server cache, as it could
				previously be abused by an attacker to significantly
				degrade resolver performance. (CVE-2021-25219)
				[GL #2899]

	5735.	[cleanup]	The result codes which BIND 9 uses internally are now
				all defined as a single list of enum values rather than
				as multiple sets of integers scattered around shared
				libraries. This prevents the need for locking in some
				functions operating on result codes, and makes result
				codes more debugger-friendly. [GL #719]

	5734.	[bug]		Fix intermittent assertion failures in dig which were
				triggered during zone transfers. [GL #2884]

	5733.	[func]		Require the "dot" Application-Layer Protocol Negotiation
				(ALPN) token to be selected in the TLS handshake for
				zone transfers over TLS (XoT), as required by RFC 9103
				section 7.1. [GL #2794]

	5732.	[cleanup]	Remove the dns_lib_init(), dns_lib_shutdown(),
				ns_lib_init(), and ns_lib_shutdown() functions, as they
				no longer served any useful purpose. [GL #88]

	5731.	[bug]		Disallow defining "http" configuration clauses called
				"default" as they were silently ignored. [GL #2925]

	5730.	[func]		The resolver and the request and dispatch managers have
				been substantially refacto                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   