/** Functions from https://plantuml.com/code-javascript-synchronous */ function encode64(data) { r = ""; for (i=0; i> 2; c2 = ((b1 & 0x3) << 4) | (b2 >> 4); c3 = ((b2 & 0xF) << 2) | (b3 >> 6); c4 = b3 & 0x3F; r = ""; r += encode6bit(c1 & 0x3F); r += encode6bit(c2 & 0x3F); r += encode6bit(c3 & 0x3F); r += encode6bit(c4 & 0x3F); return r; } function encode6bit(b) { if (b < 10) { return String.fromCharCode(48 + b); } b -= 10; if (b < 26) { return String.fromCharCode(65 + b); } b -= 26; if (b < 26) { return String.fromCharCode(97 + b); } b -= 26; if (b == 0) { return '-'; } if (b == 1) { return '_'; } return '?'; }