安全研究
CVE-2024-12877 GiveWP PHP 对象注入:当 unserialize 碰上 magic methods
Thinking
2025-02-15
3 分钟阅读
研究档案
#漏洞分析#代码审计#Web安全
GiveWP 在用户可控字段上调用 unserialize(),而 PHP 在反序列化时自动触发 magic methods——攻击者只要构造一个含特定 magic method 的对象 payload,就能在反序列化瞬间让 PHP 自己执行攻击者预设的逻辑,绕过早期只识别 array/object 类型的正则白名单。
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a47062292625ea7240d146fb061f3975a6253d117e97272d7df5aa897fb9fe2c09034f658aae2645a68076992d7d9de07ae63e2fac88f85e475412988dfbc9237684cd822d6f0cc05eab1afba11c1b44e5634790946b10d5f6b02eab81ee4fb68932b51ad3cb0c9d489ec9a3db648a5fe18f50ba242853f54c960ca1a29b6ebc5d092334275da7b6eaf7af33786d92005b7f563117aec85699b81bc00d1e3b14c9009cd96abe6aa7c8f3b49ead9118ca988d22a1111272853e4bc6e3c02a20ecf9af84dc70a1684e8242d258ca5031246b8f53411537dda4243d8e5bc68cc514edcb7e608151b9c175bde0fda499f5cee43c60084c15867f49729ff6450146f76c459d55b78f38cf784f98d056b7207ce89e6dca677a538ae822d04b43d686a6352e89d728edd205e551d820cc51e8f44b24df33e868dd88a5cce2b9b3a3a7cb8ae2520f1713e9f2f50344a3af8e44f6db21602abce73ff963f3c06bb5bdfb9a036edfed4b2101dd2aff854f0e10f1a5c891011cf3203037f9e24f3ecf34f1ccbd435133e4d6df1c754576f7d185b689db59615087d123f00b6e708099625f0d713b110064a47bee17d0f21117dc9a7ea38f12cdbdc8544f9ddb1a1275c6b783b7020f1d1b2958448253de1f91cad13dfc606cd8afd96fa8b682944aaa8dff37b790794239ed369a25509e52e21e443bd5734c939ebf85004471264ec6b88801a833b2384c06d68f288b58ba05cad7f15f833e64f764362706c1285535eaaba8689ca5c4581b2ef81d4513729a9c43a2e3e2c8e8f3dcf1fd9d9370351f9e07a15528ac6537e83295fdabe80390857acb3df810b4cfe7f45da3d3e55e8106348de19fbd66fda5eb9d35a9b0e27034935a51c610a8ec6efb003b08b2a3b9b5c60996ee83fcfd6f4e562f858ceae999bb6e30221b5897ba61569d0b8baf5812efb6cd64d42028397f92128e183f362d46a82bd453d8c31eb7a42c38a62292ea96f2305855555c961499d1f24bdea3d436b2a4465a465697781b0978cadefecfa99402408d181f7138596751a9d0b6c007710b0f80383e99c4d656ca956266d9998b05debeed7d4de74e53ae72693ffd381fcc7ded9bd9a7fca013479cb3952527afb8547acc8298476a36c540186f8ef3afba677424e321c967d3b4ebf63d417bdfeeb66aaddee859268c53b2968901027ce8d067717934e7b911ccd021b257596c345f944dc8e74740c1e5c8c40f06c7ef4223253742a7828d2369fded8606027a0fe1df40177b1f7566723e5d8185c0313eb67b8590622e89b78400ed45e951315c8cd3914dd3ff8daae202467bc8f4a5885b68446d089d281076fadb6bcf1d0b594b3e29c4e014484d93055a0c3011398ee2e71f589a30a6b16b17c7777e922fe3a1dbe566e6b46802e7a6907725d99813c5e61e7e1cf4102ba710db4118fda82dd9d50c378a965d35fc992ced9bc4b3ce761c8a2085e87ce4470e1dc2da074e9af9b20e5f17dece9b6176800251fcaa6a42ab7333fa9f73ed291ff4f01a36d5a0f9e405f9fa7ffa04ba515aafa474a58fd0f0c93f1eade75df0217a08dfc0f5d51a39f113af3a6bbdbc35dde9a83c1707373e875b806c3219b1c09ead838735d36d6c193bd0647108c9f6ee7d8dddef71d0bd3ab1a11bbc71f8a5408c5992517785d9b04adfa4b65e1494c17ba1f3e4b28b4ebb5532c2817ee06cb79b9ed85512a25a1cafa47d05c54ae02a9fde51b14fb414fb6810168cc65e7b536a0e642526c0fe27f12a20ee59eab87f7366bff489b41c27407377f00a4368b58b7cd6b2465fb691fca0b4d3938ec2d95bd0d8e52556ecf72585fa3e0a70950b8eca1036ff1e9a533afb0bf9a87cc8671a5c4d9770049f248183d0f4bfd39009e12c7ced4b9fa0d58fee2712228bf9e4f5e85b8270f2e1551feb39f0c1c1de1aee5e344fa65c01ee8140493d14c1f8bc371e660a192b4ac1d03ca85232e68d6a094bbe3ac1fef705f3751159b63bbb52f7fcba36f6d376082d05de0a2886f0faf5b183efaece261fe873a48c6e1bdb8e46d393298060e7cbf9869cee27aea190a4bde708733ba6cd9a95c1c1a842d754c0aa780c908e53f571bab4a2bf44dff4472bd7e67aabb6c18077b5c8b0871d3e0cc66d0855e1214f1744f6b5f184cbfc35f0e0ad46db3a956f6909a7394400978509d72f21a48c072246cf25791510d17dc39461dad7ac71faecdf74d9b10b5706159b910c2c67146b71518e6f9e00206b3f08b759c61d4f567f9b4ec7fab02ac0ca4e0795abe5a99c13de57a4f5646ffe91a18092e94f4d240f059a77946c6e7724285a93ac6c13f6ef2cf4f2790e81fbdd98bd2aab43339b72904cc6d794cd2e65c66c7cae9ef482f34451b7ad15487b843c1e4be439acb1ddee240939e4d72d01111cf77a5e5057df70c5dffad6684874fadc4c45142c0a81b09ceb8b75da846dda2c83d58656d122a173121e933fe29666340f91cacc77f2110a007935d831f2742e44d62b0d400dfa5a96703c44e9c6e307fc1c0d3ba24d38193fa8ba1f6d9f207cc5e7c4b445512f2d29fe18dd0391519c27c8d7c255fd199b7d19610bf342bf8efd77cbbb1f77d6d9a87919f9ac3fc9d8db844a441df413934e368ef5a7e3a0da8e65322e51a535f84876c7ec15a7cb1257e5d223d1030df9f8e810c3703fdcd7f3f010a43138177645fc3424a619d809b75ac5b07cb02a52a04309432e052b07894dfb81030195fb81d214bccbbfa94879ccddaf1347105728a1f81d83654a8c2dbc7ac60bcca1eb9ef07fc1de463ab94f70f39469556cd92c7650bb11a623214f3e379f816093378f773b9ec9d15b6b63305b7f470389386851882628ee51655326e1668dac9367c0c518a63658f662b615a758fe5b43e84e8df0599fb32f9d14b3f4ea55d4cb5f887ed8c61123689700d81eee479468d1be39c4a62370ba537f2ac9acae56aba056ebe6405bf979218a67288bc6b37e7f4a97b45da64cc49b0bd10e3080c3ca80b9d22d674438e0a09dab1ec88347b579bf12a9a828282f1ddda2777f939d372f505a4c514d510d4d6e346cc35801941c71e05acc79884e886c22f70c6b160fa5e7dcd7de3899ecef3a2e2ded66839124de20e086d745b562803d1d8ebc714fd2c3c4383096108d7031158139576d7022f4dadf74239edeea785c8e08bd163b7454a79a7bcc4deed8bd895a41d8950f687f6f1ed1a0c0183c8ba62d4a96432b100adfcdcabc10207244288e99955bd4f2526075f9c89cb64dae4fdc3d4a7450be61eb3f1a264091f7212e9638703b63844246d5c7900b8f73f47eb7e6fd2d34c718131ee4824ccb16280a5df468261cd51edc886ab33056668a58700aa74272a69eb8f7d2dbabe41adec77235d6c83c6c014c6f0e2a4fd598a994f1bb54751f96620aae67f6ceb438de606a7f8220058bf68a7d33710430860ec229e2fc47fdc3ce7bc6700bf5891d404b1036f69235877b12acf64cd253df1e9540833bf35feba30adef62b2e751fdfe7e421ba0e1e5ed76d32d60064813f05fd52b843a0d15da671c301d36b7932a5855dea5bfde421e5e904d388d8a3555a0bd46f276a616d70a61296383510391eb029f20da3171b4d0161b17474cf3f21f0b45270376f5d4fdf3b54903473b569b9fbf61c62840048a38d34360464e08fd1193d09f66a5d2d3af4414f14747def268328c7cdd3c31a226179f3e0367abcea618ea887b08373bb0f0f31306c122dd5048b08336be3b3d05b294a5e53ba2e26765867b013b02710cd3098ee790ae22cc0625deab5b30d8815edb3a09ba49241762e8fee14e5ce6c03c4c82f05c0867129da8dca27f4258ecfb8a82096718313dfa45599943947042f717e04e80a9c1ea37a1943f72cd58e92cdc8cd242ed361887675daa2ce04b25b03b7c2bc7826c5ec0661409b173b6ae325427f0a748c7eccdb994e071d69d0319791e12f14fc1abd1895aae10ebb24776f16cf891724699c96a34a9adbdea58ab9b811095faee5af5cc24091a6d4cf0aba503c6abccc5ac0f22c8282bb3d23d7ed5f30b2712c1c6d344dc5644d946a18fc462a4af9577ed802f36b8e4f03a3a8f8be6f4e0b3ab28fe814625daefc028de056d09edf49d670450867fc8ba0edab8a7d4a7fdd4b4a0ddec1318ceee411b1ced738c46730d2e8b3d6d3b395b99e0934455c30c604e01a42c07a3765686e50c5bd6e590f29c12502a654ace91ac815f7888c2bfc9774fb45e8a8f43dd95112dc23399c4ba7a2aed8ad8fb5928a976e643c9c3828701b28ef49c48f820dca8b9354023bdecb24dcd24661bc7f936ceb6842ddd463c6615cb526640576626b2bbc49c8a1102bb049ea315936538b4fd0b55a3c4f31f3a07d5b951aca7ecff6b57ba873f006484f79d5a7594c3092ac1476fd9f4d1ef87552dc4f0033410ef65136dfde219b99422b8aafb15d818fa1519d506f4139446d79f1ba0f8e9379bd4c513a6dd7c3de95baf830d7e86d34857b329f41f277a0424c3a4123e931644c404703142a0cf48ae59e867aa6323c95b1b9e9efbce449a9c23055c5586bf4bccaa70c1576ace947fa8d201011a39540c276cca8c54b995a521ce1aeb2100d284ad5d1c09a4e8cc96ba5082959f7bc45533d47b74f6b2badbc415c99db3dd21dda08f9d878b0cefc2da5935c6a7d3a95582d7312a29fd819ead05e84b440878e7f1aa6e95fc30e4b28618f9638fada508ef74ddc598eaf873902ab344a230819c43d2e48e517637466057c2617c4807423e0218ea3da344f802223a93b549d78d0cd3bb2f4fdc7fdc1fde7b5ec7d117aa59107b5dd2196e3cb3517bcbc5cb56a60ba6582a98f0a36ed387ea138eb2cc899c4cb5170347c48cb9206d60d58cb73b6e57b49560ed0de7b7b1ff36344bfdec7b3f29843796c198bf0fee9b36525efabaa483a260326b74cc0f74c673ed789dffcc42d4bc6717514620616e66baed952c4688765938264fb3127653d7693e13420ee74ebd14522a120f9a3142c4dfa6dd1b8e22bb33266519c7f4ac6c95f03129731d353f0d83a278eefd7fb57d51af0b0d1a04c46a2e24c21054bdfe17172edb51b9602e48f25d56fd219436e3441719f1152cbe110e22da1e4d2bdfa3a65b898a86a15570f827ebef2cc2473086d9fe7d63c50de58ab4c5f65184065381b314e33f0f2dea6db7ad4b33050950b743d4984f2923595dd3091affabc343cc4414565b178d9dc4c7250f9c6c4e2bce8ccfe46f76c09fc85eb44f32e3f8bc43f31ac73879539c1417cca47b665ae1c7f2484338b18d0918ed8aa65a5b7e4e4967a73e89b43876b23426d2b54280e317e883e768368c2bf6271c8c24341108c37ad875f9962547c5f286a6421e57a64ab73aefc9ed9dc02261b52fb4e027cf12a718f9d38d5385012bd31e5e0c760548e63d2cfc12f65499bba4912a6da553c16bff64c24077f6a18f18090d38ebfcfab8d85194f0f404cb7b93e89a6e440ec6a295f023bd9dfcf75eeafaea80e5a2476df3e99831da1bf4385187a333df6d0da73a6d4f2b2d14c09829c5f2df97176e231a8d18511cfa913ee0571a10b9badff9bf23d080fa2d9a595135b6ff6d05728c7277d554c8fea3fcce59f44c8328ea1204a47b2246e43d9991b40d83bd7ca7425796f06b411ae9e0d794d59dcc474dcc73df99e44d27966095ddefb325a9c9a8f036ff4e6bd2a537461c89662ca61d036f41ffe65cea252045e26563b4241dd378a76d1b7473ce08db0e282318446f3274d610b64c9eb54e5009b7417c6517d6c6a054dbd74f7b3bfdda5b2b0c223bad6674775d40749b81b6d2b1fb931a5939c9fcd48236815cfc55527249e256e6629a111ee0cd38c4cf54db9fb7b9d5b840d308f3d316f1b2b59ed43cfcc487d183231373d300a7cbd236ff05ac5337a893ca3d805874a4a5ae092f5cd0a0ff32c2febe7b7264a369f1bb8520c8920203e1db2187df25dfea75557b4976d326a73844b99b8d6533c099029e83ddebc3a2d0528f3f31f18621bc0aab3d6a8544bdb7a0506ad891ba158386f9e33b977347f59fe3896a48da1b86967b76b96f75ea9491de45678fe004e6b6800225d1f6cbe4dd1fcebfdd25f98021f1b56bd82bb104d3c0b9811ae1617cfc99f614455acdcd56341fc6197436e06050504ea5425be068793302ae6b7f2e7d800981a40de7c9511918bb81f0df78b9251770e924a7b2e1fd05fa5fc286289d71326c4077ec9bcf0924624da38246a689587020f38e3d4bae1d30a310c9f6d0a0e2498493d0208f466bccac5e6071536c69aeddbb56694588fd622488c9617b2e8e8df1dac412cb10d7698ca6fcdac711556d9a2747c1ee7de70652451d506e32d08dc718b5a54ec3480b670c14eb1f14d21b0ae76c04ef758c85c69351d15eafdbd9830727a2a97d3a1018369a6c6bd0d674257de63ef40c2896798889ab774424fc217e85762bcc7deeb2cd1d0df15c29c501d9101d3136fe0cb435d4a346a24955644988f3ffe8e9d85791d651e43ee0422d4ace427d2fb48070621bd971083743584f593d2475fb8d8dd384c7d7ee6b8832e0b5837033128b9c6f40dc41a3f4abd1bf366113b319e4263f5867ede3678ef38b51db32a0572aeb7fbe99e14af8b39cee9c3e2206ba9b1ec5451e40fb8c2a925c79219c4bd73b7f8c4a8400c0b57fdd90010a96fd5cafc0e9e8f9bd4299a8d085538b821a571198b147581c9584aeb7c6e9eaf27575f8bf66c177d9884bee8ced61c6ec75d80cd8545dca710f2a5a96774a372eaddc27f97d19c2effa7f1298b882ea950714c19a131c17b318407d2b3c548c7d86f5d994b76cf023761dec7b4334d687ca031f90c36c8a22fc859b15b67f3fba70ed978a212f8c8fdd43b78d8a4d180c33155622168bf8b9ee4b125a18f71f6a446011f96e386ea75b91cb587cc462f7dbc3a4d2ce19d38e3b43ec86ba984ee0c6aef1925217119cefcc1ff23750bd3f58941f362b9108c86943bcaff96aba3b40a2e2f437e1efb40e03a4bb67ce4718fcd88d9693225fb1623cae1cc371fbdcab2ab9d90fef1b1e9fe2908dc6fbd355bd87c49216a04c56d2726364fe6884d6367c47d04afa9f5c2de568e4e889edf7da47e81ac15129d0d3a9c4a8edd5278815a997cdef3df5f30d3940af492f3b272c69b14ff7bac5ea4755328d1acb2b5ec2c044405472a77812a584446035b8b3be4c1118715c2a8e86c60a4c34dd823cc7821eaed39ad61068309232646748da904185b9c03903f66349579f2a66f9298375658a6ef953af814d6ebd5c8593d8259f366988a04a121c31764d22df3c10c017e64e6da99e241ea114aae45dd214f84c93d80728dd9be0940dae9f0f8d3bf700c13b3818c603c40b083232fd148fda424f5bd01a7821ae647b09981fd1958957453fc85fca35397ce1e4885dbb767f0109dc2dddc57a188eb4bbaec735bbfd9b2a7b3d58bdb2dc97a8b6ac9dfec843c36270199d14f8ae836ef526f9f04a9fa75fd8138f6f5b32c52a33b170587424de131fb24fc8a82da0fe39700e6d22e0eea0159155287e0fb7b644ea18056d727f9fa23578009cddeba427c2bd3e19bbefcd93e06590e1431d11b3c68987f14ff1efbb052af166bc3cff1f950cbe4b11b1559e97ff2d44758b3aa7e4abee7baffc9557bfbdb118322c61c7466c70755831222a0aeb9b6a382524bc6b25b230847bf3287557a743d67a39c2e30048248cd5c822902b161047d61749ebffa7df19c0eff0a136150ddca2ef4e2ae0ac8ef730bfb657970937110aa971b0807372c2db8e3e3490fdecdb984e491824a9e9f4e7ece534c19c55ae3c93076d1d1dcf9f400b361e1bc2fe3dad4e3aa6f8a6abda3e7da0c284c3f2bbc9bdc2b8c98a057d25ad54e355d2fdefbe954889badf3053f56217630957ab5cf186be67fbed82f1246fbb2877698e367da3ef112e90e84bd2200aa22974ecedcf919d50f22d6f1ff62414cdb0668c669131f73cd132087864ef1c2d86eb14276c85a2ea15f180b773c116ef6e888545a4a68f695ada1e39ff0b2617e68b53b914202458ec886f5c90d011d7cc7128af4aa3e2a7f66f8befde05de53e453d05611cdc68cf94f6678cac0ec41a1984b67cd99bc0aa8741e07d87f2ccd05cc0040a72476a649e016af300b2f4076516cf51c71d30e878b51556850564656f40671111beffb60617683970b315cfec18e4924c5035787ecb2efa52f353275751c03c9275531a09b37b1e55d20170964a03b8a1efff9348dff3667a0fb12630aaaa750ac825ce71b48e1f97977c6535e4c1850399deb6d5b4d7068d535b8bca28c6270d2864a45b69675b5a5f52ba3e62ba48ae2e1202d51e389e8c6c73e7d59416e80303ab565108d3f1540185cdedde28ba355e6e7041efa2107cab02e861286d6722b5596ff57d9e00fb2a769d12ded7a8af51958c2e95a9645ff558211104f0bd2b9f82d8953402bfacb2b609fc50c349bb7214389ae5e47d85c4ed46f5b676ef8a11c1b828e1925fc9256755ad256c325bdf90787adc5befb556b0f46fb810e3feeeb4f9145a7a867198c8b2dfc8fbcd3d77262a41fa9c1405b4c9b63e0792e2378e2fd6ba9d7314109f0eb72284e77a2446e3755fd0674cb697f1cc2671950d676887b2b0a1ce851ae8b7ac952db9328b720f4f2cd9b827640a75a2f6fa63ff285651074daac5932afe84152146dd1d9e59d13b70ed9899ddd0679a5c7c9e507525fd72043543ffa3299efcb10232baa293bbe56e64242d07420638a4d9d4245f23096969ff3fb6dcd0e5f2fdbf2635a2011c0a1e029aa9d8b15ee64ea9f48f817fdb507d51cee9edab941fb76556e3be34042809f05e2d476c4e7af3da8a573d7ed02d83a1b9f19f604976e4dc110fc0b009f85c84a70d3c582543ac476a4bc606e5d522cd09de521439668244e4b6c608dc7986fa0dbfe78c37c147169f18cac07509107cc7f7c08c95c236e4e4e03cdc29edee9f3b765b0e5066162a9bed09030d614f2d6c91e82b5b1dd7e9d290eed4354d8b47aee4b5c5582f772caca7e78dcfa3bcda189eac508734e2a9ac50998244060c63ced7d1610b91cb8a63ef1411838b80f5e2571a1cb17d03d523c27382020d7360ab9263b82d7a4bcad345cbe2f08d1e29c6cbc9f17796377d4dc1a681f235a4f74c58c85dff912c07b9805eec1758a3542ba9e7677671c91e5b4e0141d970b1bababf16b47f46a594dcb7b9015df1ed8e98ea139406ab0e058f8d33c75f584ee0bb4ac13773ad80c77f307e8316a5a53c616c37686d206ba62471bc9e14908165a89811f91ccc28d7c873c8718020d852d99388e4a885573b1d14b9c61f28baef4ef3f6035a11946a452e9f4dee25d62b78c81562f38e03df0e6d46eae6e8a37f39a82ecda0fe4ca146f99c8e4e2fdbc6c927aa35f7110397736bfc58db25c77b614d9a6c618f0408a8020d87652c0eb021dde7a46951113a6d666a4cc5095ef3b3b1e18d46c6b1ba3583b816bec000247a9239e0a25b5f051d1f8b077f30b43214319042a4b1034c51b57b5a096010936080e3852047ec348b34d34f3baee231d79cecd271735df90ca1088e7828ad999400476e29de1ad6b94a62297c8a39aa75d6f93c8396cee92e86eab48d5c43a8d9593dbae622dacc66b14770858fef2a731682e5dd5449be354b6713ce6221403b81a199b7a733eae4e8916fd07395458fecb76a65ab8b4c70eebcb6cb2fbbe281b0df051fcd0d97f86d9ab6d36503bb561ec51c35d003507d43f5a37f5b64166b12b0d8c48d6f4eefa28a49a8ab58782a89dfb2de64f6a349b3b94d5c0f0ba76e611f59933007bdc7c76d643d9ed6728674d4de15180c694a39213f9220f97a8098700c9c22e1f7fcf7b431565bd40141f93e53b2a9cb7801b1dd2506540d1f3fc8889ab1fbf1c0bc3afe6617d0fe43e7d646aa6b6ebb4daabab302035134d356a27587e9d27432ecc63e6d2e97621ed833462a2a6887b858874054234ed7c7943e9fe912f392d03227c268d2e8c997fa12279daa000fc80100200ccf047d405787d2b39c85da1aa7c8bfef5d08f32ba3b6191e67ab5300d109d0e6c839832ddac389ad3411d06ee9ff26fce1dba4f4b2be257320affb1fca1ea867491a654392e63687dd7e7cf55772fd93d97fcec2535764825a11ba35a098b4fcd92d1ba9fb8345db8202c7c48268c767d3295abfcc4a70b9aa3867c16c3225b69f2838b8155f9335a7b3158332685f6a739af314cabd5125b18a01625d316099135d83c6143b596caed2b8eeb226e687e9d843da2d1cee1c73917da8b708df90fdefa3d7305c556f940f2b258980af8b4edebcf800a8415a0e28f10534dfdf7754d3e5574ca1e39a143fba18dcaacefee6f2bc3aa8177b404326147c7ad23e487f30ae1d3405ca533f14a1019b5f1be1c3307d57db18558d2635446c51c59af7dfdcf0658f0e629e5ed02287353abee53be07756d5dcb7d41859070bd52ef478141d43220890fb54bf95dcdae2ac3e83af775826dedf74300a484cf90becd2c6cae7d76607eb27641a6589c6085f3b93fc98526768a2bd5272e212354935dd4028d5538f59f83ebe14d314b711935ac584fb9a9a2d76e9260128e60b2e383799d3e77c19ba60c78873253c77c485a06d1e0c8def8c02cd7e18880389f1455358970717d79a06b004c92c026302bae54e2c4971541f566b61a045ec25c96b5d6648d461d313854b2a64e5f4502e67519849f1d0c7b5ea8dfe42d77a2da3d83270a5881a1bad6fbd0cbb1734b2cfec5e5bd0c92011e9c53f2c4f41d90836bb39214027023567147e602ef68d9de3eae7524de05d69a9ab8a49b5c35419f5cfcaf76f82ea768d362565cb50f4b82789a70d502fc33249a63198d919ad28c639fbb24bfbd824ea34b5abfc12ab0e29c52ddbd74855071a45831ab13a146386f4715a7cb2a6e34de957473106ef0a4359ef97f54fd42b0b973183b76b1a8a46056a5077067554a3c1e0d545358acbfd66933a274364d3c1c8522f8983f8b511cfe996bd0a4ac4e8e64288cc856d919ec81a5dacc0cd3c86dabcd6347d36446ff589e7a3076c05959327b91efa85154c2593670caa4a961f683553f153cf88c6a450fc8f51145368c2f585a821ff0bed7295989a6c25d040007cf042b47ca32190a830ed335c64457c1013f00f809a0c084f16f4cecc84209d34ea085afead1eeae4228e0b0cbf1f77bc55cecf35969d1d12488c3da2d66677772516f601ed3097b43025e95efa59199aabafaed2f0fafde5e3bc2a4b09afb033124386d0f81d23100fac0a50c86a61386f5f13d6028a32b6f333af79bba3bbe652e65f5e904f1c2341e45727e57ae0385b396b62a8bc7dd137abca03a881563d37f50e4d4ff3d2d2528d07e3150d3b8d05f8e8b0d9feac446f5dc2e571bd11438525210b07860ccbcd2b3eb8542a0ca958dd1ee8972c562521d1c639534c32fc95be80f80c76c94059d103a7d9cc3809c21b6b01a438ff3534a32d4801a1cf6e963377629633f084138eb7e7ec2f74b3d7c7790fa0681fb5734900a6df832f1b34bf6189bb7b29887f9155ad5869767cf08b170f4022a804a79ed5cd6bafaa8f44bcdf41409f845ceedac2de860f71a4d38a6e4d4367ab5043145985623e575bf4a8ccbf2f625e6e99a69a8eb5719dd7d64cf9a85042f411b006a1d194e804beee1d5200c982be1608d1229b831a1a9e8c561936accf30252de235f4eedb9f3f4912828451cd57e3533cc1ae1aa299c5fe6b6b9c57704caad372b63e88cc66826852f3086fe33e17e893820d063df0977bf6d4f8682f76e9941bf3e533426cf01f81c9da81465f12d0358c8a9156621c518d834753be135760cac4d74870fe93e4e4528b95245a4ec79c99471fd823bc4f5fe3c60dc85db64cb78058fb57d6a7aac05b29de8cda5116f7b8c7031d67700326394fefdd606b40172d77d78b7b0a852bf9bf5e9ed332aec384932dbcce1f82a0e8e34e6608b7e6fa34dfec4f76700ab9b996a96301583a53f10b58575dcb5f2a69c902d765a20432360e9db438b074636ca41afa053bdd708bdb94e7ad71dc290db000bcea9a0c9608f54b774f23e8b1e194612cd7ac5e82f1b72012f2d2a95509cc9ff2d8f1faa2db4ae09283856fd230a4221976575f9fe8bcaaa9026b1bfdfb9741ec5c6dd54c10adc952cf43875143559a972fd5464454c7c2145df6551a5b02a360394aec1f664c2b257a933820ad1925f12a686b635c2d32be029cfe3de48caffbc00c1a9fe9c99d0ef8c19a170b306b6275cef0bf4a6db035eca3f4cc960545332c4b2604691f97d4b11aa2e73f5096500d53ce916b4284b1fce03da144e85aa8dde82f46daefb2d65f01e2f60899bc8bf7e58298b929ba5d8e881bd6c83ca047cbe9d55f1d832439374d5e7675168603c705489061a6c209b2688b94646ff0ef3a3c0ec307ffef6d782ca527cbdcf067