code: function decode() {
              var beg = i;
              var ch;
              var r = "";
  
              // iterate until we reach the end of the string or "~" or ")"
              while (i < len && (ch = s[i]) !== "~" && ch !== ")") {
                  switch (ch) {
                      case "*":
                          if (beg < i) {
                              r += s.substring(beg, i);
                          }
  
                          if (s[i + 1] === "*") {
                              // Unicode characters > 0xff (255), which are encoded as "**[4-digit code]"
                              r += String.fromCharCode(parseInt(s.substring(i + 2, i + 6), 16));
                              beg = (i += 6);
                          } else {
                              // Unicode characters <= 0xff (255), which are encoded as "*[2-digit code]"
                              r += String.fromCharCode(parseInt(s.substring(i + 1, i + 3), 16));
                              beg = (i += 3);
                          }
                          break;
  
                      case "!":
                          if (beg < i) {
                              r += s.substring(beg, i);
                          }
  
                          r += "$";
                          beg = ++i;
                          break;
  
                      default:
                          i++;
                  }
              }
  
              return r + s.substring(beg, i);
          }
docs: Decodes the next value
  
  @returns {string} Next value