{"ScriptPreparationCode":"function pad(hash, len) {\r\n while (hash.length \u003C len) {\r\n hash = \u00220\u0022 \u002B hash;\r\n }\r\n return hash;\r\n}\r\n\r\nfunction fold(hash, text) {\r\n var i;\r\n var chr;\r\n var len;\r\n if (text.length === 0) {\r\n return hash;\r\n }\r\n for (i = 0, len = text.length; i \u003C len; i\u002B\u002B) {\r\n chr = text.charCodeAt(i);\r\n hash = (hash \u003C\u003C 5) - hash \u002B chr;\r\n hash |= 0;\r\n }\r\n return hash \u003C 0 ? hash * -2 : hash;\r\n}\r\n\r\nfunction foldObject(hash, o, seen) {\r\n return Object.keys(o).sort().reduce(foldKey, hash);\r\n function foldKey(hash, key) {\r\n return foldValue(hash, o[key], key, seen);\r\n }\r\n}\r\n\r\nfunction foldValue(input, value, key, seen) {\r\n var hash = fold(fold(fold(input, key), toString(value)), typeof value);\r\n if (value === null) {\r\n return fold(hash, \u0022null\u0022);\r\n }\r\n if (value === undefined) {\r\n return fold(hash, \u0022undefined\u0022);\r\n }\r\n if (typeof value === \u0022object\u0022 || typeof value === \u0022function\u0022) {\r\n if (seen.indexOf(value) !== -1) {\r\n return fold(hash, \u0022[Circular]\u0022 \u002B key);\r\n }\r\n seen.push(value);\r\n\r\n var objHash = foldObject(hash, value, seen);\r\n\r\n if (!(\u0022valueOf\u0022 in value) || typeof value.valueOf !== \u0022function\u0022) {\r\n return objHash;\r\n }\r\n\r\n try {\r\n return fold(objHash, String(value.valueOf()));\r\n } catch (err) {\r\n return fold(\r\n objHash,\r\n \u0022[valueOf exception]\u0022 \u002B (err.stack || err.message)\r\n );\r\n }\r\n }\r\n return fold(hash, value.toString());\r\n}\r\n\r\nfunction toString(o) {\r\n return Object.prototype.toString.call(o);\r\n}\r\n\r\nfunction sumStr(o) {\r\n return pad(foldValue(0, o, \u0022\u0022, []).toString(16), 8);\r\n}\r\n\r\nfunction sumNum(o) {\r\n return foldValue(0, o, \u0022\u0022, []);\r\n}\r\n\r\nvar hash1 = sumStr;\r\nvar hash2 = sumNum;\r\n\r\nvar object = {\r\n glossary: {\r\n title: \u0022example glossary\u0022,\r\n GlossDiv: {\r\n title: \u0022S\u0022,\r\n GlossList: {\r\n GlossEntry: {\r\n ID: \u0022SGML\u0022,\r\n SortAs: \u0022SGML\u0022,\r\n GlossTerm: \u0022Standard Generalized Markup Language\u0022,\r\n Acronym: \u0022SGML\u0022,\r\n Abbrev: \u0022ISO 8879:1986\u0022,\r\n GlossDef: {\r\n para: \u0022A meta-markup language, used to create markup languages such as DocBook.\u0022,\r\n GlossSeeAlso: [\u0022GML\u0022, \u0022XML\u0022],\r\n },\r\n GlossSee: \u0022markup\u0022,\r\n },\r\n },\r\n },\r\n },\r\n};\r\n","TestCases":[{"Name":"String","Code":"let s = hash1(object);","IsDeferred":false},{"Name":"Number","Code":"let n = hash2(object);","IsDeferred":false}]}