Repository: rustls/rustls (language: rust)

Issue:
Panic in Acceptor::accept()
**Checklist**
* [x] I've searched the issue tracker for similar bugs.

**Describe the bug**
I have a Rocket-based web server with mTLS configuration. When I access the server using the Rust reqwest library, it crashes. However, it works fine when using curl as the client. After debugging, I discovered it crashed during the TLS handshake process. The relevant code is shown below.

**To Reproduce**
Compile and run the code below:
```rust
use rustls::server::Acceptor;
use std::collections::VecDeque;
use std::io;

struct ReplayInput {
    chunks: VecDeque<Vec<u8>>,
}
impl io::Read for ReplayInput {
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
        let Some(chunk) = self.chunks.pop_front() else {
            return Ok(0);
        };
        if buf.len() < chunk.len() {
            return Err(io::Error::new(
                io::ErrorKind::InvalidData,
                "buffer too small",
            ));
        }
        buf[..chunk.len()].copy_from_slice(&chunk);
        Ok(chunk.len())
    }
}

fn main() {
    let chunks = vec![
        "16030140000100544e0303c2c707d0674c00134caebda8f00c1002faab653697323059c96b372590620968208ad4d589631e3f1e4670b4ee8de43e735f703c9db5ddcf474b40f0fe7ce3b60e0014130213011303c02cc02bcca9c030c02fcca800ff010053f1000d001c001a02010203040104030501050306010603080408050806080708080005000501000000000010000b000908687474702f312e31003300260024001d0020f466fc5851ea78cadd9f0ead0a130d1677abdea1c2be6a5c2eb4d5a9dc3f0e71000a00080006001d0017001800170000000b00020100002d000201010000001a00180000157470726f78792e313032322e6b76696e2e77616e67002b00050403040303002953485313530db00e6111cfe4cbe110c78d6386b5702b7d5dee48979787fa006050af7763ecdeeb00f7ad66c1b4713f057e47d5ca68aef641727e6d638efe8c1c185a6e46e010892ea27e885ac4bda9effb8bbf91030e4903131cde8486d0e17f197b1264e55be0b750664fd330d50abac573b93585e14f84ee5f2984b69733d228d50f7617ae9bc219a19aaf84d1251248856c103ed917ed6a05fe0c28296c4d7a9f7a394aea4602951e01e338a605c1f2b1ca2c4c41c1199c2db07ee805c91067c2a3c76a82afc64ead9298ea201c79a7d71dbd6ab8192bb277b23b0b96ef6d700ef86369dc596e612a65e947140b19142625ab9afb9716b118352c9ac4ed92d9aa25a48437da63c9554c816963ecf368b92a2d48e110da36921730c8594fda41d5d39b5e63d4ec11ac61c064ecafe51409c05f00066ccbdb64460ce9b904bfac2262e1a360719016c2fcd7bce26da1cbd09570342007d342aee62690541ab45f476197801785cf52e89bcd573814c51bc63652d7ed8f289335e80a66d313fc4050e003d259ba94c40e2d57d7d6d44d19ee08cdb489b6a4427d4c9b689e5b75f7e008534ae78809cb2f19ececad1ae173ae766b0a73df72bdfc9a8f7453f31e81cc885bf4aa420c94fac589875ebe42015dfdb21911249b95c7a9f409c0f9ebd3859f473dc5ad00edf1382d8e1fc861ad9ec1a5abc2b0d4aeef68ab86d57087ed6414df140af6570e311889460d7f94a8b1f4e837685b2ebd9a3761d3970c36c18ae448da7dd0ecc1dea8156de89682918a07b9c66391c83c58e5d8f4ab2f61707c72dd4360cf4649197337a3020544231f107d88623dd3e753e25ff036d36f7435cdf13b345d219c5ea4dbfb541b920f8dbf4f88c1e281a04f1a75b8da32be32b4c35b0b94b52ef667f678c6001eb8478cfd8c13fe7b75271d46b56a9d5ca68d9b771db8e24ee83db85cdab975cf92a950f9ebdec058647a3c9ae77c766af7c1342047b17e06ab25c70f4ebbadf1aa70e4f6be3e406928595ea0e9cc2285179afb82346ed285a805c1422b8aa26d8932bfe78f551dc1100478d34c1d676cd8502104002ce6dae1b407608ae01019ecff80adedf03706583293aa5c81a4312a6f340f8ae48948e8a245de8a8e861bb0ff765eb73289680b2c7c0a31c6f0da98836eeb2bbced1bcd3c60c379e5b28cb582d4eee58d9374910702c8dbec721b72ec132c1920804df1eb06c6d81863f24e5c26d4275713f59d0830ae7e4c45b5ac7e77ba777ba624791ce9d47fe2c6a53659886061f42f634be6e9f537aed5528b0905919ecaf0942d442d58a5c38b7f9b9b21756636b498f87b7858c954931fcd3dbb4360e71f55a85cd09cd2601f78df4617a88ae8d93c032ade4317c812c742b3699bca9fbf3e81e47c953cd1d5e08c578ac1ab4b7d0ba527fe179230aa5ede85ecbf0640f6a165538bfb958236ae808129c8c0d225c5f04ad04e392604ccbab4cded20cb95a7387e74bc45a83713fb4ed19818ce15cc7ac93a870aac65490fee827cb892877675942325421a7857f39d5705698ef926d477bda1b797d7fda9f5d8ef659c6bc538eb8c63bc7163b84bcc6753342ba9a117b25d2c09b450d23d68d414382f952b425770992d2d2d96d0f3a8917f5c0bd8b30dce26b0f0ef9c77828bd114c4270e89dd443fb24ef3b2f42ab6952083bc94aaf47b2d7ad9b039f060985e0f4edc18e23f7c4c1c646eff78f59a2d70c338ef5d2dbe1792b49a56114f076e8a821383efdab63b0b6fcbd8b27d088ab9e6aaf44a0ff42326eb1d9502baab3f18de3cb3416e4079f7196fe63bc9cc775bf5f2575bdf3446c072e914c77cbc73a73298668c683b74983a2d091576620b7375c25c2cb680e6da656223821dd77b8b09594e87ee6b27750cc05357999b45d4d0d9d7163de37589e0b4f407eabc0ab5502b406a2fb4ada257954127d3ce17d28fcb5ded25ee05e2f799cb7559e5f929b3793977e343e3881869230de788ee97856af79ec60f0e91606dc58e2cce3f74343309d6ca9331e2e9c350b711fde8f4bb4e5f46394e8e1acc90e18b38f0812451d7f136feeec59134794f9a6083460384951fc7f1a9b4ea1948e16a600f7392ff2bc0d429f27bc6b4d95143192c47a5b08727234b4481170e3a35da39a6db2418582828d0190bbd2011c3b3e84b7a2a7c93e0d4735482c23d60d91722f4e7ed20ff5799b3d164c2a4109cdad5665fad6160325b287389f2ea8b875d44a1b2bcfb7aef128d3ca31bb8cc6ec61185c9fe79c4910272e4d6ebc4b5764a954038f03e141ff1a3b9cb2e5ce36d277610367d7ba8ecdd962957c2046b20c2ee6d34a2470396d0e343df2918368622a904055bf22d903eb9792b2330e9916ba5b68a6b7ac38c66c5125ca492045fc5a67919feb0d4f9873dd904397cbf3eff444f99bfeb9a33b5b64cf3491f0fa9beb6f8572edf95d41035bb310b9704163dc4a2b34b02a4b9aeaa72b59f3662517e6ec7739e11860c48c14af6a198b0b7658af147c135a52a0edf586761f30d65e03812b6988367054bf703dcaf52403d91c4385218b18a3f00281c0686a48d954e150ca3c9787b7ccfd7a69c5a94025e2b0cf7976e38f164e0289f182bc6ad08cfaaffb9bf3d9a339a3857412dacde4c988e0be0a8b1ebeb08cc748bbf01e05742b803c8a98ce1a8af6cd763876bda0283ef2711e4815bb927563cfe64d08e8d6775ded103fb4b8cbd3d5131b8f9cec9e9aec64f71d91d6c44ee4a954df85b39c9aa733a2b90af8ddafd3d057955b916b1fab27f62cc22b30cd523db9e5f6a65c3e9c770b2b9fdc2d0a0fc22f546e40f66ea2e7b057f7cca44f6c35288b7d5534abfca54498b541430812d3e0e83ff0f368d516ffaf2b3f44d6c10739ef6ffad599868b0b16f2b09f3592800a7c8174d9b2671605171d7cdb2756528a3ca8bf18914316c74a867377cdf0c40b8fc0663298d03439e73694fc1e63341ec49092131832c05b3a9ca70b0703ed59c77ee0ac65faf1aec22919ee1354c1879c8a2351dd1940d99b12adad4483a3c1a4a8bdae8755d9acb33fbf112030434c53834733bd1800cd30fe5912b53c21414b388cf0ad155d9976ce70fad95cb350319caa9b788eb4484e6a2bf0bcf68fea01259f14e33becb1102c2878b4327ae1c4a954a0f6d585d4d5b45a0c3a081429c2d9d8a26436bc6e39f49985b7e54562d57feb18f72ae02c477154409ed897f2284f4d517fb581b215e9d509ad16b064e617f8ef13968705cd07e18cc2306e344dc60194094a0d1b9762192c705498bbcdf948463b23d29a88671631c067adbab9a5c9eaa502a69d94176d9eb9e113264e7efdf6d2c4af9f6f5a0f306b41aaed60931a2b5c64afb1e8e6860dc8390c88e12a1091325339ae9cb9bd499d56141133064e959886016e0247754704cd0793188cb2d29f1a77ff47477e1d0aecdefb7cd29e5557415903ef2900b8fff0f25de4e2f54588f08fff5c7d44aaaa8a6f05099c05c7a2ec2c0826e03d03cf5e25dcdd00e39a8cfe551026fea72f349c7eec4e7cd08e3e733421a9eae081b27e5ac74aec9f6e9f883ed568533732bbbf12144009dd3c50e2a0266506c71aea2a6a56e6e2a8ca19fa015330b98719a22fdd394b8d776a37cd0b6e675dda558248a9caffc08778fb1fcbd4311ea45c05702077ccf4ceca8f43181890cc6ef1fd43677c38f93e2934a41c7700e105d2b44635e02ce1bac3b2b14bc98eaa6c617defa4d9c4e42e1d3bcb49d545f8560e831efe1cd2c040c6751c6670b1452015d19b80f05cea54e11ef4def9440fb4942f8585a51c09667126a3bef41ab2a049a782f00127638e8bd663bc738267637f716bb9c2498cb6217828403421e7f58614d3b50b721f2e1124f0066c6910d8ac3f127e5b0a3dd63d4b643cd8194a75ccadba505f149e69db5ce1dbe8547b8de350b42a0b3b7559e955ecc5fa1c0b89630efe49ab9bfda95d925bea948da0ab8623359f0121a9e3f76b2e07993057484132663e379126d173c02ef23335a47ca86f9bbb1168bc8a3a09bb378e578d4ab8c2c013925b5070047a3b132cf0feb9261bd83106f2d76a25df1e77aac0d98cdea74754b0765d295b83d0521b3c0ee4263e1c4ecc5bde572ec2e3c84969901f8f16f77f4d1247f56fb6620d5bb46daf81bbb9a1ea40cd5e93772ce53eca08807e0947941ec86f3c3a97f80338752ceba2562af10d347226921a49b54533f04415e0a1021508bcae8cc7dcf3ade9bf250faddefdbc682859f07355ecc750e67db820bcb892efd7857669102cd7fc97049a3ffcf7c81f53e33a76ae5012df85a8e2242f24a1800b200b7fc2cc913baeb964b1aa2f34fd64df08522c3bd819f4805ebc9ca8ba0ea06b5fe8f932fb9663306537c31db120ee49e1b7841045a343d3ce5f2505671175643bbf724c38d5d3e69151521100f8a09cb9ac5c7bc4fc11dca793b152d03db11c85926bff6f04c5f2fba3ba438d8e5fe80c55b8760a771c81892bffe85e47b7286c416ab4df0f4adfe2f8a61122ce8297fa2f8aec65a59fa4c0039a33635a9315094fa99a366ef9cd5d0e5a9e977e58c9216451e16a5f3e627b9b343d43a132c813642ee60b92118d133d54682291d0d2a793293083e8560082a23f6f50f2d750579a0345c8433adc9f4c18a00a124066c069bf465fa5d176469d440d02d99625d2b463500847e16593f0174b83cc397ee0379006d2e7fec5ae0446bc0e7e5af7ac34bae00e60e502113580f1625771458453d2f0a579c949b1515dc8a5c76d987a7c6ddf20ae9f2309cfd6f268dc9a8ee7e5279d49fb7a96304d5c717db8d0721e4202960506917485a4002bf16c9f63cd27c3352750a0c4ff76ba290cefd618dfb8156bc35fb876cdc7ed1f0728bcca12ff7357f76b2bcd5ff55efc957413c10b51686193b00d91360ced4ad297423b7efb99cc93d9d47bfde4808400ed7aff2d15f16f5a25ba258369dd2ace6851fec27e0055746f82ccb0ca816124990340ee3a11252b4e327163926e48f3ca78a51619c49ae0ca326964366a6cfe777a3633339f384b0bd476f47022d3c52ee5166d234e306d7bd86b371dd187774d0a56ef96247ce4718d82ab2745525fd273ddc6215af3b56538ee1030cb284bc601e8b08fdbb169a73e365342af83d6b7d8a09716bcaee31ee87e6c896565165b13663f27c5906535d63ba6cb509f4bfe7210ca2b7a0feb2e01c4e914794e30c18ceeccd5f5f593f8c8c63800c43d0beda2c814d5b6bd4f68ba4a1bd2f31e824e00a04749bf0dc6c4130ee7a92aa101562cccc24e9a2c614a1f73bf7386f3f3f0d2baea77fc403c387587e86974cafdf49e19057622dec8c14345d007d4acc5464b3351bd2441d",
        "e529bdca22943124673dfb6c320d1bb7140e334d7733b5292b863bb604816293f904525776b77bd98a5443132b0ba2dc7136a57a925eea6e9646f7dd6f296b7cceb5cfc99355490c3d5e2c450ed7b3fbec08e305c0718f72b0094900d229d0c1c5fcf122aae45f2ef3820d1fed6dd236e3f3943634fce8b8f03a55b0a08cfe456e946d02bf30186ca04a0434782264e86bd683fa22baaddf9c973fe63ec60db9136a349387970ba701df50378ee4754d6ab771e78e990c9eeffd846f491af0d1c24cafc98cc3309ddefe7af6d826b1c5cc85b68175868cf32d29032fdf22598c504cf620812e393fcb84295da6a37fb91b58bdc7888b8c88912a613aa9addcc907691305015a4d25443374e011bb227a19e6c8370a9ba2c3aeabfdf3652d125b0506fcae38ad3768d73f8566abb7754ce2340d01045a2d2db17554fccd17b384808bf0afc2c3e485fe350541d22d59d5299685d46af036e55d428821b2ac45647ab59d56feb7cc77efc7170182f510961d45d8de06f6d96324d982db3877e3f3ef5ef7bc7a96c2d1b5aa22be99ded68d7e33b6ef9288a50ddf0c430942df7bc77a071a55f2709ed25bd1ecef2a825a5e6d8561fd594fb3a61b6303cbdf85d0cb57301ed51a4e07629d194766fcc6cef46f0443cc113bc6c9ea5da6830412861380cd836998aa848e91d6a26ff5d60483743af869107e022d8eeb52d8ecd969c77a6dac4463f2bb9cc732100c173ec29be55a89680f7f7c256eaf46a4a19027be43e1791d76ba4ec736a88e154b6be8187e90f73e59781501f5103c0f5e0c90997be3e6e9c84a1283a7646d194c5d3790513f5f4da14c371f6a0d2ee35c84777f1a1b55caac6f8bd6211a0529859c6e434eabf6cd70d0165fd25a51cc3117df9a6fe7712d3fa0cae13a4936aa380760c126dacee65d07f9c5b1e4068c54348dd0296532de90d0cd1f48660c257c7667bd1ffab60ac841eb432e8510f7853264534232e5c7505d885782cdcf8c0b31f8ee120547bbb881b076139f3430edd7b4d2d4aa3f1ab666fa1b0ffd06f75d9957785a585c85e3c1fd08b89bc3749668a0c14c84af126f4f71e856195afcf006986275b444eb3fd7e3e5e80ffe50e1426610b745a86f93704177a066a89dd0b2bfb276dc9bd87a57e46ad6ec1d93353ce2b3794cc38d205fff8e3e4507f440d82840e17a8b42fd72e2659a9e17d1aba4171fe04a53724049a6124a90d00ded6aa272441f664ddcce99dc32b45992296a87b2ff93b1030c9ef60d489db5e15d657220889e40c2b6b81b52385a08a25244b4cbf7887e404220e1158526f9508188474486ce2b26c51a32ca7e54e786aede8505867367854d4ffc35e4760d6554426ea34703b25336fc78f999f7b022e418f493abedc906fd15e5cad537d3f84f22dc0c4dfb32229a0f2ed208f5307e9b6f2e829064ae106536d59e27730c9db438593cbb4f2bddc6a8e8ec1b776ab716ec624ed9ca4ae534128edc1ba0c034ed206b1bbaad2a2edc90a529f9ad806be3719e7fac28091634e24ea08c63f507fcd7e7b351a5cb99afc6b4a19e4761826b3ad3e36bfc6df3e3370f4f80f475d69ca186e9d777b6aa4d07adcd6cb46da977a6475267adf0e4eb9b6c3e5d91f9c655ca4b71d32e8b2a337f0f4e88a8c1f1ba26fd40dcf8ec1afb986a1b08949dcbd047b623acb7b391744915595dfae83cd0f32e4093d6c3d15cc502b4a36726f6f35be65ca6b4a6cd961da70e9d63d316146f47dcfd1586f118bdabb6d4acab2d1e35952cad59163ee3b4228feaeea2951c99fa48171c88778c8e62e7117d60498d2a00fe068120c72f8c5c7888b11f35a7d2a57f2c1bb8de02dcdfab8274e9aa2986635da711620b1f6936ed5295194622d980d2012ac02718039418b8f572aa5727c0bc10c653cabc3fef746b4c6c228d254ff2286fb6906c4d0c738b580261ac3effcd5f3bdfcd41e9c8ad9176b8c334d76564b0c65eb0cfa401720ac296749e592876cd18b97a7f694ce849e0c18bf8666d76a52af1da498c98136259e2509c5a6f166e511ea206e5714bdbd319680154d28d45e19832d6b89df683805dae98c7a1b1f91fdabdc3b3db0f5860a2d777e92dbea56d4e34953de18799bcab34d9767d97934c477cdc39b0e30b892da9f5de3f731cd8b2838c965ea717f1e7a5de0f44d2e76a93e4ed1554bd95a0a53e397c138d682147591fa8cfa5ea62101a9f472b95b9678351d3ae1005eb2ad4bf3726eeb9399f9bc2c19eb3c632d6917d26135635eba9f7673f217b6dcbc050b1d37e50646c451ab2230727a579c2f78d9b30fe2e64db7cd1090238994ab0cefd719a638b48d07dd60efdb4f46fb9555f5f90300d9f49b543eccc184f3f3a993a4ae266670cec463a071c87f5218eec3d3770a57e0ebf3c4795a0f44f2a5ef520f8c5c48604f717ca6daa905119d2f0894e15304b04934dc48c028a50b94c89899fced00fa689d75ee20126b2414dc77d50efcf8f0e097f7bc43e49371539cf99e71a13cd1b83aaf00a9f345fd2e6b6c542e61b0e1ec05893b6c4c807ed04dbfb6f698f0cb8df997115a8b0aad72896fb4e4264f613118cf1d48aac5673cef83124a65c7604d1ee5f7e2ce361b2ce4a16424414255be034344be7fd500ef6747775f6bbc0b55ff4fec3f2468b20ab817030e0d42b78506d4b63720b4078c843262eede65739bfba0371c42b61910b65dae848cdb8bb257047798a3f694b2934dca1d2b4c5aef87c5e4a1a782ed5b482992328eae408e94091c84d479e084f4a762199b35aff64b6ef6adf766fc1b75f76e8f53fb5ad515e770d1101d21df8583f86c6d2095ec2dd9804cc1c0e7473b6da7577d7b323190047e9155945168c1a30ef2c2cf76cca8248112a2083054bfa655e54c7f69d7987db1a795eed9fe08ce372d3e2cfadf28dd3b5775e01618e6f08891fde66c84f1c0ee89417ddce5a6c0ff9a87d71397b0587e2ecf2f01ab44f2ffb2677af94ae73f615955979ba386fd9169912cf7ca02576387894daed82939c86889e99c4facdf1a97f0f7f75d0fc6db5000cb2158a0722bba24d6802653916e8591f825714c9969f677ac9db737eda7febe1754f1484ee7f1648a8ce008ee8cc1355788e04e21d7fc9758654c7d63b2a0ab8bda9b9564e9de4c165a9a20841ee68832f85d335b0d612c11b0d453e2cb013e92ebe3d2fea027e90d4beb5c2820601de71ea42e8deff935657f3087eda67a8eaffebd42115080f3da18cfb8d71b3089253a6f353d80d70b45853dc786a3a96ea9b9d1f3ec11743108bbf0d0643fc76d760462e3110e1a26fd22b40add3e290d6af0ff75e190d3569c0bd383c4b6d39f99b1deba8007d2fe4e29d3dbf915fa5f2af31166dc1c14b89a7835c467a17ccce7d78eeff351cef2e8e3a37f540e8cbf58790a91021fd24f135997658ab67ece9a2c28aba6ab830580700847df8a992964000afdfae56ede9075997d0d4c099e6ec4a313860567a039b5408663a1cfe5bcb9f0f7e7144e0ab83adf08dbe458df54e130b765d75ac54f44f7ef278ae571522c74aa47bdfa76fdb816416e2271c787457cc1a7eeb0b3fa96663104c5d43f0badc08e65860f373ce829d454d54d2b6077113ec3add46a5bfa9d8585441e6d0f473094885bbf05f00f74b7e825f8cbf1a9bdce3bc9cbe488f6ba6e0b62e05d37cd3392d2c07c8c35b6118bc7aa267b037c6c7e3778e019ecaee2deaa47b7a3050b5a4c0bedf71b61107abf70de231ad10f25178311da095110a7b9e6d357711806b2f0ee512d0ff769843a47be509aac5c19de35522dd3f81ce56289e80cbf15cf671b26228afa094e14057852cfb0a5fcdf89fb6ba59683077237c15a856647b119c606d5c25516dd47e9ff6f85af4c34d9aa65da4b198f15416cd04d96117acabd52939a924dcb7db7ec712de7b17d17445f47a3c4207381f5bf8f04985d86e9844191d62d658fb33a57caa419ee601f8ffc0c3030ef7c595e40f0dfaa2f005ba59451fae16ec787dac190dcc9faa8a46fc9cd2c105836812d0c33315193a10bbaacf30baf4e3a18834ad2ffaaffac06023d24dd1f120af33f958d9722bde8ba967a214ec452ccb091110d9f71c997f617bde7fb461ab5e45473039308e60ef5ae56bec0cd9c9273c313055ff8f65bc4a845ee33b0c26cd8c0c9b1f8cc3c593727ef4a1974e6eb2267a74409eb995591d2e45817749fcdb7a220257412e783a4aafb54e0385529e0afbd7429a92645fa94c8d89fa3a970925f4e4b2f5755ae9dfa7f4351015d474d1dae49485d0bcf47358aef08793437db89bcdef3d863acd89544ec5b16a651c6a85392b0804c8b4fe6469570224939da7c5d8548333d8b1861d60a6d8adbfeb947466bc040e04678a7c9751e202a1ac4c6ea2edbd92fe23fd8d46dab403b36a3775ff6bec39aacaf57a0977c1bf4f53667eb3f62e5cc88ecd492b82fcd2fda232ff851b5272b767f559f95234baf6efe5c85fdcfbc128aaa2ad856b9b3c67ed245792b822f8531a57f9d71646743697c944d9a8327d3a7bfe63b97e091a4bd919f856154181c292015aca5ae1b4650f2d6c56369decc5b779e0d414dca88abbc358d1511bef9211d11b4dc0aebe6be57f955fea7f9fe394086e9d0f10e791c27b1c7860451b84ead56c76213b3427ec529e7bccb8eac931c3fc61f05c3357a67b9db82cfcb158f81e97ec12a8749f974caa1e4e5c8a26cfff04d92f4933f857472836e630291dfe0b04f466911f38e23b7105a70a04f1b9cc202516859caec571baed7ea09d0ba14869108fdd48d04c53935e3900bafce09c5be76b57e00f03a7792c6a1b80c419267ac12fedbd8a2ed4c40f40dc76a63e321ff45a19f687432cfd05dc07475fde4609db0aa2824a534330c1824b30ecdc549a0b47ccc3004b75da671f9b528726658cc566a596a8e7ddf3173db641f8c757766c469b883c2c907e0ed80734edc9f06f240a2fff91a9a362fe80fad135f71797f7286669ee988d8ec3be197627b56f0a85cb58697cfa3947dc9aed60368d0a65dd18f57713827d2c3958feeaf20bacc0862d5f26372046c0bd33c0d2c559b6fe97b7c398315cf9cb573e582569014c4a352af9d55d8e4d43184d65a64a1d405de0250795288e10312291aeb0ba4700ff4f20a36748ac9f7937b07b464653a219f0e12ed840a0ef5de52d3f07e545265ac967c742e90b1cf236693eb3171b6bbecefeb8dcfbfb8e5bdd6dc76512c05148bb970fec5c67c12c811aa9b9e8bc042632568cd0828b7759037f73bcad2642957628d7e7459f376728835662ea0173a1e1ee579aa96e4179d123961662f7323ea74015008eec89f787515aa9fa794e3d32e14f92df7e1c664a345481efd4afcefc76bf7b0a5c36392deccf6c34f5928cfac3f939d99bf8ff671037ffab49397c27317c9e43fb96421ba3aa5214f7c93aaa13e28f239eb6a989d84d0e10c95aec182324d7c80990d9d05f367071abb604a529e3220de4e244232ac720b8115a24028674bfaac04f4ccd3e455e0d2e892c06df432d4cc4e8cc717ae59d4eab592c2094b4646d5a553df9f9c8f529ba2b40c9678aa1958dc2f9f5edd70ce3038835bf533793a6b898b06a2909c1520e1c18691e813f9c5132fff07a2b66e386bf30e5de244757f0b839139070ca97d7fe2bd7b3e6e923393999d654527ac21bae4a8336a43d7bab1a9df956e9606fbab9f1bf0db2da0d588052cc0dbdbf58c50bf4e1831a012202613d2654b2e03a45",
        "e4c83549f371c6732b5eaf17d7d74900e27802320a11d6ea7fb049d2c676722ec7d48f186429b05b64c5957dda37a68268638e7d843f97877804481e7a2c04610194cf02eca5e502f5de4d9046ee3a0be26ca067e39f14d54d84921dc6975da495d417179dd7182832c57108afece47d945930b9b36a398907bc226e8f236af0e5b6a81832f9f847254e7f1e433a6bf26e0dc36946604f69ea4eb5196ce17122552b8c539fe5a66f5418449b92c5371c8cebd701a280bafbad44139e70a1c84f247626cbb8aa929643e4a12d79cb061f02228d055db89f9883a4742a82598f13ef01f2508405d36e123cb55ca75274b978fbf37634ab7727ffc6bd0436166420fa1ca5204105b988ed3846893cceab0faf46ee94f77b3a885b3d1a2722bc6c49989cbf7d16fb8f7ee595ebf0be65aafd522a4c79b079a43a482dd269483f31e029149fb4a44cb10d5c581bc41541689d19a840e8e64d6e6b362f57c973aaed9e9be36bda8bfc806ee283cd0b3a39f79c242441a8ebdeacf7608f6083a269d773db47578eae8a65f01237d87790148ef1f81156f350d41ef7514e5c1aac2040d9862f4c08e60f02c6e295deae59d7a01f394a391602e4318e680433a7490b6c06d31b6e82e9532c73fb2bd95c59c8f2a24db7fcfce4d9c2a9d19031e259b9e121c08a706f192c730b04acf9571655f504d8d2bf25d1a1ef27bccf443461a542d2a80f3825c5f1e0a6aef4e5d9dc8ce38dfed73f212f57e13a1bd867e701c810d3888928ebc425e7415447fec8694a135a98e55ff3cd1da31d64a01f1df0e965b3d0c7a2f34d9c469aaa2566cd9d4b2fd8f9b344618c20b52d8c06ae00ce20549b06474fb988fb4f108b4c75affb3f58f910a69e8fd18567860677e255fa8b7b50e2f8f480fc14544517f993b7d2c77580f5320eaf4fe474ac279f15634ab492f8f5000eb776ff6b4d85e844b347ff0406d9a4efb9ce55edad332c2264e758674bc86924b34b244254456d606a598d8a57a73945507475c3d4bb7de4958b728643452c9acc259e25ed8c660b8e5fe7ccc6b1551cc72c9151c2de348007ff1657a380aff6abc53b4fab9e8291e77d79fd5d5641046853dc032ec0f1c44c264a48feed09e583f56591ba53fad5512397836fd01427e2f5f05e3331215fcf578f9dc12449cc7c7f40c40bba8c059687339d3693bb367756e6b454ba000a5b527517415e24098776fa888f3c8fb62e86fb2f1d828386ca47e212311abc776a5c5218a6cc59e63de09c143689ae3c82767a0245718946ec79267c072d7fba9ba8041205231a02d923b732e7c1b5911ef26aee9b9454f079d326966892023d67feb6bd3a8d349158efb6f5f9d5b40fcd5a54ad016bbdd929b84f03d4fbd6e5c544d556063751bab24c2f484f787465a945a8d61d8be56dfd1c6588b49f2961592feaf7a0f9d415d34410ada159db512c3b279df991d80cb4ef5f148e9cf4c05e876eddad532d08eef3f2bcd882ad471264173ce0cfe2c7b0a1e7950457cb5afa778ebfaf57192fa4383a50ded4fe18b5075d53dc01d4e1e0ae2899089dd2f2e88fcc7fcd6ed92b002fa7312a79ad5a97af810ae8f07c21179f077ccdfab3bbf0a0b5d54287d7ebd67848d3cf11fb1e0e5d2ea0bf96a2bca1011df3dfbc787525aedfb6d1ea01ced5acc28a04da87cf02e23c68b53087f9cbd3377e70f56f82792f3e0a953719b3c21eaac7fe2760c33e326c8031cc7c971b01dd4649207aafb8a55def2a7191975d93f8c8d3bac8b7b280a4ed3570f4ad10456c030b60a5cc27d1e3dce95b14368683350efc63b792f75c2eff5287a2409fcfab2bd7f836b1f282d4a0fd1ec7de5be289009ed3aa599a3feb3d6ce12e65928ed280bc194cb67f5d658ba73965d7dcc1a20c3eed2d55e50fb0cd7196c2ef189a6561da1205d9da9d8ad8f144f842924e5ed36aa725d45bf5719c839a766307f1cad6b4d0f05e034c2d55c70f448aa22b59bbc0d8d604557451368cf5d090639393fa92cd780245e52e7beb68dec14950666f5b8dd1b6e7faa93a8a59dfa8be9a95c57b798fc0872d21e05b0071747cf67deb0f3dacdc9eecc6d3cd90bb7fee912047371a4cf703f50a7a94f05f5969885677056f0d5c4ae90a7bce494d52c788d64b69b3cfb29a8d33229fe1aa0cc80d919ea3025f1ec2a43a02b7ab5f23fed6ea315cfb1960ed7b89d329427039cfdeb094ff7ab620599e70cc8a4cd8d414fa7e7c6d15271d04a0475a9b378352b0c7177b1b8eafe08250a37a1f8c8b05eca19026af8f2fe40c98d8022df7b0069b30e62d8ba6b46e2e2df9cbd1e565eeb3c82e43f068ea7d9e876f5f423086cee227ebf9a154c62b46055fa291473e9999af1e09638297b0974a248c34a47a95c2df8aed6522023c8f5f692f74df6ace466184da0430e5cfe09eb7855f6a415f22061140796826f8ce428585f49b44c40381ae00a1830518dc289e1564ca4c81e555d008b4b7c81b2ebe0ad83e008198b517bccf834573c7fdb80c21d96b74e36ace45b7d3b3d4b4d87afaa5a84902373ae674c257f22a99646e55e353f9c2e002e6be40e96101f93a179ab089aa65949120b4dcf457bf9cc8160590d9bf4710cba9c74bf3ce50d7c4ec988d9ed32cdaae37345044267437679c084372c84956e871b6f5ab39538fc44b29b0b56e0c676606aad023160ee11ce221aed73c03ed6545ec610e2fc3efb73f9bed1b7332ab4495d3af4d0dc29613108ec8a13a4164e82d41220898f4cd3385196d98485d9730ae7eb24207c6c436b79bdd61f315c385c6d0ca9a6ee2faf62dfc08c248878b445c0d770396a8e5d8e463802354d0128296b8be7c82b04e1de8de012bce77508b25cb4aa432ab4d7c2ff2d4f8d0198becf87117830f3a161bf5a15dedf2eb632c54fe7bfa28d0ae3d35ea5d8f2665d234ade44444a86340949efd499a2999a0c34cbffcd2f16f6e707d31297748271ae13000db7fafdf9aa4acad5d782b67aab93843f75d5d9bc25080245df342d236ed53c0d3e8105206cfa023d758aa18d55fc3ddee8a4e486ed2f7aa152e9ab1393941599c694965c2be41c9ff78ca75cecdaafcc013ac1ac61096cd94f43506fb420d2049c05dec5da6adc465f93096c9fe8de3abab8124ca4f9c6b5716de31c99e9e5118390f64f5ba2b9930f0d97a296c00af72162e612ae7f5a21c2ad3cf31e3036f0a17b6f378771ab05ecc7d862cd76a1a4f1d7ea7f768d3b91e9de696ac27dd1447268fc76293de51eefe39b94377106e922ccc938577008a163f54de3ab030cd3f0cba39f222317e748a1c2fa658e5e0b569f7f8291fc1d678094bfb205fa2d56c9cfb11d98c04f7cb47e6d761d00555038360e097bd0ebabc69595009380d85426aa6bb8bd1968574ea7482254ff093a7a5121e74edabee29e0b1c14288fe339e9adf26f9d997fed87456a878a9e95631893b062d91a9af9b98d2ec8b6994a4f467ff6532394e01a1c2ead8b5ffd92e0bfdfbda4a3bc43cc67831176da2f99336ee58dde9ab26d8b34f95e7c7e7d4785e89b115c93763f68faa2bafbaf6ed29b3d23680bb4b6a44ebc43af439daa7602a307c4595edcc6bb71c11d3f1e56bcf1b35357c317b112fb53e4de4aa4faf0882b671cd365b19a36903baa1988005baa4d092fa255ddf7a3ebd9269a597dd80101126fe2131bf1bac5f80815b6b9109468f8a9000e9deed59ddaeef40e8a04243e4dbfd8a77d55f087da9f966bda8b7e721e9c574f63a7f6d66c50034ff2ca0337f277d92a2f61506df59cceb988bdc760793b0236d7ca39d06de7c6deca84ceb0b7cfafe04f8b1af9a774b9824aa5bf1aa48f2caf35670ff270cd10dd466a1bde20d9ba3060d0d807ce2e8ea7f80d038d522e7af5545557ceb322f2a1e75cfb3f07d69a5e656233350262367037fc6efe6bbf889a6c4e3dd8e836bc55404e6c85e7861cc80ef3d137685e562db585d00bc9e58451c8881feb1e52583009c612a795b90f27db130c89f4e5d595b1e35e94f066ad148c6074470b06890caf76372fb89923915fcf67a2fbcf318fb983dfae6f5cb3d17a6a7d7085439cb9769f2a4cee291053cedec003a9c24b4f0e816c3b0f0e6c559f2af92302b655778e859756b81006f47891c5dc1ba44d71684aa3b7524130868026052c997f4393dadeccfde6fdef269a6ef4363b8ea007e40e53df79a181df3e53f2bc3ceb8b381d0872a7936939b8b37fcb36829c91c9ace537e168a1a194e75ea506dbb00049971f1ea8d19dafb839bad1f2478477da22c08f41c85285d9e3cc9f77d8c869f111100167a6e200729801ae26d43be3791897083c19604261af369ce81131cc4fbdc211ea183955fb386dfa77e32b36cd24a1b5567171bdfebd96c2496cd04416c1582ebfdf5bca1c23647e46bd3eb0805dd7e36d24999edcfaab1a85c9cbfabd5e628c3ffac59bfb1a30b2369c1c0b920bc87c48b488aa274a3d0f97611370712f69b45f4068a26ff0a786a59a2494fc58c6445dfabe0381a277e0b209036056f524ae21442d7a095b08567f5542a06ac4e70f04fae207b717924166b4d5fe141d3a0dba8741f50bbf55a8e14b25a42bd43557542d4b6572ee566b28bce935f66dff8a1898fbda82c19be0e30d6e2f6a5000670cba2631517fb182669da3649576002940e0d5a9208a88c169a2c832597d800764cfb3c7ef577435216ae3bb99be629fe404908d0c3ec4bd5abdef41794ead47b096fb9c635ac607c6541257cb6e91585995120f53877fdde7bcef37c48d1713da7e70c56615f447fc58e22e03a075d4fff7239967f79f1c13840783893423e1fdeae1f231b84c1d907236711a6c987c5c7104861397d249203ddd1ba66145b0060109775add318dcb77d07f794137a6f82dd210a15aa8848a00d303159ce27cc7fd4d7fb1085281b49115c74240d2307ba6aad81fc1109ddba74c2ce69858c8fccaae06770a177900dad293b6ccf4c3e57b246c46b538abebeefec5596697a52656b55654864f64418c77c6a1d6190800c66360047cafe3d64b8dfc616ca60a11daf2ce3230b705b168c00a4454ee8746b626fcca4ed80d059eef8106cb39cb3aae16248781fa1dae7a4e2450c2172f51ee99aafb339212b47a26144a63d559d6a4aae21880ad1ebefed488bceefac54ac683c5cd4f013494e34170f811836c676345c5443fb0027e1691556d79bd4327b74a213343bb0cae8d49f9c9922e3b043fd3c79d5ea9bc00d82129fa5122cb8469d04c3dfe05fe6b498b1257c35b7e99dac7ec207883245d4ac1ae528f0fe60bbc0d50fdf55e405b9e390488cdfdf4c0b043fe05ed2a3b4692c671614d39fc3efc79f7b1153b1687541249ce2b960ed5259c2f7a521880aedd06644f8c85874a3b567b704bcade775f579b90b2bca0551859de838dabcbd58db63b924fefcc4fc215d69ba8a5e8321cc8047535d10864b7bb8ea0e487c580ad751f05dda1339e93ab09480114e7c99f94449f4d007185a03eeb2c8c3c5f61b9a484ce456cd16b93fae896b44a7c1635cb4b59609008884b8625e5b7a31e2228a55a9925fa569b65bc7828e2812824ce7bb4b9e5d8bf8eae6fc8f5de6706f82f30a3d0ac710c171e0ebd66e69464073e9377a36b6cac135327d3d64fa0515b164cdb63e83c6185047f95bbbb74bf36a3c607f7d36b741a859a35ac08599d5b1093b3f6b76052fef2f36838f447cfb9c21ae038da0884b1f6d5171373a42adf527fbedec9a22efcc8e5b425013ce7b20",
        "fc971aa733689485893d63d1331ef11c9c48fe3f7b991c9154f7bdfaf1c2fbd7bbf53a3f101f434e09a79edd15728d928fc23aaa63cfa298653f72bec426c561b6cd73256e85f10549a2b43daf4012e48b7711fab2aed61abba5e1cf09041b7558565118f7ee70c1abffbbd6569bf613402ce289d168251b33a90eb590f633722a1e1d4cb9503ba4e9b1eb63a022f825ddfc53b97e960eb9edc5948303def5041e351c4490d7a4f709dd92248c28b1794da38ff4c5b55c45e591c6d41b29cbb9b585706136a9995e7115b6744ef1d208726ead6f6ce186bdbc66bd7556b3a579fa0b4da8089ee21a19957bb4624cdec05ae7aeb4f4b6945b9d1f937fbd4af3e87966f0bb7af58859581d76ccdc7f5f891fb253386ba9b139d2c5a5adeee5ccd645d13c21af3a8b70036c504b27efcc5605814aa3c47b138600384dc3682b34d6b4b9465a77299f554877e8f881d51156b375b9537796aab33e7b7056a39a2f260c09288fc8530000def6281fbde0632dcca94a95121dba78befd3ff17b10dc71ebd6d5e6a7af559726b2cf4af0f5a35132bc66d931c53880919ac82b1ca6928870c35d40f9413fc25e028101223177c8db81bd81e0fde0f2f254947a68cbac8126bcf73f6fef4f78f4ddbb88ed33d6376e21ca5f5e5e6ec956fd5ceeb6a85040a8e9b9265641d7f44f883287962dd146700f9254db83779125280aa0ddadc1a7b794d07c9b3c513367c965660a5e60d232e9d9d30596c07df889d2c63d5c84950540ec1ef905dc7bc5ecdc08a4a85af39027738996d13a1bc21aa210908d5ab56cbaa4c729fa16232b6d1185039a763bd1389d0dd0bc7985d735e0dff221779c2f035cb61c392fa5bc497ebc6aad3dd54525842212eeb607e3f8fae9cfd5a4c9d1d68a691ffd8f65c7ad0d3b991145a127471178d2eaae1039b1fc9d0f821f53370d1e120a7e206b638091260134347950333d6ea138703de02bd401b05e052e60935b0a9dfe7833cfaf406808435a2aa5b0cae230b986bfbca444cec7a3863f3cd3e253a14a8b6481e9b48f0783dbdc8d1a2f3bb3462719e342d37bc6addf755800fbbb3b7261e923f5f3c81009e557ff646083d82c73b8a23d0ad1f46867872346fd587aa01828a0b4828ba0d7b7329d41d474baca33fe6e2ea4cd56e70f87d3e6f67c2d598e46a67af57ac6bb50fda815ef6426eca5d3bab18e472656762d6c2f2b8b7bd5aa7ba69ae521ca0234154f52e4cf312b9bdccc8aed4f40f0e4c9caeae747a1435549c10f464e7e8dd65b1e55045d81187f0cfdcd1f40dcf198c0708ba24b3c3f5491f8a901adef111e610da50fc1ce3056ba033400d2d6f3f6b26d80d5971c14f3cb33c55d3af35fe3f4a7988eec58c2ef9d27b6e5d5091475a014a7e61d49ab4b4d8961da5a1292cbda6cbae3ff0776781e9ad708e672f1a24c734b6b0455c2111142574c9da57d0b522602b5541df43787f8d5d92e29dfaf2fb9156850d2f6cda39e9773345da066a91e4d3956d9a2e7328e34d679927405ffb72d6ae74a1939037b7f64f4878dc90e296db474a6b3b4e5ead07790b2e27d4e8c8bbdf8f509042ef3eab3044c0bdd95b2f1a166a39e3a2c588ad8588fdf3b2248d69dedc570da7c2e53a23762a27663d0fca409ce712febc7fb988f214595afe38241d9e45e280e79d24428597a3c582a8ced227e86b4baa897a6b99d8b6d462eeb7e1a7723482833522d8a4cdfae9784ed7a13bd67edaf1fad1c86c164cc8a54b306b2a2cd51a6ef4fbf41ae54125c2d0d7b43e2d011aaa81d1ab53a58388e2215831e507fe28593d112fc3ac0071e3773e2071e91925d55afc0af4e24c8dd4f8585f61f116e37773b3716829c310996ec08c366d47a23f1e54729167089c96dd9f5323fa8967020bd66b3ea54eb6b470d55565b806a6b1d10c51d954e1c0f4190ad663fb3096d55b2e39c19773221e92f8846d5eebf6559ab4d0824c8516a55455c633d35714c9533f8ee24af2bc6a131d285afe612dcef89fb901a005ea40eb7a8714d77a7ee7b6158dcb9bef135116d21664d7e83d224af5fa354c9f82737184567e19d6da3bb52e406edd4e2374a507399d2f4f50aa57c315af2388637325a37e8e1177f83c14423c49e0101358e5f7491822d79b1dcd1fe73082aa79f9ae5183b53e4aa5de34696894573c3de058685b8d3582a8e5b7d8a2d12e5dad22a3978b241f3fe5b2d6ac9623559a714fe378dc320b0042df2896b0b180c44c4d86228bd7a057dd7c1be5e18730cfaaa080e40c329ea4f7803adfe792a2babb284a72fee93bfbf006ec91eb24d163d6fc152f18e4726b291bbeffb9017a01c4135cedd962befbfb2a28419d8bc5aba9b113979cd8795358bd33a1caf98a71973e959dc3171da919acbcb947f46acbc13d70dfb9aade3477b6689bea69a8a17691399b7577ea6cd24d71b7c883ab662dca5d3ac296ad1a6bcdd348ce56813a1d3536be10325d022616a1a6038621a0ead4b30c6c0caea3e501bba5e8bdf225b5a4b32e955021fca3ce57deabd74c605e276c4701934c21fcdeb7c7461ff818582e42e9a152f85a19a07b80537a07c72f03101636e39c9edd197b7d73f22405d0cb8245b4e78df560611a7fd57983c6a6a311fe9e78e96dd661a61d4662533347a1c372415324b7343ff033c6b88c2f42d9194d586f2e8ebc946be095d0fef8d659e2e3fb613d246b368dfc851623ebf5213fb2e5fb3d3c1e6186e876726a0317b34ec0bf674624c0a651e50559a4c7cc4e072a65fc5d546f3aedc68af815b5b7a373791123ceee8c3dad992a7601aaea86132942bc0627d292f83b1eed1786104a97b1bc18480c8e578cb70d70249ef7c1c26c1b3edc42b01bd126e54c1fcde953432e82d144778ec7fd00ce3f355966ad1056a6e2b9e14d40c5d1059f5787441ec1344ca3315a29a969b734eeadad64f4729648cc1ca88b31fdbbeb988e15b5bcb2c2a9b995ad77763dcc6a17253567df133847e2158625bcf248759734acfae5e95ca753c9379116df6bf2138dbd3319351e78c2149f9d83159b8751328ce08d3793620c2fad98419b7386182d87c070de7742aa3510b230cc061dde2f1795988289057076857b7c3cb5fe08dd4ba7cca3e670d824c4319dee13eb7fbd5e9c21bdca1ebd2df4368768880fa0360df8152d8daa7aec98c69d827c6f7384a0723392725418bab054473d31c3cb5b458191993715a66e3d5e82086805fbeb64f474ef330014d805ed7981b3357e649d91632c5fb9765f180abfe4fcd331cf108d0de4699520869c5f68c4d220d1cf5ed9ae2c87ea5e5c33c71ca6cf9ce8bc6aede1d94a32ab08703b59a44f8ccc8448529412d85aa13555593c33062df2c9debfbd2f597d024ab46aa68b81a31a20684894175e519d45d366e32a1434d8f1d530ddc323f949712dcd6d50f0fafaff7f8c4db253c131e70de215dcf201245976bf05807f00d47efb93212828b8c6a85c5c2f985e1d3144b5a57e31c90235bb7efc5405d895a27875aeb1685da167e2610f907a70d0948fabc59de75e0ace8898aff465f931c0154fb911235a6870fc9e2de148277857707ba9aa08e9a9b8385d6e8ed10bc0c935300cb8b0ad4f911e3907b7cc89a5bf6a18d2d79687b7c1d765a206f17911d415110e4beb3a8eff97a90793470ee013def28f261a0d15024e3a9122f328096af32c67274f3d96386e2ea49a8e4707b6a9e86904c5b79ff7e20569560d3ec08f83872cfa4a715180af9b47518a40752a9498996f62a7225cc952155b2ddb71de410a40e485463f90e32c07f5c92850ba2473767fed726a8ca613479750f104a49d4459b61456f019b35de7a49acb583d608bc2808e35ca95bf712986fdf9a6375ef6c3f26f0fbadc0727c193c1af84b0d2604d7593af71941802c446484b89cb76726bfa24f81a31df595873cba438374435ff41fb6decf503a044a2968830d97cb6d996eb419875557303243d9bce1547b7008ab68254da6cfcb85294c7bdff8c1ec88f316c8f12ee2d06ad8f4400e9dd1b47776c52af076adb3cc865204f0b30c42c79ed66bb70173b124ad71ddd1e2d11ef60f9d48f10290fa914bef2352f978db8d622b1022fa3c794357087a749d5362bea740ea76442f018ffae7b76154d91b6e4c0edd7a1072ded121252d9a84fffdfc3418a3a8fac036a94bc60ddcc13f36fc4cf07a5acc43a1e243f426ed1a65db48babc75f3365bc6e83096967b4e13cf6315f93307c97abc463b2ae34b02f1c74756263fcd62f680b29c7efe6162168ad04d06e2087cdd3954ecf8dfb3a4b0c1cf20f8a0818e807b9698140cbb56f5e9698661c98243d1ee50ccf3d38cac5935dc37390536efce59d9921e3809d4064d3e6a5992a3db15035e18626862cf6f1312d69ee7c5e7d508b36e9200bb3147d4eb84b5af30aebfc9a7feb9a34896b18976acf9fd8c6f05977ce2f04f0bd016a02b4013d1f31cac6671dfb5d1e10b69c0c04fab10c7a995c97d4689c375591ba60bd4b7b022394ce45afa6be72e4d9f029c2f5128da309ed0e3f7f0bb7f4e317939f8679e8e6326638ceb9f897c2761577cad1862df937e10bc068139ac838894e7d66e4313d3ca81d5ed911de24fc0d9b49960f4ac5b25757e4cfe694a5b3bd117af887bc24174e1c7ea91bf9f771a01fb8f3c43b88807ec2e0f38f2cf1d6c04e258ae801e0a357b94351c027b00b9b32978f08cd6f1fe0a182a2d322f7b762bf0cca255c90fba7aa0877ccd0403c86c8fb86a44f10bd738de12d6616f0da9e185c6f73c8e71552e5774e22e9edcb01d94a2e05110620b6e4231383b0731b95ffbe9116d922c479e0b476f6c8603ec26dd6e780c851eae587203d04ca286b600051b88f7e8c0c73d460bc387acb5b9a5fca09314f63862cca3ad8ec856ab5877347f6c9ae3e58d837d4824d38d4dc21db2ffd6d61716402495183f15e3132a2e0f730497a59bfd3c301ee9e27b6754d8904c50a8b41648e500fdcc880175797816037f3645f64066d3cb62ba970876112d670efdfa2af93ad5f1d93d7a017850cdde5b38ada22ecbdaa397deceffdb50e7e51a5253dd12296f45716146c3e00fe1af427965e49d11be44ceedf509f567104d67d1bb85921bb956122b7f017df81a7fe6124529020f6e97c0f9cac7b463edb879563d36aabc1f10dbbab4b80947e0344f4b22802bce9866471f6f56b1ea6483008737047018af871aa641d62eb819c4fb9a81a3270b58c42da9c4515cb2cf06561bd993c7226b9705c522d204b7bba39e3528b8d3bef66f98c81d0b9fcfc54dc2dec752c5db46774cf3b2a0dc3b723620fd50e3bb309f5d7d5412f2e70f0a868297b60fc5a062d61275353c38e5e23b0cb5473d394997370a9c64ad0ec00f0928219326e3cc869bd200413773823cbda35832520d3c93c36bcd28bcfa36d8dabb4c3cf7bd80673e018f80597ec35faa59e8693bb7d9c2ac2ee0fcbc8ce0be957cbff4513d3913a089550d5ec0df5c3112fb4d95a23a901e2bd4d9d8701996f021fa6fb185e1e692c3a54ff4db343324e92d3ed1397faa528224c19bbf6429bec5e261e92284359f4a5fbc1b9ad770384cfc3054c9db903a1fc731c78dad880525801fbaccb2cb7d4d782c388d17fc9dacf66984006c303ea1d76521ebb430ae392cea0111880beb0a6c7efc93ea2aa72eeda8e4b6bc51867ab7173ecd331af060f16d3b834ffe9cf556253ba6c91e1a651a66f805ad881c747af69c71d439c6ab6f710ef3c23e",
        "811f46441b1603011452c03950e6f7d3e55d27dd3abb5920f5a9bc70d7941c6a8712ff81ae800a31f2c1762544ef9967116f5bc9547da0641d0cdb70ca38d231f72e1b5275f6a0a2426fcdc4422c2545784d858ba11425289494e22262c56b873db2599166d3b6f7a5850b49751558228787637a53d3d91c49a47bbf09c6e5fa042e29adcb80d4d02cda108445b905adc6dc341f19d2cdba369f85c6da85813e9e8def48db5a292ac80d5a67d404faaf4dd3f09ff40124bc772c73402bdd663cd1bfb3fcbd4ba6f126b56bbb121afbb42246df62b271ed4e9ee4a62e1429e038ae6908586fd370263a3ae72ab4c9b77ab201070e4f930fb4f581eaefe13f34c73f6907b4459c52699ec958e57062c405d37369225eecad1c18b6465c9292c1597c14ec5969a0115b2d15ed3a369221de0c7d028fde127cbbdc2254e7a05c1b6bdc10d549b40153f3058265625bc09181c41264e19068f38b337168a531e552ecf91bcdc3bba467054d5f692029456e89eeabc9b4526190342eed1c51a53d67656a27924b3a664a9ede978335eb2eb1bf4df370459511a6579f8b867f416ff8c2412e2191c35c7906287cc2c139afda6f6cac4aae2e10a3a18c7aaea8fbc46313cda66741f83c15af6d63c1b14ba2d611ea87de2fb43ab93dc342e5297cb41e1cc50044a7a23399cc24d6896271dccfb094716ad515f389538ebd800d48268918d1ce377f9d781911b020fc12aba9f34e8cf554a13b2a6a44cb664ce424ec3719ab52dbd43ef226b564a7b27da59b32f010e14588b6ff3893a7cc643d9275ec409c7e7c2debb23c3a976a36b0d05dc4eaa18bf7b6948caac3df1873150fbf81848cf10ee0b385e75fd214003e70ddbd2a8eb879305adeb7033cb7c2b0e43d0d13814904818361ed13fe2bd1d4c5a83674ece3f99be12b9decbe1d03a5e90aee5d608b68e73a04582bff8d95d05037e0b214a17df9861ed8e328e83cfb0a510ff118300421c571ed193a7d48e6ac1e9a44aeccd89dfe3094339372fe63c181b2b287df46daa747c3d0b2f3e526a514a2bdb21664f5a1ec07cfcd0fa2a55afdb40f3579c3f707ef7667edba65dbc6203bb410753e8dbb6e945b52e681dcd8be7dbef468c6eb10ccc2f633cfe244b859f629c6ba3930f0ee7e66c7a302ff915baaa0ab72c673896a39c49d47a688d82bbd67934d242257079661c646295d5bd6d4ff1794199e055e8828354587a75534c1181dfcdc89a1464e1d6c45838b4299fc67ac49ee2a6530948d508ad8fc6e2a8a4256441d193ffc1fd39d95f8f5b7d122a65ddd0c5e23e5874580e16041a25a6d2e76aabfeae349004f9e219f112095e1e493979c67a4d656b4325ca2ab6bff2df0e2c7030289c29a138679a46708ab03cbd3137a0487dc8550325baca2e09981a04567890500f9369e75ffdb3a9d6ad0b9dafcb0ca634fbdd54de8dcc9874cf67a4cafd882b6451f514aeaa3fabe47e6d0c17a19664dc0179dc9e6b2f05eeac1714a78b6c8e95949d1a934a92faf8eaf4d6745ec547b21e50c8ffc8ccc71cc4289a9a76e8b2dfd064e148b1d82599a54cb16016d09c93f8770c878d5f89ec9a1765f5a3922a8e112389e43376fdfa30ccc938c0666f1df5d8338b39821d5a9454b14eb88e675fcef251e127697329508f0ff19b4f7a1078a53a97dca8d454420384053e6511a7fbc8d00a4f4d9b3ee78272468e55ab3820e23e47254a53ed18fe8cfce0fcc0b35a9c52672f4961150e75fc25bad21739801ab806356f1814651f4b50d472912e33f62e3cc60406eed10887b10276a344b31ad6e71c3fadc0141f39d2eec3aa83a7d9cc6c475041279579c03bef86abed10fc3ce3d4af5ed59c57e3fcf279be5955e65b2f636322f09b6b2f098e0935abec54e738f10294f82ad0fc1299779bae6b531f4c5b27964e2d58fa5ef5a5f0d3313f077695876c388602a067061405611910e6a9485c984b8344809b4db9ec248b1b1ac3b3492c1977840212f4a3464a10ca6bf530c397dc0718da08af8c201c31813fa5e253ebd9488d7c8753051b43daec37db258f258a7e61e96f6ba91a559ba68191f2e2f4b224ceef284884e1d1f84b7d94a76ef0a1c1320bcea5d237501136368a37dfd63962777eefd4b1f6ec9cebfc443946e4d7767d01a2e95c743991b56374b8b2360e0f98d7065ada0031fb64aa77369e12f08a8ad85f5170f902ef2c1f4bbd43dfb1a34cef196bf9e2cc706623c3e62c3dd088a0f8f5293429deeb8d4680cdf2c3055401b88d1f810215b181ea97f93c1d3b4e8ede089bee5c281745a6e05aceb85f6641952ba757373aca61b6bb4338781059ede16b1b4b15b991d9431e6b30257276b647860344da063b5cfe0b4cb561d7a81bf066e773d746c2be5da842b9864cf9e65e92ca0759048a8b79beca07ae95418c50304b649d7ac3b19c8e7f3f79c2cde9dbc09a221ad5b695991b06d0e9293c6ffc1f4c11d0a9fbcc0343ab8414748077ddff272cf6aad0c1ed4ac19a659066d9ee3841e7b537ea571b73f481c2732748d32b518f46c679478d207c2a001011a214494b4318325dbf8ef8516e73ba91b6ba964b371aa7adb8bb8eaf827e91d51503714fb03f853e2cc3ca15c71514a8a410ed7bce1d7c8af7db27a0512d7de060fa79f867aee8d39359d815da9467cfc4c70df10fae9dcfcb9370640b4ee183f325349aa44982bf69c942529928f26a6c180dae2bc13fc825cb8883e595821c4b38348c8b4b30205ae6a8372fe694304cd135144fc2afe9a6ee94bcc33f8049e4b81f3c261434ec7373c8e06249dfb963fa0eb60f00dd1cd4ba308acfd4613bff46d263882b522348a976331c13a93d0cc9c0562c454b07eff02bfe3eb0ccf0beb236e8220ec",
        "7ff6ad2d6714f71ab67bf863ffd2f81139da7d91cff48c1185ce59f1aeea8989ffe75760e2cea65722d79870c873ec4a169e9a60a8cb274bdfa4fc27b8ad4bc3043be3cb4a91b0740626d03f136aaefe7da6bbeccf072bd174aeabd70f8c096859a2edf99aa25e125b5d4321f644348e9565e56bc475ecdcd5bdac3bfa5fdeaf5aa76813ea7a488c576d0fe9715eb1b032c5e9d2da3ab04b6dab21cad65cdf88c6f7834e32c0d14703d4f73aed744012a68e6d228fa5046ac9a86996116839e55fd4c7a21968b32057a36b0a08b0ba3f3b3744040be4e1f42ac18b81fa5040f781c0a898aea84107189ea510ec5e71ce11ce10027528fc1ea05aa6daab50c7010e8a9a9038e5a713845721e42ea58790d374b56e118b003d66657b5e0f590667c5efc583a2284dfd778f7897b7d786e53c8fac50d14e005f6d6a7753b8ebc7bd5799ae60c03dd898e6321ede129e948188107bda670da5adbdd69b28fd4219069979662fbd385352eb6ebf8c252a3d52dddb83e5061a150946e8fe3f3b9c746d3225f1c7cddd9ba182bd4cf9dc5371beb6fcddfccd91f63382e70ff1c709f251d399bf3e0bb37e8198c6ed4750f3bc5299c27b315a564c0d4c1e4a66472c136f73a5ca8f7521d2e2f8c050815187d20cb49f083c15019030ba15181edeb31ae0c2e402c360c324d543b3b991223bf441655e6910ef92326178e8e09262cf8c314c837aa8742a7090f6c08f0c4d1fa93457dfd02a0e6806a912cdd586bb5dacf0428457a231631b0ffad41de8f3fc764427760ad6a11a9d9ab229ffe61af49ecc0bf1944e04c523c0bdc18428f827bd5553af7343d130dde5798237e92f1bbb247c642b83e42d3e2786290c5bdb1f93b85adf8588c98d7df751bbcdc0fea029cd47826cb6cc246b8ddbccce95112cdee1666391b2f2fa7f00c75a1dc16b288ada9dd10bd4aa5b573355aa5d31ca2a158f140f56cebaf1bcb7679f0485ad54cf9929f31fa537e4e35ad457ff64c334b57f8dd1ba1e9493e4f94af54747d25ee5548e16da2774773415f3764c8d33ee634b329209c508f7f64c7568d98c2fcbf085dee55206d54fe38a9b9523ce55fa4bf6f39d624612d76dabdc50b6c01914581cbc4af5439deeb8a083a382555b9acc7eaf5e9053a7ad97a5736fbdcec54f116906de9a6b5459d645153d0f6081cb24c8f2a55c2990d56e3f6575f278a27dcdf62e0118058c0112cbaa275d84de6f0a34538439a963e191f0bd31e3fb87552c080e54689d39c5e3326cd7d3f6d8ba923a04c53bc513e2f17ce099cd3ef1123af29afef033965d63a3832b20980c52253aeca015b0a3df58927f4603b8a04e31c81be1defd7061a6025ed4ad2bd6ef451bb1c0b6a0915a5102b56a9e982cb2422912e7c03c1cf21862e610d1e0a4c0def825740ecb0fcca11667d2c8c61242e0730f192f1362e9f22c791abc02fc8a734d10f553338dc542bc0fd2a4759ac33555430a0c542ee1eca618f3cb2abc365527b3ac7aeb2323785fb8a787ba4af2de6db451db0ecef460fbb40c72eea42de8ffc8b162be1a5db6a3feaf4e58060188f7b14ace1339fe26016e0a9d5af74be714b58cddf1890708116fba01f91297cadcf9a9011563ccf7ac5dd04909a84c4dc916ceb305613b8a5d016d1aeb0d42a5da8043988e25688b31ab216a755b756108b1612b99b6a8cd2520a86e4c5135d6407a3cfdacf187a63abdce8102f9568189a35993f06e7df006a3803d01ff4bd2ed40d43f30978730acb80b9dcce45eb1e0dcab27180d4b6f57fd2dea54871bd98e13ebadbb25831f63647e9a811b86bb60c9ea448e86fa894b603c988f6c4033ee10bf1d7d8e466871584d3f64a4793b69c9ec0d6c0783b6481aea07d7509f84a0752d08fec7a80b69f7dfb749dc20d8ac2fa2d5f6cd46d657aaca7b2797861086e1716a794777685470634395083a2e816d23de6f6a46e968c0dd938fffb4fba45e12f7790d471afbfee836c203080353c57e1d6d3cbab8b89f01571d7e6eae2c9f77e66b429b947487f5a32fde635a1a5adfc42c2433f3f4d8c09cc0ee346a34c0315c13caa8f157882816e06297280935c168968698c9b2530f32199aac61d684a10e4a0ec0864b180eebc78ceae208f20cfe1e613b88084a62f4cccdd95205a4d702e3c5706aab42facd06d748eeafbac6906090c1343d9d82917a3e2b90244daff3adac0163d637729071f351ec8871f6b3a461ab886882148851a679fd7ca97ab8567539b8ea115093d25c060a9fe17b733a725c0fe1754c764b0df6e51de7fc78c16dad0ea7fd5fbf37f2b1191b3e78173fdeb66b6f331a08729ce6264c0a81eb5f58a9c686d1c8f9a5e3bd8f1aea7bc9d0fc3040f03f18be4ffd51f884a28b26c43eade2ffb742e005c1120db907c52bc4871d75128ce28f1b27d17192889ac30fdbbc7c07cd96846dd0c0cdfcede388737667ee0ded6b33a254bb444a0f3f9766ff5b219df867f86c4fadde754ec29953af10e834b149a57d0ab02835605aa651b257489ab64ab7b583132018ac645b83e4ddac66a540c72e7f0d3d925a27379a270742352e526e7a668260b2f100cc77e89046df0907fb709b5b6c0d4e7b0e25f8cded166a24561740f310e8f8a62a16e397f4e85bfe2fc21fba7caedeb57b87a3fdf5d20d7fac4db35cd2ce5e905aa64ab799f9d4b6a29be8a84302beb652c879a4337739a9f5b794894e1040fbad79bf5bcf5cc3b2d4a502a7fb282915d3e401d1d592160f8a642ed766a152bb93e574316738e45ca09af1f40e95037ce34aee24898d00c881c10713df364d1213833d03fb8ccacbd3a3d55b9e14722f780a8d0973283fc26d53c0e5e4e79b6f3c51ccec32fa12ff1630acddbedc74e49f19221c369c650970ba9ea6bbdbd1da758232c138bcab097f42f7abbfb63f2261d9e6794ef9e7662a09e001b8ff60ab0c5cb9f645b8486ec3a0c6fdf3cb0bcc7963c6f973efdbb52157baf1535b239d2cc755b1432a0bef846309a9dfacd7a9b892b70cbe209724ef654304df4c6dd60f770ecf4dd19ea1cc482afa49c26f0f2d4989b5714d364f9d50205ce7580568e369d064d3a3d5f27a4cecb1f4bb1b065934a4ce3d143a6172431ac98cc564ee97eeeec871ebed2418026923f558e63f6cbec82aa1b0439b08aade890a2033e69034d494254dbc0054c377cbb9f41e577aab8a79a0c41c5048d71317a275475b747ab91e3be2c1603de3d1eebd3ea574a34b79ab7b308e1aba8144742197b8885ead4f72b0389c1346f26583a6c288ce018977f13b54f3862b9d171f0666071bcd685b509953fa5add3f4cfcfd75334a3e8d9e966bf0fc3874d1ce1c2e186c4fccf727bae10c056c1d319b2b1036c639ceb4606cc3937e280e3b29cb9c5f5191601fdae6fe2ffc8bd15acb08ba6f800c73e41a06c830bc01bc0c155419b1eee749ff10b25b9d3b6bc89f5d97c3131af35ffd1f40fd21bd93553f11f5faac9ac9b66767eb642c366be6b079374e8387258977dbaffb9f09d445e2008cbc1c9d7cb89f615ed50c95d50973b528bbf9d486ac8f1b2fa0ab5d3210b9542be1290bf038f925733d86228b6083f6167e957d37996d5cba2c851adfacaa214439a5b2c254efdb20536ca5266e54e99aecb8721187c7db573af74f2c20c06da7b18cc51129eb9004f8e15a3ac37a17a30e2d31ccdb2f2d5de1e77a0563126acf8bd790a03d6031590e75960a2fbd06db4dc552aeb4cc1fc090c406a517f728b3d753c07b5d58b00f600f93b15cba488582179ca3121229a7147e511c638b5699de74d76b55ceb7624cdf46166c03596c7b7e9dd9cc7124de493750cdd1bd24b242608a63a43f52923a5c1686f91604f52590d83c85de4a31b2af6d4baf933eeb6bb4337c3af931c6852ad625ea09797e9bd3ddfc271c3859fe7e2807d455963afa8344de35adea67a4e66ccdc38c1e25624d47a1e1d4748c74c1ad5cf4a5288ac18e6b736c4ed0ae17f0df9d785538f0eb167e937e7ad8d46f66c0db962ea00dc2cf577d4bc083eb725431fb3056e22015a8b56df64043a4550f48b0b9538e59a19efbfc51f227b7fd9c656d001c67315832ca622316778d87bb0018080c85f8a9c1c81699a6140814fdb15fe27abbe72c7a7e90eaaa7345d7ab5811e6a6d19a5277f8316049382c8f556f1dfc303f7e06da636df789c1b17671b3f4334bde444138c7423085c69e6a2f4d30396fc43050472b7b3442538a7233de902572c6581693fbd53f0b14750d24adc475702814085f7288599d825c5b15f577e20f46e36418b742cfaff1f198180ef308605be4552d809df6806e750b0c08ba181474845162fd01a0213f2186e2df695a10070d2ada50310370003130fa9ebf2830199de83463618dc3193c85f5511e0620c0cf4e1c5aa409d256a9bd5bfd1ead14030f3594d929dcccd31c28"
    ];
    let chunks = chunks
        .into_iter()
        .map(|s| hex::decode(s).unwrap())
        .collect();
    let mut rd = ReplayInput { chunks };
    let mut acceptor = Acceptor::default();
    loop {
        match acceptor.read_tls(&mut rd) {
            Ok(n) => {
                println!("read n: {}", n);
                if n == 0 {
                     break;
                }
            }
            Err(err) => {
                println!("read err: {err:?}");
                break;
            }
        };
        match acceptor.accept() {
            Ok(Some(_accepted)) => {
                println!("accepted");
                break;
            }
            Ok(None) => {}
            Err(err) => {
                println!("accept error: {:?}", err);
                break;
            }
        }
    }
}

```
Output:
```
read n: 4096
read n: 4096
read n: 4096
read n: 4096
read n: 2053
read n: 3159
thread 'main' panicked at rustls/src/msgs/deframer/buffers.rs:83:9:
assertion failed: self.slice.get(to.clone()).is_some()
stack backtrace:
   0: rust_begin_unwind
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_fmt
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panicking.rs:72:14
   2: core::panicking::panic
             at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/core/src/panicking.rs:145:5
   3: rustls::msgs::deframer::buffers::Coalescer::copy_within
             at ./rustls/src/msgs/deframer/buffers.rs:83:9
   4: rustls::msgs::deframer::handshake::HandshakeDeframer::coalesce_one
             at ./rustls/src/msgs/deframer/handshake.rs:202:9
   5: rustls::msgs::deframer::handshake::HandshakeDeframer::coalesce
             at ./rustls/src/msgs/deframer/handshake.rs:171:13
   6: rustls::conn::ConnectionCore<Data>::process_more_input
             at ./rustls/src/conn.rs:1055:13
   7: rustls::conn::ConnectionCore<Data>::deframe
             at ./rustls/src/conn.rs:891:13
   8: rustls::conn::ConnectionCommon<Data>::first_handshake_message
             at ./rustls/src/conn.rs:659:19
   9: rustls::server::server_conn::connection::Acceptor::accept
             at ./rustls/src/server/server_conn.rs:815:33
  10: run_tls::main
             at ./run-tls/src/main.rs:49:15
```

**Applicable Version(s)**
v0.23.17

**Expected behavior**
Don't panic.



Discussion / hints:

Fix patch:
diff --git a/rustls/src/conn.rs b/rustls/src/conn.rs
index 6c9ae8ea6e8..331903dd0a3 100644
--- a/rustls/src/conn.rs
+++ b/rustls/src/conn.rs
@@ -655,6 +655,7 @@ impl<Data> ConnectionCommon<Data> {
     /// `process_handshake_messages()` path, specialized for the first handshake message.
     pub(crate) fn first_handshake_message(&mut self) -> Result<Option<Message<'static>>, Error> {
         let mut buffer_progress = BufferProgress::default();
+        buffer_progress.add_processed(self.deframer_buffer.processed);
 
         let res = self
             .core
@@ -665,6 +666,7 @@ impl<Data> ConnectionCommon<Data> {
             )
             .map(|opt| opt.map(|pm| Message::try_from(pm).map(|m| m.into_owned())));
 
+        self.deframer_buffer.processed = buffer_progress.processed();
         match res? {
             Some(Ok(msg)) => {
                 self.deframer_buffer


Test patch: