1) Note the differences in documentation. The DS is _very_ terse and mostly describes _what_ on a _very_ granular level, HS describes what and why on a much higher level, includes a screenshot of the expected result, and is mindful of backwards compatibility.
2) HS doesn't make extraneous changes. DS changes several things that are clearly stylistic choices in the original source, or where the original source is using a cleaner approach. DS modifies several of these to fit its "style"
2/
3) The DS pushes the state up to higher in the stack and then locks it in a mutex (the choice to use a mutex and not an atomic is… interesting, but that aside). The HS just passes the result along as part of the code path that was already established.
HS's approach is _much_ easier to read and more closely matches the code that is already there.
3/