//-------------------------------------------------------------------------------------------------------
// 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 = 41176;
b = -12840;
c = -64970;
d = -10540;
e = -11478;
f = 32233;
g = 26805;
h = 16987;
obj0.a = 61500;
obj0.b = 55925;
obj0.c = -8806;
obj0.d = -63874;
obj0.e = 65202;
ary[0] = -19028;
ary[1] = 16620;
ary[100] = 60687;
d = (((g ^ (-23677 + a)) | f) ? (obj0.d + (h > (e + a))) : ((+ (obj0.c + -11363)) + ((40136 <= obj0.b) ? (-53289 + g) : (60190 + f))));
if(((e + ((26488 < obj0.a) ? (-42624 | 38077) : (20906 - -26334))) == (obj0.a | (-37003 * (g + e))))) {
  obj0.c = f;
  c = 29150;
  e = ((((c - -16050) + f) + f) + (c * ((c - obj0.a) < (-307 | 39443))));
} else {
  if((((g - (a ^ obj0.c)) + (h & (16344 & 11573))) != (obj0.b * ((a < -23884) * obj0.c)))) {
  } else {
  }
  if(((((-17125 + 32062) | (-34961 ? a : 60815)) * ((11093 ^ 59574) * (30871 * 7502))) > (h | h))) {
    if(((obj0.c + obj0.e) > (obj0.b + (d | (-13083 * -40017))))) {
      obj0.d = ((c * ((obj0.b < 51427) ? (32695 & 37855) : (6595 ^ 35400))) * (obj0.b + (obj0.b - (-61400 >= 15303))));
    } else {
      obj0.b = 41024;
      a = c;
    }
  } else {
    if(((b + ((b - c) + (d ? 4881 : -9740))) != (obj0.b + ((obj0.b - obj0.d) * b)))) {
      h = (((obj0.c * obj0.b) | (- (-41027 + 21739))) * ((44736 | (g | b)) + ((obj0.a + 26385) + f)));
      a = ((g * ((e ? -61015 : -50930) + (-14621 - 45404))) <= ((++ c) + (a + (5839 * -13911))));
      d = obj0.c;
    } else {
      obj0.c = e;
      h = -45657;
    }
    obj0.e = ((obj0.a * ((-6635 < 44434) ? (e * -43718) : (d & -15494))) - ((obj0.c & (62474 * h)) - ((obj0.c ? obj0.b : -44770) + (-42898 | obj0.d))));
  }
  if((((++ b) + (13733 + obj0.d)) > (((e + a) & obj0.a) ^ obj0.d))) {
  } else {
    g = -21261;
  }
}
obj0.b = b;
if((((-2103 ^ e) ^ (obj0.d++ )) >= (((13404 == obj0.b) ? (obj0.a ? 59653 : b) : f) ^ ((10449 * -62544) * (obj0.d & 51148))))) {
} else {
  d = ((((obj0.a - -18180) == d) + obj0.b) <= (d | ((-29033 | 35834) + (++ f))));
  d = ((obj0.e + (a | e)) ^ ((obj0.b * obj0.a) - ((a | -12328) < 51519)));
}
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');
})();
