//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

(function() {
var ary = new Array(10);
var obj0 = new Object();
var a;
var b;
var c;
var d;
var e;
var f;
var g;
var h;
a = -30043;
b = -34768;
c = 14404;
d = 8675;
e = -59829;
f = 59448;
g = 3329;
h = 59467;
obj0.a = -39648;
obj0.b = 16770;
obj0.c = -62053;
obj0.d = 24711;
obj0.e = -37708;
ary[0] = -64089;
ary[1] = 29467;
ary[100] = -48323;
if((((obj0.a <= a) - ((26332 + obj0.d) & (h ? a : -26831))) < (a | ((a + 56147) ^ (obj0.e ^ 46645))))) {
  obj0.d = obj0.c;
  a = (((obj0.d > (obj0.c++ )) + (h + obj0.d)) >= (47217 & -23076));
  if((((! f) * obj0.d) != (((-55878 | -8190) ^ (-2890 - -17256)) + ((f + d) & (c == c))))) {
  } else {
    if(((((51192 <= 9612) + (e * obj0.c)) + (f + (24817 * e))) != ((14723 & (b + b)) ^ ((60599 >= 60251) * a)))) {
      b = ((f ^ (e == (obj0.b + -15226))) - (((-43025 + 16022) & (g * d)) * ((g + 28741) | (obj0.a | 47008))));
      h = ((((obj0.a < g) ? obj0.a : (b ^ g)) | ((c++ ) ^ (obj0.d + obj0.a))) & (obj0.b | (obj0.c | obj0.d)));
    } else {
      b = obj0.c;
      d = ((((b + -26006) ^ (e - 214)) ^ f) - (d | ((37072 + obj0.a) > (h * -32225))));
      h = (((+ c) - ((c ? -58285 : 50055) | (-48761 | f))) ? (-40824 | -5759) : (b + ((c != obj0.b) | obj0.e)));
    }
    g = ((6867 & ((-47410 & -18524) | (46818 - -58558))) * ((64564 == obj0.a) - ((11177 & -42805) | (16560 | 4772))));
  }
} else {
  if((((45874 & (27784 & -33225)) ^ ((-46662 < 51098) ^ (-59146 & 7606))) >= (obj0.e + ((obj0.b * d) >= e)))) {
    if(((a + obj0.e) != ((f * obj0.c) + obj0.c))) {
      b = obj0.e;
      a = ((((d < -31241) ? h : (obj0.a ? b : -36360)) * ((-42328 * -40475) <= obj0.d)) ^ (obj0.a | 34273));
    } else {
      obj0.e = ((c | ((b - h) | (a ? obj0.b : a))) & (((obj0.c ^ e) * -20061) - (a++ )));
    }
    e = ((h - e) ? ((-8049 - (f < e)) ^ (! b)) : ((d + (a * g)) | ((-25431 * obj0.b) | obj0.d)));
  } else {
    g = ((g - (obj0.e | (-13764 + -51976))) | (h | e));
  }
}
if(((((- -63804) | h) ^ ((d ? c : -19355) ^ f)) > (((h <= obj0.c) ? (-31344 <= obj0.d) : (-58885 ^ d)) & c))) {
  if(((obj0.d ^ 39809) >= ((! g) - ((obj0.d + d) * (obj0.a >= b))))) {
    c = obj0.c;
    f = ((a | ((g < 20738) ? g : d)) & (c & ((38659 > -35177) ? -46166 : (h - 13884))));
  } else {
  }
  f = ((((f ? obj0.e : f) | (g | -18066)) & ((7200 > 38362) ? b : 15597)) + (((f ? h : h) & obj0.c) - ((-46929 - -62154) + (-59268 - obj0.c))));
  if(((h ^ ((-915 | h) & a)) == (c + 56761))) {
    if((((obj0.a ^ (-35183 ^ -45259)) - ((obj0.e & e) ^ c)) == ((37054 - (b - 3157)) | obj0.e))) {
      obj0.b = ((d & (obj0.d & (f ? obj0.d : e))) == (g * ((c >= 3700) ? -53420 : e)));
    } else {
      e = f;
      f = 44700;
    }
    obj0.e = 26462;
    obj0.c = f;
  } else {
  }
} else {
  c = (((-52554 | -17617) & (obj0.c ^ d)) * (((51289 ^ 47261) & (! 20798)) ^ b));
  e = (! (h * g));
  if(((((+ obj0.a) ^ 32388) + obj0.d) == ((obj0.b * (21563 - d)) | (g ^ (g++ ))))) {
  } else {
  }
}
c = ((obj0.c | c) ? (((a ? -43122 : 43416) & h) & -3615) : (c * (obj0.b - (++ h))));
obj0.e = ((((-61168 ^ obj0.e) | obj0.b) - ((40976 & -11864) & obj0.b)) ^ (obj0.e & d));
WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
WScript.Echo("c = " + (c>>3));
WScript.Echo("d = " + (d>>3));
WScript.Echo("e = " + (e>>3));
WScript.Echo("f = " + (f>>3));
WScript.Echo("g = " + (g>>3));
WScript.Echo("h = " + (h>>3));
WScript.Echo("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.c = " + (obj0.c>>3));
WScript.Echo("obj0.d = " + (obj0.d>>3));
WScript.Echo("obj0.e = " + (obj0.e>>3));
WScript.Echo("ary[0] = " + (ary[0]>>3));
WScript.Echo("ary[1] = " + (ary[1]>>3));
WScript.Echo("ary[100] = " + (ary[100]>>3));
WScript.Echo('done');
})();
