//-------------------------------------------------------------------------------------------------------
// 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 = -64127;
b = 49563;
c = 37704;
d = -2071;
e = 53717;
f = 2990;
g = -32639;
h = 51435;
obj0.a = 13702;
obj0.b = 13881;
obj0.c = -21119;
obj0.d = -14811;
obj0.e = 33873;
ary[0] = 10747;
ary[1] = -8018;
ary[100] = -37300;
obj0.e = obj0.d;
if(((-42954 * (d++ )) <= (c | (+ (52710 ? b : 3733))))) {
  b = ((((35566 >= 35804) & (-25411 <= d)) - (+ (obj0.a | -49000))) * (((49799 >= b) + a) | (c ^ e)));
  if((((b & (c * h)) | ((+ 5311) ^ (-41192 | h))) == ((obj0.c | (c ^ -24971)) * h))) {
    obj0.a = b;
    if(((7665 | (a - d)) >= (((-52989 <= c) ? -14635 : (a ? obj0.b : 36199)) + ((obj0.e | f) | (17894 & obj0.c))))) {
      c = (obj0.c++ );
    } else {
      obj0.e = f;
    }
    obj0.d = ((obj0.c + ((-14025 > g) & obj0.b)) & (((-24937 & g) * (+ e)) & (+ (-51682 * obj0.a))));
  } else {
    obj0.e = ((((d | a) | (e ? 5452 : -29762)) + ((22846 < -38570) ? (a - obj0.b) : (11833 - g))) <= (((-28271 < -37871) | e) * (f++ )));
  }
  e = e;
} else {
  if(((e | obj0.d) <= (((+ 21217) * (g | obj0.d)) - 58704))) {
    f = (((18906 - (-55266 | f)) & (h + (obj0.d * obj0.b))) ^ ((obj0.a * e) ^ obj0.a));
    d = obj0.a;
    obj0.d = ((a * ((e ^ obj0.c) - (e ? -33430 : -1321))) + (obj0.e + g));
  } else {
    if(((e * obj0.e) != ((+ f) * (! (f + d))))) {
      e = e;
    } else {
    }
    h = (((obj0.a & (g ? h : -12009)) - ((-12229 == -39578) ? (65200 > -46923) : (-38685 & 9845))) & (((-36028 | -1076) + g) - obj0.d));
    obj0.b = obj0.c;
  }
  if(((-7231 & ((25019 + -50672) | obj0.b)) > (((-22865 - a) < (d >= -31319)) & d))) {
    f = c;
    a = obj0.d;
  } else {
    obj0.c = obj0.b;
  }
  if(((((obj0.c < obj0.d) ? (a * -28275) : g) | ((h | 34556) + f)) < (((-57877 <= c) ? (obj0.b == 38492) : obj0.d) * -40379))) {
  } else {
    f = -28336;
  }
}
c = c;
if((((e <= (53174 >= d)) * obj0.b) > (obj0.d & ((-22453 | e) - (b & b))))) {
} else {
}
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');
})();
