Security Research
node-serialize Deserialization RCE: An Underestimated Trust Chain in a Node.js Library
Thinking
2024-01-15
5 min read
Research Dossier
#Vulnerability Analysis#Code Audit#Malware
The tiny serialization library node-serialize, last released as 0.0.4, left one backdoor in its unserialize() function — any JSON field whose value starts with _$$ND_FUNC$$_ is fed straight into eval(). The result is arbitrary Node.js code execution.
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a4d4b6d4ade7253d06d61bf923572a6b8c253d117e8b63642be9ad8c68eaee7d4a02592bcdbd3155abcc6a953135deec61ed6729ad92ae056a76758bd1a49f7276c69ac87339404fbc611a8ce65a5027923041898e235594b1e07becc8ab80052d768c20e6889d5e88561d745cbb519a0544c626ca1179c9c70af5357b72e170a682bfcf0d7f9cc58c95cf45dda151001c29721233ef4ea1542dfc4888f7e2d125c71b3ea37ba65e0e14483c503b84153b0bd56158026a937b6becc78c222ea9a5ee0e40912685a7cc66ba678c95c9e9fd65accdced45156d2ac6ba24e354fdf3538e0d921941349bd2d43261f55791763e8b5c0dcbc65f6999f0b7adc94b90029498e51b6c176cd695edddd5eabacab42ff389d263116dfb822df5774bac2a02a3b88d176bb804fb66be626c06ab1e84d3edd3eab29e0b2ae8ba8daf3ee88fb97e2485b4b0f99c5a55c22efaf814489a462217ab4dd3db874f6c2f77a093b68f2ff3a18dfd6d215c32b19aaa695004f5574cf8c699ebae03762f2e64cc72e4b55a5c2d67f0e4fbdbcebd27e026821603ec5d6e6111be871dba3f646701d623322bbdffce35b9c72ee5c5bfbf503068d2b72d0577225defb606bd3eadb0a73230deb8ad4d3ab8ae5518a3fc50e6077f92fc397080b73fbb4cba4bc97112c7cd4661ad498ac2ed218cfb45a890499b1d80bd98e1e6e7b04fb85ead09a404b79c95ae231c7fd1a90981e8e03c24c8b9bb805c6666b75a0e3fcb23ca4acbf6c4b70f26a15c64b0c2ffc05181f78dd974fa2697326620b1f7c6c3671ff93da368ca1067ce2646aaf7e90f2acb45cdd9873973ef50db6d3e5f447bbdae8d54dedb650784468886b392e34e06a6b4490e100f3946ea96055f33ca4b1847d537e4d3c8e7e295b5b27e581bfaa4a69a2b199a77f2766195b90b461180fb519098ddd6f2816f16cfca9f3841edf628e9afaafac49a630b85334af314d83768810cd89cad6010b781665be4bf7d8cb76dfcdcb4bb8df5d225c54eb7e6f6131e281da485a365d00870508265c102916a984fe990866160bd76a3dd08e935898d0355ba0e4bf35e398a82b12a00650ff3d2c67f12715dd7faec9bafdb9a81a47d5fdc56c3befb84479d883881f2c64c6411263dcd893c3593b22e37dd063c2a5f4f823c4a23960508539494cd2ef1a1ffc8cdb526d28ad82347f653ba3ec039bac21f11b183f675e995bc4e21c1dd7efd6c90205d2f91c7d682b53b189987334d2a99e0c214f02a5df5b4f300e655d6b304e4e197b4156da33c3de72279aad9651a64de90a7dd2422b9401daf99aefa20b5371c2fcf459ae8d6b531c887f5a6bb906e16e62741d0e6d7d96a91355d833e76932370d57d8e2eb025a18c24486191ecd77f83fcdd390dce57c7116d71ccaa7986f3b5b6aebbada12721df92d3be601ca47943455ab0a204525a1c54c2ff0d82ce197c4bbceffd709b16514bb33958fe86155f9fb0537463d75348d898a6063881f02ecab6445b6bca706b16cf62e2eeaf91065812e3c7c93230b29bc4738dd97287f9236771d3e43a482741cc429c90d28eac07c52f2bd0def32e79cf7a235c5d3a13c1a1c733ec9c969aaed82714a6967164fde109e8d407ad57f6e59e3bfbd7dce92a02696bc7cb2ec42aa35e7eb53954cc1462fd4cea750dba9ad471dcdc67bbbb6a0bec764a04e6299f82ded3fe3c2d29d5559af0b1caaba7d1bd300ad2a91de1aec12b315a0387542c9cb123a11334d2272b57b71aa0cf220c47ac8f7232677f39bdaf15d75033b7abe595364eec973d5b05e0eb5b9aee5e796d2dc81914ad684b12317eeeb38ccbd221b21ce3d93db1c4be3149d4537f609f8a863997937505edefbd20eee6e0a09702f162082e143662be24b2c0e3862f7fbb4577d2e362cc75b986302bc53bfb011140910e26f96d9c747ced80075c887d5932459a07fd897df8cf4b84d0dc028dfcb6e45a9c08069a7141678ec0879059f76f83bdf137260db300c91a2fda041d7d316155be0e2c6a8ec953683319727199b9f0773cd0e6ea36e86a3827c7b4966eb196656433f7e86f5d3690e067956220725c29b3544360093979c248d2f60053c8f0a63fdc64b65ed2869250a8a544b0556d2f1e3f36d1d4496170694a63770094f470fea7b076ed747d91eb3f15bb73d520691cc09d53f7ba7c58bdabb07e9b99df315f1126ae0016c0cb8394a13997d6f8d92c0cb183fdeaa8fe4eaa89b1fe8798ed38fb0c021d32ea4cfa5bf0fbf716a7ac85b3c95944d5e227b6e8b14bd6208aef53069b4c6dee8424a3b11eb02fa942d223b7770618fa83e70f4e92ab1ff3588783e063a4eaa57beb472a517dd33efa1ee23e23b89f7681a2c074383d52d688fe7be30c3c8e71175bda3d7bf691a38b754e4d297c855f7b1a60edd78cdcba1b06a5600bb9709184c291acba1c8bcdc09dac7219b7fd0c88418d038b23203119a61ffc430234780c3c266fa5b196436619d3cb13b60108f2d4a4250c2538c70210fe883f142fe020f20fc4a344d2ef7b70e2f93227e88670b6cc1aecbbed5284d9d058203ff659a96900cfd5dde32146f13e901a09bfb6290f00375855f49851fe9e432d3d8d7c647c8f30f568e5f79d17d5a0a253527e5dff2d938e6f8ec9f3fed23838ad7bb1ec9608d4348a1bfb55556c49bbdeee5a210913038166c0477f6c720ef088965f24655b935d3ab298197d4c6e51160b5db0b7089ec5b612625856e322c6daefe48282cf2a099b7982805ca07988443f75cf016f459153d0e04b0093badb95992f51f13f3919349e5a4d54bf7e91d1a3f7fa70456ef569613a8c81e2b1f93a8b9acb19b4b549b70685f933324a9107b5e76a7e9637f11d21950b56dbd8d10e059983b985fd59c1bc26729d939784c8f5feda8e659ce99754fcb6103a18dbd2fcc5ed44b9e34a35f62842b2396b51781f8e51c2f66833a7193076d8fda2a95ad2085a567223487a6d67f7a5de41fb4b3624adbd7165f22004414aaa387a71145114cc00d67a43c8912984d29a3c1ead47878f2b7719d10354052755040471a4de8ecd514f4885594ca679272fd5aac09b3da72fffbd1fc7671740f5ee9446012d0eddd0033c2816dc16dca84830df062c1635b86bc7308ced3c26e63900e85622e41d92e12547435e7ead42b2481deaf334b8c04aa1476242da59ab96cf9ee97fed6530191990d6860705ad3a7d60e3f9fb86e55d3482a441f93d2d8b71b2b7018a8427c048f1565c4b8f83614c9f742bd1eb4770f3704ed61a97a52354c82b962359229236731864b5cd3c796018830e93fc98984217bda190600ffd2060efdda838427210e1b8308eeaa2337d48f3cd802285ce75d793d4a553201372c17e14302deb00d02aae8ed8aa2d6a8bd1657656f7b61a6eaab5e1d44f946dcce9608f34c2a3ef569051a3726fec3b781df508517aab4e845fbc3cf32d07407e1cc460cd6c5cc7378e709a8c7a28142fa535df040c379f877a3293cd1257accd7bcb33e6921c872d4c6d818c50d9e868269261f77a11942ff51b240769098368e3728326db9ae177f08d5cef2821c21595cb592d00ca9f68df8b0876bab59f181ec712bd809a08b55e2968f8eee55ebb15a82b1205f97a8d0f98085962f568a2b60a861bafcac0a2b05f4e22341e1f9d6902764258ddec7a536433279b74d4e0e6561f465df64dcc59ade006a6871f1f06b3f78248b045764354cac31eebbf7cab699b1208e05e5bd9e08331293b290dfc069ecb5a5b6e67edb2597bec34ffcdc7201ab2cd87f46ecfe3ecf2b8511746541731afaaaa76c38850a207066f3ee171baccf34659e8d9c7ab73482caa6fb2a937e831ed6a04299896f5a412b667602ee42c518a92e0a0ff935dfcd989cd6a75b2ad70fec0913afd0e513b66709a3dfac316dd8e75d2d5ac75a7d3aa563563a5377cd7bc8ded550bdf8ad17c746c8ee2a48af75f34c95eab440e86139621ed5c00e2d20c685be1889ccdea598ebb20d0a3bcbb2e951f5479af2f4d90ef40116489895019fae38ecdbe86c7aeac79b8915b7bd8ba8f8855adc82d14c31c006ef8c07928036891c9919ace03738761481e0a0fb5f0f43d6f9de2378de7266ae01560ab25487989a94364e477e3d5095c091358394e71a1ade0c334490585a45d006a0ef3a735b2a5f4721287df2314e0175f304f7130bd36b37e1b696da1a53e2badbe460d8c154bf3a08db5cf8684751d0707eb547b5152205d449a2bb1082f30091656f0f2a2c637c197600a1c9ef5791c7bfc6cae608da89940ad18bc7590b39c888b62d0bcb8a6fba7cbc68829041108b019af823f2948f89cce0e55dc011759bb755c15efed4d4c813bd3a33b0e5d4b9784cc28428f20fbb12262ea129f92697ca94915d40ff999d1721ccbeb1e27727abf8e713c9e0b0aeb3649aa26e08b4182a8acf49465ddd5b590884289ff7bfaabeb1eb0959874410c847bcd3db91405d051c4625b6584acbe629e7da768719b736b0a1bad0b87be394c6d8aa91eef149f38df7979d69a23e759fb5ebb1aa98856ae847d3d355b1ad64636962edf6b34410c4292abcd6c8f0846a9859fce8c84b8b5c440bb32e51dae2ef8d1d570e1ba45846b655b1bc867c7db7cee2ad799e888d7e47e8816e119d6d1cc84ca08766c1e4fc2dead1160d393b857333721da380cf4bc8f85585b48d1b6efbc4636ab936b5fcf41ee7a225fed669b9ffed11b8edbea40a21d52a4a3e1c4d48ac848559b5ace3ced6d7d7fa3e64f2a47a9d4c6c1df18b1e92d520dda80db05c28aa1e721d317e0a244d7763d2c3bb0052c3110c8c555e774670c3fc98ef641105ab034b3e98eb1baa8105b223ce5b127703a290b78ea8035af646dfe906f84f5dddd4fdf40f7d90b5b973c3fc4f5203140315ab95e6a4193e51677cfdd87c4449dae4f189fb2d8e7a4582e29653169c9ad1a2db32814c2b1252983fc4381fa9479d57a10c6feb2fe4eeabd3f16a1bb3d014b10303c69b79a111439696bd75be1837439721cf8b94499ed83b149afee602d604c66c32b2e065780a63db19856b320a2583bb233adca7ecef5d0fd31d9fa5099305f29e3eb1058e56f8bacb22479c692eb895688e5bf3fc86e59e0a478aa533f6e61301c33693bbd8380b8493692e3191e046e6a45e3a6d624f652673413c01e4b6fbd2c929f4f806128f42172821d8ceca0eceee63b7c23f75f7b030abcfab76178098044c6ebd9f9cbef4f486a5178effca2e0e12e16cfcc2f2866532c032cdc374952d5ac74ca76fb412300cf1559811ccf9c3b2c05cc0c8e5dcb07d25eba57dc3adc5a4a9f48bbed3dcec58c8b05e98066281f9110941044fd96fa68b5ad37b4b364a6b7e285986382be2ef775c0b08308ddbcdde099d261c64f6c463238769e481ba5ece4c3a20a6a54f63f6eff42f6b5391ac0113aac9503400b3a4006454f583c2776a401e040307456f0ef6bf85b69d7e76cb14532dc048b2af88a8d647490af2032f767ac8bad7b319c80712d12305a6c9027a2d27b583d66ff29eefb3c3c7956cfe306dea7e73f822c790c9923c4e13d51173b64ed9a8fc8ee43d176aecdef1950f477bff995d66c334625e03eaa97080b6c311de3682bb20405baa223a43d8d74f77e26cd0c466706d2855f10484d24437080adc8b3295c03dbd9e55d37d60585ed9b32846c4d68f0b25f4c597727a7761dc9862a9339170a056b07197a54e04135e13364647cf7ebe1fe9a007698d8de4aac731ed2f951f6769622984f33af16be5350bde08586d7d0e06e530f0baf082f6fcfbfb38f6fd7a4566d3185ff34e323844ba6ae2dddb8ece0ce3d3f2d5930a63249462757a2efc6ef501d48051f20cb4fc65d810c1113dd6382a2e166f0fa80789821cf0d3edf4cfc5643d03aa6a2df50f57930c2fc9eadd19871e5658bd90f9d14d458c3826e4839d177646cb9661e78775c3a3ccc57acdb036901d31bc9f387e87b8909859d53b3e3e84bed675ad1efb4f55c5bc9dc77f1de289cdc4456c7e5c4fb58265f298993d4fe16ad9eb8814e359a89bf7ee7c9d3d6f5f0257a8c11bd82c1dbd2392e96981bc33868ce0b6cfbe95b369ab5ec8a2b9f5c65e991f1e405130467e84d68fd859d528d5e0082845eff9b32b2d34e28c00ae1dbff8d0accab503d8cb43942e44abb61836381255cb75d6dc1ef35cfc1654478af8100b6791b58933c492d98a50b0321ce1f2562091ef2b84985a71054cdf882dbed7c15fa1c000133ff4c5baf3821e30138c3f181533984c21080dbf33bdcf8df7580e3c9bd1b1dcb9738517dd9b060dd4cf10f3efe6df1ca91e77e9036a84da23ddfc6c0440daaf7f7952edd92672400bcf46ae612cca71865b18ac245620db59d92def6838e2d242b90ba50dcd59766f1b57fee0bdc0606872229b84aa468469f9ccb30f7a5d5c8432b4388bc82bd1a2b7cf24c78e039f13b76bf89db3e22f91b7b035c2961401c4932eceaa3c2dc0bcadbd81e70ab9c2035ace707b590b99fce2b7d128cadd5c4938b3080fcbd2e61b82c0189b312d91bcd48682b77f1d21dcc4b29d624471eba5ada3fbf4b3243561f60f90f0b5cd2af277152031800163afce3048dabf78e32c178419cc824b22311a11e2750af32c7a3e25a1f50bcefa4e1ed65bb8cea62ecfda4d5540b8397b5d3499c8c3942248dce027a7300d23c117474549b44605f28eaa5de22eb5e94cf4b50b559e46fb552b99f40a614289a22d9f921e1142374d01f1a82e8e480a54d824299e6e4a99577cab7ba69def00bce4a4128cb1ff399bc50445fa8ce3d84d905986b550f3584e098f2e28fbbe43d9b0288fdaca096731a0ac93f870c9799bc44758f003a169dad2551719881cc038db630573109ddf3266577700f68a9eb7846a0a520d36c302608803388ead9e45130b239431e56b0c3fc7e79c199c85ce6c14c077089e0d9e601204c6fa1cb7bec3a98a2d374c78f7e5ea2c7b7da237b674d75c6800c64d2101116816c4a5cabef8be311e944a57eb7dfc72d4b4c0d6612f3cea076ee08c8a601f2b3c683e646b38287d2c16c581358e2af88b5ca1964e486acc35487b340a706d8be18e38eef9682178124fbb67da2b290bc309c8694b85ea4adfb57acc6918c28c2fc1429d521716d0d21951a772060e6ce21566945fcb27bd56f6ebeb5253753700ca919dae8aacd14993d182d080cd66d0682fd706c0216315a933a0c356d83685e7d64ebf33be25018f19b5b4a90de2bb0a1946915afa532174d64ef7a064dc857e2949b6f4903fb41ec3e1dafe53718604a4758b8810a96dde500c937eb6d74a446577b4c4d8f25eda035ae24c9f6614c5d138cc738095be5d03a1bcb5ab8795630213dccf8c652056b2ae272fc942efe92ffa974199c30dcc57af8faeea167fca385cbedfbdeb0590cb1948dfc0dc749e508dcda5a29f2d213ef430668f87382f1ff2a3bebbdba215900c8c1132742090e6c78777240f9dbb3265e4b738e84b52b60053a3043446de579e6f16875ee8926cd737b113216115b92d5544a0b7289438eac8c4be0c7846efbba82c73a39726b7eebcd67a8a291f36ae92ec334a104a09c9111e10da86971acb83a616a4d74dee2238e668be8fc0e9a5b992194cfd4a29745f8f347dbce3776cc5cd720338655b99cd184bc75be06bc0b6c4108c876e9dd3216b4e7f2464bec22c2597c7bf951798cf516f7d6b27ed8c6fabe46ada61da53a3bb5ce2a5d487811f2231e80c538c1fce92beea181fe5657e55871d7eeced24a2b18d1ea2fb4374ec7061776e25b8f2eb072a172e7f102e5713f83447fdf309c3a99129cc7b1dc5768689c488ba4efd16081df5fc8fa6f3f139a87eb2a6a2da083b553f7af2f7ce60979bfe45bb91239da791ef505d00dc533d4177ad839ee6dcac796cfd944420ec7ae85efcf481337811ae63709654ea7f8d74d16873d0e4b06dcf080f101f9946aace7d654d9f948314eaf9308d2f04ec03f42d9799513e0e34ff5caa678102ae73a4ddd791adc488743d6fd2fabf64a984f3fb7f5755069795af54ed1393ea218a888387a688e2d9f221f44c356cadc78aae83838e449f74e8aab9ff9b963efc4a7f31ec5540ca16eedc7f74f15f7e85ba9e40ea7590f5d99c54d9024d2e493eae05cef803963837fce5aa1ed10eb6a420fb39f3bc09d1b0a09482e4a9d0380b4f8fc683f3e54c982125dd2d74c7bfcef8d23ba92bb57eb9eed4f51faa229edbfeee33a8a3d03dfcbf49b4826449690847c11470f794d931f2a92d58bdc333ea53b65e0cf335f0193073a9f4a427973d2f573a18f50d8df50d09f05de591eca465da89efd0bd9b17c80e4ed427d30f2d990cbb1a85847462b79fe71b874d0ea74e050edbb07700d788ecd621b2715e66eb984b23e6a328fd1ea5b681e7fe5ed1860bf4458f59d7ad13c7280d0d41dd4728c00d23bf8a27c99bf648fcaf3fcbc38b913513faadb9e2886981449278f1e7e9576762b50b4d29b8201c8d0323df0b7de50f04f73aa598aa22ecafb3f43a16cbe25583112889086389758c3a007e4d5995949c00995941436f4f2217bb97f6a0a1290d93fb362c78b4bb09e8379fe93a680cdbd28560f936eb5169b4c28505823bb97345b98db4d9371a1efbfffd6b5ce394f3a3536f43321bff035df96202493dc2be28280661b3aca733ee3e53501207a38edd733c66e2726e942ce15ad83161b889dd98b530c95c7a10b29670d36734084dffb3299fa9a51f6efba2d5eeab2d30626d49d7beda263625adf3b595a1ef79c248a583e5a6afea75a304f1533d5e39a4afde8759b44eb4bf87c131db153b1884aa7c2a23907aadd63262b6a8dd80038de585b2ce9617a4c318737e8264c4e92f042d346578cfeb134ad5fc5bed5c98b65665562a28e9d1bea749e72e58e021981aa59f85b811bf3c3b13cf5b9f7b9959f6a2df37880916f1574c23c943102994d3dc95d58f3ba5a0a37bb269c7efe350b0e7c5dc82c6ae7e44ccc3c5e38ccffe5138bea6d9602520113713fcfd5914a1c88fd0543a7b256a4e1dc18f8f8bd80b97e044cfba0b0dff5695830311172c5d4609efc26e482ee32a9aae495a656679cace8c4be6ed1ba34bc86fbbaa7354af9f6ab4387704404b894706443dfbd0453a1474bb55b0a3c42c110a38865e75a2b948a9181bc7a85622dd4bf2a7238afe2a11ab2f31cf1349451d41d67be2e0bfb18559dd2ddad396e33f9dfd373963d6c317f75229e7f50a28af0eab82da2468da4bf50ac7c0d0762877db03c32fb1a2e9fcab6d52d25f93a50511c63504b82429ff6c96a21acccd78ea68c520c2165a0910727267c3d0e3d35d3eafc0136bb72e78d792de07c261209441e2344ab7dee2650d80fa038f4ffab72c65004f2d15d73fc3b9bb4db9c0596ea56322d0d29d358072a7bcc7496a61c674ac75ea72050759ae85b83a19a4195f40bbcc4ab87a9ae3a8275500217729792e46d0937f6b358fd0cd1f0536d82721e47147ddd7ed4fe0e081447d52948e4380a6d0874d10259957a3ae40cd9a6bf699aaebed5025d3fa853c02ac5d0db95986f169af6616450e52abf6b252b867a44a3d15a7bedd849cbeae01b13334e8a78fd32bcc7127d4fb3990969aa6be4e0d3a7e9c3d6e5c8eb1732d6f8346b44fcb94364d7a97733f84f7dd2e6afba1aca39a288fa3f4a34919006b39c97c412319d538fb508d0d1c2ee28b530cb8906f6d4a4bac3173535a1aecfd5ce96e6cd842312deb67328f9b5cc3e29853dbe1b8335c9dd383def8996c91df80790baffbda12eff16e2fab5a1a3f7181b961af52fc6d762b6dae74643839d165462a1b1be1b0c41a4ed40e8015548bca73135a36333f8478eb05dfd524807ecb75617bb5862c0049ea25093cd68af5f48a3b5dd99b608a9cec95ee774d6f5961282c78ea22a3d27d7b962d47b267a4a15735f1f5ff8ec48fa340ef64814a2f2cbf7fe9c43428298d6652c125426b6d68034ab1e864093c41fad0943dd0fd1baec81ffdcc4c8317616471bb143d96a52b02c20c414e5bc9002446319cd2a59c8c548659aae5b5188d19f030218104108373004eed032023f2089a05c3b2f8a2f2392fa774c35df7992e0747be71f7804df6414cb20974019895e2b5a936011e93b920b6fb0c245d9f344b84f0e74285814e912e5e66760c8f7ffcb8c6d36b598d2103d75fe70df9e0ee064485bf355cebe30d98aff04a0e8da1b84057953eb6ae1d803532492bf3753d9f3e62c4d65403d49adda1b112f2a21f479250002ee142461b1fcd38d4ef8f48fd6e53a048369c66e9b4108a98f6ebf0c577464678d24ea3f478021b7ac63b5e6ed27fc8bcecab42d85099842398467591f01ee3dd143fbe4d4a7f4d5624193ce34fdda59fcbd1d5327bce24487e71c5517d5f8f53f7846d8465929d2c5bb3889c4ffc92f4397406effb431b230188c756f47619129868e434ac3a80d620ee6b56c4e7f2824b283101d331f56e040d1f69c82a4f91233a144a4870a00b856f0b0caeb7047083adcb2d9862d88df6f9d7723ded26282c7089da0c4572c1b2fd1e3b68354fb3b71cecb7ba9c5388be4e9946ca17c4fb009205be1082228585bbfcf57064ee62153faf1e2b35218d8be56e13bd6a9f8868712d38978db2675a06c2fc8c5bd572109b01d6db161b019f0241939018b414ce7d59300ab8f4063006577277100434ea00b42db953567102ee6096169319be99157cf0daf2a645cf310fd1b0b4c4e710b93f7fbff23462e0c51c09fe6ae55cbb173fb991a2594ed1c4221ae3d82e2b540d866e36fb7c77762410714714746738b51f5434612bf18024e9a16e6000814e5188f773476a3182657aed5fbdf3ef59e52535db4d60ffbeea0ee180c33ee976c22de31e39dd8877b554c535b3546e72f27ac9c42e7fd7c50c58171d1144ca79f5df8e0e23ead1af0737338ee95647220aff5e0e70cfacb421feefb233995c69afd55ecdefe5ec95d0f6ad7b462443aafd4a8eba6b922e3158e54f274df2cd02612f348103aca3bd1d43fac2a3c6170b13a73b0e52e8da756c5fd6425a2762b784c5ccf6638defa1c1a5c9575f842aec1b85064335823511a3478b45797dd26abc45720728b23310f9e6d2a40f76747de45ad46486715d2089ae31c5c7903cc551dc66e9422feb2fb3c087c4e4ebd550af0e7bec8b88e37c281d8422922be35019b3e115e5f522c84a358779243fac0148d15502c6e9c46bc4673699f3a5c38c31d4be3bd593181add5e74b6a81d5628ef9fbbb7e7e9a5a56f5800b4b139d0dd257602cce0f4e53bdbbe42f1a3b5abbcd703f70aef7f36c96dfb62692c0fbf825f1dcd1019285eb6346fb33bfa3f4c35310d82fb3f85b30d248f584590c4c175f0b73098fde86e8057b6075b6fcc56b3ace29d371dd7ecba5fb8c8fce6659eee8931086c0f6d