//-------------------------------------------------------------------------------------------------------
// 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 = -55365;
b = -2379;
c = 51875;
d = 19505;
e = 31815;
f = 24678;
g = 22744;
h = 21496;
obj0.a = -25326;
obj0.b = -20740;
obj0.c = -39514;
obj0.d = 31364;
obj0.e = -33188;
ary[0] = -23457;
ary[1] = 13901;
ary[100] = -13481;
if((((g & d) ^ ((d < d) ? e : obj0.d)) >= (b + c))) {
} else {
  obj0.c = ((obj0.b + -6772) ? (32827 * obj0.b) : ((obj0.c * (obj0.d | a)) | (h != (- 52432))));
  if(((obj0.b * ((38679 != -49885) & (g & 4291))) != (g ^ ((obj0.a ^ 28915) < (obj0.e ? obj0.d : obj0.a))))) {
    if(((d ^ ((obj0.b == 3750) * e)) < (16645 - (h - (-33867 - -61667))))) {
      e = (((obj0.b | (obj0.b < obj0.b)) - obj0.b) + (-5491 & (e++ )));
    } else {
      obj0.b = ((d + ((b - c) & (e | obj0.c))) | (a + (c + (-9338 ? c : obj0.a))));
      g = f;
    }
    if(((28030 + e) < (e * (++ obj0.e)))) {
      f = obj0.d;
    } else {
    }
    d = obj0.a;
  } else {
  }
}
if((((! -16928) - (obj0.b & (-10042 < obj0.a))) < (((-33545 | obj0.e) ^ (obj0.e ? -28031 : 2168)) + (g * (++ b))))) {
} else {
  obj0.d = obj0.e;
  f = (((g - f) & ((-50541 | d) > e)) * (((+ c) - (-44774 + 15674)) & (! (g ? -18328 : 47097))));
  obj0.a = (((obj0.c * h) + a) + ((a > (5640 ? -59031 : c)) | obj0.e));
}
h = (((++ f) & a) + (((-33384 < -6512) ? -61170 : obj0.b) & ((-20807 - obj0.e) & obj0.a)));
if(((obj0.c * d) < ((obj0.e * obj0.e) * ((-13972 | f) + (-55259 | b))))) {
  if(((-63521 - ((d ? h : -12510) & g)) >= (((788 ? -53728 : e) & d) | -12424))) {
    obj0.d = ((((-40618 != obj0.b) ? (2651 * a) : 56338) + 20654) & (g - (+ (34860 & obj0.c))));
  } else {
    if(((c ^ ((62094 & obj0.a) & 8962)) <= ((obj0.c + c) - ((obj0.d & h) & (a < -14067))))) {
    } else {
      d = ((((+ obj0.e) - (46980 != obj0.a)) & (++ f)) | (((+ g) - (f * f)) - (f | obj0.d)));
      a = (((obj0.e * (18432 ^ g)) * obj0.b) != ((b == c) ^ ((-652 ? obj0.e : f) | (a - 3417))));
    }
    if((((+ -2333) * obj0.d) <= ((obj0.e + obj0.a) - ((-58590 + 63523) - (-1783 ^ a))))) {
    } else {
      f = f;
      obj0.e = obj0.b;
      a = (((++ e) ^ (e == obj0.b)) > (((a == d) | (g - -62259)) & ((obj0.e | 54013) & c)));
    }
    if(((obj0.e - -52045) == ((obj0.b + c) + e))) {
    } else {
      f = e;
    }
  }
} else {
  g = c;
  if(((obj0.b & (obj0.c & d)) > (((g ? -40377 : e) + f) * (- (obj0.e + e))))) {
    e = f;
    f = obj0.a;
  } else {
    f = (((! (29586 ? obj0.e : a)) + obj0.a) * ((obj0.a != (h * 59076)) ^ b));
  }
  obj0.c = ((((obj0.b & -7326) != (g + 10601)) + (c | h)) - (a & ((a + e) ^ (obj0.d ^ obj0.c))));
}
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');
})();
