//-------------------------------------------------------------------------------------------------------
// 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 = 1026;
b = -32545;
c = -54216;
d = -46518;
e = -60841;
f = -22848;
g = -18405;
h = 63735;
obj0.a = 41382;
obj0.b = -64369;
obj0.c = 9856;
obj0.d = -64912;
obj0.e = -30721;
ary[0] = 59527;
ary[1] = 65060;
ary[100] = -40048;
if(((obj0.d | ((obj0.c != 20061) ? (f == -58089) : (a + -44555))) != (a ^ ((e >= -39464) <= (h <= -35509))))) {
  b = obj0.e;
  if(((e & (d * obj0.d)) <= (e + (obj0.d + (25472 - a))))) {
    a = ((obj0.d * ((30091 == -14158) + (c > 16262))) ^ (obj0.e * ((27421 + -25195) * (-46416 + 55120))));
    obj0.b = obj0.c;
  } else {
    if(((((d - -13120) | a) | e) > (((obj0.b <= obj0.e) & obj0.c) + ((-38873 < 33897) ? (34528 + 29439) : c)))) {
      e = (((! (! 44710)) + a) * (obj0.d * h));
      obj0.c = c;
    } else {
      d = ((((232 < -51404) ? (-64196 - obj0.a) : h) | ((g | 23115) * (-2962 - -57668))) | ((obj0.c * (-34943 + a)) - ((-61384 < -51667) & (h - e))));
      obj0.b = d;
    }
    if(((((-33439 * -19403) ^ -51685) ^ -56725) == (((-16314 | -58366) + (44328 ? h : obj0.a)) & ((30795 | obj0.b) - h)))) {
      c = obj0.b;
    } else {
      a = ((((g | a) + (obj0.c - c)) + (+ (obj0.e + a))) > (a - ((-45461 > obj0.d) ? (++ obj0.e) : (+ 12262))));
    }
  }
  b = ((f | (obj0.b <= (- obj0.c))) ? (((a * c) & obj0.a) ^ ((obj0.e ^ -54169) & obj0.a)) : (c * ((g & obj0.d) * (a - 41618))));
} else {
}
obj0.d = ((-12402 | ((h ^ -42004) | d)) ^ (c ^ obj0.b));
obj0.c = (((b + (-40670 * 61964)) + d) ^ ((g++ ) | ((14024 * -7250) + (17616 | 49439))));
if(((h - (-51301 | (-47939 & c))) >= (-16432 | -57312))) {
} else {
  if((((f & (h + f)) - -33343) <= ((! obj0.b) + g))) {
    if(((((11334 ^ obj0.c) + a) & h) >= (g | a))) {
    } else {
      obj0.e = -27604;
      d = ((f + h) | (((b & -704) * (42369 & 38428)) | 61338));
      e = (((obj0.b == -31036) | (b ^ a)) - (((f + obj0.c) * obj0.c) | (f & (d >= b))));
    }
    obj0.e = ((a * -5057) ^ ((20458 | (obj0.b ? obj0.a : obj0.b)) - obj0.e));
  } else {
    f = (((+ (a ^ -286)) & ((obj0.c <= f) ? (e + obj0.a) : f)) + (f + g));
  }
}
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');
})();
