Security Research
CVE-2025-21298 Windows OLE RCE: Plus-Offset Triggering Use-After-Free in CStdStubBuffer
Thinking
2025-01-22
6 min read
Research Dossier
#Vulnerability Analysis#Code Audit#Malware
Windows OLE delegates object reference counting to ole32!CStdStubBuffer_Disconnect — the attacker crafts OLE references in an RTF document so the reference count jumps via plus-offset to a specific value, triggering premature object release; when the COPE framework later calls a virtual function on the freed object, the result is UAF.
Unlock to view this content.
ad8d9422966c73fee42096dad808c6448a272095349f41facc28f3d18d1ee66a0726fb5aaffd9271b6702e0ae53f6961031443030e63d37842b7356b4a67d1f44b648f709f84d99b1640e6f7a87a3d44129b61502fc0c5c728a88c67798e6cfb7bcb30fe880464fad1a2cf9635735fbd6e964b402ea4ed27e494f7c87c72f1c586b333a4d4b6d4ade7253d06d61bf923572a6b8c253d117e8b63642be9ad8c68eaee7d4a02592bcdbd3155abcc6a953135deec61ed6729ad92ae056a76758bfc9dbe3a6985cd8f376a1d14ff3c1ad5bb4a1f33e03004d1a1364483aaac51f7d7ab88436332913ae6cb865e94454a237e8456de375eca64ee0d7ac3c658da037767eb67ad88fadb102b8484bea8a16ff5cd472e5c6d5c1134ae62867473af2bbdc5dfd17f814279ed0faf550e3c750e74789b1f694ad57b500168857b588fefcd2f33eab8e91e13dc1bbc848266f2699e95d9fee767b9c1ddcb1863ff9d22bf457d1682343ff5820bc65605f86c107f10577c0e2af8f1dcd9f568fdd88516339b81b9016c589047adc177c47b4895cb12b0a0e00ab45fcd26655e9ab8709a0d79fb87ad253fdbc124ec9c5ee568f53bce22b1b7023ed7338968aab6e2c1e3fef9a38ef595f243061413d5cce31141a1e88110c1e1626e24bad128ec37eecca46b513968f2e03a18ded0de18dd3608a2ea821a53447dd8c36bd7bcea3d279cda79f067594caecbd62e4b04e3e6b38b32086b3f6d3f9c8ce61417e86ccfaef31c7347793e25b7c2fba2589b28ff147f8bda4a43812126da477621d1af0a1ec8e8db665d074ef399d596eebbaa008d3b954f2019ca19f1aa6600129ed8c492a1db4b7539c36912d48dfe15fa2f8aa5128b0596f4965396830275780c8493f4d08e055179c757f33ec5b04dda98579e52ba4cf9f8dd0bc60c2172bdfab0ae199be0d1206652bb5507b46b5312b631234642dfaa1a83231d7e464b352d06273ae5fbd42a83e54f2ae00679af3ddcb3fffb4e9b8360da67f016a39babf649bcccf89b5eeaa0593b0840853f77080fc634350797b155db8a44a96055f33ca4adc0284d6d0e33836c29154477f297a9ae5978a9f4daa664362e57589fa2611a59a964288fc9656819ec38fcf0ae9a44820ddd9abeeafc0ce874ed593af97e40cf7994079586cbd6000778086fac03b991d367c98e940bfc94076d5e20ef584f2538fc97966365531e0c861c19205c1c2905facbb6934470514b9f470984d6a541d396536082dd9c12f29fe57c4de00d53a4657829bf0624e936abcab0f2b1e55d139ce3d46b3cf5f6502d8dbea73f6836c555187c99fea4f229783ff362d16fdfb6bcf46ac9b9336c5c926a1500c8ee1700fb98c95a7c67e8a506177960b5ec12c2c373f158507e2e0c8d1fe5d1637193d5d09b001088aa3d0f1a7955aa8d906f6c9ac7bf33100a0784dc595c34423e393f30210c533e0202c60b9f917d2295b9c529fc4be9176bda5f268f059aaac1eee6110c1987b0f647c7c0271d1b95354b3fee519d6e21385c5d3e6094e7124fcb72f6663b6910058ef5a3135316d34ccc0a7a8223bd328e9cde88bc7a36148a31d9b682266b487de1ffd80f7c18b52d30b2019f4e962344ae47702e21acc57108d68b7cab8992e9e4b09109e52d51bb5dc68fe4391fe9b714365a6332359bda9f6463861e5cf1ad7f4ee8ffe01cbc79f1396db8c73d03d522363f952b1c31a1577d989b2979992770077058cbbd544ed123d45928f08e7800beae1cec25f495b9ac3fc096e436180d606987fe549ef6cb7c526d660347de559ec71e34e3646952aca1bd7de88baa238bf91fa8f807ab70e1f250c0578d47799585b155d6e5a55313d4ce78acade9878e4fbc5c77dcf836af3be49bdfd896ae442a6fb8ac4f02c315802d9ccb51a2629315a565100c878e516e1124427663e52d28a209ed709cf5290b707834ed9289e7486603386cf046556ea0ce6cc9f3544fe8d6fdb6a2c5d29ad3d413da97fc2516e0ea32d1b7003f15ee03a9fd3536ad0f9b497dfd0de8a86b927c565248d9fbce5fa06a19410e6e546cc7e1132962b05b200a6b21f2f4e75028696401f17fa93113b119b8b00b4a0430db44cf8e9901d9cb67349dcc8cd711168c2d909acedce9b30e3add3f8ad6554eb88c9f22e952137df34c160b9f03ab7edf5c3c62d76678fe89daf811d5cd040308aaa9c0a5bf91778237936c5a828a0e37cb0375a96bc3bdfb3f330c2baa196e0c10336186f7d57e51552100334c7f89da0e417e54928dc82cd530754732864d2d94c24f28ae393b6c0dcb09240517d2a2b7a1245e0cd21819d1a93f310d541359fd721d78c215db18fabf46a6321a068a821cde282fe392afdab307ffb883e600fb1466ea461b2383136622a61c19939db09e5c7ed2a1dadde7a78d09bf69c6e589a9c564ce60b69ae2ec56e6226667c84c2495db085b766661980aac3008e1e42766b89e87b506711969c146b5d7786f7e252b76c6a8692db0f034f8ef3180652a1b7948bb45b8bd6da311842ea0a1e42ef4258ff3645d603643c2876f21dbb5ff7ed2dba41d7db9f0c1fa2e0b28b058eaced4882bc08d862ebd34dcdbadaa210431bd991f500068029bfcc5ee867ada8279cb339f81d041d071a566400e9873e09c32335bd3d4c27aea5c597d38679d31b1266b13996316370fe25e9723491fffd1f14ebd2c0232ec48772f3bf6a21f26c16c1fab565966d2a7d5b7942957974bcb1bb6669bd78b1bb44dd22011281cb042b69cfd2acab6097bd382c32b5ab1a171869091cd405d4dbc12944c34d37f4f10357b25fed4f5d379f5bb6732dfe63692c65657fe8a68c01336e0f6fb1004ca9bdcbcf4b154972f3c17765839edd832fe009468ba0d4eb822c2ef2a8ed5c5c2a65b01a5da126f88a2007a357dfa20717824e1b0476575e2a180f3d42805d416c1c711f446f01be2495d7d1518b04c73a0b05894f31447a3caa953e4b9d753f2a607017a3e99454cf252c419eb924b744b93a7adb8a185060090636e1e933025e80b701b3faced63771c930446f971f3ca08e65fdc2e8310c6865a90223ad2784863af5186eeec54d7d00c4faf2445e4c3e565da17e326f03bb54378df52099df45bacfaed5707728a267c922d0487dd2995e87d84af762e2698efdf6a7b0ae305fab56b0592fc2b2d7111595da6a080b4045e0a03c14176f861cb569b4f29acdfe8953978faa17686402d435770034f430a08fefe8c04aed75bc2866a8839bd53ad19b3c470feb9d1e75644741d4ff1496a14daa8c31b298c9a3f887d85c88100e73680755dcaa56b1087c9803a758d08cc73304dd52257692e63e3d7d63b21948ad83c508608a90e390e3be1df358808bcd8d8cd421e979f17295c6e4c87b7c61f3085ba6e55d2592c442cb4e6848c330b7f3b8e6d2652881f639eb5ef3c46ccf85cf803f66905741df12fa26b49300986b52c2d8526626a61a56a779ff4a638c731ef65a1eca5203f87505914f9d64c24bb8fcdc773685d5ac712fde67632d19066da1a2040fa4c7b3b4743770c2c2d0dad5f148ab44404b5a7efc1ed89c5f45557353d3e27efaee30d6203b169ebe2ed7fcf6a7d7fcb7b46067568f7c2bccfc758881ce6e0b77defcdd973d07d1bb3c35d5a9aa68d3f31bd40e680ac9d69fd0519f65fc778e22bed3223c33472d1daf8be276e30c37fc3c1df1f801398c1da54365a3ea0565fee12be466d8a8773857d28055399a3532e569586e0da5d380719b8c18417e1f3c86d51650cce7cffd3dd7f2b8a1cbc8752ae908ddbe952b8ff1788ee684adbb9c6a78a91993d5f97712afc7ab0fee9183104b1b22a54fa3a38702760288dd6cbfb324b2437f4414f137860ef6c9d27cb8addcc192de49011a57834217285065b203b5ee52ae8f2ba8bb98ee23b8c40e1f514fcd80c9fa7818dd26feea4f6baec7dd0239df0882684f87d0bee3e8c674ee1f03acf678b9a9bca0e3216afbde872208216613f4ac6d23c4feacb30629fdeca6fb324c7dae9e12a8b27c905deb50acade735c0234347e02ff03d21ba97c0f4ee135c883d98698b36b2e9261fd1713daead45ef55f0aa49fef116cd2a9136d59c91d2067e325423a4d6d9e6889d6df1486d58f17c14bcbab3542ac73f815d6e5b440ef2428631adac207686a9a91be1c80db8da682bdbe545458a4f2af51c24092b0de9b5ee80f0b5f91c1019dad7dcbdae871718cb4988116d6dff7a884cd71a8a494593fc210aab707dbab39c750dc2e87c7645f133386b481e652040a9ca1d2477ddd6169a604044f8f4994818198314e762c215082ca8b3bcc9bba0656d501205af3165a119843a0b0606540390f0f2e3f77eb7f212576974dc31748d17865eea58dd0732dc499f0ec61ec834cbf28099262f42e0b5bd67e32b076a147080bd35fb5f850c2f151d46f3408322a693d1b7907fc81f75fd7cbfbc2d7f608c0898c5dc8808252192c8d82ac6409c68336cd70aa698e9246558a4294ab29e9858688cc610aa48d166990fa1ce018ecd5d28d43ab3a33a0fbc2f90635c3ab13ba29d42d6f34a47df332d1ce81954231f7ccda5f36c3abb5a66b29f8e1ac0fcee2ea84d62999e83a14ba710a918a1a4a50cc4c48339b28d9b8a8bab0e2ed1e439d5010f35bf5c0d491121c3a005421a52629ede629e7da72d34afa31a7a4ba8efd62e894889ba591eef60ce581f5899172b43b26cfb8f0acaa8ad763f00697d342bee170753637e9f2e74910cf7a7ea0dfd5a3dd0ffe55fdf8d14f8e1d4206a522538e81e89f5818040bee6c5bb65e8afe806537d8bccdab31acb8bb490be7966cd701ca62a329bd9c7688dbf13fb481456e581daa7d40a0815ccf801fea8c18c4e0c949ee25347957e601c793c451c9fe01de8549f182e27ea481abd21e49b87c677f320368aae594319dc4a78188bede953aeb2e3427a0556752ed9d4783956085f759ec4671e24c64112d3a5d6c332760b4f0802f78af222acb1206402f2983f957b17eca699a4b7b6d8ba736b99040ad7bfb5d573809336244dc8e60689576deb04fb440719c945c0cca09f5c9cf7ad7920f707a410603b995f3ac4b7707243ffdcf685f13a4f6f8879607840128e7859f5059136a2aeccd2887053a40459833902d0eb854864ad0042bb267e5a2ab88ff700ba0d218f40045d3d569e07425d095e950b2153802d13cd483be2cbfc43b46cefcee17d40fc76c34b4f279644f31c703d1387b146497a7332cdcb5ebaa4c12c972edb51b9602e48f25d51daa7cfcb3dc714eb45b5adba74caa3cc188a3aa9416509ea622b8fb4051d62c85fed96c15829c6a7d71c7d707e2a556200b546e487636777004b8b6c3ddb212fffa0618a54a546221c8d4dd13cea62ab6c97a32b7f8149fdebd784bc5c86b5066bf9f968ed6b086b31a93e5dd241455bd79f1c0b2fa0a62c36585957ada035fc14ea726a810762fd67eb534e5b2b796ea4ac9dbb6daa5336ff8a1639dadc5befdf585a9c49fe858c4e31a9940649cf3014c741c4dcd69ea9a419935563749237f28458c3c67e8fa671d0c4d2496d5cc975ec9280278b6b04901d55bc5ba9d7be1631a09f2e52b77aca7c44e431c81bb4507a8de4b6f4caeb6006448f89cd5777b3d5f471058467605f4aa8cb3da2377c10c403ad014a7ad96bafc0e387a9f772b7e7d8da184f00fcc1241862f51b48503722620e091db36b4c9f3b5d6cada76b63a23b97774ef24c6928415d1b541c17a7daf0ee3c6c99ff23d1860fbd9e6da0d4a64eed05b66907e1a3b17e5aa6b89bd9b3b877e88ae651f00fb343a58d3915e6de222d5c43133663241e04ac5cd5e2c001c8fc47698903decd745c47077400acff77909c2c1810f65a9a6fe2253796198da37996c9f70b24cbb6297bc470a567d523b424d8e79db60d2a74e6d9fc0e0e2c463cb0bf37776615f2bc9d854b52ad21f37e20877716a0c08f73ba297a59fe1e1fef876b5d96e5967961f44ff013a6301af6fb6c6dc96c54f757415d5810677398f66393b68ef75f816c986509601f5d3678c16d25d04b7177e7a176742ac1794820bfedae6f4dbc37e2151a52e77b57ff619f86fce89a15fd71e6a59afd9f2cc4d54902228ab80d8176c0fd19924a88c3adeaad7c277cdb070961636d3e718719fb48d9811ff41322b97f9d865aa1efd491cdcbbb7c5301ffe938a995761735d4ab8cc3ff282fd6906bb7fdacc9414fd5bb2d2bb9117f5360b632b6f96ed51991d0fbb77fb97608eb278a5d8acf9f2a48ce36db64cd1faafb0de479c18081c043946639b9fac9555d32286d77b2953d0b0b42c1e34ed9800f4658ee3cfe88ce00ed2c644c84761b6e0043c3e09169960ab9516b215eb782b17d8b73f215aa5b2d26dca958dc75e9a2e0de5f45f1c97f63885ae173a054cc3c131af8cce12cad508516feaeee8e7d9186b44a86f594760d24b730c0fe233a2c681f14f1d2a92c2fd89ec219149cc865b48decf1fbeffbbd97bed127fac4663d1867885a46d410ec9ea21345af9a6727b4910924fa02d23cb60866a5ffd7e0373860c8151a3096ce2d268ea4ef719a64815751e1981848cd066217a28d28da003922cfed5a117614258c761b2258fd928d6bdbc9374c292039910b630b0d2dcee36d1dedb0dc6801427df932ecee6333dceaba09583ed02b9811551c8396e5a4281ebebf99d28d8cd54497da71301ca9bb14fc2941ec82138c39bfcb4e485567b7e95ddaf946d1060a3e2eebff1ffb4292176fa1e90eea38c30b771073b36994f64fd9f260cec964cd14ab347a7cc924634740417ec6943e728783238efb24b8ac000dc37efeacaa926cfcf514401ba26231c239ac891d53a59cbe63ea3254823880e5f4c10b65118fd93ad46f223b5b84cf7b40011bb6294796e9ef71d6d42cee135929a5b42462d4209f6fb678e07434ede226e982b5bd66d5684308cf8be03d4e4822bcbb4f52f8b85696fbfb8dff367b05990a64cfa3d253dc3282fa4a446cbb63f9ea781563e7eb9a38ff03fdf74c2c50e4afd48f175d8973a7c49ce1f906c812b717814d3be32605f730cb3bdc6a38e6d01530d78d17a0fb95c41f0ed9b4b1107298f55b920423998a1dd04f2c79b2912dc6544dc49fb6b1617d7ec55b7a3c9afdc36314f3df7f5ea217777ec1deb34d74d7306d30e7c52557e16c1a8c9eca0be0b2fa63a5cb956ade5375594846d276ca25353cad8c1344c222e6f286c35382e776a568dcf0f852cf4985ca78f400527e87e21030302657190ad893efcb927addef31bac72cf311e1aa309b62c08f9bb16c5e663dc7213dcc22fc042891b4b4799984351fc33181878b75467851e8025f27cb3ebb80608166342838a8cfdc2f49a02cfc58299c5d8239f213cde099a696d2de7a243231fcb3f8abd8e46fd76e74643dd40ecd4fc53a7f84d721dda53e920602e9360a1e973d797643416e3adc37be00fd9eb9175b0c3c617a5759cec46ea2882181a936eb8840c5e2a63f1d299b612fc0c4ab95edf2904cbda38a8628b82fb4203bebdf8aa96f9790cd115338c622b43f7e16e639421ada223a99a5a8886139305ab8fbae7582b8e6d43fbcfbdeb569382435ec48fc8769e5093cda3f6d96c746be4716e9e8b38701fe5a6c091c8b6148608df14593468bae4cbc27c225d81a076749c8e1ed6626f84640aeb0a745fc8128a73128f12c0c82ee8199f7c3e7a3c99017a05a48e3c8433a9c8c4bc073c06fabd9a6a30e59a2aacefae876dc23e183ab9d9b4010f5134779a6e1c6b84c9d519c1c4fd58bdd022d46460b425e28bd7e8a5f7b57d38b70b595373af171c9db9277c8ac667503e3b0ed9a95b57c617a329e5e68a369bc42597d3753f5b7f2e66f7c12738fbc0c8f115ebd7577a747123e2aa4189b905a43b8c05e1f12eb58fc89d831d6765ab5f14a33ffda7fa954805ed68540ccf3d33f9ed22a2af8415b7b72c66ec63617a3f24b6e3bb72497d7a7100235704b67457a4ad0688a2996da35833a03acba68feeb60ed559436c8ede8582baff23af3fa6a4f6c04d2b542e68e5c183228fd5e144acce2d85bf95e81b1711c6551e665dcdbeb8c0ebac7d6ce398433aea37bc56fff6ce227c16be2f63ae08a969c168926c2ad6e0a073c60e0c031e901bd2ab2f297c93d1cc05e5ee259c572ecf05fa2997ca10245e27f950a178974ba974bd9cd09fd38cda583275d2a8eb7ea9c8e6f57f465474a0b8ea17f01b9fe72381cb878ba68fb7c2f924ff0f2d29b2d1c6ef15777b078068eaeeb9f1998e35b3467d3bec3a0dca2df4992b73f6157f83bed55cb36e81facfd0509a114d32493ee557acfd18df392deca0fe089e1afff624af24fcac0bd0a7ad829fe8e5ca7d094c81d684bacf15d00b37913274c7bf82fcd22baf36b563b7ee90b303b7618fdcfef574aaf6db22fdbf5ea9c7610c55337e801f31e79bd9238c831f42b8843aab14e90c3fd045bd152e77adffc07e99744d0a3205bc049db91a0ce142f38ca9b668d989b6cdd8c252ad0b42de368b002e8110b60b8d8f7036dbd5ac57cb1e09af4c403bdea370068bc6d2da28b82e4929b4dd1139eab629b81fefedb9eefe59db8a62b809e568dfa952da2b11564dd11165a2486fef8d21dbdeb542f2ae6c93999d9b2402beacb89c8d248221f62dcfdef41b3d0af20b0e7b9f063aee360cfb2238cf4647e473b782ad21e0adfab73c1898ac17970e3acf3919d833df0d17654d1d9a80860a825e24272f4c2313bf8debc6f97354fce721296cb7ec097edf6ee9127c168ec3857caa61a91535fac6d00e8239bb7345a086b4c1221f11fcbaad7054fd94e5bc5b75417e03b10b55e069055d3dc4a33f334369aea6bb60be2355511209e0aec679792b8d3329d307af4fd23c70b8bfd89abe28cd0f7c38b38160d2383e1807db830fccfba71a7fe0a29bf9a92127602268c2fec1212270a1a0fc8daaef6ac248b595b6a1fdec76b653fd55265774cfee99c26fd075e7e7c88832941e340a8ebb28696f9d28f19c3f60bda8df810885a48cb38b9603bcc604176ade2deee0321b2d276b2cdef4171394ec42a84c87b84777586f14f8c7a9bb41ea6263ce06cc12be85c4ad0cbe373015dd199965d04ef0a9da72931316cb5708368b480a6b99f7c099c9c025fbe5b47cb33e87bbbb11d5a1d4d78dc8e24c0182e8c8fe9a8cce7d30abbdc9562372312e0ebcb24913eeeb98cd493e747823401f8d87bfa5fe56a0867788923b6aa53dcec8032c1e2540050faeda7c4e72862acafd0a576f6967e89fc249e7eb0ce611ab16f9eb3f75aecb6dae6c7a0e480a9d45164d65a993000b0e70bd1cabbfaf4f5c4075c12030b2b30bb31e0089cd2c6a932fc58300c4fc3d10a57664d21b46440446986fb7b5adbc9047f7748197b1f22bcabd653230d4db05b2546ce0ee4a65ef40a282c73f3ec209fd16d58dc6736448b6208011d594a5f2b93973eb6fd0f33f4091783b8b2c798628d2895fdbd676eb70d871d81b5b561d6f7872d493f89a710fd6fe5c7dbd6763db86965cc01c45db0ab73550e1d1a15923a0dd1edd5de1b2242d1a452b03da31c9aaff5ca38747529d546bd2d0ce26b038bfdde77f5a0a8217a86dd17b790a1a8081a32852ef054404ad8840b234dfa3a42652002b6b7d2c782984db3a3941a9da895c4738da723ead5168fd84ec4ff5a5805172469f8e5387b6d29f040d37db0cf1b14fdd9a35fc8cecf4e14f60d8ba84314ee45f1efc56d6f07eaa244a440742a4c79805f336e17d750fa3a3948687b9b206c84d60a8e4dcd908c87175d8eb7885d3d6a6a55d52206d95272a1d92b330156b8047b55cddd06c0233d821389fea986076f0b0a0b09861174640b31341472c39c97c4123198174e0568f480867fd994e4283bd43236c79d23166555b1afae746a7736d895f3f65bf293f9e9b58def4d05adeb2ad3d1fb7d09ad2fec96d91c2866f0beea38450adb51d2cb04b18237181be24ef47f0697a6771ae6b627073d37c4a3b1753a8b0d10e0d944f850b56cedd6f025e3c2d32d773ad31e2e470c231f7520b76a39c755052e2380f31c286eaeec56218f28f6d9b87a58aef2104785234666c1ce036e6dd397d917e76a57ae8bd5b33b8c4e188ca8fb21daa2b80186e2cf670f8db28643590665e91284d66232d156590de0a4a234efccb9d24d0d902bec85befd604b61b74276ffa3c358be43e188d034f2c008048231c059acfb490d84c864bb4e9af09cf7aa36437845a599c2b2a0bad177329f703837be9e5b4f7d23d60a075c81ab2952f1b46b077e4d32493667fdb043143cbd0efeeec245948d0ea6fbafe126359802c049fb5ff5f85981a913c5f663a4ae05dd8f5d1c52d48973602c15daf549cb5a0524d8bb87f16bdf2128eaeb4551ce1f2fd1411cb70a7bf188a3a615f6ae5711c996f27c2d7470ad8cdcfe8a15ce1b80518db421827e0565a5f33c93187afdc13966e1fef0671d27af3a60ace9efae6f09939414a27cb4ebbe967155b2fc1261b4bd270c0bae1bd44917f878877de131a91bf58e3890e3fa71859621e6c2b162aa01981a68bc1cef5326cd96d4e622ca1057d1bca10a5c143956a84de341cb883894ff98ea53d3b06f0a64d0d26188f8f4bba38311cb161a968f97f929a25f53c59d5c1e7d71867360b903cf47e001d5c67937065c576685a4a1523cb5f85261872e1b74530b68c873ec2309bc0c1eeca3f78cc014e656a95960c1169cbb0b640683e2256a4b727edb7bac01496f1539540d30cc2fa53d41fa2198624858df5b0e47972ba00032baf0b2779218981b67603aa6087ca3c332c239785b07b130380f28546d5625e884e979a060744921d4196974a9e3bff31437f05aae10a2c4377115b4d2e61e44cfb60965f4b3441ed7dd3069f0ea1945418dafbeaa417c83c12dbf3fdc4e613a97a67eacf2f26e48f1213b07ba05cad1835a587ec524a98872c0be9c57a215306846965bb6d6e37073c141b46796629f61f553e2f3eb8de17fcf16e760c880f468ef57f017c3190717aae53f2f4a540a03339d64025fca9ea4cb5e172ec5d7d9617de2b39c89275ad54c527b8526c3bad23acf7132dd1d9425b1601170dc56df583cb262aacdbaf432629cb8c42563a00e55e0e6ce990ee4e97b8f87cb81c2cc4f64583efb3dd86c2b3a37c422f28d4c650c7ba62963e2a17e600265fbac1152e1f24c903adb0ad5c7ff2cca5ce172601b03c1301bcdc7f3808d8104c6835a69bcac5f4370e1c5ec1aec8040cc57eec17c2080f26847c0ab94f8b1c2d70c12fb05e278bcc47611bb8eac4bf15647061a158d37797670c208baf3895899627c4148e27ee4928be22b98189d8b7e38656a53375c1cf9ee57a2e0dca32d326e11e13e8a416e0ee6ccc513a8a303834fe01479d5417d2efde288a2b3f91e7becc9978d0a176d8950556d7113db0ed1d467ce7d0ffbde3efadb520484fcade87d773e8c4cb7bb13b6b7d112dbff720