Changes with Apache Traffic Server 8.1.0
  #3899 - Add a --reason tag option to the host subcommand
  #3943 - Handle response parsing case where EOF happens before any data arrives.
  #4028 - proxy.config.http.connect_attempts_timeout tracks TTBF instead of connect
  #4055 - Remove ignore_keep_alive method entirely
  #4164 - Reset the inactivity timeout when reusing connections
  #4203 - Allow enabling MPTCP on a listening socket through the records.config
  #4217 - Fix a regression in the traffic_ctl host status subcommand
  #4242 - header_rewrite: Adds basic string concatenation
  #4253 - Add the capability to mark origins down with traffic_ctl.
  #4300 - Expand the post chunked tests.
  #4356 - slice plugin, intercept handler that uses cache_range_request
  #4422 - TCL: Rmove TCL dependency from HostStatus
  #4437 - Adds the log tag cqint for internal requests
  #4441 - Corrects the wording of the usage messages for traffic_ctl host subcommand
  #4461 - Fixes memory leaks in header_rewrite
  #4513 - Adding cdnicrit claim support for uri signing service
  #4540 - URI signing support for JWS to be passed as path parameter
  #4568 - Adjusts the format for header_rewrite string concatenation
  #4586 - Turn this Debug back into an Error
  #4603 - Add cdniip and cdnistd claims to uri signing
  #4604 - Repurpose sub claim and add cdniuc support for URI signing
  #4664 - Use hash string when it is provided for hashing
  #4762 - Fix OCSP stapling with dual cert
  #4777 - Add unit tests for the URI signing plugin
  #4802 - JWT validation uses a token-stripped URI
  #4814 - Add normalization the URI before cdniuc validation in URI Signing
  #4815 - Add valid_tls_protocols_in to allow for per-domain protocols.
  #4862 - Updates uri_signing docs to reflect new RFC changes
  #4869 - Cleanup: remove lib/cppapi from clang-format, it's been moved.
  #4874 - Avoid ats_malloc in unmarshal
  #4897 - Uri signing regex as POSIX ERE
  #4912 - Address performance issue by removing use of read_avail
  #4924 - lua plugin: add support for relative path scripts; moves inline script to switch
  #4938 - Fix client_hello_cb to correctly check for sufficient server_name data
  #4944 - Add history to HTTP/2
  #4973 - Adjust tls_client_versions to be more resilient for different curl versions
  #4988 - Implement nbf claim in Uri Signing Plugin
  #5034 - Implement aud claim in Uri Signing Plugin
  #5058 - Fixed use after free when running regression under ASAN
  #5075 - Fixed the compatibility with previous cache verison
  #5112 - uri_signing build helpers
  #5122 - fix crash in CacheVC::openReadFromWriter
  #5131 - Do not run clang-format for @default_stack_size@
  #5140 - cdniuc is not a manditory claim
  #5143 - Fix a self detection issue where parents are not marked down during ATS startup.
  #5149 - Add nullptr check on ConfigProcessor::release()
  #5163 - Fix memleak in ProcessManager::stop()
  #5176 - Adds a new log tag for the MPTCP state of a connection
  #5199 - autest for slice plugin
  #5209 - Allows logging of negative values
  #5219 - url_sig debug fix for when url is missing the signature query string
  #5227 - Normalize on negative value for milestone metrics
  #5234 - Correct interpretation of proxy.config.ssl.client.verify.server
  #5235 - Fix lost pending_actions causing actions on stale objects.
  #5236 - Update documentation for SSL VERIFY hooks.
  #5242 - Adds a missing header field for the tcpinfo log
  #5252 - Make host status persistent across restarts
  #5267 - Slice errorlog
  #5268 - fix If-None-Match and If-Modified-Since priority problem
  #5275 - Fix false collapsing of reverse DNS requests.
  #5293 - Destroy MIMEFieldBlockImpl that doesn't have fields in use
  #5301 - Slice Plugin: add options for disabling or pacing detailed block stitch error logging.
  #5329 - Fixes clang-analyzer error dereferencing nullptr in parent
  #5348 - Don't assign if this and other are the same object
  #5354 - Password can not be nullptr here, so don't check
  #5417 - Change HostStatus to use only one stat per host.
  #5465 - Separate out common header compression logic to hdrs directory
  #5571 - Removes the abort() from header_rewrite, and try to deal with errors
  #5585 - Do not change stream state from HALF_CLOSED_REMOTE with CONTINUATION frame
  #5589 - Adds support for set-destination SCHEME/URL to take string expansions
  #5605 - Fix crash in MIMEScanner::append with std::string.
  #5607 - slice/HttpHeader memleak fix TSMLoc release call
  #5633 - HTTP/2: increment write_vio.ndone by consumed size
  #5634 - HTTP/2: cancel reading buffer when ATS received GOAWAY
  #5676 - Log H2 errors with the codes
  #5680 - HTTP/2 - tweak for better field name handling.
  #5697 - Coalesce empty objects in HdrHeap
  #5701 - fix If-Match and If-Unmodified-Since priority problem
  #5710 - Convert regression tests for XPACK into Catch based unit tests
  #5721 - Fixes autodetect of brotli
  #5727 - Add effective url options to slice plugin.
  #5747 - Add slow logs for HTTP/2 Connection & Stream
  #5766 - Record HttpSM Id on new transaction
  #5780 - Fixed std::array initialization for older compilers
  #5785 - Allocate DependencyTree only if HTTP/2 stream priority is enabled
  #5797 - Remove double call of the SNI action on TLS accept.
  #5811 - Fix no_activity timeout for server session reuse.
  #5824 - Reactivate active timeout enforcement
  #5825 - Cleanup: Remove unused function & old comments
  #5826 - Cleanup: Signal READ_READY event only if the buffer is readable
  #5848 - Convert check programs in iocore/eventsystem/ into Catch based unit tests
  #5865 - cachekey: added --canonical-prefix parameter
  #5872 - cachekey: added --key-type to allow parent selection URL to be modified
  #5878 - Add protection against use after free due to Http2ConnectionState::destroy() being called more than once per session.
  #5883 - Add unit tests for MIOBuffer:write()
  #5888 - Allow disabling HTTP/2 priority frames limit
  #5889 - Provide stats for the recently introduced HTTP/2 rate limits
  #5893 - Cleanup: Remove unused AllocType and unused functions
  #5901 - Dechunk chunked contents on HttpTunnel if client protocol is HTTP/2 or HTTP/3
  #5903 - Reduce unnecesary IOBufferBlock allocation
  #5920 - Cleanup: VIO
  #5921 - Cleanup AuTest for HTTP/2
  #5929 - Fix lost fragments when update object
  #5934 - Track scheduled events to (read|write)_vio.cont from Http2Stream
  #5945 - cachekey: allow multiple values for `--key-type`
  #5953 - Log H2 priority information
  #5969 - Change the ready checks for ats to use the actual ats port
  #5972 - Avoid unnecesarry copy on POST request over HTTP/2
  #5973 - url_sig: fix memory leak with urlParse and pristine flag
  #6003 - Cleanup: do not re-define _proxy_ssn variable in local
  #6055 - Add a config for internal HPACK header table size limit
  #6061 - Add Example URI Signer Python Script
  #6098 - Replace container of HPACK dynamic table from std::vector to std::deque
  #6118 - Avoid IOBufferReader::read_avail() call from MIOBuffer::high_water()
  #6154 - tslua: Exposes set/get method for server request objects
  #6168 - Add cache_range_requests autest, add to x-parentselectiion-key to xdebug plugin.
  #6182 - tslua: Exposes set/get version for server request objects
  #6191 - Limit this check to Linux, where ldd always works
  #6199 - Set END_STREAM flag when write_vio ntodo is 0
  #6209 - Add 100-continue expectation support on H2 connection
  #6234 - Don't sleep if ProtectedQueue.localQueue is not empty. (#6234)
  #6239 - slice plugin VIO cleanup
  #6247 - Add some stats collections to cache_promote.
  #6252 - Add simple uri_signing autest and subsequent fixes
  #6264 - Change HTTP/2 error rate log to warning
  #6294 - Enhance Connection Collapse in ATS core - back port to 8.x
  #6307 - Reduce process duration of test_Http2FrequencyCounter
  #6323 - Fix strict round robin cur_index increment
  #6328 - Document the order of the X-Cache header
  #6332 - Fixes Issue #6321 caused when proxy.config.http.no_dns_just_forward_to_parent
  #6337 - Perf: Optimize sending HTTP/2 frame
  #6340 - Add header rewrite test to make sure we are not injecting end of rule char
  #6343 - Fixes an assertion failure when proxy.config.http.no_dns_just_forward_to_parent is enabled
  #6346 - Fix heap-use-after-free on Http2Stream::destroy()
  #6348 - Add virtual destructors for Http2TxFrame, Http2FrequencyCounter
  #6376 - Update inactive_timeout_at in Http2Stream::signal_read_event()
  #6378 - Remove trailing white space from json formatter
  #6380 - Remove unnecesary HttpSM handler call with VC_EVENT_ERROR
  #6392 - Free TSMgmtString after using it.
  #6403 - Fix for lua plugin coredump problem during reload
  #6404 - Signal VC_EVENT_READ_COMPLETE when ATS received END_STREAM flag
  #6409 - Another option to fix potential HTTP/2 vio stall
  #6413 - Fix crash when H2 client does not set End-of-data bit
  #6417 - slice plugin: add check to transaction status
  #6419 - URI Sig Null Check for Clang Warning
  #6420 - Syntax Error fixed in URI sig Plugin
  #6442 - Disable the chunked_encoding test
  #6450 - Adjust consume logic in data frame read
  #6464 - cache_range_requests plugin: detect and handle TSCacheUrlSet failures…
  #6470 - Remove update to unused variable
  #6507 - CacheRead: catch and invalidate an asset with invalid negative cache_seek bytes value.
  #6518 - Fixes a bug where HostStatus::getHostStatus() creates too many stats.
  #6525 - Don't be overly aggressive on stream failures and closing
  #6534 - Ignore MgmtMessageHdr if ProcessManager is not running
  #6535 - Add MIMEHdr Garbage Collection to HPACK Dynamic Table
  #6540 - Disables "virtual host not used with AWS auth v4" error in s3_auth
  #6541 - Add cachekey latest features to 8.1.x
  #6553 - Options to roll empty logs and log trimming (8.1.x)
  #6557 - free(map); -> delete map;
  #6568 - Fix PUSH_PROMISE frame payload length
  #6582 - Fix strict round robin cur_index increment
  #6584 - Backport of all uri signing commits from master to 8.1.x
  #6585 - url_sig: fix memory leak with urlParse and pristine flag (8.1.x)
  #6589 - Fix crash when following redirect
  #6593 - Back port of slice plugin to 8.1.x
  #6594 - Remove extra new line detection in 303 gold file
  #6595 - Fix httpbin autest for 8.1.x
  #6597 - HTTP/2 backports for 8.1.x (part 2)
  #6600 - Remove enable_tls option and set select ports to false.  This passed …
  #6604 - fix sed matching
  #6620 - traffic_top bug fixes for client connections
  #6622 - s3_auth_v4: multiple same name fields signing fix
  #6625 - Add ready checks for the microserver and ATS test instances.
  #6626 - Add a new log tag %<vbn> AppVersionInfo.BldNumStr
  #6634 - Backport valid_tls_protocols_in to 8.1.x
  #6640 - Fix timeout autests on 8.1.x
  #6643 - Bug fixes to h2 buffering
  #6654 - Supports sharing cache_promote LRUs across multiple remap rules
  #6660 - Fix 8.1.x build with old openssl
  #6665 - Fix memory leak of HPACK
  #6666 - Fix link issue of test_libhttp2 on FreeBSD 12 with --enable-debug
  #6667 - Updated docs for guaranteed_{min,max}_lifetime
  #6676 - Fixes the 'traffic_ctl host status' for trafficserver 8.1.x
  #6685 - 8.1.x backport cache_range_requests autests: remove last-modified
  #6688 - Fixes minor memory leak in configure_net
  #6689 - Handle immediate as inactivity timeout
  #6692 - Fix deprecated-copy warning in cache tool
  #6708 - Adding logging fields for collapsed forwarding metrics
  #6711 - cache_range_request autests: make more robust and clean up.
  #6729 - Fix a bug that current_active_client_connections doesn't decrease
  #6747 - Fix old MIMEHdr handling of HPACK
  #6750 - backports parent.config  ignore_self_detect flag to 8.1.x
  #6753 - Fix HPACK Dynamic Table Cleanup
  #6756 - Correct `schedule_every_local` to schedule locally
  #6779 - 8.1.x backport: header_rewrite: this fixes parsing where the [ ] section gets merged into values
  #6785 - clang-analyzer: Fix dead nested assignment issues [8.1.x]
  #6786 - HPACK: send back an error to the client when the index is invalid
  #6802 - 8.1.x backport code and documentation for lua states configuration and stats printing
  #6825 - Clear handling tracked events of Http2Stream
  #6841 - Retry read when fastopen_bread() get non fatal error
  #6848 - 8.1.x: cache_range_request: Overhaul and clean up the core autest.
  #6854 - Fix pointer overflow in XPACK
  #6862 - Fix brotli plugin
  #6876 - Make Http2ClientSession inactive on EOS event
  #6885 - Revert 4028 for 8.1.x branch
  #6955 - Do not create Host Status stats for Origin servers.
  #6985 - Fixes use after free when boringssl is used
  #6986 - Fix memory leak in header_rewrite
  #6987 - Fixes use of TS_USE_TLS_OCSP
  #6990 - [8.1.x] Disable openclose_h2 AuTest on 8.1.x
  #6995 - Fix volume/stripe calcs when using forced volumes
  #7013 - Update autest python version to 36
  #7028 - Fixed problem with all "forced" volumes cache
