安全研究
CVE-2023-51766 SMTP Smuggling:把伪造邮件偷渡过 SPF 与 DMARC
Thinking
2023-12-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#网络攻击#邮件安全
出站 SMTP 把 <LF>.<CR><LF> 当成普通正文放行,入站 SMTP 却把它当作 DATA 结束符——这一对解释差异让攻击者能把任意 SMTP 命令偷渡进收件方,绕过 SPF/DKIM/DMARC,伪造 gmx.net、web.de、Exchange Online 等域名发信。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9247680ce8d2c6e0cc05eab1af9b0031333932f15c7c0641edfefaf26a555542c0c5e5fb102a39884479611146b53b0025cd8a559b2329b9c2746ad3fa0b58da85b8eb2cf57d883b3a892efc869f5826367d593b74609eb40af4236fc3ba6c2dc95a52ffb12b538af51403a645a5a759c13750f59b5b883a06cbdb325a28a2f2eb29dc04d078872c6e4ce66a14bb893caf8b526b2d094f47e0ad4ac39edc5a6e014eccd707e855db3f37ba0c0fca6b6f6f5e33c702545208a7278609dc25b0177ea6c6d845bb3ccfe2897de5e3cd7795c24dd5d12f9474577df7fb96c8d8116056fe0b87b36a91966cc51b562d318ea1c03c7ca27f56aec67737b4c2e3f783843727d080662797afa82c421789ba0e320e8d062e4d76d50f03cf8262f63b2a1f1a510ac0c29eb9afe75ec162eef6d56cec88b9d4e44c7446825ba877f70a622a29788292b3eb9a2ec68187e1787edecda99ab124c21f8fa7f87252a0fb1f0bd86b9ee7f4e150074a35bd85c2f858fd79a68a09624cc9bcb929a7004d386dc05082802d6b99cf6e1ad8c57a17da8101116fe4acbed0f721bf0c9de8f3229a83036c66e00cae6fe67955f8ae646c50891ae880c9d840027740cc586eb82db575d79825ee837ccfe48d08812d55fa403c8d0ba1bec7a6431e9b5e2ae78f1b2ac2f447de06a5bd91b1b39ea010b0e7398d44eb9783b6962051e72222a45390573f3230bc1e75ae8e23921d3fbecf96bdfca36c47bb45ff587acf35eefdca9d85ffcee1e281f5088736b04138e77381f9dff5d96da3aec2e01f122c1f5897905784224d42d6e484062aec33577a35a83ccb284420c023473de24bcf85bd46f12acf243483ba2aa06656443e253bb66fedf9e9d0c2cec5f1d11cb1f7783fd76c94c1f1d5ccff9571f61a15dbe8df44fb0bd9f8a34792e542431f15e4f2e2464583fc3958d7b178a190821551c673ee79cff924dfadee2ed541cdff6bd7cebdb5558a5e9ba8f1140df427adf436eac736b75f33d1ec8369cc6b2e9b2e541843c1189362bf5ee091c8dd1cb5a68649c1c19678aaefbf3606d70e560c475c2eca5a666d4a837795a88670b03c9f8170df191d9542a62c2d067717934e7a55599ce32f158547e34118b1ddff15144d2f4c3814c07dcfe0a6d263854a780db3fb23f3719f7fb0a6688f00803331f655d6b304e4e197b4156da3f9988312897bf961fb91dfe1c6bd6513a9f4499f881feea4a517cc9e4b30993c225d7f846a4de9a63ba45aaf9e2dbb9e8b80902938403f603bfb4cace4adcfcfa4a733f96409a0f5e846fe929edeed8cff42923589d66f483d77c3d01387720369897e777ffc42fe61cc64cf7c466d1a8fdfa324182a32e7660c3acf9f8a7ffdf46b62d38cb924663bf7e0da4e94772076f2569cf9cdae2bc6c99cd162784ba201b3596759a7ac2de622edfa14ffcbcc37fa2c1d1f5691cb4ba6b5aaf0c5449f3c00915a9ee5acb0ec2f5020693d77848cf6cd63fd0849f1c935f4cc39cd7d4bf1a3b3b979be340652875094fda5e808b4b6094e8a3872b626bb211662add733deb47bf48ad6cecea568e5cc1c4d62a4e5f985f5c6cd8e011488b78705e660eb66cdb96796fe67aa933215a40dfca72e4d95c44f9e929924dc91e12953f814c5ca5631c4f8a845c694463166878ac286d2adc0fe716ad4f31dbf3fa141b360bda93d6b6df60d0baa42b2cb55f77a3c5081bae889f9615662552f6305217c5920c30a87110b9fcfc4fe7575bf4e4b1548d496ca462baed2f9b67560f05d3fdca0cfd6250415a6c5a61d1b25e6479bb5c20196a62f3b7a94b3469692bd8519a7a43ea74f1ff45510453ad21ded49a138f8a3476dcc89685240aaa6c8a90d2d1e8b25a0999219ec7644deed316b16498e4996cefbe17904bb860f54033269e3066e2cd8fea58c081061c1ae4f88fe2be9165953589225cc090046ecc4279a56e95e69f6b3112ed03b9a8b0a57b17defdd43f044a6819611d22d58c5213369c79475be261ba88a8b260cef64407d0f556a888ec81449dc7a597d2e5faf92a1055c292ef70bd363250434b5b6baccbf82ced9839b8bf46a177d1ec7d0bc61aa1c14548563c38be34324b009020d6e611f9a9da6098b5ce30b387470e2b46fcbf587e416e335c0ddb77fd721ecc9ecb62d421eacdb6fa32a83d767ad909ac615acf919bf6b86f8747e79d5536a49c680c5a4ac0b7e2c96da3faf649434f6bb89f623b9fd37f3cc77413f60eb0d8d3a7bbef778b93ef7af319de2830038865cb5c729a97f782cc444e98a01040be48e6ba9531f6605c4c3dd08dd861d71116101bce7e7063844c9c45345a39d6ebb1464285fb95acd841611c06018378db2edf3686d6ae049471e4324041d476e58f2c6d469ad08377f552477964378a74a1316f16892b130e01e25ec8616d09f8c8b25c974e4e73af03774d7ab9be4d2f99203f88714427d2a7d1a1d52e479a46cc00e262c59b8317b855997f98acf9349c7d0a35be1e37c32e8ad4fa3570b1a171868c9e89091717e900dd5978d1605d5e643462ffd4e7c47beff56170c5ec6f94845a4ff48777c013d94d513c8a83cafe84e9f1a2917cf37d502b5c2cb18c617de970ed4994c97cce487edd0a071d4703eaa47b119c944ebe6d564717d0e6cae7e07a33470108d289196f2ca1e31d82577c43c278c12ab0ce8df59dd778c1e144398d44b65c5ff5cfac7bb1aac204b0a01f1d245d810245f308900cbf9b370058d4b0e3f53051e954df797f05aa0667ee0b2e1570adf43d5f33d41757ae28344fec628b37aa7fe85b43e84fbae55a90aae956f836132ad6301096ea66a69e2f4815af4c8f2292389fe76346f601ce1828d2531463d8cefd7eeaf04b858e7d3ca05e71ea6d78f0cee6cb8bed4c3a941ed27c65edd10e3080c3ca80a6d22c5b46fd347c3971ed0d63f621805892407ded543e4ebf8f02228b1a40214e577b4d45471019a97a5195320cde436a87d77df95fa353dc963ebff5d1953e2d30154dbb146d15c1edce033bdf86708a6c8fd59204e721c82c5c85a1625c8ccbc22d7bd742e6236208836b123e357fee8a973a2190d9fc681c9002ad1878383def97358319abd5f1d4501794d45de1aa9dc4716b994431d9ea44029b0d64444fd28197ba1c3a7019a14b6e01db58658ca9f83614c3f108f31ea27847371ff035ae71526017b49a1612d7386e7326914b5cdec1c28f7dda7cb17a664beebf11e193ec3880217edd80a9ac1a054e31ee3ad99b6ab0244aae03ddae8f0599d9c5c7acba89e4c08600bf9e796b8ecd402c34242a326a33deeef0b2a7e25f1e6f86c285709f701b52b80780eb923deebfeab0a93552606b439e49900d486d91034204924f9bd66c6cba8b24384f9f8579d846480b15eb14d4de29ae4f9108f340d1a124cef63f11751ec6e9ea08b70e3056e555985d610780dcdba17cdf830fd44588fb796cb66da1efed9c3836c4f8c41c436d6c89ba9b19fa9241e62c7143173466c465837881fd61279559f9c4d1005b0717380693d531fc26c8b558703962657b1bf6b705c9ae39a8537703d9a4fa2527efba7a771c17a895a663094b5ef3c9dd95ab014509672d9129d364928a9a9146696f66bbb9363e3124d4623423771823e20f716335307e1da8788a98dfa431022e157d6cacde6cfdadb3f9ce69d73b9dc09f2498ee7a1df96dfc7948fbfa38d2671dc592a3babd54ebf0f0326c12dcf8b4970349f7852208f0ee6029039975a55c0f6228e417b930953e4ace4407f489edb98ba59231ec91319f4d3527b5a62c6a1f735a2295b317fa0cb9e9767621847683e5320a42a39c186dcf96c968e0b4fa1ca3b4b4c3a35bfb33335fc8545e518550ae2f2affa724bc3cdd303224b010e3d18f5feae42018280b5904804723427c71c1d1194451b5f4b205ab1ed1f2540fdc7ee6c8db524e804f5efe21166f99990547194faf3f63190048468c196d171a629949fbf3419df16fd09440e2c9a76a123915a38fc1dc7e26229c6e4988ff0089ef45cb93d87b3bd7c3cebc04276a7e0876a8e4dfb42f727194e354e7c78042809e8b0269b4a26f536a1f651355143e7bcdaccafb2e8b15c0cf01a9f33b6ae9815707cf94e18d69465da63fecf656923da8dea1519bbc35a37381e0c557ac56960f82b69176a8a393eba2a1be9289a06c52375f84e4cd9998ce6e9dc8dd6ef5d0db702b618d0c79d79b33791cad37e45cb4ac61550aa44831c737155f7f042c173acd107bf59dd817c46324030ece6db1eb6e70231896fc593afa088f1ee5abe671ef12cf52307d15be8c33160dd5f8363b6555e2db547675f642023c4003c199d21e7c7584f6040ac8c699351e6c06ab4494919e9091e278e1b40caca1788e6394f5a4ddc1c090a1cd911909cf67b51b55870f4a9c0d91e23a7934e51954415246032d3cc5034a724042f641dbb0416d767e4608258ecd69faa1603f7d99eee3c36233110039d33567e85b05375ad81c19cfd8e405b9767e25e1a2be310d2952d4c2f196728ac96ba509236dfab7765e024ab2585f24ad874c6e93dc05dac94af57416cf5f5f5ee5330098edf7b8708ff7f2b2235209ce6372982f124287ab702e98e25ccde2d8e70be5a534f4cb0d9d81eeab4a34bbbe0e4bc9761d63560c11b2929873d4d392b4026130c57037984be058d284b27552fdf3f375fae938805c6ea86e404e11353a15385f64c7aca06c57b51e64ec4f2f653a6abd965db05560b652849284abf21eb2c419ff629316057318db03674739bda6708e2d90618c7f22aa9dc6d73757ac959d5d87c34f522415382390a0daacdd82c5a2d84c4dbca7dd061dc5cfac3c88290adfb092555a116d6bf2c621da2f511105d0bc58c78b78bf12b337c9933540809d83f1c0261dbfd116f61b02cddc2e2ee4ab14377cfb53e9b6fe1abd2044946ebff80e46c8ebf605d619c16c24b1e6776d032adc0a40988698c4652dd6d014461a2ab4c814ec4f30f27b931179b6748361f315f2ed6d49ae590e8ffe68aa72f4a88da5a40b5285b821b3fd4d64d93d99ffc2221ecd15a9adb83435867a67feddabdf8692e7f3a7fbd96c545e4474f11873dff125adbaef812e5e20e45f14a33e31b7e40263b067333d93b1552f8cc2ab40dab79cc689d535da44abfc063434effb29363d11f0f64fb70557f95ce6bf40955ee262f5f8cd10fe7fee650022989948fbede55a40aee13668f0270fa6da6c15512522117d831f758b74c39e4770e6e1fad4bc5aa971099263f08bebc9cbafa58a63beeb2d7288f79dc9c6032a2758cf62027c77f69e1d4cde46a8839d73ec6f0c146970bba60f127684a9d84d49c4c1435f81f88b405a456609b8d654afaa3d0a7762141f5626abf7d594a86d39e8271fa119ee9eb3b3eff2110576b4b8fb96ee5340420ef1aa325bc8335d2819effed9c1727b1bf26a3c75772e470db571cfc9b93328a86146094c50809675865e218328d723217fcb735d59ec16393c84959e7c24ab0205f3a7d4e70d25a376f9a3779470db8152120e9001240a5e48a2f820c1531b9eb581d0c028e6413997bec6e0196bfb5d22a0354fba49b394c4f10177e393561f7f8896422831f7b6e8cde29662ca61d0f269b93b9312368df8d681dda7a99546b532f034788abf504a2b51448c3b817ffc4d214b24e39cbb259974d7dd408388e597ec880af535652d0329007732d4f6ff4f6d3451f1a8ba6f397c01b962e5faf3a8f048eeefef137de5252dc64b132520a658c95c9ca578a24cf577bc6b971de1b76fffb78ee5e4cf6e8576648e01017c753443acd9cb4acee1108a52b801e9320e4ef655dbb69f270c144c8ea41fd3df6f572656471ed69324206392485a0e5ee62b309c6f96ec5a08ec8c0f6c76dd279e651f7e036f24e551f27f919a535f214bacff77695651a3aefab3ab3412e9376c3cf9d433ea271009f321d1290d331cfb5fe5ace4fcaf000dad19f6de20f2687bae5b37a120120b4e4e716d76bb50cf30082e0039c26dcf9cf2f2bdb48f115f1f078620ae043fcdd892646f58a8c0cc6e74c463a3626f01180733fc5133800794b0f8d827071947d928ad1a40d97e9114959bb11a17e78c94767434b349611612fe56a5f91f609ed71211da0444e8bdcc924820d0fbe9a92bd39b252e1eca521a03ed28122b821b3688fc7181dcfc9916fc280f0d6790f7bc027e232952e660a74954948e310f9b5c342d2cf92b81ca69b09a122e8507589a88b15a2eaaab99022e5851486bf522d82da1018f0a93a679b8c73081498463aa0e2cb7bf682ce6478126aa423d4e4ba6e9a3dd3f727e3b9599a307996ba5d5bc043a2d338962f1af4c37a130403d5bce424ce1d0359e1af14331326fb4c5d909cb9d530b91a825d0e3323bafc421527268e65b0bcba6599ea0d2f8677e1e081fa6344d96b7ba4fd186101479c06607ea50f4fd673a084c477eb9d2ee2fa3cd91635060aeffbadba5a9e0eff6bb7cea79a381af1cb7eae0e1a44590f861273956d2fe64f2781abe02035aa2b5e9d79f17b143da005a076a2a58b40a0c81348555ea4e5bea063997c59a6db4fadea6672a074dfbda3211a947e70d6ce43c09070cd77754a0b19811b7a87b1589084a6446fa35f35653ca65ffb2cb451baa6d7bdbe897a7b2cf6d34cfb40d0e5fdf227aac037da65cf87e97606623c8553c18ed09362ad207639945eff98a748e709e5d4d09da4f46008fbbd6032e8e2e20e779635fa573589199abb4f8138e5030b1d9398bdb3293dbbaa7b54eb777e94cc8b48bfb5a04c2f7b0918e78760e654afddeac8ce52beefc6c82f37a684baa8ce0ff1fe43ee9f8cfdd94b06d82ca4f98874ebf8cbf1bf53884e2186ce82c25265e1ac8d3ccf61fb0c9035b5fe5518b55ba16274ed3097a5e490441d6af81a8f8a096f648fece06fd11af9180f9ae27081cbf95b3750e6991d0e7d4117a2f2f4b0c542c9f3075ae54df7e56b82d63ba84f81a3b0b21468a9cb7c4f29e39b4f4626fbffbbffe44f95703d243997eb1ac1737950a2993a53e58911e9b04c3548d90ec004fe0fa7fdac48c87139a8c5e578d2dbf5bfd86ef5243323209830e7718450a5480277b416b2e5b932ae7fd2e8c3acba4e269a47e0735d93a8c97b98348e5269fcd07ff757f40d66373ea586cb92bbabdabd4d67afeab2fd69464ecae727946f071ed206a0917d1ea629450aa1e4de8e441b383d27a3fe2d350563826ba858ca5038042d971a55cfaee4f03d09b628adefa4a46375354f8a0cf160cdb3d1149addbc35d566e09e873b56b995ec360acc39807903c665922f5bd4bc1d43e2f5965a56240ebb94a693dfe41d51b366c3338a5f98e41f4b271c2111167a736330b5c69ec11ed7e9d84fde9532a8e957c32018ab776e7746359fc4654bb6428d6305bdc11bebf5131cadf7125a90ca57cddffd6ec6b8096e26178c207f63e5b37558bd0d47c6656aaa65150d555ba858466802b4ab9556f23c1c99fa4f95df5b6de78165d8c314f379e3c6fd849848138cc14e0a9a091caef314c36eee3ddb9449f817e28d5be0114a595f3cd8b087d9f821fde40e6d5bed660ce9b75929b79324e6c3871f9de277f9a8f839d54cbce417e2d3264a38b7de4a17cc73f8948fbfb22a4a5e880861f2f2bf51151c608d590b2b21a4986317e1d8b1128bbeb2ae3b19646ece42073fc2f63383828e1eefe5c615d283c5cafb8e7249bd82a78a014407e71de681cdc29e1c0c6bebe47eb3c6150cfdf93d8f1e324b87afca3eddc0867433567f2cf88248088840af89c62acab93e45a1d17d7145b2511e5b6a9857e18a7ed357b020bcb5ac817760b1ca5a6c634b38c88348f07eb4ffc4a7e44086afd12e9cedcf818f41f20f8e639b3b0f7266d0bd20addb0de35da1ad203a28496ee0ad75baa17d74ef8744d556c5744578ebc8b35335eb3291e257291869fc1583521ad6bfc506ff458475a732a6a28481ec37ed2c4e16e34c6b2026c7e01d523a4ecb9f1939f79fccdaacd6eadbf0dd53a1f8b9e70c29c057344c60e8613122d5aa93384a7fec0e119c31000923cf6bc062863e4039d0579a357d1bd8d24f4816f5c71640614b5d9b90519703a599014f0d61bc3bc4a582c7875e721ef58f0422d5659f7f940bff4c5bbb07d0553d72b78815f03bba1e0e886803c11d7bd5fd7096ed6b23070e163907cc3d11366f0032171a8f8a43499d295dabde30c8e435e8de51361e3d8a2b863d5cc2a015509c94c999d3662c2022d890ca84e8097275ad3878a4f9c5f4ca24c1e21f1f76307d196b0dc2ab3390ee6237182f60524fe3984380f33393916838c07f14c913bdead49e2021745518f1f30a65938c0bc68d8cfae02f1a877baa7de9f254debecb5f98921dcc440807c360490e9d973b3c2ef6aceb749fe871ec9b81ae99252fb277147a200733454cc73cbe405c80434900d19c73f9e2c1b6c4d47f9ebd140cdd5939caabfce8f56767a577c577ed5e9322968a3f42327974eb1317058c782c32bb364b716ef663f40e652b2719ecb7d4c7214ea9ecf0b393196df246f8bf81a46694a952dab5fec7f4f522cdf3efa8187b749fea976fc7f5e5b8995192a36bbf8b82ce48049a56ab790194577543d1155e85ec6ce9b4d5fe100f6b2ea8790fd7da5e6bc1969b3643a0322e0e5ec98a3402022a5deee267012057665ff2fb83360483d6105e358b3b3722d5d38b6b4c4b167c077a3b34215ee1ee3d074cce94d7e60907aadd53e2c9ee6d286098d2a5c504e72d83701eef5e177eb1825bfcf80a5a4d45d16c2850814c807810e789dfaeca58a0023fb9764c716117dda68954454435ad235c4e78615ac1ea87727b2e748ac5a838b2adc90cb01bdcce3380285a3f9a101a967589133cc28693ea8b09cf8e1b18d2487e50906066c700465a4cc286e31d6cdfa91d9e9357393815802e0c25d3b1d06764e02c4cb99c3da1593b3439af10b44e852d5884c171d635a0f0eeb9a7342748c27d6f7004a2e2e4de0d29f4efcf25fa519a316ebb47163a38f6afa22711f4b46804c03000aec9f1ebbf5b129aa72f1e1425b5f25ac3a30eab842ab5117c5c32f7cc02de4be2281b72110bc333cdf1f465f1646cc3ee6caffffd51415f33653473db9015df1ed8e5f20f834a6c2733bdfee379f287627a5a13f8325fc4f410ff6d9b918e22dab306c6c006eaa8d0ffc2638156589715ca1f4a075a50e465ffbec5277bf69b605ecd6aab5e69eb3543923d35227a3bf7a66b625629da4864b8a43219c4fab1e57fb98ac50623403aa1a8a2f33df8b9da8f1824cef4a5716dc5b049c8857f3cb2a573dc13acd23163bacc99a0bd333fd5097becec3470557e18866ef0d299885c86ce055324bad84f4aabda3ebc199435083ffa94e591de4cfe031efff3ff8b0034119917b4077d0a08f132e900b43320fd6d8b446b23748bb4f47b974700e621ba4a3731513dbb36581cc7af62479b55be59fad95b7451901c27ecb34ffe2df26651501536c29cd10dc88536027408a079fb23f28bd535d5f7549dff8e8fe5df6adf473338ac6e772993cb2011fa3ebb635fcb555085db98d77407b2476dc127d6076fb81c7ddb744b4d7a8d87cb111960ed0e4e9156edfe774149888c9a502f4ba8adcba0f8208a13d319c432660c135729ac845d2f4ce3cb5e2fa33db4d100b13015da776587baece236ae12fa1b15d2ca7560d5d60dbf6a442a67ea5b86a44bf676c35b638a3076d5650bfee815a8874f90afd8f42129e69187761ae72fd6adb2850cc64f42fa7a8c27f17e4b8db06d9848c19040632c50b7cdebae15564607d0fa8dd8acebbf46c1cc404c293baa370b8ae42ed2874d5dd1c702d7a565f4763f06acedd88e531b9364ed185b974a29728e1c7baa6aec3bc0a18adc1f784a89fbd1bcea34b98e901b2e362d85a2f643b963e6adcf8132d934288e9e0029a8189ff64aaf2d78cd036812518695da53dc216488b4e0d98704a52e10220a52ad05aea72201970b13063ba7bc810f78f3354d673ae78148b931007becdbecc1e716afc8e5b3420d7ca22adf01268559d3f04a0b3ed4284935291aebea8fce720f91a7f453cc2c862e98b09a166a44d2879892ed3f17fd81831984875b9491fe4acfb0f5f9325b9ae5a8c347f1aad38998d6aefee2e20d3e51609243b3fe60630dad0568dd0a703bacbd1fa4eec002216ba11f2fc66dc88f569e7a76ea0d4b7a1357eced0bfa25db34f7892e93f05fb056f4c9b6dc9a0f1a906d8508ed1b02bf9991169db585d82e247dda4b94d4a163576c470ba8ec2e0f1d10e4c9cabb1a1b175dab2c3239b5728c77aa7147ed690515c0f960c133f9ffee12035c6e4afc24547b450bafaf920ec53e118980400c36494a44736131397abbcd639b527a988f9bde6598ea10983f2b3de82cb25c925db94861a7f9b8905556efa0ec21a20126d38b6bf22c8e1df9a0339fcd68f31394b9ce4c5c8d27339b72d4d383c891e2fbf1bae389b2226962cfb36d56fb41b6f7810124247dc6f83ed6781e8d5a1657f21b4c6fe4cba059cd01d1cfea1e4ee93c30b3165ca279e9b52985056db96f47e8de176bd279025f931c6b0ca372aefa7b99ad49d87e7bd54cf228b1384bbf19d06fa35dd13ea4a18d4ac332f0c28b500b1d14d7f124c6cc07db2b30c58e3ab6377dc927cb7658a719be871063d9fc9215da0fe085ee6d9dfdb67e4813d39727a3d17365b0f75747d30e3adbca4d33e14fe35398ef6de6fcaa04970a2e9a49174f28e59de493d2c957fb2ff0ed1c5353761fe733cac5bf7f753dc2285992715b35bde0bd83691aeff3c8f0c03c0e43e18c889d488fdcb488a5b4d7beaa9792b22a7ccbc714dd9a6d46586ce91927d4c0fcf4c41778b79d7ac047cb8036c5e0c111f0924a283b5e6214fbe517f8f41b2febb63efc4cd4a028f8ec5b42bca2e7a4d9897365e661adfdde72fa7de52b792f5c98d5e9ba7e2cd55151e07f406170658c1e79d96a20cbb3dc185226617a2f6e544c247ece9ae01af7bbde2f9c035d6df31140a35e4a3f293469d1fbc1aafefe75374bd65691bfb21db42ca73a8ee7af861054b28210f5d923afafe39590d2d98bedf2ab36ee269c892795dfe73018c4d88de1ae1dd7a8d386f927833eed08240e70608b3b132124fbd1f41ff0d6d92f6369987466ff5adee1213731d00644345aa91e2264cbc1e4b85d2f00f261c01ac0b5cca594f3276441ef71e862c8df0209479bab1bffd410af1d98c01142350b4307ea46fb3b49bedbddc077cde703a9acc0e8c83563707f61468ac6523638d24d05ea8d1b812d16d78634090f45d0b3fd6980da568398c6b63236dfe24868f0d51c57c7f5798917cdd769a1474231bdcc5257f4026d8978bbdfc2b48ca6e77dc208ed7d2170bf303682eb935cc3935a33e4b10a3c268a03261789313c88a2c8abbdfef284f9dd2c7500ca47e12976a4b08b4df9b10171ead61a2bd7c159e788d693da5b0fa891505c7f9d9c707ea15957403c6dfa749a7db4f2dccf56787a2