//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

function test0() 
{
  var arrObj0 = {};
  for (var __loopvar0 = 1;; )
  {
    arrObj0.prop5 = {};
    var strvar9 = '!';
    if (!(typeof arrObj0.prop5.prop3 != -871246799)) 
    {
      for (var _strvar0 in IntArr1) 
      {
        strvar9 = strvar9 + 'caller' + typeof arrObj0.prop1;
      }
    }
    __loopvar0++;
    if(__loopvar0>10) break;
  }
}
test0();
WScript.Echo("Passed");