// for old Androids <= 1.6
(function(ap, sp) {

  if ( typeof ap.reduce !== "function" ) {
    ap.reduce = reduce;
  }

  function reduce(iterator, initial) {
    var sum = initial;
    if ( typeof iterator !== "function" ) {
      throw new Error("First parameter should be function");
    }
    if ( typeof initial === "undefined" ) {
      throw new Error("Second parameter should not be undefined");
    }
    this.forEach(function(current) {
      sum = iterator(sum, current);
    });
    return sum;
  }


  if ( typeof sp.trim !== "function" ) {
    sp.trim = trim;
  }

  function trim() {
    return this.replace(/(^\s+)|(\s+$)/g, "");
  }

})(Array.prototype, String.prototype);

@@ -30,16 +30,24 @@
 unction(
+global, 
 ap, sp) 
@@ -49,16 +49,42 @@
  sp) %7B%0A%0A
+  // for Array.prototype%0A%0A
   if ( t
@@ -540,16 +540,43 @@
 ;%0A  %7D%0A%0A%0A
+  // for String.prototype%0A%0A
   if ( t
@@ -709,11 +709,277 @@
  %7D%0A%0A
-%7D)(
+%0A  // for JSON%0A%0A  if ( typeof global.JSON !== %22object%22 ) %7B%0A    global.JSON = %7B%7D;%0A    global.JSON.parse = parse;%0A  %7D%0A%0A  // WARNING: Should be used with *only* trusted JSON string.%0A  function parse(trustedJson) %7B%0A    return eval(%22(%22 + trustedJson + %22)%22);%0A  %7D%0A%0A%7D)(window, 
 Arra

add JSON.parse to backward.js, should be used for *only* trusted JSON string