Spaces:
Paused
Paused
export function getEncodedSnapSave(data) { | |
return data.split('decodeURIComponent(escape(r))}(')[1] | |
?.split('))')[0] | |
?.split(',') | |
?.map(v => v.replace(/"/g, '').trim()) || []; | |
} | |
export function getDecodedSnapSave(data) { | |
return data.split('getElementById("download-section").innerHTML = "')[1] | |
?.split('"; document.getElementById("inputData").remove(); ')[0] | |
?.replace(/\\(\\)?/g, '') || ''; | |
} | |
export function decryptSnapSave(data) { | |
const args = getEncodedSnapSave(data); | |
if (args.length < 6) { | |
throw new Error("Invalid SnapSave decryption arguments."); | |
} | |
const decoded = decodeSnapSave(...args); | |
return getDecodedSnapSave(decoded); | |
} | |
export function decodeSnapSave(...args) { | |
let [h, u, n, t, e, r] = args; | |
function decode(d, e, f) { | |
const g = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'.split(''); | |
let h = g.slice(0, e); | |
let i = g.slice(0, f); | |
let j = d.split('').reverse().reduce((a, b, c) => { | |
let index = h.indexOf(b); | |
return index !== -1 ? a + index * Math.pow(e, c) : a; | |
}, 0); | |
let k = ''; | |
while (j > 0) { | |
k = i[j % f] + k; | |
j = Math.floor(j / f); | |
} | |
return k || '0'; | |
} | |
// Remove duplicate `let r` | |
let result = ''; | |
for (let i = 0, len = h.length; i < len; i++) { | |
let s = ''; | |
while (h[i] !== n[e]) { | |
s += h[i]; | |
i++; | |
} | |
for (let j = 0; j < n.length; j++) { | |
s = s.replace(new RegExp(n[j], "g"), j.toString()); | |
} | |
result += String.fromCharCode(decode(s, e, 10) - t); | |
} | |
return decodeURIComponent(encodeURIComponent(result)); | |
} | |