function enxor(str,key,runs) {
  var r = '';
  
  for (i=0; i<str.length; i++) {
    r += String.fromCharCode(str.charCodeAt(i) ^ key.charCodeAt(i%key.length));
  }
  
  return r;
}
  
function hex(v,s) {
  var r = '';

  if ((s == undefined) || (s > 8)) {s = 8;}
  else if (s < 0) {s = 0;}
    
  for (var i=(s-1)*4; i>=0; i-=4) {
    var half_byte = (v & (0xF << i)) >> i;
      
    if (half_byte < 10) {
      r += half_byte;
    }
    else {
      //r += String.fromCharCode(65 + (half_byte - 10)); // 65 = ASCII value of 'A'
      r += String.fromCharCode(55 + half_byte); // 55 = ASCII value of 'A' (65) - 10
    }
  }
    
  return r;
}
  
function strToHexstr(str) {
  var r = '';
  
  for (var i=0; i<str.length; i++) {
    r += hex(str.charCodeAt(i));
  }
  
  return r;
}
  
function hexstrToStr(hexstr) {
  var r = '';
  
  for (var i=0; i<hexstr.length; i+=2) {
    r += String.fromCharCode(parseInt('0x' + hexstr.substr(i,2)));
  }
  
  return r;
}
