安全研究
CVE-2025-56386 Notepad++ DLL 劫持:v8.8.3 的 DLL 搜索顺序与 CWD 的致命组合
Thinking
2025-04-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#恶意软件
Notepad++ 加载 DLL 时使用 Windows 默认的搜索顺序(含 CWD),但没有用 SetDefaultDllDirectories + LOAD_LIBRARY_SEARCH 限制——攻击者把恶意 DLL 放在用户打开的恶意文档所在目录,Notepad++ 启动时优先加载 CWD 的同名 DLL,RCE 在用户权限下完成。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9227680c989226e0cc05eab1af2a71e1b63d4274ad7c02608c8e0af24a555542c0c495ea972666142d47df79ebeb23196248b963345fa2b4f859b04b1a49e96c667b783efd90020dfc52f4a21ee2650f7f489ee88f967ca618611b918de0f2b3316d2075a00a435a35f592e2193ae8318d4bf8d2c8d112350ba7bdf3f1e4bf7f860703c8eda73a6544a47823128a9e2e9ac6b8d6d41122bdda53e3db568c4a6ef17caff735abe5b8fe072b1effcac9bf8d1de3345018acf63eebc891e268b8aa8372044b85bac897bd6724999da41e42645ed24a235265d79bedc5db3225edba3911f05a8e70acbb1629a24a7bd3a92790e94af169a22cd2a3f75067327186078161f139dcabf885e2d1384b64b6621c44d3cc2e5fe7a51db33f11b15628dbbfc8a1b69cff48df1f6748da3f74b6d60e8c780b24663e545691abcbb5372bd1da1a28e2a3120ba82e1653d7a1589c5efee94a8046621f8fa7ea301291bb3f3a490b9ea684b023417bb67ff196acad8130dc4a1ba2dc099cc575186d62014bd0565200d6171225e4f4e23e96072bf6608d601fc605eeeafc3776e6c763734a9e58032e3ce7f0a57e05dde2622c1518a7c57528b5a0ad686f4e02610082e10a2b72aa669a0188b926585b058a86ff22284eed11fa875172b9cba81b410e293a5470850bb51cb64bb5573fd0d1c421ad0d900f62c7e782100156170341fb6c5da75c0e0552fe32e2bea6e99f2ada409d28479903eb91db9d4abf10af1b5e5990caff31c7a5a1f8521390417c26a2456daa05b8ad12ffb231dfe72ebf98539493f4c35832f6480cfdc657d502c838e2e2741f4242a78443edee024565bb70767dedd63705ce120eebff2cf55ce628edfffb8bf44e53abe4936a23d4ccd6c821adc8687fd1c167c0a6da005fcded13acad5d556674df24e1570dc5e563277cfa8fa0ccf86a2885dd380ee889cfdfe664c1ebf7f51425fd97061d0e18f46d2917c26d69bdf07d9e0ac5847e10752b6752c34f8204b8f468ef19b686009dcdb27c0d06d0bf9fe5663c185af162400c941186d88ffb5fe6c6870a92ce949f095d8984ae59f175960bf19202defde7230b7de5c9f8fb97767a8edc2f24633932129e441b7dd8fca42f273e17b9ea9c5e3d29a0806dda40b2c26bab643888e6c36caedde0739460f201ebdc3e7a5b4ebd0f7fac6dfd3d69070dc165fb2ac607000d111d030e256dc442d8c4dd0bdc5aa67d8a9f40f1b33ed4708a68f966ffd96830804c42a2b2203246d7d96b5571c923ce06c257a420e93e6ae125318c354d31602c770f873dcdf9685ee7d7151c43fd4aa92706b0412b2ba995d3f50b86363ae5792419b2052b1586c1721a6805935f6906dea8ed5b2c3fcd04ba06153a5987f5864db91aa923a0615717874c0a3da2531c55651bfe2374faceaaf11a47dec3e72a4e70c3690272b3f886b1730a141709e992568982d6d4b2936eb85741ed328910669715f869536579c00e06e4d6a26c90d5274f491efe9bc290d3b9081e632cebfbb809839d7776a0550f841e88a4b86bc32ce98bc3edf943ca9f653b76aaeaa03b04a8e412fd4d8f571dba6af580e994a9b7a7e6e52028e47d1ac7564e25b02f8cfdb88144ae1421c2958b3933cdf24cf4c488852d86fc4319cfb42ada77e3ad485c2aea67ea0f741800c9748aa32c7075f7565460471919f85cffff0404273b0c270d4fd5140e793a1e5a3c19f9dd1d858dadbfd6054afff2f98ac625036c730c15fd9ef6ac852c7a10548de81439ba2e6bfcf27195aa446e2828195b3ade7366985cebc3a97fe9f83af7e2752046f2ca2df33d858b2864fd03462f094a3c96a8f525915b1095eed25ebb9f818fde281628c96ca9de2f6054c51dd50408b89297d7deb7ef692993694a89558b714bb52f0fbb925f7ee490e330c0d99c50c06459dab92e0ecd436cc7b9f2842d3c20f73df4f79a66192f0cc3d614978ef583c4f44763cc9e0dc32404a73412a0b32e69b5c023659dcc29c75906f34463b8b1c60e08d4d2cbe28663106901a404a4397affbe0661b5c944f8a4c7bb6c3f3ceb3d9b338062e9d6d9850f7f109f277175981851e9b2537a0df9d8bfd55efa596e606fb142ee009382fc014663ba15946d790bf49f59f5a59736e33760ef2603aa8d998bec360d86baf8aa5e253fe7f2c345bb3cd017480dc8aa5ef47fa2fd6c02407f9e2516d0b47bccbf2a808b0495dbcbef2c9f1e15d68e9d51464e727bc72c9eddbbcfe9d6cc3407be57bea18f2313024b267c34e728b8ff484f046498da7135ccc4feedb22eeb13b440c64c3dfbb59b26c396444c0123b7ce7169c3c467854aee7c43c61ef9cb4de86713d44356ce46e4fe733e8167527cd2dc12baee99247896976bdb7867e4326b17fbfb5eee0901d815cbd99cc09c3bf88c12dde6a95e6f2334518d57bf8e9b73495b4eddb637ed4ea6addbb73b29c8325251f555be0bfbc04d60ae6668cdcc95538bc13a6ed8b9a4789356739e169238b8715596dac952d0db71b305b3581cefc17935389fd2db1cbdaf9a9bb17f0d6e2386243adfb0d10a47d61147fdda52307a797265a5ad499765f443a7f02fa11cbc081a2eef33102a80ccf058b5dc7ba53b31f7aa17b1f46270f83f3534dfb82dab14b7b707dfa20717824e1b05b6a2defbec8efd32d128706908410e208b708f55950310914ac0430acab53cdf4165ce29fc2039ded961fbea653493f22bb1702e45fd713b89d59341bc0a1b9a7b7814a1a96616e138a2123ec133705b36504e1aedb17cb997da67dde4aef028645d75f94df538b227f807d4379ea12bde6f14385850d0a982442f3cee92dc658d6108f78a85860df4f5d97a8d0681263fafbf161c8f84daa47a1db3194b86c92eb3e6bb0637f8c6c2253b542a0f9ad823a5cd0fab4e4ac9277460161ebd5c0998e637cbf369553930822ed593863bfbc1821951287d48a1e4f465c661b0be8ea99509ed417e483778e31e959a704b3c53e764c61508ab4bbc0b360929d9b236548e5fa496ef747a263494bfe72d608e7ba5d3098c8060900a1ac6f98548eaa8e22adbb8df0ff065c38f6aa673b69c3b904c67d9a82e4bb3a2fb450f62b683252a6dad8a10a6768735480f2e10e3f8fba2a47c90d053723a0814e62cfa9dcec229686957debf1677dbd1909d4fc55fc15fd364abccf05a66394c3c8890f6aff62b41c472605ba6b15573c668d5bdc7fa97b6b71c2bf11d699cc0b49f1867c125fc72a29131483932c5cafde2100cf1290cebc6cfef6aeb4a1f7fdd2abf50d113fb29d8ae65bf4a3cea6c1f1de5557353d3e27f3bdef57345ee16cf1e7f03ed16e7d69972b570b2b63f9c4ba8a8657850defefeb45e1c5d730991642afcc1549848c8d2379ae40a5ccedd27ea9514bf040c36ae375a76d28df25768ed5f1f12c6d6698ba062f56e95c41c38bd73e541f3ef21910ba12fd1b7c9094738977693576e1ac137b17c5caa088072c5156a5d78900e6f89cebbf9f61bc7a89e4952b7eca4cffd101bdcbd48e60bc5577d01120d39a51541a696579bb0276c3b79140ef613065d8f8842b4d6b1db23e2c57e19cf71a3c0130cb8dba8c39cb9cf5f5af03ec76cc512a3545d694e2a80561a1dab0d55e8ebea7bdaf6bb7220f352b4c1f11daaf4ae6b0871d3255d1e1017e30e9237ff69dcf449eb2373405f84b7b90f16cfe17ec9c107cfa07ee48f6f3fab9fad55626748ea84ae36c0745cec5364cb986b8b2624544bf3ed14c99c5c30010bb2f96277ec36d12f3b5e4ba9e95950bec56e464e8f4d973c92908456f115d80e968ef4debc0daa386d21d97895f1627e4885332d6e3816891d6e268c595f9a7970893315133e0cfe9ab7293c60a68a2a853f71f81560a43ca24aaadb8ea5d11f9ae90400011c20d332a27516cfb374b45a4e1ab158a04106e3d49fe1488e7931a61e6176b934a3e3ae39d7325190fd22f0d85a38f089968052092b526c62a5ece92ef7700ef548d4b22a1adc5b5416dcebf1b2b3ef0d8d22838ff484be284fccf228c590a7560a3e0817e65049ec88d3383131d919f3ee7b5e476d3ff9c5cd83669ea96ccdfbdd596edf60dfcceb3e557ed034a04de7661bfdac3945907abf589e32dca9718e66419db58a34a6a119b39f46d9723d3d38e32b6370596a69c369b7222583c20273654f9bf270c17d75f371c413802ce1667098c2b097db888e32d0d78d4991545f13a9823b1770d8be40ab8533ce911155b65033f02d416f53ba8fe52cb11fdcf5e54ea20e9dc32020f71faf10640c67cff2b88f9d822b611a72e110648b6fe572b4994c75d45592aabc73d1661850f267c3a32a2023ba99111dde24a49e9a1d42d96c7cf55e0337d29686d2416e8d555a3d706b133223b1293deafeb8ea95afda43d29ee0936f027e53dc2452a71427cb40113286c2864146691070c296210ab6dbbd4683c377c2a770d2fcd68f7d3c65a6af78ac4a7183875b9d045e281201c0a6603db7783096e2bb91a9d838b41c52ba488e68b491a190dc4407b96c35008ac445cff849df964f5e8f50e39922f95b059e9be10ea094afb26ce9f5bc09e4e66606bd11b257c05f51912aeea992bf4c749879ba1800c0b39df793b00e46a6dcbcde93d92f8ea07cce2d7b8195cb5697a1941770fd69efb56d4bf89c8a4e7e2df1f3edaa495748ae6ae1701db28eb20c0a309a20209ac1e644c7122416f08f6fa2f736bc8fb33ca0fe93943191e3181ffd02dabf741ba190e5687e016bc8f4cb131b7c9b8f6c04d56394046111dad079af318d24f6299fab98e70d37a621cca464abce6cba8cb9643426c12bff2cbcdb14504eaa6b6480223021bb64ddae24d4a2adab6ecfddf064fdd5dc0e6a7c94cd2a71f29ecc474b664ac926cf6032c4837b04801a6c101f01340889beb59d1ca791e2c97779eedde56c619ce56a0798c090fd4eae807c04af1001bfc75809688f7108403a2f7c0cb1e74cebb6c6dbf8c6b251cc46e37fd64566763ea3aab3fb42c574b85a13f98e71c49a02a8c1f39750716f8850d4fc8f6cb2c6d97bc70098b081581b06f673f935ae7670f95c6cdbea6cea3dbfd9eec2d2675172ac07c01c28d6ea4d1b3804f062e953d28ef4818f89b013cda594f49bad9052bc6999a3f666434364f1061f71b1317a1f4ce2a9b294d5b09899b76f86d62bd2fe5d624a135876c9394c5438075b23d2d673847ea1335231045f6a30f25933d65135760027125070371b61f748c40cf9b6b72cedaf8e1b69d5387cecc4080c1fd93a2b5c6c352e4a8371cfdcff48ad94a5f1c229a7f849083281ad18d428a08304c8160a5c4850658c3c31663298fe1845fe94c16aac94a3c03b4f001284bfa190c9cea8fba145069194637fcb78db88d2059f718523ac00bf1f3b3f7b93f0443b539697b6584b38476fe2c9ba22ba2984140f39eb1fa2c162fb93428263325185d9813b2d71d3176eb38cedd88145366ba5de2912bd66928255d718ad3e02c4a622fe70e6de8dc556c8e213e450ff1aaf0505e0b8907b77076e6b49d3bd3b2cc3e40dc8503a9392df4d7b2a2a53c8e1922cfd9f99b7c70b00e37fb5864d21d9cfa9ee04e2bf1ce2a0a09d39e344811b5e2efa76c39a652c114ae7ed94891536a908e8f822526444cc16dc7355466eae1503d776c03f634e036c3efa7a1cec9d509dc2a79fed942a0a1eba4c48a1bfa3541100329047510e033288c155ad91f49ea40383a4feaee06065b7608c3bdc88069778682c11fb6d7fd96353bd50dd48c4efd48feb9211fe9245d15ba1d7eebf5a28a70de0963d37d0105363838f2d5b72fec87739d14fb288c4917035c946d4a438cd5fac85d4a8d0823e7a9d4046705cb9176ae8f69868aedf01efd9a5fa721038bb40e4cae90b8be2b8062070db091fa30fe4de41d70fa89d3fb5c3ad3aface67d4a41766f83e1108da7d65b2ec343efe7a438dd66bbdbf557c51c9ab290a18a5064af6094cf6aa54632e55056f4137b67632f2b793c21bf66d7feafdcde49820c09115e7a446f8682cf8c549422caf80a7457a3224dc77c16e29001e94db9aa55307b66ce134c915aeb8e5764d6db0a3078992edea804e841f51f3805d8a953397d8cf6cf7fdfc693da2e9214316f3aba9b412db25d6695f5dbcd1624b8703d0dd22e5df1e2b53f3bbac1e82f629625c390e5e319dfee8efc1da05b1844049193d937185a2dfc77995ede81470682ce1fb77d4831934da6bd0cbb65b5c266ada3770f1bb0865d422ad0e3111e3a63ed2ed45904fa4dca551077b6cdf759af148c7684cc7e30e946816be84aa1a4f0f9c2630e4b428885332ea597a12b8f69e8c5f24c33477ad824b03e87f935d7bbb79427c6d78a6cda34d679403135a96c3e53f83a178ce55753f55b1ec3ba1e7522586266cf470bd8b45f9998d3f7577f1f36139b144fa8beba73df8b012278c76905d56cf4dc5c39007c4d7f8a6a3bdbcda8867010f351032d5118c38c4565f509f01237640be52de6d8c0a06bacf14103b8bf25369238ef758e63424fcbebc08fec2bfcdf09a881c6a24f52c0721bc584239c5e0320d9415e84b4c74fecb0dac117316ad51270f160cc4fad91dc4cc7b1097efb510fec9cba04bc6d2925f5676cd59654995297820c16ffec975867dc7c119fced1febd802209a270c88b8711a88972a9b372dcac61f9267378bc5c5370ce496904ba7643e9d475321704ef6df4135b867ab1b68e2fd0776a4bacee921eca626ebcb68c7b2a7e3cf920aa50389ed8188332873013e084de139b04b55fa5ccba910628a2aabdf1db67296e5705a2e5dce8d45182e03bf2e31c054cccffe6b75ad36193c064197f76d16f574d92944fb9bd50a243feeae64732cc706d273e79e1b1a6fb661009a19291238362ff7097eff2378ba596c1d8bf5645062b09369df17bfeca0c38c368c5a2c4976c6a67bf9b9a6a0355bfd8c1d9f2cdbae7a6cdf4b0f9565bd804e41d0fbf620ab3cfa62c84a6cbe04f57768ae1942ce9b0e2c5f8898663f230b9c7826dcd23a6dd4b06dd6814ff16b2900359e9269e08a1f293023094df3eb7f4d7f22bf0f141c60ac35812c185dd17c788e8893f431f1d0b7179d0557c1f030e01ea35afa921eb5cebc2847fc02109955ec142780ef324d143e8e36277c6b9ff5e6175eb9e9f6a9506e3f6d24007912caf3e17d1bdcc591919d33d9a3826580488b46ef7328b6200dc61e75ff664f86db3810a0172659e8597abd421d9db5b975bc6e24538da09a36f170581836d5c3f64697ad8b7d6281b48a8cec16f76a9d50bce2819ec666fcc6c489828933f6e53e71373dc2e15b4c7f2e3499aa859038c06378f1ce443445660599a9ee85297ef5e41b9e0a5624f1c542b4e914aed18e296b2bd466c3a5cfde8af0a6afce679479c1fb4fa6dc04eaa0b6e478d1dcc2f149a4bea4ed80ff72eeb6f0d7dcc8482c86260f909f93859026d8decf57d585daabf505ecc6d7e775d28c0782312fc1278fa8dd7829a2de5dab1564c01bf5e1632d16046a12587e967cc7e553a65723358ecc23ad3ec3f32ed5b78b48d77f56f04f5fcdcbbc81622f4af5a8b5a08e7e28323828c2edf96fedb91e8c1aa3139fffe3f0ca9f65cd6c34a6c7e71e17960e67727e93ec70bd1377df77b60216607f0a2ad27d814af36f0fdfae618933089bba467581dcccc666044775b2b1de9ff24bfebd6faab4809bb4b604a29770d271c03ae6b572f45b4dc98bf08fb6c15ca1de10673363cb33cf59182493664005623a448b137552d47d1d02a5069e6ca9235dac28407f8eb2b87b79ffb485334fe7834aded103f7807702db5ec3572cdf51558cb73b3a481126411af6a69f84efa778051db633acdf6b0389d5c712125b6658de40d2a6d9281c203a4a0660ec18e74c118a96642024d1b25c954a5758707b559bb91f79dabc4996d3b73debfb82c253d137184957279f4360e8164fa71ab398bda9596ac85b9c9f722ba88e1873c115d69da9c3a128e7febaab5f0d99e2bb00af4ce04d5b0679d217aee960b97995d2e4aa276887991809cd22ec9c4d390ac09b66931f751cddd781b248203ee7974ee3eed0e2bdd29300f4f0e3e2859c6d1dd5d21e2bfa558fa4277a61a51e5f8471752b57bf9288568df98e544f46697d9bcf73ba1e79822e0f803cced230f272b47ce1c3ff48f9c13cac56cd0497fb83f853a8dd77aaf127c4c76a4f1be36c1432f5a754b79d37c32facd76861d497458ea376c27227a08e946989a2548cc4f62be10e51c898e2f24b546769542ccffc40b0b4de0b86a1785ddec9fa24cf2d5b40af75265a327f10b890e05303538d202738f0e874aa02736ce26076666ca08b8f44cbd23657af55a3c2ecc1d59a97e481f6cf97ce2edf6c6ac10aa0b1b823b6c3ff6bce70dc2ea861acdff29dfeb79d7f377d3e2dd3ea08bc94fcca5a3b13e188fef12c785d746dbae46f559dd527e4d0b80889d0dc3544241acacc203ad98febca17310d9e5b1dd8cbce440398525ad3471581c0f7ee239e87e9c9ffae1e92fd7b34db1c36a6f7112d09dee143a308adc197c64629fe5998e9d0a8ddd3c9287a4e64c45eeeeebb821574df622d1dda4e2cf154855abbfe51cafe24ed72e923cb681230d364f32c73f9ac8c2337bad9c1f0c2e077d4ad909195e938a1ea2f7d7896ea0b798cf06334cfedfb54740706b6e27a70dc45672cfd8febc26874bd01cadb5ee2c4919069137c06712ada23f9b103e74cee628e0824efd473d7b7ab4facd860886eb84a6c7d5854a2e91bde615b2208b781e6323662ddfe65656c3f143ec419ca40a74460066ceed949900c71278df0eb82193d1e1a2089e33370f8671bb58b478d3828c7fac0852ca544d6ac76d344ae6c78593d88126e6eeee359a19dbc1dc75b0a3c5e784dea7691e89e88ea992a6aa3876eebacb13792011370dbfb3005af39baeee7104475e056c34fefca3a2ed2db383788ef30327ac17d8c60343586306494acafb510de84ba15f18c6d6b1ada1574445a3326cde4a9343d37e0ddcf47148e877cd144b0e4bc80942444fc9d44e1b0570ac14fdaea3421c4c63c33a3fb5fc5cb51e15c4cb7c31dd2ac3920bb4bf1323b8217fd914065f0b5c9a30f8938880bd7db909868cf5b77f9df2377930989553f7c3c63469d7b567b2541005eef939efb30ade93d37a2928c93ed926e3b7ecf2a26375e8769e738abd1794b0649a871dc20be65f989a37b823c573e33f7077654d5226d9e1ee92794ac6b07f66b92e5ddb838c49905b0ed308c86b65cba6ab5b26bcd950a372dbaf327411476c54ab05daaee94ab8ca1733b57d279c9c865fff76a3d2a3360c14a718a87f9b3ce797d5096f41bde64d90b1e92015ad3ad41284e7691c54330f292e6603d69e6e6c67af9ffd287e19900d2c9c7e44d8ae9409b0e0168bb2c05e23d4504d5573df86ee5a2ddba143c89d7deb9e80b6aa1ba7581113d99164b3ea7ecc01b144ad765d501753e0d7989413f4a46e6056faf480ce076b498a04bce0471d4a45e6a3337b917ce05ed3f4a6bf5f0f327ddf626e9c434ff7ea890bb375cc3a583f3435d917348df2cd6f6ddabfa9869f3390a5a0fc15404b2c394996f1a8fe43bb28b60fd2fae91b42dfe86c149db9c0931e1b34151fdd1920ce09b6fb6793b8f066e6e1615f943b7956b759484af683725b61186b2f8e1e2764fa8a3e2c708b246ca852f60059b2c15a31d56701ce76712e6eb07d215136d676493d1d1ba881e3363cdc8a50dcde272f0c560479a6d066be03d791f83f9d74d5672970fcd3b09fa564f9eaf93c437a2758697bc8aa2eada4c9da67d7e9fe9796a8f4e06df10f57e5a2e9681dfde3077ad5fa2ab4ea86cc8bf18164c00bb096b95fb97f27c2edd351e4e420acb38ee6d8ee20a6eb662d7b0ea84661f21719dffbec56e0cb4b9109200062bc1d3a96a12d4bec161b250a8c005d190595c1a59c8c67c34ab7efb5148e1ea3167ec75b43e02d0e17d2046f23f615ce51aea9f9bee53e7df3fb3dec746fe0918f55fa28180edd6965becc89d311587fd6bd76007afda52eabfe11611c90344580a3b10e999f44d465596c6e0d8f62f4b1c68d2542913641d051e85f87e2f02c04c5e33b54eba21d97bcea4947a5f2f10454cd3ebaae11c233775b2ef0624acfaba63a56a8cd585a2c6e4cd46747c48c168b506dea5c55415e88619ba2c645d72d1fe11b65c22bf4ae00cfdafaeea49d7a564c64cf4aa1e920593f2f88681b52d46ac1a5f7aa419a1e0f69f8913933fdf0db495680d64bdeacaa889efd94c304de767b083a3775d39859e39ee5d94a93ddeb4df34342ab66e96b77bfe17ec6bf54fb93e86668446c69f595e4c9dce668907ea4e959a670ab7bbb5b5ff60efba9244a3677d19bfa8a0ac9679ec997b4bf089ee755bbaed1faedad0a9c4cecf8ef173ec79061287aa45eec5c431a0a5ca9c278df82a6836851c6bafe236f31bd92a0e69f392fd3a3f8ff57836f79a954d136de4205c9925bf09373f8436c2c750fa8ff34e24566e629111516cac5e54b3c92250f6cbcb9e4ea507755eebdc5c2b0c956c0691fdcc73e5083fceb10eeee127cc735cc0cf485878f631c87fa9ce0ae88d9b4bf2b9c12e25885d49dac628f3f854ed32a64d2f471236b5c954beffe1c0e260b34f4933579facc3a62aec095fa5f4ad36da71a35346203625ad7882a13e252dac30c4ebd6b66bbfeac9ea7ccd8d2e78133199a271dbe85f83915cf39208bf7d757ca8b4070b3cfa591621a2eed07fdf9a15bfb5d6c985533f9b4af599faa029d5db330dc6ff1b14d619b3ea1395edb7e545eab31d981742089801f0a544e82df32ef52120cf8cb2c2241c2e7fc0e5995c1f2d56ab281d32765de67b8ec77834ad5b8207096196f7f37d486b32b988fbbc1174cad447c8950bad9996ed2ddcf6e35898bc37144cf50356cfccb2b382e218384e06ef5eddc751088a9b41110696e2eb69dd3d3f4a5cee3dc7c6e58cab843ca2c9a1dcdc4cf58fce446c352fde8891fa95ea8490638b63108bdaf9cf09d9296fb6ac69041be5c5fe56260bd585815df28d34dfd7d91df77e26d055f2e2c356e9224eff53e630d2a957a33cd3b9728f80913767aef782fa640bbf0de1a001e31d4a55ba8c3421a16ec2ac2bc7a1b342270bf2565fd3f5197ff2a9ba1426fe6a1ef1511742001a6fef1aab0ce265db4125289d3d716273001ad377cc95e743e4a4712e40688029c36fe56db21f4ffc03563ee992ed99acaa338dd8f2f9439b8a3dcbdce2377f1403782ef01a081562900f61750a0451160af20d16b8dde8d12d27d4a6249a8ff5e373fd68e0db167ff5783c04f6294a9268d2e76c64850548b8573d667972c712516d9c40b6389f0050641747ae8d307016cb86e8fbd850d4298120272be5baa3b60d10c3d7fb98f0c9d57f9d35556c5f84b83fbbae667169c8b67f5c8fb615ec9621855818ed41d53b90ca45440d5fb3cb63185947a3af6843902c6dbdddc190691b4115ad1334747c014bf2055eaee56a8bcd09ee51805f0d9e3a6bbc19e4496b9c7c57db0bfb8cbf1b0e17ad093e6f1ecfdb4dcce7ff9b8d424acbf3b3edf78dd19c994a0ab72aab45756479392f2643aa74d81ce7e27f9329c9fc2695afef8ee78b4f6c4ee9f066810b0bd50e043259bdb773360dcba859e5b0a0bb4dbbe1bd24cb03ca7ee67827e56de3f6cff1c15f6958f1d0e31fd9876c6f9f9790178e4bb1ad6e8384556f33890c7eaa945703ade328086ad588f832cd596380497760b55b6b9f7231fcee1aedd33e59b77354096c5a43661e365dc6010bbf36bac69ea3d83d53bf5308dbdc393536f83bba9222a7f2807f99d90b186f2ddd31252aec682b1e9eed5bf7309a90cf3b95d9dc30a6b0b5e39addeac11da3d7e2a8d97bf0d057dff376d83d67e17a8b5bbb56309783f5add0854795af06bc5c62394d23f1856c8cbf52c9a21c7d8589c