//-------------------------------------------------------------------------------------------------------
// 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 = 8859;
b = 29871;
c = -2247;
d = 55221;
e = -19729;
f = -29628;
g = 20700;
h = -65382;
obj0.a = -53320;
obj0.b = 21167;
obj0.c = 56616;
obj0.d = 11881;
obj0.e = -60901;
ary[0] = 58752;
ary[1] = -48871;
ary[100] = 46638;
if(((obj0.c ^ (! (-33155 & 27422))) < (d * (+ (g - obj0.c))))) {
  obj0.d = -23358;
  if(((((obj0.b + -19835) ^ (43449 <= obj0.d)) & ((-55317 ? obj0.b : obj0.d) ^ obj0.c)) <= (((48840 ^ g) | b) ^ ((g > a) ? (a++ ) : f)))) {
    obj0.d = ((obj0.a + g) & ((b == (56472 | f)) - -469));
    if((((+ (obj0.c + -11065)) * (++ obj0.b)) <= (c - (d >= (h ? -59216 : 60271))))) {
      b = d;
      obj0.d = ((39575 * 52559) | (((a ^ d) ^ d) + (e - (59175 | 44667))));
    } else {
    }
    obj0.d = ((((7439 + -63233) + obj0.b) - d) | (obj0.e + h));
  } else {
    if(((((-3677 >= g) - (b | b)) | (b++ )) >= ((obj0.b - (++ obj0.e)) ^ e))) {
      obj0.e = e;
      obj0.d = ((h ^ (obj0.c & (40782 ? -58239 : -21957))) ^ ((h * obj0.b) - c));
    } else {
      e = -28511;
    }
  }
  a = (((g <= d) * (29228 + (obj0.b ^ -19137))) * (63684 & d));
} else {
  if(((a | ((-38122 + c) + 18161)) != (((-27015 ? obj0.b : obj0.d) | (d ? e : -49194)) - (c * (c + obj0.d))))) {
    if(((((obj0.b >= 60125) ? (a != obj0.b) : (a > obj0.e)) - ((obj0.d | -58702) * b)) > ((obj0.e | (obj0.e & 13745)) + ((obj0.b ^ obj0.e) | (e + 64888))))) {
    } else {
      c = obj0.e;
    }
  } else {
    if(((-19425 * (d - a)) >= (((28663 - 35476) * (+ obj0.a)) & f))) {
      b = (((! b) * (a & (obj0.a - obj0.b))) >= ((b * obj0.d) - (c | (-11976 == obj0.c))));
      obj0.a = h;
    } else {
      h = ((-20471 & ((obj0.d != g) ? obj0.c : (-550 ^ obj0.b))) & (obj0.b * e));
      f = (+ (b & a));
      f = obj0.e;
    }
    obj0.e = c;
  }
}
if(((-63435 * (+ (+ -5261))) != (((+ h) ^ 144) | (41946 * obj0.a)))) {
  g = c;
  if(((((-15080 + 51918) + (-35149 & obj0.c)) * (obj0.b - obj0.c)) == (((obj0.b - g) == b) + a))) {
    if(((e | (obj0.d < (obj0.d - g))) == ((obj0.d == (62848 < 31714)) & h))) {
      obj0.a = ((((-52412 ^ 6751) >= c) | (c | (-42905 + 16002))) >= (34407 * ((h >= g) & e)));
      obj0.e = (+ ((obj0.e >= (62165 ^ h)) - ((+ obj0.d) ^ h)));
    } else {
    }
    obj0.c = ((((obj0.e >= obj0.b) ? (a - -57753) : (c ^ -15276)) * ((- b) * (24136 + a))) < (((g == -56536) ? c : c) - h));
    if(((-43872 & ((f | 42277) == obj0.b)) <= (((f > -51414) ? obj0.a : (-41798 ^ 64042)) & (e | (h ^ -62175))))) {
      g = g;
      g = (+ (((obj0.e ? c : -34843) | (34193 >= 59109)) & ((obj0.c > b) & e)));
      c = (((obj0.e + (13075 & 6703)) - ((f == f) ? (e | -12909) : 32234)) + ((g ^ obj0.c) + obj0.e));
    } else {
      obj0.d = (((b * (obj0.b + b)) ^ ((-62042 - -59534) * (27924 & 9541))) + (c * d));
      a = ((-4896 - obj0.e) * (((obj0.a >= -63151) ? h : obj0.c) ^ ((d | -42652) ^ (-10873 & -56777))));
      f = b;
    }
  } else {
    obj0.a = ((((-59881 & d) + (-46291 > obj0.a)) * (+ a)) * ((+ (g * obj0.e)) & f));
  }
  if(((((obj0.b & -40750) * (3227 ^ -53841)) + h) > (((obj0.e * -14408) ^ 27999) ^ ((306 * obj0.b) == 48486)))) {
    obj0.b = ((b & ((b <= -2440) + a)) * ((d | (-51498 >= g)) * b));
  } else {
  }
} else {
}
if(((((46259 == f) | (e ^ -18337)) - a) == (obj0.c ^ ((e >= obj0.e) ^ c)))) {
} else {
  e = ((((b <= h) ? (-41040 + -55008) : obj0.d) * ((-43432 + 59530) + (-15715 <= 5458))) < ((c & (45576 - 34153)) + a));
}
obj0.c = 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');
})();
