Security Research
CVE-2024-38475 Apache HTTPD mod_rewrite path traversal: from BlackHat 2024 to RCE
Thinking
2024-07-15
5 min read
Research Dossier
#Vulnerability Analysis#Code Audit#Web Security
A path-matching logic flaw in Apache HTTPD mod_rewrite, CVSS 9.1, disclosed at BlackHat 2024. An attacker crafts a special URL to bypass rewrite rules and access restricted files.
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a4d4b6d4ade7253d06d61bf923572a6b8c253d117e8b63642be9ad8c68eaee7d4a02592bcdbd3155abcc6a953135deec61ed6729ad92ae056a76758bfc9dbe3a6985cd8e376b1412f1311ad5bb4a1f33d82c05a392354794b1f572a5c2afdc442d669733f58e9b41901a586b53f763ca0549d7638c3048f1f36ea5617260b335e3d4b18c4a3eccc9ea83d755c8cd2969032713222efd4ea65e2cea0ccbf4f5d109dd1b39aa3ee7645d3c685a746fd038770bd562790668d669099db682630ee1b4a609159b6981b18266f26dcad7c2f9e064bfd6d698504dddbc6ea44e7c53923425e1824eda131df568436a514578413cb2a5ccd8bc6bf59cb30a228994b50729088f47bc9f6ccb694e84d65daaefa10ea512c96e741699f16e9a1865fa96a62b7a8bc33ff1d247a47ae43c83e01c12022bd633a63cf6b6a1c2f3ebbce08af59ff3550f5913c5ddf30141aee38131fbc8627529f0d632e876e9d0a47d5c7c3ac5e9280bc4c1df6ad82808efe6971f51487fc6d82aceb0af3264bcf05ac6674c50a0ddc07f5114f9e1b696774b7e3b646ccb88a4420cf577cee1bf7f4361447d27bbcee1ed45d549dd465484fd7b1ca86a56e71f526be7921c70b2faa7131d2717cec4ef8286d78457a17cc7052050cb4e8fe2666877ffa8d8eeb5c05c3225c66e00d48fb226c60c97e4088f1f9db9c45391c0186863058997f4d09a4e1a34ed1fba7484f3069fdc4b900ee80fc7daeb56db783674baf0a3fc3ba5f7f1605374ac7549865c057ea7270511609f9745b8782d78210c4f2944285bff93da368ca11a38b77a79ec719de0acfa438d8f65813ae61cbd96a6f55caa92a6d642fbb6522e581dac62780413c6391f3fac827ad99222fd7b48f32eaab9ce211d650e3d806905141c22f29baeae1867a5f882a46e796b285189b26d021ec5522b87822a761df624afa2ee801add6b94c0ffbeb543a66ff15c23d02d56c1479511d9fbd5dc1c096c0a53b15cbedecb6d8384985ea89019461877ca54423538f99de95b487a5541d55e0d2644474d51a9d0b6dc08294d1dd77264ccd69f4386977d7497c8c442dfbeff6a4ffd0055ec686366fa7912c379accef1b9d6a013479cb395396fa0f00436ce9d8a093b798241187d99f1b5f461363ee978c02bddb0e5b16f85f31d6e40c0032a2fcea11507aec0b01f287ce8d067717928a3ec0385c56db0484b226510d34cc8f55042dbabce86150c9ee9002e3e3c58b6cec74035d4eb820e34460f92e1785f7b4f34393f7107005035065683359391752e9ffe8604e54ded1a6cd6423bdc0491a48ba6af4200758eabf614928378570c8f25006faa59882d27274e0e393296f31e50cb60a46a26300d039ef5ae05571c90508b5650d06cf266959cbfd8e1716d51c938cab79e69695677f5baca157007f12d38e605d04c98334ca3096e032db9801829fa8c60e28ed4b98ab0de5be57d14e9109398fe2650e4fb112047377523c589976a75ba0414e8b0625fa0bcfd07a479ec6d2de3fc0722d524202c81350a3ab10a61d292226ac34939493758a4d12d41d625cc1375fd896b52fdb018f933bbd2a5aa29d6d7be3a1c453d34d3d836b1bacd714d2a2a6f069d10cdce053494316f05e3b5a23cde8ef26f8dbc20a2fe55bb70a3eb4c945dcc4e2bc5ceb91b848ca94d1ddadb28fafefaeeed01f81e30dcab7ee070f3d2c8d81642ab1a4ff1ea6e13c512a32a99c519be52a319fb65100c9d8e5c6e1331232a77e32c23bd11e56ec473daa4226e3bef97c7f31c46103234b853074997ff4ffef31340ff88b3e5f598c6d294895696daf82c17e6f72582bf3f1872d83993ce1114fe5b8e4c75f809f6a176927c565249d4f1cf41e1725617086a4574d0a800326eba0f23117464e8a1e7512e68213b944d897402bd18b8bc451c4b17d27387cbdb5a98837566c09bd29e260cbd6c8c9ad592f5f10e09c72e9ec96055a5829d2ca1125746c637270bd346ea35df0f7526cd7528b184c7e747d381061f15f1e2d5b5be9562993b956155839a4b69c61a68a965c1e09e7b760237a55d275a12517286b4993f021a3346285f32d0df1554361a9083cf3ac57e6640248f0e61bec71227a239626e0794584d4e15cc88b7a1245e1096514fcda260701d4b4f08fc2a4c6fc614dd11a5b241ff39581180c104da243ead8ed0f7bc53e3b99dbb5bf04f3d84466c6acd572975f5004ccac4a1cc107ecfb6c7a8fcac9a03a96885dec1b5dc75d96de7c5bdae18a8253d2ae9592e94814c5f2253709a02a1275b89d4165a95c896a80611631bcf17e39f36227a3e3b6c92fe6120fca031fef8069b6e3a497148aa04a9a06ca30cd03befa7ab7ee1238eb47059746817dace2d2dc1a6fc60cedbaa1d7d83a2c1f5390129a111f6c597d50af0aaab4b9f64d8c0abb23b5374b79302104f2711d7efc3ec877089c76dd43883c8c24bc671a5700e12897fed9532214387ce8375fa5051792a708b3fee7b6a0d9c7d34404eb61bc5233d49ffcae65ca10a0725af403b0c29f6eb5c7d9f3f3b9a701a6d8daccdb0d171469e04c104b439e2d7c255fd199b615d3415e001b083ef7785a44f60c0cfac6a08f2e97cc8c3cacc044712e21391182ae4724506273166f58da9de2bb9d22f3f91a962d7cb1407f58075c24e50a1a5a80d0698de8fe5fdf0179c6e330b710036fcd22fef04887ff01e74bf3387b02980c380cde51033a38e1466c6dd79572b71c032657537f9a4507069efbbd6a7df214444e5728c0df25afb09f95941351503e44b31b6b15281e40313e391944af2a8d81ff8ef1f0c6c67a05047ea13c601bfc85b2b1fc7a7b0bcba8e471597712b5089322ce8137c4137b5e9697d559a114df164ba8c02a750de3b920d94921ccf5d2dd96e5866be14f1f4f752cbd3161b9e354aeec3628027198221ca7ee77764db4241d0b651aae1a61a2762893c3f8362470c34cb9fa77f9ba179222f8eefd8727f13ad01f5a621565139e05f300b525d284f60af155b1d40da0d60bb36865b964f29a8dfe4973c71f7e466d50132435d68465a519ded06b1d570b2dd5bc5896a982bee42b000fbda7be9b09d956366221558e008600f8ded4eefd4c59b2ec46b8ec3d708fa26ff73579da76e058b87df3b7c900fcc6a2c08d723573e6626e5ccc53039888aee205a8b13fe1e712f3decd6329f19ee1a1d21120690934364636e46d3b1ca062986b13602cf4521441d97d6d9b701297008b8467801ca5a6381bfbd3a09d2fc05fe10a4780c211cbe38a46a062f5c94a36220926b746f359e0745d1d28a488f3ff475afeabe29b829e3584cbfc41b58a5a5cdc7736841559f54efb13c6884c922d0007f3983527a6960517106393c0af55f1ff4db2816b8abe4cfefff9b80253335746d27bbfaee1e2f0fae7cb8e6b939d863773adf7a400a7869e8d3b7cfd8569f0be9a7a95eebc49c61c26e14ea9e1500ca8cd97774bd17a9d2e0c521b41257f113cb64f549bd2531c23867c699f9e0696830d572cdc1c21fc51e838e896f305367f24c43ff56fd724ab5c2218f6c7a2f71b5e0063e09cfcfa7870a2f1f6db9d78413e8e280aea59922f45cadd2d9756e9c10a1875be18087caa747a5b132c4a42b51ffadc1aad7c7cd7a1a8a3c71bd6ba1e1ac142b0dfdab244ee1f9d7992767258dc5cba43604571df74e4114746bef03a336ddcecfce1d2d2630bfa5582a3931820d1e48006c951a8ad6b1cdbd9ee52b8505b2efd7406b5ec8efd0d182398782808ad0289e779db4cd7fd6a43249ab0ede6253e6f63ad101a41c78314d6054fae9e8386cb633761e03e1e26377e5f60333b482bf52e10fc8eabcc16bbc3deb5ffaff6ec5e8217b6b187d6c15e70dc205be6b464ed72cdb8e92a797b3243cc3739c767db5ecc759f55d4f82c2ae2c2dbde915642be3352326ee22533a557d9a6ec0c3de508cd48651da49d8bc2653ab7ff31695cbe15ae27422681ed58902217a9b90ff04c8d6c2b39febae0a4142e1c3af06d3468bb7e3d412fd4e0b53d98c0980e0798fd5fb6c718ea9d4d316c2dee9a8db82039dc2d65b33c703a1a154c2a5238f40dc1fabf0644009318ae79db4481f0fcffe9b776dcf6d68ac41020eb8568199ce98364e52362b0491c88d3bc297f85f59c60033169c160e59dd43e2f928214526475672753edc61485d34d219e4120bef4d5ba1bc86c00a07ffbdd0ec3ad68355ae2209c75af42f0e12d4787cb538aa123915d85eb4bc4dc4f3588363255a322b78337e1504abc9c40ad4c9fad5c5e041cf8f955487a3825f053ec382b12977a4b27eff39a67886c5591c994488f839f4d1978d89a3e85fd81e7f9ee5458f16ebd2d5840aa13270b7f3d3e017238dff08f20fbb102e29a229f726c3ca90d05c72b3f6de5f33c8b6a9aa253dadf1ba17cef3ecd0d028d7a12f54fe180a8acf49495ad55b523e917cd1baecafbdb6f75b5d885753f40fdfbedc9452092c0b5546e47c60c1e460f6dc678718bd32b7a7ac88eb2ca483cd8fb88df4e701f585e49c9167f82d258ab7f0a3a3b4d56ef048d49247daf33f26282de0dde14508d3337ead9ecce2ca03fa5cefa8d642981d650db63548da8dd49e511a6b4ae02379bb49cce09a7e7cf2c5d8a922acb4b74875c1b30959d33401851effca33d98baf2de4931233257e8c4f672737f2d88e6690bb1ecff1864864f7ca4b21a8278df2f41ee7a225e5cb72aab2cf6486cf8c806b0f953240701a497ff6d1cc26e5e0b0b881b2c59b2b74cddb02a0313613ba8f17edd63ad6990ba6177deb517d1f2a6a302970786bf2f79c2f67af242485110c6a1e3e9ce9df65c4eb4aad064f7287f016ab8d4ab176ca47573309a381a593b05544f15597ac42f85b6a9cd0d5d93c5eb682892382ce256e00142204a995e9e75e6453252eadca7a555fddb6ec8ff92dd23f058bb2d05c425e6820f1dc349a462f5b499e7a90201fa3549347ad5f6be629e3afa285f36e0fa0c512e51219d0b139e75e699adaac6ef7192517cc3cc38b945283c97e11dfeca702dc05c16c36aef6306b0c20d71ed17d76702491a84c54b7a3e6ef4c0e9a1693a641fc7ce19731ab49fc28a6ff8e564fbf1c329ea456a668f68e90e69554409ea934a2e61454c33b92bbdb2d0d85dd677d71d0d30ba7846e4848586f527038727200a8d094f9bf60cef4064ab351557475c2cfdd09dff82aa9c46b69a5b024ecc4b65f1fc0d8465565ab969df1fcb687bd1491e2c2220455ab69e0ccb5eb4f778a7d888323c61550c90dbf69b51e653aae36fb16f4cce5dba160dd9db0ccb46025a8fe7687a5c8bffdb9ceec938dfe1499e35b97556ac6b614027a494fc972af9c09997b473d4b23696d48873835eaf666160a1e6290d581d50a886905649cd3497cc856c7a6d46ef865180ee0a54263efe8f550775982bb4514aa9b5a3a02bcb7023155fb82d97b616e16405843503a03f4b7c9b59f7360d7024022c412a7a5cff5b36d25699f5d277f69e2d987b04ee50642ca294cb3c401723b3ab5b3df77bbd297dcf6cbdc6bb62338f57f63f820c0db8519c8a313d0116eef0c8ca9f3d7fe731069f79de0d1434763bae2447a8c2e755203e1a36c8faa9954d827c8ac754f5eb92e375ed39a4b73e638d3d24c7861335be4199e91023e040d9491369bc272bcd847d37378441adef7325ad2cb9a0b79a4e0f3243a3824819b368f2c807ab54bbb659ef1470f572e112e4408cc7f9474c9a7016a8bd9f9a1c37dc81ff32c2233422280f33ab87fe23909c0084a6d7e0201e53d8dd4ed98e1f8e1ae79f9df6b417cc30902f94e313e14b864fcccdd88c44572300983921d7c62947236776bf332a168aa895efc4eb4e169f21dd51e3d93387e230b22219b26cdd158a78bb9e7809827600db32369f90f9866b867daf7db46db115b56bad7f9dd1256963e3b818ddd16086cf98b68abca74dba5ced43382b273911621ad843e71cba58f9013b3502a3bdedebd63ac0de15c51d9c2fec02a53d2aba8991625200703e29a6ce5d6991706f869d482ea51af5bf3d6b08b78ea1c4569277587ee53dc5e5b983f94b0419ba673ca99f7b0c2ac95fa6eb10af9eda9f9c359911f024830315e6fd4a3c3825eb06686f55d295fecb6fb6e2f29ea970eee43abf9d9f9e9ae40c4c046857c5dacf250732a1555cd799d9a119115b0166e449be51a1e608bfdce328c9aa7da5ef36030edf6411c84f82fc18f013a1659c7ca38fbcb8e42f0ce170c24f391f3ec9f062d1bfd3d1c10329410364d15ff668ed3c0e0421e79faab94f9fc52995edb8d5a489e8447f5abf19c10a3567fe94e779dc76f92e27f0d5f9bbd623d1bec8c332f1d51d104e57f65cd6ac35851ef343342be57d170a24223b0b42db917a410c9583f79111aeafaa7ca7c72333a9a9fbb4e967eee85a206614a50de35b42ec2dd2898bab7c727c385199516f320a886cdea2ad1cedf13dc96464ed3923f9ceb2e3b85a0aba8cde71ea8891e4bd57674540e8fe0adf3937acfcb465624e1130bc6d8f41f808c14c87339d4bcd48b829642717e95dba282765c60a2e9a9f1fde9e06a2a77fc4c90fba38131e36a0d2163845337aec02b49c9b52af4639167ab888f5d3238070bf66b06a76d5d2228bca34c9ac65457d815b98bae2ccfc85c5357be20771e2f9fd9868d221cc9eb2db6625823cd5a560952f54601ee98b84ae528aff909f3fd0107f463d569628be2146d5fcee33fd182560716244215f1fc67890d0457c9257ddf214fd64c7fa73ef587ff5380d98437d8baff33c28a7c2afbb6ccf76eb60d93b007bf177c02c2387cfca553cca33fcad5874e3a68b59f9ff87adb3dc1c44252b54fb427df8930765fc51f8274d5373972069dfd2e7358730ef6ae88a3c16c0b5a482ad27f18b5122edaeb974a024273ae31fb6f042eadb5985fbb92f97d5bde2608d64cb538001383fc1cf2a986af93643b592ca5f2e5217933ac79f975994f6252d7036442552d58d4eddba4f8be0a3fa26903f06cf873d8a8dad661326cfe036db2849f66563a297e21782f7b337c7f02c28e2f853df5c43ae8cc420d33cd78364b46130a3fc4a5db0ef4f1723b300455aa7eca70575f8909fa784d92ec5380e7698f6517dfd87dd7468b1b1708dbc10803fb200d4b7bfe107182578a3bbd5fb3b2f052014f3902ca88afe8cffbd134f0be93db909e65cb6d2bc816c930280de729abd253cc3e85f3d446ae39a16d0a8708befba817e8a7441e429816e9753336996ae8e521d39f202958a6f38f32e014daeb91f35725875df760969214aa7c8a0d029e74f38d1b056e78fad399ff5d95044bae58db231580da249c6b8799ea4e12b9a6bef89ced704f5cfed1c0753a40f7af373dd14ef8ac60b58e598e8c13c056bcc4d6e74564cb3019bfc0bdf34c99cc510dd0ea9d3ada50a8d2b0a4de7a742eb07f298b8a337c53e6a7d1c2cfe20593199c115d3320a5efdc91703f41cebd3020bd8817d8644a962802a42c5b729c02dc2118981babd83ee46ab52b00503783113b10f687388832ecd88da207331ae6b1b33b20a2c72aa2eea99826e5784a2db991a11d0d165d1883471c19c1889414dedffb44aaca68837365af24e3888de2a5f490000dab0d114169b4095099a3243f92ce6713350700c7b55648c61a9329e6ff8504828469d9e6692e7f783f6afafc0a5d9ec6e1c05cd6884777623327af9967b7ac78cf2f8f0dc1fb21b3a8ed9acf296d2bf306638a16d0da8ab45d36f965360cbd3b1bb6cb2ee3ab8b55beee4337b9222d7a6c25b8f2eb4e3f177572032b4149b56603aeab5293bd8e639263188564848e8fe1b841f2712f5adcc38dc8a0e422b07abfe0f6c7062f4e2924f2c5cb22c7dbe15ebd913181b69ce0485e03dd5a7d280aedb4a088eae16e38bfcd0f2af97eb105a3a8926c2956e93d35e61fac2c8d34823f6a8fb2fb2c94490e6a51de4f80e9632d6d8381d05da0a4289e390af218e83adc8d4d685127f85dad3b960eb57cbe919cb78fe4d72b643383f7f834f893b69e2c031b38b5a3fc5ee4179dea3b87c788c5c9cbb78dbb2dec1f2a24b6c792fc0860695ecb4ece9089a4c4d476f36b4764c61f61a943d0d35b4eae3135b583c861bc4bcfce82ff0ff24e6b616f65c11fc28757967779fcf6f9149308f2b937be6abdf64e84dfa0c0caa1eac8385251848ec89c937ddd7a66cf6a309ae096aac757e664e136b5f5d5f81fbd38dbf6c6de79f1b28058aebf0ae682705f74515dc31722e6c69c67a8b0750fecd455ab07f30c08ef66ee5b3673b6f2af3dcd5e490e614bac47d1ec5752a424b68ca3b278df88a3cab3d578c85d0790349b132b8b00f30cd6c36864e0c4e71b87514aa3595d40c5b475068fd9eb8565e6561029bfdd1523eca62df641f6fdb0f0e40c9f871cf845953fe1b61cc727664349d81336a2596eefd46cecf6d40697fc6c82809f8b6b56b4b5b3ba8e328719cc3ea0a5ee1a3701f65c0c65d2063faf685eae7c71fe081efb35a59def33e9afa1f8380c87aa33ed0829924329f130df7252654d0d9b8e9659cd776b79450c6347fa85feb8a0677e95a9727d2dfbad0928cc708b396e1daef0bb78f77ced4a70f5d1c00e877bbe6509e585ba857c4a5eb9f1bc7814a1dfe2a649232e325ab10318a12a411e32d093277b065a9592a36eb13c544a495be2a29c7c7d70a86d68946da95ac42071b684de93ff74dc526d52e7c934926d3a4716b4b32e9fabd87c3ab3a293f6a43a27636755d7b5cb2d2934abbcfc8ea0f53adf55dcd0e5f2fdf267a347fb593a4367cffd97c20ab407eab3d3d12f9e4a7d1a92a5022623d83be3927b2cb5fbd2d56dc8e5c0ea8bd542f08a57307ed76eccef2f16642e7907daef1a42d6f749f102cbf5774d346318e982bdba52eb2345b86cce00af82d6a70bbd1b3a43871efc37d00dbfe78c37c1471692180f3593481770c7dcc68ed98575b4bde227e679aa84b511b0ef9595c18da1740688e5d3e086c2b03837a0b7a739717254765ef0f00013b7cb8f981d3f6460400f518d8fdcc3995996b35c9dd9580dac17d8c60343586304464dedd87359618064c9cd0752603825af96da06b5a612a9119d04f6fd3a7ca59966a46e3249751b814d404d48949d007e5d35ef1cffedee0b120e78c97464b7b545ae5917c6cc286a937bc8a33f94ff635fea2274c404075b1f49d172fae9f8d5d514dd6c8f97dfb77f9dff377e63ccdb08a25513f7ee0e6da013f6d69a7d2e8461b35987c0873f643b980dc127f8b0ecf2a27731e574da9d554091123bd57575852dd7981a98c978ed7186369152647066443a348181bfde2652cfa70627a12b7cdebcd64096563f8810a47e5efe85aa4020fdcd4c9201f8a42e6a11492b029e2acfa4ed5ca3dc5673a47227dbdc9021ba3bf39ee2624947a755e43ed73d624b1082cfb82f1bbd594e16add601ef7088bae80a6a316337393c720e97c32e2e20efc6c8174775a10d5b9c3d0798f4ff5ef0a8f83e3105d0847f8ea5d58804023cdb57b0b540c0c332a9cafff7e3492197ffd6204da17f1df815cef42a8a566c703217f9d28c5fae7daf127558e8f0e08085a7ae1dda4b7ce6eacc8d06ce6021d8f73697d990f3c11a5f7e39b53c2a1d88f4712e6ece4eb54ff1827a1022c42734cbe1cd6f7cedd9e5e2db61a0b5b1b313414b7f42ee4a3c6d109935f31e83064e5cea9d480bb8945476434ab765681b5b53fee944ed6e69d84f3e3da46d3495dc2696b1dd16eda4aa674d9bdd9a97f8d17ad8c6867e0bfcbb9b49a8b25c2cab41177022d5b722ac44ea6c3f3e6ee77a697073c77645790a06e7b4ba5a4ed14fbb277d8bcb730f4f2a613f9878ef1cded53bc963c077383ea4872b0049ea25093cd781fcf5972459f3ce6b878bea9ee5294d7843753f2d3bf135f1c05712c07d13996ff0b75133f1fbfdedb48ab109a1259d50057cf623b78800673297771dc36942606d27116d83cb0a4a2344d7d1942a82e403be9b4fefdb4c9570673662aa5879b7e47d4e9f0713615b815c2b5f11d180e98fcd478942adebee1c9111e02c6e99115189764544f1586c2ff46cb752c3f4b9f7dc3e61ba68c90fb280251a5ca572f1cc0eab1519be6648538b80b1acb278131584b938b1e31d245d91364b81bded40ca8641c52044097b1fc431baf19a807610c5615c9218f44781a9a05204c1e8221abdad089aafb65615e0aef910508338b0e85b8e38715f39e63e049e2a27ca9f521dd89098a49d5ca0f24961d2510c488466531321c62a87a2ca47922d07e90778c5038da704ca84e4eddadb77040d2af640a1f47608472ffd1a7731de70c7baf2ab0e914e88853f91090dd0a65bb18e0736ea594c65087436072a8a529da788dc81f12c6edf25482d2cbd18605d8556e5c108c42fb8ac7800a48fd51fbfd2b5773146a59d3f5d3f1f959f06f67b711fef63ce75b26995db38f23c50cfd9f98f1864214fc32fe355080e3d08c223779f23575b04083fc55985221962d1e5416791a4b57b962780d5c9f9987d37f926022c6d82d3150c7adebdb45c64682248aff820dcbebac14a9af958c1169618cef216921ebf00c736ca91f5f4ba3337d51d4528b41a2d2b1b878bb67c11b960d7c436213c25da85b77b5a0d8cbb8d4acf721b980b95f1195317870f1584d909be02d465007212fef31121796c41385e6e60ce2abd24d77f5e7b5fed7dd140a203a2851d7aa4dc88cb63c6304a89f5e190a81fbc2f7efa9c3460a5a8203ff32eb01cfc5363efd6b5040fdc97630aefd47a6811418e6c75f477727e3b043459123b7132a305593a7d21f1ca17a5f6627601cd494c8dfd6e173565857d2ebd5aa6f5e840a42333df5d2ef7f0ab09f1804fd10f3bd729e31778df9474b511df35bf596e72e864c9d22779d9c40c5f0d0a3a16ce7da7c19f076fb9cba35437329fbc4e4f3901ae000412bbabf24ed48de172b55a69a2ff5edbaaa8d782dee0ec78487d6bcec65086fb6b9e272717ff072d45f2c00d7a28398e50a8bfb05c0de1ddacc3541640ba6c1f11f5d37c6c4dd753516325b6d2c7c8b5310e0c4184bece5202ae54d016c040473599661cb8529a082079d23cbb46270828a5280abca4dea342333b39e611de669e651b65c8ad3a81ba8136d6469732ff0a32eb2fb293c5c8aaaa8112e04369e78c9ce57a2e1d84348623e60e13fca912f3ea6ecc582fdebbd7cefe1c41d81c15c8efc824c9283780fdb2dade2cd9a83bc5830604d00a78e2fa09496dfd93b1e9fce3e3bc204d04e0b772889663420095b9fff568dfac5fa5f7bfafe88002ea06aa7c77d87dbe697d3602bc8511198e4a52643dd0633b8474e734057c1418c3fc3694f26507b2646d97d2977df1a71a8bf4f365c941b6074a73df42b2b6f380397fbcf9fa146d855ed7bd60a5eb8c8378835907f5bd529eb6c45a65f43aad1683bab4ef3f40dae4dacb181445677eac1aac7af046e378430ae1885be0f9f970a36fd3a044e0c0e3714b8449aff98b1dda19188c633b3a4ce580625232ac81688cd64d85dade7a564ecadcb941f67a7eb9dd74f831a2b7527f3362f8931e141a33e7c06b7b545192254853c8532cdb9f7808b6251c331a19d093674f676d48046fe81d47024e82633c4d1c674202eb1645606e15692f090689003c12c13162d5b11c9e4dd867504f64b6656ed3ad82186b36e69344d0541ff3f11f32b39cda2c47f0f89a21f1662c030cf7e0844d66dc10deb66d10f4fcdc7e4f5959b7eb5995f1945517aa7ab75c3fea6ecad530cfaa0ad294185a0ef3ecf8096afb145e628ef5e4396681383ff2f4ea2ae952460d71809cc757f4445433a70172d01f43ce944ed79c84483955c09500106435de6464b5fee928022e9de005b01984dc3e399675f323bd7c06f51bdd1f796212abac02644fe78096bdc8131070392e2f2346e5933877383202210f0afdcc31e57573f11837c4383c2f57fe5242d41feeacb77b043bf8efef35d6fd196893b9277c185ce3cad9b7b20d9b89bbca04c9bba4378920c925f1ebabea003ccb64c8918b36c72a99e16dfe434f080f40ed54c6927fac3c2a79835da8698f950b63e9b0b2856120d7b41791e0bf653e82fe956f348bd6a9f7b9eeeb5da771546c42ef128a2bdb8ff7b4840e74603370fcf494207a58b36386bd6f9bd72d55ae59e64396b5b8135ea35e98edd13e1f96cc39d2c7a7c54ebcbfab239c8dc3b9f5b9c13061be1823f134687c7e41206620b87a7ef403014d345fb4d9183a310bb2b2a694b34a396e267dc5e7fa8f9f4cab1e436329343a4b2f2c6874117b18df1356f02614cade78a19cb52c1af1af005a0025c5588d048028432aa79732675e5992e01e7aef4c21142d68433535fa58c87f54870325b84dcf451b1b98c875a3f8dfccc6a2e1f940ca3eddd25985246bc33bfc4319dbc4d6c53e8871d20b716406a8c070f169dc006cb39ed9f1571f66c391104f2507f996389d96ecdb0ecd3cb369787c29a0a5d997df66b24839d7dd1e8a79d19e506cbc0836359c78d65f61769757c0adf7729e731dd68717faa697578bd2310ce12ff42b287a7a141035ee3019c524267a23f8474a7fcf0237d6c5c6f689f40fd0dac94470ea6b8a8075f330eec82bc21c0dcf31c52bd29bd98ad6c943b722e526976467edb73f48de1bf97faf6ec88f832263a4