//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

try{eval("");}catch(ex){}
try{eval("if((false.valueOf(\"number\"))) {return; } else  if ( /x/ .unwatch(\"x\")) {continue M;return; }");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("for(let y in []);(new Function(\"var window =  '' ;\"))");}catch(ex){}
try{eval("/*for..in*/for(var this = 3.141592653589793 in x)  /x/g ;");}catch(ex){}
try{eval("/*for..in*/for(var   = \nwindow in 0.1) throw undefined;");}catch(ex){}
try{eval("with({x: this}){var x;{ } }");}catch(ex){}
try{eval("throw (uneval(1e4))\n");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) function  x1 () { ; } ");}catch(ex){}
try{eval("if((null--.hasOwnProperty(\"x\"))) {var \u3056 = this, x = false; } else  if ((x5%=[,,].throw(1e81))) {}");}catch(ex){}
try{eval("if([].valueOf(\"number\")) { if ((new (xfunction  x (x, this) { return this } )( \"\" , [,]))) {CollectGarbage() }} else { }");}catch(ex){}
try{eval("(x2);");}catch(ex){}
try{eval("/*for..in*/L:for(var null in ((null)(x = (function ([y]) { })()))){break L;var x; }");}catch(ex){}
try{eval("L:if([]) { if ((false(window) < x = this)) {var x = ; }} else window");}catch(ex){}
try{eval("y = x5;");}catch(ex){}
try{eval("L: ;");}catch(ex){}
try{eval("M:if(this.zzz.zzz) return function(id) { return id };");}catch(ex){}
try{eval("/*\n*/L:if(false) {var x; } else  if (\n1.2e3) { }");}catch(ex){}
try{eval("CollectGarbage()");}catch(ex){}
try{eval("var functional =  /x/g ;");}catch(ex){}
try{eval("L:if(Boolean(-1 for each (x in x)\n).watch(\"window\", (( \"\"  = undefined ? 0 : (uneval(-0)))).watch)) { if ( '' \n) /*for..in*/for(var x2 in (( \"\" )(1e-81.eval(undefined))))x = [z1,,];} else {return (-0)x; }");}catch(ex){}
try{eval("if([ , , , , ] = 5.0000000000000000000000) { if (y.valueOf(\"number\")) CollectGarbage() else {;var x = x, this = false; }}");}catch(ex){}
try{eval("switch( /x/g ) { case 2:  }");}catch(ex){}
try{eval("/*for..in*/for(var y = [15,16,17,18].filter(Math.pow, window) in 033) {var x5 = [], y = 4.; }");}catch(ex){}
try{eval("{(\u3056);( \"\" ); }");}catch(ex){}
try{eval("/*for..in*/for(var [x, x] = new [1,2,3,4].slice(this.eval(true), x.propertyIsEnumerable(\"x\")) in x.yoyo( /x/ ) % undefined( /x/g )) {var x; \"\" ; }");}catch(ex){}
try{eval("L:if(this.zzz.zzz >> <x><y/></x>.(null)) {var x5; }");}catch(ex){}
try{eval("if(this) {var window = this;CollectGarbage() } else  if (()) throw this;");}catch(ex){}
try{eval("while(((([,,].prototype = false)((x5).isPrototypeOf(([3.141592653589793]).eval([11,12,13,14].map))))) && 0)function  y (x4, y)function ([y]) { }");}catch(ex){}
try{eval("L:if(new  /x/g  * []((\u3056 ), 1e4)) {{} }\u0009 else  if (((( '' )()).( \"\"  %= -1))) if( \"\" ) ; else  if ([1]) return; else return this; else L:if(3) { if ( \"\" ) ; else {return undefined;CollectGarbage() }}");}catch(ex){}
try{eval("((x2 = [,,]).prop = x5 = 1e81);");}catch(ex){}
try{eval("L:if(( /x/g --) >>>=[11,12,13,14].some) return;(null); else {}var window;");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("M:if((({x2: window(function ([y]) { }) = [ /x/g ]}))) {throw undefined/*for..in*/for(var  /x/g  !== false.isPrototypeOf(x4 = ({})) in NaN.valueOf(\"number\")) {var get =  /x/ , x; } } else  if ([15,16,17,18].filter((this , 1e4).apply, x =  /x/ )) M:if(x) { if ([z1,,]) {var \u3056; }} else {}");}catch(ex){}
try{eval("{}");}catch(ex){}
try{eval("var window, x = true;");}catch(ex){}
try{eval("if(/*\n*/((([11,12,13,14].filter).x)(false & window.propertyIsEnumerable(\"x\"), (x4)(undefined, 033)))) {/*for..in*/for(var y in undefined) {return .2; } } else  if ((new this(<xxx {y}={<x><y/></x>.( \"\" )} />.(window.(x1-=x)))))  \"\" ");}catch(ex){}
try{eval("({}).hasOwnProperty");}catch(ex){}
try{eval("if(\nundefined) { if ((window(({a2:z2}))))  { return  \"\" ; } } else -0;");}catch(ex){}
try{eval("return (null / null);");}catch(ex){}
try{eval("if((let (x =  \"\" , x1 = 0 \"\"  >>> this)) {throw ({a2:z2});break M; } else var x5, \u3056 = functional;");}catch(ex){}
try{eval("L: do {function (function::x) { return [z1] }  } while(((4.--)) && 0);");}catch(ex){}
try{eval("/*for..in*/for(var x2 = \nnew ((NaN.prop = (x = [z1])))() in this) M:while((delete x5) && 0){var \u3056 = true, this;[1,2,3,4].map }");}catch(ex){}
try{eval("do /*for..in*/M:for(var x3 in window) {function () { (functional); } throw [1,,]; } while(((1e-81.watch(\"x1\", 'haha'.split))) && 0);");}catch(ex){}
try{eval("  = x5;");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("L: {/*for..in*/for(var [x, x1] = .2 in this) {throw this; } }");}catch(ex){}
try{eval("x = set;");}catch(ex){}
try{eval("({ functional: x, functional: window }) = window;");}catch(ex){}
try{eval("if( /* Comment */{} .@*:: this) ( '' ); else  if ((x = undefined\n) .@x:: ({ : null, x5: x })) var x, x;");}catch(ex){}
try{eval("( /x/ );");}catch(ex){}
try{eval("with(false){CollectGarbage()this; }");}catch(ex){}
try{eval("while((window.throw(-1)) && 0){continue L; }");}catch(ex){}
try{eval("if((new [1,2,3,4].map(null))) this.zzz.zzz; else  if ( /x/ .hasOwnProperty(\"x\")) y = x; else {(let (x = \u3056, x5 = x5) ((x.(this)) || eval(\"var NaN = x4 = this, x3, x4 = 1.2e3;\",  \"\" ))) }");}catch(ex){}
try{eval("return undefined;");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("with(let (x) (window\n)){return ({\u3056: []}); }");}catch(ex){}
try{eval("if([-3/0]) {false }");}catch(ex){}
try{eval("if(this >>> (-0)) { if ((-1)) {} else throw ({});}");}catch(ex){}
try{eval("while((window !== window++) && 0){if(0/0) {; }with(new Function()){; } }");}catch(ex){}
try{eval("with(window instanceof [,])function(id) { return id };");}catch(ex){}
try{eval("{var x2 = this; }");}catch(ex){}
try{eval("M:switch(this.zzz.zzz >>>=new (((false).call(x = functional, undefined >= x3)))().prop = ( '' --)) { default:  }");}catch(ex){}
try{eval("with({x: null.prototype = x}){ }");}catch(ex){}
try{eval("if(null) {if(([,].unwatch(\"x\"))) -1 else {L: {NaN = window; } } }");}catch(ex){}
try{eval("CollectGarbage()");}catch(ex){}
try{eval("L:if(( /x/  for (NaN in  \"\" ))) { if ((function(q) { return q; })(function(id) { return id }, window)(({x: \u0009(-0)}))) var x5; else (undefined);}");}catch(ex){}
try{eval("/*for..in*/for(var window in ((eval)(({a2:z2}))))var /*\n*/x = -3/0;");}catch(ex){}
try{eval("do {var x, x =  \"\" ; } while((null) && 0);");}catch(ex){}
try{eval("try { for(let y in [5,6,7,8]) return this; } finally { with([,,]){{} } } ");}catch(ex){}
try{eval("M:if( /x/g ) throw  '' ;");}catch(ex){}
try{eval("var x5 = 1.2e3;\n\n");}catch(ex){}
WScript.Echo("100");
try{eval("var x = (-1);\nwhile(({}) && 0){break L;(false); }\n");}catch(ex){}
try{eval("L:if(1e+81['x'] = (({x setter: [1,2,3,4].slice, x: true }))) {true } else  /x/ ");}catch(ex){}
try{eval("try { {} } catch(this if x2.propertyIsEnumerable(\" \")) { with({}) {  \"\" ; }  } ");}catch(ex){}
try{eval("/*for..in*/for(var x in [[1]]) CollectGarbage()");}catch(ex){}
try{eval("/*for..in*/M:for(var \u000c; in ((({}).hasOwnProperty)((this = -3/0))))switch(this) { default: break; ( /x/ );var x5 = window, x5;break; case 1: case 3: var x;break; (undefined); }\nreturn function ([y]) { };\n");}catch(ex){}
try{eval("var x;");}catch(ex){}
try{eval("/*for..in*/L:for(var NaN =  \"\"  in \u3056) CollectGarbage()");}catch(ex){}
try{eval("if( '' ) {continue L; } else  if (window) {return;(y); }");}catch(ex){}
try{eval("var this;\n;\n");}catch(ex){}
try{eval("if(([15,16,17,18].filter(undefined,  '' ).watch(\"x5\", function  y (x4, \u3056) { yield this } ))) CollectGarbage() else  if (x = undefined) return .2;");}catch(ex){}
try{eval("with({}) x5 = x;");}catch(ex){}
try{eval("/*for..in*/for(var y = x2 in window\u000c) {return this; }\u000c");}catch(ex){}
try{eval("([[]]);");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("{ }");}catch(ex){}
try{eval("{return; }");}catch(ex){}
try{eval(" { yield this } ");}catch(ex){}
try{eval("M:if(({x:  \"\"  }) -= prop / true.prototype = x1.x4.isPrototypeOf(false !== 1e81.watch(\"x\", function  x () { yield  /x/  } ))) if(this) {throw [z1,,];x5 }");}catch(ex){}
try{eval("if(((NaN = x2 = ({a2:z2})) ? [new Iterator(false)].map(function    () { return x } ) : ({a1:1}))) {x = NaN;while((0/0) && 0)<bbb xmlns=\"Iterator()\"><ccc:ddd> </ccc:ddd></bbb> }");}catch(ex){}
try{eval("L:if(((window.hasOwnProperty(\"prop\"))(return) = [,,z1])) { if (null.propertyIsEnumerable(\" \")) {var this = 1.3,   = 3.141592653589793; }} else {var window = false;(false); }");}catch(ex){}
try{eval("L: {L:switch( ) { case  /x/g : default: break; x4break; case undefined: return;case false: case window: case -3/0: case 3: break; case 2: break; case  /x/ : break;  }this; }");}catch(ex){}
try{eval("M\n:switch(window = #) { default:  }");}catch(ex){}
try{eval("try { ({}).hasOwnProperty } catch(this if x1) { return; } catch(x4 if (function(){null})()) {  } catch(x) { {} } finally { var \u3056 =  '' ; } ");}catch(ex){}
try{eval("/*for..in*/L:for(var \u3056 in ({a1:1})) /*for..in*/for(var NaN in (( /x/g )([[1]])))throw undefined;");}catch(ex){}
try{eval("return function::functional;");}catch(ex){}
try{eval("do CollectGarbage() while((getter) && 0);");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("if((p={}, (p.z =  \"\" )())) { if (x) ;} else {return;return; }");}catch(ex){}
try{eval("var x, x =  '' ;");}catch(ex){}
try{eval("break L;");}catch(ex){}
try{eval("if(--) { if (({x setter: /a/gi }).\u3056) throw StopIteration; else {{/*for..in*/for(var x in null) {[z1,,];continue M; } }; }}");}catch(ex){}
try{eval("{if(([({a2:z2})].sort(eval))) { if (-1.unwatch(\"x5\")) {function (x1)x4return function::x; } else return arguments;}with(x4 = ({x4: 1.2e3}).prototype = [z1,,].throw(this))return window; }");}catch(ex){}
try{eval("{Math.pow }");}catch(ex){}
try{eval("CollectGarbage()");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) throw x1;\u000c");}catch(ex){}
try{eval("\n");}catch(ex){}
try{eval("if((null in 3.141592653589793) = (x = 1e+81).hasOwnProperty(\"window\")) { if (x5 = this) {var \u3056 = 5.0000000000000000000000;/*for..in*/for(var x in ((function  x (y,  ) { var x; } )(this))); }} else {CollectGarbage() }");}catch(ex){}
try{eval("/*for..in*/M:for(var [, x4, , ] in ((eval)((+y))))if(1e-81) { if (true) {return  '' ; }} else { }");}catch(ex){}
try{eval("switch([] .. y) { default: ({});break;  }");}catch(ex){}
try{eval("{{}var x = y, functional; }");}catch(ex){}
try{eval("if('fafafa'.replace(/a/g, 'haha'.split)) ");}catch(ex){}
try{eval("try { return; } catch(x3) { return; } finally { for(let y in []); } \nif( '' ) {new Function }");}catch(ex){}
try{eval("switch(x3) { default: break;  }");}catch(ex){}
try{eval("do return (-1); while(((x4.eval([,]))) && 0);");}catch(ex){}
try{eval("if(x = window .. ((function  x () \"\" )(\u3056 = 0))) { if ((return x))  else }");}catch(ex){}
try{eval("\u3056 = x3;");}catch(ex){}
try{eval("while(((++((uneval( /x/ ))))) && 0){{} }");}catch(ex){}
try{eval("if(({ \u3056: ({ x: [, NaN, , x1] }) }) = ({ (x|=({a1:1})) .@x:: window.x2: ({ x4: x, \u3056: ({ NaN: x2, yield: [NaN] }) }), x:: : [] })) while((--x.propertyIsEnumerable(\"x\")) && 0){throw  /x/ ; } else var y = x, x = 1e4;");}catch(ex){}
try{eval("(3.141592653589793);");}catch(ex){}
try{eval("switch(\n--({})) { case 3: var \u3056 = x5, x = this;break; var x1 = -0, prop = 1e-81;break;  }");}catch(ex){}
try{eval("L:with(-1){CollectGarbage() }");}catch(ex){}
try{eval("{var x; }");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) return;");}catch(ex){}
try{eval("with({functional: x5.NaN}){\n }");}catch(ex){}
try{eval("{{}; }");}catch(ex){}
try{eval("return NaN.prototype = x.x;");}catch(ex){}
try{eval("if(x1)  else  if (this) throw [z1,,]; else {return [,]; }");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) try { (window); } catch(x1 if ({})) { this;\u0009 } catch(NaN) { return  \"\" ; } finally { return; } ");}catch(ex){}
try{eval("\n");}catch(ex){}
try{eval("var x, x\n/*for..in*/for(var ([z1,,])( /x/g ) in y) {return;return x; }");}catch(ex){}
try{eval("x = x;");}catch(ex){}
try{eval("L:if(new Function((x.prototype = (({ x2: window, x2: x }) = (.2 ^ this))))) { if ((this :: --this = (prototype.prop))) {break L;/*for..in*/for(var x = (true ? x : window) in [z1]) {false; } } else CollectGarbage()}");}catch(ex){}
try{eval("/*for..in*/for(var [\u000dwindow, \u3056] = ({a1:1})((1e4.yoyo(({a2:z2}))), function(q) { return q; }()) in ([return false for each (x in y) if (window)].unwatch(\"\\u3056\"))) new ((this).watch(([1e+81])))( /x/g .propertyIsEnumerable(\"x5\"), (window ? \u3056 : null) < window >= (new (function(q) { return q; })(1.3)) << throw [,,]; ^= false)");}catch(ex){}
try{eval("var x =  '' ;{}\nCollectGarbage()");}catch(ex){}
try{eval("do {var function::  = this;var x; } while((\nnull) && 0);");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) throw y;");}catch(ex){}
try{eval("switch(x2.window) { default: with({}) (function(q) { return q; }).callbreak; break; case  ''  << [[]]: return [[1]];case (x5.prototype = true): break;  }\n");}catch(ex){}
try{eval("with({}) { [1,2,3,4].slice } ");}catch(ex){}
try{eval("return;var x = 3/0, x2 = false;");}catch(ex){}
try{eval("CollectGarbage()");}catch(ex){}
try{eval("/*for..in*/for(var [ , x5] = eval(\"return [1,,];\", 033) in (null | [1,,] < (({functional getter: function (x, x) /x/g  })))) {return 'fafafa'.replace(/a/g,  /x/g );throw \u3056; }");}catch(ex){}
try{eval("/*for..in*/for(var x in (([1,2,3,4].map)(undefined ? null : function::\u3056(function(id) { return id }\n)))){L: var x1, x = 3/0; }");}catch(ex){}
try{eval("/*for..in*/for(var [this, x] = window in ((p={}, (p.z =  '' )())) :: ((this for each (x in [[1]])))) CollectGarbage()");}catch(ex){}
try{eval("if(false.prototype =  /x/g ) { if (new Number(NaN, [,,z1])) Function else {return 0.1; }}");}catch(ex){}
try{eval("throw function ([y]) { }\n");}catch(ex){}
try{eval("do ; while((x2 = ({})) && 0);");}catch(ex){}
try{eval("L: {var window, x; }");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("throw x;");}catch(ex){}
WScript.Echo("200");
try{eval("/*for..in*/for(var x in ((function () { return  '' .hasOwnProperty(\"x4\").x1 } )(('fafafa'.replace(/a/g, Math.sin)))))M:if(({a2:z2}). ) { } else return -0;\u000c");}catch(ex){}
try{eval("L:if(((this != null) ? [[]] : (this for each (NaN in true)))) var x5 = window, y;");}catch(ex){}
try{eval("if((x1 = x)) (null); else  if (((({}).hasOwnProperty)( /x/g , 3/0))) {throw 0;throw case x: return 0.1;break; ; }");}catch(ex){}
try{eval("CollectGarbage()with(x){return;var x, y; }");}catch(ex){}
try{eval("while((([11,12,13,14].some)) && 0)var x = this, NaN;");}catch(ex){}
try{eval("while(((null)(\u3056, x)) && 0)\nx = x;\n");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("L:if(((window[\u3056])--)) FunctionCollectGarbage()");}catch(ex){}
try{eval("do {; } while(([,,]) && 0);");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("{}\nvar  /x/g ;\n");}catch(ex){}
try{eval("with({}) { try { var NaN; } finally { (x); }  } ");}catch(ex){}
try{eval("/*for..in*/for(var [y, functional] = x in this) CollectGarbage()");}catch(ex){}
try{eval("switch(0x99) { case 8:  }");}catch(ex){}
try{eval("if((Function(x.prototype = function ([y]) { }, x))) { if (\u000dx5 = this) {var window, function::x; } else {var x, x = [,,z1];throw this; }}");}catch(ex){}
try{eval("do {return null;[15,16,17,18].filter( /x/ , this); } while(((var x = [[]], x)) && 0);");}catch(ex){}
try{eval("with(.2.unwatch(\"x\").prop = null)return;");}catch(ex){}
try{eval("do {return;var x, x = ({a2:z2}); } while(((  = x = x3 / x = 1e81)) && 0);\nL: var this, y;\n");}catch(ex){}
try{eval("do switch(eval(\"window\", this)) { case (({ : function(id) { return id },   getter: [1,,] })):  } while((y *  \"\" .eval(false)) && 0);");}catch(ex){}
try{eval("if(null.watch(\"y\", this)) { if (3) return;} else {var x2; }");}catch(ex){}
try{eval("if([,,]) { if ((-1)) return;} else (window)");}catch(ex){}
try{eval("with({(x. /x/ ): (eval).call(x = 1e4, )}){return (new (function () { return   = \u000cnew null } )(false[0]++)); }");}catch(ex){}
try{eval("if(new Array(this, [])) ; else  if (x = .functional)  { {CollectGarbage() } } ");}catch(ex){}
try{eval("/*for..in*/L:for(var x = (false)[ /* Comment */function ([y]) { }] in false[() = ([z1].watch(\"x\", function(q) { return q; }))]) {var x, x;return (-0); }");}catch(ex){}
try{eval("if((this.zzz.zzz)) { if (([this].some([1,2,3,4].map) .@x::  '' .throw(this))) {} else {continue M;; }}");}catch(ex){}
try{eval("while(( /x/ ) && 0){}");}catch(ex){}
try{eval("if((-NaN <<= 4.)) { if ((this.propertyIsEnumerable(\"y\"))) {continue L;var y, x = window; }} else {return false; }");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) for(let y in [5,6,7,8]) return;/*for..in*/L:for(var (x1 =  '' )((true / 1e81)) in ((new Function)( /* Comment */null)))var x5;");}catch(ex){}
try{eval("L:with({x: 1.2e3}){{}CollectGarbage() }");}catch(ex){}
try{eval(";\nreturn;\n");}catch(ex){}
try{eval("/*for..in*/M:for(var x = x in []) return;");}catch(ex){}
try{eval("switch(window) { case ([11,12,13,14].map): new false() instanceof this.(4.);break; with( /x/g ){var   = -0;([z1,,]); }break; case x |= [,,]: if( /x/ ) { if ([z1]) var x, x; else CollectGarbage()}default:  }");}catch(ex){}
try{eval("/*for..in*/for(var [x,  ] =  /* Comment */(this.zzz.zzz) in {}) {continue M;function (x) { yield  /x/g  }  }");}catch(ex){}
try{eval("try { continue M; } finally { CollectGarbage() } ");}catch(ex){}
try{eval("eval");}catch(ex){}
try{eval("if(({this setter: eval })) throw 1.3; else  if (([[1]].propertyIsEnumerable(\"x\"))) ");}catch(ex){}
try{eval("do {var x = ({});CollectGarbage() } while(((window.valueOf(\"number\"))) && 0);");}catch(ex){}
try{eval("L: (Math.sin).apply");}catch(ex){}
try{eval("if(((eval(\"var this, prototype = .2;\", undefined)) ? x%=  : (1.3)(this, window))) var x5 = x1; else var y, x::x = 1e81;");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("Math.pow\n");}catch(ex){}
try{eval("/*for..in*/for(var [x, NaN] =  for (x in NaN) for each (x in x) in 3/0) {return  /x/g ; }");}catch(ex){}
try{eval("if(this) { if (function  x ( /x/g ) { yield [1] } ) {evalvar x, x; } else {(window); }}");}catch(ex){}
try{eval("with((-0));");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("/*for..in*/for(var window = var x3 = false;.watch(\"x4\", function(q) { return q; }) in (+true)) {continue L;var y = window, x =  '' ; }");}catch(ex){}
try{eval("if((new Exception())) { if (( /x/g  -= [[1]])) var , functional; else throw window;}");}catch(ex){}
try{eval("/*for..in*/for(var [y, x3] =  ''  in this) break L;");}catch(ex){}
try{eval("if((x1 = window >>=  '' )) {}");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("var x, y =  '' ;\nL:switch((function ([y]) { })()) { case this:  }\n");}catch(ex){}
try{eval(";");}catch(ex){}
try{eval("throw 5.0000000000000000000000");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) throw StopIteration;");}catch(ex){}
try{eval("if(null) { if (window) {(NaN);var x = 0.1; }} else {throw 0.1; }");}catch(ex){}
try{eval("with(this.yoyo(1e+81)){var function::x = [1]; }");}catch(ex){}
try{eval("continue M;");}catch(ex){}
try{eval("L:if(([x for each (this in arguments) for ((window)( /x/ ) in NaN)])) ;{} else if(-3/0) {; } else  if (x) continue L;");}catch(ex){}
try{eval("while(((x5)|=x5) && 0)CollectGarbage()");}catch(ex){}
try{eval("\nthrow  \"\" ;\n");}catch(ex){}
try{eval("  = x;");}catch(ex){}
try{eval("switch(([, /*\n*/, ({ x: function::  }), y]%=[,,z1] >= [1,,] |= x3.throw(\u3056))) { default: case [, , functional, , y] = 1e81: throw  /x/g ;case 6: break;  }");}catch(ex){}
try{eval("if(( \"\" .eval(this))) {{}null; } else  if (x3 =  /x/g ) var x2, NaN =  /x/ ;");}catch(ex){}
try{eval("switch(x5) { case (this)(,  \"\" ): Math.powbreak; break M; }");}catch(ex){}
try{eval("with({}) throw x2;");}catch(ex){}
try{eval("/*for..in*/L:for(var [window, x3] = \n' in [1]) this;");}catch(ex){}
try{eval("if(( /x/ )(this) || (uneval(1.2e3))) { if ((function  x ()false)) {(window).watch; }} else {{} }");}catch(ex){}
try{eval("this;\nbreak L;\n");}catch(ex){}
try{eval("/*for..in*/L:for(var [this, this] = ({}-- ? delete 4. : x = false) in  /x/g ) \nvar x;");}catch(ex){}
try{eval("{M:if(x.x3) function () { return  /x/g  }  else {}var x = %=; }");}catch(ex){}
try{eval("try { throw StopIteration; } catch(\u3056) { CollectGarbage() } ");}catch(ex){}
try{eval("{{Math.pow } }");}catch(ex){}
try{eval("if(false) (4.); else var x = undefined, x1 = this;");}catch(ex){}
try{eval("\n{}");}catch(ex){}
try{eval("M:with( '' [[z1]]){{throw  \"\" ;return; }throw 3/0; }");}catch(ex){}
try{eval("var window, x2");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("L: {[1,2,3,4].slice{}\n\n }");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("Math.sin");}catch(ex){}
try{eval("with({}) return;");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) throw x;");}catch(ex){}
try{eval("if(1e+81) [1,2,3,4].map else  if (1e+81) {var window, NaN; } else { }");}catch(ex){}
try{eval("L:if(-1.unwatch(\"x\")) CollectGarbage else  if (x.x1) Function");}catch(ex){}
try{eval("{([,]); }");}catch(ex){}
try{eval("try { return ({}); } finally { return; } ");}catch(ex){}
try{eval("if(x5) {continue L; }");}catch(ex){}
try{eval("/*for..in*/for(var [x, x] =  \"\"  in 5.0000000000000000000000) ( );");}catch(ex){}
try{eval("(true);\nthrow window;\n\n");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("/*for..in*/for(var x1 =  '' .valueOf(\"number\") *= (this).eval(([4. if (this)])) in x4 = null\n) L:do var x4, x;/*\n*/ while((null in undefined) && 0);");}catch(ex){}
try{eval("while(([x4]) && 0)return 1e+81;");}catch(ex){}
try{eval("return  /x/g ;");}catch(ex){}
try{eval("/*for..in*/M:for(var x in ((({}).hasOwnProperty)(null >> this)))return x = window;");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) for(let y in []);");}catch(ex){}
try{eval("CollectGarbage()");}catch(ex){}
try{eval("if( \"\"  === eval(\"x4\", x)) { if (({ : \n /x/g ++})) throw 1.3;} else return  \"\" ;");}catch(ex){}
try{eval("with({}) try { break M; } catch(window) { var x, x = ({a1:1}); } finally { return; } ");}catch(ex){}
try{eval("{}\nvar  ;");}catch(ex){}
try{eval("if(-null) { if ( /x/ ) {var x = [,]; } else { /x/g ;var x3, x2 = window; }}");}catch(ex){}
try{eval("M:switch((uneval((({x4: function::x2, this setter: window }))))) { default: throw null;break L;break; case 1: case this.this: break;  }");}catch(ex){}
try{eval("/*for..in*/M:for(var window = undefined in  /x/g ) break M;");}catch(ex){}
try{eval("with({y: x = 3.throw((1.3++))}){}");}catch(ex){}
try{eval("if(('fafafa'.replace(/a/g, Math.sin))) var functional,   = 5.0000000000000000000000;");}catch(ex){}
try{eval("if(4.) { if (3.141592653589793()) {var x;x4; } else {var x = x4, x =  /x/g ; }}");}catch(ex){}
try{eval("L: CollectGarbage()");}catch(ex){}
try{eval("with({ : new (\ncase 'fafafa'.replace(/a/g, Math.pow): break; case  /x/g : throw 1.3;break; \n)(((  = y.x1))[true], try { var x =  /x/ , x; } catch(x if (function(){throw window;})()) { ; } catch(x4) {  } )}){M:with(y.(window)){x4 setter: /a/gi } }");}catch(ex){}
try{eval("return;\nvar x, x;\n");}catch(ex){}
try{eval("with({}) { return this.valueOf(\"number\"); } ");}catch(ex){}
try{eval("while((CollectGarbage().eval(x) | window) && 0){return ; }");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("if(({})) { if ( '' ) ;} else M:with(0){break L; }");}catch(ex){}
try{eval("-3/0with({x3: new Date(null, false).function::x})[,,]");}catch(ex){}
try{eval("/*for..in*/L:for(var x1 in (((Math.sin).call)(window)))switch(([11,12,13,14].filter)) { default: break; break;  }");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("/*for..in*/for(var   get x x (x) { return; } NaN in try {  } finally { ( '' ); } ) break M;");}catch(ex){}
try{eval("L: {(({a1:1})); }");}catch(ex){}
try{eval("M:\u0009if() { if ( '' .window) {} else [,];}");}catch(ex){}
try{eval("/*for..in*/for(var x3(x) in  /x/ ) throw x1;\n{var x1 = undefined, x;(x2).watch }\n");}catch(ex){}
try{eval("with({this: 'fafafa'.replace(/a/g, ([1,2,3,4].slice).call)})return 0.1;");}catch(ex){}
try{eval("M:if(x5) {for(let y in [5,6,7,8]) return;var  = function ([y]) { }, x; } else ;");}catch(ex){}
try{eval("{{}; }");}catch(ex){}
try{eval("with({}) { throw StopIteration; } ");}catch(ex){}
try{eval("with(y){eval }");}catch(ex){}
try{eval("{var   = window; }");}catch(ex){}
try{eval("/*for..in*/for(var x2 in (1e-81 *= window) -= [z1,,]) x = x;");}catch(ex){}
try{eval("with({}) for(let y in [5,6,7,8]) CollectGarbage()");}catch(ex){}
try{eval("{CollectGarbage() }");}catch(ex){}
try{eval("while((({ window:   })\u000c = (x5.x) < window for each (x5 in 033) for (x5 in  )) && 0)var x2, x;");}catch(ex){}
try{eval("with({get:  '' }){CollectGarbage()var x = this; }");}catch(ex){}
try{eval("L:switch(( /x/ .unwatch(\"y\"))()) { case (x2.x--++): ;default: ([[]]);case 9:  }");}catch(ex){}
try{eval("if(var x4 = default: break; break; case -1: x;break; break; break; ;) {return  '' ; } else  if (('fafafa'.replace(/a/g, new Function))((([({a1:1})]) ? ((function ([y]) { })().watch(\"NaN\", (({}).hasOwnProperty).call)) : x.prototype), (this.prop)--))  {  \"\" \n;//h\n }  else throw false;");}catch(ex){}
try{eval("do throw  \"\" ; while((function  x3 (x, NaN) { yield false } ) && 0);");}catch(ex){}
try{eval("with(({ x: x, y: this }) = x = this){return; }");}catch(ex){}
try{eval("{{} }");}catch(ex){}
try{eval("M:\u000cdo {new Function \"\" ; } while((x) && 0);with({}) function(q) { return q; }");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("CollectGarbagevar x =  '' ;");}catch(ex){}
try{eval("x = this;");}catch(ex){}
try{eval("([,,])[ \"\" ]['window.prototype'] = x;");}catch(ex){}
try{eval("undefined['window'] = NaN;");}catch(ex){}
try{eval(";return");}catch(ex){}
try{eval("/*for..in*/for(var x3 = (x)[(-0)] in window) \nif(0x99) {var [,] = 0.1, y; } else  if ((function ([y]) { })()) \n");}catch(ex){}
try{eval("try { var x1 =  /x/g , x5 = false; } catch(x if x =  \"\" ) { (x); } catch(functional) {  } finally { return  /x/g ; } ");}catch(ex){}
try{eval("return let (<zzz>3.141592653589793</zzz>yyy = 0.1, y = -3/0) [,,] >>= \u3056;");}catch(ex){}
try{eval("if(x if (null)) var x = {}; else with({}) CollectGarbage");}catch(ex){}
try{eval("var x5, x = ({});");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("[];");}catch(ex){}
try{eval(";var x3;");}catch(ex){}
try{eval("{return;continue L; }");}catch(ex){}
try{eval("if((({ window: window, \u3056: [] }) =  \"\" ) ^ new  /x/g ().yoyo(this)++) { if ([[]].throw(this.zzz.zzz--)) {var x = [1,,], x5; }} else {{}((-1)); }");}catch(ex){}
try{eval("x = x;");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("var x4;");}catch(ex){}
try{eval("throw \u3056;");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("CollectGarbage()if(function (prototype) \"\" ()) \u0009{CollectGarbage/*for..in*/for(var x in (\u000c(function  x4 (x4) { var getter = 1e81, x = x; } )([]))){return true; } } else  if ((-1)) ;");}catch(ex){}
try{eval("throw x4;");}catch(ex){}
try{eval(";");}catch(ex){}
try{eval("if(~ /x/g ) {continue M; } else  if ({}.prototype = window) {M:if(window) ; else {var x::x, x2;function::x5 } } else <>(x4.x1)</><!--yy-->");}catch(ex){}
try{eval("if(  = ({ y: x }) <= true++.x) return {}; else  if (( \"\"  %= -0)) var prototype = [z1];");}catch(ex){}
try{eval("/*for..in*/for(var x in (([1,2,3,4].slice)( '' )))( /x/ );");}catch(ex){}
try{eval("NaN = x1;");}catch(ex){}
try{eval("/*for..in*/for(var (new let (x = 3.141592653589793, x) -0(window))( /* Comment */new eval([,,z1], this) = 3 > window.unwatch(\"window\")) in (( /x/ )((this.unwatch(\"this\") :: ({ get x3(x) { return 1.3 }  })))))var y\ncontinue M;");}catch(ex){}
try{eval("/*for..in*/for(var y in (('haha'.split)(x\n))){M:if(undefined)  \"\" ; else {var x;; } }");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("/*for..in*/for(var x1 in 033) var x, x =  \"\" ;\ncontinue M;\n");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) return  \"\" ;");}catch(ex){}
try{eval("if(functional) {;throw 033; } else  if (false) continue L; else default: break; case [z1,,]: break; case 8: return 5.0000000000000000000000;break; case 0x99: {}");}catch(ex){}
try{eval("switch(<employee id=\"1\"><name>Joe</name><age>20</age></employee>.(((function  x (x) { yield x1 } )(<ccc:ddd>yyy</ccc:ddd>\u000c)))) { default: break; return window;break; case 6: if(5.0000000000000000000000) {} else  if ( '' ) {return windowvar x; } else [z1]\nCollectGarbage()break;  }");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("L: M:while(( /* Comment */window) && 0){var functional; }");}catch(ex){}
try{eval("L: return;");}catch(ex){}
try{eval("(1.2e3)\n");}catch(ex){}
try{eval("x4 = x;");}catch(ex){}
try{eval("{{; } }");}catch(ex){}
try{eval("try { function (NaN) { return window }  } catch(x3) { (4.); } finally { x1 } ");}catch(ex){}
try{eval("if('fafafa'.replace(/a/g, ({}).hasOwnProperty)) var x4 = .2; else  if (null\n) var \u3056;");}catch(ex){}
try{eval("switch(( /x/g )[ '' ]) { case 4: default: break;  }");}catch(ex){}
try{eval("var x = this, window = x3;\nCollectGarbage()\n");}catch(ex){}
try{eval("L:if([,].propertyIsEnumerable(\"y\")) { if (new new Function()) //h\nvar x =  /x/ ; else {throw true; }}");}catch(ex){}
try{eval("break L;");}catch(ex){}
try{eval("while(('fafafa'.replace(/a/g, function (functional, window)-0)) && 0){throw x2;{} }");}catch(ex){}
try{eval("( \"\" );");}catch(ex){}
try{eval("L: ");}catch(ex){}
try{eval("{var window = ({a1:1});{var x = window, window = [z1];continue M; } }");}catch(ex){}
try{eval("/*for..in*/for(var (true.propertyIsEnumerable(\"window\") - --this)(x3 = 1e-81) in (1e4 >= x)) this");}catch(ex){}
try{eval("return NaN;");}catch(ex){}
try{eval("if(({a2:z2})--) { if () {var \u000c\u3056 = x5;CollectGarbage() } else Function}");}catch(ex){}
try{eval("/*for..in*/for(var [x5, functional] = this = function(id) { return id } in false) var x2, x;");}catch(ex){}
try{eval("if([1.3\n].map(typeof  \"\" )) var x5; else  if (x.throw(([,,z1]-- <<= eval(\"{}\", NaN))\u0009)) {break L; '' ; }");}catch(ex){}
try{eval("{M:if( /x/g  - {}) { if (( /x/ )[ /x/g ]) var y; else CollectGarbage()}[,]; }");}catch(ex){}
try{eval("if((eval(\"x\", function(id) { return id }))) {(-1);/*for..in*/L:for(var x5 in ((function  window (window) { return; } )(3.141592653589793))){} }");}catch(ex){}
try{eval("with({}) { if(x) {CollectGarbage() } else  if ((function ([y]) { })())  } ");}catch(ex){}
try{eval("\n(function(q) { return q; }).call\n(-0)\n");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("if(0x99) {([z1]); } else  if ( \"\" ) ;");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("if( '' ++) while((window) && 0){return 5.0000000000000000000000;var x; } else {with(var functional = window, x = (-0);)return;L: var x; }");}catch(ex){}
try{eval("with({}) case this.zzz.zzz: return;");}catch(ex){}
try{eval("/*for..in*/for(var [x,  { yield (this.zzz.zzz) } ] = [,,] in (x2 =   :: window)) try { throw window; } finally { with({}) {} } ");}catch(ex){}
try{eval("/*for..in*/for(var window = (Iterator()) in 5.0000000000000000000000) var x;");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("{var x, x2 = (-0); }");}catch(ex){}
try{eval("if(([functional, , window, let, window] = eval(\"break L;\", this))) { if ( /x/g ) {\u3056;var x = [1,,], x = prop; }} else {[z1,,];var x =  '' , functional; }");}catch(ex){}
try{eval("switch(()) { default: M:with({x: function ([y]) { } || ({a2:z2}).valueOf(\"number\")}){CollectGarbage(){} } }");}catch(ex){}
try{eval("if(0x99 >>= try { break M; } catch(this if \u0009(function(){return 1.3;})()) { var x5; } catch(x4) { ; } finally { break M; } ) break L; else ;");}catch(ex){}
try{eval("var functional, x5 = true;");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("switch(x, window = x) { default: if(true) {CollectGarbage()CollectGarbage() } else  if (3) {continue L; } else {var x3 = (function ([y]) { })(); }break; case 8: {}break; break;  }\n");}catch(ex){}
try{eval("do null.hasOwnProperty\u000c(\" \"),  ''  while((-0) && 0);");}catch(ex){}
try{eval("var this = [,,], prop;");}catch(ex){}
try{eval("if((  = ({ x: x2 }))) { if ([z1])  set x \u3056 (x, x2) { yield true } } else x4;");}catch(ex){}
try{eval("function  x (NaN) { default: break;  } (1e4);");}catch(ex){}
try{eval("({ functional: prototype })");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("/*for..in*/L:for(var x((function (this, x)NaN)()) in ((eval)((({a1:1}).valueOf(\"number\")))))L:if(window.propertyIsEnumerable(\"x\")) var x5 = [], this = 0.1; else var x4 = x;");}catch(ex){}
try{eval("continue L");}catch(ex){}
try{eval("M:if( '' ) {function ( , x)\u000d { yield window } return; }\n");}catch(ex){}
try{eval("switch(y = x) { default:  }");}catch(ex){}
try{eval("if(undefined) { if (y) ( /x/g );} else {;; }");}catch(ex){}
try{eval("if((({ set x x (x, this) { return window } , functional setter: function  x (x, x) { function  x () { return true; }  }  }))) { if ((function ([y]) { })()) {var this, x = true;var x3, x = x; }} else {/*for..in*/for(var x =  in  /x/ ) var this, y =  /x/g ; }");}catch(ex){}
try{eval("while((true) && 0)CollectGarbage()");}catch(ex){}
try{eval("L: { }");}catch(ex){}
try{eval("this = y;");}catch(ex){}
try{eval("{var get = -0;/*for..in*/for(var x = ( /x/g  .@x:: 1.3) in this) CollectGarbage() }");}catch(ex){}
try{eval("M:switch(Date()) { case [function::x1, , x, , ] = undefined.hasOwnProperty(\"x1\"): L: { /x/g ; }break; break; case false: with([x]){break M;(x5); }break; default: var  ;case 6: return;case 8:  }");}catch(ex){}
try{eval("with({NaN: var x.eval(function(id) { return id })})true");}catch(ex){}
try{eval("L: {CollectGarbage()continue L; }");}catch(ex){}
try{eval("/*for..in*/for(var x = (true.throw( /x/ ))-- in 'fafafa'.replace(/a/g, (-1))) {throw x; }");}catch(ex){}
try{eval("L: {throw this }");}catch(ex){}
try{eval("if(this) var x1 = functional;");}catch(ex){}
try{eval("while(() && 0){if(x4) throw false; else  if (x2;) {[[1]]; } else {function(q) { return q; }var window =  '' , x = (-0); } }");}catch(ex){}
try{eval("L:do  while(( /x/ .hasOwnProperty(\"window\")) && 0);");}catch(ex){}
try{eval("((function ([y]) { })())\nreturn  \"\" ;");}catch(ex){}
try{eval("function  NaN (x, x) { yield ({functional setter: function (x, NaN) { return  }  }) } ");}catch(ex){}
try{eval("/*for..in*/for(var x in ((Math.pow)(({functional: this}))))break L;\nfunction  x (x)0.1\n");}catch(ex){}
try{eval("(x4)\n{{}Function }");}catch(ex){}
try{eval("if(new  /x/ \u0009) { if (5.0000000000000000000000) CollectGarbage() else throw {};\nthrow (-1);\n}");}catch(ex){}
WScript.Echo("500");
try{eval("\u3056 = \u3056;");}catch(ex){}
try{eval("do L:if( \"\" .unwatch(\"x::x2\")) if(false) {{}var x; } else  if (functional) {} else  if ([15,16,17,18].some(Function, x = window)) {return; } while((arguments\n.unwatch(\"prop\")) && 0);");}catch(ex){}
try{eval("L:while(((NaN = window)) && 0){{var x; } } if (window+=())");}catch(ex){}
try{eval("if(x) { if ( /x/ ) var x5 = [,],   = window;} else function(q) { return q; }\nL:while(( '' ) && 0)this;\n");}catch(ex){}
try{eval("var y, x = true\n");}catch(ex){}
try{eval("if(0x99.hasOwnProperty(\"NaN\") ^ 0x99) ({}).hasOwnProperty else {{}; }");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("while((\u3056 &= window.propertyIsEnumerable(\"this\")) && 0)var  set  ()[,], window;");}catch(ex){}
try{eval("L:if((x2.prop = [,,z1].eval(x)--)) { if (\n-3/0.throw(x) < [] = ((033)[])) {x = setter; } else if([1,2,3,4].slice) break L; else ({}).hasOwnProperty}");}catch(ex){}
try{eval("if((uneval([[]]))[window || []]) { if (x) for(let y in []); else {L: return; }}");}catch(ex){}
try{eval("/*for..in*/for(var x in window) {continue M;return ({a2:z2}); }\n");}catch(ex){}
try{eval("/*for..in*/for(var x = (1e81 < x1 ? x.prototype = new (( /x/g  ^= []))(new ({})(), false) : new Error( , 3).propertyIsEnumerable(\"functional\") >>> (x4--)) in (((y)%=y << window).isPrototypeOf(x - x3--))) throw [[1]];\nthrow  '' ;/*\n*/\n");}catch(ex){}
try{eval("x = functional;");}catch(ex){}
try{eval("switch((window &= undefined)()) { case x((function ([y]) { })()): {(undefined); }case new [1]: {} }");}catch(ex){}
try{eval("/*for..in*/for(var function::x in x1 = [z1]) {Math.sin }");}catch(ex){}
try{eval("return functional.((null.eval(function ([y]) { })));");}catch(ex){}
try{eval("{throw undefined; }");}catch(ex){}
try{eval("/*for..in*/for(var [x, x] = (x = <xxx>{x3}</xxx>) in new  /x/g ([,])) {return this; }");}catch(ex){}
try{eval("/*for..in*/for(var x = true in [function::x2 .. undefined].some(false)) {L:while(([undefined].eval( .(1.2e3))) && 0){L:if(false) { if ([,,z1]) ; else return;}while(( /x/ ) && 0){x5; } } }");}catch(ex){}
try{eval("var y;");}catch(ex){}
try{eval("{}\n{}\n{}\n\n");}catch(ex){}
try{eval("{L: {{} } }");}catch(ex){}
try{eval("with({x1: [(typeof (function ([y]) { })())].filter(function(q) { return q; })}){[,]; }");}catch(ex){}
try{eval("L:do var   = 3;\n\n while((( /* Comment */ ''  +=  /x/g )) && 0);");}catch(ex){}
try{eval("if(x1) { /x/g ; }");}catch(ex){}
try{eval("if((-[15,16,17,18].map((window).watch, x))) {L: {return ({a2:z2});(this); }var x5, x2; }");}catch(ex){}
try{eval("do {throw 1.3; } while((\n((({x::y: [z1], x4: true }))\n)) && 0);");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("/*for..in*/for(var window in [z1,,]) {[1,2,3,4].map }");}catch(ex){}
try{eval("\u0009if(([11,12,13,14].map)) { if (({ \u3056: ({ x: x, y: x }) }) = function ([y]) { } | 3/0) {return  /x/g ;/*for..in*/for(var x in window) {continue L; } }} else {\u000dwith({x:  /x/g }){return false; } }");}catch(ex){}
try{eval("try { throw x5; } finally { var x1; } ");}catch(ex){}
try{eval("do {return;( /x/g .x1); } while(((x.x)) && 0);");}catch(ex){}
try{eval("with(this = true)throw x;");}catch(ex){}
try{eval("x5;");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("L:if(x.(([15,16,17,18].some((new Function).call, (-3/0.prop))))) { if ((new Boolean()) for (window in window) for each (x in null)) { } else var x, x3 = 0.1;}");}catch(ex){}
try{eval("\nreturn null;\n");}catch(ex){}
try{eval("/*for..in*/for(var this in x5) return;");}catch(ex){}
try{eval("if((<employee id=\"1\"><name>Joe</name><age>20</age></employee>.(NaN !== [(eval(\"<x><y/></x>\", [new (function  this (x, x)function(id) { return id })(-3/0, window)]))]))) { if ((Math.sin.eval(-0()))) {L: window; } else L:if() { if (x = var x4 = function ([y]) { };) {x5var x; } else {( /x/g ).watch }}}");}catch(ex){}
try{eval("var x3, NaN;");}catch(ex){}
try{eval("x1 = this;");}catch(ex){}
try{eval(";");}catch(ex){}
try{eval("if(x) {} else {}");}catch(ex){}
try{eval("throw x;");}catch(ex){}
try{eval("/*for..in*/for(var [NaN, \u3056] = this in x) {(NaN);\u000c }");}catch(ex){}
try{eval("{M:with([1,2,3,4].slice( \"\" .yoyo(window)\u000c).propertyIsEnumerable(\"x4\")){continue L;continue M\nreturn;\n } }");}catch(ex){}
try{eval("throw [,];");}catch(ex){}
try{eval("if((({ \u3056: \u3056 }) =  '' .valueOf(\"number\"\u0009).propertyIsEnumerable(\"x5\")).isPrototypeOf((({x5: true})))) { if ((NaN = x =  / new [1,2,3,4].map(new function(id) { return id }( /x/ ), 4.))) return; else [1,2,3,4].slice}");}catch(ex){}
try{eval("CollectGarbage()\nx;\n");}catch(ex){}
try{eval("L: {{( \"\"  );try { CollectGarbage() } finally { (x); }  } }");}catch(ex){}
try{eval("{M:\u000cdo throw true; while((\u3056 = NaN.valueOf(\"number\")) && 0); }");}catch(ex){}
try{eval("continue L;");}catch(ex){}
try{eval("if(function::x) {{} } else  if ([[]].throw(this)) {var x,  ;return \u000cthis; } else prop;");}catch(ex){}
try{eval("{-1;M:if(x) var y; }");}catch(ex){}
try{eval("{var NaN = {}; }");}catch(ex){}
try{eval("/*for..in*/for(var [y, x] = [(({ get x(x) { yield 033 ? window : functional }  }))]++ in NaN) {with({}) for(let y in [5,6,7,8]) try {  } catch(\u3056 if (function(){undefined;})()) { return this; } catch(x) { window; } finally { return; }  }");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) this.zzz.zzz;");}catch(ex){}
try{eval("Function");}catch(ex){}
try{eval("x =  ;");}catch(ex){}
try{eval("{if(({a1:1})) return functional; else  if (x3) {CollectGarbage() }\nM:while((([].x3)) && 0)true;\n }");}catch(ex){}
try{eval("switch((( /x/ .prototype = null) && ( /x/g )().yoyo(()))) { default: /*for..in*/for(var this in ((function  x4 () { return; } )((undefined |= ({a2:z2}) if (window)))))throw  /x/g ;case 1.3: case 7: break;  }");}catch(ex){}
try{eval("L:switch(~0x99) { case 0.1 ?  /x/  : this: function (x, this) { {} }  }");}catch(ex){}
try{eval("throw NaN;");}catch(ex){}
try{eval("\n");}catch(ex){}
try{eval("default: break; case this: ( /x/ );break; CollectGarbage()break; case 1e81: ;case 6: break; case x: break; return arguments;break; case x: [,,];break; var x;break; case  /x/g : var \u3056 = [,,], x4;case 5: ;break; ");}catch(ex){}
try{eval("throw window;");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("{{return;[1,2,3,4].slice } }");}catch(ex){}
try{eval("var x3\n");}catch(ex){}
try{eval("M:if(undefined) {(x); } else  if ( /x/ ) throw true; else (window);");}catch(ex){}
try{eval("if(null) CollectGarbage()");}catch(ex){}
try{eval("\u0009\n");}catch(ex){}
try{eval("if((uneval( /x/ ))) var y, x;");}catch(ex){}
try{eval("if(({x5: true })) var x4 =  '' , x = x4 getter: 1e81; else 3");}catch(ex){}
try{eval("function  x1 () { M:if(this) throw x; else  if (window) return this; else {{} } } ");}catch(ex){}
try{eval("L: {return; }");}catch(ex){}
try{eval("if(x.propertyIsEnumerable(\"x\")()) {/*for..in*/for(var NaN = window++ in \n({a2:z2})) {var x = 0x99;{} } }");}catch(ex){}
WScript.Echo("600");
try{eval("do {(null);; } while(((Math.sin).call(null,  /x/ )) && 0);");}catch(ex){}
try{eval("/*for..in*/for(var ((-1))((delete -3/0).valueOf(\"number\")) in ((( /x/g ()).watch)((this.prototype))))return x;");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("/*for..in*/M:for(var get([window]) in ((({}).hasOwnProperty)(0x99))){if(window) { if ( /x/g ) {var x, x; }} else {x{} } '' ; }");}catch(ex){}
try{eval("var x4 =  /x/ ;\nif([[]].yoyo((-0))) { if (true++) { /x/g ;( '' ); }} else {break L; }\n");}catch(ex){}
try{eval("L:with({case true(): : (eval(\"false >>>=1 << x.prop\", x =  /x/  ? ~[[1]] : ++ \"\" )).eval(([15,16,17,18].filter(true, this).unwatch(\"prop\")))})if((null)[1e+81]\u0009) CollectGarbage() else  if ( \"\" ) break L; else {return  '' ; }");}catch(ex){}
try{eval("throw NaN;{;{}/* }");}catch(ex){}
try{eval("throw -3/0");}catch(ex){}
try{eval("{break L;/*for..in*/for(var x in \u3056) {} }");}catch(ex){}
try{eval("continue L;");}catch(ex){}
try{eval("try { for(let y in []); } catch(let) { throw x; } finally { with({}) window = y; } ");}catch(ex){}
try{eval("with({}) /*for..in*/M:for(var [function::\u3056, x] = functional in undefined) {return [1];(window); }");}catch(ex){}
try{eval("{(({a1:1})); }");}catch(ex){}
try{eval("/*for..in*/for(var x1 in ((/a/gi)(this.zzz.zzz))){if(({} + x)) {var this = [,,z1], window;var x; } else  if (typeof [[]]) {([[]]); } else CollectGarbage()var this = this; }");}catch(ex){}
try{eval(";");}catch(ex){}
try{eval("if( \"\" ) var x5; else  if ((uneval(-1))) var y = window, \u3056;");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("L:if(x = this) { if ((x = 5.0000000000000000000000.this)) {false; }} else {var x, x =  '' ;return; }");}catch(ex){}
try{eval("switch( /x/ ) { default: throw 1e81;break; break; case 5: var x4;break;  }");}catch(ex){}
try{eval("{var x5, x = true; }");}catch(ex){}
try{eval("if(new (( ''  |=  x2null))()) CollectGarbage()");}catch(ex){}
try{eval("do  /x/ ; while((5.0000000000000000000000 ,  '' ) && 0);");}catch(ex){}
try{eval("L: continue M;");}catch(ex){}
try{eval("if(eval(\"continue L;\", (( /x/ ).propertyIsEnumerable(\"prop\")))) { if (this.zzz.zzz) {} else var window = -1}");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("L:if( /x/g ) {(window);var x2; } else  if ([z1]) var x4 = [], x; else 'haha'.split");}catch(ex){}
try{eval("return");}catch(ex){}
try{eval("{break L; }");}catch(ex){}
try{eval("if(true) { if (new new (Math.pow)((x ^ this))(new ((x5).watch(033))(([1e4])))) } else var x;");}catch(ex){}
try{eval("throw x;");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("x = this;");}catch(ex){}
try{eval("x.this");}catch(ex){}
try{eval("L:if(this.prop = function::x) { if ((yyy.((1e+81).call(0/0, ) >> functional.window))) {var x = undefined;do {([1,2,3,4].slice).callvar x2; } while(( ) && 0); } else {{}while((prop) && 0)var  ; }}");}catch(ex){}
try{eval("if([false]) /*for..in*/for(var x1 in (((/a/gi).call)(NaN = (function ([y]) { })()))){/*for..in*/for(var NaN = x5 in this) CollectGarbage() } else  if ([x3]) ( '' );");}catch(ex){}
try{eval("switch((x)(window, true)) { case [window]: continue L\u000c;break; case 6: default:  }\n/*for..in*/for(var x in 3.141592653589793) ([[1]]);");}catch(ex){}
try{eval("{break M;return;(window); }");}catch(ex){}
try{eval("var x2 = 1e81;\nCollectGarbage()\n");}catch(ex){}
try{eval("if( '' ) L:if([,,z1]) {var x;var \u3056 = 5.0000000000000000000000, x = null; } else  if (functional = null.valueOf(\"number\")) CollectGarbage()");}catch(ex){}
try{eval("if((([1,2,3,4].slice).call)()) /*for..in*/L:for(var x in 1.3) break M; else  if (([11,12,13,14].sort)) M:with({\u3056: ([15,16,17,18].map(window, 1e4).unwatch(\"NaN\"))})var window = 1e+81;");}catch(ex){}
try{eval("if((--window)) { if ( .prop = window) {}\n\u0009var functional = null, this;\n else 1.3;}");}catch(ex){}
try{eval("{var window =  '' , window; }");}catch(ex){}
try{eval("with(x = null){return \u3056;( \"\" ); }");}catch(ex){}
try{eval("M:with(eval(\"M:with( /x/ )var x = undefined, x2;\", ({x2: this,   getter: function(q) { return q; } }))){M:with((1.3.eval(true)--))throw undefined;return  '' ; }");}catch(ex){}
try{eval("/*for..in*/for(var [\u3056, x] = (({a2:z2}).watch(\"NaN\", ({}).hasOwnProperty)) in [,,z1].watch(\"y\", function(q) { return q; })) {M:if(null.isPrototypeOf(function::\u3056)) { if (x) {(undefined);CollectGarbage() }} else {var x1, x5 = this;var prototype; } }");}catch(ex){}
try{eval("{;var x = ({a1:1}), x3 = 1.2e3; }");}catch(ex){}
try{eval("{{var x2 = 4.;Math.pow } }");}catch(ex){}
try{eval("if(window++) /*for..in*/for(var [x4, x4] = 0 in false) x else  if (eval(\"/*for..in*/for(var x2 in ((CollectGarbage)(false))){{} }\", null.x3.unwatch(\"x3\"))) (0x99); else return;");}catch(ex){}
try{eval("/*for..in*/for(var x in ((window)(false))){var x3 = [1,,], 5.0000000000000000000000 =  \"\" ;var x = functional; }");}catch(ex){}
try{eval("/*for..in*/for(var ({})\n in (((eval(\"0x99\", -0)))(null = functional))){function ( , x) { {} }  }");}catch(ex){}
try{eval("L: var functional;");}catch(ex){}
try{eval("/*for..in*/L:for(var x3 in ( /x/g .throw(.2))) ;");}catch(ex){}
try{eval("break L;");}catch(ex){}
try{eval("M:if(((eval)() ? window && [,].unwatch(\"x\") : x5.x)) {{}x1; } else \n");}catch(ex){}
try{eval("var x =  /x/ , x5;if(true) { if ([z1])  else ;}");}catch(ex){}
try{eval("new (({}).hasOwnProperty)()++;");}catch(ex){}
try{eval("with((1e4.x3 && function ([y]) { }.valueOf(\"number\")).prototype)/*for..in*/for(var [\u3056, x] =  /x/  in this) {throw arguments; }");}catch(ex){}
try{eval("/*for..in*/for(var NaN = x2 = x in [1,,]) var x,   = window;");}catch(ex){}
try{eval("if([,,]) { if ( /x/g .prototype =  /x/  *=  /x/  .. x) {{}null } else {var x = 1e4, \u3056;return\n }}");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("(5.0000000000000000000000);");}catch(ex){}
try{eval("switch(x = prototype) { case 1: break;  }");}catch(ex){}
try{eval("throw [1,,]\n");}catch(ex){}
try{eval("/*for..in*/M:for(var x = (\u000c~this) in [1]) {throw true;return 1.2e3; }");}catch(ex){}
try{eval("x4 = x;");}catch(ex){}
try{eval("L:switch(this) { default: break;  }");}catch(ex){}
try{eval("L: {{function (x) { yield  /x/g  }  } }");}catch(ex){}
try{eval("if(({a1:1})) (false); else  if ((++[z1])) return true; else {break M; }");}catch(ex){}
try{eval("/*for..in*/for(\u0009var x = [-3/0].filter([]) .. x.y in (-1)) {thisreturn 033; }");}catch(ex){}
try{eval("0.1;{}");}catch(ex){}
try{eval("(this)\nreturn;");}catch(ex){}
try{eval("if( ''  in  '' ) { if ([15,16,17,18].map(/function x') { return false } , -1)) continue L; else [,,z1];}");}catch(ex){}
WScript.Echo("700");
try{eval("if((null << window)) { if (((function (x) { return x } )([[1]],  \"\" ))) (1e-81);} else ([z1]);");}catch(ex){}
try{eval("L: \u0009return;");}catch(ex){}
try{eval("if((NaN\u0009.prototype = undefined.watch(\"functional\", eval))) { if (this.zzz.zzz) /*for..in*/for(var x in ((((new Function(\"( /x/ );\"))).apply)(false))){return 4.;return; }} else /*for..in*/for(var window = -0 in \u3056) {return;return; }");}catch(ex){}
try{eval("M:if((p={}, (p.z = x = ([ \"\" ]))())) {var x = window, (-0) }");}catch(ex){}
try{eval("L:if() {} else {}break L;");}catch(ex){}
try{eval("[1,2,3,4].slice");}catch(ex){}
try{eval("do {var window, x = ({a1:1});L:if(this\n) return; else return; } while((((function(q) { return q; }).call)(this, (function ([y]) { })()) >>= eval(\"return window;\", -3/0) .@x:: x * x = functional -= [[1]]) && 0);");}catch(ex){}
try{eval("{do throw  /x/g ; while(() && 0);continue L; }");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("while(((this.zzz.zzz)) && 0){{} }");}catch(ex){}
try{eval("if(({x: [z1], this setter: new Function })) {; }");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) CollectGarbage()");}catch(ex){}
try{eval("/*for..in*/for(var x in  /x/g ) CollectGarbage()\n{}");}catch(ex){}
try{eval("/*for..in*/for(var window = 4. in this) {function  functional () { var x = x4; }  }");}catch(ex){}
try{eval("M:if((-1)) {(0.1);(3/0); } else  if (window) {return [z1]; } else {continue M;var x, NaN = ({a2:z2}); }");}catch(ex){}
try{eval("{throw 1.3; }");}catch(ex){}
try{eval("L:switch(<xxx>{x1}</xxx>.(true.prototype = x)) { default: ;case 0: var y, \u3056 = window;break; case 4: return\ny;case 9: (0/0);{}case 9: L:if(.2) { if ([z1]) {this; }} else {var function::x1, x = x5;CollectGarbage() } }");}catch(ex){}
try{eval("M:with({function::x5: (uneval(x))}){ }");}catch(ex){}
try{eval("{do {throw ({});{} } while(((x4%=this)) && 0); }");}catch(ex){}
try{eval("throw x5;");}catch(ex){}
try{eval("if([[]]) { if (window = [1,,].isPrototypeOf(false /= x2)) {{{}L:with({window: [this].sort(function (x)3.141592653589793)})throw  '' ; } }} else {while((((1e-81 for each (y in 1e+81)))[~-1]) && 0){var prop = x, NaN; } }");}catch(ex){}
try{eval("{throw .2; }");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("with({}) { throw NaN; } ");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("with({window: (!3)}){;/*for..in*/for(var (true)(this) in (([true])(( \"\" .isPrototypeOf( '' ))(this,  \"\" ))))with({x1:  /x/ })[1]; }");}catch(ex){}
try{eval("{{/*for..in*/for(var x4 = x =  \"\"  in x) {continue M; } } }");}catch(ex){}
try{eval("/*for..in*/for(var [functional, x4] = (function ([y]) { }++) in (Function(x4)).x) /*for..in*/L:for(var x in ((Math.sin)((window.prop)))){var x3; }");}catch(ex){}
try{eval("L:if( /* Comment */window) throw  '' ; else {:return; }");}catch(ex){}
try{eval("if(((x5 = (x.hasOwnProperty(\"x::x\")))[true])) { if ([ /x/ .isPrototypeOf( /x/g )]) var x4;} else {var x5 = true; }");}catch(ex){}
try{eval("if(((new Function(\"(y);\")))) break M; else  if ((uneval(arguments))) {return;CollectGarbage() } else  for each (window in x3 = x5) if (new ({}).hasOwnProperty())");}catch(ex){}
try{eval("\n");}catch(ex){}
try{eval("if(5.0000000000000000000000) {var x;{} } else  if (3.141592653589793 & new Array(x, y = false)) {({a1:1}) } else {Math.pow }");}catch(ex){}
try{eval("(<bbb xmlns=\" '' \"> </bbb>.(this));");}catch(ex){}
try{eval("L: var x, functional;return\n{}");}catch(ex){}
try{eval("/*for..in*/for(var [function::functional, x] = this in function ([y]) { }) do  /x/ ; while(( /x/g ) && 0);");}catch(ex){}
try{eval("if(functional = true) {throw false; } else  if (CollectGarbage()) var x;");}catch(ex){}
try{eval("eval");}catch(ex){}
try{eval("([,])\n");}catch(ex){}
try{eval("/*for..in*/for(var [NaN,  ] =  /x/g  in 0x99) var x, NaN;");}catch(ex){}
try{eval("try { CollectGarbage() } finally { var x1, x3 = [1]; } ");}catch(ex){}
try{eval("while(( \"\" ) && 0){return; }");}catch(ex){}
try{eval("/*for..in*/for(var x4 = 0.unwatch(\"x\") in  ) {([1,,]);; }");}catch(ex){}
try{eval("L:if((function ([y]) { })()) var this = this, x = x\n");}catch(ex){}
try{eval("do L:if((\n = function::x)) { if ((this.zzz.zzz++)) {var x = arguments, x;return function ([y]) { }; }} else this; while((this) && 0);");}catch(ex){}
try{eval("return  \"\" ;");}catch(ex){}
try{eval("L:switch(new (CollectGarbage)([,])) { case this.zzz.zzz: return;break; default: ({}).hasOwnProperty\nbreak;  }");}catch(ex){}
try{eval("x = x = (x4)(functional = [,,]);");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("{{} }");}catch(ex){}
try{eval(" /x/ ");}catch(ex){}
try{eval("if(3.141592653589793 = CollectGarbage()) {var x, x = [[1]]; } else  if (.2)  { yield x1 } ");}catch(ex){}
try{eval("L: ([,]);");}catch(ex){}
try{eval("( '' );");}catch(ex){}
try{eval("/*for..in*/for(var [x3, x] = {} in true) {(this); { return; }  }");}catch(ex){}
try{eval("L: x");}catch(ex){}
try{eval("function  window (x3)4./*for..in*/for(var [\u3056, x2] = this in  '' )  yield break M;");}catch(ex){}
try{eval("while((-3/0) && 0){(CollectGarbage()); }");}catch(ex){}
try{eval("L: {}");}catch(ex){}
try{eval("while(((x = 5.0000000000000000000000)) && 0)if(x3 |= -0)  else  if (true.hasOwnProperty(\"prototype\")) continue M;");}catch(ex){}
try{eval("/*for..in*/for(var x = this in NaN) CollectGarbage()");}catch(ex){}
try{eval("M:if(new true) CollectGarbage() else throw null;");}catch(ex){}
try{eval("L:switch(true) { default: break;  }");}catch(ex){}
try{eval("M:while((window) && 0)L: {undefined;break L; }");}catch(ex){}
try{eval("/*for..in*/L:for(var x5 = new Error(arguments) in [,,z1]) (x1);");}catch(ex){}
try{eval("while(((undefined.x[((x = (-1)).unwatch(\"x.y\"))])) && 0)with([[1]]){var x5, \u3056; }");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("var x = function(id) { return id };");}catch(ex){}
try{eval("throw StopIteration;");}catch(ex){}
try{eval("L:switch( /* Comment */true) { case this():  }");}catch(ex){}
try{eval("with({x: (this .@*:: arguments == let (this, let = window) null)}){for(let y in []); }");}catch(ex){}
try{eval("while((( '' .prototype)) && 0)CollectGarbage()");}catch(ex){}
try{eval("with(x)");}catch(ex){}
try{eval("({}).hasOwnProperty");}catch(ex){}
try{eval("1e+81;");}catch(ex){}
try{eval("/*for..in*/for(var functional in ( \"\" .unwatch(\u0009\"x\"))) return 0;");}catch(ex){}
WScript.Echo("800");
try{eval("({}).throw(this)");}catch(ex){}
try{eval("with({}) var x2, x3 = window;");}catch(ex){}
try{eval("switch(new Math.pow(x1 .. false,  /x/g )) { default: x5;break;  }");}catch(ex){}
try{eval("with(function ([y]) { }){var NaN = null; }");}catch(ex){}
try{eval(";");}catch(ex){}
try{eval("return this;");}catch(ex){}
try{eval("/*for..in*/for(var functional--['\u3056'] in ((/a/gi)([function ([y]) { } if (null)]))){return; }");}catch(ex){}
try{eval("with({x: null})if(x) {;CollectGarbage() } else { }");}catch(ex){}
try{eval("{/*for..in*/for(var [x, x] =  /* Comment */this /=  ''  in false) {CollectGarbage()var NaN = false; }CollectGarbage()\nMath.sin\n }");}catch(ex){}
try{eval("{}\nvar 4.;\n");}catch(ex){}
try{eval("throw function::function:: ;");}catch(ex){}
try{eval("M:if(false{(undefined);x }");}catch(ex){}
try{eval("/*for..in*/for(var [x, x1] = \u3056-=[,] in  /x/g ) {([z1]); }");}catch(ex){}
try{eval("L:with(\n(null.valueOf(\"number\")).throw(([].throw(window))))throw ;");}catch(ex){}
try{eval("if((this)) {CollectGarbage()CollectGarbage() } else  if ((let (this, functional) window)) (window);");}catch(ex){}
try{eval("{}");}catch(ex){}
try{eval("L:with({x1: this = \u000cthis}){CollectGarbage() }");}catch(ex){}
try{eval("throw x2;");}catch(ex){}
try{eval("with(this for each (x4 in arguments) if ( /x/ )){}");}catch(ex){}
try{eval("try { try { CollectGarbage } finally { ; }  } catch(x if (function(){with({}) return  /x/g  .. window;})()) { for(let y in [5,6,7,8]) return x3 >=  /x/g ; } ");}catch(ex){}
try{eval("{M:with({ : new (function  \u3056 () { yield true } )([,,z1])}){{}{} }var window = [1,,], functional\n }");}catch(ex){}
try{eval("switch(this) { case 3: throw [,,z1]\n{}break;  }");}catch(ex){}
try{eval("/*for..in*/for(var x in ((Math.sin)(({x4 setter: Function, x: ( .(())) }))))if((function ([y]) { })()) { if (true) { }} else {}");}catch(ex){}
try{eval("if(true.x) {if((x =  '' )) var x = window; else  if (true) {var \u3056;continue L; } }");}catch(ex){}
try{eval("if(this) {var x; }");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("with({}) { for(let y in [5,6,7,8]) return; } ");}catch(ex){}
try{eval("L:do {window;/*for..in*/for(var [x1, NaN] = 3/0.hasOwnProperty(\"x4\").yoyo( \"\" ) in null) var \u3056 = [[]], x = ({a1:1}); } while((-\u3056 = x = window) && 0);");}catch(ex){}
try{eval("L\n:\u000cwith({window: + }){/*for..in*/for(var [x4,  ] = x in -3/0) 'haha'.split }");}catch(ex){}
try{eval("{return; }");}catch(ex){}
try{eval("{while((this) && 0) }");}catch(ex){}
try{eval("var this = x3, x4 = x;");}catch(ex){}
try{eval("L: {}");}catch(ex){}
try{eval("if(x) {/*for..in*/for(var \u3056 = 3/0 in 1e-81) var x4 = true; }\u000c else  if (window) {return  '' ;(false); }");}catch(ex){}
try{eval("r");}catch(ex){}
try{eval("if(([,] = (x3))[(delete (p={}, (p.z = this)()))]) { if (\nwindow) {return true\n } else with({x4: true}){throw  /x/g ;x; }}");}catch(ex){}
try{eval("L:if([({}) for each (x in \nx)]) { if ( \"\" .yoyo(1e+81)) {{} }} else ");}catch(ex){}
try{eval("while(((0/0[x])) && 0){({a1:1}); }");}catch(ex){}
try{eval(";CollectGarbage()\n(CollectGarbage).callwith({NaN: x5}){; }\n");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) try { throw this; } catch(x) { NaN = x5; } finally { try { return undefined; } catch(x2 if (function(){CollectGarbage()})()) { var y =  ; }  } ");}catch(ex){}
try{eval("/*for..in*/for(var [let, window] = null in 1.2e3) continue L;");}catch(ex){}
try{eval("with({}) for(let y in []);");}catch(ex){}
try{eval("if(( .y)) { if (()()) if( /x/g ) {return x;{} } else  if ( \"\" ) window} else if(1e4)  else  if ( \"\" ) {([[]]); } else {var each; }");}catch(ex){}
try{eval("/*for..in*/M:for(var [functional, x] =  \"\" ++ in x) var x5 = functional, window\nthrow (-1);");}catch(ex){}
try{eval("do {return; } while((1.2e3) && 0);");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("[, ] = x;");}catch(ex){}
try{eval("try { throw StopIteration; } catch(x) { with({}) throw StopIteration; } finally { {} } ");}catch(ex){}
try{eval("var NaN, functional = x: x;");}catch(ex){}
try{eval("with({}) return this & this @ ([z1,,]);");}catch(ex){}
try{eval("/*for..in*/for(var x in window.x.((let (x =  /x/ , x) this ? ( get function::x(window, x) { return window.prototype } ) : 'fafafa'.replace(/a/g, function (x, prop)false)))) {with({}) { return\n(x); } /*for..in*/for(var \u3056 = ~x.isPrototypeOf((delete null)) in []) function (this, \u3056) { yield 033 }  }");}catch(ex){}
try{eval("/*for..in*/for(var x = ((window.watch(\"x\", [1,2,3,4].map) for (x in []) for (\u3056 in -0))) in this) var functional, x;");}catch(ex){}
try{eval("/*for..in*/for(var x in undefined) {}");}catch(ex){}
try{eval("switch( ) { case x: break;  /x/g break; default: break; case 9: var x, window;case 9: break; (window);\u000ccase 3: break; break; case 2: [1];break; case [z1]: var functional = window, this = window;case 4: x2;case []: var x, x = function ([y]) { };case 4.: break; throw this;break; case 3: var this;(({}).hasOwnProperty).applybreak; break M;break; break; case 0: break; case 1e+81: throw true;break; throw (-0);break; case 1: CollectGarbage()case 9: break; case [,,z1]:  }");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("if([NaN.x1 for (NaN in x)]) { if (x::x4 = [x2, , , x, x2]) {var default: break; return;break; ; =  \"\" ;if( '' ) {window } else  if (window) {return [[1]];1e81; } else { } } else <employee id=\"1\"><name>Joe</name><age>20</age></employee>}");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("throw x;for(let y in []);");}catch(ex){}
try{eval("with(function::  = function(id) { return id } ? x = function (x, x) { return this } () : new ([,,])(x::x1, 0)){var window =  '' ;\nCollectGarbage()\nreturn null; }");}catch(ex){}
try{eval("continue L\n");}catch(ex){}
try{eval("/*for..in*/for(var x = (({functional: (-1)})) in 0/0) return 0;");}catch(ex){}
try{eval("M:if((let (x2, x) [[1]]) ? ((x = this) *= (({x: 1e81}))) : this) NaN = (this.zzz.zzz).throw( '' ) else  if ((false//h\n % true.prototype)) {}");}catch(ex){}
try{eval("return  /x/g ;");}catch(ex){}
try{eval("\nCollectGarbage()\n");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) /*for..in*/for(var this.x in false) {L: {} }");}catch(ex){}
try{eval("L: {CollectGarbage() }");}catch(ex){}
try{eval("if(x = x.eval(((Array([[1]], -3/0))(this, undefined))).(3/0 *= false) .. ('fafafa'.replace(/a/g, [1,2,3,4].map) %= undefined)) if(false) var x, functional = window; else {throw x4; }\u000c else  if (x++) {throw NaN;\u000cvar x = functional; }");}catch(ex){}
try{eval("/*for..in*/M:for(var [window, x] = x1.prop = <zzz>null</zzz>.( \n) in x.unwatch(\"\\u3056\") ^= - /x/ ) if((window)[delete this.zzz.zzz]) { if (x2.x) if((x for (NaN in -3/0))) {var x = function ([y]) { }, x; } else  if ( \"\"  % undefined)  else {functional, x1e4; }} else var x3;");}catch(ex){}
try{eval("do {/*for..in*/for(var x = ({}.hasOwnProperty(\"x2\")) in this.isPrototypeOf(window)) {CollectGarbage()[,]; } } while((this = window) && 0);");}catch(ex){}
try{eval("var x = (-0), x1;");}catch(ex){}
try{eval("if(new Boolean((-3/0.hasOwnProperty(\"x3\")))) { if (eval(\"x.yoyo( \\\"\\\" )\", \u3056 =  /x/ )) {; }} else {L:if(R) { if ( '' ) {return;(true); }} else {} }");}catch(ex){}
try{eval("if(0.1) L: CollectGarbage() else  if ( /x/  ? x = x : (x5 = this)) {{}var x, x = x; } else var x3 = [,];");}catch(ex){}
try{eval("L:if(x1) ; else  if ({}) break M; else {;var \u3056 = 0; }");}catch(ex){}
try{eval("if([1,,]()) x1 setter: function  x5 (yield) { ; }  else  if ((eval(\"var  , x4;\", window))) ");}catch(ex){}
try{eval("with(\n[15,16,17,18].some(function  functional (x) { {} } , [ /x/g  for each (x in window)])){while((window) && 0)windowvar x =  '' ; }");}catch(ex){}
try{eval("var x = -1, y;");}catch(ex){}
try{eval("/*for..in*/M:for(var window in (([1,2,3,4].map)(\u3056 +  /x/g  <<=  '' )))");}catch(ex){}
try{eval(";\n(undefined);{var functional = prop, x;var x; }\n");}catch(ex){}
try{eval("L:if() {(3.141592653589793);; } else  if (x) throw  \"\" ; else {}");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
WScript.Echo("900");
try{eval("switch( \"\"  | y) { case (eval(\"new (function (x2, y) { throw x; } )(functional)\", \u3056.hasOwnProperty(\"x\")))(): break; break; var x = true, ;break; break; break; while((.2) && 0){CollectGarbage()var x; }break; break;  }");}catch(ex){}
try{eval("M:while(() && 0){if( /x/g ) { if \n( '' ) var x, x::x = x4; else {x, this = true }} }");}catch(ex){}
try{eval("M:if((\n( \"\"  != y).isPrototypeOf(0/0 !== x1\u000c).unwatch(\"NaN\"))) return  /x/g ; else  if (null) {with({x3: [1]}); }");}catch(ex){}
try{eval("if([ /x/g ]) [1,2,3,4].slice");}catch(ex){}
try{eval("L:with( /x/ .valueOf(\"number\")){{} }\nvar functional, x1 = {};\n");}catch(ex){}
try{eval("/*for..in*/for(var x3 in ((({}).hasOwnProperty)(({ x:  , x2: [] }) = ((\u3056 >= x) &= .2 *= ({}))[((new Function)(function::x))]))){var x = <x><y/></x>;return; }");}catch(ex){}
try{eval("if(this instanceof  /x/ ) { if (({functional: 1e+81.prototype for (x1 in ({})) for each (NaN in  /x/g ) if (y),  set x3() { yield !3.141592653589793 / window }  })) {throw window;CollectGarbage() }} else {throw x; }");}catch(ex){}
try{eval("x = y;");}catch(ex){}
try{eval("L:if(window) {return [z1,,];var NaN; }");}catch(ex){}
try{eval("M:do {break L; } while((x.x2) && 0);");}catch(ex){}
try{eval("");}catch(ex){}
try{eval("/*for..in*/M:for(var \u3056 = let (x) x5 in 1e-81 && [,,z1]) {var window, y;;{break L; } }");}catch(ex){}
try{eval("/*for..in*/M:for(var x.  in (<x><y/></x>.( '' ))) {throw -1;var {var window = window; } = window; }\n/*for..in*/for(var [x, x4] = x = window in /*\n*/[11,12,13,14].sort) \n");}catch(ex){}
try{eval("/*for..in*/L:for(var [functional] = ({x: false ?  /x/  :  \"\" }) in ((([,,z1] !== (-1)).unwatch(\"x5\"))(((x ||  '' ).yoyo(window ? ({a1:1}) : window).watch(\" \", x).x)))){return  /x/ ;;with((( \"\" )[true])){break L;{} } }");}catch(ex){}
try{eval("while((new Function({})) && 0){throw -0;(({a1:1})); }");}catch(ex){}
try{eval("throw x;");}catch(ex){}
try{eval("x =  ;");}catch(ex){}
try{eval("/*for..in*/L:for(var x = (x << [[1]]) in x3) {{}var x; }");}catch(ex){}
try{eval(";");}catch(ex){}
try{eval("while((0/0) && 0){\u000cbreak L;CollectGarbage() }");}catch(ex){}
try{eval("L: {eval([,,]); }//h\n");}catch(ex){}
try{eval("/*for..in*/for(var x in (((new Function(\"with({ : x.x5 = this}){; }\")))(null.prop))){throw 1e81;{} }");}catch(ex){}
try{eval("with(x3){;var \u3056 = [[1]]; }");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("{if(this) { if ((window)[[z1]]) {break L; } else [1,2,3,4].slice} }");}catch(ex){}
try{eval("if(((({x4: [,,]})) for (x( '' ) in  '' ) for (\u3056 in [[]]))) { if ((new Function).call(x3 = arguments, ( /x/  & 1e81), false)) var x1 = this, x5 = x;} else var x =  /x/ , x1;;");}catch(ex){}
try{eval("M:if(0.1 >>> eval(\"return;\", function(id) { return id }) | this\n) {while((window) && 0)throw this;throw []; }");}catch(ex){}
try{eval("L:with(({ get x() { return  /x/  } , this: window }))eval");}catch(ex){}
try{eval("if(((/a/gi)(prop + null.throw(null)))) {throw true;({a2:z2}); } else  if (({ : [,], x: x }).yoyo()) {x{} }");}catch(ex){}
try{eval("  = \u3056;");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("L: return;");}catch(ex){}
try{eval("L: var x, x =  '' ;");}catch(ex){}
try{eval("(this)[x.(this)], ((p={}, (p.z = [15,16,17,18].map([1,2,3,4].slice, 5.0000000000000000000000))()))");}catch(ex){}
try{eval("with({}) {  } ");}catch(ex){}
try{eval("if((y)[1.3]++) { if ((this.zzz.zzz)) return [z1,,];} else {return;throw 1.2e3; }");}catch(ex){}
try{eval("with({}) { for(let y in []); } ");}catch(ex){}
try{eval("L:with({NaN: 0.1 >> [,,z1]}){undefinednull; }");}catch(ex){}
try{eval("while(([1,,]) && 0){break L;CollectGarbage() }");}catch(ex){}
try{eval("/*for..in*/for(var NaN =  /x/g  in x5) /a/gi");}catch(ex){}
try{eval("\n");}catch(ex){}
try{eval("if(1e+81)  else  if (({x: eval(\"x\", 5.0000000000000000000000),  set functional x (functional) { yield [11,12,13,14].filter }  })) {L:with(x3 = function ([y]) { }){CollectGarbage()(1e4); } }");}catch(ex){}
try{eval("if( '' ) {evalCollectGarbage() } else  if ( \"\" ) {return;return  /x/ ; }");}catch(ex){}
try{eval("((try { var x3 = (-0), function::functional = x; } catch(x2) { var functional = .2, x; } ).call).call");}catch(ex){}
try{eval("if((x3 = NaN).valueOf(\"number\")) {return x3; } else  if ((let (NaN = y) x)) var x = false, functional = this;");}catch(ex){}
try{eval("do {with(functional.prototype = x3){return; } } while((({x: ([1,2,3,4].map)(null--, null), this: [false for (\u3056 in window)] })) && 0);");}catch(ex){}
try{eval("if(({} += 3.141592653589793) .@*:: 1e-81)  else  if ((( \"\" )[4.])) {; }");}catch(ex){}
try{eval("L: {L: {var this, window =  '' ; } }");}catch(ex){}
try{eval("L:if((new (Math.pow)(x = x, x4))) {var x;CollectGarbage() }");}catch(ex){}
try{eval("if((undefined.eval((~(typeof void ({}) >>= 1e4)).prototype))) { if ((new (<ccc:ddd><x><y/></x></ccc:ddd>)() %  /x/  >>=  /x/ )) {/*for..in*/for(var [NaN, x] =  ''  ||  /x/g  || this.hasOwnProperty(\"x\") in true.watch(\"x\", /a/gi)) {CollectGarbage(){} }continue M; }} else if( \"\" ) { if (x2) \u3056 = null} else return;");}catch(ex){}
try{eval("L:if((uneval(function(id) { return id }))) { } else  if ([({functional: new ((({a1:1}) &= window))() })].map(({}).hasOwnProperty)) {\u000cy *= false;for(let y in [5,6,7,8]) throw [[]]; }");}catch(ex){}
try{eval("while((void 1e-81) && 0)");}catch(ex){}
try{eval("return;");}catch(ex){}
try{eval("with({}) { var \u3056, this = window; } ");}catch(ex){}
try{eval("x::x::x3((+true)) = functional;");}catch(ex){}
try{eval("if() { if ((({ set x2(x, x) { ((Math.pow).apply).call } , x setter: function  x (x3, x) { yield ({a2:z2}) }  }))) {([1,,]); }} else {/*for..in*/for(var x = this in true) [1,2,3,4].slicevar x4; }");}catch(ex){}
try{eval("if((({}).unwatch(\"prototype\")) >>= ++~1e81) {if( \"\" ) { if (3) {CollectGarbage()(0.1); } else var x;}{} } else  if (({x: 3.141592653589793 > this})) ([z1]); else {return; }");}catch(ex){}
try{eval("L:if((({x getter: function () \"\" , x getter: -0 }))) var x; else {; }throw StopIteration;");}catch(ex){}
try{eval("var function::x = x5, x = yield;");}catch(ex){}
try{eval("break L;");}catch(ex){}
try{eval("return;L: CollectGarbage()");}catch(ex){}
try{eval("{}");}catch(ex){}
try{eval("for(let y in []);");}catch(ex){}
try{eval("with(undefined.yoyo(window)){x\n[1,2,3,4].map }");}catch(ex){}
try{eval("/*for..in*/for(var [x, functional] = [11,12,13,14].some++ in ( ''  instanceof [,,])) ;");}catch(ex){}
try{eval("{; }");}catch(ex){}
try{eval("this.zzz.zzz;");}catch(ex){}
try{eval("{[[1]]; }");}catch(ex){}
try{eval("if((y\u0009.this.hasOwnProperty(\"x3\"))) {{ } } else {}");}catch(ex){}
try{eval("/*for..in*/for(var [this, functional] = (x4 .@  /x/g [-3/0]) in x1) {3;(this); }");}catch(ex){}
try{eval("if(new function  x (x, x5) { \u000creturn window } (x << false)) { if ([(Number()) -= (window--)].filter(function(q) { return q; })) L:if(case 8: break; (this);break; ) do {[z1,,]; } while((x.prop = 1e-81) && 0); else  if (Function(x1, this)) { \"\"  } else with({}) { var window = this; } }");}catch(ex){}
try{eval("L:with(x = null){undefined;var   = delete, x =  \"\" ; }");}catch(ex){}
try{eval("with({y: (;) ? (((new Function(\"[] = (window ?  /x/  : undefined)\"))).call(this, {}, [1])) ? (functional = undefined) : x4 = 4. : false}){/a/gi( \"\" ); }");}catch(ex){}
try{eval("/*for..in*/M:for(var x1 in x) {throw undefined;this; }");}catch(ex){}
try{eval("while(( .prototype = [z1,,].prototype) && 0){var x =  /x/ , y = null;null }");}catch(ex){}
try{eval("with('fafafa'.replace(/a/g, (function () { yield x4 } ).apply))/*for..in*/for(var this = this(x) %= (Iterator()) in true) {CollectGarbage() }");}catch(ex){}
try{eval("with({}) for(let y in []);");}catch(ex){}
try{eval("var y = this--;");}catch(ex){}
try{eval("for(let y in [5,6,7,8]) CollectGarbage()");}catch(ex){}
try{eval("/*for..in*/for(var [x4, x3] = (({})\n.valueOf(\"number\").watch(\"functional\", Math.pow)) in window = x) break L;");}catch(ex){}
try{eval("/*for..in*/for(var x in ((function (x) { return function ([y]) { } } )(false)))var x, NaN;");}catch(ex){}
try{eval("switch(this) { case (-1.prototype = x1 !== true): CollectGarbage()break; case undefined: break; default: break; case ({}).hasOwnProperty: {var x = true, NaN; }break; case 5: return; }");}catch(ex){}
WScript.Echo("1000");
try{eval("L:if(function  \u3056 (x5) { yield (x ? window : true) } ( /x/g )) { if ((x.x).prototype.yoyo(null = (void  \"\" ))/*\n*/) (undefined); else if(x) {; } else  if (window) (({}));}");}catch(ex){}
