people/sam/demos: lol.js.html

File lol.js.html, 1.4 MB (added by sam, 4 years ago)
Line 
1<!doctype html>
2<html lang="en-us">
3  <head>
4    <meta charset="utf-8">
5    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6    <title>Emscripten-Generated Code</title>
7    <style>
8      .emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
9      textarea.emscripten { font-family: monospace; width: 80%; }
10      div.emscripten { text-align: center; }
11      div.emscripten_border { border: 1px solid black; }
12      /* the canvas *must not* have any border or padding, or mouse coords will be wrong */
13      canvas.emscripten { border: 0px none; }
14    </style>
15  </head>
16  <body style="background-color: black;">
17    <div class="emscripten" id="status">Downloading...</div>
18    <div class="emscripten">
19      <progress value="0" max="100" id="progress" hidden=1></progress> 
20    </div>
21    <div class="emscripten_border">
22      <canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
23    </div>
24<div style="display: none;">
25    <div class="emscripten">
26      <input type="checkbox" id="resize">Resize canvas
27      <input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer
28      &nbsp;&nbsp;&nbsp;
29    </div>
30   
31    <textarea class="emscripten" id="output" rows="8"></textarea>
32</div>
33      <input type="button" value="Fullscreen" onclick="Module.requestFullScreen(document.getElementById('pointerLock').checked,
34                                                                                document.getElementById('resize').checked)">
35    <script type='text/javascript'>
36      // connect to canvas
37      var Module = {
38        preRun: [],
39        postRun: [],
40        print: (function() {
41          var element = document.getElementById('output');
42          element.value = ''; // clear browser cache
43          return function(text) {
44            text = Array.prototype.slice.call(arguments).join(' ');
45            // These replacements are necessary if you render to raw HTML
46            //text = text.replace(/&/g, "&amp;");
47            //text = text.replace(/</g, "&lt;");
48            //text = text.replace(/>/g, "&gt;");
49            //text = text.replace('\n', '<br>', 'g');
50            element.value += text + "\n";
51            element.scrollTop = 99999; // focus on bottom
52          };
53        })(),
54        printErr: function(text) {
55          text = Array.prototype.slice.call(arguments).join(' ');
56          if (0) { // XXX disabled for safety typeof dump == 'function') {
57            dump(text + '\n'); // fast, straight to the real console
58          } else {
59            console.log(text);
60          }
61        },
62        canvas: document.getElementById('canvas'),
63        setStatus: function(text) {
64          if (Module.setStatus.interval) clearInterval(Module.setStatus.interval);
65          var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
66          var statusElement = document.getElementById('status');
67          var progressElement = document.getElementById('progress');
68          if (m) {
69            text = m[1];
70            progressElement.value = parseInt(m[2])*100;
71            progressElement.max = parseInt(m[4])*100;
72            progressElement.hidden = false;
73          } else {
74            progressElement.value = null;
75            progressElement.max = null;
76            progressElement.hidden = true;
77          }
78          statusElement.innerHTML = text;
79        },
80        totalDependencies: 0,
81        monitorRunDependencies: function(left) {
82          this.totalDependencies = Math.max(this.totalDependencies, left);
83          Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
84        }
85      };
86      Module.setStatus('Downloading...');
87    </script>     
88    <script type='text/javascript'>
89
90      // Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code
91// Note: Some Emscripten settings may limit the speed of the generated code.
92try {
93  this['Module'] = Module;
94  Module.test;
95} catch(e) {
96  this['Module'] = Module = {};
97}
98// The environment setup code below is customized to use Module.
99// *** Environment setup code ***
100var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
101var ENVIRONMENT_IS_WEB = typeof window === 'object';
102var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
103var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
104if (typeof module === "object") {
105  module.exports = Module;
106}
107if (ENVIRONMENT_IS_NODE) {
108  // Expose functionality in the same simple way that the shells work
109  // Note that we pollute the global namespace here, otherwise we break in node
110  Module['print'] = function(x) {
111    process['stdout'].write(x + '\n');
112  };
113  Module['printErr'] = function(x) {
114    process['stderr'].write(x + '\n');
115  };
116  var nodeFS = require('fs');
117  var nodePath = require('path');
118  Module['read'] = function(filename, binary) {
119    filename = nodePath['normalize'](filename);
120    var ret = nodeFS['readFileSync'](filename);
121    // The path is absolute if the normalized version is the same as the resolved.
122    if (!ret && filename != nodePath['resolve'](filename)) {
123      filename = path.join(__dirname, '..', 'src', filename);
124      ret = nodeFS['readFileSync'](filename);
125    }
126    if (ret && !binary) ret = ret.toString();
127    return ret;
128  };
129  Module['readBinary'] = function(filename) { return Module['read'](filename, true) };
130  Module['load'] = function(f) {
131    globalEval(read(f));
132  };
133  if (!Module['arguments']) {
134    Module['arguments'] = process['argv'].slice(2);
135  }
136}
137if (ENVIRONMENT_IS_SHELL) {
138  Module['print'] = print;
139  if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
140  Module['read'] = read;
141  Module['readBinary'] = function(f) {
142    return read(f, 'binary');
143  };
144  if (!Module['arguments']) {
145    if (typeof scriptArgs != 'undefined') {
146      Module['arguments'] = scriptArgs;
147    } else if (typeof arguments != 'undefined') {
148      Module['arguments'] = arguments;
149    }
150  }
151}
152if (ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER) {
153  if (!Module['print']) {
154    Module['print'] = function(x) {
155      console.log(x);
156    };
157  }
158  if (!Module['printErr']) {
159    Module['printErr'] = function(x) {
160      console.log(x);
161    };
162  }
163}
164if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
165  Module['read'] = function(url) {
166    var xhr = new XMLHttpRequest();
167    xhr.open('GET', url, false);
168    xhr.send(null);
169    return xhr.responseText;
170  };
171  if (!Module['arguments']) {
172    if (typeof arguments != 'undefined') {
173      Module['arguments'] = arguments;
174    }
175  }
176}
177if (ENVIRONMENT_IS_WORKER) {
178  // We can do very little here...
179  var TRY_USE_DUMP = false;
180  if (!Module['print']) {
181    Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
182      dump(x);
183    }) : (function(x) {
184      // self.postMessage(x); // enable this if you want stdout to be sent as messages
185    }));
186  }
187  Module['load'] = importScripts;
188}
189if (!ENVIRONMENT_IS_WORKER && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_SHELL) {
190  // Unreachable because SHELL is dependant on the others
191  throw 'Unknown runtime environment. Where are we?';
192}
193function globalEval(x) {
194  eval.call(null, x);
195}
196if (!Module['load'] == 'undefined' && Module['read']) {
197  Module['load'] = function(f) {
198    globalEval(Module['read'](f));
199  };
200}
201if (!Module['print']) {
202  Module['print'] = function(){};
203}
204if (!Module['printErr']) {
205  Module['printErr'] = Module['print'];
206}
207if (!Module['arguments']) {
208  Module['arguments'] = [];
209}
210// *** Environment setup code ***
211// Closure helpers
212Module.print = Module['print'];
213Module.printErr = Module['printErr'];
214// Callbacks
215if (!Module['preRun']) Module['preRun'] = [];
216if (!Module['postRun']) Module['postRun'] = [];
217// === Auto-generated preamble library stuff ===
218//========================================
219// Runtime code shared with compiler
220//========================================
221var Runtime = {
222  stackSave: function () {
223    return STACKTOP;
224  },
225  stackRestore: function (stackTop) {
226    STACKTOP = stackTop;
227  },
228  forceAlign: function (target, quantum) {
229    quantum = quantum || 4;
230    if (quantum == 1) return target;
231    if (isNumber(target) && isNumber(quantum)) {
232      return Math.ceil(target/quantum)*quantum;
233    } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
234      var logg = log2(quantum);
235      return '((((' +target + ')+' + (quantum-1) + ')>>' + logg + ')<<' + logg + ')';
236    }
237    return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
238  },
239  isNumberType: function (type) {
240    return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
241  },
242  isPointerType: function isPointerType(type) {
243  return type[type.length-1] == '*';
244},
245  isStructType: function isStructType(type) {
246  if (isPointerType(type)) return false;
247  if (isArrayType(type)) return true;
248  if (/<?{ ?[^}]* ?}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
249  // See comment in isStructPointerType()
250  return type[0] == '%';
251},
252  INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
253  FLOAT_TYPES: {"float":0,"double":0},
254  or64: function (x, y) {
255    var l = (x | 0) | (y | 0);
256    var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
257    return l + h;
258  },
259  and64: function (x, y) {
260    var l = (x | 0) & (y | 0);
261    var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
262    return l + h;
263  },
264  xor64: function (x, y) {
265    var l = (x | 0) ^ (y | 0);
266    var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
267    return l + h;
268  },
269  getNativeTypeSize: function (type, quantumSize) {
270    if (Runtime.QUANTUM_SIZE == 1) return 1;
271    var size = {
272      '%i1': 1,
273      '%i8': 1,
274      '%i16': 2,
275      '%i32': 4,
276      '%i64': 8,
277      "%float": 4,
278      "%double": 8
279    }['%'+type]; // add '%' since float and double confuse Closure compiler as keys, and also spidermonkey as a compiler will remove 's from '_i8' etc
280    if (!size) {
281      if (type.charAt(type.length-1) == '*') {
282        size = Runtime.QUANTUM_SIZE; // A pointer
283      } else if (type[0] == 'i') {
284        var bits = parseInt(type.substr(1));
285        assert(bits % 8 == 0);
286        size = bits/8;
287      }
288    }
289    return size;
290  },
291  getNativeFieldSize: function (type) {
292    return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
293  },
294  dedup: function dedup(items, ident) {
295  var seen = {};
296  if (ident) {
297    return items.filter(function(item) {
298      if (seen[item[ident]]) return false;
299      seen[item[ident]] = true;
300      return true;
301    });
302  } else {
303    return items.filter(function(item) {
304      if (seen[item]) return false;
305      seen[item] = true;
306      return true;
307    });
308  }
309},
310  set: function set() {
311  var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
312  var ret = {};
313  for (var i = 0; i < args.length; i++) {
314    ret[args[i]] = 0;
315  }
316  return ret;
317},
318  STACK_ALIGN: 8,
319  getAlignSize: function (type, size, vararg) {
320    // we align i64s and doubles on 64-bit boundaries, unlike x86
321    if (type == 'i64' || type == 'double' || vararg) return 8;
322    if (!type) return Math.min(size, 8); // align structures internally to 64 bits
323    return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
324  },
325  calculateStructAlignment: function calculateStructAlignment(type) {
326    type.flatSize = 0;
327    type.alignSize = 0;
328    var diffs = [];
329    var prev = -1;
330    type.flatIndexes = type.fields.map(function(field) {
331      var size, alignSize;
332      if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
333        size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
334        alignSize = Runtime.getAlignSize(field, size);
335      } else if (Runtime.isStructType(field)) {
336        size = Types.types[field].flatSize;
337        alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
338      } else if (field[0] == 'b') {
339        // bN, large number field, like a [N x i8]
340        size = field.substr(1)|0;
341        alignSize = 1;
342      } else {
343        throw 'Unclear type in struct: ' + field + ', in ' + type.name_ + ' :: ' + dump(Types.types[type.name_]);
344      }
345      if (type.packed) alignSize = 1;
346      type.alignSize = Math.max(type.alignSize, alignSize);
347      var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
348      type.flatSize = curr + size;
349      if (prev >= 0) {
350        diffs.push(curr-prev);
351      }
352      prev = curr;
353      return curr;
354    });
355    type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
356    if (diffs.length == 0) {
357      type.flatFactor = type.flatSize;
358    } else if (Runtime.dedup(diffs).length == 1) {
359      type.flatFactor = diffs[0];
360    }
361    type.needsFlattening = (type.flatFactor != 1);
362    return type.flatIndexes;
363  },
364  generateStructInfo: function (struct, typeName, offset) {
365    var type, alignment;
366    if (typeName) {
367      offset = offset || 0;
368      type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
369      if (!type) return null;
370      if (type.fields.length != struct.length) {
371        printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
372        return null;
373      }
374      alignment = type.flatIndexes;
375    } else {
376      var type = { fields: struct.map(function(item) { return item[0] }) };
377      alignment = Runtime.calculateStructAlignment(type);
378    }
379    var ret = {
380      __size__: type.flatSize
381    };
382    if (typeName) {
383      struct.forEach(function(item, i) {
384        if (typeof item === 'string') {
385          ret[item] = alignment[i] + offset;
386        } else {
387          // embedded struct
388          var key;
389          for (var k in item) key = k;
390          ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
391        }
392      });
393    } else {
394      struct.forEach(function(item, i) {
395        ret[item[1]] = alignment[i];
396      });
397    }
398    return ret;
399  },
400  dynCall: function (sig, ptr, args) {
401    if (args && args.length) {
402      if (!args.splice) args = Array.prototype.slice.call(args);
403      args.splice(0, 0, ptr);
404      return Module['dynCall_' + sig].apply(null, args);
405    } else {
406      return Module['dynCall_' + sig].call(null, ptr);
407    }
408  },
409  functionPointers: [],
410  addFunction: function (func) {
411    for (var i = 0; i < Runtime.functionPointers.length; i++) {
412      if (!Runtime.functionPointers[i]) {
413        Runtime.functionPointers[i] = func;
414        return 2 + 2*i;
415      }
416    }
417    throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
418  },
419  removeFunction: function (index) {
420    Runtime.functionPointers[(index-2)/2] = null;
421  },
422  warnOnce: function (text) {
423    if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
424    if (!Runtime.warnOnce.shown[text]) {
425      Runtime.warnOnce.shown[text] = 1;
426      Module.printErr(text);
427    }
428  },
429  funcWrappers: {},
430  getFuncWrapper: function (func, sig) {
431    assert(sig);
432    if (!Runtime.funcWrappers[func]) {
433      Runtime.funcWrappers[func] = function() {
434        return Runtime.dynCall(sig, func, arguments);
435      };
436    }
437    return Runtime.funcWrappers[func];
438  },
439  UTF8Processor: function () {
440    var buffer = [];
441    var needed = 0;
442    this.processCChar = function (code) {
443      code = code & 0xff;
444      if (needed) {
445        buffer.push(code);
446        needed--;
447      }
448      if (buffer.length == 0) {
449        if (code < 128) return String.fromCharCode(code);
450        buffer.push(code);
451        if (code > 191 && code < 224) {
452          needed = 1;
453        } else {
454          needed = 2;
455        }
456        return '';
457      }
458      if (needed > 0) return '';
459      var c1 = buffer[0];
460      var c2 = buffer[1];
461      var c3 = buffer[2];
462      var ret;
463      if (c1 > 191 && c1 < 224) {
464        ret = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
465      } else {
466        ret = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
467      }
468      buffer.length = 0;
469      return ret;
470    }
471    this.processJSString = function(string) {
472      string = unescape(encodeURIComponent(string));
473      var ret = [];
474      for (var i = 0; i < string.length; i++) {
475        ret.push(string.charCodeAt(i));
476      }
477      return ret;
478    }
479  },
480  stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = ((((STACKTOP)+7)>>3)<<3); return ret; },
481  staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = ((((STATICTOP)+7)>>3)<<3); return ret; },
482  dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = ((((DYNAMICTOP)+7)>>3)<<3); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
483  alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
484  makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+(((low)>>>(0))))+((+(((high)>>>(0))))*(+(4294967296)))) : ((+(((low)>>>(0))))+((+(((high)|(0))))*(+(4294967296))))); return ret; },
485  GLOBAL_BASE: 8,
486  QUANTUM_SIZE: 4,
487  __dummy__: 0
488}
489//========================================
490// Runtime essentials
491//========================================
492var __THREW__ = 0; // Used in checking for thrown exceptions.
493var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
494var undef = 0;
495// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
496// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
497var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD;
498var tempI64, tempI64b;
499var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
500function abort(text) {
501  Module.print(text + ':\n' + (new Error).stack);
502  ABORT = true;
503  throw "Assertion: " + text;
504}
505function assert(condition, text) {
506  if (!condition) {
507    abort('Assertion failed: ' + text);
508  }
509}
510var globalScope = this;
511// C calling interface. A convenient way to call C functions (in C files, or
512// defined with extern "C").
513//
514// Note: LLVM optimizations can inline and remove functions, after which you will not be
515//       able to call them. Closure can also do so. To avoid that, add your function to
516//       the exports using something like
517//
518//         -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
519//
520// @param ident      The name of the C function (note that C++ functions will be name-mangled - use extern "C")
521// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
522//                   'array' for JavaScript arrays and typed arrays).
523// @param argTypes   An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType,
524//                   except that 'array' is not possible (there is no way for us to know the length of the array)
525// @param args       An array of the arguments to the function, as native JS values (as in returnType)
526//                   Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
527// @return           The return value, as a native JS value (as in returnType)
528function ccall(ident, returnType, argTypes, args) {
529  return ccallFunc(getCFunc(ident), returnType, argTypes, args);
530}
531Module["ccall"] = ccall;
532// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
533function getCFunc(ident) {
534  try {
535    var func = globalScope['Module']['_' + ident]; // closure exported function
536    if (!func) func = eval('_' + ident); // explicit lookup
537  } catch(e) {
538  }
539  assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
540  return func;
541}
542// Internal function that does a C call using a function, not an identifier
543function ccallFunc(func, returnType, argTypes, args) {
544  var stack = 0;
545  function toC(value, type) {
546    if (type == 'string') {
547      if (value === null || value === undefined || value === 0) return 0; // null string
548      if (!stack) stack = Runtime.stackSave();
549      var ret = Runtime.stackAlloc(value.length+1);
550      writeStringToMemory(value, ret);
551      return ret;
552    } else if (type == 'array') {
553      if (!stack) stack = Runtime.stackSave();
554      var ret = Runtime.stackAlloc(value.length);
555      writeArrayToMemory(value, ret);
556      return ret;
557    }
558    return value;
559  }
560  function fromC(value, type) {
561    if (type == 'string') {
562      return Pointer_stringify(value);
563    }
564    assert(type != 'array');
565    return value;
566  }
567  var i = 0;
568  var cArgs = args ? args.map(function(arg) {
569    return toC(arg, argTypes[i++]);
570  }) : [];
571  var ret = fromC(func.apply(null, cArgs), returnType);
572  if (stack) Runtime.stackRestore(stack);
573  return ret;
574}
575// Returns a native JS wrapper for a C function. This is similar to ccall, but
576// returns a function you can call repeatedly in a normal way. For example:
577//
578//   var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
579//   alert(my_function(5, 22));
580//   alert(my_function(99, 12));
581//
582function cwrap(ident, returnType, argTypes) {
583  var func = getCFunc(ident);
584  return function() {
585    return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
586  }
587}
588Module["cwrap"] = cwrap;
589// Sets a value in memory in a dynamic way at run-time. Uses the
590// type data. This is the same as makeSetValue, except that
591// makeSetValue is done at compile-time and generates the needed
592// code then, whereas this function picks the right code at
593// run-time.
594// Note that setValue and getValue only do *aligned* writes and reads!
595// Note that ccall uses JS types as for defining types, while setValue and
596// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
597function setValue(ptr, value, type, noSafe) {
598  type = type || 'i8';
599  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
600    switch(type) {
601      case 'i1': HEAP8[(ptr)]=value; break;
602      case 'i8': HEAP8[(ptr)]=value; break;
603      case 'i16': HEAP16[((ptr)>>1)]=value; break;
604      case 'i32': HEAP32[((ptr)>>2)]=value; break;
605      case 'i64': (tempI64 = [value>>>0,Math.min(Math.floor((value)/(+(4294967296))), (+(4294967295)))>>>0],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
606      case 'float': HEAPF32[((ptr)>>2)]=value; break;
607      case 'double': HEAPF64[((ptr)>>3)]=value; break;
608      default: abort('invalid type for setValue: ' + type);
609    }
610}
611Module['setValue'] = setValue;
612// Parallel to setValue.
613function getValue(ptr, type, noSafe) {
614  type = type || 'i8';
615  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
616    switch(type) {
617      case 'i1': return HEAP8[(ptr)];
618      case 'i8': return HEAP8[(ptr)];
619      case 'i16': return HEAP16[((ptr)>>1)];
620      case 'i32': return HEAP32[((ptr)>>2)];
621      case 'i64': return HEAP32[((ptr)>>2)];
622      case 'float': return HEAPF32[((ptr)>>2)];
623      case 'double': return HEAPF64[((ptr)>>3)];
624      default: abort('invalid type for setValue: ' + type);
625    }
626  return null;
627}
628Module['getValue'] = getValue;
629var ALLOC_NORMAL = 0; // Tries to use _malloc()
630var ALLOC_STACK = 1; // Lives for the duration of the current function call
631var ALLOC_STATIC = 2; // Cannot be freed
632var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
633var ALLOC_NONE = 4; // Do not allocate
634Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
635Module['ALLOC_STACK'] = ALLOC_STACK;
636Module['ALLOC_STATIC'] = ALLOC_STATIC;
637Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
638Module['ALLOC_NONE'] = ALLOC_NONE;
639// allocate(): This is for internal use. You can use it yourself as well, but the interface
640//             is a little tricky (see docs right below). The reason is that it is optimized
641//             for multiple syntaxes to save space in generated code. So you should
642//             normally not use allocate(), and instead allocate memory using _malloc(),
643//             initialize it with setValue(), and so forth.
644// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
645//        in *bytes* (note that this is sometimes confusing: the next parameter does not
646//        affect this!)
647// @types: Either an array of types, one for each byte (or 0 if no type at that position),
648//         or a single type which is used for the entire block. This only matters if there
649//         is initial data - if @slab is a number, then this does not matter at all and is
650//         ignored.
651// @allocator: How to allocate memory, see ALLOC_*
652function allocate(slab, types, allocator, ptr) {
653  var zeroinit, size;
654  if (typeof slab === 'number') {
655    zeroinit = true;
656    size = slab;
657  } else {
658    zeroinit = false;
659    size = slab.length;
660  }
661  var singleType = typeof types === 'string' ? types : null;
662  var ret;
663  if (allocator == ALLOC_NONE) {
664    ret = ptr;
665  } else {
666    ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
667  }
668  if (zeroinit) {
669    var ptr = ret, stop;
670    assert((ret & 3) == 0);
671    stop = ret + (size & ~3);
672    for (; ptr < stop; ptr += 4) {
673      HEAP32[((ptr)>>2)]=0;
674    }
675    stop = ret + size;
676    while (ptr < stop) {
677      HEAP8[((ptr++)|0)]=0;
678    }
679    return ret;
680  }
681  if (singleType === 'i8') {
682    if (slab.subarray || slab.slice) {
683      HEAPU8.set(slab, ret);
684    } else {
685      HEAPU8.set(new Uint8Array(slab), ret);
686    }
687    return ret;
688  }
689  var i = 0, type, typeSize, previousType;
690  while (i < size) {
691    var curr = slab[i];
692    if (typeof curr === 'function') {
693      curr = Runtime.getFunctionIndex(curr);
694    }
695    type = singleType || types[i];
696    if (type === 0) {
697      i++;
698      continue;
699    }
700    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
701    setValue(ret+i, curr, type);
702    // no need to look up size unless type changes, so cache it
703    if (previousType !== type) {
704      typeSize = Runtime.getNativeTypeSize(type);
705      previousType = type;
706    }
707    i += typeSize;
708  }
709  return ret;
710}
711Module['allocate'] = allocate;
712function Pointer_stringify(ptr, /* optional */ length) {
713  // Find the length, and check for UTF while doing so
714  var hasUtf = false;
715  var t;
716  var i = 0;
717  while (1) {
718    t = HEAPU8[(((ptr)+(i))|0)];
719    if (t >= 128) hasUtf = true;
720    else if (t == 0 && !length) break;
721    i++;
722    if (length && i == length) break;
723  }
724  if (!length) length = i;
725  var ret = '';
726  if (!hasUtf) {
727    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
728    var curr;
729    while (length > 0) {
730      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
731      ret = ret ? ret + curr : curr;
732      ptr += MAX_CHUNK;
733      length -= MAX_CHUNK;
734    }
735    return ret;
736  }
737  var utf8 = new Runtime.UTF8Processor();
738  for (i = 0; i < length; i++) {
739    t = HEAPU8[(((ptr)+(i))|0)];
740    ret += utf8.processCChar(t);
741  }
742  return ret;
743}
744Module['Pointer_stringify'] = Pointer_stringify;
745// Memory management
746var PAGE_SIZE = 4096;
747function alignMemoryPage(x) {
748  return ((x+4095)>>12)<<12;
749}
750var HEAP;
751var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
752var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
753var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
754var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
755function enlargeMemory() {
756  abort('Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY before the program runs.');
757}
758var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
759var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216;
760var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
761// Initialize the runtime's memory
762// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
763assert(!!Int32Array && !!Float64Array && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
764       'Cannot fallback to non-typed array case: Code is too specialized');
765var buffer = new ArrayBuffer(TOTAL_MEMORY);
766HEAP8 = new Int8Array(buffer);
767HEAP16 = new Int16Array(buffer);
768HEAP32 = new Int32Array(buffer);
769HEAPU8 = new Uint8Array(buffer);
770HEAPU16 = new Uint16Array(buffer);
771HEAPU32 = new Uint32Array(buffer);
772HEAPF32 = new Float32Array(buffer);
773HEAPF64 = new Float64Array(buffer);
774// Endianness check (note: assumes compiler arch was little-endian)
775HEAP32[0] = 255;
776assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
777Module['HEAP'] = HEAP;
778Module['HEAP8'] = HEAP8;
779Module['HEAP16'] = HEAP16;
780Module['HEAP32'] = HEAP32;
781Module['HEAPU8'] = HEAPU8;
782Module['HEAPU16'] = HEAPU16;
783Module['HEAPU32'] = HEAPU32;
784Module['HEAPF32'] = HEAPF32;
785Module['HEAPF64'] = HEAPF64;
786function callRuntimeCallbacks(callbacks) {
787  while(callbacks.length > 0) {
788    var callback = callbacks.shift();
789    if (typeof callback == 'function') {
790      callback();
791      continue;
792    }
793    var func = callback.func;
794    if (typeof func === 'number') {
795      if (callback.arg === undefined) {
796        Runtime.dynCall('v', func);
797      } else {
798        Runtime.dynCall('vi', func, [callback.arg]);
799      }
800    } else {
801      func(callback.arg === undefined ? null : callback.arg);
802    }
803  }
804}
805var __ATINIT__ = []; // functions called during startup
806var __ATMAIN__ = []; // functions called when main() is to be run
807var __ATEXIT__ = []; // functions called during shutdown
808var runtimeInitialized = false;
809function ensureInitRuntime() {
810  if (runtimeInitialized) return;
811  runtimeInitialized = true;
812  callRuntimeCallbacks(__ATINIT__);
813}
814function preMain() {
815  callRuntimeCallbacks(__ATMAIN__);
816}
817function exitRuntime() {
818  callRuntimeCallbacks(__ATEXIT__);
819}
820// Tools
821// This processes a JS string into a C-line array of numbers, 0-terminated.
822// For LLVM-originating strings, see parser.js:parseLLVMString function
823function intArrayFromString(stringy, dontAddNull, length /* optional */) {
824  var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
825  if (length) {
826    ret.length = length;
827  }
828  if (!dontAddNull) {
829    ret.push(0);
830  }
831  return ret;
832}
833Module['intArrayFromString'] = intArrayFromString;
834function intArrayToString(array) {
835  var ret = [];
836  for (var i = 0; i < array.length; i++) {
837    var chr = array[i];
838    if (chr > 0xFF) {
839      chr &= 0xFF;
840    }
841    ret.push(String.fromCharCode(chr));
842  }
843  return ret.join('');
844}
845Module['intArrayToString'] = intArrayToString;
846// Write a Javascript array to somewhere in the heap
847function writeStringToMemory(string, buffer, dontAddNull) {
848  var array = intArrayFromString(string, dontAddNull);
849  var i = 0;
850  while (i < array.length) {
851    var chr = array[i];
852    HEAP8[(((buffer)+(i))|0)]=chr
853    i = i + 1;
854  }
855}
856Module['writeStringToMemory'] = writeStringToMemory;
857function writeArrayToMemory(array, buffer) {
858  for (var i = 0; i < array.length; i++) {
859    HEAP8[(((buffer)+(i))|0)]=array[i];
860  }
861}
862Module['writeArrayToMemory'] = writeArrayToMemory;
863function unSign(value, bits, ignore, sig) {
864  if (value >= 0) {
865    return value;
866  }
867  return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
868                    : Math.pow(2, bits)         + value;
869}
870function reSign(value, bits, ignore, sig) {
871  if (value <= 0) {
872    return value;
873  }
874  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
875                        : Math.pow(2, bits-1);
876  if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
877                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
878                                                       // TODO: In i64 mode 1, resign the two parts separately and safely
879    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
880  }
881  return value;
882}
883if (!Math['imul']) Math['imul'] = function(a, b) {
884  var ah  = a >>> 16;
885  var al = a & 0xffff;
886  var bh  = b >>> 16;
887  var bl = b & 0xffff;
888  return (al*bl + ((ah*bl + al*bh) << 16))|0;
889};
890// A counter of dependencies for calling run(). If we need to
891// do asynchronous work before running, increment this and
892// decrement it. Incrementing must happen in a place like
893// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
894// Note that you can add dependencies in preRun, even though
895// it happens right before run - run will be postponed until
896// the dependencies are met.
897var runDependencies = 0;
898var runDependencyTracking = {};
899var calledInit = false, calledRun = false;
900var runDependencyWatcher = null;
901function addRunDependency(id) {
902  runDependencies++;
903  if (Module['monitorRunDependencies']) {
904    Module['monitorRunDependencies'](runDependencies);
905  }
906  if (id) {
907    assert(!runDependencyTracking[id]);
908    runDependencyTracking[id] = 1;
909  } else {
910    Module.printErr('warning: run dependency added without ID');
911  }
912}
913Module['addRunDependency'] = addRunDependency;
914function removeRunDependency(id) {
915  runDependencies--;
916  if (Module['monitorRunDependencies']) {
917    Module['monitorRunDependencies'](runDependencies);
918  }
919  if (id) {
920    assert(runDependencyTracking[id]);
921    delete runDependencyTracking[id];
922  } else {
923    Module.printErr('warning: run dependency removed without ID');
924  }
925  if (runDependencies == 0) {
926    if (runDependencyWatcher !== null) {
927      clearInterval(runDependencyWatcher);
928      runDependencyWatcher = null;
929    }
930    // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
931    if (!calledRun && shouldRunNow) run();
932  }
933}
934Module['removeRunDependency'] = removeRunDependency;
935Module["preloadedImages"] = {}; // maps url to image data
936Module["preloadedAudios"] = {}; // maps url to audio data
937function addPreRun(func) {
938  if (!Module['preRun']) Module['preRun'] = [];
939  else if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
940  Module['preRun'].push(func);
941}
942var awaitingMemoryInitializer = false;
943function loadMemoryInitializer(filename) {
944  function applyData(data) {
945    HEAPU8.set(data, STATIC_BASE);
946    runPostSets();
947  }
948  // always do this asynchronously, to keep shell and web as similar as possible
949  addPreRun(function() {
950    if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
951      applyData(Module['readBinary'](filename));
952    } else {
953      Browser.asyncLoad(filename, function(data) {
954        applyData(data);
955      }, function(data) {
956        throw 'could not load memory initializer ' + filename;
957      });
958    }
959  });
960  awaitingMemoryInitializer = false;
961}
962// === Body ===
963STATIC_BASE = 8;
964STATICTOP = STATIC_BASE + 71576;
965var _stdout;
966var _stdin;
967var _stderr;
968__ATINIT__ = __ATINIT__.concat([
969  { func: function() { __GLOBAL__I_a344() } },
970  { func: function() { __GLOBAL__I_a402() } },
971  { func: function() { __GLOBAL__I_a410() } },
972  { func: function() { __GLOBAL__I_a475() } },
973  { func: function() { __GLOBAL__I_a619() } },
974  { func: function() { __GLOBAL__I_a639() } },
975  { func: function() { __GLOBAL__I_a792() } },
976  { func: function() { __GLOBAL__I_a817() } },
977  { func: function() { __GLOBAL__I_a829() } },
978  { func: function() { __GLOBAL__I_a874() } },
979  { func: function() { __GLOBAL__I_a922() } },
980  { func: function() { __GLOBAL__I_a941() } },
981  { func: function() { __GLOBAL__I_a1913() } }
982]);
983var ___fsmu8;
984var ___dso_handle;
985var __ZTVN10__cxxabiv120__si_class_type_infoE;
986var __ZTVN10__cxxabiv117__class_type_infoE;
987var _stdout = _stdout=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
988var _stdin = _stdin=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
989var _stderr = _stderr=allocate([0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
990__ZTVN10__cxxabiv120__si_class_type_infoE=allocate([0,0,0,0,248,234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
991__ZTVN10__cxxabiv117__class_type_infoE=allocate([0,0,0,0,8,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
992/* memory initializer */ allocate([117,115,101,114,100,97,116,97,0,0,0,0,0,0,0,0,232,91,0,0,98,0,0,0,184,176,0,0,86,1,0,0,8,83,0,0,52,1,0,0,0,62,0,0,98,1,0,0,0,40,0,0,44,1,0,0,88,34,0,0,208,0,0,0,0,0,0,0,0,0,0,0,32,83,0,0,80,0,0,0,32,62,0,0,226,0,0,0,8,40,0,0,36,0,0,0,96,34,0,0,132,0,0,0,80,30,0,0,106,1,0,0,112,26,0,0,42,0,0,0,144,13,0,0,108,1,0,0,96,10,0,0,14,1,0,0,104,25,0,0,184,0,0,0,72,178,0,0,26,0,0,0,128,174,0,0,40,0,0,0,96,117,0,0,170,0,0,0,128,91,0,0,12,1,0,0,232,151,0,0,32,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,7,7,7,7,7,7,10,9,5,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,0,0,0,0,0,0,0,0,36,64,0,0,0,0,0,0,89,64,0,0,0,0,0,136,195,64,0,0,0,0,132,215,151,65,0,128,224,55,121,195,65,67,23,110,5,181,181,184,147,70,245,249,63,233,3,79,56,77,50,29,48,249,72,119,130,90,60,191,115,127,221,79,21,117,192,42,0,0,138,0,0,0,248,41,0,0,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,83,0,0,122,0,0,0,192,62,0,0,6,1,0,0,136,40,0,0,38,0,0,0,240,34,0,0,116,1,0,0,248,30,0,0,218,0,0,0,176,26,0,0,174,0,0,0,224,13,0,0,110,0,0,0,136,10,0,0,128,1,0,0,32,182,0,0,134,0,0,0,152,178,0,0,142,0,0,0,160,174,0,0,104,0,0,0,136,117,0,0,16,1,0,0,160,91,0,0,62,0,0,0,176,90,0,0,86,0,0,0,104,89,0,0,90,0,0,0,96,88,0,0,136,1,0,0,0,87,0,0,0,1,0,0,16,86,0,0,240,0,0,0,24,85,0,0,118,1,0,0,240,83,0,0,76,1,0,0,24,82,0,0,242,0,0,0,56,81,0,0,2,1,0,0,48,80,0,0,56,1,0,0,104,79,0,0,102,0,0,0,128,78,0,0,108,0,0,0,104,77,0,0,178,0,0,0,120,76,0,0,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,22,22,22,22,22,22,22,22,22,22,4,4,4,4,4,4,4,21,21,21,21,21,21,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,5,4,21,21,21,21,21,21,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,127,64,120,83,0,0,184,81,0,0,216,80,0,0,200,79,0,0,232,78,0,0,224,77,0,0,232,76,0,0,16,76,0,0,0,75,0,0,184,63,0,0,96,62,0,0,232,60,0,0,152,50,0,0,96,49,0,0,232,48,0,0,216,43,0,0,80,43,0,0,136,42,0,0,168,41,0,0,216,78,0,0,40,40,0,0,176,38,0,0,16,38,0,0,112,37,0,0,48,37,0,0,216,36,0,0,136,36,0,0,248,35,0,0,192,35,0,0,80,35,0,0,184,34,0,0,112,33,0,0,24,33,0,0,0,0,0,0,184,91,0,0,96,49,0,0,0,83,0,0,8,0,0,0,248,61,0,0,248,39,0,0,80,34,0,0,0,75,0,0,8,0,0,0,64,26,0,0,104,13,0,0,88,10,0,0,128,181,0,0,0,178,0,0,120,174,0,0,192,84,0,0,120,91,0,0,128,90,0,0,24,89,0,0,16,88,0,0,160,86,0,0,168,85,0,0,200,84,0,0,168,83,0,0,208,81,0,0,240,80,0,0,224,79,0,0,16,79,0,0,40,78,0,0,0,0,0,0,96,113,65,84,80,80,92,108,60,16,60,84,108,124,124,124,124,124,124,96,96,96,104,34,188,188,188,132,228,84,84,16,98,98,4,98,20,81,80,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,32,38,0,0,136,37,0,0,72,37,0,0,208,79,0,0,152,36,0,0,16,36,0,0,200,35,0,0,104,35,0,0,224,34,0,0,144,33,0,0,40,33,0,0,0,0,0,0,56,15,0,0,0,0,0,0,96,92,0,0,0,0,0,0,40,104,0,0,0,0,0,0,216,117,0,0,0,0,0,0,160,134,0,0,0,0,0,0,240,151,0,0,0,0,0,0,8,44,0,0,0,0,0,0,16,51,0,0,0,0,0,0,208,20,0,0,0,0,0,0,24,64,0,0,0,0,0,0,88,88,0,0,48,0,0,0,0,0,0,0,0,0,0,0,128,83,0,0,136,42,0,0,224,80,0,0,208,79,0,0,240,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,88,0,0,142,1,0,0,160,175,0,0,154,1,0,0,144,82,0,0,58,1,0,0,136,61,0,0,210,0,0,0,96,39,0,0,16,0,0,0,208,33,0,0,186,0,0,0,200,29,0,0,22,0,0,0,216,25,0,0,44,0,0,0,0,13,0,0,104,1,0,0,0,10,0,0,126,0,0,0,64,181,0,0,198,0,0,0,184,177,0,0,78,0,0,0,56,174,0,0,140,1,0,0,48,117,0,0,212,0,0,0,64,91,0,0,20,0,0,0,96,90,0,0,82,0,0,0,0,0,0,0,0,0,0,0,200,88,0,0,154,0,0,0,176,175,0,0,96,0,0,0,152,82,0,0,160,0,0,0,144,61,0,0,94,0,0,0,112,39,0,0,112,1,0,0,224,33,0,0,76,0,0,0,0,0,0,0,0,0,0,0,8,90,0,0,40,1,0,0,0,176,0,0,4,0,0,0,192,82,0,0,148,1,0,0,160,61,0,0,28,1,0,0,152,39,0,0,92,1,0,0,232,33,0,0,202,0,0,0,248,29,0,0,166,0,0,0,8,26,0,0,248,0,0,0,48,13,0,0,146,1,0,0,40,10,0,0,146,0,0,0,96,181,0,0,32,1,0,0,200,177,0,0,122,1,0,0,0,0,0,0,0,0,0,0,168,61,0,0,80,1,0,0,160,39,0,0,36,1,0,0,240,33,0,0,134,1,0,0,0,30,0,0,182,0,0,0,200,29,0,0,188,0,0,0,56,13,0,0,20,1,0,0,48,10,0,0,190,0,0,0,104,181,0,0,130,0,0,0,248,177,0,0,30,0,0,0,112,174,0,0,118,0,0,0,88,117,0,0,14,0,0,0,184,12,0,0,88,0,0,0,112,90,0,0,4,1,0,0,16,89,0,0,74,0,0,0,8,88,0,0,150,1,0,0,152,86,0,0,30,1,0,0,160,85,0,0,200,0,0,0,48,117,0,0,18,1,0,0,152,83,0,0,46,0,0,0,192,81,0,0,140,0,0,0,232,80,0,0,216,0,0,0,216,79,0,0,244,0,0,0,0,0,0,0,0,0,0,0,74,117,108,0,0,0,0,0,97,114,103,115,49,0,0,0,74,117,110,0,0,0,0,0,110,32,60,32,109,95,99,111,117,110,116,32,124,124,32,40,33,110,32,38,38,32,33,109,95,99,111,117,110,116,41,0,101,97,115,121,109,101,115,104,47,101,97,115,121,109,101,115,104,46,99,112,112,0,0,0,112,114,105,109,105,116,105,118,101,95,99,111,109,109,97,110,100,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,65,112,114,0,0,0,0,0,116,114,97,110,115,102,111,114,109,95,99,111,109,109,97,110,100,0,0,0,0,0,0,0,78,101,120,116,32,116,111,107,101,110,32,105,115,0,0,0,77,97,114,0,0,0,0,0,99,111,108,111,114,95,99,111,109,109,97,110,100,0,0,0,70,101,98,0,0,0,0,0,109,101,115,104,95,99,111,109,109,97,110,100,0,0,0,0,74,97,110,0,0,0,0,0,109,101,115,104,95,99,111,109,109,97,110,100,95,108,105,115,116,0,0,0,0,0,0,0,105,110,95,84,101,120,116,117,114,101,0,0,0,0,0,0,68,101,99,101,109,98,101,114,0,0,0,0,0,0,0,0,109,101,115,104,95,99,108,111,115,101,0,0,0,0,0,0,102,97,105,108,101,100,32,116,111,32,108,105,110,107,32,112,114,111,103,114,97,109,58,32,37,115,0,0,0,0,0,0,78,111,118,101,109,98,101,114,0,0,0,0,0,0,0,0,109,101,115,104,95,111,112,101,110,0,0,0,0,0,0,0,117,110,115,117,112,112,111,114,116,101,100,32,108,111,99,97,108,101,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,0,0,0,43,45,0,0,0,0,0,0,117,112,118,97,108,117,101,105,100,0,0,0,0,0,0,0,99,111,114,111,117,116,105,110,101,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,114,101,112,108,97,99,101,0,108,111,97,100,102,105,108,101,0,0,0,0,0,0,0,0,118,101,114,115,105,111,110,32,109,105,115,109,97,116,99,104,32,105,110,0,0,0,0,0,117,112,118,97,108,0,0,0,108,101,110,0,0,0,0,0,115,101,108,102,0,0,0,0,79,99,116,111,98,101,114,0,76,85,65,95,67,80,65,84,72,0,0,0,0,0,0,0,99,111,115,0,0,0,0,0,99,97,110,110,111,116,32,114,101,115,117,109,101,32,110,111,110,45,115,117,115,112,101,110,100,101,100,32,99,111,114,111,117,116,105,110,101,0,0,0,103,108,111,98,97,108,0,0,109,101,115,104,95,101,120,112,114,101,115,115,105,111,110,0,83,101,112,116,101,109,98,101,114,0,0,0,0,0,0,0,109,101,115,104,95,101,120,112,114,101,115,115,105,111,110,95,108,105,115,116,0,0,0,0,98,97,100,32,97,114,103,117,109,101,110,116,32,35,37,100,32,40,37,115,41,0,0,0,65,117,103,117,115,116,0,0,109,101,115,104,95,100,101,115,99,114,105,112,116,105,111,110,0,0,0,0,0,0,0,0,74,117,108,121,0,0,0,0,36,97,99,99,101,112,116,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,86,101,114,116,101,120,32,85,115,97,103,101,32,115,101,116,117,112,32,105,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,37,115,44,32,102,101,101,108,32,102,114,101,101,32,116,111,32,100,111,32,115,111,46,10,0,0,60,115,97,109,112,108,101,62,32,0,0,0,0,0,0,0,74,117,110,101,0,0,0,0,39,45,39,0,0,0,0,0,78,111,119,32,97,116,32,101,110,100,32,111,102,32,105,110,112,117,116,46,0,0,0,0,77,97,121,0,0,0,0,0,39,93,39,0,0,0,0,0,99,111,117,110,116,32,62,32,48,0,0,0,0,0,0,0,60,101,110,116,105,116,121,62,0,0,0,0,0,0,0,0,65,112,114,105,108,0,0,0,39,91,39,0,0,0,0,0,99,111,117,108,100,32,110,111,116,32,102,105,110,100,32,76,117,97,32,102,105,108,101,32,37,115,10,0,0,0,0,0,110,0,0,0,0,0,0,0,77,97,114,99,104,0,0,0,98,97,115,105,99,95,115,116,114,105,110,103,0,0,0,0,67,79,76,79,82,0,0,0,37,105,32,102,114,97,109,101,115,32,114,101,113,117,105,114,101,100,32,116,111,32,113,117,105,116,10,0,0,0,0,0,109,111,100,101,108,95,109,97,116,114,105,120,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,37,115,10,0,70,101,98,114,117,97,114,121,0,0,0,0,0,0,0,0,78,85,77,66,69,82,0,0,112,114,105,110,116,0,0,0,99,111,109,112,105,108,101,32,108,111,103,32,102,111,114,32,102,114,97,103,109,101,110,116,32,115,104,97,100,101,114,58,32,37,115,0,0,0,0,0,74,97,110,117,97,114,121,0,84,95,69,82,82,79,82,0,80,112,0,0,0,0,0,0,117,112,118,97,108,117,101,106,111,105,110,0,0,0,0,0,116,111,111,32,109,97,110,121,32,114,101,115,117,108,116,115,32,116,111,32,114,101,115,117,109,101,0,0,0,0,0,0,108,115,104,105,102,116,0,0,105,112,97,105,114,115,0,0,39,102,111,114,39,32,115,116,101,112,32,109,117,115,116,32,98,101,32,97,32,110,117,109,98,101,114,0,0,0,0,0,110,111,116,32,97,0,0,0,112,114,111,116,111,0,0,0,116,111,111,32,109,97,110,121,32,114,101,115,117,108,116,115,32,116,111,32,117,110,112,97,99,107,0,0,0,0,0,0,103,115,117,98,0,0,0,0,99,97,110,110,111,116,32,117,115,101,32,39,46,46,46,39,32,111,117,116,115,105,100,101,32,97,32,118,97,114,97,114,103,32,102,117,110,99,116,105,111,110,0,0,0,0,0,0,34,93,0,0,0,0,0,0,76,85,65,95,67,80,65,84,72,95,53,95,50,0,0,0,99,111,115,104,0,0,0,0,101,114,114,111,114,32,105,110,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103,0,84,95,84,79,82,85,83,0,68,0,0,0,101,0,0,0,99,0,0,0,0,0,0,0,84,95,67,79,71,0,0,0,115,99,35,55,97,99,32,115,99,98,35,55,97,99,32,91,97,99,103,32,49,50,32,49,48,32,53,32,53,32,50,48,32,50,48,32,53,32,53,32,48,46,49,32,48,32,115,32,46,52,32,46,50,32,46,52,93,0,0,0,0,0,0,0,10,9,40,46,46,46,116,97,105,108,32,99,97,108,108,115,46,46,46,41,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,0,0,0,0,84,95,81,85,65,68,0,0,79,0,0,0,99,0,0,0,116,0,0,0,0,0,0,0,84,95,84,82,73,65,78,71,76,69,0,0,0,0,0,0,117,95,76,105,103,104,116,115,0,0,0,0,0,0,0,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,121,121,101,110,115,117,114,101,95,98,117,102,102,101,114,95,115,116,97,99,107,40,41,0,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,0,0,0,0,84,95,68,73,83,67,0,0,82,101,97,100,105,110,103,32,97,32,116,111,107,101,110,58,32,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,0,0,0,0,91,118,101,114,116,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,51,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,80,111,115,105,116,105,111,110,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,105,110,95,84,101,120,67,111,111,114,100,59,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,84,101,120,67,111,111,114,100,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,112,114,111,106,95,109,97,116,114,105,120,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,118,105,101,119,95,109,97,116,114,105,120,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,109,111,100,101,108,95,109,97,116,114,105,120,59,10,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,112,114,111,106,95,109,97,116,114,105,120,32,42,32,118,105,101,119,95,109,97,116,114,105,120,32,42,32,109,111,100,101,108,95,109,97,116,114,105,120,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,118,101,99,52,40,105,110,95,80,111,115,105,116,105,111,110,44,32,49,46,48,41,59,10,32,32,32,32,112,97,115,115,95,84,101,120,67,111,111,114,100,32,61,32,105,110,95,84,101,120,67,111,111,114,100,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,51,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,109,101,100,105,117,109,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,105,110,95,84,101,120,116,117,114,101,59,10,117,110,105,102,111,114,109,32,118,101,99,50,32,105,110,95,84,101,120,83,105,122,101,59,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,84,101,120,67,111,111,114,100,59,10,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,32,32,32,32,118,101,99,52,32,99,111,108,32,61,32,116,101,120,116,117,114,101,50,68,40,105,110,95,84,101,120,116,117,114,101,44,32,112,97,115,115,95,84,101,120,67,111,111,114,100,41,59,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,99,111,108,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,105,110,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,50,32,105,110,95,84,101,120,67,111,111,114,100,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,112,114,111,106,95,109,97,116,114,105,120,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,118,105,101,119,95,109,97,116,114,105,120,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,109,111,100,101,108,95,109,97,116,114,105,120,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,50,32,105,110,95,84,101,120,83,105,122,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,50,32,111,117,116,95,84,101,120,67,111,111,114,100,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,35,105,102,32,95,88,66,79,88,10,32,32,32,32,102,108,111,97,116,50,32,100,101,108,116,97,32,61,32,102,108,111,97,116,50,40,45,48,46,53,44,32,45,48,46,53,41,32,47,32,105,110,95,84,101,120,83,105,122,101,59,10,35,101,108,115,101,10,32,32,32,32,102,108,111,97,116,50,32,100,101,108,116,97,32,61,32,102,108,111,97,116,50,40,48,46,48,44,32,48,46,48,41,59,10,35,101,110,100,105,102,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,112,114,111,106,95,109,97,116,114,105,120,44,32,109,117,108,40,118,105,101,119,95,109,97,116,114,105,120,44,32,109,117,108,40,109,111,100,101,108,95,109,97,116,114,105,120,44,32,105,110,95,80,111,115,105,116,105,111,110,41,41,41,59,10,32,32,32,32,111,117,116,95,84,101,120,67,111,111,114,100,32,61,32,105,110,95,84,101,120,67,111,111,114,100,32,43,32,100,101,108,116,97,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,50,32,105,110,95,84,101,120,67,111,111,114,100,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,105,110,95,84,101,120,116,117,114,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,102,108,111,97,116,52,32,99,111,108,32,61,32,116,101,120,50,68,40,105,110,95,84,101,120,116,117,114,101,44,32,105,110,95,84,101,120,67,111,111,114,100,41,59,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,99,111,108,59,10,125,10,10,0,0,0,0,0,0,0,0,84,95,69,88,80,65,78,68,69,68,83,84,65,82,0,0,91,118,101,114,116,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,51,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,80,111,115,105,116,105,111,110,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,105,110,95,67,111,108,111,114,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,112,114,111,106,95,109,97,116,114,105,120,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,118,105,101,119,95,109,97,116,114,105,120,59,10,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,112,114,111,106,95,109,97,116,114,105,120,32,42,32,118,105,101,119,95,109,97,116,114,105,120,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,118,101,99,52,40,105,110,95,80,111,115,105,116,105,111,110,44,32,49,46,48,41,59,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,51,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,109,101,100,105,117,109,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,112,97,115,115,95,67,111,108,111,114,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,105,110,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,112,114,111,106,95,109,97,116,114,105,120,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,118,105,101,119,95,109,97,116,114,105,120,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,112,114,111,106,95,109,97,116,114,105,120,44,32,109,117,108,40,118,105,101,119,95,109,97,116,114,105,120,44,32,105,110,95,80,111,115,105,116,105,111,110,41,41,59,10,32,32,32,32,111,117,116,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,125,10,10,0,0,0,0,0,0,107,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,0,0,0,0,84,95,83,84,65,82,0,0,108,111,97,100,105,110,103,32,76,117,97,32,102,105,108,101,32,37,115,10,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,84,95,67,65,80,83,85,76,69,0,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,115,116,105,108,108,32,37,105,32,101,110,116,105,116,105,101,115,32,105,110,32,116,105,99,107,101,114,10,10,0,0,0,0,0,0,0,118,105,101,119,95,109,97,116,114,105,120,0,0,0,0,0,102,97,116,97,108,32,102,108,101,120,32,115,99,97,110,110,101,114,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,110,111,32,97,99,116,105,111,110,32,102,111,117,110,100,0,0,0,0,0,0,77,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,95,83,80,72,69,82,69,0,0,0,0,0,0,0,0,108,111,119,101,114,0,0,0,102,97,105,108,101,100,32,116,111,32,99,111,109,112,105,108,101,32,102,114,97,103,109,101,110,116,32,115,104,97,100,101,114,58,32,37,115,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,0,0,0,0,84,95,70,76,65,84,67,72,65,77,70,66,79,88,0,0,84,95,83,77,79,79,84,72,67,72,65,77,70,66,79,88,0,0,0,0,0,0,0,0,88,120,0,0,0,0,0,0,103,101,116,117,112,118,97,108,117,101,0,0,0,0,0,0,99,97,110,110,111,116,32,114,101,115,117,109,101,32,100,101,97,100,32,99,111,114,111,117,116,105,110,101,0,0,0,0,108,114,111,116,97,116,101,0,39,102,111,114,39,32,108,105,109,105,116,32,109,117,115,116,32,98,101,32,97,32,110,117,109,98,101,114,0,0,0,0,99,111,114,114,117,112,116,101,100,0,0,0,0,0,0,0,116,104,114,101,97,100,0,0,105,110,118,97,108,105,100,32,111,114,100,101,114,32,102,117,110,99,116,105,111,110,32,102,111,114,32,115,111,114,116,105,110,103,0,0,0,0,0,0,103,109,97,116,99,104,0,0,67,32,108,101,118,101,108,115,0,0,0,0,0,0,0,0,91,115,116,114,105,110,103,32,34,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,0,0,0,0,99,112,97,116,104,0,0,0,99,101,105,108,0,0,0,0,109,97,116,104,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,108,111,97,100,32,97,32,37,115,32,99,104,117,110,107,32,40,109,111,100,101,32,105,115,32,39,37,115,39,41,0,0,0,0,0,0,0,105,110,95,77,111,100,101,108,86,105,101,119,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,0,0,0,0,84,95,66,79,88,0,0,0,115,99,35,102,99,55,32,91,97,116,111,50,48,32,50,32,53,93,0,0,0,0,0,0,32,105,110,32,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,0,0,0,0,84,95,67,89,76,73,78,68,69,82,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,112,111,115,32,43,32,116,111,100,101,108,101,116,101,32,60,61,32,109,95,99,111,117,110,116,0,0,0,0,0,0,0,84,95,67,72,65,77,70,69,82,0,0,0,0,0,0,0,105,110,95,68,97,109,97,103,101,0,0,0,0,0,0,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,121,121,95,99,114,101,97,116,101,95,98,117,102,102,101,114,40,41,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,84,95,67,83,71,88,79,82,0,0,0,0,0,0,0,0,69,110,116,101,114,105,110,103,32,115,116,97,116,101,32,0,77,101,115,104,32,115,111,117,114,99,101,58,32,37,115,10,0,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,111,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,84,95,67,83,71,65,78,68,0,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,116,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,84,95,67,83,71,83,85,66,83,84,82,65,67,84,76,79,83,83,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,117,0,0,0,115,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,84,95,67,83,71,83,85,66,83,84,82,65,67,84,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,100,101,114,101,102,101,114,101,110,99,105,110,103,32,97,117,116,111,114,101,108,101,97,115,101,100,32,101,110,116,105,116,121,32,37,115,10,10,0,0,0,0,0,0,112,114,111,106,95,109,97,116,114,105,120,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,84,95,67,83,71,85,78,73,79,78,0,0,0,0,0,0,84,95,83,77,79,79,84,72,77,69,83,72,0,0,0,0,99,111,109,112,105,108,101,32,108,111,103,32,102,111,114,32,118,101,114,116,101,120,32,115,104,97,100,101,114,58,32,37,115,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,68,69,66,85,71,0,0,0,69,101,0,0,0,0,0,0,103,101,116,109,101,116,97,116,97,98,108,101,0,0,0,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,32,116,111,32,114,101,115,117,109,101,0,0,0,0,101,120,116,114,97,99,116,0,101,114,114,111,114,0,0,0,39,102,111,114,39,32,105,110,105,116,105,97,108,32,118,97,108,117,101,32,109,117,115,116,32,98,101,32,97,32,110,117,109,98,101,114,0,0,0,0,37,115,58,32,37,115,32,112,114,101,99,111,109,112,105,108,101,100,32,99,104,117,110,107,0,0,0,0,0,0,0,0,102,111,114,109,97,116,0,0,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,108,117,97,47,53,46,50,47,63,46,108,117,97,59,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,108,117,97,47,53,46,50,47,63,47,105,110,105,116,46,108,117,97,59,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,63,46,108,117,97,59,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,63,47,105,110,105,116,46,108,117,97,59,46,47,63,46,108,117,97,0,0,0,0,0,0,0,97,116,97,110,0,0,0,0,98,105,116,51,50,0,0,0,116,101,120,116,0,0,0,0,84,95,83,80,76,73,84,84,82,73,65,78,71,76,69,0,65,0,0,0,112,0,0,0,114,0,0,0,105,0,0,0,108,0,0,0,0,0,0,0,84,95,82,65,68,73,65,76,74,73,84,84,69,82,0,0,115,99,35,99,55,102,32,91,97,115,112,104,53,32,52,93,0,0,0,0,0,0,0,0,37,100,58,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,99,0,0,0,104,0,0,0,0,0,0,0,84,95,84,79,71,71,76,69,83,67,65,76,69,87,73,78,68,73,78,71,0,0,0,0,84,95,83,67,65,76,69,0,116,111,100,101,108,101,116,101,32,62,61,32,48,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,114,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,105,110,95,78,111,114,109,97,108,77,97,116,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,84,95,84,82,65,78,83,76,65,84,69,0,0,0,0,0,83,116,97,114,116,105,110,103,32,112,97,114,115,101,0,0,84,95,77,73,82,82,79,82,90,0,0,0,0,0,0,0,100,97,116,97,32,100,105,114,32,37,100,47,37,100,58,32,226,128,156,37,115,226,128,157,10,0,0,0,0,0,0,0,80,77,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,33,0,0,0,0,0,0,0,84,95,83,67,65,76,69,90,0,0,0,0,0,0,0,0,99,97,110,110,111,116,32,105,110,105,116,105,97,108,105,115,101,32,83,68,76,58,32,37,115,10,0,0,0,0,0,0,65,77,0,0,0,0,0,0,37,115,0,0,0,0,0,0,84,95,66,69,78,68,90,89,0,0,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,100,101,114,101,102,101,114,101,110,99,105,110,103,32,117,110,114,101,102,101,114,101,110,99,101,100,32,101,110,116,105,116,121,32,37,115,10,10,0,0,0,0,0,0,105,110,95,84,101,120,67,111,111,114,100,0,0,0,0,0,60,115,116,114,105,110,103,62,0,0,0,0,0,0,0,0,105,110,99,114,101,109,101,110,116,97,108,0,0,0,0,0,84,95,66,69,78,68,90,88,0,0,0,0,0,0,0,0,115,104,97,100,101,114,32,115,111,117,114,99,101,58,10,37,115,10,0,0,0,0,0,0,80,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,60,110,97,109,101,62,0,0,61,40,100,101,98,117,103,32,99,111,109,109,97,110,100,41,0,0,0,0,0,0,0,0,103,101,110,101,114,97,116,105,111,110,97,108,0,0,0,0,102,117,110,99,116,105,111,110,32,60,37,115,58,37,100,62,0,0,0,0,0,0,0,0,84,95,83,84,82,69,84,67,72,90,0,0,0,0,0,0,46,0,0,0,0,0,0,0,103,101,116,114,101,103,105,115,116,114,121,0,0,0,0,0,121,105,101,108,100,0,0,0,98,116,101,115,116,0,0,0,100,111,102,105,108,101,0,0,103,101,116,32,108,101,110,103,116,104,32,111,102,0,0,0,116,114,117,110,99,97,116,101,100,0,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,117,110,107,110,111,119,110,32,102,114,97,109,101,98,117,102,102,101,114,32,102,111,114,109,97,116,32,37,100,10,0,0,0,0,0,0,116,97,98,108,101,0,0,0,115,111,114,116,0,0,0,0,102,105,110,100,0,0,0,0,37,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,39,37,37,37,99,39,32,116,111,32,39,108,117,97,95,112,117,115,104,102,115,116,114,105,110,103,39,0,0,0,0,0,0,65,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,60,110,117,109,98,101,114,62,0,0,0,0,0,0,0,0,99,111,110,116,10,0,0,0,76,85,65,95,80,65,84,72,0,0,0,0,0,0,0,0,105,115,114,117,110,110,105,110,103,0,0,0,0,0,0,0,97,116,97,110,50,0,0,0,109,97,105,110,32,99,104,117,110,107,0,0,0,0,0,0,98,105,110,97,114,121,0,0,97,116,116,101,109,112,116,32,116,111,32,99,111,109,112,97,114,101,32,37,115,32,119,105,116,104,32,37,115,0,0,0,84,95,83,72,69,65,82,90,0,0,0,0,0,0,0,0,84,95,84,87,73,83,84,90,0,0,0,0,0,0,0,0,60,101,111,102,62,0,0,0,108,117,97,95,100,101,98,117,103,62,32,0,0,0,0,0,115,101,116,109,97,106,111,114,105,110,99,0,0,0,0,0,102,117,110,99,116,105,111,110,32,39,37,115,39,0,0,0,100,97,116,97,47,103,111,108,103,111,116,104,97,45,103,114,101,101,99,101,46,111,103,103,0,0,0,0,0,0,0,0,84,95,84,65,80,69,82,90,0,0,0,0,0,0,0,0,10,9,37,115,58,0,0,0,58,58,0,0,0,0,0,0,115,101,116,115,116,101,112,109,117,108,0,0,0,0,0,0,84,95,82,79,84,65,84,69,90,0,0,0,0,0,0,0,112,111,115,32,62,61,32,48,0,0,0,0,0,0,0,0,126,61,0,0,0,0,0,0,101,120,116,101,114,110,97,108,32,104,111,111,107,0,0,0,115,101,116,112,97,117,115,101,0,0,0,0,0,0,0,0,84,95,84,82,65,78,83,76,65,84,69,90,0,0,0,0,109,95,99,111,117,110,116,32,62,32,48,0,0,0,0,0,60,119,111,114,108,100,101,110,116,105,116,121,62,0,0,0,105,110,95,80,114,111,106,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,121,121,95,103,101,116,95,110,101,120,116,95,98,117,102,102,101,114,40,41,0,0,0,60,61,0,0,0,0,0,0,102,117,110,99,0,0,0,0,115,116,101,112,0,0,0,0,37,115,32,101,120,112,101,99,116,101,100,44,32,103,111,116,32,37,115,0,0,0,0,0,110,32,60,61,32,67,111,117,110,116,40,41,0,0,0,0,84,95,77,73,82,82,79,82,89,0,0,0,0,0,0,0,62,61,0,0,0,0,0,0,97,99,116,105,118,101,108,105,110,101,115,0,0,0,0,0,99,97,110,110,111,116,32,37,115,32,37,115,58,32,37,115,0,0,0,0,0,0,0,0,98,105,110,97,114,121,32,100,105,114,58,32,226,128,156,37,115,226,128,157,10,0,0,0,84,95,83,67,65,76,69,89,0,0,0,0,0,0,0,0,61,61,0,0,0,0,0,0,105,115,116,97,105,108,99,97,108,108,0,0,0,0,0,0,99,111,108,108,101,99,116,0,85,78,68,69,70,73,78,69,68,0,0,0,0,0,0,0,84,95,66,69,78,68,89,90,0,0,0,0,0,0,0,0,46,46,46,0,0,0,0,0,110,97,109,101,119,104,97,116,0,0,0,0,0,0,0,0,114,101,115,116,97,114,116,0,80,65,78,73,67,58,32,117,110,112,114,111,116,101,99,116,101,100,32,101,114,114,111,114,32,105,110,32,99,97,108,108,32,116,111,32,76,117,97,32,65,80,73,32,40,37,115,41,10,0,0,0,0,0,0,0,83,97,109,112,108,101,0,0,100,101,114,101,102,101,114,101,110,99,105,110,103,32,110,117,108,108,32,101,110,116,105,116,121,10,0,0,0,0,0,0,84,95,66,69,78,68,89,88,0,0,0,0,0,0,0,0,105,110,95,80,111,115,105,116,105,111,110,0,0,0,0,0,46,46,0,0,0,0,0,0,110,97,109,101,0,0,0,0,115,116,111,112,0,0,0,0,98,97,100,32,99,111,110,118,101,114,115,105,111,110,32,110,117,109,98,101,114,45,62,105,110,116,59,32,109,117,115,116,32,114,101,99,111,109,112,105,108,101,32,76,117,97,32,119,105,116,104,32,112,114,111,112,101,114,32,115,101,116,116,105,110,103,115,0,0,0,0,0,68,101,112,116,104,0,0,0,84,95,83,84,82,69,84,67,72,89,0,0,0,0,0,0,102,97,105,108,101,100,32,116,111,32,99,111,109,112,105,108,101,32,118,101,114,116,101,120,32,115,104,97,100,101,114,58,32,37,115,0,0,0,0,0,119,104,105,108,101,0,0,0,105,115,118,97,114,97,114,103,0,0,0,0,0,0,0,0,95,95,105,112,97,105,114,115,0,0,0,0,0,0,0,0,115,116,114,105,110,103,32,115,108,105,99,101,32,116,111,111,32,108,111,110,103,0,0,0,118,101,114,115,105,111,110,32,109,105,115,109,97,116,99,104,58,32,97,112,112,46,32,110,101,101,100,115,32,37,102,44,32,76,117,97,32,99,111,114,101,32,112,114,111,118,105,100,101,115,32,37,102,0,0,0,70,111,103,0,0,0,0,0,105,110,118,97,108,105,100,32,108,111,110,103,32,115,116,114,105,110,103,32,100,101,108,105,109,105,116,101,114,0,0,0,84,95,83,72,69,65,82,89,0,0,0,0,0,0,0,0,103,101,116,108,111,99,97,108,0,0,0,0,0,0,0,0,119,114,97,112,0,0,0,0,99,111,110,116,114,111,108,32,115,116,114,117,99,116,117,114,101,32,116,111,111,32,108,111,110,103,0,0,0,0,0,0,98,120,111,114,0,0,0,0,99,111,108,108,101,99,116,103,97,114,98,97,103,101,0,0,115,116,114,105,110,103,32,108,101,110,103,116,104,32,111,118,101,114,102,108,111,119,0,0,25,147,13,10,26,10,0,0,116,114,121,105,110,103,32,116,111,32,117,110,98,105,110,100,32,97,110,32,117,110,98,111,117,110,100,32,102,114,97,109,101,98,117,102,102,101,114,0,115,116,114,105,110,103,0,0,114,101,109,111,118,101,0,0].concat([100,117,109,112,0,0,0,0,108,97,98,101,108,115,47,103,111,116,111,115,0,0,0,0,37,0,0,0,0,0,0,0,117,110,116,105,108,0,0,0,110,112,97,114,97,109,115,0,76,85,65,95,80,65,84,72,95,53,95,50,0,0,0,0,114,101,97,100,101,114,32,102,117,110,99,116,105,111,110,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,0,0,0,0,118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,97,115,105,110,0,0,0,0,105,110,105,116,0,0,0,0,109,117,108,116,105,112,108,101,32,76,117,97,32,86,77,115,32,100,101,116,101,99,116,101,100,0,0,0,0,0,0,0,60,116,105,108,101,115,101,116,62,32,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,99,111,109,112,97,114,101,32,116,119,111,32,37,115,32,118,97,108,117,101,115,0,0,0,0,0,0,0,0,67,111,108,111,114,0,0,0,84,95,84,87,73,83,84,89,0,0,0,0,0,0,0,0,110,117,112,115,0,0,0,0,116,111,111,32,109,97,110,121,32,110,101,115,116,101,100,32,102,117,110,99,116,105,111,110,115,0,0,0,0,0,0,0,117,110,97,98,108,101,32,116,111,32,100,117,109,112,32,103,105,118,101,110,32,102,117,110,99,116,105,111,110,0,0,0,97,98,115,101,110,116,0,0,80,111,115,105,116,105,111,110,84,0,0,0,0,0,0,0,100,97,116,97,47,103,108,121,112,104,115,46,112,110,103,0,84,95,84,65,80,69,82,89,0,0,0,0,0,0,0,0,83,108,110,116,0,0,0,0,108,111,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,0,116,104,101,110,0,0,0,0,99,117,114,114,101,110,116,108,105,110,101,0,0,0,0,0,61,40,108,111,97,100,41,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,40,119,105,100,116,104,32,111,114,32,112,114,101,99,105,115,105,111,110,32,116,111,111,32,108,111,110,103,41,0,0,0,0,115,101,97,114,99,104,112,97,116,104,0,0,0,0,0,0,84,101,115,115,70,97,99,116,111,114,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,117,112,118,97,108,117,101,115,0,0,0,0,0,0,0,108,117,97,47,105,110,105,116,46,108,117,97,0,0,0,0,84,95,82,79,84,65,84,69,89,0,0,0,0,0,0,0,40,117,110,115,105,103,110,101,100,41,110,32,60,32,40,117,110,115,105,103,110,101,100,41,109,95,99,111,117,110,116,32,124,124,32,40,33,110,32,38,38,32,33,109,95,99,111,117,110,116,41,0,0,0,0,0,114,101,116,117,114,110,0,0,119,104,97,116,0,0,0,0,98,116,0,0,0,0,0,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,40,114,101,112,101,97,116,101,100,32,102,108,97,103,115,41,0,108,111,97,100,108,105,98,0,37,115,58,32,37,112,0,0,66,105,110,111,114,109,97,108,0,0,0,0,0,0,0,0,84,95,84,82,65,78,83,76,65,84,69,89,0,0,0,0,105,110,95,73,110,118,95,86,105,101,119,0,0,0,0,0,105,110,112,117,116,32,105,110,32,102,108,101,120,32,115,99,97,110,110,101,114,32,102,97,105,108,101,100,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,114,101,112,101,97,116,0,0,108,97,115,116,108,105,110,101,100,101,102,105,110,101,100,0,95,95,112,97,105,114,115,0,45,43,32,35,48,0,0,0,10,9,110,111,32,102,105,101,108,100,32,112,97,99,107,97,103,101,46,112,114,101,108,111,97,100,91,39,37,115,39,93,0,0,0,0,0,0,0,0,84,97,110,103,101,110,116,0,32,40,0,0,0,0,0,0,84,95,77,73,82,82,79,82,88,0,0,0,0,0,0,0,69,82,82,79,82,0,0,0,37,73,58,37,77,58,37,83,32,37,112,0,0,0,0,0,111,114,0,0,0,0,0,0,108,105,110,101,100,101,102,105,110,101,100,0,0,0,0,0,92,37,48,51,100,0,0,0,84,101,120,67,111,111,114,100,69,120,116,0,0,0,0,0,91,118,101,114,116,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,105,110,95,80,111,115,105,116,105,111,110,59,10,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,80,111,115,105,116,105,111,110,59,10,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,32,32,32,32,112,97,115,115,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,111,115,105,116,105,111,110,59,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,105,110,95,80,111,115,105,116,105,111,110,44,32,48,46,48,44,32,49,46,48,41,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,105,110,95,84,101,120,116,59,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,117,95,84,105,109,101,59,10,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,80,111,115,105,116,105,111,110,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,102,108,111,97,116,32,119,105,100,116,104,32,61,32,48,46,48,49,56,59,32,47,42,32,119,105,100,116,104,32,111,102,32,111,117,114,32,108,111,111,107,117,112,32,42,47,10,32,32,32,32,102,108,111,97,116,32,108,105,110,101,99,111,117,110,116,32,61,32,56,46,48,59,10,10,32,32,32,32,118,101,99,50,32,116,101,120,99,111,111,114,100,115,32,61,32,112,97,115,115,95,80,111,115,105,116,105,111,110,32,42,32,48,46,53,32,43,32,118,101,99,50,40,48,46,53,44,32,48,46,53,41,59,10,32,32,32,32,116,101,120,99,111,111,114,100,115,46,120,32,43,61,32,48,46,48,52,32,42,32,115,105,110,40,117,95,84,105,109,101,32,42,32,50,51,51,50,46,48,32,43,32,116,101,120,99,111,111,114,100,115,46,121,32,42,32,50,46,48,41,59,10,32,32,32,32,47,47,116,101,120,99,111,111,114,100,115,46,121,32,43,61,32,48,46,49,56,32,42,32,115,105,110,40,117,95,84,105,109,101,32,42,32,48,46,48,32,43,32,116,101,120,99,111,111,114,100,115,46,120,32,42,32,53,46,48,41,59,10,32,32,32,32,47,47,116,101,120,99,111,111,114,100,115,46,121,32,43,61,32,48,46,49,56,32,42,32,115,105,110,40,117,95,84,105,109,101,32,42,32,50,48,48,48,46,48,32,43,32,116,101,120,99,111,111,114,100,115,46,120,32,42,32,50,46,48,41,59,10,32,32,32,32,116,101,120,99,111,111,114,100,115,46,121,32,42,61,32,49,46,53,59,10,10,32,32,32,32,116,101,120,99,111,111,114,100,115,46,121,32,61,32,99,108,97,109,112,40,116,101,120,99,111,111,114,100,115,46,121,44,32,48,46,48,44,32,49,46,48,41,59,10,10,32,32,32,32,102,108,111,97,116,32,116,105,109,101,32,61,32,117,95,84,105,109,101,32,43,32,116,101,120,99,111,111,114,100,115,46,120,32,42,32,119,105,100,116,104,59,32,47,42,32,66,101,116,119,101,101,110,32,48,32,97,110,100,32,49,32,42,47,10,10,32,32,32,32,118,101,99,50,32,103,108,121,112,104,99,111,111,114,100,115,32,61,32,116,101,120,99,111,111,114,100,115,59,10,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,46,120,32,61,32,102,114,97,99,116,40,116,105,109,101,32,42,32,108,105,110,101,99,111,117,110,116,41,59,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,46,121,32,61,32,40,49,46,48,32,45,32,103,108,121,112,104,99,111,111,114,100,115,46,121,32,43,32,102,108,111,111,114,40,116,105,109,101,32,42,32,108,105,110,101,99,111,117,110,116,41,41,32,47,32,108,105,110,101,99,111,117,110,116,59,10,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,32,61,32,99,108,97,109,112,40,103,108,121,112,104,99,111,111,114,100,115,44,32,48,46,48,44,32,49,46,48,41,59,10,10,32,32,32,32,118,101,99,52,32,99,111,108,111,114,32,61,32,116,101,120,116,117,114,101,50,68,40,105,110,95,84,101,120,116,44,32,103,108,121,112,104,99,111,111,114,100,115,41,59,10,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,99,111,108,111,114,59,10,125,10,10,0,0,0,115,114,99,47,0,0,0,0,84,95,83,67,65,76,69,88,0,0,0,0,0,0,0,0,37,0,0,0,97,0,0,0,32,0,0,0,37,0,0,0,98,0,0,0,32,0,0,0,37,0,0,0,100,0,0,0,32,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,110,111,116,0,0,0,0,0,115,104,111,114,116,95,115,114,99,0,0,0,0,0,0,0,92,37,100,0,0,0,0,0,84,101,120,67,111,111,114,100,0,0,0,0,0,0,0,0,95,95,116,111,115,116,114,105,110,103,0,0,0,0,0,0,84,95,66,69,78,68,88,90,0,0,0,0,0,0,0,0,111,117,116,32,109,97,116,52,0,0,0,0,0,0,0,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,0,0,0,110,105,108,0,0,0,0,0,115,111,117,114,99,101,0,0,39,116,111,115,116,114,105,110,103,39,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,32,116,111,32,39,112,114,105,110,116,39,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,39,37,37,37,99,39,32,116,111,32,39,102,111,114,109,97,116,39,0,0,0,0,0,0,0,10,9,110,111,32,102,105,108,101,32,39,37,115,39,0,0,80,111,105,110,116,83,105,122,101,0,0,0,0,0,0,0,111,98,106,101,99,116,32,108,101,110,103,116,104,32,105,115,32,110,111,116,32,97,32,110,117,109,98,101,114,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,114,101,102,101,114,101,110,99,105,110,103,32,101,110,116,105,116,121,32,115,99,104,101,100,117,108,101,100,32,102,111,114,32,100,101,115,116,114,117,99,116,105,111,110,32,37,115,10,10,0,0,0,84,95,66,69,78,68,88,89,0,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,111,117,116,32,118,101,99,52,0,0,0,0,0,0,0,0,108,111,99,97,108,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,0,0,116,97,98,108,101,32,111,114,32,115,116,114,105,110,103,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,110,111,116,32,97,32,110,111,110,45,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,105,110,32,112,114,111,112,101,114,32,114,97,110,103,101,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,78,111,114,109,97,108,0,0,91,118,101,114,116,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,117,95,84,105,109,101,59,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,105,110,95,80,111,115,105,116,105,111,110,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,80,111,115,105,116,105,111,110,59,10,118,97,114,121,105,110,103,32,118,101,99,51,32,119,97,116,101,114,91,52,93,59,10,118,97,114,121,105,110,103,32,118,101,99,51,32,102,105,114,101,91,52,93,59,10,10,102,108,111,97,116,32,109,111,100,50,56,57,40,102,108,111,97,116,32,120,41,10,123,10,32,32,32,32,114,101,116,117,114,110,32,120,32,45,32,102,108,111,111,114,40,120,32,42,32,40,49,46,48,32,47,32,50,56,57,46,48,41,41,32,42,32,50,56,57,46,48,59,10,125,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,109,97,116,51,32,114,32,61,32,109,97,116,51,40,48,46,51,54,44,32,48,46,52,56,44,32,45,48,46,56,44,32,45,48,46,56,44,32,48,46,54,48,44,32,48,46,48,44,32,48,46,52,56,44,32,48,46,54,52,44,32,48,46,54,48,41,59,10,32,32,32,32,118,101,99,51,32,112,95,112,111,115,32,61,32,114,32,42,32,118,101,99,51,40,105,110,95,80,111,115,105,116,105,111,110,32,42,32,118,101,99,50,40,49,54,46,48,44,32,57,46,48,41,44,32,48,46,48,41,59,10,32,32,32,32,118,101,99,51,32,112,95,116,105,109,101,32,61,32,114,32,42,32,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,117,95,84,105,109,101,32,42,32,50,46,48,41,59,10,10,32,32,32,32,47,42,32,78,111,105,115,101,32,115,97,109,112,108,105,110,103,32,112,111,105,110,116,115,32,102,111,114,32,119,97,116,101,114,32,42,47,10,32,32,32,32,119,97,116,101,114,91,48,93,32,61,32,112,95,112,111,115,32,47,32,50,46,48,32,43,32,112,95,116,105,109,101,59,10,32,32,32,32,119,97,116,101,114,91,49,93,32,61,32,112,95,112,111,115,32,47,32,52,46,48,32,43,32,112,95,116,105,109,101,59,10,32,32,32,32,119,97,116,101,114,91,50,93,32,61,32,112,95,112,111,115,32,47,32,56,46,48,32,43,32,112,95,116,105,109,101,59,10,32,32,32,32,119,97,116,101,114,91,51,93,32,61,32,112,95,112,111,115,32,47,32,49,54,46,48,32,43,32,112,95,116,105,109,101,59,10,10,32,32,32,32,47,42,32,78,111,105,115,101,32,115,97,109,112,108,105,110,103,32,112,111,105,110,116,115,32,102,111,114,32,102,105,114,101,32,42,47,10,32,32,32,32,112,95,112,111,115,32,61,32,49,54,46,48,32,42,32,112,95,112,111,115,32,45,32,114,32,42,32,118,101,99,51,40,48,46,48,44,32,109,111,100,50,56,57,40,117,95,84,105,109,101,41,32,42,32,49,50,56,46,48,44,32,48,46,48,41,59,10,32,32,32,32,102,105,114,101,91,48,93,32,61,32,112,95,112,111,115,32,47,32,50,46,48,32,43,32,112,95,116,105,109,101,32,42,32,50,46,48,59,10,32,32,32,32,102,105,114,101,91,49,93,32,61,32,112,95,112,111,115,32,47,32,52,46,48,32,43,32,112,95,116,105,109,101,32,42,32,49,46,53,59,10,32,32,32,32,102,105,114,101,91,50,93,32,61,32,112,95,112,111,115,32,47,32,56,46,48,32,43,32,112,95,116,105,109,101,59,10,32,32,32,32,102,105,114,101,91,51,93,32,61,32,112,95,112,111,115,32,47,32,49,54,46,48,32,43,32,112,95,116,105,109,101,59,10,10,32,32,32,32,47,42,32,80,97,115,115,32,114,111,116,97,116,101,100,32,115,99,114,101,101,110,32,99,111,111,114,100,105,110,97,116,101,115,32,42,47,10,32,32,32,32,112,97,115,115,95,80,111,115,105,116,105,111,110,46,120,121,32,61,32,105,110,95,80,111,115,105,116,105,111,110,59,10,32,32,32,32,109,97,116,50,32,114,111,116,32,61,32,109,97,116,50,40,99,111,115,40,117,95,84,105,109,101,41,44,32,115,105,110,40,117,95,84,105,109,101,41,44,32,45,115,105,110,40,117,95,84,105,109,101,41,44,32,99,111,115,40,117,95,84,105,109,101,41,41,59,10,32,32,32,32,112,97,115,115,95,80,111,115,105,116,105,111,110,46,122,119,32,61,32,114,111,116,32,42,32,105,110,95,80,111,115,105,116,105,111,110,59,10,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,105,110,95,80,111,115,105,116,105,111,110,44,32,48,46,48,44,32,49,46,48,41,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,117,95,84,105,109,101,59,10,117,110,105,102,111,114,109,32,118,101,99,52,32,117,95,67,111,108,111,114,49,44,32,117,95,67,111,108,111,114,50,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,80,111,115,105,116,105,111,110,59,10,118,97,114,121,105,110,103,32,118,101,99,51,32,119,97,116,101,114,91,52,93,59,10,10,118,101,99,52,32,109,111,100,50,56,57,40,118,101,99,52,32,120,41,10,123,10,32,32,32,32,114,101,116,117,114,110,32,120,32,45,32,102,108,111,111,114,40,120,32,42,32,40,49,46,48,32,47,32,50,56,57,46,48,41,41,32,42,32,50,56,57,46,48,59,10,125,10,10,118,101,99,52,32,112,101,114,109,40,118,101,99,52,32,120,41,10,123,10,32,32,32,32,114,101,116,117,114,110,32,109,111,100,50,56,57,40,40,40,120,32,42,32,51,52,46,48,41,32,43,32,49,46,48,41,32,42,32,120,41,59,10,125,10,10,102,108,111,97,116,32,110,111,105,115,101,51,100,40,118,101,99,51,32,112,41,10,123,10,32,32,32,32,118,101,99,51,32,97,32,61,32,102,108,111,111,114,40,112,41,59,10,32,32,32,32,118,101,99,51,32,100,32,61,32,112,32,45,32,97,59,10,32,32,32,32,100,32,61,32,100,32,42,32,100,32,42,32,40,51,46,48,32,45,32,50,46,48,32,42,32,100,41,59,10,10,32,32,32,32,118,101,99,52,32,98,32,61,32,97,46,120,120,121,121,32,43,32,118,101,99,52,40,48,46,48,44,32,49,46,48,44,32,48,46,48,44,32,49,46,48,41,59,10,32,32,32,32,118,101,99,52,32,107,49,32,61,32,112,101,114,109,40,98,46,120,121,120,121,41,59,10,32,32,32,32,118,101,99,52,32,107,50,32,61,32,112,101,114,109,40,107,49,46,120,121,120,121,32,43,32,98,46,122,122,119,119,41,59,10,10,32,32,32,32,118,101,99,52,32,99,32,61,32,107,50,32,43,32,97,46,122,122,122,122,59,10,32,32,32,32,118,101,99,52,32,107,51,32,61,32,112,101,114,109,40,99,41,59,10,32,32,32,32,118,101,99,52,32,107,52,32,61,32,112,101,114,109,40,99,32,43,32,49,46,48,41,59,10,10,32,32,32,32,118,101,99,52,32,111,49,32,61,32,102,114,97,99,116,40,107,51,32,42,32,40,49,46,48,32,47,32,52,49,46,48,41,41,59,10,32,32,32,32,118,101,99,52,32,111,50,32,61,32,102,114,97,99,116,40,107,52,32,42,32,40,49,46,48,32,47,32,52,49,46,48,41,41,59,10,10,32,32,32,32,118,101,99,52,32,111,51,32,61,32,111,50,32,42,32,100,46,122,32,43,32,111,49,32,42,32,40,49,46,48,32,45,32,100,46,122,41,59,10,32,32,32,32,118,101,99,50,32,111,52,32,61,32,111,51,46,121,119,32,42,32,100,46,120,32,43,32,111,51,46,120,122,32,42,32,40,49,46,48,32,45,32,100,46,120,41,59,10,10,32,32,32,32,114,101,116,117,114,110,32,111,52,46,121,32,42,32,100,46,121,32,43,32,111,52,46,120,32,42,32,40,49,46,48,32,45,32,100,46,121,41,59,10,125,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,52,32,99,111,108,111,114,59,10,10,32,32,32,32,118,101,99,52,32,110,32,61,32,118,101,99,52,40,110,111,105,115,101,51,100,40,119,97,116,101,114,91,48,93,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,111,105,115,101,51,100,40,119,97,116,101,114,91,49,93,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,111,105,115,101,51,100,40,119,97,116,101,114,91,50,93,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,111,105,115,101,51,100,40,119,97,116,101,114,91,51,93,41,41,59,10,10,32,32,32,32,47,42,32,85,115,101,32,110,111,105,115,101,32,114,101,115,117,108,116,115,32,102,111,114,32,119,97,116,101,114,32,42,47,10,32,32,32,32,102,108,111,97,116,32,112,32,61,32,100,111,116,40,97,98,115,40,50,46,48,32,42,32,110,32,45,32,49,46,48,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,118,101,99,52,40,48,46,53,44,32,48,46,50,53,44,32,48,46,49,50,53,44,32,48,46,49,50,53,41,41,59,10,32,32,32,32,102,108,111,97,116,32,113,32,61,32,115,113,114,116,40,112,41,59,10,10,32,32,32,32,99,111,108,111,114,32,61,32,109,105,120,40,117,95,67,111,108,111,114,49,44,32,117,95,67,111,108,111,114,50,44,32,113,41,59,10,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,99,111,108,111,114,59,10,125,10,10,0,0,0,0,0,114,101,97,100,0,0,0,0,84,95,83,84,82,69,84,67,72,88,0,0,0,0,0,0,60,108,105,103,104,116,62,0,37,72,58,37,77,58,37,83,0,0,0,0,0,0,0,0,111,117,116,32,118,101,99,51,0,0,0,0,0,0,0,0,110,111,32,102,114,97,103,109,101,110,116,32,115,104,97,100,101,114,32,102,111,117,110,100,226,128,166,32,115,111,114,114,121,44,32,73,226,128,153,109,32,103,111,110,110,97,32,99,114,97,115,104,32,110,111,119,46,10,0,0,0,0,0,0,105,110,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,111,114,32,108,101,118,101,108,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,105,110,100,101,120,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,39,112,97,99,107,97,103,101,46,37,115,39,32,109,117,115,116,32,98,101,32,97,32,115,116,114,105,110,103,0,0,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,0,66,108,101,110,100,73,110,100,105,99,101,115,0,0,0,0,114,101,111,112,101,110,0,0,95,69,78,86,0,0,0,0,84,95,83,72,69,65,82,88,0,0,0,0,0,0,0,0,103,101,116,105,110,102,111,0,115,116,97,116,117,115,0,0,111,112,99,111,100,101,115,0,98,111,114,0,0,0,0,0,97,115,115,101,114,116,0,0,108,111,111,112,32,105,110,32,115,101,116,116,97,98,108,101,0,0,0,0,0,0,0,0,116,114,121,105,110,103,32,116,111,32,98,105,110,100,32,97,110,32,97,108,114,101,97,100,121,32,98,111,117,110,100,32,102,114,97,109,101,98,117,102,102,101,114,0,0,0,0,0,110,117,109,98,101,114,0,0,117,110,112,97,99,107,0,0,105,110,118,97,108,105,100,32,107,101,121,32,116,111,32,39,110,101,120,116,39,0,0,0,99,104,97,114,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,111,117,116,32,118,101,99,50,0,0,0,0,0,0,0,0,105,102,0,0,0,0,0,0,62,37,115,0,0,0,0,0,112,97,116,104,0,0,0,0,99,97,110,110,111,116,32,99,104,97,110,103,101,32,97,32,112,114,111,116,101,99,116,101,100,32,109,101,116,97,116,97,98,108,101,0,0,0,0,0,110,111,116,32,97,32,110,117,109,98,101,114,32,105,110,32,112,114,111,112,101,114,32,114,97,110,103,101,0,0,0,0,97,99,111,115,0,0,0,0,100,121,110,97,109,105,99,32,108,105,98,114,97,114,105,101,115,32,110,111,116,32,101,110,97,98,108,101,100,59,32,99,104,101,99,107,32,121,111,117,114,32,76,117,97,32,105,110,115,116,97,108,108,97,116,105,111,110,0,0,0,0,0,0,99,111,114,111,117,116,105,110,101,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,121,105,101,108,100,32,102,114,111,109,32,111,117,116,115,105,100,101,32,97,32,99,111,114,111,117,116,105,110,101,0,0,0,0,0,0,0,112,101,114,102,111,114,109,32,97,114,105,116,104,109,101,116,105,99,32,111,110,0,0,0,60,99,97,109,101,114,97,62,0,0,0,0,0,0,0,0,66,108,101,110,100,87,101,105,103,104,116,0,0,0,0,0,114,98,0,0,0,0,0,0,84,95,84,87,73,83,84,88,0,0,0,0,0,0,0,0,37,109,47,37,100,47,37,121,0,0,0,0,0,0,0,0,118,97,114,121,105,110,103,32,109,97,116,52,0,0,0,0,103,111,116,111,0,0,0,0,102,108,110,83,116,117,0,0,95,95,109,101,116,97,116,97,98,108,101,0,0,0,0,0,108,117,97,111,112,101,110,95,37,115,0,0,0,0,0,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,0,0,0,0,0,0,0,80,111,115,105,116,105,111,110,0,0,0,0,0,0,0,0,91,118,101,114,116,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,105,110,95,80,111,115,105,116,105,111,110,59,10,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,80,111,115,105,116,105,111,110,59,10,10,118,111,105,100,32,109,97,105,110,40,41,10,123,10,32,32,32,32,112,97,115,115,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,111,115,105,116,105,111,110,59,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,118,101,99,52,40,105,110,95,80,111,115,105,116,105,111,110,44,32,48,46,48,44,32,49,46,48,41,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,105,110,95,84,101,120,116,117,114,101,44,32,105,110,95,71,108,121,112,104,115,59,10,117,110,105,102,111,114,109,32,118,101,99,50,32,105,110,95,82,101,115,111,108,117,116,105,111,110,59,10,117,110,105,102,111,114,109,32,118,101,99,51,32,105,110,95,82,97,110,100,111,109,59,10,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,80,111,115,105,116,105,111,110,59,10,10,118,101,99,51,32,114,97,110,100,50,40,118,101,99,50,32,115,101,101,100,41,10,123,10,32,32,32,32,118,101,99,51,32,115,49,32,61,32,118,101,99,51,40,57,51,46,48,50,57,52,52,50,50,44,32,50,57,46,48,51,50,57,52,56,52,44,32,50,53,50,57,46,51,48,57,48,52,49,54,41,32,43,32,105,110,95,82,97,110,100,111,109,59,10,32,32,32,32,118,101,99,51,32,115,50,32,61,32,118,101,99,51,40,56,52,46,51,50,56,57,52,55,51,44,32,51,50,46,52,56,51,50,57,56,57,44,32,53,51,51,50,46,56,52,51,57,50,51,52,41,32,43,32,105,110,95,82,97,110,100,111,109,59,10,32,32,32,32,118,101,99,51,32,115,51,32,61,32,118,101,99,51,40,52,57,46,48,50,48,56,55,57,49,44,32,49,53,46,56,52,51,48,56,55,57,44,32,52,57,52,51,46,57,56,52,48,57,48,53,41,32,43,32,105,110,95,82,97,110,100,111,109,59,10,32,32,32,32,114,101,116,117,114,110,32,102,114,97,99,116,40,118,101,99,51,40,115,105,110,40,100,111,116,40,115,101,101,100,44,32,115,49,46,120,121,41,41,32,42,32,115,49,46,122,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,105,110,40,100,111,116,40,115,101,101,100,44,32,115,50,46,120,121,41,41,32,42,32,115,50,46,122,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,115,105,110,40,100,111,116,40,115,101,101,100,44,32,115,51,46,120,121,41,41,32,42,32,115,51,46,122,41,41,59,10,125,10,10,118,101,99,52,32,98,101,115,116,44,32,115,101,99,111,110,100,95,98,101,115,116,59,10,118,101,99,51,32,116,97,114,103,101,116,59,10,10,118,111,105,100,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,32,99,97,110,100,105,100,97,116,101,41,10,123,10,32,32,32,32,102,108,111,97,116,32,100,32,61,32,100,111,116,40,99,97,110,100,105,100,97,116,101,32,45,32,116,97,114,103,101,116,44,32,99,97,110,100,105,100,97,116,101,32,45,32,116,97,114,103,101,116,41,59,10,32,32,32,32,105,102,32,40,100,32,60,32,98,101,115,116,46,119,41,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,115,101,99,111,110,100,95,98,101,115,116,32,61,32,98,101,115,116,59,10,32,32,32,32,32,32,32,32,98,101,115,116,32,61,32,118,101,99,52,40,99,97,110,100,105,100,97,116,101,44,32,100,41,59,10,32,32,32,32,125,10,32,32,32,32,101,108,115,101,32,105,102,32,40,100,32,60,32,115,101,99,111,110,100,95,98,101,115,116,46,119,41,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,115,101,99,111,110,100,95,98,101,115,116,32,61,32,118,101,99,52,40,99,97,110,100,105,100,97,116,101,44,32,100,41,59,10,32,32,32,32,125,10,125,10,10,118,111,105,100,32,99,108,97,109,112,95,97,110,115,105,40,118,101,99,51,32,99,111,108,111,114,41,10,123,10,32,32,32,32,116,97,114,103,101,116,32,61,32,99,111,108,111,114,59,10,32,32,32,32,98,101,115,116,32,61,32,115,101,99,111,110,100,95,98,101,115,116,32,61,32,118,101,99,52,40,49,48,48,48,46,48,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,56,44,32,48,46,48,44,32,48,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,48,44,32,48,46,56,44,32,48,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,48,46,56,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,56,44,32,48,46,56,44,32,48,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,56,44,32,48,46,48,44,32,48,46,56,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,48,44,32,48,46,56,44,32,48,46,56,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,49,46,48,44,32,49,46,48,44,32,49,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,51,51,51,51,51,44,32,48,46,51,51,51,51,51,44,32,48,46,51,51,51,51,51,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,54,54,54,54,54,44,32,48,46,54,54,54,54,54,44,32,48,46,54,54,54,54,54,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,49,46,48,44,32,48,46,51,44,32,48,46,51,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,51,44,32,49,46,48,44,32,48,46,51,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,51,44,32,48,46,51,44,32,49,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,49,46,48,44,32,49,46,48,44,32,48,46,51,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,49,46,48,44,32,48,46,51,44,32,49,46,48,41,41,59,10,32,32,32,32,99,111,110,115,105,100,101,114,95,99,97,110,100,105,100,97,116,101,40,118,101,99,51,40,48,46,51,44,32,49,46,48,44,32,49,46,48,41,41,59,10,125,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,50,32,116,101,120,99,111,111,114,100,115,32,61,32,112,97,115,115,95,80,111,115,105,116,105,111,110,32,42,32,48,46,53,32,43,32,118,101,99,50,40,48,46,53,44,32,48,46,53,41,59,10,32,32,32,32,118,101,99,50,32,103,108,121,112,104,99,111,111,114,100,115,32,61,32,102,114,97,99,116,40,40,116,101,120,99,111,111,114,100,115,32,45,32,48,46,53,41,32,42,32,105,110,95,82,101,115,111,108,117,116,105,111,110,46,120,121,41,59,10,32,32,32,32,116,101,120,99,111,111,114,100,115,32,61,32,102,108,111,111,114,40,40,116,101,120,99,111,111,114,100,115,32,45,32,48,46,53,41,32,42,32,105,110,95,82,101,115,111,108,117,116,105,111,110,46,120,121,41,32,47,32,105,110,95,82,101,115,111,108,117,116,105,111,110,46,120,121,32,43,32,48,46,53,59,10,10,32,32,32,32,118,101,99,51,32,99,111,108,111,114,32,61,32,116,101,120,116,117,114,101,50,68,40,105,110,95,84,101,120,116,117,114,101,44,32,116,101,120,99,111,111,114,100,115,41,46,120,121,122,59,10,32,32,32,32,99,111,108,111,114,32,42,61,32,49,46,49,59,32,47,42,32,98,111,111,115,116,32,99,111,108,111,114,115,63,32,42,47,10,32,32,32,32,99,111,108,111,114,32,43,61,32,48,46,50,32,42,32,40,114,97,110,100,50,40,116,101,120,99,111,111,114,100,115,41,32,45,32,118,101,99,51,40,48,46,53,41,41,59,10,10,32,32,32,32,99,108,97,109,112,95,97,110,115,105,40,99,111,108,111,114,41,59,10,10,32,32,32,32,102,108,111,97,116,32,115,32,61,32,50,46,48,32,42,32,98,101,115,116,46,119,32,47,32,40,98,101,115,116,46,119,32,43,32,115,101,99,111,110,100,95,98,101,115,116,46,119,41,59,10,32,32,32,32,102,108,111,97,116,32,116,32,61,32,114,97,110,100,50,40,116,101,120,99,111,111,114,100,115,41,46,120,59,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,46,120,32,43,61,32,102,108,111,111,114,40,115,32,42,32,57,46,48,41,59,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,46,120,32,42,61,32,40,49,46,48,32,47,32,57,46,48,41,59,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,46,121,32,43,61,32,102,108,111,111,114,40,116,32,42,32,56,46,48,41,59,10,32,32,32,32,103,108,121,112,104,99,111,111,114,100,115,46,121,32,61,32,49,46,48,32,45,32,103,108,121,112,104,99,111,111,114,100,115,46,121,32,42,32,40,49,46,48,32,47,32,56,46,48,41,59,10,10,32,32,32,32,102,108,111,97,116,32,97,108,112,104,97,32,61,32,116,101,120,116,117,114,101,50,68,40,105,110,95,71,108,121,112,104,115,44,32,103,108,121,112,104,99,111,111,114,100,115,41,46,120,59,10,32,32,32,32,99,111,108,111,114,32,61,32,109,105,120,40,98,101,115,116,46,114,103,98,44,32,115,101,99,111,110,100,95,98,101,115,116,46,114,103,98,44,32,97,108,112,104,97,41,59,10,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,118,101,99,52,40,99,111,108,111,114,44,32,49,46,48,41,59,10,125,10,10,0,0,100,97,116,97,47,115,99,114,111,108,108,116,101,120,116,46,112,110,103,0,0,0,0,0,84,95,84,65,80,69,82,88,0,0,0,0,0,0,0,0,10,9,46,46,46,0,0,0,97,116,116,114,105,98,117,116,101,32,109,97,116,52,0,0,102,117,110,99,116,105,111,110,0,0,0,0,0,0,0,0,76,117,97,32,102,117,110,99,116,105,111,110,32,101,120,112,101,99,116,101,100,0,0,0,105,110,118,97,108,105,100,32,117,115,101,32,111,102,32,39,37,99,39,32,105,110,32,114,101,112,108,97,99,101,109,101,110,116,32,115,116,114,105,110,103,0,0,0,0,0,0,0,105,110,116,101,114,118,97,108,32,105,115,32,101,109,112,116,121,0,0,0,0,0,0,0,111,112,101,110,0,0,0,0,62,0,0,0,0,0,0,0,115,116,114,101,97,109,32,35,37,100,32,119,105,116,104,32,117,115,97,103,101,32,37,120,32,110,111,116,32,102,111,117,110,100,32,105,110,32,100,101,99,108,97,114,97,116,105,111,110,10,0,0,0,0,0,0,99,111,117,108,100,32,110,111,116,32,108,111,97,100,32,115,97,109,112,108,101,32,37,115,58,32,37,115,10,0,0,0,84,95,82,79,84,65,84,69,88,0,0,0,0,0,0,0,110,32,62,61,32,48,0,0,102,0,0,0,97,0,0,0,108,0,0,0,115,0,0,0,101,0,0,0,0,0,0,0,105,110,32,109,97,116,52,0,102,111,114,0,0,0,0,0,105,110,118,97,108,105,100,32,117,112,118,97,108,117,101,32,105,110,100,101,120,0,0,0,32,12,10,13,9,11,0,0,105,110,118,97,108,105,100,32,114,101,112,108,97,99,101,109,101,110,116,32,118,97,108,117,101,32,40,97,32,37,115,41,0,0,0,0,0,0,0,0,117,112,118,97,108,117,101,115,0,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,116,97,110,0,0,0,0,0,84,95,84,82,65,78,83,76,65,84,69,88,0,0,0,0,105,109,103,45,62,109,95,100,97,116,97,45,62,109,95,114,101,102,99,111,117,110,116,32,62,32,48,0,0,0,0,0,102,97,116,97,108,32,101,114,114,111,114,32,45,32,115,99,97,110,110,101,114,32,105,110,112,117,116,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,0,0,0,0,0,105,110,95,86,105,101,119,0,102,97,108,115,101,0,0,0,118,97,114,121,105,110,103,32,118,101,99,52,0,0,0,0,62,117,0,0,0,0,0,0,98,97,115,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,0,115,116,114,105,110,103,47,102,117,110,99,116,105,111,110,47,116,97,98,108,101,32,101,120,112,101,99,116,101,100,0,0,37,115,32,101,120,112,101,99,116,101,100,32,40,116,111,32,99,108,111,115,101,32,37,115,32,97,116,32,108,105,110,101,32,37,100,41,0,0,0,0,116,97,110,104,0,0,0,0,99,111,117,110,116,32,62,61,32,48,0,0,0,0,0,0,64,37,115,0,0,0,0,0,60,0,0,0,0,0,0,0,110,116,101,114,109,0,0,0,84,95,66,71,67,79,76,79,82,0,0,0,0,0,0,0,87,65,82,78,0,0,0,0,76,0,0,0,0,0,0,0,116,0,0,0,114,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,97,116,116,114,105,98,117,116,101,32,118,101,99,52,0,0,101,110,100,0,0,0,0,0,102,117,108,108,32,117,115,101,114,100,97,116,97,32,101,120,112,101,99,116,101,100,44,32,103,111,116,32,108,105,103,104,116,32,117,115,101,114,100,97,116,97,0,0,0,0,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,95,95,99,97,108,108,0,0,94,36,42,43,63,46,40,91,37,45,0,0,0,0,0,0,40,102,111,114,32,115,116,101,112,41,0,0,0,0,0,0,101,114,114,111,114,32,108,111,97,100,105,110,103,32,109,111,100,117,108,101,32,39,37,115,39,32,102,114,111,109,32,102,105,108,101,32,39,37,115,39,58,10,9,37,115,0,0,0,115,113,114,116,0,0,0,0,40,117,110,115,105,103,110,101,100,41,110,32,60,61,32,40,117,110,115,105,103,110,101,100,41,67,111,117,110,116,40,41,0,0,0,0,0,0,0,0,61,115,116,100,105,110,0,0,105,110,95,86,101,114,116,101,120,0,0,0,0,0,0,0,46,46,47,0,0,0,0,0,84,95,67,79,76,79,82,0,116,114,117,101,0,0,0,0,105,110,32,118,101,99,52,0,101,108,115,101,105,102,0,0,116,97,105,108,32,99,97,108,108,0,0,0,0,0,0,0,118,97,108,117,101,32,101,120,112,101,99,116,101,100,0,0,95,95,99,111,110,99,97,116,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,112,97,116,116,101,114,110,32,99,97,112,116,117,114,101,0,40,102,111,114,32,108,105,109,105,116,41,0,0,0,0,0,10,9,110,111,32,109,111,100,117,108,101,32,39,37,115,39,32,105,110,32,102,105,108,101,32,39,37,115,39,0,0,0,115,105,110,0,0,0,0,0,115,116,114,0,0,0,0,0,98,117,102,102,101,114,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,0,0,105,110,95,78,111,114,109,97,108,0,0,0,0,0,0,0,36,117,110,100,101,102,105,110,101,100,0,0,0,0,0,0,118,97,114,121,105,110,103,32,118,101,99,51,0,0,0,0,37,115,58,32,0,0,0,0,101,108,115,101,0,0,0,0,99,111,117,110,116,0,0,0,120,112,99,97,108,108,0,0,95,95,108,101,0,0,0,0,109,97,108,102,111,114,109,101,100,32,112,97,116,116,101,114,110,32,40,109,105,115,115,105,110,103,32,97,114,103,117,109])
993.concat([101,110,116,115,32,116,111,32,39,37,37,98,39,41,0,0,40,102,111,114,32,105,110,100,101,120,41,0,0,0,0,0,47,0,0,0,0,0,0,0,115,105,110,104,0,0,0,0,40,42,118,97,114,97,114,103,41,0,0,0,0,0,0,0,46,46,47,46,46,47,46,46,47,46,46,47,115,114,99,47,108,111,108,47,98,97,115,101,47,115,116,114,105,110,103,46,104,0,0,0,0,0,0,0,100,101,114,101,102,101,114,101,110,99,105,110,103,32,110,117,108,108,112,116,114,32,101,110,116,105,116,121,10,0,0,0,116,114,121,105,110,103,32,116,111,32,112,111,112,32,97,32,110,111,110,101,120,105,115,116,101,110,116,32,99,97,109,101,114,97,32,102,114,111,109,32,116,104,101,32,115,99,101,110,101,0,0,0,0,0,0,0,97,116,116,114,105,98,117,116,101,32,118,101,99,51,0,0,100,111,0,0,0,0,0,0,108,105,110,101,0,0,0,0,116,121,112,101,0,0,0,0,95,95,108,116,0,0,0,0,109,97,108,102,111,114,109,101,100,32,112,97,116,116,101,114,110,32,40,109,105,115,115,105,110,103,32,39,93,39,41,0,40,102,111,114,32,99,111,110,116,114,111,108,41,0,0,0,76,85,65,95,78,79,69,78,86,0,0,0,0,0,0,0,114,97,110,100,111,109,115,101,101,100,0,0,0,0,0,0,40,42,116,101,109,112,111,114,97,114,121,41,0,0,0,0,84,95,69,78,68,0,0,0,37,112,0,0,0,0,0,0,108,108,0,0,0,0,0,0,105,110,32,118,101,99,51,0,110,111,32,118,101,114,116,101,120,32,115,104,97,100,101,114,32,102,111,117,110,100,226,128,166,32,115,111,114,114,121,44,32,73,226,128,153,109,32,103,111,110,110,97,32,99,114,97,115,104,32,110,111,119,46,10,0,0,0,0,0,0,0,0,98,114,101,97,107,0,0,0,116,111,115,116,114,105,110,103,0,0,0,0,0,0,0,0,95,95,117,110,109,0,0,0,109,97,108,102,111,114,109,101,100,32,112,97,116,116,101,114,110,32,40,101,110,100,115,32,119,105,116,104,32,39,37,37,39,41,0,0,0,0,0,0,40,102,111,114,32,115,116,97,116,101,41,0,0,0,0,0,1,0,0,0,0,0,0,0,114,97,110,100,111,109,0,0,76,117,97,0,0,0,0,0,37,115,10,0,0,0,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,32,40,37,115,41,0,0,0,0,0,39,37,115,39,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,44,32,101,120,112,101,99,116,105,110,103,32,37,115,32,111,114,32,37,115,32,111,114,32,37,115,32,111,114,32,37,115,0,0,0,0,0,103,101,116,104,111,111,107,0,114,117,110,110,105,110,103,0,118,101,114,116,46,103,108,115,108,0,0,0,0,0,0,0,99,111,110,115,116,97,110,116,115,0,0,0,0,0,0,0,98,110,111,116,0,0,0,0,105,111,115,95,98,97,115,101,58,58,99,108,101,97,114,0,95,86,69,82,83,73,79,78,0,0,0,0,0,0,0,0,108,111,111,112,32,105,110,32,103,101,116,116,97,98,108,101,0,0,0,0,0,0,0,0,98,111,111,108,101,97,110,0,112,97,99,107,0,0,0,0,116,97,98,108,101,32,111,118,101,114,102,108,111,119,0,0,98,121,116,101,0,0,0,0,60,103,111,116,111,32,37,115,62,32,97,116,32,108,105,110,101,32,37,100,32,106,117,109,112,115,32,105,110,116,111,32,116,104,101,32,115,99,111,112,101,32,111,102,32,108,111,99,97,108,32,39,37,115,39,0,118,97,114,121,105,110,103,32,118,101,99,50,0,0,0,0,40,110,117,108,108,41,0,0,97,110,100,0,0,0,0,0,99,97,108,108,0,0,0,0,115,101,97,114,99,104,101,114,115,0,0,0,0,0,0,0,116,111,110,117,109,98,101,114,0,0,0,0,0,0,0,0,95,95,112,111,119,0,0,0,105,110,118,97,108,105,100,32,99,97,112,116,117,114,101,32,105,110,100,101,120,32,37,37,37,100,0,0,0,0,0,0,40,102,111,114,32,103,101,110,101,114,97,116,111,114,41,0,97,98,115,0,0,0,0,0,59,1,59,0,0,0,0,0,114,97,100,0,0,0,0,0,112,97,99,107,97,103,101,0,109,97,105,110,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,121,105,101,108,100,32,97,99,114,111,115,115,32,109,101,116,97,109,101,116,104,111,100,47,67,45,99,97,108,108,32,98,111,117,110,100,97,114,121,0,0,0,0,0,0,99,111,110,99,97,116,101,110,97,116,101,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,39,37,115,39,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,44,32,101,120,112,101,99,116,105,110,103,32,37,115,32,111,114,32,37,115,32,111,114,32,37,115,0,0,0,97,116,116,114,105,98,117,116,101,32,118,101,99,50,0,0,37,115,32,110,101,97,114,32,37,115,0,0,0,0,0,0,95,95,109,111,100,101,0,0,95,95,109,111,100,0,0,0,109,105,115,115,105,110,103,32,39,91,39,32,97,102,116,101,114,32,39,37,37,102,39,32,105,110,32,112,97,116,116,101,114,110,0,0,0,0,0,0,39,61,39,32,111,114,32,39,105,110,39,32,101,120,112,101,99,116,101,100,0,0,0,0,59,59,0,0,0,0,0,0,112,111,119,0,0,0,0,0,61,63,0,0,0,0,0,0,76,111,108,74,115,0,0,0,115,116,100,58,58,98,97,100,95,99,97,115,116,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,44,32,101,120,112,101,99,116,105,110,103,32,37,115,32,111,114,32,37,115,0,115,116,97,99,107,32,116,114,97,99,101,98,97,99,107,58,0,0,0,0,0,0,0,0,105,110,32,118,101,99,50,0,37,115,58,37,100,58,32,37,115,0,0,0,0,0,0,0,115,101,108,101,99,116,0,0,95,95,100,105,118,0,0,0,117,110,102,105,110,105,115,104,101,100,32,99,97,112,116,117,114,101,0,0,0,0,0,0,108,97,98,101,108,32,39,37,115,39,32,97,108,114,101,97,100,121,32,100,101,102,105,110,101,100,32,111,110,32,108,105,110,101,32,37,100,0,0,0,109,111,100,117,108,101,32,39,37,115,39,32,110,111,116,32,102,111,117,110,100,58,37,115,0,0,0,0,0,0,0,0,109,111,100,102,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,44,32,101,120,112,101,99,116,105,110,103,32,37,115,0,0,0,0,0,0,0,46,47,108,111,108,47,98,97,115,101,47,97,114,114,97,121,46,104,0,0,0,0,0,0,35,118,101,114,115,105,111,110,32,49,50,48,0,0,0,0,99,104,117,110,107,32,104,97,115,32,116,111,111,32,109,97,110,121,32,108,105,110,101,115,0,0,0,0,0,0,0,0,95,72,75,69,89,0,0,0,114,97,119,115,101,116,0,0,95,95,109,117,108,0,0,0,105,110,118,97,108,105,100,32,99,97,112,116,117,114,101,32,105,110,100,101,120,0,0,0,117,110,101,120,112,101,99,116,101,100,32,115,121,109,98,111,108,0,0,0,0,0,0,0,39,112,97,99,107,97,103,101,46,115,101,97,114,99,104,101,114,115,39,32,109,117,115,116,32,98,101,32,97,32,116,97,98,108,101,0,0,0,0,0,109,105,110,0,0,0,0,0,61,91,67,93,0,0,0,0,46,46,47,46,46,47,46,46,47,46,46,47,115,114,99,47,108,111,108,47,98,97,115,101,47,97,114,114,97,121,46,104,0,0,0,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,44,32,117,110,101,120,112,101,99,116,101,100,32,37,115,0,0,0,0,0,105,109,97,103,101,47,105,109,97,103,101,46,99,112,112,0,102,97,116,97,108,32,102,108,101,120,32,115,99,97,110,110,101,114,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,101,110,100,32,111,102,32,98,117,102,102,101,114,32,109,105,115,115,101,100,0,67,0,0,0,0,0,0,0,35,118,101,114,115,105,111,110,32,49,51,48,0,0,0,0,0,0,0,0,0,0,0,0,105,110,95,73,110,118,95,77,111,100,101,108,86,105,101,119,0,0,0,0,0,0,0,0,117,110,102,105,110,105,115,104,101,100,32,108,111,110,103,32,99,111,109,109,101,110,116,0,108,101,118,101,108,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,114,97,119,103,101,116,0,0,95,95,115,117,98,0,0,0,116,111,111,32,109,97,110,121,32,99,97,112,116,117,114,101,115,0,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,97,114,103,117,109,101,110,116,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,39,37,99,39,0,0,0,0,114,101,113,117,105,114,101,0,109,97,120,0,0,0,0,0,109,101,116,97,109,101,116,104,111,100,0,0,0,0,0,0,116,111,107,101,110,0,0,0,69,97,115,121,77,101,115,104,32,115,121,110,116,97,120,32,101,114,114,111,114,32,108,105,110,101,32,37,100,32,99,111,108,117,109,110,32,37,100,58,32,37,115,10,0,0,0,0,67,111,117,110,116,40,41,32,62,32,48,0,0,0,0,0,100,101,98,117,103,0,0,0,99,114,101,97,116,101,0,0,73,78,70,79,0,0,0,0,118,101,99,116,111,114,0,0,117,110,102,105,110,105,115,104,101,100,32,108,111,110,103,32,115,116,114,105,110,103,0,0,110,105,108,32,111,114,32,116,97,98,108,101,32,101,120,112,101,99,116,101,100,0,0,0,114,97,119,108,101,110,0,0,95,95,97,100,100,0,0,0,114,101,115,117,108,116,105,110,103,32,115,116,114,105,110,103,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,37,115,32,40,108,105,109,105,116,32,105,115,32,37,100,41,32,105,110,32,37,115,0,112,114,101,108,111,97,100,0,108,111,103,0,0,0,0,0,102,111,114,32,105,116,101,114,97,116,111,114,0,0,0,0,117,95,67,111,108,111,114,50,0,0,0,0,0,0,0,0,37,115,58,37,100,58,32,0,46,46,47,46,46,47,115,114,99,47,0,0,0,0,0,0,40,110,101,119,32,69,114,114,111,114,41,46,115,116,97,99,107,0,0,0,0,0,0,0,67,108,101,97,110,117,112,58,32,112,111,112,112,105,110,103,0,0,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,111,114,32,101,120,112,114,101,115,115,105,111,110,32,116,111,111,32,99,111,109,112,108,101,120,0,0,0,0,0,0,44,32,0,0,0,0,0,0,97,114,115,104,105,102,116,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,114,101,110,100,101,114,105,110,103,32,119,105,110,100,111,119,58,32,37,115,10,0,0,0,0,0,37,46,48,76,102,0,0,0,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,116,114,97,99,101,98,97,99,107,0,0,0,0,0,0,0,114,97,119,101,113,117,97,108,0,0,0,0,0,0,0,0,95,95,101,113,0,0,0,0,102,117,110,99,116,105,111,110,32,97,116,32,108,105,110,101,32,37,100,0,0,0,0,0,95,80,82,69,76,79,65,68,0,0,0,0,0,0,0,0,108,100,101,120,112,0,0,0,105,111,115,116,114,101,97,109,0,0,0,0,0,0,0,0,117,95,67,111,108,111,114,49,0,0,0,0,0,0,0,0,83,108,0,0,0,0,0,0,95,71,0,0,0,0,0,0,67,108,101,97,110,117,112,58,32,100,105,115,99,97,114,100,105,110,103,32,108,111,111,107,97,104,101,97,100,0,0,0,37,46,49,52,103,0,0,0,109,111,110,101,121,95,103,101,116,32,101,114,114,111,114,0,100,101,99,105,109,97,108,32,101,115,99,97,112,101,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,0,0,115,101,116,117,112,118,97,108,117,101,0,0,0,0,0,0,116,114,121,105,110,103,32,116,111,32,97,99,99,101,115,115,32,110,111,110,45,101,120,105,115,116,101,110,116,32,98,105,116,115,0,0,0,0,0,0,95,95,108,101,110,0,0,0,115,117,98,0,0,0,0,0,109,97,105,110,32,102,117,110,99,116,105,111,110,0,0,0,108,111,97,100,101,100,0,0,102,114,101,120,112,0,0,0,105,110,95,82,97,110,100,111,109,0,0,0,0,0,0,0,110,111,32,118,97,108,117,101,0,0,0,0,0,0,0,0,98,97,100,32,97,114,103,117,109,101,110,116,32,35,37,100,32,116,111,32,39,37,115,39,32,40,37,115,41,0,0,0,99,111,110,99,97,116,0,0,116,105,99,107,101,114,46,99,112,112,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,105,110,118,97,108,105,100,32,102,114,97,109,101,98,117,102,102,101,114,32,115,116,97,116,117,115,32,48,120,37,120,10,0,0,0,0,69,114,114,111,114,58,32,112,111,112,112,105,110,103,0,0,116,97,98,108,101,32,105,110,100,101,120,32,105,115,32,110,105,108,0,0,0,0,0,0,10,91,118,101,114,116,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,86,101,114,116,101,120,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,78,111,114,109,97,108,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,105,110,95,67,111,108,111,114,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,77,111,100,101,108,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,80,114,111,106,59,10,117,110,105,102,111,114,109,32,109,97,116,51,32,105,110,95,78,111,114,109,97,108,77,97,116,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,52,32,118,101,114,116,101,120,32,61,32,105,110,95,77,111,100,101,108,86,105,101,119,32,42,32,118,101,99,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,59,10,32,32,32,32,118,101,99,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,78,111,114,109,97,108,77,97,116,32,42,32,105,110,95,78,111,114,109,97,108,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,118,101,114,116,101,120,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,114,111,106,32,42,32,118,101,114,116,101,120,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,73,110,118,95,86,105,101,119,59,10,10,117,110,105,102,111,114,109,32,118,101,99,52,32,117,95,76,105,103,104,116,115,91,56,32,42,32,50,93,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,112,97,115,115,95,67,111,108,111,114,32,42,32,108,101,110,103,116,104,40,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,84,78,111,114,109,97,108,41,41,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,51,32,105,110,95,86,101,114,116,101,120,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,105,110,95,78,111,114,109,97,108,32,58,32,78,79,82,77,65,76,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,86,105,101,119,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,80,114,111,106,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,51,120,51,32,105,110,95,78,111,114,109,97,108,77,97,116,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,32,32,32,32,102,108,111,97,116,52,32,101,121,101,32,61,32,109,117,108,40,105,110,95,77,111,100,101,108,86,105,101,119,44,32,102,108,111,97,116,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,41,59,10,32,32,32,32,102,108,111,97,116,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,109,117,108,40,105,110,95,78,111,114,109,97,108,77,97,116,44,32,105,110,95,78,111,114,109,97,108,41,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,101,121,101,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,35,105,102,100,101,102,32,95,88,66,79,88,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,46,97,98,103,114,59,10,35,101,108,115,101,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,35,101,110,100,105,102,10,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,105,110,95,80,114,111,106,44,32,101,121,101,41,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,102,108,111,97,116,51,32,105,110,95,76,105,103,104,116,68,105,114,32,61,32,102,108,111,97,116,51,40,48,46,51,44,32,48,46,51,44,32,48,46,55,41,59,10,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,102,108,111,97,116,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,32,97,109,98,105,101,110,116,95,109,117,108,32,61,32,48,46,53,59,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,48,46,50,53,44,32,48,46,50,44,32,48,46,51,53,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,76,105,103,104,116,68,105,114,41,59,32,47,42,32,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,86,101,114,116,101,120,32,45,32,108,105,103,104,116,112,111,115,41,59,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,102,108,111,97,116,51,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,32,61,32,97,109,98,105,101,110,116,95,99,111,108,111,114,59,10,32,32,32,32,102,108,111,97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,32,61,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,42,32,115,100,111,116,110,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,32,61,32,102,108,111,97,116,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,61,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,102,108,111,97,116,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,102,108,111,97,116,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,105,110,95,68,97,109,97,103,101,32,42,32,102,108,111,97,116,52,40,49,46,50,44,32,49,46,50,44,32,49,46,50,44,32,49,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,40,49,46,48,32,45,32,105,110,95,68,97,109,97,103,101,41,32,42,32,112,97,115,115,95,67,111,108,111,114,59,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,114,101,97,108,95,99,111,108,111,114,32,42,32,102,108,111,97,116,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,0,0,0,0,0,0,115,99,101,110,101,46,99,112,112,0,0,0,0,0,0,0,83,97,116,0,0,0,0,0,70,114,105,0,0,0,0,0,37,76,102,0,0,0,0,0,84,104,117,0,0,0,0,0,10,91,118,101,114,116,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,86,101,114,116,101,120,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,78,111,114,109,97,108,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,105,110,95,67,111,108,111,114,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,77,111,100,101,108,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,80,114,111,106,59,10,117,110,105,102,111,114,109,32,109,97,116,51,32,105,110,95,78,111,114,109,97,108,77,97,116,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,52,32,118,101,114,116,101,120,32,61,32,105,110,95,77,111,100,101,108,86,105,101,119,32,42,32,118,101,99,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,59,10,32,32,32,32,118,101,99,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,78,111,114,109,97,108,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,118,101,114,116,101,120,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,114,111,106,32,42,32,118,101,114,116,101,120,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,73,110,118,95,86,105,101,119,59,10,10,117,110,105,102,111,114,109,32,118,101,99,52,32,117,95,76,105,103,104,116,115,91,56,32,42,32,50,93,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,51,32,114,101,97,108,95,99,111,108,111,114,32,61,32,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,114,101,97,108,95,99,111,108,111,114,32,43,61,32,97,98,115,40,112,97,115,115,95,84,78,111,114,109,97,108,46,120,41,32,42,32,40,40,112,97,115,115,95,84,78,111,114,109,97,108,46,120,32,60,32,48,46,48,41,63,40,118,101,99,51,40,48,46,48,44,32,49,46,48,44,32,49,46,48,41,41,58,40,118,101,99,51,40,49,46,48,44,32,48,46,48,44,32,48,46,48,41,41,41,59,10,32,32,32,32,114,101,97,108,95,99,111,108,111,114,32,43,61,32,97,98,115,40,112,97,115,115,95,84,78,111,114,109,97,108,46,121,41,32,42,32,40,40,112,97,115,115,95,84,78,111,114,109,97,108,46,121,32,60,32,48,46,48,41,63,40,118,101,99,51,40,49,46,48,44,32,48,46,48,44,32,49,46,48,41,41,58,40,118,101,99,51,40,48,46,48,44,32,49,46,48,44,32,48,46,48,41,41,41,59,10,32,32,32,32,114,101,97,108,95,99,111,108,111,114,32,43,61,32,97,98,115,40,112,97,115,115,95,84,78,111,114,109,97,108,46,122,41,32,42,32,40,40,112,97,115,115,95,84,78,111,114,109,97,108,46,122,32,60,32,48,46,48,41,63,40,118,101,99,51,40,49,46,48,44,32,49,46,48,44,32,48,46,48,41,41,58,40,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,49,46,48,41,41,41,59,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,118,101,99,52,40,114,101,97,108,95,99,111,108,111,114,44,32,112,97,115,115,95,67,111,108,111,114,46,119,41,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,51,32,105,110,95,86,101,114,116,101,120,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,105,110,95,78,111,114,109,97,108,32,58,32,78,79,82,77,65,76,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,86,105,101,119,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,80,114,111,106,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,51,120,51,32,105,110,95,78,111,114,109,97,108,77,97,116,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,32,32,32,32,102,108,111,97,116,52,32,101,121,101,32,61,32,109,117,108,40,105,110,95,77,111,100,101,108,86,105,101,119,44,32,102,108,111,97,116,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,41,59,10,32,32,32,32,102,108,111,97,116,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,109,117,108,40,105,110,95,78,111,114,109,97,108,77,97,116,44,32,105,110,95,78,111,114,109,97,108,41,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,101,121,101,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,35,105,102,100,101,102,32,95,88,66,79,88,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,46,97,98,103,114,59,10,35,101,108,115,101,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,35,101,110,100,105,102,10,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,105,110,95,80,114,111,106,44,32,101,121,101,41,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,102,108,111,97,116,51,32,105,110,95,76,105,103,104,116,68,105,114,32,61,32,102,108,111,97,116,51,40,48,46,51,44,32,48,46,51,44,32,48,46,55,41,59,10,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,102,108,111,97,116,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,32,97,109,98,105,101,110,116,95,109,117,108,32,61,32,48,46,53,59,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,48,46,50,53,44,32,48,46,50,44,32,48,46,51,53,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,76,105,103,104,116,68,105,114,41,59,32,47,42,32,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,86,101,114,116,101,120,32,45,32,108,105,103,104,116,112,111,115,41,59,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,102,108,111,97,116,51,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,32,61,32,97,109,98,105,101,110,116,95,99,111,108,111,114,59,10,32,32,32,32,102,108,111,97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,32,61,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,42,32,115,100,111,116,110,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,32,61,32,102,108,111,97,116,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,61,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,102,108,111,97,116,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,102,108,111,97,116,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,105,110,95,68,97,109,97,103,101,32,42,32,102,108,111,97,116,52,40,49,46,50,44,32,49,46,50,44,32,49,46,50,44,32,49,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,40,49,46,48,32,45,32,105,110,95,68,97,109,97,103,101,41,32,42,32,112,97,115,115,95,67,111,108,111,114,59,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,114,101,97,108,95,99,111,108,111,114,32,42,32,102,108,111,97,116,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,0,0,0,0,0,0,105,110,118,97,108,105,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,0,115,101,116,109,101,116,97,116,97,98,108,101,0,0,0,0,119,105,100,116,104,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,0,0,112,99,97,108,108,0,0,0,114,101,118,101,114,115,101,0,105,116,101,109,115,32,105,110,32,97,32,99,111,110,115,116,114,117,99,116,111,114,0,0,95,76,79,65,68,69,68,0,102,109,111,100,0,0,0,0,109,101,116,104,111,100,0,0,87,101,100,0,0,0,0,0,84,117,101,0,0,0,0,0,105,110,95,82,101,115,111,108,117,116,105,111,110,0,0,0,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,0,0,0,0,0,0,0,77,111,110,0,0,0,0,0,10,91,118,101,114,116,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,86,101,114,116,101,120,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,78,111,114,109,97,108,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,105,110,95,67,111,108,111,114,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,77,111,100,101,108,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,80,114,111,106,59,10,117,110,105,102,111,114,109,32,109,97,116,51,32,105,110,95,78,111,114,109,97,108,77,97,116,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,52,32,118,101,114,116,101,120,32,61,32,105,110,95,77,111,100,101,108,86,105,101,119,32,42,32,118,101,99,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,59,10,32,32,32,32,118,101,99,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,78,111,114,109,97,108,77,97,116,32,42,32,105,110,95,78,111,114,109,97,108,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,118,101,114,116,101,120,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,118,101,99,52,40,49,46,48,44,32,49,46,48,44,32,49,46,48,44,32,105,110,95,67,111,108,111,114,46,119,41,59,47,47,59,10,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,114,111,106,32])
994.concat([42,32,118,101,114,116,101,120,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,73,110,118,95,86,105,101,119,59,10,10,117,110,105,102,111,114,109,32,118,101,99,52,32,117,95,76,105,103,104,116,115,91,56,32,42,32,50,93,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,118,101,99,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,118,101,99,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,118,101,99,51,32,97,109,98,105,101,110,116,32,61,32,118,101,99,51,40,48,46,49,44,32,48,46,49,44,32,48,46,49,41,59,10,32,32,32,32,118,101,99,51,32,115,112,101,99,117,108,97,114,32,61,32,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,118,101,99,51,32,100,105,102,102,117,115,101,32,61,32,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,10,32,32,32,32,47,42,32,76,105,103,104,116,32,112,114,101,99,97,108,99,117,108,97,116,105,111,110,115,32,42,47,10,32,32,32,32,118,101,99,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,10,32,32,32,32,47,42,32,65,112,112,108,121,32,108,105,103,104,116,105,110,103,32,42,47,10,32,32,32,32,102,111,114,32,40,105,110,116,32,105,32,61,32,48,59,32,105,32,60,32,56,59,32,105,43,43,41,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,118,101,99,52,32,112,111,115,32,61,32,117,95,76,105,103,104,116,115,91,105,32,42,32,50,93,59,10,32,32,32,32,32,32,32,32,118,101,99,52,32,99,111,108,111,114,32,61,32,117,95,76,105,103,104,116,115,91,105,32,42,32,50,32,43,32,49,93,59,10,32,32,32,32,32,32,32,32,118,101,99,51,32,115,44,32,114,59,10,10,32,32,32,32,32,32,32,32,105,102,32,40,112,111,115,46,119,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,47,42,32,80,111,105,110,116,32,108,105,103,104,116,32,45,45,32,110,111,32,97,116,116,101,110,117,97,116,105,111,110,32,121,101,116,32,42,47,10,32,32,32,32,32,32,32,32,32,32,32,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,40,105,110,95,86,105,101,119,32,42,32,112,111,115,41,46,120,121,122,32,45,32,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,101,108,115,101,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,47,42,32,68,105,114,101,99,116,105,111,110,97,108,32,108,105,103,104,116,32,42,47,10,32,32,32,32,32,32,32,32,32,32,32,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,111,115,46,120,121,122,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,114,32,61,32,114,101,102,108,101,99,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,32,32,32,32,32,32,32,32,125,10,10,32,32,32,32,32,32,32,32,102,108,111,97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,32,32,32,32,100,105,102,102,117,115,101,32,43,61,32,99,111,108,111,114,46,120,121,122,32,42,32,115,100,111,116,110,59,10,32,32,32,32,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,43,61,32,99,111,108,111,114,46,120,121,122,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,125,10,10,32,32,32,32,118,101,99,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,47,47,118,101,99,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,109,105,120,40,112,97,115,115,95,67,111,108,111,114,44,32,118,101,99,52,40,49,46,48,44,32,49,46,48,44,32,49,46,48,44,32,49,46,48,41,44,32,49,46,48,41,59,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,112,97,115,115,95,67,111,108,111,114,32,42,32,118,101,99,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,51,32,105,110,95,86,101,114,116,101,120,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,105,110,95,78,111,114,109,97,108,32,58,32,78,79,82,77,65,76,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,86,105,101,119,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,80,114,111,106,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,51,120,51,32,105,110,95,78,111,114,109,97,108,77,97,116,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,32,32,32,32,102,108,111,97,116,52,32,101,121,101,32,61,32,109,117,108,40,105,110,95,77,111,100,101,108,86,105,101,119,44,32,102,108,111,97,116,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,41,59,10,32,32,32,32,102,108,111,97,116,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,109,117,108,40,105,110,95,78,111,114,109,97,108,77,97,116,44,32,105,110,95,78,111,114,109,97,108,41,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,101,121,101,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,35,105,102,100,101,102,32,95,88,66,79,88,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,46,97,98,103,114,59,10,35,101,108,115,101,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,35,101,110,100,105,102,10,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,105,110,95,80,114,111,106,44,32,101,121,101,41,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,102,108,111,97,116,51,32,105,110,95,76,105,103,104,116,68,105,114,32,61,32,102,108,111,97,116,51,40,48,46,51,44,32,48,46,51,44,32,48,46,55,41,59,10,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,102,108,111,97,116,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,32,97,109,98,105,101,110,116,95,109,117,108,32,61,32,48,46,53,59,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,48,46,50,53,44,32,48,46,50,44,32,48,46,51,53,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,76,105,103,104,116,68,105,114,41,59,32,47,42,32,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,86,101,114,116,101,120,32,45,32,108,105,103,104,116,112,111,115,41,59,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,102,108,111,97,116,51,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,32,61,32,97,109,98,105,101,110,116,95,99,111,108,111,114,59,10,32,32,32,32,102,108,111,97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,32,61,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,42,32,115,100,111,116,110,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,32,61,32,102,108,111,97,116,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,61,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,102,108,111,97,116,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,102,108,111,97,116,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,105,110,95,68,97,109,97,103,101,32,42,32,102,108,111,97,116,52,40,49,46,50,44,32,49,46,50,44,32,49,46,50,44,32,49,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,40,49,46,48,32,45,32,105,110,95,68,97,109,97,103,101,41,32,42,32,112,97,115,115,95,67,111,108,111,114,59,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,114,101,97,108,95,99,111,108,111,114,32,42,32,102,108,111,97,116,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,0,0,0,0,0,0,0,83,117,110,0,0,0,0,0,83,97,116,117,114,100,97,121,0,0,0,0,0,0,0,0,69,114,114,111,114,58,32,100,105,115,99,97,114,100,105,110,103,0,0,0,0,0,0,0,70,114,105,100,97,121,0,0,60,37,115,62,32,97,116,32,108,105,110,101,32,37,100,32,110,111,116,32,105,110,115,105,100,101,32,97,32,108,111,111,112,0,0,0,0,0,0,0,10,91,118,101,114,116,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,86,101,114,116,101,120,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,78,111,114,109,97,108,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,105,110,95,67,111,108,111,114,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,105,110,95,84,101,120,67,111,111,114,100,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,77,111,100,101,108,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,80,114,111,106,59,10,117,110,105,102,111,114,109,32,109,97,116,51,32,105,110,95,78,111,114,109,97,108,77,97,116,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,84,101,120,67,111,111,114,100,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,52,32,118,101,114,116,101,120,32,61,32,105,110,95,77,111,100,101,108,86,105,101,119,32,42,32,118,101,99,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,59,10,32,32,32,32,118,101,99,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,78,111,114,109,97,108,77,97,116,32,42,32,105,110,95,78,111,114,109,97,108,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,118,101,114,116,101,120,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,32,32,32,32,112,97,115,115,95,84,101,120,67,111,111,114,100,32,61,32,105,110,95,84,101,120,67,111,111,114,100,59,10,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,114,111,106,32,42,32,118,101,114,116,101,120,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,73,110,118,95,86,105,101,119,59,10,10,117,110,105,102,111,114,109,32,118,101,99,52,32,117,95,76,105,103,104,116,115,91,56,32,42,32,50,93,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,118,97,114,121,105,110,103,32,118,101,99,50,32,112,97,115,115,95,84,101,120,67,111,111,114,100,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,102,108,111,97,116,32,109,111,100,101,32,61,32,48,46,48,59,10,32,32,32,32,105,102,32,40,109,111,100,101,32,61,61,32,48,46,48,41,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,118,101,99,52,40,109,111,100,40,112,97,115,115,95,84,101,120,67,111,111,114,100,46,120,44,32,49,46,48,41,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,48,46,49,44,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,109,111,100,40,112,97,115,115,95,84,101,120,67,111,111,114,100,46,121,44,32,49,46,48,41,44,32,49,46,48,41,59,10,32,32,32,32,125,10,32,32,32,32,101,108,115,101,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,102,108,111,97,116,32,99,111,108,32,61,32,40,40,109,111,100,40,109,111,100,101,44,32,50,46,48,41,32,61,61,32,49,46,48,41,63,40,109,111,100,40,112,97,115,115,95,84,101,120,67,111,111,114,100,46,120,44,32,49,46,48,41,41,58,40,109,111,100,40,112,97,115,115,95,84,101,120,67,111,111,114,100,46,121,44,32,49,46,48,41,41,41,59,10,32,32,32,32,32,32,32,32,105,102,32,40,109,111,100,101,32,61,61,32,49,46,48,32,124,124,32,109,111,100,101,32,61,61,32,50,46,48,41,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,40,99,111,108,32,62,32,49,46,48,47,51,46,48,41,32,103,108,95,70,114,97,103,67,111,108,111,114,46,114,32,61,32,48,46,48,59,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,115,101,32,103,108,95,70,114,97,103,67,111,108,111,114,46,114,32,61,32,109,105,110,40,99,111,108,44,32,49,46,48,47,51,46,48,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,40,99,111,108,32,62,32,50,46,48,47,51,46,48,41,32,103,108,95,70,114,97,103,67,111,108,111,114,46,103,32,61,32,48,46,48,59,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,115,101,32,103,108,95,70,114,97,103,67,111,108,111,114,46,103,32,61,32,109,105,110,40,109,97,120,40,99,111,108,44,32,49,46,48,47,51,46,48,41,32,45,32,49,46,48,47,51,46,48,44,32,49,46,48,47,51,46,48,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,98,32,61,32,109,105,110,40,109,97,120,40,99,111,108,44,32,50,46,48,47,51,46,48,41,32,45,32,50,46,48,47,51,46,48,44,32,49,46,48,47,51,46,48,41,59,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,101,108,115,101,32,105,102,32,40,109,111,100,101,32,61,61,32,51,46,48,32,124,124,32,109,111,100,101,32,61,61,32,52,46,48,41,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,40,99,111,108,32,62,32,48,46,53,41,32,103,108,95,70,114,97,103,67,111,108,111,114,46,114,32,61,32,48,46,48,59,10,32,32,32,32,32,32,32,32,32,32,32,32,101,108,115,101,32,103,108,95,70,114,97,103,67,111,108,111,114,46,114,32,61,32,109,105,110,40,99,111,108,44,32,48,46,53,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,103,32,61,32,109,105,110,40,109,97,120,40,99,111,108,44,32,48,46,53,41,32,45,32,48,46,53,44,32,48,46,53,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,98,32,61,32,48,46,49,59,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,101,108,115,101,32,105,102,32,40,109,111,100,101,32,61,61,32,53,46,48,32,124,124,32,109,111,100,101,32,61,61,32,54,46,48,41,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,114,32,61,32,99,111,108,59,10,32,32,32,32,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,103,32,61,32,48,46,49,59,10,32,32,32,32,32,32,32,32,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,98,32,61,32,48,46,49,59,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,125,10,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,46,97,32,61,32,49,46,48,59,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,42,61,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,47,47,61,32,112,97,115,115,95,67,111,108,111,114,32,42,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,108,101,110,103,116,104,40,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,84,101,120,67,111,111,114,100,41,41,32,42,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,108,101,110,103,116,104,40,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,67,111,108,111,114,46,120,121,122,41,41,32,42,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,108,101,110,103,116,104,40,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,84,78,111,114,109,97,108,41,41,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,51,32,105,110,95,86,101,114,116,101,120,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,105,110,95,78,111,114,109,97,108,32,58,32,78,79,82,77,65,76,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,86,105,101,119,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,80,114,111,106,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,51,120,51,32,105,110,95,78,111,114,109,97,108,77,97,116,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,32,32,32,32,102,108,111,97,116,52,32,101,121,101,32,61,32,109,117,108,40,105,110,95,77,111,100,101,108,86,105,101,119,44,32,102,108,111,97,116,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,41,59,10,32,32,32,32,102,108,111,97,116,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,109,117,108,40,105,110,95,78,111,114,109,97,108,77,97,116,44,32,105,110,95,78,111,114,109,97,108,41,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,101,121,101,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,35,105,102,100,101,102,32,95,88,66,79,88,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,46,97,98,103,114,59,10,35,101,108,115,101,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,35,101,110,100,105,102,10,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,105,110,95,80,114,111,106,44,32,101,121,101,41,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,102,108,111,97,116,51,32,105,110,95,76,105,103,104,116,68,105,114,32,61,32,102,108,111,97,116,51,40,48,46,51,44,32,48,46,51,44,32,48,46,55,41,59,10,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,102,108,111,97,116,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,32,97,109,98,105,101,110,116,95,109,117,108,32,61,32,48,46,53,59,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,48,46,50,53,44,32,48,46,50,44,32,48,46,51,53,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,76,105,103,104,116,68,105,114,41,59,32,47,42,32,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,86,101,114,116,101,120,32,45,32,108,105,103,104,116,112,111,115,41,59,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,102,108,111,97,116,51,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,32,61,32,97,109,98,105,101,110,116,95,99,111,108,111,114,59,10,32,32,32,32,102,108,111,97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,32,61,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,42,32,115,100,111,116,110,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,32,61,32,102,108,111,97,116,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,61,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,102,108,111,97,116,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,102,108,111,97,116,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,105,110,95,68,97,109,97,103,101,32,42,32,102,108,111,97,116,52,40,49,46,50,44,32,49,46,50,44,32,49,46,50,44,32,49,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,40,49,46,48,32,45,32,105,110,95,68,97,109,97,103,101,41,32,42,32,112,97,115,115,95,67,111,108,111,114,59,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,114,101,97,108,95,99,111,108,111,114,32,42,32,102,108,111,97,116,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,0,0,0,0,0,84,104,117,114,115,100,97,121,0,0,0,0,0,0,0,0,87,101,100,110,101,115,100,97,121,0,0,0,0,0,0,0,84,117,101,115,100,97,121,0,117,112,112,101,114,0,0,0,10,91,118,101,114,116,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,86,101,114,116,101,120,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,51,32,105,110,95,78,111,114,109,97,108,59,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,105,110,95,67,111,108,111,114,59,10,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,77,111,100,101,108,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,80,114,111,106,59,10,117,110,105,102,111,114,109,32,109,97,116,51,32,105,110,95,78,111,114,109,97,108,77,97,116,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,118,101,99,52,32,118,101,114,116,101,120,32,61,32,105,110,95,77,111,100,101,108,86,105,101,119,32,42,32,118,101,99,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,59,10,32,32,32,32,118,101,99,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,78,111,114,109,97,108,77,97,116,32,42,32,105,110,95,78,111,114,109,97,108,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,118,101,114,116,101,120,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,10,32,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,105,110,95,80,114,111,106,32,42,32,118,101,114,116,101,120,59,10,125,10,10,91,102,114,97,103,46,103,108,115,108,93,10,35,118,101,114,115,105,111,110,32,49,50,48,10,10,35,105,102,32,100,101,102,105,110,101,100,32,71,76,95,69,83,10,112,114,101,99,105,115,105,111,110,32,104,105,103,104,112,32,102,108,111,97,116,59,10,35,101,110,100,105,102,10,10,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,86,105,101,119,59,10,117,110,105,102,111,114,109,32,109,97,116,52,32,105,110,95,73,110,118,95,86,105,101,119,59,10,10,117,110,105,102,111,114,109,32,118,101,99,52,32,117,95,76,105,103,104,116,115,91,56,32,42,32,50,93,59,10,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,86,101,114,116,101,120,59,32,47,42,32,86,105,101,119,32,115,112,97,99,101,32,42,47,10,118,97,114,121,105,110,103,32,118,101,99,51,32,112,97,115,115,95,84,78,111,114,109,97,108,59,10,118,97,114,121,105,110,103,32,118,101,99,52,32,112,97,115,115,95,67,111,108,111,114,59,10,10,35,105,102,32,48,10,47,47,67,111,115,40,52,53,41,32,61,32,48,46,55,48,55,49,48,54,55,56,49,49,56,10,47,47,49,46,48,32,45,32,67,111,115,40,52,53,41,32,61,32,48,46,50,57,50,56,57,51,50,49,56,56,49,10,10,99,111,110,115,116,32,102,108,111,97,116,32,99,111,115,95,52,53,32,32,32,32,32,32,61,32,48,46,55,48,55,49,48,54,55,56,49,49,56,59,10,99,111,110,115,116,32,102,108,111,97,116,32,105,110,118,95,99,111,115,95,52,53,32,32,61,32,48,46,50,57,50,56,57,51,50,49,56,56,49,59,10,10,47,47,67,117,98,101,32,76,105,103,104,116,10,118,101,99,52,32,105,110,95,76,105,103,104,116,51,95,80,111,115,32,61,32,118,101,99,52,40,45,49,48,46,48,44,32,49,48,46,48,44,32,53,46,48,44,32,49,46,48,41,59,10,118,101,99,51,32,105,110,95,76,105,103,104,116,51,95,83,105,122,101,95,73,110,110,101,114,32,61,32,118,101,99,51,40,51,46,48,44,32,49,46,48,44,32,51,46,48,41,59,10,118,101,99,51,32,105,110,95,76,105,103,104,116,51,95,83,105,122,101,95,79,117,116,101,114,32,61,32,118,101,99,51,40,49,53,46,48,44,32,49,53,46,48,44,32,49,53,46,48,41,59,10,118,101,99,51,32,105,110,95,76,105,103,104,116,51,95,100,105,102,102,117,115,101,32,61,32,118,101,99,51,40,48,46,52,44,32,49,46,48,44,32,48,46,52,41,59,10,35,101,110,100,105,102,10,10,118,111,105,100,32,109,97,105,110,40,118,111,105,100,41,10,123,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,118,101,99,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,118,101,99,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,118,101,99,51,32,97,109,98,105,101,110,116,32,61,32,118,101,99,51,40,48,46,49,44,32,48,46,49,44,32,48,46,49,41,59,10,32,32,32,32,118,101,99,51,32,115,112,101,99,117,108,97,114,32,61,32,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,118,101,99,51,32,100,105,102,102,117,115,101,32,61,32,118,101,99,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,10,32,32,32,32,47,42,32,76,105,103,104,116,32,112,114,101,99,97,108,99,117,108,97,116,105,111,110,115,32,42,47,10,32,32,32,32,118,101,99,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,10,32,32,32,32,47,42,32,65,112,112,108,121,32,108,105,103,104,116,105,110,103,32,42,47,10,32,32,32,32,102,111,114,32,40,105,110,116,32,105,32,61,32,48,59,32,105,32,60,32,56,59,32,105,43,43,41,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,118,101,99,52,32,112,111,115,32,61,32,117,95,76,105,103,104,116,115,91,105,32,42,32,50,93,59,10,32,32,32,32,32,32,32,32,118,101,99,52,32,99,111,108,111,114,32,61,32,117,95,76,105,103,104,116,115,91,105,32,42,32,50,32,43,32,49,93,59,10,32,32,32,32,32,32,32,32,118,101,99,51,32,115,44,32,114,59,10,10,32,32,32,32,32,32,32,32,105,102,32,40,112,111,115,46,119,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,47,42,32,80,111,105,110,116,32,108,105,103,104,116,32,45,45,32,110,111,32,97,116,116,101,110,117,97,116,105,111,110,32,121,101,116,32,42,47,10,32,32,32,32,32,32,32,32,32,32,32,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,40,105,110,95,86,105,101,119,32,42,32,112,111,115,41,46,120,121,122,32,45,32,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,101,108,115,101,10,32,32,32,32,32,32,32,32,123,10,32,32,32,32,32,32,32,32,32,32,32,32,47,42,32,68,105,114,101,99,116,105,111,110,97,108,32,108,105,103,104,116,32,42,47,10,32,32,32,32,32,32,32,32,32,32,32,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,111,115,46,120,121,122,41,59,10,32,32,32,32,32,32,32,32,32,32,32,32,114,32,61,32,114,101,102,108,101,99,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,32,32,32,32,32,32,32,32,125,10,10,32,32,32,32,32,32,32,32,102,108,111])
995.concat([97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,32,32,32,32,100,105,102,102,117,115,101,32,43,61,32,99,111,108,111,114,46,120,121,122,32,42,32,115,100,111,116,110,59,10,32,32,32,32,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,43,61,32,99,111,108,111,114,46,120,121,122,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,125,10,10,35,105,102,32,48,10,32,32,32,32,47,47,76,105,103,104,116,32,99,97,108,99,117,108,97,116,105,111,110,32,102,111,114,32,99,117,98,101,32,108,105,103,104,116,10,32,32,32,32,118,101,99,51,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,61,32,118,101,99,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,32,32,32,32,118,101,99,51,32,76,111,99,97,108,95,86,101,114,116,101,120,32,61,32,40,105,110,95,73,110,118,95,86,105,101,119,32,42,32,112,97,115,115,95,86,101,114,116,101,120,41,46,120,121,122,32,45,32,40,105,110,95,76,105,103,104,116,51,95,80,111,115,41,46,120,121,122,59,10,32,32,32,32,118,101,99,51,32,80,114,111,106,95,86,101,114,116,101,120,32,61,32,99,108,97,109,112,40,76,111,99,97,108,95,86,101,114,116,101,120,46,120,121,122,44,32,45,105,110,95,76,105,103,104,116,51,95,83,105,122,101,95,73,110,110,101,114,44,32,105,110,95,76,105,103,104,116,51,95,83,105,122,101,95,73,110,110,101,114,41,59,10,32,32,32,32,118,101,99,51,32,110,101,119,95,76,105,103,104,116,68,105,114,32,61,32,76,111,99,97,108,95,86,101,114,116,101,120,32,45,32,80,114,111,106,95,86,101,114,116,101,120,59,10,10,32,32,32,32,118,101,99,51,32,108,105,103,104,116,95,114,97,100,105,117,115,32,61,32,109,97,120,40,118,101,99,51,40,48,46,48,44,48,46,48,44,48,46,48,41,44,32,118,101,99,51,40,49,46,48,44,49,46,48,44,49,46,48,41,32,45,32,97,98,115,40,110,101,119,95,76,105,103,104,116,68,105,114,32,47,32,105,110,95,76,105,103,104,116,51,95,83,105,122,101,95,79,117,116,101,114,41,41,59,10,32,32,32,32,102,108,111,97,116,32,108,105,103,104,116,95,114,97,100,105,117,115,95,109,111,100,32,61,32,109,105,110,40,108,105,103,104,116,95,114,97,100,105,117,115,46,120,44,32,109,105,110,40,108,105,103,104,116,95,114,97,100,105,117,115,46,121,44,32,108,105,103,104,116,95,114,97,100,105,117,115,46,122,41,41,59,10,10,32,32,32,32,105,102,32,40,108,101,110,103,116,104,40,110,101,119,95,76,105,103,104,116,68,105,114,41,32,61,61,32,48,46,48,41,10,32,32,32,32,32,32,32,32,115,100,111,116,110,32,61,32,49,46,48,59,10,32,32,32,32,101,108,115,101,10,32,32,32,32,123,10,32,32,32,32,32,32,32,32,110,101,119,95,76,105,103,104,116,68,105,114,32,61,32,110,111,114,109,97,108,105,122,101,40,40,105,110,95,86,105,101,119,32,42,32,118,101,99,52,40,80,114,111,106,95,86,101,114,116,101,120,32,43,32,105,110,95,76,105,103,104,116,51,95,80,111,115,46,120,121,122,44,49,46,48,41,41,46,120,121,122,32,45,32,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,32,32,32,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,110,101,119,95,76,105,103,104,116,68,105,114,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,32,32,32,32,114,32,61,32,114,101,102,108,101,99,116,40,45,110,101,119,95,76,105,103,104,116,68,105,114,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,32,32,32,32,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,32,38,38,32,108,105,103,104,116,95,114,97,100,105,117,115,95,109,111,100,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,43,61,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,42,32,109,105,110,40,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,44,32,108,105,103,104,116,95,114,97,100,105,117,115,95,109,111,100,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,125,10,32,32,32,32,100,105,102,102,117,115,101,32,43,61,32,105,110,95,76,105,103,104,116,51,95,100,105,102,102,117,115,101,32,42,32,109,105,110,40,115,100,111,116,110,44,32,108,105,103,104,116,95,114,97,100,105,117,115,95,109,111,100,41,59,10,32,32,32,32,47,47,45,45,45,45,45,45,45,45,45,45,10,35,101,110,100,105,102,10,10,32,32,32,32,118,101,99,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,118,101,99,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,109,105,120,40,112,97,115,115,95,67,111,108,111,114,44,32,118,101,99,52,40,49,46,50,44,32,49,46,50,44,32,49,46,50,44,32,49,46,48,41,44,32,105,110,95,68,97,109,97,103,101,41,59,10,32,32,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,114,101,97,108,95,99,111,108,111,114,32,42,32,118,101,99,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,91,118,101,114,116,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,51,32,105,110,95,86,101,114,116,101,120,32,58,32,80,79,83,73,84,73,79,78,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,105,110,95,78,111,114,109,97,108,32,58,32,78,79,82,77,65,76,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,105,110,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,86,105,101,119,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,77,111,100,101,108,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,52,120,52,32,105,110,95,80,114,111,106,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,51,120,51,32,105,110,95,78,111,114,109,97,108,77,97,116,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,80,111,115,105,116,105,111,110,32,58,32,80,79,83,73,84,73,79,78,41,10,123,10,32,32,32,32,102,108,111,97,116,52,32,101,121,101,32,61,32,109,117,108,40,105,110,95,77,111,100,101,108,86,105,101,119,44,32,102,108,111,97,116,52,40,105,110,95,86,101,114,116,101,120,44,32,49,46,48,41,41,59,10,32,32,32,32,102,108,111,97,116,51,32,116,110,111,114,109,32,61,32,110,111,114,109,97,108,105,122,101,40,109,117,108,40,105,110,95,78,111,114,109,97,108,77,97,116,44,32,105,110,95,78,111,114,109,97,108,41,41,59,10,10,32,32,32,32,112,97,115,115,95,86,101,114,116,101,120,32,61,32,101,121,101,59,10,32,32,32,32,112,97,115,115,95,84,78,111,114,109,97,108,32,61,32,116,110,111,114,109,59,10,35,105,102,100,101,102,32,95,88,66,79,88,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,46,97,98,103,114,59,10,35,101,108,115,101,10,32,32,32,32,112,97,115,115,95,67,111,108,111,114,32,61,32,105,110,95,67,111,108,111,114,59,10,35,101,110,100,105,102,10,10,32,32,32,32,111,117,116,95,80,111,115,105,116,105,111,110,32,61,32,109,117,108,40,105,110,95,80,114,111,106,44,32,101,121,101,41,59,10,125,10,10,91,102,114,97,103,46,104,108,115,108,93,10,10,118,111,105,100,32,109,97,105,110,40,102,108,111,97,116,52,32,112,97,115,115,95,86,101,114,116,101,120,32,58,32,84,69,88,67,79,79,82,68,48,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,51,32,112,97,115,115,95,84,78,111,114,109,97,108,32,58,32,84,69,88,67,79,79,82,68,49,44,10,32,32,32,32,32,32,32,32,32,32,102,108,111,97,116,52,32,112,97,115,115,95,67,111,108,111,114,32,58,32,67,79,76,79,82,44,10,32,32,32,32,32,32,32,32,32,32,117,110,105,102,111,114,109,32,102,108,111,97,116,32,105,110,95,68,97,109,97,103,101,44,10,32,32,32,32,32,32,32,32,32,32,111,117,116,32,102,108,111,97,116,52,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,58,32,67,79,76,79,82,41,10,123,10,32,32,32,32,102,108,111,97,116,51,32,105,110,95,76,105,103,104,116,68,105,114,32,61,32,102,108,111,97,116,51,40,48,46,51,44,32,48,46,51,44,32,48,46,55,41,59,10,10,32,32,32,32,47,42,32,77,97,116,101,114,105,97,108,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,32,61,32,102,108,111,97,116,51,40,48,46,56,44,32,48,46,55,53,44,32,48,46,52,41,59,10,32,32,32,32,102,108,111,97,116,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,32,61,32,54,48,46,48,59,10,10,32,32,32,32,47,42,32,87,111,114,108,100,32,112,114,111,112,101,114,116,105,101,115,32,42,47,10,32,32,32,32,102,108,111,97,116,32,97,109,98,105,101,110,116,95,109,117,108,32,61,32,48,46,53,59,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,48,46,50,53,44,32,48,46,50,44,32,48,46,51,53,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,61,32,102,108,111,97,116,51,40,49,46,48,44,32,49,46,48,44,32,48,46,54,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,115,32,61,32,110,111,114,109,97,108,105,122,101,40,105,110,95,76,105,103,104,116,68,105,114,41,59,32,47,42,32,110,111,114,109,97,108,105,122,101,40,112,97,115,115,95,86,101,114,116,101,120,32,45,32,108,105,103,104,116,112,111,115,41,59,32,42,47,10,32,32,32,32,102,108,111,97,116,51,32,118,32,61,32,110,111,114,109,97,108,105,122,101,40,45,112,97,115,115,95,86,101,114,116,101,120,46,120,121,122,41,59,10,32,32,32,32,102,108,111,97,116,51,32,114,32,61,32,114,101,102,108,101,99,116,40,45,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,59,10,10,32,32,32,32,102,108,111,97,116,51,32,97,109,98,105,101,110,116,32,61,32,97,109,98,105,101,110,116,95,99,111,108,111,114,59,10,32,32,32,32,102,108,111,97,116,32,115,100,111,116,110,32,61,32,109,97,120,40,100,111,116,40,115,44,32,112,97,115,115,95,84,78,111,114,109,97,108,41,44,32,48,46,48,41,59,10,32,32,32,32,102,108,111,97,116,51,32,100,105,102,102,117,115,101,32,61,32,100,105,102,102,117,115,101,95,99,111,108,111,114,32,42,32,115,100,111,116,110,59,10,32,32,32,32,102,108,111,97,116,51,32,115,112,101,99,117,108,97,114,32,61,32,102,108,111,97,116,51,40,48,46,48,44,32,48,46,48,44,32,48,46,48,41,59,10,32,32,32,32,105,102,32,40,115,100,111,116,110,32,62,32,48,46,48,41,10,32,32,32,32,32,32,32,32,115,112,101,99,117,108,97,114,32,61,32,115,112,101,99,117,108,97,114,95,99,111,108,111,114,32,42,32,115,112,101,99,117,108,97,114,95,114,101,102,108,101,99,116,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,42,32,112,111,119,40,109,97,120,40,100,111,116,40,114,44,32,118,41,44,32,48,46,48,41,44,32,115,112,101,99,117,108,97,114,95,112,111,119,101,114,41,59,10,32,32,32,32,102,108,111,97,116,51,32,108,105,103,104,116,32,61,32,97,109,98,105,101,110,116,32,43,32,100,105,102,102,117,115,101,32,43,32,115,112,101,99,117,108,97,114,59,10,10,32,32,32,32,102,108,111,97,116,52,32,114,101,97,108,95,99,111,108,111,114,32,61,32,105,110,95,68,97,109,97,103,101,32,42,32,102,108,111,97,116,52,40,49,46,50,44,32,49,46,50,44,32,49,46,50,44,32,49,46,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,43,32,40,49,46,48,32,45,32,105,110,95,68,97,109,97,103,101,41,32,42,32,112,97,115,115,95,67,111,108,111,114,59,10,32,32,32,32,111,117,116,95,70,114,97,103,67,111,108,111,114,32,61,32,114,101,97,108,95,99,111,108,111,114,32,42,32,102,108,111,97,116,52,40,108,105,103,104,116,44,32,49,46,48,41,59,10,125,10,10,0,0,35,118,101,114,115,105,111,110,0,0,0,0,0,0,0,0,77,111,110,100,97,121,0,0,117,110,102,105,110,105,115,104,101,100,32,115,116,114,105,110,103,0,0,0,0,0,0,0,102,114,97,103,46,103,108,115,108,0,0,0,0,0,0,0,115,101,116,108,111,99,97,108,0,0,0,0,0,0,0,0,100,101,97,100,0,0,0,0,102,105,101,108,100,32,99,97,110,110,111,116,32,98,101,32,110,101,103,97,116,105,118,101,0,0,0,0,0,0,0,0,112,97,105,114,115,0,0,0,95,95,103,99,0,0,0,0,114,101,112,0,0,0,0,0,102,117,110,99,116,105,111,110,115,0,0,0,0,0,0,0,99,111,110,102,105,103,0,0,102,108,111,111,114,0,0,0,99,111,110,115,116,97,110,116,0,0,0,0,0,0,0,0,83,117,110,100,97,121,0,0,58,32,0,0,0,0,0,0,110,78,0,0,0,0,0,0,105,110,95,71,108,121,112,104,115,0,0,0,0,0,0,0,99,97,108,108,105,110,103,32,39,37,115,39,32,111,110,32,98,97,100,32,115,101,108,102,0,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,86,101,114,116,101,120,32,83,116,114,101,97,109,32,115,101,116,117,112,32,105,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,37,115,44,32,102,101,101,108,32,102,114,101,101,32,116,111,32,100,111,32,115,111,46,10,0,99,104,97,114,40,37,100,41,0,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,0,0,0,0,45,62,32,36,36,32,61,0,103,101,116,117,115,101,114,118,97,108,117,101,0,0,0,0,114,101,115,117,109,101,0,0,46,47,108,111,108,47,98,97,115,101,47,115,116,114,105,110,103,46,104,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,0,0,0,0,99,111,110,115,116,114,117,99,116,111,114,32,116,111,111,32,108,111,110,103,0,0,0,0,95,67,76,73,66,83,0,0,98,97,110,100,0,0,0,0,117,110,115,112,101,99,105,102,105,101,100,32,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,37,115,32,40,108,105,109,105,116,32,105,115,32,37,100,41,0,0,0,0,0,0,0,32,61,0,0,0,0,0,0,76,117,97,32,53,46,50,0,105,110,100,101,120,0,0,0,98,105,110,97,114,121,32,115,116,114,105,110,103,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,0,0,0,0,32,32,32,36,0,0,0,0,103,112,117,47,102,114,97,109,101,98,117,102,102,101,114,46,99,112,112,0,0,0,0,0,105,110,115,101,114,116,0,0,116,97,98,108,101,32,105,110,100,101,120,32,105,115,32,78,97,78,0,0,0,0,0,0,105,110,95,67,111,108,111,114,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,41,58,0,0,0,0,0,0,110,111,32,118,105,115,105,98,108,101,32,108,97,98,101,108,32,39,37,115,39,32,102,111,114,32,60,103,111,116,111,62,32,97,116,32,108,105,110,101,32,37,100,0,0,0,0,0,116,114,105,101,100,32,116,111,32,113,117,101,114,121,32,105,110,118,97,108,105,100,32,97,116,116,114,105,98,117,116,101,58,32,37,115,10,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,117,0,0,0,114,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,120,88,0,0,0,0,0,0,32,40,108,105,110,101,32,0,108,101,120,105,99,97,108,32,101,108,101,109,101,110,116,32,116,111,111,32,108,111,110,103,0,0,0,0,0,0,0,0,112,105,0,0,0,0,0,0,115,101,116,104,111,111,107,0,110,111,114,109,97,108,0,0,114,115,104,105,102,116,0,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,101,114,114,111,114,58,32,98,108,111,99,107,32,116,111,111,32,98,105,103,0,0,110,101,120,116,0,0,0,0,95,95,110,101,119,105,110,100,101,120,0,0,0,0,0,0,105,110,118,97,108,105,100,32,118,97,108,117,101,32,40,37,115,41,32,97,116,32,105,110,100,101,120,32,37,100,32,105,110,32,116,97,98,108,101,32,102,111,114,32,39,99,111,110,99,97,116,39,0,0,0,0,109,97,116,99,104,0,0,0,108,111,99,97,108,32,118,97,114,105,97,98,108,101,115,0,70,0,0,0,114,0,0,0,105,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,104,117,103,101,0,0,0,0,47,10,59,10,63,10,33,10,45,10,0,0,0,0,0,0,101,120,112,0,0,0,0,0,117,112,118,97,108,117,101,0,82,101,100,117,99,105,110,103,32,115,116,97,99,107,32,98,121,32,114,117,108,101,32,0,101,114,114,111,114,32,105,110,32,95,95,103,99,32,109,101,116,97,109,101,116,104,111,100,32,40,37,115,41,0,0,0,67,32,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,37,115,32,97,32,37,115,32,118,97,108,117,101,0,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,114,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,110,111,119,0,0,0,0,0,0,0,117,95,84,105,109,101,0,0,87,0,0,0,101,0,0,0,100,0,0,0,110,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,110,111,32,109,101,115,115,97,103,101,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,97,116,32,37,115,58,37,100,58,32,86,101,114,116,101,120,32,68,101,99,108,97,114,97,116,105,111,110,32,115,101,116,117,112,32,105,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,102,111,114,32,37,115,44,32,102,101,101,108,32,102,114,101,101,32,116,111,32,100,111,32,115,111,46,10,0,0,0,0,97,114,103,115,49,48,0,0,105,110,32,69,97,115,121,77,101,115,104,70,108,101,120,76,101,120,101,114,58,58,121,121,108,101,120,40,41,32,33,0,77,0,0,0,111,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,97,114,103,115,57,0,0,0,83,104,105,102,116,105,110,103,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,97,114,103,115,56,0,0,0,97,114,103,115,55,0,0,0,68,101,99,0,0,0,0,0,97,114,103,115,54,0,0,0,105,110,95,84,101,120,83,105,122,101,0,0,0,0,0,0,78,111,118,0,0,0,0,0,97,114,103,115,53,0,0,0,108,105,110,107,32,108,111,103,32,102,111,114,32,112,114,111,103,114,97,109,58,32,37,115,0,0,0,0,0,0,0,0,79,99,116,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,37,115,32,37,115,32,39,37,115,39,32,40,97,32,37,115,32,118,97,108,117,101,41,0,0,0,0,0,0,97,114,103,115,52,0,0,0,109,97,108,102,111,114,109,101,100,32,110,117,109,98,101,114,0,0,0,0,0,0,0,0,115,101,116,117,115,101,114,118,97,108,117,101,0,0,0,0,115,117,115,112,101,110,100,101,100,0,0,0,0,0,0,0,114,114,111,116,97,116,101,0,108,111,97,100,0,0,0,0,105,110,99,111,109,112,97,116,105,98,108,101,0,0,0,0,95,95,105,110,100,101,120,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,116,111,32,39,105,110,115,101,114,116,39,0,0,0,60,110,97,109,101,62,32,111,114,32,39,46,46,46,39,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,83,101,112,0,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,63,46,115,111,59,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,108,111,97,100,97,108,108,46,115,111,59,46,47,63,46,115,111,0,0,0,0,100,101,103,0,0,0,0,0,102,105,101,108,100,0,0,0,97,114,103,115,51,0,0,0,65,117,103,0,0,0,0,0,97,114,103,115,50,0,0,0,112,101,111,112,108,101,47,115,97,109,47,112,114,105,118,97,116,101,47,108,111,108,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,49,50,51,52,53,54,55,56,57,0,0,0,0,0,0,48,49,50,51,52,53,54,55,56,57,0,0,0,0,0,0,37,0,0,0,89,0,0,0,45,0,0,0,37,0,0,0,109,0,0,0,45,0,0,0,37,0,0,0,100,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,72,58,37,77,58,37,83,37,72,58,37,77,0,0,0,37,73,58,37,77,58,37,83,32,37,112,0,0,0,0,0,37,89,45,37,109,45,37,100,37,109,47,37,100,47,37,121,37,72,58,37,77,58,37,83,37,0,0,0,0,0,0,0,37,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,7,0,0,0,9,0,0,0,8,0,0,0,6,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,9,0,0,0,7,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,8,0,0,0,11,0,0,0,10,0,0,0,9,0,0,0,0,0,0,0,1,0,0,0,7,0,0,0,6,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,3,0,0,0,2,0,0,0,8,0,0,0,9,0,0,0,4,0,0,0,3,0,0,0,9,0,0,0,10,0,0,0,5,0,0,0,4,0,0,0,10,0,0,0,11,0,0,0,2,0,0,0,5,0,0,0,11,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,18,0,0,0,17,0,0,0,4,0,0,0,7,0,0,0,17,0,0,0,16,0,0,0,8,0,0,0,11,0,0,0,16,0,0,0,19,0,0,0,12,0,0,0,15,0,0,0,19,0,0,0,18,0,0,0,2,0,0,0,1,0,0,0,20,0,0,0,23,0,0,0,6,0,0,0,5,0,0,0,21,0,0,0,20,0,0,0,10,0,0,0,9,0,0,0,22,0,0,0,21,0,0,0,14,0,0,0,13,0,0,0,23,0,0,0,22,0,0,0,1,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,5,0,0,0,4,0,0,0,11,0,0,0,10,0,0,0,9,0,0,0,8,0,0,0,15,0,0,0,14,0,0,0,13,0,0,0,12,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,12,0,0,0,18,0,0,0,15,0,0,0,8,0,0,0,19,0,0,0,11,0,0,0,4,0,0,0,16,0,0,0,7,0,0,0,0,0,0,0,17,0,0,0,2,0,0,0,23,0,0,0,13,0,0,0,14,0,0,0,22,0,0,0,9,0,0,0,10,0,0,0,21,0,0,0,5,0,0,0,6,0,0,0,20,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,4,0,0,0,6,0,0,0,3,0,0,0,8,0,0,0,1,0,0,0,9,0,0,0,4,0,0,0,8,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,11,0,0,0,3,0,0,0,10,0,0,0,5,0,0,0,6,0,0,0,10,0,0,0,9,0,0,0,11,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,7,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,2,0,0,0,8,0,0,0,4,0,0,0,1,0,0,0,2,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,2,0,0,0,6,0,0,0,9,0,0,0,10,0,0,0,4,0,0,0,9,0,0,0,6,0,0,0,7,0,0,0,10,0,0,0,11,0,0,0,5,0,0,0,10,0,0,0,7,0,0,0,8,0,0,0,11,0,0,0,9,0,0,0,3,0,0,0,11,0,0,0,8,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,3,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,25,0,0,7,25,0,0,1,20,0,0,3,0,0,0,8,25,0,0,8,25,0,0,1,20,0,0,4,0,0,0,8,25,0,0,8,25,0,0,1,20,0,0,4,0,0,0,8,25,0,0,8,25,0,0,1,20,0,0,4,0,0,0,9,25,0,0,9,25,0,0,1,20,0,0,1,0,0,0,184,29,0,0,208,88,0,0,168,77,0,0,192,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,6,20,0,0,2,0,0,0,6,20,0,0,3,0,0,0,6,20,0,0,4,0,0,0,6,20,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,20,0,0,2,0,0,0,0,20,0,0,3,0,0,0,0,20,0,0,4,0,0,0,0,20,0,0,1,0,0,0,1,20,0,0,2,0,0,0,1,20,0,0,3,0,0,0,1,20,0,0,4,0,0,0,1,20,0,0,1,0,0,0,2,20,0,0,2,0,0,0,2,20,0,0,3,0,0,0,2,20,0,0,4,0,0,0,2,20,0,0,1,0,0,0,3,20,0,0,2,0,0,0,3,20,0,0,3,0,0,0,3,20,0,0,4,0,0,0,3,20,0,0,1,0,0,0,4,20,0,0,2,0,0,0,4,20,0,0,3,0,0,0,4,20,0,0,4,0,0,0,4,20,0,0,1,0,0,0,5,20,0,0,2,0,0,0,5,20,0,0,3,0,0,0,5,20,0,0,4,0,0,0,5,20,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,65,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,63,2,64,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2])
996.concat([2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,228,0,0,34,0,0,0,150,0,0,0,60,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,228,0,0,254,0,0,0,210,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,228,0,0,98,0,0,0,84,1,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,228,0,0,120,0,0,0,8,0,0,0,78,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,228,0,0,120,0,0,0,20,0,0,0,78,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,228,0,0,214,0,0,0,102,0,0,0,60,0,0,0,2,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,228,0,0,74,1,0,0,236,0,0,0,60,0,0,0,4,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,228,0,0,208,0,0,0,26,0,0,0,60,0,0,0,8,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,0,0,76,1,0,0,182,0,0,0,60,0,0,0,6,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,229,0,0,72,1,0,0,118,0,0,0,60,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,229,0,0,204,0,0,0,142,0,0,0,60,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,229,0,0,44,0,0,0,144,0,0,0,60,0,0,0,110,1,0,0,6,0,0,0,30,0,0,0,8,0,0,0,20,0,0,0,54,0,0,0,4,0,0,0,248,255,255,255,224,229,0,0,72,0,0,0,28,0,0,0,116,0,0,0,50,0,0,0,6,0,0,0,114,0,0,0,132,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,230,0,0,62,1,0,0,38,1,0,0,60,0,0,0,70,0,0,0,2,0,0,0,58,0,0,0,26,0,0,0,18,0,0,0,4,0,0,0,2,0,0,0,248,255,255,255,8,230,0,0,222,0,0,0,68,1,0,0,100,1,0,0,126,1,0,0,46,1,0,0,148,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,230,0,0,94,0,0,0,48,0,0,0,60,0,0,0,156,0,0,0,114,1,0,0,22,0,0,0,64,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,230,0,0,72,0,0,0,82,0,0,0,60,0,0,0,144,0,0,0,12,0,0,0,30,0,0,0,82,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,230,0,0,66,1,0,0,2,0,0,0,60,0,0,0,32,0,0,0,30,0,0,0,92,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,230,0,0,56,0,0,0,6,0,0,0,60,0,0,0,50,0,0,0,10,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,230,0,0,30,1,0,0,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,230,0,0,32,0,0,0,180,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,230,0,0,62,0,0,0,220,0,0,0,60,0,0,0,24,0,0,0,4,0,0,0,14,0,0,0,2,0,0,0,12,0,0,0,4,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,230,0,0,124,0,0,0,16,0,0,0,60,0,0,0,18,0,0,0,22,0,0,0,32,0,0,0,20,0,0,0,22,0,0,0,8,0,0,0,6,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,230,0,0,46,0,0,0,24,0,0,0,60,0,0,0,46,0,0,0,44,0,0,0,36,0,0,0,38,0,0,0,28,0,0,0,42,0,0,0,34,0,0,0,52,0,0,0,50,0,0,0,48,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,231,0,0,66,0,0,0,4,0,0,0,60,0,0,0,76,0,0,0,68,0,0,0,62,0,0,0,64,0,0,0,56,0,0,0,66,0,0,0,60,0,0,0,74,0,0,0,72,0,0,0,70,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,231,0,0,88,0,0,0,114,0,0,0,60,0,0,0,14,0,0,0,16,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,231,0,0,30,0,0,0,222,0,0,0,60,0,0,0,24,0,0,0,18,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,231,0,0,122,0,0,0,168,0,0,0,60,0,0,0,14,0,0,0,4,0,0,0,22,0,0,0,56,0,0,0,196,0,0,0,4,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,231,0,0,28,1,0,0,76,0,0,0,60,0,0,0,2,0,0,0,8,0,0,0,10,0,0,0,72,1,0,0,50,1,0,0,20,0,0,0,48,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,231,0,0,28,1,0,0,172,0,0,0,60,0,0,0,16,0,0,0,6,0,0,0,2,0,0,0,130,1,0,0,88,1,0,0,8,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,231,0,0,28,1,0,0,198,0,0,0,60,0,0,0,10,0,0,0,12,0,0,0,12,0,0,0,124,0,0,0,230,0,0,0,6,0,0,0,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,231,0,0,28,1,0,0,40,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,231,0,0,70,0,0,0,202,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,231,0,0,28,1,0,0,96,0,0,0,60,0,0,0,28,0,0,0,2,0,0,0,4,0,0,0,14,0,0,0,20,0,0,0,40,0,0,0,30,0,0,0,4,0,0,0,10,0,0,0,12,0,0,0,18,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,232,0,0,82,1,0,0,42,0,0,0,60,0,0,0,2,0,0,0,2,0,0,0,24,0,0,0,48,0,0,0,14,0,0,0,6,0,0,0,36,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,232,0,0,72,0,0,0,28,0,0,0,116,0,0,0,50,0,0,0,6,0,0,0,114,0,0,0,132,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,232,0,0,222,0,0,0,68,1,0,0,100,1,0,0,126,1,0,0,46,1,0,0,148,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,232,0,0,84,0,0,0,108,0,0,0,236,0,0,0,6,0,0,0,22,0,0,0,44,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,232,0,0,28,1,0,0,104,0,0,0,60,0,0,0,10,0,0,0,12,0,0,0,12,0,0,0,124,0,0,0,230,0,0,0,6,0,0,0,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,232,0,0,28,1,0,0,212,0,0,0,60,0,0,0,10,0,0,0,12,0,0,0,12,0,0,0,124,0,0,0,230,0,0,0,6,0,0,0,206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,232,0,0,164,0,0,0,50,1,0,0,36,0,0,0,30,0,0,0,12,0,0,0,14,0,0,0,24,1,0,0,62,1,0,0,46,0,0,0,100,0,0,0,84,0,0,0,12,0,0,0,54,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,232,0,0,10,0,0,0,152,0,0,0,90,0,0,0,52,0,0,0,28,0,0,0,8,0,0,0,158,0,0,0,8,1,0,0,26,0,0,0,24,0,0,0,34,0,0,0,36,0,0,0,24,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,232,0,0,126,0,0,0,252,0,0,0,4,0,0,0,6,0,0,0,22,0,0,0,44,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,160,232,0,0,52,0,0,0,26,1,0,0,252,255,255,255,252,255,255,255,160,232,0,0,190,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,184,232,0,0,32,1,0,0,54,1,0,0,252,255,255,255,252,255,255,255,184,232,0,0,140,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,208,232,0,0,110,0,0,0,86,1,0,0,248,255,255,255,248,255,255,255,208,232,0,0,228,0,0,0,160,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,232,232,0,0,136,0,0,0,16,1,0,0,248,255,255,255,248,255,255,255,232,232,0,0,176,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,233,0,0,12,1,0,0,230,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,233,0,0,130,0,0,0,248,0,0,0,4,0,0,0,6,0,0,0,22,0,0,0,44,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,233,0,0,68,1,0,0,42,1,0,0,110,0,0,0,30,0,0,0,12,0,0,0,14,0,0,0,180,0,0,0,62,1,0,0,46,0,0,0,100,0,0,0,84,0,0,0,12,0,0,0,54,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,233,0,0,200,0,0,0,224,0,0,0,52,0,0,0,52,0,0,0,28,0,0,0,8,0,0,0,26,1,0,0,8,1,0,0,26,0,0,0,24,0,0,0,34,0,0,0,36,0,0,0,24,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,233,0,0,36,1,0,0,186,0,0,0,60,0,0,0,220,0,0,0,102,1,0,0,70,0,0,0,114,0,0,0,12,0,0,0,48,0,0,0,120,0,0,0,40,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,233,0,0,132,0,0,0,68,0,0,0,60,0,0,0,84,1,0,0,94,1,0,0,96,0,0,0,108,0,0,0,112,0,0,0,44,0,0,0,90,1,0,0,78,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,233,0,0,40,1,0,0,148,0,0,0,60,0,0,0,54,0,0,0,192,0,0,0,72,0,0,0,56,0,0,0,26,0,0,0,80,0,0,0,42,1,0,0,84,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,233,0,0,92,0,0,0,218,0,0,0,60,0,0,0,66,1,0,0,74,1,0,0,46,0,0,0,104,0,0,0,6,0,0,0,38,0,0,0,238,0,0,0,102,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,0,0,250,0,0,0,14,0,0,0,42,0,0,0,30,0,0,0,12,0,0,0,14,0,0,0,24,1,0,0,62,1,0,0,46,0,0,0,224,0,0,0,250,0,0,0,22,0,0,0,54,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,234,0,0,80,0,0,0,34,1,0,0,94,0,0,0,52,0,0,0,28,0,0,0,8,0,0,0,158,0,0,0,8,1,0,0,26,0,0,0,58,0,0,0,152,1,0,0,4,0,0,0,24,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,234,0,0,58,1,0,0,38,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,234,0,0,92,0,0,0,112,0,0,0,216,0,0,0,28,0,0,0,18,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,234,0,0,10,0,0,0,134,0,0,0,10,1,0,0,2,0,0,0,14,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,234,0,0,56,1,0,0,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,234,0,0,120,1,0,0,48,1,0,0,116,0,0,0,8,0,0,0,16,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,234,0,0,92,0,0,0,52,1,0,0,14,1,0,0,2,0,0,0,16,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,234,0,0,10,1,0,0,178,0,0,0,54,0,0,0,24,0,0,0,10,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,234,0,0,34,1,0,0,44,1,0,0,174,0,0,0,12,0,0,0,20,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,234,0,0,46,1,0,0,0,1,0,0,60,0,0,0,88,0,0,0,10,0,0,0,100,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,234,0,0,24,1,0,0,50,0,0,0,58,0,0,0,8,0,0,0,8,0,0,0,106,0,0,0,162,0,0,0,4,0,0,0,2,0,0,0,16,0,0,0,8,0,0,0,28,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,234,0,0,18,0,0,0,234,0,0,0,96,1,0,0,12,0,0,0,20,0,0,0,10,0,0,0,2,0,0,0,68,0,0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,234,0,0,20,1,0,0,36,0,0,0,34,0,0,0,152,0,0,0,176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,234,0,0,6,1,0,0,226,0,0,0,20,0,0,0,88,0,0,0,10,0,0,0,100,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,234,0,0,22,0,0,0,78,1,0,0,32,0,0,0,164,0,0,0,144,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,234,0,0,66,0,0,0,28,0,0,0,242,0,0,0,22,0,0,0,6,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,234,0,0,70,1,0,0,2,1,0,0,78,0,0,0,194,0,0,0,12,0,0,0,14,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,235,0,0,74,0,0,0,106,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,235,0,0,66,0,0,0,22,1,0,0,8,1,0,0,4,0,0,0,26,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,235,0,0,24,1,0,0,240,0,0,0,58,0,0,0,8,0,0,0,8,0,0,0,106,0,0,0,162,0,0,0,4,0,0,0,2,0,0,0,10,0,0,0,8,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,108,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,83,116,57,116,121,112,101,95,105,110,102,111,0,0,0,0,83,116,57,101,120,99,101,112,116,105,111,110,0,0,0,0,83,116,57,98,97,100,95,97,108,108,111,99,0,0,0,0,83,116,56,98,97,100,95,99,97,115,116,0,0,0,0,0,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,0,0,0,0,0,0,0,83,116,49,50,108,101,110,103,116,104,95,101,114,114,111,114,0,0,0,0,0,0,0,0,83,116,49,49,108,111,103,105,99,95,101,114,114,111,114,0,78,83,116,51,95,95,49,57,116,105,109,101,95,98,97,115,101,69,0,0,0,0,0,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,0,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,0,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,0,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,0,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,119,69,69,0,0,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,99,69,69,0,0,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,119,69,69,0,0,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,99,69,69,0,0,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,0,0,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,0,0,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,0,0,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,0,0,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,119,69,69,0,0,0,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,99,69,69,0,0,0,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,119,69,69,0,0,0,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,99,69,69,0,0,0,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,55,102,97,105,108,117,114,101,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,119,69,69,0,0,0,0,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,99,69,69,0,0,0,0,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,119,99,49,48,95,109,98,115,116,97,116,101,95,116,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,99,99,49,48,95,109,98,115,116,97,116,101,95,116,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,115,99,49,48,95,109,98,115,116,97,116,101,95,116,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,105,99,49,48,95,109,98,115,116,97,116,101,95,116,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,102,97,99,101,116,69,0,0,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,95,95,105,109,112,69,0,0,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,119,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,99,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,119,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,99,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,57,95,95,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,69,0,0,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,51,50,69,69,69,0,0,0,0,0,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,51,50,69,69,69,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,52,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,52,95,95,115,104,97,114,101,100,95,99,111,117,110,116,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,112,117,116,95,98,97,115,101,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,103,101,116,95,98,97,115,101,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,51,109,101,115,115,97,103,101,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,0,78,83,116,51,95,95,49,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,0,0,78,83,116,51,95,95,49,49,50,99,111,100,101,99,118,116,95,98,97,115,101,69,0,0,78,83,116,51,95,95,49,49,50,95,95,100,111,95,109,101,115,115,97,103,101,69,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,119,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,99,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,119,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,99,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,119,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,99,69,69,0,0,0,0,0,0,0,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,49,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,48,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,49,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,48,69,69,69,0,0,0,0,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,95,98,97,115,101,69,0,0,0,0,78,83,116,51,95,95,49,49,48,99,116,121,112,101,95,98,97,115,101,69,0,0,0,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,112,117,116,69,0,0,0,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,119,69,69,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,99,69,69,0,78,51,108,111,108,57,73,109,97,103,101,68,97,116,97,69,0,0,0,0,0,0,0,0,78,51,108,111,108,56,83,100,108,73,110,112,117,116,69,0,78,51,108,111,108,55,84,105,108,101,83,101,116,69,0,0,78,51,108,111,108,54,83,100,108,65,112,112,69,0,0,0,78,51,108,111,108,54,83,97,109,112,108,101,69,0,0,0,78,51,108,111,108,54,69,110,116,105,116,121,69,0,0,0,78,51,108,111,108,54,67,97,109,101,114,97,69,0,0,0,78,51,108,111,108,53,76,105,103,104,116,69,0,0,0,0,78,51,108,111,108,49,55,68,101,102,97,117,108,116,83,104,97,100,101,114,68,97,116,97,69,0,0,0,0,0,0,0,78,51,108,111,108,49,53,69,97,115,121,77,101,115,104,83,99,97,110,110,101,114,69,0,78,51,108,111,108,49,52,69,97,115,121,77,101,115,104,80,97,114,115,101,114,69,0,0,78,51,108,111,108,49,52,68,117,109,109,121,73,109,97,103,101,68,97,116,97,69,0,0,78,51,108,111,108,49,51,71,112,117,83,104,97,100,101,114,68,97,116,97,69,0,0,0,78,51,108,111,108,49,50,83,100,108,73,109,97,103,101,68,97,116,97,69,0,0,0,0,78,51,108,111,108,49,49,87,111,114,108,100,69,110,116,105,116,121,69,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,0,57,70,108,101,120,76,101,120,101,114,0,0,0,0,0,0,53,76,111,108,74,115,0,0,49,55,69,97,115,121,77,101,115,104,70,108,101,120,76,101,120,101,114,0,0,0,0,0,0,0,0,0,40,215,0,0,0,0,0,0,56,215,0,0,0,0,0,0,72,215,0,0,64,228,0,0,0,0,0,0,0,0,0,0,88,215,0,0,64,228,0,0,0,0,0,0,0,0,0,0,104,215,0,0,64,228,0,0,0,0,0,0,0,0,0,0,128,215,0,0,136,228,0,0,0,0,0,0,0,0,0,0,152,215,0,0,64,228,0,0,0,0,0,0,0,0,0,0,168,215,0,0,88,214,0,0,192,215,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,72,233,0,0,0,0,0,0,88,214,0,0,8,216,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,80,233,0,0,0,0,0,0,88,214,0,0,80,216,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,88,233,0,0,0,0,0,0,88,214,0,0,152,216,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,96,233,0,0,0,0,0,0,0,0,0,0,224,216,0,0,144,230,0,0,0,0,0,0,0,0,0,0,16,217,0,0,144,230,0,0,0,0,0,0,88,214,0,0,64,217,0,0,0,0,0,0,1,0,0,0,136,232,0,0,0,0,0,0,88,214,0,0,88,217,0,0,0,0,0,0,1,0,0,0,136,232,0,0,0,0,0,0,88,214,0,0,112,217,0,0,0,0,0,0,1,0,0,0,144,232,0,0,0,0,0,0,88,214,0,0,136,217,0,0,0,0,0,0,1,0,0,0,144,232,0,0,0,0,0,0,88,214,0,0,160,217,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,248,233,0,0,0,8,0,0,88,214,0,0,232,217,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,248,233,0,0,0,8,0,0,88,214,0,0,48,218,0,0,0,0,0,0,3,0,0,0,200,231,0,0,2,0,0,0,152,228,0,0,2,0,0,0,40,232,0,0,0,8,0,0,88,214,0,0,120,218,0,0,0,0,0,0,3,0,0,0,200,231,0,0,2,0,0,0,152,228,0,0,2,0,0,0,48,232,0,0,0,8,0,0,0,0,0,0,192,218,0,0,200,231,0,0,0,0,0,0,0,0,0,0,216,218,0,0,200,231,0,0,0,0,0,0,88,214,0,0,240,218,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,152,232,0,0,2,0,0,0,88,214,0,0,8,219,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,152,232,0,0,2,0,0,0,0,0,0,0,32,219,0,0,0,0,0,0,56,219,0,0,0,233,0,0,0,0,0,0,88,214,0,0,88,219,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,64,229,0,0,0,0,0,0,88,214,0,0,160,219,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,88,229,0,0,0,0,0,0,88,214,0,0,232,219,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,112,229,0,0,0,0,0,0,88,214,0,0,48,220,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,136,229,0,0,0,0,0,0,0,0,0,0,120,220,0,0,200,231,0,0,0,0,0,0,0,0,0,0,144,220,0,0,200,231,0,0,0,0,0,0,88,214,0,0,168,220,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,16,233,0,0,2,0,0,0,88,214,0,0,208,220,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,16,233,0,0,2,0,0,0,88,214,0,0,248,220,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,16,233,0,0,2,0,0,0,88,214,0,0,32,221,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,16,233,0,0,2,0,0,0,0,0,0,0,72,221,0,0,128,232,0,0,0,0,0,0,0,0,0,0,96,221,0,0,200,231,0,0,0,0,0,0,88,214,0,0,120,221,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,240,233,0,0,2,0,0,0,88,214,0,0,144,221,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,240,233,0,0,2,0,0,0,0,0,0,0,168,221,0,0,0,0,0,0,208,221,0,0,0,0,0,0,248,221,0,0,24,233,0,0,0,0,0,0,0,0,0,0,24,222,0,0,168,231,0,0,0,0,0,0,0,0,0,0,64,222,0,0,168,231,0,0,0,0,0,0,0,0,0,0,104,222,0,0,0,0,0,0,160,222,0,0,0,0,0,0,216,222,0,0,0,0,0,0,248,222,0,0,0,0,0,0,24,223,0,0,0,0,0,0,56,223,0,0,0,0,0,0,88,223,0,0,88,214,0,0,112,223,0,0,0,0,0,0,1,0,0,0,32,229,0,0,3,244,255,255,88,214,0,0,160,223,0,0,0,0,0,0,1,0,0,0,48,229,0,0,3,244,255,255,88,214,0,0,208,223,0,0,0,0,0,0,1,0,0,0,32,229,0,0,3,244,255,255,88,214,0,0,0,224,0,0,0,0,0,0,1,0,0,0,48,229,0,0,3,244,255,255,0,0,0,0,48,224,0,0,104,228,0,0,0,0,0,0,0,0,0,0,72,224,0,0,0,0,0,0,96,224,0,0,120,232,0,0,0,0,0,0,0,0,0,0,120,224,0,0,104,232,0,0,0,0,0,0,0,0,0,0,152,224,0,0,112,232,0,0,0,0,0,0,0,0,0,0,184,224,0,0,0,0,0,0,216,224,0,0,0,0,0,0,248,224,0,0,0,0,0,0,24,225,0,0,88,214,0,0,56,225,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,232,233,0,0,2,0,0,0,88,214,0,0,88,225,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,232,233,0,0,2,0,0,0,88,214,0,0,120,225,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,232,233,0,0,2,0,0,0,88,214,0,0,152,225,0,0,0,0,0,0,2,0,0,0,200,231,0,0,2,0,0,0,232,233,0,0,2,0,0,0,0,0,0,0,184,225,0,0,0,0,0,0,208,225,0,0,0,0,0,0,232,225,0,0,0,0,0,0,0,226,0,0,104,232,0,0,0,0,0,0,0,0,0,0,24,226,0,0,112,232,0,0,0,0,0,0,0,0,0,0,48,226,0,0,0,0,0,0,72,226,0,0,96,234,0,0,0,0,0,0,0,0,0,0,88,226,0,0,96,234,0,0,0,0,0,0,0,0,0,0,104,226,0,0,0,0,0,0,120,226,0,0,96,234,0,0,0,0,0,0,0,0,0,0,136,226,0,0,0,0,0,0,152,226,0,0,216,234,0,0,0,0,0,0,0,0,0,0,168,226,0,0,216,234,0,0,0,0,0,0,0,0,0,0,184,226,0,0,192,234,0,0,0,0,0,0,0,0,0,0,216,226,0,0,64,235,0,0,0,0,0,0,0,0,0,0,240,226,0,0,0,0,0,0,8,227,0,0,32,234,0,0,0,0,0,0,0,0,0,0,32,227,0,0,0,0,0,0,56,227,0,0,32,234,0,0,0,0,0,0,0,0,0,0,80,227,0,0,96,234,0,0,0,0,0,0,0,0,0,0,104,227,0,0,8,235,0,0,0,0,0,0,0,0,0,0,144,227,0,0,8,235,0,0,0,0,0,0,0,0,0,0,184,227,0,0,24,235,0,0,0,0,0,0,0,0,0,0,224,227,0,0,56,228,0,0,0,0,0,0,0,0,0,0,8,228,0,0,0,0,0,0,24,228,0,0,216,234,0,0,0,0,0,0,0,0,0,0,32,228,0,0,40,235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
997.concat([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,65,66,67,68,69,70,120,88,43,45,112,80,105,73,110,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,0,0,0,0,0,0,55,0,0,0,0,0,0,0,0,0,56,0,0,60,0,0,0,61,62,63,64,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,3,0,5,9,11,12,13,90,15,0,0,0,0,14,80,17,16,19,23,26,27,32,35,36,41,44,45,50,20,24,28,29,33,37,38,42,46,47,51,21,25,30,31,34,39,40,43,48,49,52,22,53,57,58,59,18,0,0,66,67,68,69,70,71,72,74,75,76,77,78,0,0,0,0,79,73,1,2,4,0,10,91,81,82,83,84,85,86,87,88,89,8,6,0,0,0,0,0,0,88,81,0,0,0,30,0,0,160,79,0,0,208,78,0,0,152,77,0,0,128,76,0,0,216,75,0,0,216,74,0,0,136,63,0,0,120,61,0,0,112,60,0,0,80,50,0,0,40,49,0,0,128,48,0,0,176,43,0,0,224,42,0,0,64,42,0,0,120,41,0,0,248,40,0,0,80,39,0,0,120,38,0,0,240,37,0,0,96,37,0,0,32,37,0,0,200,36,0,0,32,36,0,0,216,35,0,0,168,35,0,0,64,35,0,0,48,35,0,0,184,33,0,0,56,33,0,0,184,32,0,0,120,32,0,0,40,32,0,0,8,32,0,0,152,31,0,0,128,31,0,0,56,31,0,0,16,31,0,0,104,29,0,0,88,29,0,0,224,28,0,0,168,28,0,0,112,28,0,0,24,28,0,0,160,27,0,0,72,27,0,0,16,27,0,0,184,25,0,0,168,25,0,0,88,25,0,0,184,24,0,0,136,24,0,0,192,20,0,0,8,15,0,0,160,14,0,0,136,14,0,0,24,14,0,0,0,14,0,0,240,12,0,0,176,12,0,0,80,12,0,0,8,12,0,0,216,11,0,0,176,11,0,0,56,11,0,0,24,11,0,0,224,10,0,0,192,10,0,0,192,9,0,0,128,9,0,0,72,9,0,0,48,9,0,0,24,9,0,0,232,8,0,0,192,8,0,0,120,8,0,0,64,182,0,0,48,182,0,0,32,181,0,0,200,180,0,0,168,180,0,0,152,180,0,0,144,180,0,0,88,180,0,0,16,180,0,0,248,61,0,0,0,0,0,0,0,0,0,0,142,143,144,145,137,80,138,83,85,152,145,141,68,145,126,91,70,94,96,68,69,145,131,70,145,102,132,105,107,139,140,0,145,111,112,145,68,76,115,0,70,0,0,0,0,0,121,146,147,148,125,0,0,128,0,0,0,136,0,0,0,148,149,150,151,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,0,0,0,58,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,74,77,0,0,81,0,84,82,0,0,86,87,0,0,92,0,95,93,0,0,97,98,0,0,103,0,106,104,0,0,108,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,123,0,0,124,127,78,79,0,129,130,0,0,0,88,0,89,90,0,0,0,0,0,0,99,0,100,101,0,0,0,0,0,0,110,0,0,0,0,113,114,0,0,0,0,0,0,116,0,0,0,0,80,80,84,85,89,90,94,98,102,103,107,108,109,113,114,117,118,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,175,178,181,182,184,186,187,188,189,191,193,194,195,196,201,202,203,204,205,206,207,208,209,210,213,214,0,0,0,0,185,255,185,255,224,255,185,255,185,255,185,255,185,255,204,255,185,255,185,255,185,255,232,0,184,0,0,0,182,0,219,255,222,255,226,255,185,255,185,255,185,255,186,255,0,0,0,0,70,0,71,0,72,0,73,0,0,0,5,0,0,0,7,0,8,0,64,0,80,0,63,0,61,0,83,0,51,0,15,0,65,0,17,0,18,0,61,0,62,0,91,0,56,0,65,0,94,0,25,0,56,0,27,0,28,0,61,0,62,0,255,255,102,0,33,0,34,0,105,0,61,0,62,0,38,0,255,255,65,0,255,255,255,255,255,255,255,255,255,255,46,0,117,0,118,0,119,0,50,0,255,255,255,255,53,0,255,255,255,255,255,255,57,0,255,255,255,255,255,255,131,0,132,0,133,0,134,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,255,255,255,255,255,255,63,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,1,0,2,0,255,255,255,255,5,0,255,255,7,0,6,0,255,255,255,255,9,0,10,0,255,255,255,255,15,0,255,255,17,0,16,0,255,255,255,255,19,0,20,0,255,255,255,255,25,0,255,255,27,0,26,0,255,255,255,255,29,0,30,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,47,0,48,0,255,255,255,255,49,0,52,0,3,0,4,0,255,255,54,0,55,0,255,255,255,255,255,255,11,0,255,255,13,0,14,0,255,255,255,255,255,255,255,255,255,255,255,255,21,0,255,255,23,0,24,0,255,255,255,255,255,255,255,255,255,255,255,255,31,0,255,255,255,255,255,255,255,255,36,0,37,0,255,255,255,255,255,255,255,255,255,255,255,255,44,0,0,0,0,0,0,0,0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,63,67,68,69,70,72,73,74,75,76,61,62,65,77,78,79,80,87,62,80,77,77,79,80,78,79,80,79,78,78,77,77,77,79,80,78,79,80,79,78,78,77,77,77,79,80,78,79,80,79,78,78,77,79,79,77,77,79,77,80,81,82,83,79,80,80,78,79,81,80,79,78,78,82,83,84,85,86,79,0,0,68,68,73,87,87,87,87,87,87,87,87,87,87,64,71,0,0,0,0,0,0,0,0,3,6,8,11,13,17,19,21,23,26,28,30,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,154,156,158,161,164,167,169,171,173,175,177,179,182,185,188,191,194,197,200,203,206,209,212,215,218,221,223,226,229,232,235,238,241,244,247,250,252,0,0,0,0,62,214,231,207,207,207,207,207,207,207,207,207,185,207,207,207,207,207,207,207,207,207,185,207,207,207,207,207,207,207,207,207,185,207,207,185,207,207,207,185,185,185,185,185,207,207,207,207,207,207,207,207,207,207,207,207,207,207,185,4,6,62,62,123,185,185,185,185,185,185,207,207,207,207,185,185,185,185,185,185,207,185,185,207,185,185,185,185,185,185,185,207,185,185,207,185,185,185,185,185,185,185,207,185,185,207,185,185,185,185,185,185,185,185,185,185,185,207,207,207,185,185,185,185,185,185,185,185,185,185,185,207,207,207,207,185,185,185,185,185,201,185,185,185,185,185,185,185,185,185,185,185,185,185,0,0,0,0,0,0,67,0,255,68,0,255,69,255,69,68,255,72,255,70,68,71,255,63,255,64,255,73,255,72,73,255,74,255,75,255,76,255,3,80,255,3,62,255,4,80,255,4,62,255,46,77,255,5,77,255,15,77,255,25,77,255,35,79,255,6,77,255,16,77,255,26,77,255,7,79,255,7,80,255,17,79,255,17,80,255,27,79,255,27,80,255,8,78,255,18,78,255,28,78,255,9,79,255,9,80,255,19,79,255,19,80,255,29,79,255,29,80,255,10,79,255,20,79,255,30,79,255,11,78,255,12,78,255,21,78,255,22,78,255,31,78,255,32,78,255,13,77,255,23,77,255,33,77,255,36,79,255,14,255,24,255,34,255,38,77,255,39,77,255,40,79,255,37,255,41,255,42,255,43,255,44,255,45,255,47,82,255,47,83,255,48,79,255,49,80,255,50,80,255,51,78,255,52,79,255,59,79,255,53,81,255,54,80,255,55,79,255,56,78,255,57,78,255,58,86,255,87,255,77,87,255,78,87,255,79,87,255,80,87,255,81,87,255,82,87,255,83,87,255,84,87,255,85,87,255,61,255,65,87,255,0,0,2,2,1,2,1,3,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,0,0,0,0,0,66,67,68,68,69,69,70,71,72,72,73,73,73,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,78,79,80,81,82,83,84,85,86,87,87,0,0,0,0,255,255,59,0,60,0,61,0,62,0,153,0,63,0,64,0,65,0,66,0,67,0,71,0,72,0,73,0,117,0,118,0,119,0,120,0,133,0,134,0,135,0,75,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,70,0,68,0,67,0,66,0,68,0,68,0,63,0,68,0,62,0,64,0,65,0,68,0,68,0,68,0,68,0,68,0,32,0,7,0,0,0,0,0,62,0,62,0,0,0,45,0,46,0,49,0,0,0,0,0,52,0,53,0,56,0,0,0,3,0,0,0,34,0,35,0,36,0,37,0,8,0,9,0,10,0,1,0,0,0,0,0,0,0,0,0,29,0,30,0,31,0,0,0,0,0,0,0,4,0,5,0,6,0,0,0,0,0,62,0,0,0,48,0,50,0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,2,0,17,0,18,0,19,0,0,0,0,0,20,0,21,0,22,0,11,0,12,0,13,0,33,0,14,0,15,0,16,0,58,0,47,0,51,0,54,0,55,0,23,0,24,0,25,0,26,0,27,0,28,0,43,0,41,0,40,0,44,0,39,0,38,0,59,0,42,0,0,0,60,0,0,0,61,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,141,0,142,0,142,0,142,0,0,0,28,0,30,0,132,0,32,0,142,0,142,0,36,0,123,0,27,0,11,0,25,0,51,0,73,0,0,0,130,0,53,0,65,0,73,0,142,0,74,0,142,0,109,0,121,0,142,0,52,0,111,0,56,0,142,0,115,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,119,0,62,0,103,0,109,0,65,0,142,0,142,0,142,0,76,0,99,0,79,0,142,0,142,0,142,0,0,0,121,0,120,0,102,0,142,0,142,0,112,0,111,0,104,0,142,0,35,0,68,0,59,0,90,0,142,0,142,0,142,0,142,0,103,0,92,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,0,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,142,0,97,0,142,0,142,0,142,0,142,0,0,0,142,0,0,0,0,0,0,0,142,0,142,0,115,0,114,0,113,0,112,0,70,0,54,0,46,0,39,0,0,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,4,0,4,0,12,0,13,0,14,0,15,0,16,0,4,0,4,0,4,0,4,0,4,0,4,0,4,0,17,0,4,0,4,0,4,0,18,0,19,0,20,0,4,0,4,0,4,0,4,0,4,0,22,0,23,0,22,0,23,0,22,0,23,0,110,0,25,0,37,0,38,0,39,0,40,0,35,0,109,0,25,0,26,0,27,0,28,0,29,0,30,0,36,0,108,0,41,0,42,0,43,0,22,0,23,0,31,0,25,0,32,0,33,0,44,0,65,0,93,0,94,0,25,0,45,0,107,0,24,0,46,0,25,0,47,0,66,0,59,0,59,0,48,0,60,0,25,0,49,0,50,0,51,0,52,0,61,0,68,0,69,0,70,0,97,0,98,0,62,0,73,0,74,0,75,0,78,0,79,0,80,0,95,0,53,0,96,0,99,0,54,0,55,0,56,0,57,0,81,0,82,0,83,0,85,0,86,0,87,0,105,0,88,0,58,0,21,0,100,0,106,0,101,0,104,0,102,0,103,0,92,0,91,0,90,0,89,0,60,0,60,0,84,0,77,0,76,0,72,0,71,0,67,0,64,0,63,0,24,0,34,0,24,0,111,0,3,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,0,0,0,0,0,0,0,0,111,0,1,0,111,0,111,0,111,0,111,0,112,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,113,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,114,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,115,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,116,0,111,0,117,0,118,0,119,0,111,0,0,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,8,0,8,0,9,0,9,0,11,0,11,0,119,0,11,0,17,0,17,0,17,0,18,0,16,0,118,0,11,0,14,0,14,0,14,0,14,0,14,0,16,0,117,0,18,0,18,0,18,0,23,0,23,0,14,0,23,0,14,0,14,0,19,0,32,0,68,0,68,0,23,0,19,0,116,0,24,0,19,0,24,0,19,0,32,0,25,0,25,0,19,0,25,0,24,0,19,0,19,0,19,0,20,0,27,0,34,0,34,0,34,0,70,0,70,0,27,0,45,0,45,0,45,0,48,0,48,0,48,0,69,0,20,0,69,0,71,0,20,0,20,0,20,0,20,0,52,0,52,0,52,0,54,0,54,0,54,0,115,0,114,0,113,0,112,0,71,0,100,0,71,0,77,0,71,0,76,0,66,0,65,0,64,0,61,0,60,0,59,0,53,0,47,0,46,0,44,0,36,0,33,0,30,0,29,0,22,0,15,0,10,0,3,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,111,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,6,0,0,0,7,0,0,0,1,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,9,0,0,0,9,0,0,0,9,0,0,0,9,0,0,0,10,0,0,0,9,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0,1,0,0,0,12,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,1,0,0,0,21,0,0,0,1,0,0,0,22,0,0,0,23,0,0,0,1,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,1,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
998, "i8", ALLOC_NONE, Runtime.GLOBAL_BASE)
999function runPostSets() {
1000HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(8))>>2)]=(326);
1001HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(12))>>2)]=(166);
1002HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(16))>>2)]=(78);
1003HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(20))>>2)]=(194);
1004HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(24))>>2)]=(12);
1005HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(28))>>2)]=(6);
1006HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(32))>>2)]=(2);
1007HEAP32[(((__ZTVN10__cxxabiv120__si_class_type_infoE)+(36))>>2)]=(4);
1008HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(8))>>2)]=(326);
1009HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(12))>>2)]=(320);
1010HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(16))>>2)]=(78);
1011HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(20))>>2)]=(194);
1012HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(24))>>2)]=(12);
1013HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(28))>>2)]=(26);
1014HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(32))>>2)]=(4);
1015HEAP32[(((__ZTVN10__cxxabiv117__class_type_infoE)+(36))>>2)]=(12);
1016HEAP32[((58424)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1017HEAP32[((58432)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1018HEAP32[((58440)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1019HEAP32[((58456)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1020HEAP32[((58472)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1021HEAP32[((58488)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1022HEAP32[((58504)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1023HEAP32[((58520)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1024HEAP32[((58656)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1025HEAP32[((58672)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1026HEAP32[((58928)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1027HEAP32[((58944)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1028HEAP32[((59024)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1029HEAP32[((59032)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1030HEAP32[((59176)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1031HEAP32[((59192)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1032HEAP32[((59336)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1033HEAP32[((59352)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1034HEAP32[((59432)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1035HEAP32[((59440)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1036HEAP32[((59448)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1037HEAP32[((59464)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1038HEAP32[((59480)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1039HEAP32[((59496)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1040HEAP32[((59504)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1041HEAP32[((59512)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1042HEAP32[((59520)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1043HEAP32[((59528)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1044HEAP32[((59536)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1045HEAP32[((59544)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1046HEAP32[((59648)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1047HEAP32[((59664)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1048HEAP32[((59672)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1049HEAP32[((59688)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1050HEAP32[((59704)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1051HEAP32[((59720)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1052HEAP32[((59728)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1053HEAP32[((59736)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1054HEAP32[((59744)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1055HEAP32[((59880)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1056HEAP32[((59888)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1057HEAP32[((59896)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1058HEAP32[((59904)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1059HEAP32[((59920)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1060HEAP32[((59936)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1061HEAP32[((59944)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1062HEAP32[((59960)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1063HEAP32[((59976)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1064HEAP32[((59984)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1065HEAP32[((60000)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1066HEAP32[((60008)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1067HEAP32[((60024)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1068HEAP32[((60040)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1069HEAP32[((60056)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1070HEAP32[((60072)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1071HEAP32[((60080)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1072HEAP32[((60096)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1073HEAP32[((60104)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1074HEAP32[((60120)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1075HEAP32[((60136)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1076HEAP32[((60152)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1077HEAP32[((60168)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1078HEAP32[((60184)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1079HEAP32[((60200)>>2)]=(((__ZTVN10__cxxabiv117__class_type_infoE+8)|0));
1080HEAP32[((60208)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1081HEAP32[((60224)>>2)]=(((__ZTVN10__cxxabiv120__si_class_type_infoE+8)|0));
1082}
1083if (!awaitingMemoryInitializer) runPostSets();
1084var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
1085assert(tempDoublePtr % 8 == 0);
1086function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
1087  HEAP8[tempDoublePtr] = HEAP8[ptr];
1088  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1089  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1090  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1091}
1092function copyTempDouble(ptr) {
1093  HEAP8[tempDoublePtr] = HEAP8[ptr];
1094  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
1095  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
1096  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
1097  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
1098  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
1099  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
1100  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
1101}
1102  function ___gxx_personality_v0() {
1103    }
1104  function __exit(status) {
1105      // void _exit(int status);
1106      // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
1107      function ExitStatus() {
1108        this.name = "ExitStatus";
1109        this.message = "Program terminated with exit(" + status + ")";
1110        this.status = status;
1111        Module.print('Exit Status: ' + status);
1112      };
1113      ExitStatus.prototype = new Error();
1114      ExitStatus.prototype.constructor = ExitStatus;
1115      exitRuntime();
1116      ABORT = true;
1117      throw new ExitStatus();
1118    }function _exit(status) {
1119      __exit(status);
1120    }function __ZSt9terminatev() {
1121      _exit(-1234);
1122    }
1123  Module["_memcpy"] = _memcpy;var _llvm_memcpy_p0i8_p0i8_i32=_memcpy;
1124  function _rand() {
1125      return Math.floor(Math.random()*0x80000000);
1126    }
1127  function _abort() {
1128      ABORT = true;
1129      throw 'abort() at ' + (new Error().stack);
1130    }
1131  function _fmod(x, y) {
1132      return x % y;
1133    }var _fmodf=_fmod;
1134  function ___cxa_call_unexpected(exception) {
1135      Module.printErr('Unexpected exception thrown, this is not properly supported - aborting');
1136      ABORT = true;
1137      throw exception;
1138    }
1139  var _cosf=Math.cos;
1140  var _sinf=Math.sin;
1141  var _fabsf=Math.abs;
1142  Module["_memset"] = _memset;var _llvm_memset_p0i8_i32=_memset;
1143  Module["_strlen"] = _strlen;
1144  function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop) {
1145      Module['noExitRuntime'] = true;
1146      Browser.mainLoop.runner = function() {
1147        if (ABORT) return;
1148        if (Browser.mainLoop.queue.length > 0) {
1149          var start = Date.now();
1150          var blocker = Browser.mainLoop.queue.shift();
1151          blocker.func(blocker.arg);
1152          if (Browser.mainLoop.remainingBlockers) {
1153            var remaining = Browser.mainLoop.remainingBlockers;
1154            var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
1155            if (blocker.counted) {
1156              Browser.mainLoop.remainingBlockers = next;
1157            } else {
1158              // not counted, but move the progress along a tiny bit
1159              next = next + 0.5; // do not steal all the next one's progress
1160              Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
1161            }
1162          }
1163          console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
1164          Browser.mainLoop.updateStatus();
1165          setTimeout(Browser.mainLoop.runner, 0);
1166          return;
1167        }
1168        if (Browser.mainLoop.shouldPause) {
1169          // catch pauses from non-main loop sources
1170          Browser.mainLoop.paused = true;
1171          Browser.mainLoop.shouldPause = false;
1172          return;
1173        }
1174        if (Module['preMainLoop']) {
1175          Module['preMainLoop']();
1176        }
1177        Runtime.dynCall('v', func);
1178        if (Module['postMainLoop']) {
1179          Module['postMainLoop']();
1180        }
1181        if (Browser.mainLoop.shouldPause) {
1182          // catch pauses from the main loop itself
1183          Browser.mainLoop.paused = true;
1184          Browser.mainLoop.shouldPause = false;
1185          return;
1186        }
1187        Browser.mainLoop.scheduler();
1188      }
1189      if (fps && fps > 0) {
1190        Browser.mainLoop.scheduler = function() {
1191          setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
1192        }
1193      } else {
1194        Browser.mainLoop.scheduler = function() {
1195          Browser.requestAnimationFrame(Browser.mainLoop.runner);
1196        }
1197      }
1198      Browser.mainLoop.scheduler();
1199      if (simulateInfiniteLoop) {
1200        throw 'SimulateInfiniteLoop';
1201      }
1202    }
1203  function _emscripten_run_script_string(ptr) {
1204      var s = eval(Pointer_stringify(ptr));
1205      var me = _emscripten_run_script_string;
1206      if (!me.bufferSize || me.bufferSize < s.length+1) {
1207        if (me.bufferSize) _free(me.buffer);
1208        me.bufferSize = s.length+1;
1209        me.buffer = _malloc(me.bufferSize);
1210      }
1211      writeStringToMemory(s, me.buffer);
1212      return me.buffer;
1213    }
1214  var _llvm_va_start=undefined;
1215  function _llvm_va_end() {}
1216  var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:35,EIDRM:36,ECHRNG:37,EL2NSYNC:38,EL3HLT:39,EL3RST:40,ELNRNG:41,EUNATCH:42,ENOCSI:43,EL2HLT:44,EDEADLK:45,ENOLCK:46,EBADE:50,EBADR:51,EXFULL:52,ENOANO:53,EBADRQC:54,EBADSLT:55,EDEADLOCK:56,EBFONT:57,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:74,ELBIN:75,EDOTDOT:76,EBADMSG:77,EFTYPE:79,ENOTUNIQ:80,EBADFD:81,EREMCHG:82,ELIBACC:83,ELIBBAD:84,ELIBSCN:85,ELIBMAX:86,ELIBEXEC:87,ENOSYS:88,ENMFILE:89,ENOTEMPTY:90,ENAMETOOLONG:91,ELOOP:92,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:106,EPROTOTYPE:107,ENOTSOCK:108,ENOPROTOOPT:109,ESHUTDOWN:110,ECONNREFUSED:111,EADDRINUSE:112,ECONNABORTED:113,ENETUNREACH:114,ENETDOWN:115,ETIMEDOUT:116,EHOSTDOWN:117,EHOSTUNREACH:118,EINPROGRESS:119,EALREADY:120,EDESTADDRREQ:121,EMSGSIZE:122,EPROTONOSUPPORT:123,ESOCKTNOSUPPORT:124,EADDRNOTAVAIL:125,ENETRESET:126,EISCONN:127,ENOTCONN:128,ETOOMANYREFS:129,EPROCLIM:130,EUSERS:131,EDQUOT:132,ESTALE:133,ENOTSUP:134,ENOMEDIUM:135,ENOSHARE:136,ECASECLASH:137,EILSEQ:138,EOVERFLOW:139,ECANCELED:140,ENOTRECOVERABLE:141,EOWNERDEAD:142,ESTRPIPE:143};
1217  var ___errno_state=0;function ___setErrNo(value) {
1218      // For convenient setting and returning of errno.
1219      HEAP32[((___errno_state)>>2)]=value
1220      return value;
1221    }
1222  var _stdin=allocate(1, "i32*", ALLOC_STATIC);
1223  var _stdout=allocate(1, "i32*", ALLOC_STATIC);
1224  var _stderr=allocate(1, "i32*", ALLOC_STATIC);
1225  var __impure_ptr=allocate(1, "i32*", ALLOC_STATIC);var FS={currentPath:"/",nextInode:2,streams:[null],ignorePermissions:true,createFileHandle:function (stream, fd) {
1226        if (typeof stream === 'undefined') {
1227          stream = null;
1228        }
1229        if (!fd) {
1230          if (stream && stream.socket) {
1231            for (var i = 1; i < 64; i++) {
1232              if (!FS.streams[i]) {
1233                fd = i;
1234                break;
1235              }
1236            }
1237            assert(fd, 'ran out of low fds for sockets');
1238          } else {
1239            fd = Math.max(FS.streams.length, 64);
1240            for (var i = FS.streams.length; i < fd; i++) {
1241              FS.streams[i] = null; // Keep dense
1242            }
1243          }
1244        }
1245        // Close WebSocket first if we are about to replace the fd (i.e. dup2)
1246        if (FS.streams[fd] && FS.streams[fd].socket && FS.streams[fd].socket.close) {
1247          FS.streams[fd].socket.close();
1248        }
1249        FS.streams[fd] = stream;
1250        return fd;
1251      },removeFileHandle:function (fd) {
1252        FS.streams[fd] = null;
1253      },joinPath:function (parts, forceRelative) {
1254        var ret = parts[0];
1255        for (var i = 1; i < parts.length; i++) {
1256          if (ret[ret.length-1] != '/') ret += '/';
1257          ret += parts[i];
1258        }
1259        if (forceRelative && ret[0] == '/') ret = ret.substr(1);
1260        return ret;
1261      },absolutePath:function (relative, base) {
1262        if (typeof relative !== 'string') return null;
1263        if (base === undefined) base = FS.currentPath;
1264        if (relative && relative[0] == '/') base = '';
1265        var full = base + '/' + relative;
1266        var parts = full.split('/').reverse();
1267        var absolute = [''];
1268        while (parts.length) {
1269          var part = parts.pop();
1270          if (part == '' || part == '.') {
1271            // Nothing.
1272          } else if (part == '..') {
1273            if (absolute.length > 1) absolute.pop();
1274          } else {
1275            absolute.push(part);
1276          }
1277        }
1278        return absolute.length == 1 ? '/' : absolute.join('/');
1279      },analyzePath:function (path, dontResolveLastLink, linksVisited) {
1280        var ret = {
1281          isRoot: false,
1282          exists: false,
1283          error: 0,
1284          name: null,
1285          path: null,
1286          object: null,
1287          parentExists: false,
1288          parentPath: null,
1289          parentObject: null
1290        };
1291        path = FS.absolutePath(path);
1292        if (path == '/') {
1293          ret.isRoot = true;
1294          ret.exists = ret.parentExists = true;
1295          ret.name = '/';
1296          ret.path = ret.parentPath = '/';
1297          ret.object = ret.parentObject = FS.root;
1298        } else if (path !== null) {
1299          linksVisited = linksVisited || 0;
1300          path = path.slice(1).split('/');
1301          var current = FS.root;
1302          var traversed = [''];
1303          while (path.length) {
1304            if (path.length == 1 && current.isFolder) {
1305              ret.parentExists = true;
1306              ret.parentPath = traversed.length == 1 ? '/' : traversed.join('/');
1307              ret.parentObject = current;
1308              ret.name = path[0];
1309            }
1310            var target = path.shift();
1311            if (!current.isFolder) {
1312              ret.error = ERRNO_CODES.ENOTDIR;
1313              break;
1314            } else if (!current.read) {
1315              ret.error = ERRNO_CODES.EACCES;
1316              break;
1317            } else if (!current.contents.hasOwnProperty(target)) {
1318              ret.error = ERRNO_CODES.ENOENT;
1319              break;
1320            }
1321            current = current.contents[target];
1322            if (current.link && !(dontResolveLastLink && path.length == 0)) {
1323              if (linksVisited > 40) { // Usual Linux SYMLOOP_MAX.
1324                ret.error = ERRNO_CODES.ELOOP;
1325                break;
1326              }
1327              var link = FS.absolutePath(current.link, traversed.join('/'));
1328              ret = FS.analyzePath([link].concat(path).join('/'),
1329                                   dontResolveLastLink, linksVisited + 1);
1330              return ret;
1331            }
1332            traversed.push(target);
1333            if (path.length == 0) {
1334              ret.exists = true;
1335              ret.path = traversed.join('/');
1336              ret.object = current;
1337            }
1338          }
1339        }
1340        return ret;
1341      },findObject:function (path, dontResolveLastLink) {
1342        FS.ensureRoot();
1343        var ret = FS.analyzePath(path, dontResolveLastLink);
1344        if (ret.exists) {
1345          return ret.object;
1346        } else {
1347          ___setErrNo(ret.error);
1348          return null;
1349        }
1350      },createObject:function (parent, name, properties, canRead, canWrite) {
1351        if (!parent) parent = '/';
1352        if (typeof parent === 'string') parent = FS.findObject(parent);
1353        if (!parent) {
1354          ___setErrNo(ERRNO_CODES.EACCES);
1355          throw new Error('Parent path must exist.');
1356        }
1357        if (!parent.isFolder) {
1358          ___setErrNo(ERRNO_CODES.ENOTDIR);
1359          throw new Error('Parent must be a folder.');
1360        }
1361        if (!parent.write && !FS.ignorePermissions) {
1362          ___setErrNo(ERRNO_CODES.EACCES);
1363          throw new Error('Parent folder must be writeable.');
1364        }
1365        if (!name || name == '.' || name == '..') {
1366          ___setErrNo(ERRNO_CODES.ENOENT);
1367          throw new Error('Name must not be empty.');
1368        }
1369        if (parent.contents.hasOwnProperty(name)) {
1370          ___setErrNo(ERRNO_CODES.EEXIST);
1371          throw new Error("Can't overwrite object.");
1372        }
1373        parent.contents[name] = {
1374          read: canRead === undefined ? true : canRead,
1375          write: canWrite === undefined ? false : canWrite,
1376          timestamp: Date.now(),
1377          inodeNumber: FS.nextInode++
1378        };
1379        for (var key in properties) {
1380          if (properties.hasOwnProperty(key)) {
1381            parent.contents[name][key] = properties[key];
1382          }
1383        }
1384        return parent.contents[name];
1385      },createFolder:function (parent, name, canRead, canWrite) {
1386        var properties = {isFolder: true, isDevice: false, contents: {}};
1387        return FS.createObject(parent, name, properties, canRead, canWrite);
1388      },createPath:function (parent, path, canRead, canWrite) {
1389        var current = FS.findObject(parent);
1390        if (current === null) throw new Error('Invalid parent.');
1391        path = path.split('/').reverse();
1392        while (path.length) {
1393          var part = path.pop();
1394          if (!part) continue;
1395          if (!current.contents.hasOwnProperty(part)) {
1396            FS.createFolder(current, part, canRead, canWrite);
1397          }
1398          current = current.contents[part];
1399        }
1400        return current;
1401      },createFile:function (parent, name, properties, canRead, canWrite) {
1402        properties.isFolder = false;
1403        return FS.createObject(parent, name, properties, canRead, canWrite);
1404      },createDataFile:function (parent, name, data, canRead, canWrite) {
1405        if (typeof data === 'string') {
1406          var dataArray = new Array(data.length);
1407          for (var i = 0, len = data.length; i < len; ++i) dataArray[i] = data.charCodeAt(i);
1408          data = dataArray;
1409        }
1410        var properties = {
1411          isDevice: false,
1412          contents: data.subarray ? data.subarray(0) : data // as an optimization, create a new array wrapper (not buffer) here, to help JS engines understand this object
1413        };
1414        return FS.createFile(parent, name, properties, canRead, canWrite);
1415      },createLazyFile:function (parent, name, url, canRead, canWrite) {
1416        if (typeof XMLHttpRequest !== 'undefined') {
1417          if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
1418          // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
1419          var LazyUint8Array = function() {
1420            this.lengthKnown = false;
1421            this.chunks = []; // Loaded chunks. Index is the chunk number
1422          }
1423          LazyUint8Array.prototype.get = function(idx) {
1424            if (idx > this.length-1 || idx < 0) {
1425              return undefined;
1426            }
1427            var chunkOffset = idx % this.chunkSize;
1428            var chunkNum = Math.floor(idx / this.chunkSize);
1429            return this.getter(chunkNum)[chunkOffset];
1430          }
1431          LazyUint8Array.prototype.setDataGetter = function(getter) {
1432            this.getter = getter;
1433          }
1434          LazyUint8Array.prototype.cacheLength = function() {
1435              // Find length
1436              var xhr = new XMLHttpRequest();
1437              xhr.open('HEAD', url, false);
1438              xhr.send(null);
1439              if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
1440              var datalength = Number(xhr.getResponseHeader("Content-length"));
1441              var header;
1442              var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
1443              var chunkSize = 1024*1024; // Chunk size in bytes
1444              if (!hasByteServing) chunkSize = datalength;
1445              // Function to get a range from the remote URL.
1446              var doXHR = (function(from, to) {
1447                if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
1448                if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
1449                // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
1450                var xhr = new XMLHttpRequest();
1451                xhr.open('GET', url, false);
1452                if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
1453                // Some hints to the browser that we want binary data.
1454                if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
1455                if (xhr.overrideMimeType) {
1456                  xhr.overrideMimeType('text/plain; charset=x-user-defined');
1457                }
1458                xhr.send(null);
1459                if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
1460                if (xhr.response !== undefined) {
1461                  return new Uint8Array(xhr.response || []);
1462                } else {
1463                  return intArrayFromString(xhr.responseText || '', true);
1464                }
1465              });
1466              var lazyArray = this;
1467              lazyArray.setDataGetter(function(chunkNum) {
1468                var start = chunkNum * chunkSize;
1469                var end = (chunkNum+1) * chunkSize - 1; // including this byte
1470                end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
1471                if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
1472                  lazyArray.chunks[chunkNum] = doXHR(start, end);
1473                }
1474                if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
1475                return lazyArray.chunks[chunkNum];
1476              });
1477              this._length = datalength;
1478              this._chunkSize = chunkSize;
1479              this.lengthKnown = true;
1480          }
1481          var lazyArray = new LazyUint8Array();
1482          Object.defineProperty(lazyArray, "length", {
1483              get: function() {
1484                  if(!this.lengthKnown) {
1485                      this.cacheLength();
1486                  }
1487                  return this._length;
1488              }
1489          });
1490          Object.defineProperty(lazyArray, "chunkSize", {
1491              get: function() {
1492                  if(!this.lengthKnown) {
1493                      this.cacheLength();
1494                  }
1495                  return this._chunkSize;
1496              }
1497          });
1498          var properties = { isDevice: false, contents: lazyArray };
1499        } else {
1500          var properties = { isDevice: false, url: url };
1501        }
1502        return FS.createFile(parent, name, properties, canRead, canWrite);
1503      },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile) {
1504        Browser.init();
1505        var fullname = FS.joinPath([parent, name], true);
1506        function processData(byteArray) {
1507          function finish(byteArray) {
1508            if (!dontCreateFile) {
1509              FS.createDataFile(parent, name, byteArray, canRead, canWrite);
1510            }
1511            if (onload) onload();
1512            removeRunDependency('cp ' + fullname);
1513          }
1514          var handled = false;
1515          Module['preloadPlugins'].forEach(function(plugin) {
1516            if (handled) return;
1517            if (plugin['canHandle'](fullname)) {
1518              plugin['handle'](byteArray, fullname, finish, function() {
1519                if (onerror) onerror();
1520                removeRunDependency('cp ' + fullname);
1521              });
1522              handled = true;
1523            }
1524          });
1525          if (!handled) finish(byteArray);
1526        }
1527        addRunDependency('cp ' + fullname);
1528        if (typeof url == 'string') {
1529          Browser.asyncLoad(url, function(byteArray) {
1530            processData(byteArray);
1531          }, onerror);
1532        } else {
1533          processData(url);
1534        }
1535      },createLink:function (parent, name, target, canRead, canWrite) {
1536        var properties = {isDevice: false, link: target};
1537        return FS.createFile(parent, name, properties, canRead, canWrite);
1538      },createDevice:function (parent, name, input, output) {
1539        if (!(input || output)) {
1540          throw new Error('A device must have at least one callback defined.');
1541        }
1542        var ops = {isDevice: true, input: input, output: output};
1543        return FS.createFile(parent, name, ops, Boolean(input), Boolean(output));
1544      },forceLoadFile:function (obj) {
1545        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
1546        var success = true;
1547        if (typeof XMLHttpRequest !== 'undefined') {
1548          throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
1549        } else if (Module['read']) {
1550          // Command-line.
1551          try {
1552            // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
1553            //          read() will try to parse UTF8.
1554            obj.contents = intArrayFromString(Module['read'](obj.url), true);
1555          } catch (e) {
1556            success = false;
1557          }
1558        } else {
1559          throw new Error('Cannot load without read() or XMLHttpRequest.');
1560        }
1561        if (!success) ___setErrNo(ERRNO_CODES.EIO);
1562        return success;
1563      },ensureRoot:function () {
1564        if (FS.root) return;
1565        // The main file system tree. All the contents are inside this.
1566        FS.root = {
1567          read: true,
1568          write: true,
1569          isFolder: true,
1570          isDevice: false,
1571          timestamp: Date.now(),
1572          inodeNumber: 1,
1573          contents: {}
1574        };
1575      },init:function (input, output, error) {
1576        // Make sure we initialize only once.
1577        assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
1578        FS.init.initialized = true;
1579        FS.ensureRoot();
1580        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
1581        input = input || Module['stdin'];
1582        output = output || Module['stdout'];
1583        error = error || Module['stderr'];
1584        // Default handlers.
1585        var stdinOverridden = true, stdoutOverridden = true, stderrOverridden = true;
1586        if (!input) {
1587          stdinOverridden = false;
1588          input = function() {
1589            if (!input.cache || !input.cache.length) {
1590              var result;
1591              if (typeof window != 'undefined' &&
1592                  typeof window.prompt == 'function') {
1593                // Browser.
1594                result = window.prompt('Input: ');
1595                if (result === null) result = String.fromCharCode(0); // cancel ==> EOF
1596              } else if (typeof readline == 'function') {
1597                // Command line.
1598                result = readline();
1599              }
1600              if (!result) result = '';
1601              input.cache = intArrayFromString(result + '\n', true);
1602            }
1603            return input.cache.shift();
1604          };
1605        }
1606        var utf8 = new Runtime.UTF8Processor();
1607        function simpleOutput(val) {
1608          if (val === null || val === 10) {
1609            output.printer(output.buffer.join(''));
1610            output.buffer = [];
1611          } else {
1612            output.buffer.push(utf8.processCChar(val));
1613          }
1614        }
1615        if (!output) {
1616          stdoutOverridden = false;
1617          output = simpleOutput;
1618        }
1619        if (!output.printer) output.printer = Module['print'];
1620        if (!output.buffer) output.buffer = [];
1621        if (!error) {
1622          stderrOverridden = false;
1623          error = simpleOutput;
1624        }
1625        if (!error.printer) error.printer = Module['print'];
1626        if (!error.buffer) error.buffer = [];
1627        // Create the temporary folder, if not already created
1628        try {
1629          FS.createFolder('/', 'tmp', true, true);
1630        } catch(e) {}
1631        // Create the I/O devices.
1632        var devFolder = FS.createFolder('/', 'dev', true, true);
1633        var stdin = FS.createDevice(devFolder, 'stdin', input);
1634        var stdout = FS.createDevice(devFolder, 'stdout', null, output);
1635        var stderr = FS.createDevice(devFolder, 'stderr', null, error);
1636        FS.createDevice(devFolder, 'tty', input, output);
1637        FS.createDevice(devFolder, 'null', function(){}, function(){});
1638        // Create default streams.
1639        FS.streams[1] = {
1640          path: '/dev/stdin',
1641          object: stdin,
1642          position: 0,
1643          isRead: true,
1644          isWrite: false,
1645          isAppend: false,
1646          isTerminal: !stdinOverridden,
1647          error: false,
1648          eof: false,
1649          ungotten: []
1650        };
1651        FS.streams[2] = {
1652          path: '/dev/stdout',
1653          object: stdout,
1654          position: 0,
1655          isRead: false,
1656          isWrite: true,
1657          isAppend: false,
1658          isTerminal: !stdoutOverridden,
1659          error: false,
1660          eof: false,
1661          ungotten: []
1662        };
1663        FS.streams[3] = {
1664          path: '/dev/stderr',
1665          object: stderr,
1666          position: 0,
1667          isRead: false,
1668          isWrite: true,
1669          isAppend: false,
1670          isTerminal: !stderrOverridden,
1671          error: false,
1672          eof: false,
1673          ungotten: []
1674        };
1675        // TODO: put these low in memory like we used to assert on: assert(Math.max(_stdin, _stdout, _stderr) < 15000); // make sure these are low, we flatten arrays with these
1676        HEAP32[((_stdin)>>2)]=1;
1677        HEAP32[((_stdout)>>2)]=2;
1678        HEAP32[((_stderr)>>2)]=3;
1679        // Other system paths
1680        FS.createPath('/', 'dev/shm/tmp', true, true); // temp files
1681        // Newlib initialization
1682        for (var i = FS.streams.length; i < Math.max(_stdin, _stdout, _stderr) + 4; i++) {
1683          FS.streams[i] = null; // Make sure to keep FS.streams dense
1684        }
1685        FS.streams[_stdin] = FS.streams[1];
1686        FS.streams[_stdout] = FS.streams[2];
1687        FS.streams[_stderr] = FS.streams[3];
1688        allocate([ allocate(
1689          [0, 0, 0, 0, _stdin, 0, 0, 0, _stdout, 0, 0, 0, _stderr, 0, 0, 0],
1690          'void*', ALLOC_NORMAL) ], 'void*', ALLOC_NONE, __impure_ptr);
1691      },quit:function () {
1692        if (!FS.init.initialized) return;
1693        // Flush any partially-printed lines in stdout and stderr. Careful, they may have been closed
1694        if (FS.streams[2] && FS.streams[2].object.output.buffer.length > 0) FS.streams[2].object.output(10);
1695        if (FS.streams[3] && FS.streams[3].object.output.buffer.length > 0) FS.streams[3].object.output(10);
1696      },standardizePath:function (path) {
1697        if (path.substr(0, 2) == './') path = path.substr(2);
1698        return path;
1699      },deleteFile:function (path) {
1700        path = FS.analyzePath(path);
1701        if (!path.parentExists || !path.exists) {
1702          throw 'Invalid path ' + path;
1703        }
1704        delete path.parentObject.contents[path.name];
1705      }};
1706  function _send(fd, buf, len, flags) {
1707      var info = FS.streams[fd];
1708      if (!info) return -1;
1709      info.sender(HEAPU8.subarray(buf, buf+len));
1710      return len;
1711    }
1712  function _pwrite(fildes, buf, nbyte, offset) {
1713      // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
1714      // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
1715      var stream = FS.streams[fildes];
1716      if (!stream || stream.object.isDevice) {
1717        ___setErrNo(ERRNO_CODES.EBADF);
1718        return -1;
1719      } else if (!stream.isWrite) {
1720        ___setErrNo(ERRNO_CODES.EACCES);
1721        return -1;
1722      } else if (stream.object.isFolder) {
1723        ___setErrNo(ERRNO_CODES.EISDIR);
1724        return -1;
1725      } else if (nbyte < 0 || offset < 0) {
1726        ___setErrNo(ERRNO_CODES.EINVAL);
1727        return -1;
1728      } else {
1729        var contents = stream.object.contents;
1730        while (contents.length < offset) contents.push(0);
1731        for (var i = 0; i < nbyte; i++) {
1732          contents[offset + i] = HEAPU8[(((buf)+(i))|0)];
1733        }
1734        stream.object.timestamp = Date.now();
1735        return i;
1736      }
1737    }function _write(fildes, buf, nbyte) {
1738      // ssize_t write(int fildes, const void *buf, size_t nbyte);
1739      // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
1740      var stream = FS.streams[fildes];
1741      if (stream && ('socket' in stream)) {
1742          return _send(fildes, buf, nbyte, 0);
1743      } else if (!stream) {
1744        ___setErrNo(ERRNO_CODES.EBADF);
1745        return -1;
1746      } else if (!stream.isWrite) {
1747        ___setErrNo(ERRNO_CODES.EACCES);
1748        return -1;
1749      } else if (nbyte < 0) {
1750        ___setErrNo(ERRNO_CODES.EINVAL);
1751        return -1;
1752      } else {
1753        if (stream.object.isDevice) {
1754          if (stream.object.output) {
1755            for (var i = 0; i < nbyte; i++) {
1756              try {
1757                stream.object.output(HEAP8[(((buf)+(i))|0)]);
1758              } catch (e) {
1759                ___setErrNo(ERRNO_CODES.EIO);
1760                return -1;
1761              }
1762            }
1763            stream.object.timestamp = Date.now();
1764            return i;
1765          } else {
1766            ___setErrNo(ERRNO_CODES.ENXIO);
1767            return -1;
1768          }
1769        } else {
1770          var bytesWritten = _pwrite(fildes, buf, nbyte, stream.position);
1771          if (bytesWritten != -1) stream.position += bytesWritten;
1772          return bytesWritten;
1773        }
1774      }
1775    }function _fwrite(ptr, size, nitems, stream) {
1776      // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
1777      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
1778      var bytesToWrite = nitems * size;
1779      if (bytesToWrite == 0) return 0;
1780      var bytesWritten = _write(stream, ptr, bytesToWrite);
1781      if (bytesWritten == -1) {
1782        if (FS.streams[stream]) FS.streams[stream].error = true;
1783        return 0;
1784      } else {
1785        return Math.floor(bytesWritten / size);
1786      }
1787    }
1788  function __reallyNegative(x) {
1789      return x < 0 || (x === 0 && (1/x) === -Infinity);
1790    }function __formatString(format, varargs) {
1791      var textIndex = format;
1792      var argIndex = 0;
1793      function getNextArg(type) {
1794        // NOTE: Explicitly ignoring type safety. Otherwise this fails:
1795        //       int x = 4; printf("%c\n", (char)x);
1796        var ret;
1797        if (type === 'double') {
1798          ret = HEAPF64[(((varargs)+(argIndex))>>3)];
1799        } else if (type == 'i64') {
1800          ret = [HEAP32[(((varargs)+(argIndex))>>2)],
1801                 HEAP32[(((varargs)+(argIndex+8))>>2)]];
1802          argIndex += 8; // each 32-bit chunk is in a 64-bit block
1803        } else {
1804          type = 'i32'; // varargs are always i32, i64, or double
1805          ret = HEAP32[(((varargs)+(argIndex))>>2)];
1806        }
1807        argIndex += Math.max(Runtime.getNativeFieldSize(type), Runtime.getAlignSize(type, null, true));
1808        return ret;
1809      }
1810      var ret = [];
1811      var curr, next, currArg;
1812      while(1) {
1813        var startTextIndex = textIndex;
1814        curr = HEAP8[(textIndex)];
1815        if (curr === 0) break;
1816        next = HEAP8[((textIndex+1)|0)];
1817        if (curr == 37) {
1818          // Handle flags.
1819          var flagAlwaysSigned = false;
1820          var flagLeftAlign = false;
1821          var flagAlternative = false;
1822          var flagZeroPad = false;
1823          flagsLoop: while (1) {
1824            switch (next) {
1825              case 43:
1826                flagAlwaysSigned = true;
1827                break;
1828              case 45:
1829                flagLeftAlign = true;
1830                break;
1831              case 35:
1832                flagAlternative = true;
1833                break;
1834              case 48:
1835                if (flagZeroPad) {
1836                  break flagsLoop;
1837                } else {
1838                  flagZeroPad = true;
1839                  break;
1840                }
1841              default:
1842                break flagsLoop;
1843            }
1844            textIndex++;
1845            next = HEAP8[((textIndex+1)|0)];
1846          }
1847          // Handle width.
1848          var width = 0;
1849          if (next == 42) {
1850            width = getNextArg('i32');
1851            textIndex++;
1852            next = HEAP8[((textIndex+1)|0)];
1853          } else {
1854            while (next >= 48 && next <= 57) {
1855              width = width * 10 + (next - 48);
1856              textIndex++;
1857              next = HEAP8[((textIndex+1)|0)];
1858            }
1859          }
1860          // Handle precision.
1861          var precisionSet = false;
1862          if (next == 46) {
1863            var precision = 0;
1864            precisionSet = true;
1865            textIndex++;
1866            next = HEAP8[((textIndex+1)|0)];
1867            if (next == 42) {
1868              precision = getNextArg('i32');
1869              textIndex++;
1870            } else {
1871              while(1) {
1872                var precisionChr = HEAP8[((textIndex+1)|0)];
1873                if (precisionChr < 48 ||
1874                    precisionChr > 57) break;
1875                precision = precision * 10 + (precisionChr - 48);
1876                textIndex++;
1877              }
1878            }
1879            next = HEAP8[((textIndex+1)|0)];
1880          } else {
1881            var precision = 6; // Standard default.
1882          }
1883          // Handle integer sizes. WARNING: These assume a 32-bit architecture!
1884          var argSize;
1885          switch (String.fromCharCode(next)) {
1886            case 'h':
1887              var nextNext = HEAP8[((textIndex+2)|0)];
1888              if (nextNext == 104) {
1889                textIndex++;
1890                argSize = 1; // char (actually i32 in varargs)
1891              } else {
1892                argSize = 2; // short (actually i32 in varargs)
1893              }
1894              break;
1895            case 'l':
1896              var nextNext = HEAP8[((textIndex+2)|0)];
1897              if (nextNext == 108) {
1898                textIndex++;
1899                argSize = 8; // long long
1900              } else {
1901                argSize = 4; // long
1902              }
1903              break;
1904            case 'L': // long long
1905            case 'q': // int64_t
1906            case 'j': // intmax_t
1907              argSize = 8;
1908              break;
1909            case 'z': // size_t
1910            case 't': // ptrdiff_t
1911            case 'I': // signed ptrdiff_t or unsigned size_t
1912              argSize = 4;
1913              break;
1914            default:
1915              argSize = null;
1916          }
1917          if (argSize) textIndex++;
1918          next = HEAP8[((textIndex+1)|0)];
1919          // Handle type specifier.
1920          switch (String.fromCharCode(next)) {
1921            case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
1922              // Integer.
1923              var signed = next == 100 || next == 105;
1924              argSize = argSize || 4;
1925              var currArg = getNextArg('i' + (argSize * 8));
1926              var origArg = currArg;
1927              var argText;
1928              // Flatten i64-1 [low, high] into a (slightly rounded) double
1929              if (argSize == 8) {
1930                currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
1931              }
1932              // Truncate to requested size.
1933              if (argSize <= 4) {
1934                var limit = Math.pow(256, argSize) - 1;
1935                currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
1936              }
1937              // Format the number.
1938              var currAbsArg = Math.abs(currArg);
1939              var prefix = '';
1940              if (next == 100 || next == 105) {
1941                if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else
1942                argText = reSign(currArg, 8 * argSize, 1).toString(10);
1943              } else if (next == 117) {
1944                if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else
1945                argText = unSign(currArg, 8 * argSize, 1).toString(10);
1946                currArg = Math.abs(currArg);
1947              } else if (next == 111) {
1948                argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
1949              } else if (next == 120 || next == 88) {
1950                prefix = (flagAlternative && currArg != 0) ? '0x' : '';
1951                if (argSize == 8 && i64Math) {
1952                  if (origArg[1]) {
1953                    argText = (origArg[1]>>>0).toString(16);
1954                    var lower = (origArg[0]>>>0).toString(16);
1955                    while (lower.length < 8) lower = '0' + lower;
1956                    argText += lower;
1957                  } else {
1958                    argText = (origArg[0]>>>0).toString(16);
1959                  }
1960                } else
1961                if (currArg < 0) {
1962                  // Represent negative numbers in hex as 2's complement.
1963                  currArg = -currArg;
1964                  argText = (currAbsArg - 1).toString(16);
1965                  var buffer = [];
1966                  for (var i = 0; i < argText.length; i++) {
1967                    buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
1968                  }
1969                  argText = buffer.join('');
1970                  while (argText.length < argSize * 2) argText = 'f' + argText;
1971                } else {
1972                  argText = currAbsArg.toString(16);
1973                }
1974                if (next == 88) {
1975                  prefix = prefix.toUpperCase();
1976                  argText = argText.toUpperCase();
1977                }
1978              } else if (next == 112) {
1979                if (currAbsArg === 0) {
1980                  argText = '(nil)';
1981                } else {
1982                  prefix = '0x';
1983                  argText = currAbsArg.toString(16);
1984                }
1985              }
1986              if (precisionSet) {
1987                while (argText.length < precision) {
1988                  argText = '0' + argText;
1989                }
1990              }
1991              // Add sign if needed
1992              if (flagAlwaysSigned) {
1993                if (currArg < 0) {
1994                  prefix = '-' + prefix;
1995                } else {
1996                  prefix = '+' + prefix;
1997                }
1998              }
1999              // Add padding.
2000              while (prefix.length + argText.length < width) {
2001                if (flagLeftAlign) {
2002                  argText += ' ';
2003                } else {
2004                  if (flagZeroPad) {
2005                    argText = '0' + argText;
2006                  } else {
2007                    prefix = ' ' + prefix;
2008                  }
2009                }
2010              }
2011              // Insert the result into the buffer.
2012              argText = prefix + argText;
2013              argText.split('').forEach(function(chr) {
2014                ret.push(chr.charCodeAt(0));
2015              });
2016              break;
2017            }
2018            case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
2019              // Float.
2020              var currArg = getNextArg('double');
2021              var argText;
2022              if (isNaN(currArg)) {
2023                argText = 'nan';
2024                flagZeroPad = false;
2025              } else if (!isFinite(currArg)) {
2026                argText = (currArg < 0 ? '-' : '') + 'inf';
2027                flagZeroPad = false;
2028              } else {
2029                var isGeneral = false;
2030                var effectivePrecision = Math.min(precision, 20);
2031                // Convert g/G to f/F or e/E, as per:
2032                // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
2033                if (next == 103 || next == 71) {
2034                  isGeneral = true;
2035                  precision = precision || 1;
2036                  var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
2037                  if (precision > exponent && exponent >= -4) {
2038                    next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
2039                    precision -= exponent + 1;
2040                  } else {
2041                    next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
2042                    precision--;
2043                  }
2044                  effectivePrecision = Math.min(precision, 20);
2045                }
2046                if (next == 101 || next == 69) {
2047                  argText = currArg.toExponential(effectivePrecision);
2048                  // Make sure the exponent has at least 2 digits.
2049                  if (/[eE][-+]\d$/.test(argText)) {
2050                    argText = argText.slice(0, -1) + '0' + argText.slice(-1);
2051                  }
2052                } else if (next == 102 || next == 70) {
2053                  argText = currArg.toFixed(effectivePrecision);
2054                  if (currArg === 0 && __reallyNegative(currArg)) {
2055                    argText = '-' + argText;
2056                  }
2057                }
2058                var parts = argText.split('e');
2059                if (isGeneral && !flagAlternative) {
2060                  // Discard trailing zeros and periods.
2061                  while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
2062                         (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
2063                    parts[0] = parts[0].slice(0, -1);
2064                  }
2065                } else {
2066                  // Make sure we have a period in alternative mode.
2067                  if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
2068                  // Zero pad until required precision.
2069                  while (precision > effectivePrecision++) parts[0] += '0';
2070                }
2071                argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
2072                // Capitalize 'E' if needed.
2073                if (next == 69) argText = argText.toUpperCase();
2074                // Add sign.
2075                if (flagAlwaysSigned && currArg >= 0) {
2076                  argText = '+' + argText;
2077                }
2078              }
2079              // Add padding.
2080              while (argText.length < width) {
2081                if (flagLeftAlign) {
2082                  argText += ' ';
2083                } else {
2084                  if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
2085                    argText = argText[0] + '0' + argText.slice(1);
2086                  } else {
2087                    argText = (flagZeroPad ? '0' : ' ') + argText;
2088                  }
2089                }
2090              }
2091              // Adjust case.
2092              if (next < 97) argText = argText.toUpperCase();
2093              // Insert the result into the buffer.
2094              argText.split('').forEach(function(chr) {
2095                ret.push(chr.charCodeAt(0));
2096              });
2097              break;
2098            }
2099            case 's': {
2100              // String.
2101              var arg = getNextArg('i8*');
2102              var argLength = arg ? _strlen(arg) : '(null)'.length;
2103              if (precisionSet) argLength = Math.min(argLength, precision);
2104              if (!flagLeftAlign) {
2105                while (argLength < width--) {
2106                  ret.push(32);
2107                }
2108              }
2109              if (arg) {
2110                for (var i = 0; i < argLength; i++) {
2111                  ret.push(HEAPU8[((arg++)|0)]);
2112                }
2113              } else {
2114                ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
2115              }
2116              if (flagLeftAlign) {
2117                while (argLength < width--) {
2118                  ret.push(32);
2119                }
2120              }
2121              break;
2122            }
2123            case 'c': {
2124              // Character.
2125              if (flagLeftAlign) ret.push(getNextArg('i8'));
2126              while (--width > 0) {
2127                ret.push(32);
2128              }
2129              if (!flagLeftAlign) ret.push(getNextArg('i8'));
2130              break;
2131            }
2132            case 'n': {
2133              // Write the length written so far to the next parameter.
2134              var ptr = getNextArg('i32*');
2135              HEAP32[((ptr)>>2)]=ret.length
2136              break;
2137            }
2138            case '%': {
2139              // Literal percent sign.
2140              ret.push(curr);
2141              break;
2142            }
2143            default: {
2144              // Unknown specifiers remain untouched.
2145              for (var i = startTextIndex; i < textIndex + 2; i++) {
2146                ret.push(HEAP8[(i)]);
2147              }
2148            }
2149          }
2150          textIndex += 2;
2151          // TODO: Support a/A (hex float) and m (last error) specifiers.
2152          // TODO: Support %1${specifier} for arg selection.
2153        } else {
2154          ret.push(curr);
2155          textIndex += 1;
2156        }
2157      }
2158      return ret;
2159    }function _fprintf(stream, format, varargs) {
2160      // int fprintf(FILE *restrict stream, const char *restrict format, ...);
2161      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
2162      var result = __formatString(format, varargs);
2163      var stack = Runtime.stackSave();
2164      var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
2165      Runtime.stackRestore(stack);
2166      return ret;
2167    }
2168  function _vfprintf(s, f, va_arg) {
2169      return _fprintf(s, f, HEAP32[((va_arg)>>2)]);
2170    }
2171  function _llvm_umul_with_overflow_i32(x, y) {
2172      x = x>>>0;
2173      y = y>>>0;
2174      return ((asm["setTempRet0"](x*y > 4294967295),(x*y)>>>0)|0);
2175    }
2176  var _atan2f=Math.atan2;
2177  var _asinf=Math.asin;
2178  var _sqrtf=Math.sqrt;
2179  var _sqrt=Math.sqrt;
2180  Module["_memcmp"] = _memcmp;
2181  var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],currArrayBuffer:0,currElementArrayBuffer:0,byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],uniformTable:{},packAlignment:4,unpackAlignment:4,init:function () {
2182        Browser.moduleContextCreatedCallbacks.push(GL.initExtensions);
2183      },getNewId:function (table) {
2184        var ret = GL.counter++;
2185        for (var i = table.length; i < ret; i++) {
2186          table[i] = null;
2187        }
2188        return ret;
2189      },MINI_TEMP_BUFFER_SIZE:16,miniTempBuffer:null,miniTempBufferViews:[0],MAX_TEMP_BUFFER_SIZE:2097152,tempBufferIndexLookup:null,tempVertexBuffers:null,tempIndexBuffers:null,tempQuadIndexBuffer:null,generateTempBuffers:function (quads) {
2190        GL.tempBufferIndexLookup = new Uint8Array(GL.MAX_TEMP_BUFFER_SIZE+1);
2191        GL.tempVertexBuffers = [];
2192        GL.tempIndexBuffers = [];
2193        var last = -1, curr = -1;
2194        var size = 1;
2195        for (var i = 0; i <= GL.MAX_TEMP_BUFFER_SIZE; i++) {
2196          if (i > size) {
2197            size <<= 1;
2198          }
2199          if (size != last) {
2200            curr++;
2201            GL.tempVertexBuffers[curr] = Module.ctx.createBuffer();
2202            Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, GL.tempVertexBuffers[curr]);
2203            Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW);
2204            Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, null);
2205            GL.tempIndexBuffers[curr] = Module.ctx.createBuffer();
2206            Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, GL.tempIndexBuffers[curr]);
2207            Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW);
2208            Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null);
2209            last = size;
2210          }
2211          GL.tempBufferIndexLookup[i] = curr;
2212        }
2213        if (quads) {
2214          // GL_QUAD indexes can be precalculated
2215          GL.tempQuadIndexBuffer = Module.ctx.createBuffer();
2216          Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, GL.tempQuadIndexBuffer);
2217          var numIndexes = GL.MAX_TEMP_BUFFER_SIZE >> 1;
2218          var quadIndexes = new Uint16Array(numIndexes);
2219          var i = 0, v = 0;
2220          while (1) {
2221            quadIndexes[i++] = v;
2222            if (i >= numIndexes) break;
2223            quadIndexes[i++] = v+1;
2224            if (i >= numIndexes) break;
2225            quadIndexes[i++] = v+2;
2226            if (i >= numIndexes) break;
2227            quadIndexes[i++] = v;
2228            if (i >= numIndexes) break;
2229            quadIndexes[i++] = v+2;
2230            if (i >= numIndexes) break;
2231            quadIndexes[i++] = v+3;
2232            if (i >= numIndexes) break;
2233            v += 4;
2234          }
2235          Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, quadIndexes, Module.ctx.STATIC_DRAW);
2236          Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null);
2237        }
2238      },scan:function (table, object) {
2239        for (var item in table) {
2240          if (table[item] == object) return item;
2241        }
2242        return 0;
2243      },findToken:function (source, token) {
2244        function isIdentChar(ch) {
2245          if (ch >= 48 && ch <= 57) // 0-9
2246            return true;
2247          if (ch >= 65 && ch <= 90) // A-Z
2248            return true;
2249          if (ch >= 97 && ch <= 122) // a-z
2250            return true;
2251          return false;
2252        }
2253        var i = -1;
2254        do {
2255          i = source.indexOf(token, i + 1);
2256          if (i < 0) {
2257            break;
2258          }
2259          if (i > 0 && isIdentChar(source[i - 1])) {
2260            continue;
2261          }
2262          i += token.length;
2263          if (i < source.length - 1 && isIdentChar(source[i + 1])) {
2264            continue;
2265          }
2266          return true;
2267        } while (true);
2268        return false;
2269      },getSource:function (shader, count, string, length) {
2270        var source = '';
2271        for (var i = 0; i < count; ++i) {
2272          var frag;
2273          if (length) {
2274            var len = HEAP32[(((length)+(i*4))>>2)];
2275            if (len < 0) {
2276              frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]);
2277            } else {
2278              frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)], len);
2279            }
2280          } else {
2281            frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]);
2282          }
2283          source += frag;
2284        }
2285        // Let's see if we need to enable the standard derivatives extension
2286        type = Module.ctx.getShaderParameter(GL.shaders[shader], 0x8B4F /* GL_SHADER_TYPE */);
2287        if (type == 0x8B30 /* GL_FRAGMENT_SHADER */) {
2288          if (GL.findToken(source, "dFdx") ||
2289              GL.findToken(source, "dFdy") ||
2290              GL.findToken(source, "fwidth")) {
2291            source = "#extension GL_OES_standard_derivatives : enable\n" + source;
2292            var extension = Module.ctx.getExtension("OES_standard_derivatives");
2293          }
2294        }
2295        return source;
2296      },computeImageSize:function (width, height, sizePerPixel, alignment) {
2297        function roundedToNextMultipleOf(x, y) {
2298          return Math.floor((x + y - 1) / y) * y
2299        }
2300        var plainRowSize = width * sizePerPixel;
2301        var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment);
2302        return (height <= 0) ? 0 :
2303                 ((height - 1) * alignedRowSize + plainRowSize);
2304      },getTexPixelData:function (type, format, width, height, pixels, internalFormat) {
2305        var sizePerPixel;
2306        switch (type) {
2307          case 0x1401 /* GL_UNSIGNED_BYTE */:
2308            switch (format) {
2309              case 0x1906 /* GL_ALPHA */:
2310              case 0x1909 /* GL_LUMINANCE */:
2311                sizePerPixel = 1;
2312                break;
2313              case 0x1907 /* GL_RGB */:
2314                sizePerPixel = 3;
2315                break;
2316              case 0x1908 /* GL_RGBA */:
2317                sizePerPixel = 4;
2318                break;
2319              case 0x190A /* GL_LUMINANCE_ALPHA */:
2320                sizePerPixel = 2;
2321                break;
2322              default:
2323                throw 'Invalid format (' + format + ')';
2324            }
2325            break;
2326          case 0x8363 /* GL_UNSIGNED_SHORT_5_6_5 */:
2327          case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4 */:
2328          case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1 */:
2329            sizePerPixel = 2;
2330            break;
2331          case 0x1406 /* GL_FLOAT */:
2332            assert(GL.floatExt, 'Must have OES_texture_float to use float textures');
2333            switch (format) {
2334              case 0x1907 /* GL_RGB */:
2335                sizePerPixel = 3*4;
2336                break;
2337              case 0x1908 /* GL_RGBA */:
2338                sizePerPixel = 4*4;
2339                break;
2340              default:
2341                throw 'Invalid format (' + format + ')';
2342            }
2343            internalFormat = Module.ctx.RGBA;
2344            break;
2345          default:
2346            throw 'Invalid type (' + type + ')';
2347        }
2348        var bytes = GL.computeImageSize(width, height, sizePerPixel, GL.unpackAlignment);
2349        if (type == 0x1401 /* GL_UNSIGNED_BYTE */) {
2350          pixels = HEAPU8.subarray((pixels),(pixels+bytes));
2351        } else if (type == 0x1406 /* GL_FLOAT */) {
2352          pixels = HEAPF32.subarray((pixels)>>2,(pixels+bytes)>>2);
2353        } else {
2354          pixels = HEAPU16.subarray((pixels)>>1,(pixels+bytes)>>1);
2355        }
2356        return {
2357          pixels: pixels,
2358          internalFormat: internalFormat
2359        }
2360      },initExtensions:function () {
2361        if (GL.initExtensions.done) return;
2362        GL.initExtensions.done = true;
2363        if (!Module.useWebGL) return; // an app might link both gl and 2d backends
2364        GL.miniTempBuffer = new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);
2365        for (var i = 0; i < GL.MINI_TEMP_BUFFER_SIZE; i++) {
2366          GL.miniTempBufferViews[i] = GL.miniTempBuffer.subarray(0, i+1);
2367        }
2368        GL.maxVertexAttribs = Module.ctx.getParameter(Module.ctx.MAX_VERTEX_ATTRIBS);
2369        GL.compressionExt = Module.ctx.getExtension('WEBGL_compressed_texture_s3tc') ||
2370                            Module.ctx.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||
2371                            Module.ctx.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');
2372        GL.anisotropicExt = Module.ctx.getExtension('EXT_texture_filter_anisotropic') ||
2373                            Module.ctx.getExtension('MOZ_EXT_texture_filter_anisotropic') ||
2374                            Module.ctx.getExtension('WEBKIT_EXT_texture_filter_anisotropic');
2375        GL.floatExt = Module.ctx.getExtension('OES_texture_float');
2376        GL.elementIndexUintExt = Module.ctx.getExtension('OES_element_index_uint');
2377        GL.standardDerivativesExt = Module.ctx.getExtension('OES_standard_derivatives');
2378      }};function _glGenFramebuffers(n, ids) {
2379      for (var i = 0; i < n; ++i) {
2380        var id = GL.getNewId(GL.framebuffers);
2381        GL.framebuffers[id] = Module.ctx.createFramebuffer();
2382        HEAP32[(((ids)+(i*4))>>2)]=id;
2383      }
2384    }
2385  function _glBindFramebuffer(target, framebuffer) {
2386      Module.ctx.bindFramebuffer(target, framebuffer ? GL.framebuffers[framebuffer] : null);
2387    }
2388  function _glGenTextures(n, textures) {
2389      for (var i = 0; i < n; i++) {
2390        var id = GL.getNewId(GL.textures);
2391        GL.textures[id] = Module.ctx.createTexture();
2392        HEAP32[(((textures)+(i*4))>>2)]=id;
2393      }
2394    }
2395  function _glActiveTexture(x0) { Module.ctx.activeTexture(x0) }
2396  function _glBindTexture(target, texture) {
2397      Module.ctx.bindTexture(target, texture ? GL.textures[texture] : null);
2398    }
2399  function _glTexParameteri(x0, x1, x2) { Module.ctx.texParameteri(x0, x1, x2) }
2400  function _glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels) {
2401      if (pixels) {
2402        var data = GL.getTexPixelData(type, format, width, height, pixels, internalFormat);
2403        pixels = data.pixels;
2404        internalFormat = data.internalFormat;
2405      } else {
2406        pixels = null;
2407      }
2408      Module.ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels);
2409    }
2410  function _glFramebufferTexture2D(target, attachment, textarget, texture, level) {
2411      Module.ctx.framebufferTexture2D(target, attachment, textarget,
2412                                      GL.textures[texture], level);
2413    }
2414  function _glGenRenderbuffers(n, renderbuffers) {
2415      for (var i = 0; i < n; i++) {
2416        var id = GL.getNewId(GL.renderbuffers);
2417        GL.renderbuffers[id] = Module.ctx.createRenderbuffer();
2418        HEAP32[(((renderbuffers)+(i*4))>>2)]=id;
2419      }
2420    }
2421  function _glBindRenderbuffer(target, renderbuffer) {
2422      Module.ctx.bindRenderbuffer(target, renderbuffer ? GL.renderbuffers[renderbuffer] : null);
2423    }
2424  function _glRenderbufferStorage(x0, x1, x2, x3) { Module.ctx.renderbufferStorage(x0, x1, x2, x3) }
2425  function _glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) {
2426      Module.ctx.framebufferRenderbuffer(target, attachment, renderbuffertarget,
2427                                         GL.renderbuffers[renderbuffer]);
2428    }
2429  function _glCheckFramebufferStatus(x0) { return Module.ctx.checkFramebufferStatus(x0) }
2430  function _glDeleteTextures(n, textures) {
2431      for (var i = 0; i < n; i++) {
2432        var id = HEAP32[(((textures)+(i*4))>>2)];
2433        Module.ctx.deleteTexture(GL.textures[id]);
2434        GL.textures[id] = null;
2435      }
2436    }
2437  function _glGenBuffers(n, buffers) {
2438      for (var i = 0; i < n; i++) {
2439        var id = GL.getNewId(GL.buffers);
2440        GL.buffers[id] = Module.ctx.createBuffer();
2441        HEAP32[(((buffers)+(i*4))>>2)]=id;
2442      }
2443    }
2444  function _glDeleteBuffers(n, buffers) {
2445      for (var i = 0; i < n; i++) {
2446        var id = HEAP32[(((buffers)+(i*4))>>2)];
2447        Module.ctx.deleteBuffer(GL.buffers[id]);
2448        GL.buffers[id] = null;
2449        if (id == GL.currArrayBuffer) GL.currArrayBuffer = 0;
2450        if (id == GL.currElementArrayBuffer) GL.currElementArrayBuffer = 0;
2451      }
2452    }
2453  function _glBindBuffer(target, buffer) {
2454      var bufferObj = buffer ? GL.buffers[buffer] : null;
2455      if (target == Module.ctx.ARRAY_BUFFER) {
2456        GL.currArrayBuffer = buffer;
2457      } else if (target == Module.ctx.ELEMENT_ARRAY_BUFFER) {
2458        GL.currElementArrayBuffer = buffer;
2459      }
2460      Module.ctx.bindBuffer(target, bufferObj);
2461    }
2462  function _glBufferData(target, size, data, usage) {
2463      Module.ctx.bufferData(target, HEAPU8.subarray(data, data+size), usage);
2464    }
2465  function _glClear(x0) { Module.ctx.clear(x0) }
2466  function _glViewport(x0, x1, x2, x3) { Module.ctx.viewport(x0, x1, x2, x3) }
2467  function _glClearColor(x0, x1, x2, x3) { Module.ctx.clearColor(x0, x1, x2, x3) }
2468  function _glClearDepthf(x0) { Module.ctx.clearDepth(x0) }
2469  function _glDisable(x0) { Module.ctx.disable(x0) }
2470  function _glEnable(x0) { Module.ctx.enable(x0) }
2471  function _glBlendFunc(x0, x1) { Module.ctx.blendFunc(x0, x1) }
2472  function _glDepthFunc(x0) { Module.ctx.depthFunc(x0) }
2473  function _glCullFace(x0) { Module.ctx.cullFace(x0) }
2474  function _glFrontFace(x0) { Module.ctx.frontFace(x0) }
2475  function _strncmp(px, py, n) {
2476      var i = 0;
2477      while (i < n) {
2478        var x = HEAPU8[(((px)+(i))|0)];
2479        var y = HEAPU8[(((py)+(i))|0)];
2480        if (x == y && x == 0) return 0;
2481        if (x == 0) return -1;
2482        if (y == 0) return 1;
2483        if (x == y) {
2484          i ++;
2485          continue;
2486        } else {
2487          return x > y ? 1 : -1;
2488        }
2489      }
2490      return 0;
2491    }function _strcmp(px, py) {
2492      return _strncmp(px, py, TOTAL_MEMORY);
2493    }
2494  function _glCreateShader(shaderType) {
2495      var id = GL.getNewId(GL.shaders);
2496      GL.shaders[id] = Module.ctx.createShader(shaderType);
2497      return id;
2498    }
2499  function _glShaderSource(shader, count, string, length) {
2500      var source = GL.getSource(shader, count, string, length);
2501      Module.ctx.shaderSource(GL.shaders[shader], source);
2502    }
2503  function _glCompileShader(shader) {
2504      Module.ctx.compileShader(GL.shaders[shader]);
2505    }
2506  function _glGetShaderInfoLog(shader, maxLength, length, infoLog) {
2507      var log = Module.ctx.getShaderInfoLog(GL.shaders[shader]);
2508      // Work around a bug in Chromium which causes getShaderInfoLog to return null
2509      if (!log) {
2510        log = "";
2511      }
2512      log = log.substr(0, maxLength - 1);
2513      writeStringToMemory(log, infoLog);
2514      if (length) {
2515        HEAP32[((length)>>2)]=log.length
2516      }
2517    }
2518  function _glGetShaderiv(shader, pname, p) {
2519      if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH
2520        HEAP32[((p)>>2)]=Module.ctx.getShaderInfoLog(GL.shaders[shader]).length + 1;
2521      } else {
2522        HEAP32[((p)>>2)]=Module.ctx.getShaderParameter(GL.shaders[shader], pname);
2523      }
2524    }
2525  function _glCreateProgram() {
2526      var id = GL.getNewId(GL.programs);
2527      GL.programs[id] = Module.ctx.createProgram();
2528      return id;
2529    }
2530  function _glAttachShader(program, shader) {
2531      Module.ctx.attachShader(GL.programs[program],
2532                              GL.shaders[shader]);
2533    }
2534  function _glLinkProgram(program) {
2535      Module.ctx.linkProgram(GL.programs[program]);
2536      GL.uniformTable[program] = {}; // uniforms no longer keep the same names after linking
2537    }
2538  function _glGetProgramInfoLog(program, maxLength, length, infoLog) {
2539      var log = Module.ctx.getProgramInfoLog(GL.programs[program]);
2540      // Work around a bug in Chromium which causes getProgramInfoLog to return null
2541      if (!log) {
2542        log = "";
2543      }
2544      log = log.substr(0, maxLength - 1);
2545      writeStringToMemory(log, infoLog);
2546      if (length) {
2547        HEAP32[((length)>>2)]=log.length
2548      }
2549    }
2550  function _glGetProgramiv(program, pname, p) {
2551      if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH
2552        HEAP32[((p)>>2)]=Module.ctx.getProgramInfoLog(GL.programs[program]).length + 1;
2553      } else {
2554        HEAP32[((p)>>2)]=Module.ctx.getProgramParameter(GL.programs[program], pname);
2555      }
2556    }
2557  function _glValidateProgram(program) {
2558      Module.ctx.validateProgram(GL.programs[program]);
2559    }
2560  function _glGetAttribLocation(program, name) {
2561      program = GL.programs[program];
2562      name = Pointer_stringify(name);
2563      return Module.ctx.getAttribLocation(program, name);
2564    }
2565  function _glGetUniformLocation(program, name) {
2566      name = Pointer_stringify(name);
2567      var ptable = GL.uniformTable[program];
2568      if (!ptable) ptable = GL.uniformTable[program] = {};
2569      var id = ptable[name];
2570      if (id) return id;
2571      var loc = Module.ctx.getUniformLocation(GL.programs[program], name);
2572      if (!loc) return -1;
2573      id = GL.getNewId(GL.uniforms);
2574      GL.uniforms[id] = loc;
2575      ptable[name] = id;
2576      return id;
2577    }
2578  function _glUniform1i(location, v0) {
2579      location = GL.uniforms[location];
2580      Module.ctx.uniform1i(location, v0);
2581    }
2582  function _glUniform1f(location, v0) {
2583      location = GL.uniforms[location];
2584      Module.ctx.uniform1f(location, v0);
2585    }
2586  function _glUniform2fv(location, count, value) {
2587      location = GL.uniforms[location];
2588      var view;
2589      if (count == 1) {
2590        // avoid allocation for the common case of uploading one uniform
2591        view = GL.miniTempBufferViews[1];
2592        view[0] = HEAPF32[((value)>>2)];
2593        view[1] = HEAPF32[(((value)+(4))>>2)];
2594      } else {
2595        view = HEAPF32.subarray((value)>>2,(value+count*8)>>2);
2596      }
2597      Module.ctx.uniform2fv(location, view);
2598    }
2599  function _glUniform3fv(location, count, value) {
2600      location = GL.uniforms[location];
2601      var view;
2602      if (count == 1) {
2603        // avoid allocation for the common case of uploading one uniform
2604        view = GL.miniTempBufferViews[2];
2605        view[0] = HEAPF32[((value)>>2)];
2606        view[1] = HEAPF32[(((value)+(4))>>2)];
2607        view[2] = HEAPF32[(((value)+(8))>>2)];
2608      } else {
2609        view = HEAPF32.subarray((value)>>2,(value+count*12)>>2);
2610      }
2611      Module.ctx.uniform3fv(location, view);
2612    }
2613  function _glUniform4fv(location, count, value) {
2614      location = GL.uniforms[location];
2615      var view;
2616      if (count == 1) {
2617        // avoid allocation for the common case of uploading one uniform
2618        view = GL.miniTempBufferViews[3];
2619        view[0] = HEAPF32[((value)>>2)];
2620        view[1] = HEAPF32[(((value)+(4))>>2)];
2621        view[2] = HEAPF32[(((value)+(8))>>2)];
2622        view[3] = HEAPF32[(((value)+(12))>>2)];
2623      } else {
2624        view = HEAPF32.subarray((value)>>2,(value+count*16)>>2);
2625      }
2626      Module.ctx.uniform4fv(location, view);
2627    }
2628  function _glUniformMatrix3fv(location, count, transpose, value) {
2629      location = GL.uniforms[location];
2630      var view;
2631      if (count == 1) {
2632        // avoid allocation for the common case of uploading one uniform matrix
2633        view = GL.miniTempBufferViews[8];
2634        for (var i = 0; i < 9; i++) {
2635          view[i] = HEAPF32[(((value)+(i*4))>>2)];
2636        }
2637      } else {
2638        view = HEAPF32.subarray((value)>>2,(value+count*36)>>2);
2639      }
2640      Module.ctx.uniformMatrix3fv(location, transpose, view);
2641    }
2642  function _glUniformMatrix4fv(location, count, transpose, value) {
2643      location = GL.uniforms[location];
2644      var view;
2645      if (count == 1) {
2646        // avoid allocation for the common case of uploading one uniform matrix
2647        view = GL.miniTempBufferViews[15];
2648        for (var i = 0; i < 16; i++) {
2649          view[i] = HEAPF32[(((value)+(i*4))>>2)];
2650        }
2651      } else {
2652        view = HEAPF32.subarray((value)>>2,(value+count*64)>>2);
2653      }
2654      Module.ctx.uniformMatrix4fv(location, transpose, view);
2655    }
2656  function _glUseProgram(program) {
2657      Module.ctx.useProgram(program ? GL.programs[program] : null);
2658    }
2659  Module["_strcpy"] = _strcpy;
2660  function _isspace(chr) {
2661      return chr in { 32: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0 };
2662    }function __parseInt(str, endptr, base, min, max, bits, unsign) {
2663      // Skip space.
2664      while (_isspace(HEAP8[(str)])) str++;
2665      // Check for a plus/minus sign.
2666      var multiplier = 1;
2667      if (HEAP8[(str)] == 45) {
2668        multiplier = -1;
2669        str++;
2670      } else if (HEAP8[(str)] == 43) {
2671        str++;
2672      }
2673      // Find base.
2674      var finalBase = base;
2675      if (!finalBase) {
2676        if (HEAP8[(str)] == 48) {
2677          if (HEAP8[((str+1)|0)] == 120 ||
2678              HEAP8[((str+1)|0)] == 88) {
2679            finalBase = 16;
2680            str += 2;
2681          } else {
2682            finalBase = 8;
2683            str++;
2684          }
2685        }
2686      } else if (finalBase==16) {
2687        if (HEAP8[(str)] == 48) {
2688          if (HEAP8[((str+1)|0)] == 120 ||
2689              HEAP8[((str+1)|0)] == 88) {
2690            str += 2;
2691          }
2692        }
2693      }
2694      if (!finalBase) finalBase = 10;
2695      // Get digits.
2696      var chr;
2697      var ret = 0;
2698      while ((chr = HEAP8[(str)]) != 0) {
2699        var digit = parseInt(String.fromCharCode(chr), finalBase);
2700        if (isNaN(digit)) {
2701          break;
2702        } else {
2703          ret = ret * finalBase + digit;
2704          str++;
2705        }
2706      }
2707      // Apply sign.
2708      ret *= multiplier;
2709      // Set end pointer.
2710      if (endptr) {
2711        HEAP32[((endptr)>>2)]=str
2712      }
2713      // Unsign if needed.
2714      if (unsign) {
2715        if (Math.abs(ret) > max) {
2716          ret = max;
2717          ___setErrNo(ERRNO_CODES.ERANGE);
2718        } else {
2719          ret = unSign(ret, bits);
2720        }
2721      }
2722      // Validate range.
2723      if (ret > max || ret < min) {
2724        ret = ret > max ? max : min;
2725        ___setErrNo(ERRNO_CODES.ERANGE);
2726      }
2727      if (bits == 64) {
2728        return ((asm["setTempRet0"](Math.min(Math.floor((ret)/(+(4294967296))), (+(4294967295)))>>>0),ret>>>0)|0);
2729      }
2730      return ret;
2731    }function _strtol(str, endptr, base) {
2732      return __parseInt(str, endptr, base, -2147483648, 2147483647, 32);  // LONG_MIN, LONG_MAX.
2733    }function _atoi(ptr) {
2734      return _strtol(ptr, null, 10);
2735    }
2736  Module["_memmove"] = _memmove;var _llvm_memmove_p0i8_p0i8_i32=_memmove;
2737  function _strstr(ptr1, ptr2) {
2738      var check = 0, start;
2739      do {
2740        if (!check) {
2741          start = ptr1;
2742          check = ptr2;
2743        }
2744        var curr1 = HEAP8[((ptr1++)|0)];
2745        var curr2 = HEAP8[((check++)|0)];
2746        if (curr2 == 0) return start;
2747        if (curr2 != curr1) {
2748          // rewind to one character after start, to find ez in eeez
2749          ptr1 = start + 1;
2750          check = 0;
2751        }
2752      } while (curr1);
2753      return 0;
2754    }
2755  function _glDrawArrays(mode, first, count) {
2756      Module.ctx.drawArrays(mode, first, count);
2757    }
2758  function _glDrawElements(mode, count, type, indices) {
2759      Module.ctx.drawElements(mode, count, type, indices);
2760    }
2761  function _glDisableVertexAttribArray(index) {
2762      Module.ctx.disableVertexAttribArray(index);
2763    }
2764  function _glEnableVertexAttribArray(index) {
2765      Module.ctx.enableVertexAttribArray(index);
2766    }
2767  function _glVertexAttribPointer(index, size, type, normalized, stride, ptr) {
2768      Module.ctx.vertexAttribPointer(index, size, type, normalized, stride, ptr);
2769    }
2770  function _atexit(func, arg) {
2771      __ATEXIT__.unshift({ func: func, arg: arg });
2772    }var ___cxa_atexit=_atexit;
2773  function _qsort(base, num, size, cmp) {
2774      if (num == 0 || size == 0) return;
2775      // forward calls to the JavaScript sort method
2776      // first, sort the items logically
2777      var comparator = function(x, y) {
2778        return Runtime.dynCall('iii', cmp, [x, y]);
2779      }
2780      var keys = [];
2781      for (var i = 0; i < num; i++) keys.push(i);
2782      keys.sort(function(a, b) {
2783        return comparator(base+a*size, base+b*size);
2784      });
2785      // apply the sort
2786      var temp = _malloc(num*size);
2787      _memcpy(temp, base, num*size);
2788      for (var i = 0; i < num; i++) {
2789        if (keys[i] == i) continue; // already in place
2790        _memcpy(base+i*size, temp+keys[i]*size, size);
2791      }
2792      _free(temp);
2793    }
2794  var _tanf=Math.tan;
2795  function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()
2796      return !!__ZSt18uncaught_exceptionv.uncaught_exception;
2797    }function ___cxa_begin_catch(ptr) {
2798      __ZSt18uncaught_exceptionv.uncaught_exception--;
2799      return ptr;
2800    }
2801  function _llvm_eh_exception() {
2802      return HEAP32[((_llvm_eh_exception.buf)>>2)];
2803    }
2804  function ___cxa_free_exception(ptr) {
2805      try {
2806        return _free(ptr);
2807      } catch(e) { // XXX FIXME
2808      }
2809    }function ___cxa_end_catch() {
2810      if (___cxa_end_catch.rethrown) {
2811        ___cxa_end_catch.rethrown = false;
2812        return;
2813      }
2814      // Clear state flag.
2815      asm['setThrew'](0);
2816      // Clear type.
2817      HEAP32[(((_llvm_eh_exception.buf)+(4))>>2)]=0
2818      // Call destructor if one is registered then clear it.
2819      var ptr = HEAP32[((_llvm_eh_exception.buf)>>2)];
2820      var destructor = HEAP32[(((_llvm_eh_exception.buf)+(8))>>2)];
2821      if (destructor) {
2822        Runtime.dynCall('vi', destructor, [ptr]);
2823        HEAP32[(((_llvm_eh_exception.buf)+(8))>>2)]=0
2824      }
2825      // Free ptr if it isn't null.
2826      if (ptr) {
2827        ___cxa_free_exception(ptr);
2828        HEAP32[((_llvm_eh_exception.buf)>>2)]=0
2829      }
2830    }
2831  var Browser={mainLoop:{scheduler:null,shouldPause:false,paused:false,queue:[],pause:function () {
2832          Browser.mainLoop.shouldPause = true;
2833        },resume:function () {
2834          if (Browser.mainLoop.paused) {
2835            Browser.mainLoop.paused = false;
2836            Browser.mainLoop.scheduler();
2837          }
2838          Browser.mainLoop.shouldPause = false;
2839        },updateStatus:function () {
2840          if (Module['setStatus']) {
2841            var message = Module['statusMessage'] || 'Please wait...';
2842            var remaining = Browser.mainLoop.remainingBlockers;
2843            var expected = Browser.mainLoop.expectedBlockers;
2844            if (remaining) {
2845              if (remaining < expected) {
2846                Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
2847              } else {
2848                Module['setStatus'](message);
2849              }
2850            } else {
2851              Module['setStatus']('');
2852            }
2853          }
2854        }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
2855        if (Browser.initted) return;
2856        Browser.initted = true;
2857        try {
2858          new Blob();
2859          Browser.hasBlobConstructor = true;
2860        } catch(e) {
2861          Browser.hasBlobConstructor = false;
2862          console.log("warning: no blob constructor, cannot create blobs with mimetypes");
2863        }
2864        Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
2865        Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : console.log("warning: cannot create object URLs");
2866        // Support for plugins that can process preloaded files. You can add more of these to
2867        // your app by creating and appending to Module.preloadPlugins.
2868        //
2869        // Each plugin is asked if it can handle a file based on the file's name. If it can,
2870        // it is given the file's raw data. When it is done, it calls a callback with the file's
2871        // (possibly modified) data. For example, a plugin might decompress a file, or it
2872        // might create some side data structure for use later (like an Image element, etc.).
2873        function getMimetype(name) {
2874          return {
2875            'jpg': 'image/jpeg',
2876            'jpeg': 'image/jpeg',
2877            'png': 'image/png',
2878            'bmp': 'image/bmp',
2879            'ogg': 'audio/ogg',
2880            'wav': 'audio/wav',
2881            'mp3': 'audio/mpeg'
2882          }[name.substr(name.lastIndexOf('.')+1)];
2883        }
2884        if (!Module["preloadPlugins"]) Module["preloadPlugins"] = [];
2885        var imagePlugin = {};
2886        imagePlugin['canHandle'] = function(name) {
2887          return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/.exec(name);
2888        };
2889        imagePlugin['handle'] = function(byteArray, name, onload, onerror) {
2890          var b = null;
2891          if (Browser.hasBlobConstructor) {
2892            try {
2893              b = new Blob([byteArray], { type: getMimetype(name) });
2894            } catch(e) {
2895              Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
2896            }
2897          }
2898          if (!b) {
2899            var bb = new Browser.BlobBuilder();
2900            bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
2901            b = bb.getBlob();
2902          }
2903          var url = Browser.URLObject.createObjectURL(b);
2904          var img = new Image();
2905          img.onload = function() {
2906            assert(img.complete, 'Image ' + name + ' could not be decoded');
2907            var canvas = document.createElement('canvas');
2908            canvas.width = img.width;
2909            canvas.height = img.height;
2910            var ctx = canvas.getContext('2d');
2911            ctx.drawImage(img, 0, 0);
2912            Module["preloadedImages"][name] = canvas;
2913            Browser.URLObject.revokeObjectURL(url);
2914            if (onload) onload(byteArray);
2915          };
2916          img.onerror = function(event) {
2917            console.log('Image ' + url + ' could not be decoded');
2918            if (onerror) onerror();
2919          };
2920          img.src = url;
2921        };
2922        Module['preloadPlugins'].push(imagePlugin);
2923        var audioPlugin = {};
2924        audioPlugin['canHandle'] = function(name) {
2925          return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
2926        };
2927        audioPlugin['handle'] = function(byteArray, name, onload, onerror) {
2928          var done = false;
2929          function finish(audio) {
2930            if (done) return;
2931            done = true;
2932            Module["preloadedAudios"][name] = audio;
2933            if (onload) onload(byteArray);
2934          }
2935          function fail() {
2936            if (done) return;
2937            done = true;
2938            Module["preloadedAudios"][name] = new Audio(); // empty shim
2939            if (onerror) onerror();
2940          }
2941          if (Browser.hasBlobConstructor) {
2942            try {
2943              var b = new Blob([byteArray], { type: getMimetype(name) });
2944            } catch(e) {
2945              return fail();
2946            }
2947            var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
2948            var audio = new Audio();
2949            audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
2950            audio.onerror = function(event) {
2951              if (done) return;
2952              console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
2953              function encode64(data) {
2954                var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
2955                var PAD = '=';
2956                var ret = '';
2957                var leftchar = 0;
2958                var leftbits = 0;
2959                for (var i = 0; i < data.length; i++) {
2960                  leftchar = (leftchar << 8) | data[i];
2961                  leftbits += 8;
2962                  while (leftbits >= 6) {
2963                    var curr = (leftchar >> (leftbits-6)) & 0x3f;
2964                    leftbits -= 6;
2965                    ret += BASE[curr];
2966                  }
2967                }
2968                if (leftbits == 2) {
2969                  ret += BASE[(leftchar&3) << 4];
2970                  ret += PAD + PAD;
2971                } else if (leftbits == 4) {
2972                  ret += BASE[(leftchar&0xf) << 2];
2973                  ret += PAD;
2974                }
2975                return ret;
2976              }
2977              audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
2978              finish(audio); // we don't wait for confirmation this worked - but it's worth trying
2979            };
2980            audio.src = url;
2981            // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
2982            Browser.safeSetTimeout(function() {
2983              finish(audio); // try to use it even though it is not necessarily ready to play
2984            }, 10000);
2985          } else {
2986            return fail();
2987          }
2988        };
2989        Module['preloadPlugins'].push(audioPlugin);
2990        // Canvas event setup
2991        var canvas = Module['canvas'];
2992        canvas.requestPointerLock = canvas['requestPointerLock'] ||
2993                                    canvas['mozRequestPointerLock'] ||
2994                                    canvas['webkitRequestPointerLock'];
2995        canvas.exitPointerLock = document['exitPointerLock'] ||
2996                                 document['mozExitPointerLock'] ||
2997                                 document['webkitExitPointerLock'] ||
2998                                 function(){}; // no-op if function does not exist
2999        canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
3000        function pointerLockChange() {
3001          Browser.pointerLock = document['pointerLockElement'] === canvas ||
3002                                document['mozPointerLockElement'] === canvas ||
3003                                document['webkitPointerLockElement'] === canvas;
3004        }
3005        document.addEventListener('pointerlockchange', pointerLockChange, false);
3006        document.addEventListener('mozpointerlockchange', pointerLockChange, false);
3007        document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
3008        if (Module['elementPointerLock']) {
3009          canvas.addEventListener("click", function(ev) {
3010            if (!Browser.pointerLock && canvas.requestPointerLock) {
3011              canvas.requestPointerLock();
3012              ev.preventDefault();
3013            }
3014          }, false);
3015        }
3016      },createContext:function (canvas, useWebGL, setInModule) {
3017        var ctx;
3018        try {
3019          if (useWebGL) {
3020            ctx = canvas.getContext('experimental-webgl', {
3021              alpha: false
3022            });
3023          } else {
3024            ctx = canvas.getContext('2d');
3025          }
3026          if (!ctx) throw ':(';
3027        } catch (e) {
3028          Module.print('Could not create canvas - ' + e);
3029          return null;
3030        }
3031        if (useWebGL) {
3032          // Set the background of the WebGL canvas to black
3033          canvas.style.backgroundColor = "black";
3034          // Warn on context loss
3035          canvas.addEventListener('webglcontextlost', function(event) {
3036            alert('WebGL context lost. You will need to reload the page.');
3037          }, false);
3038        }
3039        if (setInModule) {
3040          Module.ctx = ctx;
3041          Module.useWebGL = useWebGL;
3042          Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
3043          Browser.init();
3044        }
3045        return ctx;
3046      },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
3047        Browser.lockPointer = lockPointer;
3048        Browser.resizeCanvas = resizeCanvas;
3049        if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
3050        if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
3051        var canvas = Module['canvas'];
3052        function fullScreenChange() {
3053          Browser.isFullScreen = false;
3054          if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
3055               document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
3056               document['fullScreenElement'] || document['fullscreenElement']) === canvas) {
3057            canvas.cancelFullScreen = document['cancelFullScreen'] ||
3058                                      document['mozCancelFullScreen'] ||
3059                                      document['webkitCancelFullScreen'];
3060            canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
3061            if (Browser.lockPointer) canvas.requestPointerLock();
3062            Browser.isFullScreen = true;
3063            if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
3064          } else if (Browser.resizeCanvas){
3065            Browser.setWindowedCanvasSize();
3066          }
3067          if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
3068        }
3069        if (!Browser.fullScreenHandlersInstalled) {
3070          Browser.fullScreenHandlersInstalled = true;
3071          document.addEventListener('fullscreenchange', fullScreenChange, false);
3072          document.addEventListener('mozfullscreenchange', fullScreenChange, false);
3073          document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
3074        }
3075        canvas.requestFullScreen = canvas['requestFullScreen'] ||
3076                                   canvas['mozRequestFullScreen'] ||
3077                                   (canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
3078        canvas.requestFullScreen();
3079      },requestAnimationFrame:function (func) {
3080        if (!window.requestAnimationFrame) {
3081          window.requestAnimationFrame = window['requestAnimationFrame'] ||
3082                                         window['mozRequestAnimationFrame'] ||
3083                                         window['webkitRequestAnimationFrame'] ||
3084                                         window['msRequestAnimationFrame'] ||
3085                                         window['oRequestAnimationFrame'] ||
3086                                         window['setTimeout'];
3087        }
3088        window.requestAnimationFrame(func);
3089      },safeCallback:function (func) {
3090        return function() {
3091          if (!ABORT) return func.apply(null, arguments);
3092        };
3093      },safeRequestAnimationFrame:function (func) {
3094        return Browser.requestAnimationFrame(function() {
3095          if (!ABORT) func();
3096        });
3097      },safeSetTimeout:function (func, timeout) {
3098        return setTimeout(function() {
3099          if (!ABORT) func();
3100        }, timeout);
3101      },safeSetInterval:function (func, timeout) {
3102        return setInterval(function() {
3103          if (!ABORT) func();
3104        }, timeout);
3105      },getUserMedia:function (func) {
3106        if(!window.getUserMedia) {
3107          window.getUserMedia = navigator['getUserMedia'] ||
3108                                navigator['mozGetUserMedia'];
3109        }
3110        window.getUserMedia(func);
3111      },getMovementX:function (event) {
3112        return event['movementX'] ||
3113               event['mozMovementX'] ||
3114               event['webkitMovementX'] ||
3115               0;
3116      },getMovementY:function (event) {
3117        return event['movementY'] ||
3118               event['mozMovementY'] ||
3119               event['webkitMovementY'] ||
3120               0;
3121      },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
3122        if (Browser.pointerLock) {
3123          // When the pointer is locked, calculate the coordinates
3124          // based on the movement of the mouse.
3125          // Workaround for Firefox bug 764498
3126          if (event.type != 'mousemove' &&
3127              ('mozMovementX' in event)) {
3128            Browser.mouseMovementX = Browser.mouseMovementY = 0;
3129          } else {
3130            Browser.mouseMovementX = Browser.getMovementX(event);
3131            Browser.mouseMovementY = Browser.getMovementY(event);
3132          }
3133          Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
3134          Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
3135        } else {
3136          // Otherwise, calculate the movement based on the changes
3137          // in the coordinates.
3138          var rect = Module["canvas"].getBoundingClientRect();
3139          var x = event.pageX - (window.scrollX + rect.left);
3140          var y = event.pageY - (window.scrollY + rect.top);
3141          // the canvas might be CSS-scaled compared to its backbuffer;
3142          // SDL-using content will want mouse coordinates in terms
3143          // of backbuffer units.
3144          var cw = Module["canvas"].width;
3145          var ch = Module["canvas"].height;
3146          x = x * (cw / rect.width);
3147          y = y * (ch / rect.height);
3148          Browser.mouseMovementX = x - Browser.mouseX;
3149          Browser.mouseMovementY = y - Browser.mouseY;
3150          Browser.mouseX = x;
3151          Browser.mouseY = y;
3152        }
3153      },xhrLoad:function (url, onload, onerror) {
3154        var xhr = new XMLHttpRequest();
3155        xhr.open('GET', url, true);
3156        xhr.responseType = 'arraybuffer';
3157        xhr.onload = function() {
3158          if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
3159            onload(xhr.response);
3160          } else {
3161            onerror();
3162          }
3163        };
3164        xhr.onerror = onerror;
3165        xhr.send(null);
3166      },asyncLoad:function (url, onload, onerror, noRunDep) {
3167        Browser.xhrLoad(url, function(arrayBuffer) {
3168          assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
3169          onload(new Uint8Array(arrayBuffer));
3170          if (!noRunDep) removeRunDependency('al ' + url);
3171        }, function(event) {
3172          if (onerror) {
3173            onerror();
3174          } else {
3175            throw 'Loading data file "' + url + '" failed.';
3176          }
3177        });
3178        if (!noRunDep) addRunDependency('al ' + url);
3179      },resizeListeners:[],updateResizeListeners:function () {
3180        var canvas = Module['canvas'];
3181        Browser.resizeListeners.forEach(function(listener) {
3182          listener(canvas.width, canvas.height);
3183        });
3184      },setCanvasSize:function (width, height, noUpdates) {
3185        var canvas = Module['canvas'];
3186        canvas.width = width;
3187        canvas.height = height;
3188        if (!noUpdates) Browser.updateResizeListeners();
3189      },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
3190        var canvas = Module['canvas'];
3191        this.windowedWidth = canvas.width;
3192        this.windowedHeight = canvas.height;
3193        canvas.width = screen.width;
3194        canvas.height = screen.height;
3195        var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
3196        flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
3197        HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
3198        Browser.updateResizeListeners();
3199      },setWindowedCanvasSize:function () {
3200        var canvas = Module['canvas'];
3201        canvas.width = this.windowedWidth;
3202        canvas.height = this.windowedHeight;
3203        var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
3204        flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
3205        HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
3206        Browser.updateResizeListeners();
3207      }};var SDL={defaults:{width:320,height:200,copyOnLock:true},version:null,surfaces:{},events:[],fonts:[null],audios:[null],music:{audio:null,volume:1},mixerFrequency:22050,mixerFormat:32784,mixerNumChannels:2,mixerChunkSize:1024,channelMinimumNumber:0,GL:false,keyboardState:null,keyboardMap:{},textInput:false,startTime:null,buttonState:0,modState:0,DOMButtons:[0,0,0],DOMEventToSDLEvent:{},keyCodes:{16:1249,17:1248,18:1250,33:1099,34:1102,37:1104,38:1106,39:1103,40:1105,46:127,96:1112,97:1113,98:1114,99:1115,100:1116,101:1117,102:1118,103:1119,104:1120,105:1121,112:1082,113:1083,114:1084,115:1085,116:1086,117:1087,118:1088,119:1089,120:1090,121:1091,122:1092,123:1093,173:45,188:44,190:46,191:47,192:96},scanCodes:{9:43,13:40,27:41,32:44,44:54,46:55,47:56,48:39,49:30,50:31,51:32,52:33,53:34,54:35,55:36,56:37,57:38,92:49,97:4,98:5,99:6,100:7,101:8,102:9,103:10,104:11,105:12,106:13,107:14,108:15,109:16,110:17,111:18,112:19,113:20,114:21,115:22,116:23,117:24,118:25,119:26,120:27,121:28,122:29,305:224,308:226},structs:{Rect:{__size__:16,x:0,y:4,w:8,h:12},PixelFormat:{__size__:36,format:0,palette:4,BitsPerPixel:8,BytesPerPixel:9,padding1:10,padding2:11,Rmask:12,Gmask:16,Bmask:20,Amask:24,Rloss:28,Gloss:29,Bloss:30,Aloss:31,Rshift:32,Gshift:33,Bshift:34,Ashift:35},KeyboardEvent:{__size__:16,type:0,windowID:4,state:8,repeat:9,padding2:10,padding3:11,keysym:12},keysym:{__size__:16,scancode:0,sym:4,mod:8,unicode:12},TextInputEvent:{__size__:264,type:0,windowID:4,text:8},MouseMotionEvent:{__size__:28,type:0,windowID:4,state:8,padding1:9,padding2:10,padding3:11,x:12,y:16,xrel:20,yrel:24},MouseButtonEvent:{__size__:20,type:0,windowID:4,button:8,state:9,padding1:10,padding2:11,x:12,y:16},ResizeEvent:{__size__:12,type:0,w:4,h:8},AudioSpec:{__size__:24,freq:0,format:4,channels:6,silence:7,samples:8,size:12,callback:16,userdata:20},version:{__size__:3,major:0,minor:1,patch:2}},loadRect:function (rect) {
3208        return {
3209          x: HEAP32[((rect + SDL.structs.Rect.x)>>2)],
3210          y: HEAP32[((rect + SDL.structs.Rect.y)>>2)],
3211          w: HEAP32[((rect + SDL.structs.Rect.w)>>2)],
3212          h: HEAP32[((rect + SDL.structs.Rect.h)>>2)]
3213        };
3214      },loadColorToCSSRGB:function (color) {
3215        var rgba = HEAP32[((color)>>2)];
3216        return 'rgb(' + (rgba&255) + ',' + ((rgba >> 8)&255) + ',' + ((rgba >> 16)&255) + ')';
3217      },loadColorToCSSRGBA:function (color) {
3218        var rgba = HEAP32[((color)>>2)];
3219        return 'rgba(' + (rgba&255) + ',' + ((rgba >> 8)&255) + ',' + ((rgba >> 16)&255) + ',' + (((rgba >> 24)&255)/255) + ')';
3220      },translateColorToCSSRGBA:function (rgba) {
3221        return 'rgba(' + ((rgba >> 24)&255) + ',' + ((rgba >> 16)&255) + ',' + ((rgba >> 8)&255) + ',' + ((rgba&255)/255) + ')';
3222      },translateRGBAToCSSRGBA:function (r, g, b, a) {
3223        return 'rgba(' + r + ',' + g + ',' + b + ',' + (a/255) + ')';
3224      },translateRGBAToColor:function (r, g, b, a) {
3225        return (r << 24) + (g << 16) + (b << 8) + a;
3226      },makeSurface:function (width, height, flags, usePageCanvas, source, rmask, gmask, bmask, amask) {
3227        flags = flags || 0;
3228        var surf = _malloc(14*Runtime.QUANTUM_SIZE);  // SDL_Surface has 14 fields of quantum size
3229        var buffer = _malloc(width*height*4); // TODO: only allocate when locked the first time
3230        var pixelFormat = _malloc(18*Runtime.QUANTUM_SIZE);
3231        flags |= 1; // SDL_HWSURFACE - this tells SDL_MUSTLOCK that this needs to be locked
3232        //surface with SDL_HWPALETTE flag is 8bpp surface (1 byte)
3233        var is_SDL_HWPALETTE = flags & 0x00200000; 
3234        var bpp = is_SDL_HWPALETTE ? 1 : 4;
3235        HEAP32[((surf+Runtime.QUANTUM_SIZE*0)>>2)]=flags         // SDL_Surface.flags
3236        HEAP32[((surf+Runtime.QUANTUM_SIZE*1)>>2)]=pixelFormat // SDL_Surface.format TODO
3237        HEAP32[((surf+Runtime.QUANTUM_SIZE*2)>>2)]=width         // SDL_Surface.w
3238        HEAP32[((surf+Runtime.QUANTUM_SIZE*3)>>2)]=height        // SDL_Surface.h
3239        HEAP32[((surf+Runtime.QUANTUM_SIZE*4)>>2)]=width * bpp       // SDL_Surface.pitch, assuming RGBA or indexed for now,
3240                                                                                 // since that is what ImageData gives us in browsers
3241        HEAP32[((surf+Runtime.QUANTUM_SIZE*5)>>2)]=buffer      // SDL_Surface.pixels
3242        HEAP32[((surf+Runtime.QUANTUM_SIZE*6)>>2)]=0      // SDL_Surface.offset
3243        HEAP32[((pixelFormat + SDL.structs.PixelFormat.format)>>2)]=-2042224636 // SDL_PIXELFORMAT_RGBA8888
3244        HEAP32[((pixelFormat + SDL.structs.PixelFormat.palette)>>2)]=0 // TODO
3245        HEAP8[((pixelFormat + SDL.structs.PixelFormat.BitsPerPixel)|0)]=bpp * 8
3246        HEAP8[((pixelFormat + SDL.structs.PixelFormat.BytesPerPixel)|0)]=bpp
3247        HEAP32[((pixelFormat + SDL.structs.PixelFormat.Rmask)>>2)]=rmask || 0x000000ff
3248        HEAP32[((pixelFormat + SDL.structs.PixelFormat.Gmask)>>2)]=gmask || 0x0000ff00
3249        HEAP32[((pixelFormat + SDL.structs.PixelFormat.Bmask)>>2)]=bmask || 0x00ff0000
3250        HEAP32[((pixelFormat + SDL.structs.PixelFormat.Amask)>>2)]=amask || 0xff000000
3251        // Decide if we want to use WebGL or not
3252        var useWebGL = (flags & 0x04000000) != 0; // SDL_OPENGL
3253        SDL.GL = SDL.GL || useWebGL;
3254        var canvas;
3255        if (!usePageCanvas) {
3256          canvas = document.createElement('canvas');
3257          canvas.width = width;
3258          canvas.height = height;
3259        } else {
3260          canvas = Module['canvas'];
3261        }
3262        var ctx = Browser.createContext(canvas, useWebGL, usePageCanvas);
3263        SDL.surfaces[surf] = {
3264          width: width,
3265          height: height,
3266          canvas: canvas,
3267          ctx: ctx,
3268          surf: surf,
3269          buffer: buffer,
3270          pixelFormat: pixelFormat,
3271          alpha: 255,
3272          flags: flags,
3273          locked: 0,
3274          usePageCanvas: usePageCanvas,
3275          source: source,
3276          isFlagSet: function (flag) {
3277            return flags & flag;
3278          }
3279        };
3280        return surf;
3281      },copyIndexedColorData:function (surfData, rX, rY, rW, rH) {
3282        // HWPALETTE works with palette
3283        // setted by SDL_SetColors
3284        if (!surfData.colors) {
3285          return;
3286        }
3287        var fullWidth  = Module['canvas'].width;
3288        var fullHeight = Module['canvas'].height;
3289        var startX  = rX || 0;
3290        var startY  = rY || 0;
3291        var endX    = (rW || (fullWidth - startX)) + startX;
3292        var endY    = (rH || (fullHeight - startY)) + startY;
3293        var buffer  = surfData.buffer;
3294        var data    = surfData.image.data;
3295        var colors  = surfData.colors;
3296        for (var y = startY; y < endY; ++y) {
3297          var indexBase = y * fullWidth;
3298          var colorBase = indexBase * 4;
3299          for (var x = startX; x < endX; ++x) {
3300            // HWPALETTE have only 256 colors (not rgba)
3301            var index = HEAPU8[((buffer + indexBase + x)|0)] * 3;
3302            var colorOffset = colorBase + x * 4;
3303            data[colorOffset   ] = colors[index   ];
3304            data[colorOffset +1] = colors[index +1];
3305            data[colorOffset +2] = colors[index +2];
3306            //unused: data[colorOffset +3] = color[index +3];
3307          }
3308        }
3309      },freeSurface:function (surf) {
3310        _free(SDL.surfaces[surf].buffer);
3311        _free(SDL.surfaces[surf].pixelFormat);
3312        _free(surf);
3313        SDL.surfaces[surf] = null;
3314      },receiveEvent:function (event) {
3315        switch(event.type) {
3316          case 'mousemove':
3317            if (Browser.pointerLock) {
3318              // workaround for firefox bug 750111
3319              if ('mozMovementX' in event) {
3320                event['movementX'] = event['mozMovementX'];
3321                event['movementY'] = event['mozMovementY'];
3322              }
3323              // workaround for Firefox bug 782777
3324              if (event['movementX'] == 0 && event['movementY'] == 0) {
3325                // ignore a mousemove event if it doesn't contain any movement info
3326                // (without pointer lock, we infer movement from pageX/pageY, so this check is unnecessary)
3327                event.preventDefault();
3328                return;
3329              }
3330            }
3331            // fall through
3332          case 'keydown': case 'keyup': case 'keypress': case 'mousedown': case 'mouseup': case 'DOMMouseScroll': case 'mousewheel':
3333            if (event.type == 'DOMMouseScroll' || event.type == 'mousewheel') {
3334              var button = (event.type == 'DOMMouseScroll' ? event.detail : -event.wheelDelta) > 0 ? 4 : 3;
3335              var event2 = {
3336                type: 'mousedown',
3337                button: button,
3338                pageX: event.pageX,
3339                pageY: event.pageY
3340              };
3341              SDL.events.push(event2);
3342              event = {
3343                type: 'mouseup',
3344                button: button,
3345                pageX: event.pageX,
3346                pageY: event.pageY
3347              };
3348            } else if (event.type == 'mousedown') {
3349              SDL.DOMButtons[event.button] = 1;
3350            } else if (event.type == 'mouseup') {
3351              // ignore extra ups, can happen if we leave the canvas while pressing down, then return,
3352              // since we add a mouseup in that case
3353              if (!SDL.DOMButtons[event.button]) {
3354                event.preventDefault();
3355                return;
3356              }
3357              SDL.DOMButtons[event.button] = 0;
3358            }
3359            if (event.type == 'keypress' && !SDL.textInput) {
3360              break;
3361            }
3362            SDL.events.push(event);
3363            break;
3364          case 'mouseout':
3365            // Un-press all pressed mouse buttons, because we might miss the release outside of the canvas
3366            for (var i = 0; i < 3; i++) {
3367              if (SDL.DOMButtons[i]) {
3368                SDL.events.push({
3369                  type: 'mouseup',
3370                  button: i,
3371                  pageX: event.pageX,
3372                  pageY: event.pageY
3373                });
3374                SDL.DOMButtons[i] = 0;
3375              }
3376            }
3377            break;
3378          case 'blur':
3379          case 'visibilitychange': {
3380            // Un-press all pressed keys: TODO
3381            for (var code in SDL.keyboardMap) {
3382              SDL.events.push({
3383                type: 'keyup',
3384                keyCode: SDL.keyboardMap[code]
3385              });
3386            }
3387            break;
3388          }
3389          case 'unload':
3390            if (Browser.mainLoop.runner) {
3391              SDL.events.push(event);
3392              // Force-run a main event loop, since otherwise this event will never be caught!
3393              Browser.mainLoop.runner();
3394            }
3395            return;
3396          case 'resize':
3397            SDL.events.push(event);
3398            break;
3399        }
3400        if (SDL.events.length >= 10000) {
3401          Module.printErr('SDL event queue full, dropping events');
3402          SDL.events = SDL.events.slice(0, 10000);
3403        }
3404        // manually triggered resize event doesn't have a preventDefault member
3405        if (event.preventDefault) {
3406          event.preventDefault();
3407        }
3408        return;
3409      },makeCEvent:function (event, ptr) {
3410        if (typeof event === 'number') {
3411          // This is a pointer to a native C event that was SDL_PushEvent'ed
3412          _memcpy(ptr, event, SDL.structs.KeyboardEvent.__size__); // XXX
3413          return;
3414        }
3415        switch(event.type) {
3416          case 'keydown': case 'keyup': {
3417            var down = event.type === 'keydown';
3418            //Module.print('Received key event: ' + event.keyCode);
3419            var key = event.keyCode;
3420            if (key >= 65 && key <= 90) {
3421              key += 32; // make lowercase for SDL
3422            } else {
3423              key = SDL.keyCodes[event.keyCode] || event.keyCode;
3424            }
3425            var scan;
3426            if (key >= 1024) {
3427              scan = key - 1024;
3428            } else {
3429              scan = SDL.scanCodes[key] || key;
3430            }
3431            var code = SDL.keyCodes[event.keyCode] || event.keyCode;
3432            HEAP8[(((SDL.keyboardState)+(code))|0)]=down;
3433            if (down) {
3434              SDL.keyboardMap[code] = event.keyCode; // save the DOM input, which we can use to unpress it during blur
3435            } else {
3436              delete SDL.keyboardMap[code];
3437            }
3438            // TODO: lmeta, rmeta, numlock, capslock, KMOD_MODE, KMOD_RESERVED
3439            SDL.modState = (HEAP8[(((SDL.keyboardState)+(1248))|0)] ? 0x0040 | 0x0080 : 0) | // KMOD_LCTRL & KMOD_RCTRL
3440              (HEAP8[(((SDL.keyboardState)+(1249))|0)] ? 0x0001 | 0x0002 : 0) | // KMOD_LSHIFT & KMOD_RSHIFT
3441              (HEAP8[(((SDL.keyboardState)+(1250))|0)] ? 0x0100 | 0x0200 : 0); // KMOD_LALT & KMOD_RALT
3442            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.type))>>2)]=SDL.DOMEventToSDLEvent[event.type]
3443            HEAP8[(((ptr)+(SDL.structs.KeyboardEvent.state))|0)]=down ? 1 : 0
3444            HEAP8[(((ptr)+(SDL.structs.KeyboardEvent.repeat))|0)]=0 // TODO
3445            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.scancode))>>2)]=scan
3446            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.sym))>>2)]=key
3447            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.mod))>>2)]=SDL.modState
3448            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.keysym + SDL.structs.keysym.unicode))>>2)]=key
3449            break;
3450          }
3451          case 'keypress': {
3452            HEAP32[(((ptr)+(SDL.structs.TextInputEvent.type))>>2)]=SDL.DOMEventToSDLEvent[event.type]
3453            // Not filling in windowID for now
3454            var cStr = intArrayFromString(String.fromCharCode(event.charCode));
3455            for (var i = 0; i < cStr.length; ++i) {
3456              HEAP8[(((ptr)+(SDL.structs.TextInputEvent.text + i))|0)]=cStr[i];
3457            }
3458            break;
3459          }
3460          case 'mousedown': case 'mouseup':
3461            if (event.type == 'mousedown') {
3462              // SDL_BUTTON(x) is defined as (1 << ((x)-1)).  SDL buttons are 1-3,
3463              // and DOM buttons are 0-2, so this means that the below formula is
3464              // correct.
3465              SDL.buttonState |= 1 << event.button;
3466            } else if (event.type == 'mouseup') {
3467              SDL.buttonState &= ~(1 << event.button);
3468            }
3469            // fall through
3470          case 'mousemove': {
3471            Browser.calculateMouseEvent(event);
3472            if (event.type != 'mousemove') {
3473              var down = event.type === 'mousedown';
3474              HEAP32[(((ptr)+(SDL.structs.MouseButtonEvent.type))>>2)]=SDL.DOMEventToSDLEvent[event.type];
3475              HEAP8[(((ptr)+(SDL.structs.MouseButtonEvent.button))|0)]=event.button+1; // DOM buttons are 0-2, SDL 1-3
3476              HEAP8[(((ptr)+(SDL.structs.MouseButtonEvent.state))|0)]=down ? 1 : 0;
3477              HEAP32[(((ptr)+(SDL.structs.MouseButtonEvent.x))>>2)]=Browser.mouseX;
3478              HEAP32[(((ptr)+(SDL.structs.MouseButtonEvent.y))>>2)]=Browser.mouseY;
3479            } else {
3480              HEAP32[(((ptr)+(SDL.structs.MouseMotionEvent.type))>>2)]=SDL.DOMEventToSDLEvent[event.type];
3481              HEAP8[(((ptr)+(SDL.structs.MouseMotionEvent.state))|0)]=SDL.buttonState;
3482              HEAP32[(((ptr)+(SDL.structs.MouseMotionEvent.x))>>2)]=Browser.mouseX;
3483              HEAP32[(((ptr)+(SDL.structs.MouseMotionEvent.y))>>2)]=Browser.mouseY;
3484              HEAP32[(((ptr)+(SDL.structs.MouseMotionEvent.xrel))>>2)]=Browser.mouseMovementX;
3485              HEAP32[(((ptr)+(SDL.structs.MouseMotionEvent.yrel))>>2)]=Browser.mouseMovementY;
3486            }
3487            break;
3488          }
3489          case 'unload': {
3490            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.type))>>2)]=SDL.DOMEventToSDLEvent[event.type];
3491            break;
3492          }
3493          case 'resize': {
3494            HEAP32[(((ptr)+(SDL.structs.KeyboardEvent.type))>>2)]=SDL.DOMEventToSDLEvent[event.type];
3495            HEAP32[(((ptr)+(SDL.structs.ResizeEvent.w))>>2)]=event.w;
3496            HEAP32[(((ptr)+(SDL.structs.ResizeEvent.h))>>2)]=event.h;
3497            break;
3498          }
3499          default: throw 'Unhandled SDL event: ' + event.type;
3500        }
3501      },estimateTextWidth:function (fontData, text) {
3502        var h = fontData.size;
3503        var fontString = h + 'px ' + fontData.name;
3504        var tempCtx = SDL.ttfContext;
3505        tempCtx.save();
3506        tempCtx.font = fontString;
3507        var ret = tempCtx.measureText(text).width | 0;
3508        tempCtx.restore();
3509        return ret;
3510      },allocateChannels:function (num) { // called from Mix_AllocateChannels and init
3511        if (SDL.numChannels && SDL.numChannels >= num) return;
3512        SDL.numChannels = num;
3513        SDL.channels = [];
3514        for (var i = 0; i < num; i++) {
3515          SDL.channels[i] = {
3516            audio: null,
3517            volume: 1.0
3518          };
3519        }
3520      },setGetVolume:function (info, volume) {
3521        if (!info) return 0;
3522        var ret = info.volume * 128; // MIX_MAX_VOLUME
3523        if (volume != -1) {
3524          info.volume = volume / 128;
3525          if (info.audio) info.audio.volume = info.volume;
3526        }
3527        return ret;
3528      },debugSurface:function (surfData) {
3529        console.log('dumping surface ' + [surfData.surf, surfData.source, surfData.width, surfData.height]);
3530        var image = surfData.ctx.getImageData(0, 0, surfData.width, surfData.height);
3531        var data = image.data;
3532        var num = Math.min(surfData.width, surfData.height);
3533        for (var i = 0; i < num; i++) {
3534          console.log('   diagonal ' + i + ':' + [data[i*surfData.width*4 + i*4 + 0], data[i*surfData.width*4 + i*4 + 1], data[i*surfData.width*4 + i*4 + 2], data[i*surfData.width*4 + i*4 + 3]]);
3535        }
3536      }};function _SDL_Init(what) {
3537      SDL.startTime = Date.now();
3538      // capture all key events. we just keep down and up, but also capture press to prevent default actions
3539      if (!Module['doNotCaptureKeyboard']) {
3540        document.addEventListener("keydown", SDL.receiveEvent);
3541        document.addEventListener("keyup", SDL.receiveEvent);
3542        document.addEventListener("keypress", SDL.receiveEvent);
3543        document.addEventListener("blur", SDL.receiveEvent);
3544        document.addEventListener("visibilitychange", SDL.receiveEvent);
3545      }
3546      window.addEventListener("unload", SDL.receiveEvent);
3547      SDL.keyboardState = _malloc(0x10000); // Our SDL needs 512, but 64K is safe for older SDLs
3548      _memset(SDL.keyboardState, 0, 0x10000);
3549      // Initialize this structure carefully for closure
3550      SDL.DOMEventToSDLEvent['keydown'] = 0x300 /* SDL_KEYDOWN */;
3551      SDL.DOMEventToSDLEvent['keyup'] = 0x301 /* SDL_KEYUP */;
3552      SDL.DOMEventToSDLEvent['keypress'] = 0x303 /* SDL_TEXTINPUT */;
3553      SDL.DOMEventToSDLEvent['mousedown'] = 0x401 /* SDL_MOUSEBUTTONDOWN */;
3554      SDL.DOMEventToSDLEvent['mouseup'] = 0x402 /* SDL_MOUSEBUTTONUP */;
3555      SDL.DOMEventToSDLEvent['mousemove'] = 0x400 /* SDL_MOUSEMOTION */;
3556      SDL.DOMEventToSDLEvent['unload'] = 0x100 /* SDL_QUIT */;
3557      SDL.DOMEventToSDLEvent['resize'] = 0x7001 /* SDL_VIDEORESIZE/SDL_EVENT_COMPAT2 */;
3558      return 0; // success
3559    }
3560  function _SDL_GetError() {
3561      if (!SDL.errorMessage) {
3562        SDL.errorMessage = allocate(intArrayFromString("unknown SDL-emscripten error"), 'i8', ALLOC_NORMAL);
3563      }
3564      return SDL.errorMessage;
3565    }
3566  function _SDL_GL_SetAttribute(attr, value) {
3567      console.log('TODO: SDL_GL_SetAttribute');
3568    }
3569  function _SDL_SetVideoMode(width, height, depth, flags) {
3570      ['mousedown', 'mouseup', 'mousemove', 'DOMMouseScroll', 'mousewheel', 'mouseout'].forEach(function(event) {
3571        Module['canvas'].addEventListener(event, SDL.receiveEvent, true);
3572      });
3573      Browser.setCanvasSize(width, height, true);
3574      // Free the old surface first.
3575      if (SDL.screen) {
3576        SDL.freeSurface(SDL.screen);
3577        SDL.screen = null;
3578      }
3579      SDL.screen = SDL.makeSurface(width, height, flags, true, 'screen');
3580      if (!SDL.addedResizeListener) {
3581        SDL.addedResizeListener = true;
3582        Browser.resizeListeners.push(function(w, h) {
3583          SDL.receiveEvent({
3584            type: 'resize',
3585            w: w,
3586            h: h
3587          });
3588        });
3589      }
3590      return SDL.screen;
3591    }
3592  function _SDL_Quit() {
3593      for (var i = 0; i < SDL.numChannels; ++i) {
3594        if (SDL.channels[i].audio) {
3595          SDL.channels[i].audio.pause();
3596        }
3597      }
3598      if (SDL.music.audio) {
3599        SDL.music.audio.pause();
3600      }
3601      Module.print('SDL_Quit called (and ignored)');
3602    }
3603  function _SDL_WM_SetCaption(title, icon) {
3604      title = title && Pointer_stringify(title);
3605      icon = icon && Pointer_stringify(icon);
3606    }
3607  function _SDL_GL_SwapBuffers() {}
3608  function _SDL_EnableUNICODE(on) {
3609      var ret = SDL.unicode || 0;
3610      SDL.unicode = on;
3611      return ret;
3612    }
3613  function _SDL_PollEvent(ptr) {
3614      if (SDL.events.length === 0) return 0;
3615      if (ptr) {
3616        SDL.makeCEvent(SDL.events.shift(), ptr);
3617      }
3618      return 1;
3619    }
3620  function _SDL_GetKeyboardState() {
3621      return SDL.keyboardState;
3622    }
3623  function _SDL_GetMouseState(x, y) {
3624      if (x) HEAP32[((x)>>2)]=Browser.mouseX;
3625      if (y) HEAP32[((y)>>2)]=Browser.mouseY;
3626      return SDL.buttonState;
3627    }
3628  function _pthread_mutex_unlock() {}
3629  function _pthread_mutex_lock() {}
3630  function _recv(fd, buf, len, flags) {
3631      var info = FS.streams[fd];
3632      if (!info) return -1;
3633      if (!info.hasData()) {
3634        ___setErrNo(ERRNO_CODES.EAGAIN); // no data, and all sockets are nonblocking, so this is the right behavior
3635        return -1;
3636      }
3637      var buffer = info.inQueue.shift();
3638      if (len < buffer.length) {
3639        if (info.stream) {
3640          // This is tcp (reliable), so if not all was read, keep it
3641          info.inQueue.unshift(buffer.subarray(len));
3642        }
3643        buffer = buffer.subarray(0, len);
3644      }
3645      HEAPU8.set(buffer, buf);
3646      return buffer.length;
3647    }
3648  function _pread(fildes, buf, nbyte, offset) {
3649      // ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
3650      // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
3651      var stream = FS.streams[fildes];
3652      if (!stream || stream.object.isDevice) {
3653        ___setErrNo(ERRNO_CODES.EBADF);
3654        return -1;
3655      } else if (!stream.isRead) {
3656        ___setErrNo(ERRNO_CODES.EACCES);
3657        return -1;
3658      } else if (stream.object.isFolder) {
3659        ___setErrNo(ERRNO_CODES.EISDIR);
3660        return -1;
3661      } else if (nbyte < 0 || offset < 0) {
3662        ___setErrNo(ERRNO_CODES.EINVAL);
3663        return -1;
3664      } else {
3665        var bytesRead = 0;
3666        while (stream.ungotten.length && nbyte > 0) {
3667          HEAP8[((buf++)|0)]=stream.ungotten.pop()
3668          nbyte--;
3669          bytesRead++;
3670        }
3671        var contents = stream.object.contents;
3672        var size = Math.min(contents.length - offset, nbyte);
3673        if (contents.subarray) { // typed array
3674          HEAPU8.set(contents.subarray(offset, offset+size), buf);
3675        } else
3676        if (contents.slice) { // normal array
3677          for (var i = 0; i < size; i++) {
3678            HEAP8[(((buf)+(i))|0)]=contents[offset + i]
3679          }
3680        } else {
3681          for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
3682            HEAP8[(((buf)+(i))|0)]=contents.get(offset + i)
3683          }
3684        }
3685        bytesRead += size;
3686        return bytesRead;
3687      }
3688    }function _read(fildes, buf, nbyte) {
3689      // ssize_t read(int fildes, void *buf, size_t nbyte);
3690      // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
3691      var stream = FS.streams[fildes];
3692      if (stream && ('socket' in stream)) {
3693        return _recv(fildes, buf, nbyte, 0);
3694      } else if (!stream) {
3695        ___setErrNo(ERRNO_CODES.EBADF);
3696        return -1;
3697      } else if (!stream.isRead) {
3698        ___setErrNo(ERRNO_CODES.EACCES);
3699        return -1;
3700      } else if (nbyte < 0) {
3701        ___setErrNo(ERRNO_CODES.EINVAL);
3702        return -1;
3703      } else {
3704        var bytesRead;
3705        if (stream.object.isDevice) {
3706          if (stream.object.input) {
3707            bytesRead = 0;
3708            while (stream.ungotten.length && nbyte > 0) {
3709              HEAP8[((buf++)|0)]=stream.ungotten.pop()
3710              nbyte--;
3711              bytesRead++;
3712            }
3713            for (var i = 0; i < nbyte; i++) {
3714              try {
3715                var result = stream.object.input();
3716              } catch (e) {
3717                ___setErrNo(ERRNO_CODES.EIO);
3718                return -1;
3719              }
3720              if (result === undefined && bytesRead === 0) {
3721                ___setErrNo(ERRNO_CODES.EAGAIN);
3722                return -1;
3723              }
3724              if (result === null || result === undefined) break;
3725              bytesRead++;
3726              HEAP8[(((buf)+(i))|0)]=result
3727            }
3728            return bytesRead;
3729          } else {
3730            ___setErrNo(ERRNO_CODES.ENXIO);
3731            return -1;
3732          }
3733        } else {
3734          var ungotSize = stream.ungotten.length;
3735          bytesRead = _pread(fildes, buf, nbyte, stream.position);
3736          if (bytesRead != -1) {
3737            stream.position += (stream.ungotten.length - ungotSize) + bytesRead;
3738          }
3739          return bytesRead;
3740        }
3741      }
3742    }function _fread(ptr, size, nitems, stream) {
3743      // size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
3744      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
3745      var bytesToRead = nitems * size;
3746      if (bytesToRead == 0) return 0;
3747      var bytesRead = _read(stream, ptr, bytesToRead);
3748      var streamObj = FS.streams[stream];
3749      if (bytesRead == -1) {
3750        if (streamObj) streamObj.error = true;
3751        return 0;
3752      } else {
3753        if (bytesRead < bytesToRead) streamObj.eof = true;
3754        return Math.floor(bytesRead / size);
3755      }
3756    }
3757  var ___dirent_struct_layout={__size__:1040,d_ino:0,d_name:4,d_off:1028,d_reclen:1032,d_type:1036};function _open(path, oflag, varargs) {
3758      // int open(const char *path, int oflag, ...);
3759      // http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html
3760      // NOTE: This implementation tries to mimic glibc rather than strictly
3761      // following the POSIX standard.
3762      var mode = HEAP32[((varargs)>>2)];
3763      // Simplify flags.
3764      var accessMode = oflag & 3;
3765      var isWrite = accessMode != 0;
3766      var isRead = accessMode != 1;
3767      var isCreate = Boolean(oflag & 512);
3768      var isExistCheck = Boolean(oflag & 2048);
3769      var isTruncate = Boolean(oflag & 1024);
3770      var isAppend = Boolean(oflag & 8);
3771      // Verify path.
3772      var origPath = path;
3773      path = FS.analyzePath(Pointer_stringify(path));
3774      if (!path.parentExists) {
3775        ___setErrNo(path.error);
3776        return -1;
3777      }
3778      var target = path.object || null;
3779      var finalPath;
3780      // Verify the file exists, create if needed and allowed.
3781      if (target) {
3782        if (isCreate && isExistCheck) {
3783          ___setErrNo(ERRNO_CODES.EEXIST);
3784          return -1;
3785        }
3786        if ((isWrite || isCreate || isTruncate) && target.isFolder) {
3787          ___setErrNo(ERRNO_CODES.EISDIR);
3788          return -1;
3789        }
3790        if (isRead && !target.read || isWrite && !target.write) {
3791          ___setErrNo(ERRNO_CODES.EACCES);
3792          return -1;
3793        }
3794        if (isTruncate && !target.isDevice) {
3795          target.contents = [];
3796        } else {
3797          if (!FS.forceLoadFile(target)) {
3798            ___setErrNo(ERRNO_CODES.EIO);
3799            return -1;
3800          }
3801        }
3802        finalPath = path.path;
3803      } else {
3804        if (!isCreate) {
3805          ___setErrNo(ERRNO_CODES.ENOENT);
3806          return -1;
3807        }
3808        if (!path.parentObject.write) {
3809          ___setErrNo(ERRNO_CODES.EACCES);
3810          return -1;
3811        }
3812        target = FS.createDataFile(path.parentObject, path.name, [],
3813                                   mode & 0x100, mode & 0x80);  // S_IRUSR, S_IWUSR.
3814        finalPath = path.parentPath + '/' + path.name;
3815      }
3816      // Actually create an open stream.
3817      var id;
3818      if (target.isFolder) {
3819        var entryBuffer = 0;
3820        if (___dirent_struct_layout) {
3821          entryBuffer = _malloc(___dirent_struct_layout.__size__);
3822        }
3823        var contents = [];
3824        for (var key in target.contents) contents.push(key);
3825        id = FS.createFileHandle({
3826          path: finalPath,
3827          object: target,
3828          // An index into contents. Special values: -2 is ".", -1 is "..".
3829          position: -2,
3830          isRead: true,
3831          isWrite: false,
3832          isAppend: false,
3833          error: false,
3834          eof: false,
3835          ungotten: [],
3836          // Folder-specific properties:
3837          // Remember the contents at the time of opening in an array, so we can
3838          // seek between them relying on a single order.
3839          contents: contents,
3840          // Each stream has its own area for readdir() returns.
3841          currentEntry: entryBuffer
3842        });
3843      } else {
3844        id = FS.createFileHandle({
3845          path: finalPath,
3846          object: target,
3847          position: 0,
3848          isRead: isRead,
3849          isWrite: isWrite,
3850          isAppend: isAppend,
3851          error: false,
3852          eof: false,
3853          ungotten: []
3854        });
3855      }
3856      return id;
3857    }function _fopen(filename, mode) {
3858      // FILE *fopen(const char *restrict filename, const char *restrict mode);
3859      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
3860      var flags;
3861      mode = Pointer_stringify(mode);
3862      if (mode[0] == 'r') {
3863        if (mode.indexOf('+') != -1) {
3864          flags = 2;
3865        } else {
3866          flags = 0;
3867        }
3868      } else if (mode[0] == 'w') {
3869        if (mode.indexOf('+') != -1) {
3870          flags = 2;
3871        } else {
3872          flags = 1;
3873        }
3874        flags |= 512;
3875        flags |= 1024;
3876      } else if (mode[0] == 'a') {
3877        if (mode.indexOf('+') != -1) {
3878          flags = 2;
3879        } else {
3880          flags = 1;
3881        }
3882        flags |= 512;
3883        flags |= 8;
3884      } else {
3885        ___setErrNo(ERRNO_CODES.EINVAL);
3886        return 0;
3887      }
3888      var ret = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK));  // All creation permissions.
3889      return (ret == -1) ? 0 : ret;
3890    }
3891  function _pthread_mutex_destroy() {}
3892  function _close(fildes) {
3893      // int close(int fildes);
3894      // http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html
3895      if (FS.streams[fildes]) {
3896        if (FS.streams[fildes].currentEntry) {
3897          _free(FS.streams[fildes].currentEntry);
3898        }
3899        FS.streams[fildes] = null;
3900        return 0;
3901      } else {
3902        ___setErrNo(ERRNO_CODES.EBADF);
3903        return -1;
3904      }
3905    }
3906  function _fsync(fildes) {
3907      // int fsync(int fildes);
3908      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html
3909      if (FS.streams[fildes]) {
3910        // We write directly to the file system, so there's nothing to do here.
3911        return 0;
3912      } else {
3913        ___setErrNo(ERRNO_CODES.EBADF);
3914        return -1;
3915      }
3916    }function _fclose(stream) {
3917      // int fclose(FILE *stream);
3918      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html
3919      _fsync(stream);
3920      return _close(stream);
3921    }
3922  function _pthread_mutex_init() {}
3923  function _gettimeofday(ptr) {
3924      // %struct.timeval = type { i32, i32 }
3925      var now = Date.now();
3926      HEAP32[((ptr)>>2)]=Math.floor(now/1000); // seconds
3927      HEAP32[(((ptr)+(4))>>2)]=Math.floor((now-1000*Math.floor(now/1000))*1000); // microseconds
3928      return 0;
3929    }
3930  function ___cxa_rethrow() {
3931      ___cxa_end_catch.rethrown = true;
3932      throw HEAP32[((_llvm_eh_exception.buf)>>2)] + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";;
3933    }
3934  function ___errno_location() {
3935      return ___errno_state;
3936    }var ___errno=___errno_location;
3937  function ___cxa_pure_virtual() {
3938      ABORT = true;
3939      throw 'Pure virtual function called!';
3940    }
3941  function _Mix_OpenAudio(frequency, format, channels, chunksize) {
3942      SDL.allocateChannels(32);
3943      // Just record the values for a later call to Mix_QuickLoad_RAW
3944      SDL.mixerFrequency = frequency;
3945      SDL.mixerFormat = format;
3946      SDL.mixerNumChannels = channels;
3947      SDL.mixerChunkSize = chunksize;
3948      return 0;
3949    }
3950  Module["_tolower"] = _tolower;
3951  Module["_strncasecmp"] = _strncasecmp;
3952  Module["_strcasecmp"] = _strcasecmp;
3953  function _Mix_LoadWAV_RW(filename, freesrc) {
3954      filename = FS.standardizePath(Pointer_stringify(filename));
3955      var raw = Module["preloadedAudios"][filename];
3956      if (!raw) {
3957        if (raw === null) Module.printErr('Trying to reuse preloaded audio, but freePreloadedMediaOnUse is set!');
3958        Runtime.warnOnce('Cannot find preloaded audio ' + filename);
3959        return 0;
3960      }
3961      if (Module['freePreloadedMediaOnUse']) {
3962        Module["preloadedAudios"][filename] = null;
3963      }
3964      var id = SDL.audios.length;
3965      // Keep the loaded audio in the audio arrays, ready for playback
3966      SDL.audios.push({
3967        source: filename,
3968        audio: raw
3969      });
3970      return id;
3971    }
3972  function _SDL_RWFromFile(filename, mode) {
3973      return filename; // XXX We just forward the filename
3974    }
3975  function _Mix_FreeChunk(id) {
3976      SDL.audios[id] = null;
3977    }
3978  function _Mix_PlayChannel(channel, id, loops) {
3979      // TODO: handle loops
3980      // Get the audio element associated with the ID
3981      var info = SDL.audios[id];
3982      if (!info) return -1;
3983      var audio = info.audio;
3984      if (!audio) return -1;
3985      // If the user asks us to allocate a channel automatically, get the first
3986      // free one.
3987      if (channel == -1) {
3988        channel = SDL.channelMinimumNumber;
3989        for (var i = SDL.channelMinimumNumber; i < SDL.numChannels; i++) {
3990          if (!SDL.channels[i].audio) {
3991            channel = i;
3992            break;
3993          }
3994        }
3995      }
3996      // We clone the audio node to utilize the preloaded audio buffer, since
3997      // the browser has already preloaded the audio file.
3998      var channelInfo = SDL.channels[channel];
3999      channelInfo.audio = audio = audio.cloneNode(true);
4000      audio.numChannels = info.audio.numChannels;
4001      audio.frequency = info.audio.frequency;
4002      // TODO: handle N loops. Behavior matches Mix_PlayMusic
4003      audio.loop = loops != 0;
4004      if (SDL.channelFinished) {
4005        audio['onended'] = function() { // TODO: cache these
4006          Runtime.getFuncWrapper(SDL.channelFinished, 'vi')(channel);
4007        }
4008      }
4009      // Either play the element, or load the dynamic data into it
4010      if (info.buffer) {
4011        var contextCtor = null;
4012        if (audio && ('mozSetup' in audio)) { // Audio Data API
4013          try {
4014            audio['mozSetup'](audio.numChannels, audio.frequency);
4015            audio["mozWriteAudio"](info.buffer);
4016          } catch (e) {
4017            // Workaround for Firefox bug 783052
4018            // ignore this exception!
4019          }
4020        /*
4021        } else if (contextCtor = (window.AudioContext || // WebAudio API
4022                                  window.webkitAudioContext)) {
4023          var currentIndex = 0;
4024          var numChannels = parseInt(audio.numChannels);
4025          var context = new contextCtor();
4026          var source = context.createBufferSource();
4027          source.loop = false;
4028          source.buffer = context.createBuffer(numChannels, 1, audio.frequency);
4029          var jsNode = context.createJavaScriptNode(2048, numChannels, numChannels);
4030          jsNode.onaudioprocess = function(event) {
4031            var buffers = new Array(numChannels);
4032            for (var i = 0; i < numChannels; ++i) {
4033              buffers[i] = event.outputBuffer.getChannelData(i);
4034            }
4035            var remaining = info.buffer.length - currentIndex;
4036            if (remaining > 2048) {
4037              remaining = 2048;
4038            }
4039            for (var i = 0; i < remaining;) {
4040              for (var j = 0; j < numChannels; ++j) {
4041                buffers[j][i] = info.buffer[currentIndex + i + j] * audio.volume;
4042              }
4043              i += j;
4044            }
4045            currentIndex += remaining * numChannels;
4046            for (var i = remaining; i < 2048;) {
4047              for (var j = 0; j < numChannels; ++j) {
4048                buffers[j][i] = 0; // silence
4049              }
4050              i += j;
4051            }
4052          };
4053          source.connect(jsNode);
4054          jsNode.connect(context.destination);
4055          source.noteOn(0);
4056        */
4057        }
4058      } else {
4059        audio.play();
4060      }
4061      audio.volume = channelInfo.volume;
4062      audio.paused = false;
4063      return channel;
4064    }var _Mix_PlayChannelTimed=_Mix_PlayChannel;
4065  function _SDL_LockSurface(surf) {
4066      var surfData = SDL.surfaces[surf];
4067      surfData.locked++;
4068      if (surfData.locked > 1) return 0;
4069      surfData.image = surfData.ctx.getImageData(0, 0, surfData.width, surfData.height);
4070      if (surf == SDL.screen) {
4071        var data = surfData.image.data;
4072        var num = data.length;
4073        for (var i = 0; i < num/4; i++) {
4074          data[i*4+3] = 255; // opacity, as canvases blend alpha
4075        }
4076      }
4077      if (SDL.defaults.copyOnLock) {
4078        // Copy pixel data to somewhere accessible to 'C/C++'
4079        if (surfData.isFlagSet(0x00200000 /* SDL_HWPALETTE */)) {
4080          // If this is neaded then
4081          // we should compact the data from 32bpp to 8bpp index.
4082          // I think best way to implement this is use
4083          // additional colorMap hash (color->index).
4084          // Something like this:
4085          //
4086          // var size = surfData.width * surfData.height;
4087          // var data = '';
4088          // for (var i = 0; i<size; i++) {
4089          //   var color = SDL.translateRGBAToColor(
4090          //     surfData.image.data[i*4   ],
4091          //     surfData.image.data[i*4 +1],
4092          //     surfData.image.data[i*4 +2],
4093          //     255);
4094          //   var index = surfData.colorMap[color];
4095          //   HEAP8[(((surfData.buffer)+(i))|0)]=index;
4096          // }
4097          throw 'CopyOnLock is not supported for SDL_LockSurface with SDL_HWPALETTE flag set' + new Error().stack;
4098        } else {
4099        HEAPU8.set(surfData.image.data, surfData.buffer);
4100        }
4101      }
4102      // Mark in C/C++-accessible SDL structure
4103      // SDL_Surface has the following fields: Uint32 flags, SDL_PixelFormat *format; int w, h; Uint16 pitch; void *pixels; ...
4104      // So we have fields all of the same size, and 5 of them before us.
4105      // TODO: Use macros like in library.js
4106      HEAP32[(((surf)+(5*Runtime.QUANTUM_SIZE))>>2)]=surfData.buffer;
4107      return 0;
4108    }function _IMG_Load(filename) {
4109      filename = FS.standardizePath(Pointer_stringify(filename));
4110      if (filename[0] == '/') {
4111        // Convert the path to relative
4112        filename = filename.substr(1);
4113      }
4114      var raw = Module["preloadedImages"][filename];
4115      if (!raw) {
4116        if (raw === null) Module.printErr('Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!');
4117        Runtime.warnOnce('Cannot find preloaded image ' + filename);
4118        return 0;
4119      }
4120      if (Module['freePreloadedMediaOnUse']) {
4121        Module["preloadedImages"][filename] = null;
4122      }
4123      var surf = SDL.makeSurface(raw.width, raw.height, 0, false, 'load:' + filename);
4124      var surfData = SDL.surfaces[surf];
4125      surfData.ctx.globalCompositeOperation = "copy";
4126      surfData.ctx.drawImage(raw, 0, 0, raw.width, raw.height, 0, 0, raw.width, raw.height);
4127      surfData.ctx.globalCompositeOperation = "source-over";
4128      // XXX SDL does not specify that loaded images must have available pixel data, in fact
4129      //     there are cases where you just want to blit them, so you just need the hardware
4130      //     accelerated version. However, code everywhere seems to assume that the pixels
4131      //     are in fact available, so we retrieve it here. This does add overhead though.
4132      _SDL_LockSurface(surf);
4133      surfData.locked--; // The surface is not actually locked in this hack
4134      if (SDL.GL) {
4135        // After getting the pixel data, we can free the canvas and context if we do not need to do 2D canvas blitting
4136        surfData.canvas = surfData.ctx = null;
4137      }
4138      return surf;
4139    }
4140  function _SDL_UpperBlit(src, srcrect, dst, dstrect) {
4141      var srcData = SDL.surfaces[src];
4142      var dstData = SDL.surfaces[dst];
4143      var sr, dr;
4144      if (srcrect) {
4145        sr = SDL.loadRect(srcrect);
4146      } else {
4147        sr = { x: 0, y: 0, w: srcData.width, h: srcData.height };
4148      }
4149      if (dstrect) {
4150        dr = SDL.loadRect(dstrect);
4151      } else {
4152        dr = { x: 0, y: 0, w: -1, h: -1 };
4153      }
4154      dstData.ctx.drawImage(srcData.canvas, sr.x, sr.y, sr.w, sr.h, dr.x, dr.y, sr.w, sr.h);
4155      if (dst != SDL.screen) {
4156        // XXX As in IMG_Load, for compatibility we write out |pixels|
4157        console.log('WARNING: copying canvas data to memory for compatibility');
4158        _SDL_LockSurface(dst);
4159        dstData.locked--; // The surface is not actually locked in this hack
4160      }
4161      return 0;
4162    }
4163  function _SDL_FreeSurface(surf) {
4164      if (surf) SDL.freeSurface(surf);
4165    }
4166  function _SDL_CreateRGBSurface(flags, width, height, depth, rmask, gmask, bmask, amask) {
4167      return SDL.makeSurface(width, height, flags, false, 'CreateRGBSurface', rmask, gmask, bmask, amask);
4168    }
4169  var _floor=Math.floor;
4170  var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"No message of desired type",36:"Identifier removed",37:"Channel number out of range",38:"Level 2 not synchronized",39:"Level 3 halted",40:"Level 3 reset",41:"Link number out of range",42:"Protocol driver not attached",43:"No CSI structure available",44:"Level 2 halted",45:"Deadlock condition",46:"No record locks available",50:"Invalid exchange",51:"Invalid request descriptor",52:"Exchange full",53:"No anode",54:"Invalid request code",55:"Invalid slot",56:"File locking deadlock error",57:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",74:"Multihop attempted",75:"Inode is remote (not really error)",76:"Cross mount point (not really error)",77:"Trying to read unreadable message",79:"Inappropriate file type or format",80:"Given log. name not unique",81:"f.d. invalid for this operation",82:"Remote address changed",83:"Can\t access a needed shared lib",84:"Accessing a corrupted shared lib",85:".lib section in a.out corrupted",86:"Attempting to link in too many libs",87:"Attempting to exec a shared library",88:"Function not implemented",89:"No more files",90:"Directory not empty",91:"File or path name too long",92:"Too many symbolic links",95:"Operation not supported on transport endpoint",96:"Protocol family not supported",104:"Connection reset by peer",105:"No buffer space available",106:"Address family not supported by protocol family",107:"Protocol wrong type for socket",108:"Socket operation on non-socket",109:"Protocol not available",110:"Can't send after socket shutdown",111:"Connection refused",112:"Address already in use",113:"Connection aborted",114:"Network is unreachable",115:"Network interface is not configured",116:"Connection timed out",117:"Host is down",118:"Host is unreachable",119:"Connection already in progress",120:"Socket already connected",121:"Destination address required",122:"Message too long",123:"Unknown protocol",124:"Socket type not supported",125:"Address not available",126:"ENETRESET",127:"Socket is already connected",128:"Socket is not connected",129:"TOOMANYREFS",130:"EPROCLIM",131:"EUSERS",132:"EDQUOT",133:"ESTALE",134:"Not supported",135:"No medium (in tape drive)",136:"No such host or network path",137:"Filename exists with different case",138:"EILSEQ",139:"Value too large for defined data type",140:"Operation canceled",141:"State not recoverable",142:"Previous owner died",143:"Streams pipe error"};function _strerror_r(errnum, strerrbuf, buflen) {
4171      if (errnum in ERRNO_MESSAGES) {
4172        if (ERRNO_MESSAGES[errnum].length > buflen - 1) {
4173          return ___setErrNo(ERRNO_CODES.ERANGE);
4174        } else {
4175          var msg = ERRNO_MESSAGES[errnum];
4176          for (var i = 0; i < msg.length; i++) {
4177            HEAP8[(((strerrbuf)+(i))|0)]=msg.charCodeAt(i)
4178          }
4179          HEAP8[(((strerrbuf)+(i))|0)]=0
4180          return 0;
4181        }
4182      } else {
4183        return ___setErrNo(ERRNO_CODES.EINVAL);
4184      }
4185    }function _strerror(errnum) {
4186      if (!_strerror.buffer) _strerror.buffer = _malloc(256);
4187      _strerror_r(errnum, _strerror.buffer, 256);
4188      return _strerror.buffer;
4189    }
4190  function _freopen(filename, mode, stream) {
4191      // FILE *freopen(const char *restrict filename, const char *restrict mode, FILE *restrict stream);
4192      // http://pubs.opengroup.org/onlinepubs/000095399/functions/freopen.html
4193      if (!filename) {
4194        if (!FS.streams[stream]) {
4195          ___setErrNo(ERRNO_CODES.EBADF);
4196          return 0;
4197        }
4198        if (_freopen.buffer) _free(_freopen.buffer);
4199        filename = intArrayFromString(FS.streams[stream].path);
4200        filename = allocate(filename, 'i8', ALLOC_NORMAL);
4201      }
4202      _fclose(stream);
4203      return _fopen(filename, mode);
4204    }
4205  function _ferror(stream) {
4206      // int ferror(FILE *stream);
4207      // http://pubs.opengroup.org/onlinepubs/000095399/functions/ferror.html
4208      return Number(FS.streams[stream] && FS.streams[stream].error);
4209    }
4210  function _fflush(stream) {
4211      // int fflush(FILE *stream);
4212      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
4213      var flush = function(filedes) {
4214        // Right now we write all data directly, except for output devices.
4215        if (FS.streams[filedes] && FS.streams[filedes].object.output) {
4216          if (!FS.streams[filedes].isTerminal) { // don't flush terminals, it would cause a \n to also appear
4217            FS.streams[filedes].object.output(null);
4218          }
4219        }
4220      };
4221      try {
4222        if (stream === 0) {
4223          for (var i = 0; i < FS.streams.length; i++) if (FS.streams[i]) flush(i);
4224        } else {
4225          flush(stream);
4226        }
4227        return 0;
4228      } catch (e) {
4229        ___setErrNo(ERRNO_CODES.EIO);
4230        return -1;
4231      }
4232    }
4233  function _feof(stream) {
4234      // int feof(FILE *stream);
4235      // http://pubs.opengroup.org/onlinepubs/000095399/functions/feof.html
4236      return Number(FS.streams[stream] && FS.streams[stream].eof);
4237    }
4238  function _fgetc(stream) {
4239      // int fgetc(FILE *stream);
4240      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html
4241      if (!FS.streams[stream]) return -1;
4242      var streamObj = FS.streams[stream];
4243      if (streamObj.eof || streamObj.error) return -1;
4244      var ret = _read(stream, _fgetc.ret, 1);
4245      if (ret == 0) {
4246        streamObj.eof = true;
4247        return -1;
4248      } else if (ret == -1) {
4249        streamObj.error = true;
4250        return -1;
4251      } else {
4252        return HEAPU8[((_fgetc.ret)|0)];
4253      }
4254    }var _getc=_fgetc;
4255  function _strchr(ptr, chr) {
4256      ptr--;
4257      do {
4258        ptr++;
4259        var val = HEAP8[(ptr)];
4260        if (val == chr) return ptr;
4261      } while (val);
4262      return 0;
4263    }
4264  function _fputc(c, stream) {
4265      // int fputc(int c, FILE *stream);
4266      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
4267      var chr = unSign(c & 0xFF);
4268      HEAP8[((_fputc.ret)|0)]=chr
4269      var ret = _write(stream, _fputc.ret, 1);
4270      if (ret == -1) {
4271        if (FS.streams[stream]) FS.streams[stream].error = true;
4272        return -1;
4273      } else {
4274        return chr;
4275      }
4276    }function _putchar(c) {
4277      // int putchar(int c);
4278      // http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html
4279      return _fputc(c, HEAP32[((_stdout)>>2)]);
4280    }
4281  Module["_saveSetjmp"] = _saveSetjmp;
4282  Module["_testSetjmp"] = _testSetjmp;function _longjmp(env, value) {
4283      asm['setThrew'](env, value || 1);
4284      throw 'longjmp';
4285    }
4286  var _setjmp=undefined;
4287  var _tan=Math.tan;
4288  function _sinh(x) {
4289      var p = Math.pow(Math.E, x);
4290      return (p - (1 / p)) / 2;
4291    }
4292  function _cosh(x) {
4293      var p = Math.pow(Math.E, x);
4294      return (p + (1 / p)) / 2;
4295    }function _tanh(x) {
4296      return _sinh(x) / _cosh(x);
4297    }
4298  var _sin=Math.sin;
4299  function _srand(seed) {}
4300  var _llvm_pow_f64=Math.pow;
4301  function _modf(x, intpart) {
4302      HEAPF64[((intpart)>>3)]=Math.floor(x)
4303      return x - HEAPF64[((intpart)>>3)];
4304    }
4305  var _log=Math.log;
4306  function _log10(x) {
4307      return Math.log(x) / Math.LN10;
4308    }
4309  function _ldexp(x, exp_) {
4310      return x * Math.pow(2, exp_);
4311    }
4312  function _frexp(x, exp_addr) {
4313      var sig = 0, exp_ = 0;
4314      if (x !== 0) {
4315        var sign = 1;
4316        if (x < 0) {
4317          x = -x;
4318          sign = -1;
4319        }
4320        var raw_exp = Math.log(x)/Math.log(2);
4321        exp_ = Math.ceil(raw_exp);
4322        if (exp_ === raw_exp) exp_ += 1;
4323        sig = sign*x/Math.pow(2, exp_);
4324      }
4325      HEAP32[((exp_addr)>>2)]=exp_
4326      return sig;
4327    }
4328  var _exp=Math.exp;
4329  var _cos=Math.cos;
4330  var _ceil=Math.ceil;
4331  var _atan=Math.atan;
4332  var _atan2=Math.atan2;
4333  var _asin=Math.asin;
4334  var _acos=Math.acos;
4335  var _fabs=Math.abs;
4336  var _environ=allocate(1, "i32*", ALLOC_STATIC);var ___environ=_environ;function ___buildEnvironment(env) {
4337      // WARNING: Arbitrary limit!
4338      var MAX_ENV_VALUES = 64;
4339      var TOTAL_ENV_SIZE = 1024;
4340      // Statically allocate memory for the environment.
4341      var poolPtr;
4342      var envPtr;
4343      if (!___buildEnvironment.called) {
4344        ___buildEnvironment.called = true;
4345        // Set default values. Use string keys for Closure Compiler compatibility.
4346        ENV['USER'] = 'root';
4347        ENV['PATH'] = '/';
4348        ENV['PWD'] = '/';
4349        ENV['HOME'] = '/home/emscripten';
4350        ENV['LANG'] = 'en_US.UTF-8';
4351        ENV['_'] = './this.program';
4352        // Allocate memory.
4353        poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC);
4354        envPtr = allocate(MAX_ENV_VALUES * 4,
4355                          'i8*', ALLOC_STATIC);
4356        HEAP32[((envPtr)>>2)]=poolPtr
4357        HEAP32[((_environ)>>2)]=envPtr;
4358      } else {
4359        envPtr = HEAP32[((_environ)>>2)];
4360        poolPtr = HEAP32[((envPtr)>>2)];
4361      }
4362      // Collect key=value lines.
4363      var strings = [];
4364      var totalSize = 0;
4365      for (var key in env) {
4366        if (typeof env[key] === 'string') {
4367          var line = key + '=' + env[key];
4368          strings.push(line);
4369          totalSize += line.length;
4370        }
4371      }
4372      if (totalSize > TOTAL_ENV_SIZE) {
4373        throw new Error('Environment size exceeded TOTAL_ENV_SIZE!');
4374      }
4375      // Make new.
4376      var ptrSize = 4;
4377      for (var i = 0; i < strings.length; i++) {
4378        var line = strings[i];
4379        for (var j = 0; j < line.length; j++) {
4380          HEAP8[(((poolPtr)+(j))|0)]=line.charCodeAt(j);
4381        }
4382        HEAP8[(((poolPtr)+(j))|0)]=0;
4383        HEAP32[(((envPtr)+(i * ptrSize))>>2)]=poolPtr;
4384        poolPtr += line.length + 1;
4385      }
4386      HEAP32[(((envPtr)+(strings.length * ptrSize))>>2)]=0;
4387    }var ENV={};function _getenv(name) {
4388      // char *getenv(const char *name);
4389      // http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
4390      if (name === 0) return 0;
4391      name = Pointer_stringify(name);
4392      if (!ENV.hasOwnProperty(name)) return 0;
4393      if (_getenv.ret) _free(_getenv.ret);
4394      _getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL);
4395      return _getenv.ret;
4396    }
4397  function _strpbrk(ptr1, ptr2) {
4398      var curr;
4399      var searchSet = {};
4400      while (1) {
4401        var curr = HEAP8[((ptr2++)|0)];
4402        if (!curr) break;
4403        searchSet[curr] = 1;
4404      }
4405      while (1) {
4406        curr = HEAP8[(ptr1)];
4407        if (!curr) break;
4408        if (curr in searchSet) return ptr1;
4409        ptr1++;
4410      }
4411      return 0;
4412    }
4413  function _snprintf(s, n, format, varargs) {
4414      // int snprintf(char *restrict s, size_t n, const char *restrict format, ...);
4415      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
4416      var result = __formatString(format, varargs);
4417      var limit = (n === undefined) ? result.length
4418                                    : Math.min(result.length, Math.max(n - 1, 0));
4419      if (s < 0) {
4420        s = -s;
4421        var buf = _malloc(limit+1);
4422        HEAP32[((s)>>2)]=buf;
4423        s = buf;
4424      }
4425      for (var i = 0; i < limit; i++) {
4426        HEAP8[(((s)+(i))|0)]=result[i];
4427      }
4428      if (limit < n || (n === undefined)) HEAP8[(((s)+(i))|0)]=0;
4429      return result.length;
4430    }function _sprintf(s, format, varargs) {
4431      // int sprintf(char *restrict s, const char *restrict format, ...);
4432      // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
4433      return _snprintf(s, undefined, format, varargs);
4434    }
4435  function _time(ptr) {
4436      var ret = Math.floor(Date.now()/1000);
4437      if (ptr) {
4438        HEAP32[((ptr)>>2)]=ret
4439      }
4440      return ret;
4441    }
4442  function _toupper(chr) {
4443      if (chr >= 97 && chr <= 122) {
4444        return chr - 97 + 65;
4445      } else {
4446        return chr;
4447      }
4448    }
4449  function _isalpha(chr) {
4450      return (chr >= 97 && chr <= 122) ||
4451             (chr >= 65 && chr <= 90);
4452    }
4453  function _iscntrl(chr) {
4454      return (0 <= chr && chr <= 0x1F) || chr === 0x7F;
4455    }
4456  function _isprint(chr) {
4457      return 0x1F < chr && chr < 0x7F;
4458    }var _isgraph=_isprint;
4459  function _islower(chr) {
4460      return chr >= 97 && chr <= 122;
4461    }
4462  function _ispunct(chr) {
4463      return (chr >= 33 && chr <= 47) ||
4464             (chr >= 58 && chr <= 64) ||
4465             (chr >= 91 && chr <= 96) ||
4466             (chr >= 123 && chr <= 126);
4467    }
4468  function _isupper(chr) {
4469      return chr >= 65 && chr <= 90;
4470    }
4471  function _isalnum(chr) {
4472      return (chr >= 48 && chr <= 57) ||
4473             (chr >= 97 && chr <= 122) ||
4474             (chr >= 65 && chr <= 90);
4475    }
4476  function _isxdigit(chr) {
4477      return (chr >= 48 && chr <= 57) ||
4478             (chr >= 97 && chr <= 102) ||
4479             (chr >= 65 && chr <= 70);
4480    }
4481  function _memchr(ptr, chr, num) {
4482      chr = unSign(chr);
4483      for (var i = 0; i < num; i++) {
4484        if (HEAP8[(ptr)] == chr) return ptr;
4485        ptr++;
4486      }
4487      return 0;
4488    }
4489  var _strcoll=_strcmp;
4490  function _strspn(pstr, pset) {
4491      var str = pstr, set, strcurr, setcurr;
4492      while (1) {
4493        strcurr = HEAP8[(str)];
4494        if (!strcurr) return str - pstr;
4495        set = pset;
4496        while (1) {
4497          setcurr = HEAP8[(set)];
4498          if (!setcurr || setcurr == strcurr) break;
4499          set++;
4500        }
4501        if (!setcurr) return str - pstr;
4502        str++;
4503      }
4504    }
4505  function _fgets(s, n, stream) {
4506      // char *fgets(char *restrict s, int n, FILE *restrict stream);
4507      // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgets.html
4508      if (!FS.streams[stream]) return 0;
4509      var streamObj = FS.streams[stream];
4510      if (streamObj.error || streamObj.eof) return 0;
4511      var byte_;
4512      for (var i = 0; i < n - 1 && byte_ != 10; i++) {
4513        byte_ = _fgetc(stream);
4514        if (byte_ == -1) {
4515          if (streamObj.error || (streamObj.eof && i == 0)) return 0;
4516          else if (streamObj.eof) break;
4517        }
4518        HEAP8[(((s)+(i))|0)]=byte_
4519      }
4520      HEAP8[(((s)+(i))|0)]=0
4521      return s;
4522    }
4523  function _localeconv() {
4524      // %struct.timeval = type { char* decimal point, other stuff... }
4525      // var indexes = Runtime.calculateStructAlignment({ fields: ['i32', 'i32'] });
4526      var me = _localeconv;
4527      if (!me.ret) {
4528        me.ret = allocate([allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL)], 'i8*', ALLOC_NORMAL); // just decimal point, for now
4529      }
4530      return me.ret;
4531    }
4532  function _pthread_cond_broadcast() {
4533      return 0;
4534    }
4535  function _pthread_cond_wait() {
4536      return 0;
4537    }
4538  function ___cxa_allocate_exception(size) {
4539      return _malloc(size);
4540    }
4541  function ___cxa_is_number_type(type) {
4542      var isNumber = false;
4543      try { if (type == __ZTIi) isNumber = true } catch(e){}
4544      try { if (type == __ZTIj) isNumber = true } catch(e){}
4545      try { if (type == __ZTIl) isNumber = true } catch(e){}
4546      try { if (type == __ZTIm) isNumber = true } catch(e){}
4547      try { if (type == __ZTIx) isNumber = true } catch(e){}
4548      try { if (type == __ZTIy) isNumber = true } catch(e){}
4549      try { if (type == __ZTIf) isNumber = true } catch(e){}
4550      try { if (type == __ZTId) isNumber = true } catch(e){}
4551      try { if (type == __ZTIe) isNumber = true } catch(e){}
4552      try { if (type == __ZTIc) isNumber = true } catch(e){}
4553      try { if (type == __ZTIa) isNumber = true } catch(e){}
4554      try { if (type == __ZTIh) isNumber = true } catch(e){}
4555      try { if (type == __ZTIs) isNumber = true } catch(e){}
4556      try { if (type == __ZTIt) isNumber = true } catch(e){}
4557      return isNumber;
4558    }function ___cxa_does_inherit(definiteType, possibilityType, possibility) {
4559      if (possibility == 0) return false;
4560      if (possibilityType == 0 || possibilityType == definiteType)
4561        return true;
4562      var possibility_type_info;
4563      if (___cxa_is_number_type(possibilityType)) {
4564        possibility_type_info = possibilityType;
4565      } else {
4566        var possibility_type_infoAddr = HEAP32[((possibilityType)>>2)] - 8;
4567        possibility_type_info = HEAP32[((possibility_type_infoAddr)>>2)];
4568      }
4569      switch (possibility_type_info) {
4570      case 0: // possibility is a pointer
4571        // See if definite type is a pointer
4572        var definite_type_infoAddr = HEAP32[((definiteType)>>2)] - 8;
4573        var definite_type_info = HEAP32[((definite_type_infoAddr)>>2)];
4574        if (definite_type_info == 0) {
4575          // Also a pointer; compare base types of pointers
4576          var defPointerBaseAddr = definiteType+8;
4577          var defPointerBaseType = HEAP32[((defPointerBaseAddr)>>2)];
4578          var possPointerBaseAddr = possibilityType+8;
4579          var possPointerBaseType = HEAP32[((possPointerBaseAddr)>>2)];
4580          return ___cxa_does_inherit(defPointerBaseType, possPointerBaseType, possibility);
4581        } else
4582          return false; // one pointer and one non-pointer
4583      case 1: // class with no base class
4584        return false;
4585      case 2: // class with base class
4586        var parentTypeAddr = possibilityType + 8;
4587        var parentType = HEAP32[((parentTypeAddr)>>2)];
4588        return ___cxa_does_inherit(definiteType, parentType, possibility);
4589      default:
4590        return false; // some unencountered type
4591      }
4592    }
4593  function ___resumeException(ptr) {
4594      if (HEAP32[((_llvm_eh_exception.buf)>>2)] == 0) HEAP32[((_llvm_eh_exception.buf)>>2)]=ptr;
4595      throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";;
4596    }function ___cxa_find_matching_catch(thrown, throwntype) {
4597      if (thrown == -1) thrown = HEAP32[((_llvm_eh_exception.buf)>>2)];
4598      if (throwntype == -1) throwntype = HEAP32[(((_llvm_eh_exception.buf)+(4))>>2)];
4599      var typeArray = Array.prototype.slice.call(arguments, 2);
4600      // If throwntype is a pointer, this means a pointer has been
4601      // thrown. When a pointer is thrown, actually what's thrown
4602      // is a pointer to the pointer. We'll dereference it.
4603      if (throwntype != 0 && !___cxa_is_number_type(throwntype)) {
4604        var throwntypeInfoAddr= HEAP32[((throwntype)>>2)] - 8;
4605        var throwntypeInfo= HEAP32[((throwntypeInfoAddr)>>2)];
4606        if (throwntypeInfo == 0)
4607          thrown = HEAP32[((thrown)>>2)];
4608      }
4609      // The different catch blocks are denoted by different types.
4610      // Due to inheritance, those types may not precisely match the
4611      // type of the thrown object. Find one which matches, and
4612      // return the type of the catch block which should be called.
4613      for (var i = 0; i < typeArray.length; i++) {
4614        if (___cxa_does_inherit(typeArray[i], throwntype, thrown))
4615          return ((asm["setTempRet0"](typeArray[i]),thrown)|0);
4616      }
4617      // Shouldn't happen unless we have bogus data in typeArray
4618      // or encounter a type for which emscripten doesn't have suitable
4619      // typeinfo defined. Best-efforts match just in case.
4620      return ((asm["setTempRet0"](throwntype),thrown)|0);
4621    }function ___cxa_throw(ptr, type, destructor) {
4622      if (!___cxa_throw.initialized) {
4623        try {
4624          HEAP32[((__ZTVN10__cxxabiv119__pointer_type_infoE)>>2)]=0; // Workaround for libcxxabi integration bug
4625        } catch(e){}
4626        try {
4627          HEAP32[((__ZTVN10__cxxabiv117__class_type_infoE)>>2)]=1; // Workaround for libcxxabi integration bug
4628        } catch(e){}
4629        try {
4630          HEAP32[((__ZTVN10__cxxabiv120__si_class_type_infoE)>>2)]=2; // Workaround for libcxxabi integration bug
4631        } catch(e){}
4632        ___cxa_throw.initialized = true;
4633      }
4634      HEAP32[((_llvm_eh_exception.buf)>>2)]=ptr
4635      HEAP32[(((_llvm_eh_exception.buf)+(4))>>2)]=type
4636      HEAP32[(((_llvm_eh_exception.buf)+(8))>>2)]=destructor
4637      if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) {
4638        __ZSt18uncaught_exceptionv.uncaught_exception = 1;
4639      } else {
4640        __ZSt18uncaught_exceptionv.uncaught_exception++;
4641      }
4642      throw ptr + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.";;
4643    }
4644  function _ungetc(c, stream) {
4645      // int ungetc(int c, FILE *stream);
4646      // http://pubs.opengroup.org/onlinepubs/000095399/functions/ungetc.html
4647      if (FS.streams[stream]) {
4648        c = unSign(c & 0xFF);
4649        FS.streams[stream].ungotten.push(c);
4650        return c;
4651      } else {
4652        return -1;
4653      }
4654    }
4655  function _sysconf(name) {
4656      // long sysconf(int name);
4657      // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
4658      switch(name) {
4659        case 8: return PAGE_SIZE;
4660        case 54:
4661        case 56:
4662        case 21:
4663        case 61:
4664        case 63:
4665        case 22:
4666        case 67:
4667        case 23:
4668        case 24:
4669        case 25:
4670        case 26:
4671        case 27:
4672        case 69:
4673        case 28:
4674        case 101:
4675        case 70:
4676        case 71:
4677        case 29:
4678        case 30:
4679        case 199:
4680        case 75:
4681        case 76:
4682        case 32:
4683        case 43:
4684        case 44:
4685        case 80:
4686        case 46:
4687        case 47:
4688        case 45:
4689        case 48:
4690        case 49:
4691        case 42:
4692        case 82:
4693        case 33:
4694        case 7:
4695        case 108:
4696        case 109:
4697        case 107:
4698        case 112:
4699        case 119:
4700        case 121:
4701          return 200809;
4702        case 13:
4703        case 104:
4704        case 94:
4705        case 95:
4706        case 34:
4707        case 35:
4708        case 77:
4709        case 81:
4710        case 83:
4711        case 84:
4712        case 85:
4713        case 86:
4714        case 87:
4715        case 88:
4716        case 89:
4717        case 90:
4718        case 91:
4719        case 94:
4720        case 95:
4721        case 110:
4722        case 111:
4723        case 113:
4724        case 114:
4725        case 115:
4726        case 116:
4727        case 117:
4728        case 118:
4729        case 120:
4730        case 40:
4731        case 16:
4732        case 79:
4733        case 19:
4734          return -1;
4735        case 92:
4736        case 93:
4737        case 5:
4738        case 72:
4739        case 6:
4740        case 74:
4741        case 92:
4742        case 93:
4743        case 96:
4744        case 97:
4745        case 98:
4746        case 99:
4747        case 102:
4748        case 103:
4749        case 105:
4750          return 1;
4751        case 38:
4752        case 66:
4753        case 50:
4754        case 51:
4755        case 4:
4756          return 1024;
4757        case 15:
4758        case 64:
4759        case 41:
4760          return 32;
4761        case 55:
4762        case 37:
4763        case 17:
4764          return 2147483647;
4765        case 18:
4766        case 1:
4767          return 47839;
4768        case 59:
4769        case 57:
4770          return 99;
4771        case 68:
4772        case 58:
4773          return 2048;
4774        case 0: return 2097152;
4775        case 3: return 65536;
4776        case 14: return 32768;
4777        case 73: return 32767;
4778        case 39: return 16384;
4779        case 60: return 1000;
4780        case 106: return 700;
4781        case 52: return 256;
4782        case 62: return 255;
4783        case 2: return 100;
4784        case 65: return 64;
4785        case 36: return 20;
4786        case 100: return 16;
4787        case 20: return 6;
4788        case 53: return 4;
4789        case 10: return 1;
4790      }
4791      ___setErrNo(ERRNO_CODES.EINVAL);
4792      return -1;
4793    }
4794  var _isxdigit_l=_isxdigit;
4795  function _isdigit(chr) {
4796      return chr >= 48 && chr <= 57;
4797    }var _isdigit_l=_isdigit;
4798  function __isFloat(text) {
4799      return !!(/^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?$/.exec(text));
4800    }function __scanString(format, get, unget, varargs) {
4801      if (!__scanString.whiteSpace) {
4802        __scanString.whiteSpace = {};
4803        __scanString.whiteSpace[32] = 1;
4804        __scanString.whiteSpace[9] = 1;
4805        __scanString.whiteSpace[10] = 1;
4806        __scanString.whiteSpace[11] = 1;
4807        __scanString.whiteSpace[12] = 1;
4808        __scanString.whiteSpace[13] = 1;
4809        __scanString.whiteSpace[' '] = 1;
4810        __scanString.whiteSpace['\t'] = 1;
4811        __scanString.whiteSpace['\n'] = 1;
4812        __scanString.whiteSpace['\v'] = 1;
4813        __scanString.whiteSpace['\f'] = 1;
4814        __scanString.whiteSpace['\r'] = 1;
4815      }
4816      // Supports %x, %4x, %d.%d, %lld, %s, %f, %lf.
4817      // TODO: Support all format specifiers.
4818      format = Pointer_stringify(format);
4819      var soFar = 0;
4820      if (format.indexOf('%n') >= 0) {
4821        // need to track soFar
4822        var _get = get;
4823        get = function() {
4824          soFar++;
4825          return _get();
4826        }
4827        var _unget = unget;
4828        unget = function() {
4829          soFar--;
4830          return _unget();
4831        }
4832      }
4833      var formatIndex = 0;
4834      var argsi = 0;
4835      var fields = 0;
4836      var argIndex = 0;
4837      var next;
4838      mainLoop:
4839      for (var formatIndex = 0; formatIndex < format.length;) {
4840        if (format[formatIndex] === '%' && format[formatIndex+1] == 'n') {
4841          var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
4842          argIndex += Runtime.getAlignSize('void*', null, true);
4843          HEAP32[((argPtr)>>2)]=soFar;
4844          formatIndex += 2;
4845          continue;
4846        }
4847        // TODO: Support strings like "%5c" etc.
4848        if (format[formatIndex] === '%' && format[formatIndex+1] == 'c') {
4849          var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
4850          argIndex += Runtime.getAlignSize('void*', null, true);
4851          fields++;
4852          next = get();
4853          HEAP8[(argPtr)]=next
4854          formatIndex += 2;
4855          continue;
4856        }
4857        // remove whitespace
4858        while (1) {
4859          next = get();
4860          if (next == 0) return fields;
4861          if (!(next in __scanString.whiteSpace)) break;
4862        }
4863        unget();
4864        if (format[formatIndex] === '%') {
4865          formatIndex++;
4866          var suppressAssignment = false;
4867          if (format[formatIndex] == '*') {
4868            suppressAssignment = true;
4869            formatIndex++;
4870          }
4871          var maxSpecifierStart = formatIndex;
4872          while (format[formatIndex].charCodeAt(0) >= 48 &&
4873                 format[formatIndex].charCodeAt(0) <= 57) {
4874            formatIndex++;
4875          }
4876          var max_;
4877          if (formatIndex != maxSpecifierStart) {
4878            max_ = parseInt(format.slice(maxSpecifierStart, formatIndex), 10);
4879          }
4880          var long_ = false;
4881          var half = false;
4882          var longLong = false;
4883          if (format[formatIndex] == 'l') {
4884            long_ = true;
4885            formatIndex++;
4886            if (format[formatIndex] == 'l') {
4887              longLong = true;
4888              formatIndex++;
4889            }
4890          } else if (format[formatIndex] == 'h') {
4891            half = true;
4892            formatIndex++;
4893          }
4894          var type = format[formatIndex];
4895          formatIndex++;
4896          var curr = 0;
4897          var buffer = [];
4898          // Read characters according to the format. floats are trickier, they may be in an unfloat state in the middle, then be a valid float later
4899          if (type == 'f' || type == 'e' || type == 'g' ||
4900              type == 'F' || type == 'E' || type == 'G') {
4901            var last = 0;
4902            next = get();
4903            while (next > 0) {
4904              buffer.push(String.fromCharCode(next));
4905              if (__isFloat(buffer.join(''))) {
4906                last = buffer.length;
4907              }
4908              next = get();
4909            }
4910            for (var i = 0; i < buffer.length - last + 1; i++) {
4911              unget();
4912            }
4913            buffer.length = last;
4914          } else {
4915            next = get();
4916            var first = true;
4917            while ((curr < max_ || isNaN(max_)) && next > 0) {
4918              if (!(next in __scanString.whiteSpace) && // stop on whitespace
4919                  (type == 's' ||
4920                   ((type === 'd' || type == 'u' || type == 'i') && ((next >= 48 && next <= 57) ||
4921                                                                     (first && next == 45))) ||
4922                   ((type === 'x' || type === 'X') && (next >= 48 && next <= 57 ||
4923                                     next >= 97 && next <= 102 ||
4924                                     next >= 65 && next <= 70))) &&
4925                  (formatIndex >= format.length || next !== format[formatIndex].charCodeAt(0))) { // Stop when we read something that is coming up
4926                buffer.push(String.fromCharCode(next));
4927                next = get();
4928                curr++;
4929                first = false;
4930              } else {
4931                break;
4932              }
4933            }
4934            unget();
4935          }
4936          if (buffer.length === 0) return 0;  // Failure.
4937          if (suppressAssignment) continue;
4938          var text = buffer.join('');
4939          var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
4940          argIndex += Runtime.getAlignSize('void*', null, true);
4941          switch (type) {
4942            case 'd': case 'u': case 'i':
4943              if (half) {
4944                HEAP16[((argPtr)>>1)]=parseInt(text, 10);
4945              } else if (longLong) {
4946                (tempI64 = [parseInt(text, 10)>>>0,Math.min(Math.floor((parseInt(text, 10))/(+(4294967296))), (+(4294967295)))>>>0],HEAP32[((argPtr)>>2)]=tempI64[0],HEAP32[(((argPtr)+(4))>>2)]=tempI64[1]);
4947              } else {
4948                HEAP32[((argPtr)>>2)]=parseInt(text, 10);
4949              }
4950              break;
4951            case 'X':
4952            case 'x':
4953              HEAP32[((argPtr)>>2)]=parseInt(text, 16)
4954              break;
4955            case 'F':
4956            case 'f':
4957            case 'E':
4958            case 'e':
4959            case 'G':
4960            case 'g':
4961            case 'E':
4962              // fallthrough intended
4963              if (long_) {
4964                HEAPF64[((argPtr)>>3)]=parseFloat(text)
4965              } else {
4966                HEAPF32[((argPtr)>>2)]=parseFloat(text)
4967              }
4968              break;
4969            case 's':
4970              var array = intArrayFromString(text);
4971              for (var j = 0; j < array.length; j++) {
4972                HEAP8[(((argPtr)+(j))|0)]=array[j]
4973              }
4974              break;
4975          }
4976          fields++;
4977        } else if (format[formatIndex] in __scanString.whiteSpace) {
4978          next = get();
4979          while (next in __scanString.whiteSpace) {
4980            if (next <= 0) break mainLoop;  // End of input.
4981            next = get();
4982          }
4983          unget(next);
4984          formatIndex++;
4985        } else {
4986          // Not a specifier.
4987          next = get();
4988          if (format[formatIndex].charCodeAt(0) !== next) {
4989            unget(next);
4990            break mainLoop;
4991          }
4992          formatIndex++;
4993        }
4994      }
4995      return fields;
4996    }function _sscanf(s, format, varargs) {
4997      // int sscanf(const char *restrict s, const char *restrict format, ... );
4998      // http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html
4999      var index = 0;
5000      var get = function() { return HEAP8[(((s)+(index++))|0)]; };
5001      var unget = function() { index--; };
5002      return __scanString(format, get, unget, varargs);
5003    }
5004  function __Z7catopenPKci() { throw 'catopen not implemented' }
5005  function __Z7catgetsP8_nl_catdiiPKc() { throw 'catgets not implemented' }
5006  function __Z8catcloseP8_nl_catd() { throw 'catclose not implemented' }
5007  function _newlocale(mask, locale, base) {
5008      return 0;
5009    }
5010  function _freelocale(locale) {}
5011  function ___ctype_b_loc() {
5012      // http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/baselib---ctype-b-loc.html
5013      var me = ___ctype_b_loc;
5014      if (!me.ret) {
5015        var values = [
5016          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5017          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5018          0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,8195,8194,8194,8194,8194,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,24577,49156,49156,49156,
5019          49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,49156,55304,55304,55304,55304,55304,55304,55304,55304,
5020          55304,55304,49156,49156,49156,49156,49156,49156,49156,54536,54536,54536,54536,54536,54536,50440,50440,50440,50440,50440,
5021          50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,50440,49156,49156,49156,49156,49156,
5022          49156,54792,54792,54792,54792,54792,54792,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,50696,
5023          50696,50696,50696,50696,50696,50696,50696,49156,49156,49156,49156,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5024          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
5025          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5026        ];
5027        var i16size = 2;
5028        var arr = _malloc(values.length * i16size);
5029        for (var i = 0; i < values.length; i++) {
5030          HEAP16[(((arr)+(i * i16size))>>1)]=values[i]
5031        }
5032        me.ret = allocate([arr + 128 * i16size], 'i16*', ALLOC_NORMAL);
5033      }
5034      return me.ret;
5035    }
5036  function ___ctype_tolower_loc() {
5037      // http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/libutil---ctype-tolower-loc.html
5038      var me = ___ctype_tolower_loc;
5039      if (!me.ret) {
5040        var values = [
5041          128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,
5042          158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,
5043          188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,
5044          218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
5045          248,249,250,251,252,253,254,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
5046          33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,97,98,99,100,101,102,103,
5047          104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,96,97,98,99,100,101,102,103,
5048          104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,
5049          134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,
5050          164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,
5051          194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
5052          224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,
5053          254,255
5054        ];
5055        var i32size = 4;
5056        var arr = _malloc(values.length * i32size);
5057        for (var i = 0; i < values.length; i++) {
5058          HEAP32[(((arr)+(i * i32size))>>2)]=values[i]
5059        }
5060        me.ret = allocate([arr + 128 * i32size], 'i32*', ALLOC_NORMAL);
5061      }
5062      return me.ret;
5063    }
5064  function ___ctype_toupper_loc() {
5065      // http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/libutil---ctype-toupper-loc.html
5066      var me = ___ctype_toupper_loc;
5067      if (!me.ret) {
5068        var values = [
5069          128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,
5070          158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,
5071          188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,
5072          218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,
5073          248,249,250,251,252,253,254,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
5074          33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,
5075          73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
5076          81,82,83,84,85,86,87,88,89,90,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
5077          145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,
5078          175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,
5079          205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,
5080          235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
5081        ];
5082        var i32size = 4;
5083        var arr = _malloc(values.length * i32size);
5084        for (var i = 0; i < values.length; i++) {
5085          HEAP32[(((arr)+(i * i32size))>>2)]=values[i]
5086        }
5087        me.ret = allocate([arr + 128 * i32size], 'i32*', ALLOC_NORMAL);
5088      }
5089      return me.ret;
5090    }
5091  function _strftime(s, maxsize, format, timeptr) {
5092      // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
5093      // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
5094      // TODO: Implement.
5095      return 0;
5096    }var _strftime_l=_strftime;
5097  function __parseInt64(str, endptr, base, min, max, unsign) {
5098      var isNegative = false;
5099      // Skip space.
5100      while (_isspace(HEAP8[(str)])) str++;
5101      // Check for a plus/minus sign.
5102      if (HEAP8[(str)] == 45) {
5103        str++;
5104        isNegative = true;
5105      } else if (HEAP8[(str)] == 43) {
5106        str++;
5107      }
5108      // Find base.
5109      var ok = false;
5110      var finalBase = base;
5111      if (!finalBase) {
5112        if (HEAP8[(str)] == 48) {
5113          if (HEAP8[((str+1)|0)] == 120 ||
5114              HEAP8[((str+1)|0)] == 88) {
5115            finalBase = 16;
5116            str += 2;
5117          } else {
5118            finalBase = 8;
5119            ok = true; // we saw an initial zero, perhaps the entire thing is just "0"
5120          }
5121        }
5122      } else if (finalBase==16) {
5123        if (HEAP8[(str)] == 48) {
5124          if (HEAP8[((str+1)|0)] == 120 ||
5125              HEAP8[((str+1)|0)] == 88) {
5126            str += 2;
5127          }
5128        }
5129      }
5130      if (!finalBase) finalBase = 10;
5131      start = str;
5132      // Get digits.
5133      var chr;
5134      while ((chr = HEAP8[(str)]) != 0) {
5135        var digit = parseInt(String.fromCharCode(chr), finalBase);
5136        if (isNaN(digit)) {
5137          break;
5138        } else {
5139          str++;
5140          ok = true;
5141        }
5142      }
5143      if (!ok) {
5144        ___setErrNo(ERRNO_CODES.EINVAL);
5145        return ((asm["setTempRet0"](0),0)|0);
5146      }
5147      // Set end pointer.
5148      if (endptr) {
5149        HEAP32[((endptr)>>2)]=str
5150      }
5151      try {
5152        var numberString = isNegative ? '-'+Pointer_stringify(start, str - start) : Pointer_stringify(start, str - start);
5153        i64Math.fromString(numberString, finalBase, min, max, unsign);
5154      } catch(e) {
5155        ___setErrNo(ERRNO_CODES.ERANGE); // not quite correct
5156      }
5157      return ((asm["setTempRet0"](((HEAP32[(((tempDoublePtr)+(4))>>2)])|0)),((HEAP32[((tempDoublePtr)>>2)])|0))|0);
5158    }function _strtoull(str, endptr, base) {
5159      return __parseInt64(str, endptr, base, 0, '18446744073709551615', true);  // ULONG_MAX.
5160    }var _strtoull_l=_strtoull;
5161  function _strtoll(str, endptr, base) {
5162      return __parseInt64(str, endptr, base, '-9223372036854775808', '9223372036854775807');  // LLONG_MIN, LLONG_MAX.
5163    }var _strtoll_l=_strtoll;
5164  function _uselocale(locale) {
5165      return 0;
5166    }
5167  function ___locale_mb_cur_max() { throw '__locale_mb_cur_max not implemented' }
5168  function _asprintf(s, format, varargs) {
5169      return _sprintf(-s, format, varargs);
5170    }function _vasprintf(s, format, va_arg) {
5171      return _asprintf(s, format, HEAP32[((va_arg)>>2)]);
5172    }
5173  function _vsnprintf(s, n, format, va_arg) {
5174      return _snprintf(s, n, format, HEAP32[((va_arg)>>2)]);
5175    }
5176  function _vsprintf(s, format, va_arg) {
5177      return _sprintf(s, format, HEAP32[((va_arg)>>2)]);
5178    }
5179  function _vsscanf(s, format, va_arg) {
5180      return _sscanf(s, format, HEAP32[((va_arg)>>2)]);
5181    }
5182  var _llvm_memset_p0i8_i64=_memset;
5183  function _sbrk(bytes) {
5184      // Implement a Linux-like 'memory area' for our 'process'.
5185      // Changes the size of the memory area by |bytes|; returns the
5186      // address of the previous top ('break') of the memory area
5187      // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
5188      var self = _sbrk;
5189      if (!self.called) {
5190        DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
5191        self.called = true;
5192        assert(Runtime.dynamicAlloc);
5193        self.alloc = Runtime.dynamicAlloc;
5194        Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
5195      }
5196      var ret = DYNAMICTOP;
5197      if (bytes != 0) self.alloc(bytes);
5198      return ret;  // Previous break location.
5199    }
5200  function _llvm_uadd_with_overflow_i32(x, y) {
5201      x = x>>>0;
5202      y = y>>>0;
5203      return ((asm["setTempRet0"](x+y > 4294967295),(x+y)>>>0)|0);
5204    }
5205__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice;
5206___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
5207GL.init()
5208_llvm_eh_exception.buf = allocate(12, "void*", ALLOC_STATIC);
5209Module["requestFullScreen"] = function(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
5210  Module["requestAnimationFrame"] = function(func) { Browser.requestAnimationFrame(func) };
5211  Module["pauseMainLoop"] = function() { Browser.mainLoop.pause() };
5212  Module["resumeMainLoop"] = function() { Browser.mainLoop.resume() };
5213  Module["getUserMedia"] = function() { Browser.getUserMedia() }
5214_fgetc.ret = allocate([0], "i8", ALLOC_STATIC);
5215_fputc.ret = allocate([0], "i8", ALLOC_STATIC);
5216___buildEnvironment(ENV);
5217STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
5218staticSealed = true; // seal the static portion of memory
5219STACK_MAX = STACK_BASE + 5242880;
5220DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
5221assert(DYNAMIC_BASE < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY
5222 var ctlz_i8 = allocate([8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_DYNAMIC);
5223 var cttz_i8 = allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0], "i8", ALLOC_DYNAMIC);
5224var Math_min = Math.min;
5225function invoke_viiiii(index,a1,a2,a3,a4,a5) {
5226  try {
5227    Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
5228  } catch(e) {
5229    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5230    asm["setThrew"](1, 0);
5231  }
5232}
5233function invoke_vif(index,a1,a2) {
5234  try {
5235    Module["dynCall_vif"](index,a1,a2);
5236  } catch(e) {
5237    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5238    asm["setThrew"](1, 0);
5239  }
5240}
5241function invoke_viiii(index,a1,a2,a3,a4) {
5242  try {
5243    Module["dynCall_viiii"](index,a1,a2,a3,a4);
5244  } catch(e) {
5245    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5246    asm["setThrew"](1, 0);
5247  }
5248}
5249function invoke_vi(index,a1) {
5250  try {
5251    Module["dynCall_vi"](index,a1);
5252  } catch(e) {
5253    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5254    asm["setThrew"](1, 0);
5255  }
5256}
5257function invoke_vii(index,a1,a2) {
5258  try {
5259    Module["dynCall_vii"](index,a1,a2);
5260  } catch(e) {
5261    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5262    asm["setThrew"](1, 0);
5263  }
5264}
5265function invoke_iii(index,a1,a2) {
5266  try {
5267    return Module["dynCall_iii"](index,a1,a2);
5268  } catch(e) {
5269    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5270    asm["setThrew"](1, 0);
5271  }
5272}
5273function invoke_iiii(index,a1,a2,a3) {
5274  try {
5275    return Module["dynCall_iiii"](index,a1,a2,a3);
5276  } catch(e) {
5277    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5278    asm["setThrew"](1, 0);
5279  }
5280}
5281function invoke_ii(index,a1) {
5282  try {
5283    return Module["dynCall_ii"](index,a1);
5284  } catch(e) {
5285    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5286    asm["setThrew"](1, 0);
5287  }
5288}
5289function invoke_viiiiif(index,a1,a2,a3,a4,a5,a6) {
5290  try {
5291    Module["dynCall_viiiiif"](index,a1,a2,a3,a4,a5,a6);
5292  } catch(e) {
5293    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5294    asm["setThrew"](1, 0);
5295  }
5296}
5297function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {
5298  try {
5299    Module["dynCall_viiiiiii"](index,a1,a2,a3,a4,a5,a6,a7);
5300  } catch(e) {
5301    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5302    asm["setThrew"](1, 0);
5303  }
5304}
5305function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {
5306  try {
5307    Module["dynCall_viiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8);
5308  } catch(e) {
5309    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5310    asm["setThrew"](1, 0);
5311  }
5312}
5313function invoke_v(index) {
5314  try {
5315    Module["dynCall_v"](index);
5316  } catch(e) {
5317    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5318    asm["setThrew"](1, 0);
5319  }
5320}
5321function invoke_iiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {
5322  try {
5323    return Module["dynCall_iiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8);
5324  } catch(e) {
5325    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5326    asm["setThrew"](1, 0);
5327  }
5328}
5329function invoke_viiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9) {
5330  try {
5331    Module["dynCall_viiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9);
5332  } catch(e) {
5333    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5334    asm["setThrew"](1, 0);
5335  }
5336}
5337function invoke_viiiiiif(index,a1,a2,a3,a4,a5,a6,a7) {
5338  try {
5339    Module["dynCall_viiiiiif"](index,a1,a2,a3,a4,a5,a6,a7);
5340  } catch(e) {
5341    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5342    asm["setThrew"](1, 0);
5343  }
5344}
5345function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
5346  try {
5347    Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6);
5348  } catch(e) {
5349    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5350    asm["setThrew"](1, 0);
5351  }
5352}
5353function invoke_iiiii(index,a1,a2,a3,a4) {
5354  try {
5355    return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
5356  } catch(e) {
5357    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5358    asm["setThrew"](1, 0);
5359  }
5360}
5361function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
5362  try {
5363    return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
5364  } catch(e) {
5365    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5366    asm["setThrew"](1, 0);
5367  }
5368}
5369function invoke_viii(index,a1,a2,a3) {
5370  try {
5371    Module["dynCall_viii"](index,a1,a2,a3);
5372  } catch(e) {
5373    if (typeof e !== 'number' && e !== 'longjmp') throw e;
5374    asm["setThrew"](1, 0);
5375  }
5376}
5377function asmPrintInt(x, y) {
5378  Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
5379}
5380function asmPrintFloat(x, y) {
5381  Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
5382}
5383// EMSCRIPTEN_START_ASM
5384var asm=(function(global,env,buffer){"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env.ctlz_i8|0;var o=env._stdin|0;var p=env.__ZTVN10__cxxabiv117__class_type_infoE|0;var q=env._stderr|0;var r=env._stdout|0;var s=env.___fsmu8|0;var t=env.___dso_handle|0;var u=env.__ZTVN10__cxxabiv120__si_class_type_infoE|0;var v=+env.NaN;var w=+env.Infinity;var x=0;var y=0;var z=0;var A=0;var B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0.0;var K=0;var L=0;var M=0;var N=0;var O=0;var P=0;var Q=0;var R=0;var S=0;var T=0;var U=global.Math.floor;var V=global.Math.abs;var W=global.Math.sqrt;var X=global.Math.pow;var Y=global.Math.cos;var Z=global.Math.sin;var _=global.Math.tan;var $=global.Math.acos;var aa=global.Math.asin;var ab=global.Math.atan;var ac=global.Math.atan2;var ad=global.Math.exp;var ae=global.Math.log;var af=global.Math.ceil;var ag=global.Math.imul;var ah=env.abort;var ai=env.assert;var aj=env.asmPrintInt;var ak=env.asmPrintFloat;var al=env.copyTempDouble;var am=env.copyTempFloat;var an=env.min;var ao=env.invoke_viiiii;var ap=env.invoke_vif;var aq=env.invoke_viiii;var ar=env.invoke_vi;var as=env.invoke_vii;var at=env.invoke_iii;var au=env.invoke_iiii;var av=env.invoke_ii;var aw=env.invoke_viiiiif;var ax=env.invoke_viiiiiii;var ay=env.invoke_viiiiiiii;var az=env.invoke_v;var aA=env.invoke_iiiiiiiii;var aB=env.invoke_viiiiiiiii;var aC=env.invoke_viiiiiif;var aD=env.invoke_viiiiii;var aE=env.invoke_iiiii;var aF=env.invoke_iiiiii;var aG=env.invoke_viii;var aH=env._llvm_uadd_with_overflow_i32;var aI=env._glClearColor;var aJ=env._sysconf;var aK=env._log10;var aL=env.__scanString;var aM=env._fclose;var aN=env._pthread_mutex_lock;var aO=env._emscripten_run_script_string;var aP=env.___cxa_end_catch;var aQ=env._glLinkProgram;var aR=env.__isFloat;var aS=env._glBindTexture;var aT=env._fflush;var aU=env._SDL_GetMouseState;var aV=env._strtol;var aW=env._glFramebufferRenderbuffer;var aX=env._Mix_PlayChannel;var aY=env._fwrite;var aZ=env._strncmp;var a_=env._SDL_UpperBlit;var a$=env._send;var a0=env._pthread_mutex_init;var a1=env._glUniform2fv;var a2=env._snprintf;var a3=env._glCompileShader;var a4=env._isspace;var a5=env._glDeleteTextures;var a6=env.__Z8catcloseP8_nl_catd;var a7=env._read;var a8=env._Mix_OpenAudio;var a9=env._glGenRenderbuffers;var ba=env._ceil;var bb=env._glClearDepthf;var bc=env._pthread_cond_broadcast;var bd=env._frexp;var be=env.__Z7catopenPKci;var bf=env._strstr;var bg=env._fsync;var bh=env._glGenTextures;var bi=env.___cxa_allocate_exception;var bj=env._glDepthFunc;var bk=env._pthread_cond_wait;var bl=env._glUniform1f;var bm=env._fmod;var bn=env.___resumeException;var bo=env._vsprintf;var bp=env._glCreateShader;var bq=env._strcmp;var br=env._glUniform1i;var bs=env._islower;var bt=env._llvm_va_end;var bu=env._cosf;var bv=env._vsscanf;var bw=env._glDisable;var bx=env._SDL_RWFromFile;var by=env._fgetc;var bz=env._isxdigit;var bA=env._glGetProgramiv;var bB=env.___gxx_personality_v0;var bC=env._atexit;var bD=env._newlocale;var bE=env.___cxa_free_exception;var bF=env._glGetUniformLocation;var bG=env._close;var bH=env._feof;var bI=env._glBindFramebuffer;var bJ=env._glCullFace;var bK=env._asin;var bL=env._Mix_LoadWAV_RW;var bM=env._glUniform4fv;var bN=env.___cxa_rethrow;var bO=env.___setErrNo;var bP=env._glDrawArrays;var bQ=env._exit;var bR=env._sprintf;var bS=env._glRenderbufferStorage;var bT=env.___ctype_b_loc;var bU=env._freelocale;var bV=env._glAttachShader;var bW=env._atan2f;var bX=env._freopen;var bY=env._glCheckFramebufferStatus;var bZ=env._fputc;var b_=env._asprintf;var b$=env._ferror;var b0=env.___cxa_is_number_type;var b1=env.___cxa_does_inherit;var b2=env.___locale_mb_cur_max;var b3=env._glDrawElements;var b4=env.___cxa_begin_catch;var b5=env._sinf;var b6=env._recv;var b7=env.__parseInt64;var b8=env.__ZSt18uncaught_exceptionv;var b9=env._SDL_GL_SwapBuffers;var ca=env._putchar;var cb=env._isalnum;var cc=env.___cxa_call_unexpected;var cd=env._SDL_Init;var ce=env._glActiveTexture;var cf=env._glViewport;var cg=env._glUniform3fv;var ch=env._memchr;var ci=env._glGetShaderiv;var cj=env.__exit;var ck=env._isupper;var cl=env._strftime;var cm=env._rand;var cn=env._strtoull;var co=env._fabsf;var cp=env._cosh;var cq=env.___cxa_throw;var cr=env._glDisableVertexAttribArray;var cs=env._ldexp;var ct=env._isprint;var cu=env._llvm_eh_exception;var cv=env._toupper;var cw=env._glShaderSource;var cx=env._glBindRenderbuffer;var cy=env._pread;var cz=env._SDL_SetVideoMode;var cA=env._fopen;var cB=env._open;var cC=env._sqrtf;var cD=env._vasprintf;var cE=env._SDL_GL_SetAttribute;var cF=env._log;var cG=env._SDL_PollEvent;var cH=env._glClear;var cI=env._qsort;var cJ=env._llvm_umul_with_overflow_i32;var cK=env._glEnableVertexAttribArray;var cL=env._glBindBuffer;var cM=env.___cxa_find_matching_catch;var cN=env._SDL_GetError;var cO=env._glFramebufferTexture2D;var cP=env._srand;var cQ=env._glUniformMatrix3fv;var cR=env._isalpha;var cS=env._glBufferData;var cT=env._fgets;var cU=env._asinf;var cV=env._cos;var cW=env._getenv;var cX=env.__ZSt9terminatev;var cY=env._gettimeofday;var cZ=env._atoi;var c_=env._vfprintf;var c$=env._pthread_mutex_unlock;var c0=env._SDL_WM_SetCaption;var c1=env._glVertexAttribPointer;var c2=env._glGenFramebuffers;var c3=env._llvm_pow_f64;var c4=env._sbrk;var c5=env._tanh;var c6=env._tanf;var c7=env._localeconv;var c8=env.___errno_location;var c9=env._strerror;var da=env._pthread_mutex_destroy;var db=env._SDL_Quit;var dc=env._strspn;var dd=env.__parseInt;var de=env._ungetc;var df=env._exp;var dg=env._IMG_Load;var dh=env._SDL_EnableUNICODE;var di=env._uselocale;var dj=env._vsnprintf;var dk=env._glUseProgram;var dl=env._sscanf;var dm=env._glTexImage2D;var dn=env._glGetProgramInfoLog;var dp=env._acos;var dq=env._fread;var dr=env._glGetShaderInfoLog;var ds=env._SDL_GetKeyboardState;var dt=env._abort;var du=env._fprintf;var dv=env._isdigit;var dw=env._strtoll;var dx=env._tan;var dy=env.___buildEnvironment;var dz=env.__reallyNegative;var dA=env._ispunct;var dB=env._glEnable;var dC=env._fabs;var dD=env._floor;var dE=env.__Z7catgetsP8_nl_catdiiPKc;var dF=env._modf;var dG=env._sqrt;var dH=env._write;var dI=env._glGenBuffers;var dJ=env._glGetAttribLocation;var dK=env._SDL_CreateRGBSurface;var dL=env._sin;var dM=env._glBlendFunc;var dN=env._glCreateProgram;var dO=env._strchr;var dP=env.___cxa_pure_virtual;var dQ=env._longjmp;var dR=env._atan;var dS=env.__formatString;var dT=env._emscripten_set_main_loop;var dU=env.___ctype_toupper_loc;var dV=env._Mix_FreeChunk;var dW=env._strpbrk;var dX=env.___ctype_tolower_loc;var dY=env._glUniformMatrix4fv;var dZ=env._sinh;var d_=env._pwrite;var d$=env._strerror_r;var d0=env._glTexParameteri;var d1=env._glFrontFace;var d2=env._glDeleteBuffers;var d3=env._SDL_LockSurface;var d4=env._iscntrl;var d5=env._atan2;var d6=env._SDL_FreeSurface;var d7=env._time;var d8=env._glValidateProgram;
5385// EMSCRIPTEN_START_FUNCS
5386function es(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7>>3<<3;return b|0}function et(){return i|0}function eu(a){a=a|0;i=a}function ev(a,b){a=a|0;b=b|0;if((x|0)==0){x=a;y=b}}function ew(a){a=a|0;K=a}function ex(a){a=a|0;L=a}function ey(a){a=a|0;M=a}function ez(a){a=a|0;N=a}function eA(a){a=a|0;O=a}function eB(a){a=a|0;P=a}function eC(a){a=a|0;Q=a}function eD(a){a=a|0;R=a}function eE(a){a=a|0;S=a}function eF(a){a=a|0;T=a}function eG(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function eH(a){a=a|0;return c[a+4>>2]|0}function eI(a,b){a=a|0;b=b|0;gJ(a,b);return}function eJ(a){a=a|0;gG(a);return}function eK(a,b,c){a=a|0;b=b|0;c=c|0;eM(a,b,c);return}function eL(a){a=a|0;e7(a);return}function eM(a,b,c){a=a|0;b=b|0;c=c|0;eG(a|0,b,c);return}function eN(a){a=a|0;gF(a);return}function eO(a){a=a|0;fY(a);return}function eP(a){a=a|0;fX(a);return}function eQ(a){a=a|0;gE(a);return}function eR(a){a=a|0;gD(a);return}function eS(a,b){a=a|0;b=+b;gC(a,b);return}function eT(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;gB(a,b,c,d);return}function eU(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;gA(a,b,c,d,e);return}function eV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+4|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){c[d>>2]=e+1;f=(c[a>>2]|0)+(e<<3)|0;if((f|0)==0){return a|0}g=b;h=f;f=c[g+4>>2]|0;c[h>>2]=c[g>>2];c[h+4>>2]=f;return a|0}else{f=b;b=c[f>>2]|0;h=c[f+4>>2]|0;gz(a,((e*13&-1|0)/8&-1)+8|0);e=c[d>>2]|0;c[d>>2]=e+1;d=(c[a>>2]|0)+(e<<3)|0;if((d|0)==0){return a|0}e=d;c[e>>2]=b;c[e+4>>2]=h;return a|0}return 0}function eW(a,b,c){a=a|0;b=+b;c=+c;gy(a,b,c);return}function eX(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;gx(a,b,c,d,e);return}function eY(a,b){a=a|0;b=b|0;gv(a,b);return}function eZ(a){a=a|0;return(gu()|0)%(a|0)&-1|0}function e_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[fR(b,0)>>2]|0;f=e-(c[fR(d,0)>>2]|0)|0;c[fS(a,0)>>2]=f;f=c[fR(b,1)>>2]|0;b=f-(c[fR(d,1)>>2]|0)|0;c[fS(a,1)>>2]=b;return}function e$(a,b){a=a|0;b=b|0;var d=0;d=c[fR(b,0)>>2]|0;c[fS(a,0)>>2]=d;d=c[fR(b,1)>>2]|0;c[fS(a,1)>>2]=d;return a|0}function e0(a){a=a|0;gs(a);return}function e1(a){a=a|0;gq(a);return}function e2(a){a=a|0;gg(a);return}function e3(a){a=a|0;ge(a);return}function e4(a){a=a|0;gN(a);return}function e5(a){a=a|0;e4(a);Zg(a);return}function e6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;b=i;i=i+64|0;a=b|0;c=b+16|0;d=b+32|0;e=b+48|0;f=b+56|0;eI(a,22456);eI(c,22456);eI(d,46664);wh(0,0,a,c,d);eJ(d);eJ(c);eJ(a);eK(f,1280,720);gW(e,21800,f,30.0);eL(Zc(656)|0);gZ(0);g$(e);i=b;return 0}function e7(b){b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;d=i;i=i+560|0;e=d|0;f=d+64|0;h=d+128|0;j=d+192|0;k=d+256|0;l=d+272|0;m=d+288|0;n=d+304|0;o=d+320|0;p=d+336|0;q=d+352|0;r=d+368|0;s=d+376|0;t=d+384|0;u=d+392|0;v=d+400|0;w=d+408|0;x=d+416|0;y=d+432|0;z=d+440|0;A=d+448|0;B=d+456|0;C=d+464|0;D=d+480|0;E=d+488|0;F=d+496|0;G=d+504|0;H=d+512|0;I=d+520|0;J=d+528|0;K=d+536|0;L=d+544|0;M=d+552|0;N=M;uD(b|0);c[b>>2]=54968;O=b+152|0;eN(O);eO(b+176|0);eO(b+184|0);eO(b+192|0);eP(b+200|0);eP(b+212|0);eP(b+224|0);eP(b+236|0);eP(b+248|0);eP(b+260|0);eP(b+272|0);eP(b+284|0);eP(b+296|0);P=b+336|0;i_(P);Q=b+412|0;i_(Q);R=b+488|0;i_(R);eQ(b+564|0);S=b+576|0;eR(S);T=Zc(276)|0;rP(T);U=b+320|0;c[U>>2]=T;eS(e,1.0);rR(T,e);e=c[U>>2]|0;u4(f,0.0,640.0,0.0,640.0,-100.0,100.0);rQ(e,f);td(c[U>>2]|0);U=Zc(276)|0;rP(U);f=b+324|0;c[f>>2]=U;u7(h,30.0,1024.0,576.0,.10000000149011612,1.0e3);rQ(U,h);h=c[f>>2]|0;eT(k,-15.0,10.0,0.0);eT(l,0.0,0.0,0.0);eT(m,0.0,1.0,0.0);u0(j,k,l,m);rR(h,j);td(c[f>>2]|0);f=Zc(168)|0;rV(f);j=b+588|0;c[j>>2]=f;eU(n,.20000000298023224,.20000000298023224,0.0,0.0);rW(f,n);n=c[j>>2]|0;eU(o,.5,.5,.5,1.0);r5(n,o);td(c[j>>2]|0);j=Zc(168)|0;rV(j);o=b+592|0;c[o>>2]=j;eU(p,-15.0,15.0,15.0,1.0);rW(j,p);p=c[o>>2]|0;eU(q,.4000000059604645,.30000001192092896,.20000000298023224,1.0);r5(p,q);td(c[o>>2]|0);o=O|0;eW(r,1.0,1.0);eV(o,r);eW(s,-1.0,-1.0);eV(o,s);eW(t,1.0,-1.0);eV(o,t);eW(u,-1.0,-1.0);eV(o,u);eW(v,1.0,1.0);eV(o,v);eW(w,-1.0,1.0);eV(o,w);w=tx(19136)|0;c[b+332>>2]=w;c[y>>2]=0;c[z>>2]=0;c[A>>2]=512;c[B>>2]=512;eX(x,y,z,A,B);tF(w,x);x=tx(10600)|0;c[b+328>>2]=x;c[D>>2]=0;c[E>>2]=0;c[F>>2]=256;c[G>>2]=512;eX(C,D,E,F,G);tF(x,C);c[b+636>>2]=sb(9096)|0;iQ(P,8008);iQ(Q,6936);iQ(R,3616);R=S|0;S=0;do{eK(H,(S|0)/30&-1,(S|0)%30&-1);eY(R,H);S=S+1|0;}while((S|0)<900);S=eH(R)|0;if((S|0)<=1){V=b+640|0;g[V>>2]=0.0;W=b+648|0;a[W]=0;i=d;return}H=I|0;Q=I+4|0;P=K|0;C=K+4|0;x=1;G=S;do{S=eZ(G)|0;F=e8(R,x)|0;eK(J,15,15);e_(I,F,J);F=e8(R,S)|0;eK(L,15,15);e_(K,F,L);F=c[H>>2]|0;E=ag(F,F);F=c[Q>>2]|0;D=ag(F,F)+E|0;E=c[P>>2]|0;F=ag(E,E);E=c[C>>2]|0;if((D|0)>=(ag(E,E)+F|0)){F=e8(R,x)|0;E=c[F+4>>2]|0;c[M>>2]=c[F>>2];c[M+4>>2]=E;E=e8(R,x)|0;F=e8(R,S)|0;e$(E,F);F=e8(R,S)|0;e$(F,N)}x=x+1|0;G=eH(R)|0;}while((x|0)<(G|0));V=b+640|0;g[V>>2]=0.0;W=b+648|0;a[W]=0;i=d;return}function e8(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);fH();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<3)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);fH();return 0}return 0}function e9(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0.0,aK=0.0,aL=0.0,aM=0.0,aN=0.0,aO=0.0,aP=0.0;d=i;i=i+2592|0;e=d|0;f=d+64|0;h=d+80|0;j=d+96|0;k=d+112|0;l=d+128|0;m=d+144|0;n=d+160|0;o=d+184|0;p=d+192|0;q=d+208|0;r=d+216|0;s=d+232|0;t=d+248|0;u=d+256|0;v=d+320|0;w=d+336|0;x=d+400|0;y=d+464|0;z=d+480|0;A=d+488|0;B=d+552|0;C=d+568|0;D=d+632|0;E=d+696|0;F=d+712|0;G=d+776|0;H=d+840|0;I=d+904|0;J=d+920|0;K=d+936|0;L=d+952|0;M=d+968|0;N=d+976|0;O=d+1040|0;P=d+1056|0;Q=d+1120|0;R=d+1184|0;S=d+1200|0;T=d+1264|0;U=d+1280|0;V=d+1296|0;W=d+1312|0;X=d+1328|0;Y=d+1336|0;Z=d+1400|0;_=d+1416|0;$=d+1480|0;aa=d+1544|0;ab=d+1560|0;ac=d+1624|0;ad=d+1688|0;ae=d+1704|0;af=d+1768|0;ag=d+1832|0;ah=d+1896|0;ai=d+1912|0;aj=d+1928|0;ak=d+1944|0;al=d+1960|0;am=d+1976|0;an=d+1984|0;ao=d+2048|0;ap=d+2064|0;aq=d+2128|0;ar=d+2192|0;as=d+2208|0;at=d+2224|0;au=d+2240|0;av=d+2248|0;aw=d+2312|0;ax=d+2328|0;ay=d+2344|0;az=d+2360|0;aA=d+2368|0;aB=d+2432|0;aC=d+2448|0;aD=d+2512|0;aE=d+2576|0;aF=a+640|0;g[aF>>2]=+g[aF>>2]+b;aG=a+564|0;fu(aG|0);aH=a+324|0;aI=c[aH>>2]|0;eT(f,-15.0,10.0,0.0);eT(h,0.0,0.0,0.0);eT(j,0.0,1.0,0.0);u0(e,f,h,j);rR(aI,e);e=a+592|0;aI=c[e>>2]|0;fv(k,1.0);r5(aI,k);k=a+644|0;g[k>>2]=0.0;aJ=+g[aF>>2];aK=aJ-9.5;if(aK<=0.0|aK>b){aL=aJ}else{sd(c[a+636>>2]|0);aL=+g[aF>>2]}aI=a+596|0;if(aL<=0.0|aL>10.0){eU(p,0.0,0.0,0.0,1.0);fw(aI,p);p=a+628|0;eW(q,120.0,40.0);fA(p,q)}else{eU(l,0.0,0.0,0.0,1.0);fw(aI,l);l=a+612|0;aL=+g[aF>>2];aJ=+fx(+fy(aL*7.0));b=+fx(+fy(aL*3.0));eU(m,aJ,b,+fx(+fy(aL*5.0)),1.0);fw(l,m);aL=+g[aF>>2];g[n>>2]=aL/20.0*(+fy(aL*10.0)+1.0);fz(d+168|0,l,n);n=a+628|0;aL=+g[aF>>2];eW(o,aL*12.0,aL*4.0);fA(n,o)}aL=+g[aF>>2];if(!(aL<=10.0|aL>25.5)){o=a+612|0;eU(r,.5,0.0,0.0,1.0);fw(o,r);r=c[e>>2]|0;eU(s,+fx(+fy(+g[aF>>2]*2.0)),1.0,1.0,1.0);r5(r,s);b=+fx(+fy(+g[aF>>2]*5.0))*4.0;c[t>>2]=a+336;eT(v,0.0,b+-3.0,0.0);uV(w,v);fD(x,1.5,+fa(1.5,b*.5+.30000001192092896),1.5);fC(u,w,x);fB(aG,t,u);g[k>>2]=(+g[aF>>2]+-10.0)/200.0;i=d;return}if(!(aL<=25.5|aL>41.0)){u=a+612|0;eU(y,.5,.5,0.0,1.0);fw(u,y);b=+g[aF>>2];aJ=(b+-10.0)/15.5;y=a+576|0;if((eH(y)|0)>0){u=a+336|0;t=0;do{aK=+(t|0);x=(c[e8(y,t)>>2]<<1)-30|0;w=(c[(e8(y,t)|0)+4>>2]<<1)-30|0;aM=+g[aF>>2];aN=+fx(+fy(aK+aM*5.0))*2.0+-2.0;aO=aN+ +f_((aK*.0011111111380159855-aJ)*100.0)*20.0;c[z>>2]=u;eT(B,0.0,1.0,0.0);f$(C,aM*100.0,B);eT(E,+(x|0)*2.0,aO,+(w|0)*2.0);uV(D,E);fC(F,C,D);f0(G,+fy(aK+ +g[aF>>2]*3.0)*.30000001192092896+.4000000059604645);fC(A,F,G);fB(aG,z,A);t=t+1|0;}while((t|0)<(eH(y)|0));aP=+g[aF>>2]}else{aP=b}g[k>>2]=(aP-25.5)/200.0;i=d;return}if(!(aL<=41.0|aL>48.5)){y=c[aH>>2]|0;eT(I,-10.0,15.0,0.0);eT(J,0.0,0.0,0.0);eT(K,0.0,1.0,0.0);u0(H,I,J,K);rR(y,H);H=a+612|0;eU(L,1.0,.5,0.0,1.0);fw(H,L);c[M>>2]=a+488;eT(O,0.0,+fy(+g[aF>>2]*10.0),0.0);uV(P,O);aP=+g[aF>>2]*100.0;eT(R,0.0,1.0,0.0);f$(Q,aP,R);fC(N,P,Q);fB(aG,M,N);g[k>>2]=(+g[aF>>2]-41.5)/200.0;i=d;return}if(!(aL<=48.5|aL>56.0)){N=c[aH>>2]|0;eT(T,-10.0,15.0,0.0);eT(U,0.0,0.0,0.0);eT(V,0.0,1.0,0.0);u0(S,T,U,V);rR(N,S);S=a+612|0;eU(W,0.0,.20000000298023224,.5,1.0);fw(S,W);W=a+488|0;S=0;do{aP=+(S|0)*4.0+-20.0;N=0;do{c[X>>2]=W;b=+g[aF>>2]*100.0;eT(Z,0.0,1.0,0.0);f$(_,b,Z);eT(aa,+(N|0)*4.0+-20.0,+fy((+(N^S|0)+ +g[aF>>2])*10.0)*.5,aP);uV($,aa);fC(ab,_,$);b=((N+S&1|0)!=0?-1.0:1.0)*+g[aF>>2]*100.0;eT(ad,0.0,1.0,0.0);f$(ac,b,ad);fC(ae,ab,ac);f0(af,.4000000059604645);fC(Y,ae,af);fB(aG,X,Y);N=N+1|0;}while((N|0)<11);S=S+1|0;}while((S|0)<11);g[k>>2]=(+g[aF>>2]-48.5)/220.0;i=d;return}if(aL<=56.0|aL>71.0){if(aL<=71.0|aL>150.0){i=d;return}S=a+612|0;eU(at,.20000000298023224,.20000000298023224,.20000000298023224,1.0);g[au>>2]=72.0/+g[aF>>2];f2(as,at,au);fw(S,as);as=c[aH>>2]|0;eT(aw,-10.0,15.0,0.0);eT(ax,0.0,0.0,0.0);eT(ay,0.0,1.0,0.0);u0(av,aw,ax,ay);rR(as,av);c[az>>2]=a+488;eT(aB,0.0,+fy(+g[aF>>2]*10.0),0.0);uV(aC,aB);aP=+g[aF>>2]*100.0;eT(aE,0.0,1.0,0.0);f$(aD,aP,aE);fC(aA,aC,aD);fB(aG,az,aA);g[k>>2]=+f_((+g[aF>>2]+-71.0)/100.0+.2199999988079071);i=d;return}else{aA=c[aH>>2]|0;aP=aL*2.0;aL=+fy(aP);eT(ah,-15.0,aL,+f1(aP));eT(ai,0.0,0.0,0.0);eT(aj,0.0,1.0,0.0);u0(ag,ah,ai,aj);rR(aA,ag);aP=(+g[aF>>2]+-56.0)/15.0;ag=a+612|0;eU(ak,0.0,1.0,.5,1.0);fw(ag,ak);ak=c[e>>2]|0;eU(al,1.0,1.0,.4000000059604645,1.0);r5(ak,al);aL=aP*10.0;al=a+412|0;a=0;do{aP=1.0-(1.0- +gL(aL+ +((a*53&-1|0)%17&-1|0)*.20000000298023224));c[am>>2]=al;eT(ao,(1.0-aP*aP)*100.0+-5.0,(+((a|0)/32&-1|0)-15.5)*6.0,(+((a|0)%32&-1|0)-15.5)*6.0);uV(ap,ao);eT(ar,0.0,0.0,1.0);f$(aq,90.0,ar);fC(an,ap,aq);fB(aG,am,an);a=a+1|0;}while((a|0)<1024);g[k>>2]=(+g[aF>>2]+-56.0)/200.0;i=d;return}}function fa(a,b){a=+a;b=+b;return+(b<a?b:a)}function fb(a,b){a=a|0;b=b|0;c[a+12>>2]=b;return b|0}function fc(a){a=a|0;return c[a+4>>2]<<3|0}function fd(a){a=a|0;return c[a+4>>2]|0}function fe(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function ff(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;return}function fh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];a[b+(d*3&-1)+2|0]=0;i=f;return}function fi(a){a=a|0;return c[a>>2]|0}function fj(b,d,e){b=b|0;d=d|0;e=e|0;c[b>>2]=d;a[b+4|0]=e&1;return}function fk(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function fl(a,b){a=a|0;b=b|0;fk(a,b);return}function fm(a,b,c){a=a|0;b=b|0;c=c|0;fj(a,b,c);return}function fn(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;p=i;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];fs(a,b,d,e,f,g,h,j,k,l,m,n,o);i=p;return}function fo(a,b,c){a=a|0;b=b|0;c=c|0;fg(a,b,c);return}function fp(a,b){a=a|0;b=b|0;ff(a,b);return}function fq(a,b){a=a|0;b=b|0;fe(a,b);return}function fr(){return+(+(cm()|0)*4.656612873077393e-10)}function fs(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;p=i;i=i+96|0;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];q=p|0;r=p+8|0;s=p+16|0;t=p+24|0;u=p+32|0;v=p+40|0;w=p+48|0;x=p+56|0;y=p+64|0;z=p+72|0;A=p+80|0;B=p+88|0;C=a|0;c[q>>2]=c[b>>2];ft(C,0,q);c[r>>2]=c[d>>2];fh(C,1,r);c[s>>2]=c[e>>2];fh(C,2,s);c[t>>2]=c[f>>2];fh(C,3,t);c[u>>2]=c[g>>2];fh(C,4,u);c[v>>2]=c[h>>2];fh(C,5,v);c[w>>2]=c[j>>2];fh(C,6,w);c[x>>2]=c[k>>2];fh(C,7,x);c[y>>2]=c[l>>2];fh(C,8,y);c[z>>2]=c[m>>2];fh(C,9,z);c[A>>2]=c[n>>2];fh(C,10,A);c[B>>2]=c[o>>2];fh(C,11,B);i=p;return}function ft(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];a[b+(d*3&-1)|0]=6;a[b+(d*3&-1)+1|0]=fi(e)&255;a[b+(d*3&-1)+2|0]=8;i=f;return}function fu(a){a=a|0;gM(a,0,c[a+4>>2]|0);return}function fv(a,b){a=a|0;b=+b;gb(a,b);return}function fw(a,b){a=a|0;b=b|0;var c=0.0;c=+g[fK(b,0)>>2];g[fL(a,0)>>2]=c;c=+g[fK(b,1)>>2];g[fL(a,1)>>2]=c;c=+g[fK(b,2)>>2];g[fL(a,2)>>2]=c;c=+g[fK(b,3)>>2];g[fL(a,3)>>2]=c;return a|0}function fx(a){a=+a;return+(+V(+a))}function fy(a){a=+a;return+(+Z(+a))}function fz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e|0;f2(f,b,d);d=a;a=fw(b,f)|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];i=e;return}function fA(a,b){a=a|0;b=b|0;var c=0.0;c=+g[fP(b,0)>>2];g[fQ(a,0)>>2]=c;c=+g[fP(b,1)>>2];g[fQ(a,1)>>2]=c;return a|0}function fB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;i=i+64|0;f=e|0;g=a+4|0;h=c[g>>2]|0;do{if((h|0)<(c[a+8>>2]|0)){j=a|0;k=c[j>>2]|0;l=k+(h*68&-1)|0;if((l|0)==0){m=h;n=k}else{c[l>>2]=c[b>>2];m=c[g>>2]|0;n=c[j>>2]|0}j=n+(m*68&-1)+4|0;if((j|0)==0){break}Zp(j|0,d|0,64)}else{j=c[b>>2]|0;l=f;Zp(l|0,d|0,64);ga(a|0,((h*13&-1|0)/8&-1)+8|0);k=c[g>>2]|0;o=a|0;p=c[o>>2]|0;q=p+(k*68&-1)|0;if((q|0)==0){r=k;s=p}else{c[q>>2]=j;r=c[g>>2]|0;s=c[o>>2]|0}o=s+(r*68&-1)+4|0;if((o|0)==0){break}Zp(o|0,l|0,64)}}while(0);c[g>>2]=(c[g>>2]|0)+1;i=e;return}function fC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+64|0;e=d|0;f=d+16|0;g=d+32|0;h=d+48|0;f8(e,b,fO(c,0)|0);f8(f,b,fO(c,1)|0);f8(g,b,fO(c,2)|0);f8(h,b,fO(c,3)|0);f7(a,e,f,g,h);i=d;return}function fD(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0;e=i;i=i+40|0;f=e|0;uT(f,b,c,d);f3(a,f,1.0);i=e;return}function fE(b,d){b=b|0;d=+d;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0.0;e=i;i=i+800|0;f=e|0;h=e+8|0;j=e+16|0;k=e+32|0;l=e+48|0;m=e+56|0;n=e+64|0;o=e+80|0;p=e+96|0;q=e+112|0;r=e+128|0;s=e+136|0;t=e+144|0;u=e+160|0;v=e+176|0;w=e+192|0;x=e+200|0;y=e+208|0;z=e+216|0;A=e+232|0;B=e+272|0;C=e+280|0;D=e+288|0;E=e+296|0;F=e+304|0;G=e+312|0;H=e+320|0;I=e+328|0;J=e+336|0;K=e+344|0;L=e+352|0;M=e+360|0;N=e+368|0;O=e+376|0;P=e+392|0;Q=e+400|0;R=e+408|0;S=e+416|0;T=e+424|0;U=e+432|0;V=e+440|0;W=e+448|0;X=e+456|0;Y=e+464|0;Z=e+472|0;_=e+480|0;$=e+488|0;aa=e+496|0;ab=e+504|0;ac=e+512|0;ad=e+520|0;ae=e+528|0;af=e+536|0;ag=e+544|0;ah=e+552|0;ai=e+560|0;aj=e+568|0;ak=e+576|0;al=e+584|0;am=e+592|0;an=e+600|0;ao=e+608|0;ap=e+616|0;aq=e+624|0;ar=e+632|0;as=e+640|0;at=e+648|0;au=e+656|0;av=e+664|0;aw=e+672|0;ax=e+680|0;ay=e+696|0;az=e+704|0;aA=e+712|0;aB=e+720|0;aC=e+728|0;aD=e+736|0;aE=e+744|0;aF=e+752|0;aG=e+760|0;aH=e+768|0;aI=e+776|0;aJ=e+784|0;aK=e+792|0;aL=b+648|0;if((a[aL]&1)==0){aM=q7(c[394]|0)|0;aN=b+308|0;c[aN>>2]=aM;fl(h,0);rq(f,aM,9728,h,0);h=f|0;f=c[h+4>>2]|0;aM=b+176|0;c[aM>>2]=c[h>>2];c[aM+4>>2]=f;rr(j,c[aN>>2]|0,2400);f=b+212|0;aM=j;c[f>>2]=c[aM>>2];c[f+4>>2]=c[aM+4>>2];c[f+8>>2]=c[aM+8>>2];rr(k,c[aN>>2]|0,45904);aN=b+200|0;aM=k;c[aN>>2]=c[aM>>2];c[aN+4>>2]=c[aM+4>>2];c[aN+8>>2]=c[aM+8>>2];aM=q7(c[400]|0)|0;aN=b+312|0;c[aN>>2]=aM;fl(m,0);rq(l,aM,9728,m,0);m=l|0;l=c[m+4>>2]|0;aM=b+184|0;c[aM>>2]=c[m>>2];c[aM+4>>2]=l;rr(n,c[aN>>2]|0,2400);l=b+224|0;aM=n;c[l>>2]=c[aM>>2];c[l+4>>2]=c[aM+4>>2];c[l+8>>2]=c[aM+8>>2];rr(o,c[aN>>2]|0,44752);aM=b+260|0;l=o;c[aM>>2]=c[l>>2];c[aM+4>>2]=c[l+4>>2];c[aM+8>>2]=c[l+8>>2];rr(p,c[aN>>2]|0,30120);l=b+236|0;aM=p;c[l>>2]=c[aM>>2];c[l+4>>2]=c[aM+4>>2];c[l+8>>2]=c[aM+8>>2];rr(q,c[aN>>2]|0,23464);aN=b+248|0;aM=q;c[aN>>2]=c[aM>>2];c[aN+4>>2]=c[aM+4>>2];c[aN+8>>2]=c[aM+8>>2];aM=q7(c[396]|0)|0;aN=b+316|0;c[aN>>2]=aM;fl(s,0);rq(r,aM,9728,s,0);s=r|0;r=c[s+4>>2]|0;aM=b+192|0;c[aM>>2]=c[s>>2];c[aM+4>>2]=r;rr(t,c[aN>>2]|0,45904);r=b+272|0;aM=t;c[r>>2]=c[aM>>2];c[r+4>>2]=c[aM+4>>2];c[r+8>>2]=c[aM+8>>2];rr(u,c[aN>>2]|0,23240);aM=b+284|0;r=u;c[aM>>2]=c[r>>2];c[aM+4>>2]=c[r+4>>2];c[aM+8>>2]=c[r+8>>2];rr(v,c[aN>>2]|0,22912);aN=b+296|0;r=v;c[aN>>2]=c[r>>2];c[aN+4>>2]=c[r+4>>2];c[aN+8>>2]=c[r+8>>2];r=Zc(4)|0;eK(w,512,256);fm(x,36,1);pj(r,w,x);x=b+148|0;c[x>>2]=r;qx(r);p_(y);eU(z,0.0,0.0,0.0,1.0);p3(y,z);p5(y,1.0);p0(y);qy(c[x>>2]|0);y=Zc(112)|0;fl(B,0);fl(C,0);fl(D,0);fl(E,0);fl(F,0);fl(G,0);fl(H,0);fl(I,0);fl(J,0);fl(K,0);fl(L,0);fl(M,0);fn(A,B,C,D,E,F,G,H,I,J,K,L,M);rH(y,A|0,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280);c[b+164>>2]=y;y=Zc(4)|0;A=b+152|0;rM(y,fc(A)|0);M=b+168|0;c[M>>2]=y;L=rm(y,0,0)|0;y=fF(A,0)|0;Zp(L|0,y|0,fc(A)|0);rO(c[M>>2]|0);iU(b+336|0,0);iU(b+412|0,0);iU(b+488|0,0);a[aL]=1;aO=x}else{aO=b+148|0}qx(c[aO>>2]|0);p_(N);eU(O,0.0,0.0,0.0,1.0);p3(N,O);p5(N,1.0);fo(P,3,0);q0(0,P);p0(N);p_(Q);fp(R,0);p8(Q,R);rB(c[b+316>>2]|0);rt(0,b+272|0,+g[b+640>>2]);rw(0,b+284|0,b+596|0);rw(0,b+296|0,b+612|0);R=b+164|0;N=c[R>>2]|0;P=b+168|0;O=c[P>>2]|0;x=b+192|0;aL=c[x+4>>2]|0;M=S|0;c[M>>2]=c[x>>2];c[M+4>>2]=aL;eO(T);eO(U);eO(V);eO(W);eO(X);eO(Y);eO(Z);eO(_);eO($);eO(aa);eO(ab);rL(N,O,S,T,U,V,W,X,Y,Z,_,$,aa,ab);fq(ac,0);rI(0,ac,0,6);rK(c[R>>2]|0);rC(0);p0(Q);Q=b+324|0;sj(c[16304]|0,c[Q>>2]|0);ac=b+564|0;if((fd(ac)|0)>0){ab=0;do{aa=c[fG(ac,ab)>>2]|0;iV(aa,(fG(ac,ab)|0)+4|0);ab=ab+1|0;}while((ab|0)<(fd(ac)|0))}ss(c[16304]|0,c[Q>>2]|0);p_(ad);fp(ae,0);p8(ad,ae);rB(c[b+308>>2]|0);tW(af,c[b+332>>2]|0);rz(0,b+212|0,af,0);rt(0,b+200|0,+g[b+644>>2]);af=c[R>>2]|0;ae=c[P>>2]|0;Q=b+176|0;ac=c[Q+4>>2]|0;ab=ag|0;c[ab>>2]=c[Q>>2];c[ab+4>>2]=ac;eO(ah);eO(ai);eO(aj);eO(ak);eO(al);eO(am);eO(an);eO(ao);eO(ap);eO(aq);eO(ar);rL(af,ae,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar);fq(as,0);rI(0,as,0,6);rK(c[R>>2]|0);rC(0);p0(ad);qy(c[aO>>2]|0);p_(at);fp(au,0);p8(at,au);rB(c[b+312>>2]|0);pf(av,c[aO>>2]|0);rz(0,b+224|0,av,0);tW(aw,c[b+328>>2]|0);rz(0,b+260|0,aw,1);ru(0,b+236|0,b+628|0);d=+fr();aP=+fr();eT(ax,d,aP,+fr());rv(0,b+248|0,ax);ax=c[R>>2]|0;aw=c[P>>2]|0;P=b+184|0;b=c[P+4>>2]|0;av=ay|0;c[av>>2]=c[P>>2];c[av+4>>2]=b;eO(az);eO(aA);eO(aB);eO(aC);eO(aD);eO(aE);eO(aF);eO(aG);eO(aH);eO(aI);eO(aJ);rL(ax,aw,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ);fq(aK,0);rI(0,aK,0,6);rK(c[R>>2]|0);rC(0);p0(at);i=e;return}function fF(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);fH();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<3)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);fH();return 0}return 0}function fG(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);fH();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*68&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);fH();return 0}return 0}function fH(){g3();fI()}function fI(){dt()}function fJ(a){a=+a;return+(a<0.0?0.0:a)}function fK(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function fL(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function fM(a,b){a=a|0;b=b|0;return(a|0)+(b*12&-1)|0}function fN(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function fO(a,b){a=a|0;b=b|0;return(a|0)+(b<<4)|0}function fP(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function fQ(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function fR(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function fS(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function fT(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function fU(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;return}function fV(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function fW(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function fX(a){a=a|0;c[a+8>>2]=0;return}function fY(a){a=a|0;var b=0;b=a|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function fZ(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function f_(a){a=+a;return+(+fa(+fJ(a),1.0))}function f$(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+56|0;f=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];f=e|0;g=e+40|0;h=g;j=d;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];uZ(f,b,g);f3(a,f,1.0);i=e;return}function f0(a,b){a=a|0;b=+b;var c=0,d=0;c=i;i=i+40|0;d=c|0;uR(d,b);f3(a,d,1.0);i=c;return}function f1(a){a=+a;return+(+Y(+a))}function f2(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fK(b,0)>>2];e=d*+g[c>>2];g[fL(a,0)>>2]=e;e=+g[fK(b,1)>>2];d=e*+g[c>>2];g[fL(a,1)>>2]=d;d=+g[fK(b,2)>>2];e=d*+g[c>>2];g[fL(a,2)>>2]=e;e=+g[fK(b,3)>>2];d=e*+g[c>>2];g[fL(a,3)>>2]=d;return}function f3(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0;d=i;e=b;b=i;i=i+36|0;i=i+7>>3<<3;Zp(b,e,36);f4(a,b,c);i=d;return}function f4(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+48|0;f=b;b=i;i=i+36|0;i=i+7>>3<<3;Zp(b,f,36);f=e|0;g=e+16|0;h=e+32|0;j=f;k=fM(b,0)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];f5(a|0,f,0.0);f=g;k=fM(b,1)|0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];c[f+8>>2]=c[k+8>>2];f5(a+16|0,g,0.0);g=h;k=fM(b,2)|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];f5(a+32|0,h,0.0);eU(a+48|0,0.0,0.0,0.0,d);i=e;return}function f5(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;e=i;f=b;b=i;i=i+12|0;i=i+7>>3<<3;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];f6(a,b,d);i=e;return}function f6(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;e=i;f=b;b=i;i=i+12|0;i=i+7>>3<<3;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];fN(a|0,+g[b>>2],+g[b+4>>2],+g[b+8>>2],d);i=e;return}function f7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;h=b;b=i;i=i+16|0;c[b>>2]=c[h>>2];c[b+4>>2]=c[h+4>>2];c[b+8>>2]=c[h+8>>2];c[b+12>>2]=c[h+12>>2];h=d;d=i;i=i+16|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];h=e;e=i;i=i+16|0;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[e+8>>2]=c[h+8>>2];c[e+12>>2]=c[h+12>>2];h=f;f=i;i=i+16|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];f9(a,b,d,e,f);i=g;return}function f8(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,h=0.0;d=0;do{e=+g[fK(fO(b,0)|0,d)>>2];f=e*+g[fK(c,0)>>2]+0.0;e=+g[fK(fO(b,1)|0,d)>>2];h=f+e*+g[fK(c,1)>>2];e=+g[fK(fO(b,2)|0,d)>>2];f=h+e*+g[fK(c,2)>>2];e=+g[fK(fO(b,3)|0,d)>>2];h=f+e*+g[fK(c,3)>>2];g[fL(a,d)>>2]=h;d=d+1|0;}while((d|0)<4);return}function f9(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;h=b;b=i;i=i+16|0;c[b>>2]=c[h>>2];c[b+4>>2]=c[h+4>>2];c[b+8>>2]=c[h+8>>2];c[b+12>>2]=c[h+12>>2];h=d;d=i;i=i+16|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];h=e;e=i;i=i+16|0;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[e+8>>2]=c[h+8>>2];c[e+12>>2]=c[h+12>>2];h=f;f=i;i=i+16|0;c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];h=a;j=b;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];j=a+16|0;h=d;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];h=a+32|0;j=e;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];j=a+48|0;a=f;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];i=g;return}function ga(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*68&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*68&-1)|0;if((h|0)!=0){Zp(h|0,(c[g>>2]|0)+(a*68&-1)|0,68)}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function gb(a,b){a=a|0;b=+b;fN(a|0,b,b,b,b);return}function gc(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];gd(a+4|0,b+4|0);return a|0}function gd(a,b){a=a|0;b=b|0;fw(a|0,b|0);fw(a+16|0,b+16|0);fw(a+32|0,b+32|0);fw(a+48|0,b+48|0);return a|0}function ge(a){a=a|0;gf(a|0);return}function gf(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function gg(a){a=a|0;hO(a+36|0);gh(a+24|0);gi(a+12|0);gj(a|0);return}function gh(a){a=a|0;go(a);return}function gi(a){a=a|0;gm(a);return}function gj(a){a=a|0;gk(a);return}function gk(a){a=a|0;gl(a|0);return}function gl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function gm(a){a=a|0;gn(a|0);return}function gn(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function go(a){a=a|0;gp(a|0);return}function gp(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function gq(a){a=a|0;gr(a|0);return}function gr(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function gs(a){a=a|0;gt(a|0);return}function gt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function gu(){var a=0;a=cm()<<16;return(a^cm())&2147483647|0}function gv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+4|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){c[d>>2]=e+1;f=(c[a>>2]|0)+(e<<3)|0;if((f|0)==0){return a|0}g=b;h=f;f=c[g+4>>2]|0;c[h>>2]=c[g>>2];c[h+4>>2]=f;return a|0}else{f=b;b=c[f>>2]|0;h=c[f+4>>2]|0;gw(a,((e*13&-1|0)/8&-1)+8|0);e=c[d>>2]|0;c[d>>2]=e+1;d=(c[a>>2]|0)+(e<<3)|0;if((d|0)==0){return a|0}e=d;c[e>>2]=b;c[e+4>>2]=h;return a|0}return 0}function gw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<3)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<3)|0;if((h|0)!=0){i=(c[g>>2]|0)+(a<<3)|0;j=h;h=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=h}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function gx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;eK(a|0,c[b>>2]|0,c[d>>2]|0);eK(a+8|0,c[e>>2]|0,c[f>>2]|0);return}function gy(a,b,c){a=a|0;b=+b;c=+c;fT(a|0,b,c);return}function gz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<3)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<3)|0;if((h|0)!=0){i=(c[g>>2]|0)+(a<<3)|0;j=h;h=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=h}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function gA(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;fN(a|0,b,c,d,e);return}function gB(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;fU(a|0,b,c,d);return}function gC(a,b){a=a|0;b=+b;eU(a|0,b,0.0,0.0,0.0);eU(a+16|0,0.0,b,0.0,0.0);eU(a+32|0,0.0,0.0,b,0.0);eU(a+48|0,0.0,0.0,0.0,b);return}function gD(a){a=a|0;fV(a|0);return}function gE(a){a=a|0;fW(a|0);return}function gF(a){a=a|0;fZ(a|0);return}function gG(a){a=a|0;gH(a|0);return}function gH(a){a=a|0;gI(a|0);return}function gI(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function gJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;Zq(a|0,0,12);gK(a|0);if((b|0)==0){g7(3208,(B=i,i=i+24|0,c[B>>2]=20552,c[B+8>>2]=45,c[B+16>>2]=20336,B)|0);fH()}gO(a,Zr(b|0)|0);e=hs(a,0)|0;Zp(e|0,b|0,(gU(a)|0)+1|0);i=d;return}function gK(a){a=a|0;gQ(a|0);return}function gL(a){a=+a;return+(+bm(+a,1.0))}function gM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);fH()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);fH()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);fH()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;gc(f+(a*68&-1)|0,f+(b*68&-1)|0);f=a+1|0;l=f+d|0;m=c[g>>2]|0;if((l|0)<(m|0)){a=f;b=l}else{j=m;break}}k=j-d|0;c[g>>2]=k;i=e;return}function gN(a){a=a|0;c[a>>2]=54968;ty(c[a+328>>2]|0);ty(c[a+332>>2]|0);sc(c[a+636>>2]|0);tf(c[a+320>>2]|0);tf(c[a+324>>2]|0);e0(a+576|0);e1(a+564|0);e2(a+488|0);e2(a+412|0);e2(a+336|0);e3(a+152|0);return}function gO(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;if((d|0)>-1){f=b|0;hu(f,d+1|0,0);a[hv(f)|0]=0;i=e;return}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=20552,c[B+8>>2]=107,c[B+16>>2]=19824,B)|0);fH()}}function gP(a){a=a|0;return c[a+4>>2]|0}function gQ(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function gR(a){a=a|0;return c[a+4>>2]|0}function gS(a){a=a|0;return c[a+4>>2]|0}function gT(a){a=a|0;return c[a>>2]|0}function gU(a){a=a|0;return(gP(a|0)|0)-1|0}function gV(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+8|0;if((c[e>>2]|0)>=(d|0)){return}f=Zn(d)|0;g=c[b+4>>2]|0;h=b|0;if((g|0)>0){b=0;do{i=f+b|0;if((i|0)!=0){a[i]=a[(c[h>>2]|0)+b|0]|0}b=b+1|0;}while((b|0)<(g|0))}g=c[h>>2]|0;if((g|0)!=0){Zh(g)}c[h>>2]=f;c[e>>2]=d;return}function gW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+8|0;g=d;d=i;i=i+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];g=f|0;h=i;i=i+12|0;i=i+7>>3<<3;j=Zc(8)|0;k=d;d=c[k+4>>2]|0;c[g>>2]=c[k>>2];c[g+4>>2]=d;gX(j,b,g,e);c[a>>2]=j;eI(h,10800);ug(0,h);eJ(h);i=f;return}function gX(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;f=i;g=d;d=i;i=i+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];g2(a,b,d,e);i=f;return}function gY(a){a=a|0;ve(0);return}function gZ(a){a=a|0;dT(2,0,1);return}function g_(){gY(0);return}function g$(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}g0(b);Zg(b);return}function g0(a){a=a|0;g1(a);return}function g1(a){a=a|0;vg(a|0);return}function g2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0;f=i;i=i+8|0;g=d;d=i;i=i+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];g=f|0;h=d;d=c[h+4>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=d;vn(a|0,b,g,e);i=f;return}function g3(){var a=0,b=0;a=i;b=aO(22952|0)|0;g4(21032,(B=i,i=i+8|0,c[B>>2]=b,B)|0);i=a;return}function g4(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;f=e;c[f>>2]=b;c[f+4>>2]=0;g5(0,a,e|0);i=d;return}function g5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=i;du(c[q>>2]|0,20416,(B=i,i=i+8|0,c[B>>2]=c[50688+(a<<2)>>2],B)|0);c_(c[q>>2]|0,b|0,d|0);i=e;return}function g6(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;f=e;c[f>>2]=b;c[f+4>>2]=0;g5(2,a,e|0);i=d;return}function g7(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;f=e;c[f>>2]=b;c[f+4>>2]=0;g5(3,a,e|0);i=d;return}function g8(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+8|0;d=b|0;c[a>>2]=54744;e=a+12|0;g9(e);ha(a+16|0);hb(a+28|0);hc(d,0);c[e>>2]=c[d>>2];i=b;return}function g9(a){a=a|0;oP(a);return}function ha(a){a=a|0;pd(a);return}function hb(a){a=a|0;pc(a);return}function hc(a,b){a=a|0;b=b|0;oM(a,b);return}function hd(a){a=a|0;pa(a);return}function he(a){a=a|0;o8(a);return}function hf(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;h=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[h>>2];c[a>>2]=54744;h=a+12|0;g9(h);ha(a+16|0);hb(a+28|0);c[h>>2]=c[f>>2];c[a+8>>2]=e;b[a+4>>1]=d;i=g;return}function hg(a){a=a|0;hh(a);Zg(a);return}function hh(a){a=a|0;var b=0,d=0;c[a>>2]=54744;b=a+16|0;hi(b|0);d=a+28|0;hj(d|0);hd(d);he(b);return}function hi(a){a=a|0;m7(a,0,c[a+4>>2]|0);return}function hj(a){a=a|0;m6(a,0,c[a+4>>2]|0);return}function hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;f=c[a+8>>2]|0;rr(e,f,hm(b)|0);hl(a+16|0,b,e);i=d;return}function hl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;i=i+32|0;f=e|0;g=e+16|0;h=a+4|0;j=c[h>>2]|0;if((j|0)<(c[a+8>>2]|0)){k=a|0;l=c[k>>2]|0;m=l+(j*24&-1)|0;if((m|0)==0){n=j;o=l}else{mG(m,b);n=c[h>>2]|0;o=c[k>>2]|0}k=o+(n*24&-1)+12|0;if((k|0)==0){p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}n=k;k=d;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}mG(f,b);b=g;g=d;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];mP(a|0,(((c[h>>2]|0)*13&-1|0)/8&-1)+8|0);g=c[h>>2]|0;d=a|0;a=c[d>>2]|0;k=a+(g*24&-1)|0;if((k|0)==0){r=g;s=a}else{mG(k,f);r=c[h>>2]|0;s=c[d>>2]|0}d=s+(r*24&-1)+12|0;if((d|0)!=0){r=d;c[r>>2]=c[b>>2];c[r+4>>2]=c[b+4>>2];c[r+8>>2]=c[b+8>>2]}eJ(f);p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}function hm(a){a=a|0;return pi(a,0)|0}function hn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+16|0;g=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[g>>2];g=f|0;h=f+8|0;j=c[a+8>>2]|0;k=hm(b)|0;c[h>>2]=c[d>>2];rq(g,j,k,h,e);ho(a+28|0,b,g);i=f;return}function ho(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;i=i+16|0;f=e|0;g=a+4|0;h=c[g>>2]|0;if((h|0)<(c[a+8>>2]|0)){j=a|0;k=c[j>>2]|0;l=k+(h*24&-1)|0;if((l|0)==0){m=h;n=k}else{mG(l,b);m=c[g>>2]|0;n=c[j>>2]|0}j=n+(m*24&-1)+16|0;if((j|0)==0){o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}m=d|0;n=c[m+4>>2]|0;l=j|0;c[l>>2]=c[m>>2];c[l+4>>2]=n;o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}mG(f,b);b=d|0;d=c[b>>2]|0;n=c[b+4>>2]|0;mH(a|0,(((c[g>>2]|0)*13&-1|0)/8&-1)+8|0);b=c[g>>2]|0;l=a|0;a=c[l>>2]|0;m=a+(b*24&-1)|0;if((m|0)==0){q=b;r=a}else{mG(m,f);q=c[g>>2]|0;r=c[l>>2]|0}l=r+(q*24&-1)+16|0;if((l|0)!=0){q=l|0;c[q>>2]=d;c[q+4>>2]=n}eJ(f);o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}function hp(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+16|0;a=0;while(1){if((a|0)>=(gR(c)|0)){d=0;e=544;break}if(hq(hw(c,a)|0,b)|0){break}else{a=a+1|0}}if((e|0)==544){return d|0}d=(hw(c,a)|0)+12|0;return d|0}function hq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=gU(a)|0;if((c|0)!=(gU(b)|0)){d=0;return d|0}c=hm(a)|0;e=hm(b)|0;d=(Zs(c|0,e|0,gU(a)|0)|0)==0;return d|0}function hr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=a+28|0;a=0;while(1){if((a|0)>=(gS(c)|0)){d=0;e=555;break}if(hq(hx(c,a)|0,b)|0){break}else{a=a+1|0}}if((e|0)==555){return d|0}d=(hx(c,a)|0)+16|0;return d|0}function hs(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=20552,c[B+8>>2]=69,c[B+16>>2]=19432,B)|0);fH();return 0}if((gU(a)|0)>>>0<b>>>0){g7(3208,(B=i,i=i+24|0,c[B>>2]=20552,c[B+8>>2]=70,c[B+16>>2]=20104,B)|0);fH();return 0}else{e=ht(a|0,b)|0;i=d;return e|0}return 0}function ht(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);fH();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+b|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);fH();return 0}return 0}function hu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;if((d|0)<=0){g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=202,c[B+16>>2]=3040,B)|0);fH()}gV(b,d);g=b+4|0;h=c[g>>2]|0;if((h|0)>=(d|0)){c[g>>2]=d;i=f;return}j=b|0;b=h;do{h=(c[j>>2]|0)+b|0;if((h|0)!=0){a[h]=e}b=b+1|0;}while((b|0)<(d|0));c[g>>2]=d;i=f;return}function hv(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((b|0)>0){i=i;return(c[a>>2]|0)+(b-1|0)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22288,c[B+8>>2]=135,c[B+16>>2]=9264,B)|0);fH();return 0}return 0}function hw(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*24&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function hx(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*24&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function hy(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;e=i;f=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];g8(a|0);c[a>>2]=54528;c[a+12>>2]=c[d>>2];f=a+4|0;b[f>>1]=2057;g=gT(d)|0;if((g|0)==2){c[a+8>>2]=q7(c[388]|0)|0}else if((g|0)==1){c[a+8>>2]=q7(c[384]|0)|0}else if((g|0)==0){c[a+8>>2]=q7(c[392]|0)|0}else if((g|0)==3){c[a+8>>2]=q7(c[386]|0)|0}else if((g|0)==4){c[a+8>>2]=q7(c[390]|0)|0;b[f>>1]=b[f>>1]|32}hB(a,0);i=e;return}function hz(a){a=a|0;return c[a+4>>2]|0}function hA(a){a=a|0;return c[a+4>>2]|0}function hB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+128|0;c=b|0;d=b+16|0;e=b+32|0;f=b+48|0;g=b+64|0;h=b+80|0;j=b+96|0;k=b+112|0;l=a|0;eI(c,6896);hk(l,c);eJ(c);eI(d,22464);hk(l,d);eJ(d);eI(e,19680);hk(l,e);eJ(e);eI(f,10992);hk(l,f);eJ(f);eI(g,9296);hk(l,g);eJ(g);eI(h,8152);hk(l,h);eJ(h);eI(j,7088);hk(l,j);eJ(j);eI(k,3760);hk(l,k);eJ(k);i=b;return}function hC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;d=i;i=i+664|0;e=d|0;f=d+64|0;g=d+128|0;h=d+192|0;j=d+232|0;k=d+272|0;l=d+312|0;m=d+328|0;n=d+344|0;o=d+360|0;p=d+376|0;q=d+392|0;r=d+408|0;s=d+424|0;t=d+440|0;u=d+456|0;v=d+520|0;w=d+536|0;x=d+552|0;y=d+616|0;z=d+632|0;A=d+648|0;rU(e,sn(c[16304]|0)|0);rT(f,sn(c[16304]|0)|0);fC(g,f,b);hD(k,g);uM(j,k);uL(h,j);hE(l,r4(c[16304]|0)|0);hF(m);j=l|0;k=m|0;if((hz(j)|0)>0){b=0;do{rY(n,c[hS(j,b)>>2]|0);B=hG(k,n)|0;r6(o,c[hS(j,b)>>2]|0);hG(B,o);b=b+1|0;}while((b|0)<(hz(j)|0))}while(1){if((hA(k)|0)>=8){break}fv(p,0.0);j=hG(k,p)|0;fv(q,0.0);hG(j,q)}q=a|0;eI(r,3760);rA(0,hp(q,r)|0,m);eJ(r);eI(s,6896);ry(0,hp(q,s)|0,g);eJ(s);eI(t,22464);s=hp(q,t)|0;uQ(u,g);ry(0,s,u);eJ(t);eI(v,19680);ry(0,hp(q,v)|0,f);eJ(v);eI(w,10992);v=hp(q,w)|0;uQ(x,f);ry(0,v,x);eJ(w);eI(y,9296);ry(0,hp(q,y)|0,e);eJ(y);eI(z,8152);rx(0,hp(q,z)|0,h);eJ(z);eI(A,7088);rs(0,hp(q,A)|0,0);eJ(A);hH(m);hI(l);i=d;return}function hD(a,b){a=a|0;b=b|0;mD(a,b);return}function hE(a,b){a=a|0;b=b|0;o5(a,b);return}function hF(a){a=a|0;o4(a);return}function hG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+16|0;e=d|0;f=a+4|0;g=c[f>>2]|0;if((g|0)<(c[a+8>>2]|0)){c[f>>2]=g+1;h=(c[a>>2]|0)+(g<<4)|0;if((h|0)==0){i=d;return a|0}j=h;h=b;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];i=d;return a|0}else{h=b;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=c[h+4>>2];c[b+8>>2]=c[h+8>>2];c[b+12>>2]=c[h+12>>2];mC(a,((g*13&-1|0)/8&-1)+8|0);g=c[f>>2]|0;c[f>>2]=g+1;f=(c[a>>2]|0)+(g<<4)|0;if((f|0)==0){i=d;return a|0}g=f;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];i=d;return a|0}return 0}function hH(a){a=a|0;o2(a);return}function hI(a){a=a|0;o0(a);return}function hJ(a){a=a|0;hK(a|0);hL(a+12|0);c[a+24>>2]=0;c[a+32>>2]=0;c[a+28>>2]=0;return}function hK(a){a=a|0;o$(a);return}function hL(a){a=a|0;o_(a);return}function hM(a){a=a|0;oY(a);return}function hN(a){a=a|0;oW(a);return}function hO(a){a=a|0;var b=0,d=0;hP(a|0);b=a+12|0;hQ(b|0);d=c[a+28>>2]|0;if((d|0)!=0){pW(d);Zg(d)}hM(b);hN(a|0);return}function hP(a){a=a|0;m4(a,0,c[a+4>>2]|0);return}function hQ(a){a=a|0;m3(a,0,c[a+4>>2]|0);return}function hR(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=i;i=i+8|0;f=e|0;hc(f,0);hf(a|0,b,d,f);c[a>>2]=54528;hB(a,0);i=e;return}function hS(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=128,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if((e|0)>(b|0)|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<2)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=129,c[B+16>>2]=2184,B)|0);hY();return 0}return 0}function hT(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=i;i=i+136|0;g=f|0;h=f+16|0;j=f+32|0;k=f+40|0;l=f+56|0;m=f+64|0;n=f+80|0;o=f+88|0;p=f+104|0;q=f+112|0;r=f+128|0;s=d+4|0;t=b[s>>1]|0;if((t&32)==0){u=(t&64)!=0}else{u=1}v=t&-2154;if(v<<16>>16!=0){hV(g,v&65535);v=hm(g)|0;g7(2880,(B=i,i=i+24|0,c[B>>2]=2216,c[B+8>>2]=199,c[B+16>>2]=v,B)|0);eJ(g);hY()}if((t&1)!=0){ed[c[(c[d>>2]|0)+12>>2]&127](h,d);fl(j,0);hn(d,h,j,0);eJ(h)}if((t&8)!=0){ed[c[(c[d>>2]|0)+16>>2]&127](k,d);fl(l,3);hn(d,k,l,0);eJ(k)}if((t&2048)!=0){ed[c[(c[d>>2]|0)+20>>2]&127](m,d);fl(n,11);hn(d,m,n,0);eJ(m)}if(u){ed[c[(c[d>>2]|0)+24>>2]&127](o,d);fl(p,5);hn(d,o,p,0);eJ(o)}hZ(a,b[s>>1]|0,e);s=a+28|0;if((c[s>>2]|0)==0){hW(q);o=e|0;if((hU(o)|0)>0){e=q|0;p=0;do{hX(e,iz(o,p)|0);hX(e,iz(o,p+1|0)|0);hX(e,iz(o,p+2|0)|0);p=p+3|0;}while((p|0)<(hU(o)|0))}o=Zc(4)|0;p=q|0;pV(o,h_(p)|0);c[s>>2]=o;e=po(o,0,0)|0;o=iz(p,0)|0;Zp(e|0,o|0,h_(p)|0);pX(c[s>>2]|0);c[a+32>>2]=hU(p)|0;gj(q)}q=a|0;if((h$(q)|0)==5){w=d+12|0;x=gT(w)|0;y=iA(q,x)|0;c[y>>2]=d;i=f;return}ia(q,5);c[r>>2]=0;ib(q,r);c[r>>2]=0;ib(q,r);c[r>>2]=0;ib(q,r);c[r>>2]=0;ib(q,r);c[r>>2]=0;ib(q,r);w=d+12|0;x=gT(w)|0;y=iA(q,x)|0;c[y>>2]=d;i=f;return}function hU(a){a=a|0;return c[a+4>>2]|0}function hV(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;c=i;i=i+64|0;d=c|0;e=c+16|0;f=c+32|0;g=c+48|0;eI(d,19848);h=0;j=0;while(1){if((1<<h&b|0)==0){k=j}else{if((j|0)!=0){eI(e,23040);oT(d,e);eJ(e)}oU(f,h,1);oT(d,f);eJ(f);k=j+1|0}l=h+1|0;if((l|0)<15){h=l;j=k}else{break}}eI(g,19320);oV(a,d,g);eJ(g);eJ(d);i=c;return}function hW(a){a=a|0;oS(a);return}function hX(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;e=a+4|0;f=c[e>>2]|0;if((f|0)<(c[a+8>>2]|0)){c[e>>2]=f+1;g=(c[a>>2]|0)+(f<<1)|0;if((g|0)==0){return a|0}b[g>>1]=b[d>>1]|0;return a|0}else{g=b[d>>1]|0;mB(a,((f*13&-1|0)/8&-1)+8|0);f=c[e>>2]|0;c[e>>2]=f+1;e=(c[a>>2]|0)+(f<<1)|0;if((e|0)==0){return a|0}b[e>>1]=g;return a|0}return 0}function hY(){g3();ph()}function hZ(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0;f=i;i=i+912|0;h=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+40|0;n=f+80|0;o=f+88|0;p=f+96|0;q=f+104|0;r=f+112|0;s=f+120|0;t=f+128|0;u=f+136|0;v=f+144|0;w=f+152|0;x=f+160|0;y=f+168|0;z=f+176|0;A=f+192|0;C=f+200|0;D=f+208|0;E=f+224|0;F=f+264|0;G=f+272|0;H=f+280|0;I=f+288|0;J=f+296|0;K=f+304|0;L=f+312|0;M=f+320|0;N=f+328|0;O=f+336|0;P=f+344|0;Q=f+352|0;R=f+360|0;S=f+376|0;T=f+416|0;U=f+424|0;V=f+432|0;W=f+440|0;X=f+448|0;Y=f+456|0;Z=f+464|0;_=f+472|0;$=f+480|0;aa=f+488|0;ab=f+496|0;ac=f+504|0;ad=f+512|0;ae=f+528|0;af=f+536|0;ag=f+576|0;ah=f+584|0;ai=f+592|0;aj=f+600|0;ak=f+608|0;al=f+616|0;am=f+624|0;an=f+632|0;ao=f+640|0;ap=f+648|0;aq=f+656|0;ar=f+664|0;as=f+672|0;at=f+688|0;au=f+696|0;av=f+704|0;aw=f+720|0;ax=f+728|0;ay=f+768|0;az=f+776|0;aA=f+784|0;aB=f+792|0;aC=f+800|0;aD=f+808|0;aE=f+816|0;aF=f+824|0;aG=f+832|0;aH=f+840|0;aI=f+848|0;aJ=f+856|0;aK=f+864|0;aL=f+880|0;aM=f+888|0;aN=f+896|0;b[h>>1]=d;aO=a+12|0;aP=aO|0;aQ=0;while(1){if((aQ|0)>=(h0(aP)|0)){break}if((b[iB(aP,aQ)>>1]|0)==d<<16>>16){aR=901;break}else{aQ=aQ+1|0}}if((aR|0)==901){i=f;return}c[j>>2]=0;c[k>>2]=0;aR=d&65535;aQ=aR&1;aP=d&8;aS=d&2048;aT=d&32;aU=d&64;aV=(((((aP&65535)>>>3&65535)+aQ|0)+((aS&65535)>>>11&65535)|0)+((aT&65535)>>>5&65535)|0)+((aU&65535)>>>6&65535)|0;if((d&-2154)<<16>>16!=0){hV(l,aR);aR=hm(l)|0;g7(46e3,(B=i,i=i+24|0,c[B>>2]=2216,c[B+8>>2]=262,c[B+16>>2]=aR,B)|0);eJ(l);hY()}l=(aQ|0)==0;aQ=l|aP<<16>>16==0|aS<<16>>16==0;aS=aT<<16>>16==0;aT=aQ|aS;aP=aU<<16>>16==0;do{if((aV|0)==5&((aT|aP)^1)){aU=Zc(112)|0;fl(n,0);fl(o,3);fl(p,11);fl(q,5);fl(r,0);fl(s,0);fl(t,0);fl(u,0);fl(v,0);fl(w,0);fl(x,0);fl(y,0);ic(m,n,o,p,q,r,s,t,u,v,w,x,y);rH(aU,m|0,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280);c[j>>2]=aU;id(z);aU=e+12|0;if((h1(aU)|0)>0){aR=0;do{d=iC(aU,aR)|0;aW=(iC(aU,aR)|0)+12|0;aX=(iC(aU,aR)|0)+24|0;g[C>>2]=255.0;ig(D,aX,C);ih(A,D);ie(z,d,aW,A,(iC(aU,aR)|0)+40|0);aR=aR+1|0;}while((aR|0)<(h1(aU)|0))}aU=z|0;aR=iD(aU,0)|0;aW=h2(aU)|0;c[a+24>>2]=h3(aU)|0;aU=Zc(4)|0;rM(aU,aW);c[k>>2]=aU;Zp(rm(aU,0,0)|0,aR|0,aW);rO(aU);ii(z)}else{aU=l|aS;aW=(aV|0)==3;if(aW&((aU|aP)^1)){aR=Zc(112)|0;fl(F,0);fl(G,5);fl(H,0);fl(I,0);fl(J,0);fl(K,0);fl(L,0);fl(M,0);fl(N,0);fl(O,0);fl(P,0);fl(Q,0);ij(E,F,G,H,I,J,K,L,M,N,O,P,Q);rH(aR,E|0,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280);c[j>>2]=aR;ik(R);aR=e+12|0;if((h1(aR)|0)>0){d=0;do{aX=iC(aR,d)|0;il(R,aX|0,(iC(aR,d)|0)+40|0);d=d+1|0;}while((d|0)<(h1(aR)|0))}aR=R|0;d=iE(aR,0)|0;aX=h4(aR)|0;c[a+24>>2]=h5(aR)|0;aR=Zc(4)|0;rM(aR,aX);c[k>>2]=aR;Zp(rm(aR,0,0)|0,d|0,aX);rO(aR);im(R);break}if((aV|0)==2&(aU^1)){aR=Zc(112)|0;fl(T,0);fl(U,5);fl(V,0);fl(W,0);fl(X,0);fl(Y,0);fl(Z,0);fl(_,0);fl($,0);fl(aa,0);fl(ab,0);fl(ac,0);io(S,T,U,V,W,X,Y,Z,_,$,aa,ab,ac);rH(aR,S|0,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280);c[j>>2]=aR;ip(ad);aR=e+12|0;if((h1(aR)|0)>0){aX=0;do{d=iC(aR,aX)|0;ir(ae,(iC(aR,aX)|0)+40|0);iq(ad,d|0,ae);aX=aX+1|0;}while((aX|0)<(h1(aR)|0))}aR=ad|0;aX=iF(aR,0)|0;aU=h6(aR)|0;c[a+24>>2]=h7(aR)|0;aR=Zc(4)|0;rM(aR,aU);c[k>>2]=aR;Zp(rm(aR,0,0)|0,aX|0,aU);rO(aR);is(ad);break}if((aV|0)==4&(aT^1)){aR=Zc(112)|0;fl(ag,0);fl(ah,3);fl(ai,11);fl(aj,5);fl(ak,0);fl(al,0);fl(am,0);fl(an,0);fl(ao,0);fl(ap,0);fl(aq,0);fl(ar,0);it(af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar);rH(aR,af|0,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280);c[j>>2]=aR;iu(as);aR=e+12|0;if((h1(aR)|0)>0){aU=0;do{aX=iC(aR,aU)|0;d=(iC(aR,aU)|0)+12|0;aY=(iC(aR,aU)|0)+24|0;g[au>>2]=255.0;ig(av,aY,au);ih(at,av);ir(aw,(iC(aR,aU)|0)+40|0);iv(as,aX,d,at,aw);aU=aU+1|0;}while((aU|0)<(h1(aR)|0))}aR=as|0;aU=iG(aR,0)|0;d=h8(aR)|0;c[a+24>>2]=h9(aR)|0;aR=Zc(4)|0;rM(aR,d);c[k>>2]=aR;Zp(rm(aR,0,0)|0,aU|0,d);rO(aR);iw(as);break}else{if(!(aW&(aQ^1))){break}aR=Zc(112)|0;fl(ay,0);fl(az,3);fl(aA,11);fl(aB,0);fl(aC,0);fl(aD,0);fl(aE,0);fl(aF,0);fl(aG,0);fl(aH,0);fl(aI,0);fl(aJ,0);ix(ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ);rH(aR,ax|0,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280,65280);c[j>>2]=aR;iy(aK);aR=e+12|0;if((h1(aR)|0)>0){d=0;do{aU=iC(aR,d)|0;aX=iC(aR,d)|0;aY=(iC(aR,d)|0)+24|0;g[aM>>2]=255.0;ig(aN,aY,aM);ih(aL,aN);iK(aK,aU,aX+12|0,aL);d=d+1|0;}while((d|0)<(h1(aR)|0))}aR=aK|0;d=iY(aR,0)|0;aW=iH(aR)|0;c[a+24>>2]=iI(aR)|0;aR=Zc(4)|0;rM(aR,aW);c[k>>2]=aR;Zp(rm(aR,0,0)|0,d|0,aW);rO(aR);iL(aK);break}}}while(0);iM(aO,h,j,k);i=f;return}function h_(a){a=a|0;return c[a+4>>2]<<1|0}function h$(a){a=a|0;return c[a+4>>2]|0}function h0(a){a=a|0;return c[a+4>>2]|0}function h1(a){a=a|0;return c[a+4>>2]|0}function h2(a){a=a|0;return(c[a+4>>2]|0)*44&-1|0}function h3(a){a=a|0;return c[a+4>>2]|0}function h4(a){a=a|0;return(c[a+4>>2]|0)*28&-1|0}function h5(a){a=a|0;return c[a+4>>2]|0}function h6(a){a=a|0;return(c[a+4>>2]|0)*20&-1|0}function h7(a){a=a|0;return c[a+4>>2]|0}function h8(a){a=a|0;return(c[a+4>>2]|0)*36&-1|0}function h9(a){a=a|0;return c[a+4>>2]|0}function ia(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<2)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<2)|0;if((h|0)!=0){c[h>>2]=c[(c[g>>2]|0)+(a<<2)>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function ib(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+4|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){c[d>>2]=e+1;f=(c[a>>2]|0)+(e<<2)|0;if((f|0)==0){return a|0}c[f>>2]=c[b>>2];return a|0}else{f=c[b>>2]|0;ia(a,((e*13&-1|0)/8&-1)+8|0);e=c[d>>2]|0;c[d>>2]=e+1;d=(c[a>>2]|0)+(e<<2)|0;if((d|0)==0){return a|0}c[d>>2]=f;return a|0}return 0}function ic(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;p=i;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];mA(a,b,d,e,f,g,h,j,k,l,m,n,o);i=p;return}function id(a){a=a|0;oR(a);return}function ie(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0;j=i;i=i+48|0;k=j|0;l=j+16|0;m=j+32|0;n=b+4|0;o=c[n>>2]|0;if((o|0)<(c[b+8>>2]|0)){p=b|0;q=c[p>>2]|0;r=q+(o*44&-1)|0;if((r|0)==0){s=o;t=q}else{q=r;r=e;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];s=c[n>>2]|0;t=c[p>>2]|0}r=t+(s*44&-1)+12|0;if((r|0)==0){u=s;v=t}else{t=r;r=f;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];u=c[n>>2]|0;v=c[p>>2]|0}r=v+(u*44&-1)+24|0;if((r|0)==0){w=u;x=v}else{v=g;u=r;C=d[v]|d[v+1|0]<<8|d[v+2|0]<<16|d[v+3|0]<<24|0;a[u]=C&255;C=C>>8;a[u+1|0]=C&255;C=C>>8;a[u+2|0]=C&255;C=C>>8;a[u+3|0]=C&255;w=c[n>>2]|0;x=c[p>>2]|0}p=x+(w*44&-1)+28|0;if((p|0)==0){y=c[n>>2]|0;z=y+1|0;c[n>>2]=z;i=j;return}w=p;p=h;c[w>>2]=c[p>>2];c[w+4>>2]=c[p+4>>2];c[w+8>>2]=c[p+8>>2];c[w+12>>2]=c[p+12>>2];y=c[n>>2]|0;z=y+1|0;c[n>>2]=z;i=j;return}else{p=e;e=k;c[e>>2]=c[p>>2];c[e+4>>2]=c[p+4>>2];c[e+8>>2]=c[p+8>>2];p=f;f=l;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];p=g;g=d[p]|d[p+1|0]<<8|d[p+2|0]<<16|d[p+3|0]<<24|0;p=h;h=m;c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];c[h+8>>2]=c[p+8>>2];c[h+12>>2]=c[p+12>>2];mz(b|0,((o*13&-1|0)/8&-1)+8|0);o=c[n>>2]|0;p=b|0;b=c[p>>2]|0;m=b+(o*44&-1)|0;if((m|0)==0){A=o;B=b}else{b=m;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];A=c[n>>2]|0;B=c[p>>2]|0}e=B+(A*44&-1)+12|0;if((e|0)==0){D=A;E=B}else{B=e;c[B>>2]=c[f>>2];c[B+4>>2]=c[f+4>>2];c[B+8>>2]=c[f+8>>2];D=c[n>>2]|0;E=c[p>>2]|0}f=E+(D*44&-1)+24|0;if((f|0)==0){F=D;G=E}else{E=f;C=g;a[E]=C&255;C=C>>8;a[E+1|0]=C&255;C=C>>8;a[E+2|0]=C&255;C=C>>8;a[E+3|0]=C&255;F=c[n>>2]|0;G=c[p>>2]|0}p=G+(F*44&-1)+28|0;if((p|0)==0){y=c[n>>2]|0;z=y+1|0;c[n>>2]=z;i=j;return}F=p;c[F>>2]=c[h>>2];c[F+4>>2]=c[h+4>>2];c[F+8>>2]=c[h+8>>2];c[F+12>>2]=c[h+12>>2];y=c[n>>2]|0;z=y+1|0;c[n>>2]=z;i=j;return}}function ig(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fK(b,0)>>2];e=d*+g[c>>2];g[fL(a,0)>>2]=e;e=+g[fK(b,1)>>2];d=e*+g[c>>2];g[fL(a,1)>>2]=d;d=+g[fK(b,2)>>2];e=d*+g[c>>2];g[fL(a,2)>>2]=e;e=+g[fK(b,3)>>2];d=e*+g[c>>2];g[fL(a,3)>>2]=d;return}function ih(b,c){b=b|0;c=c|0;var d=0;d=~~+g[fK(c,0)>>2];a[mc(b,0)|0]=d;d=~~+g[fK(c,1)>>2];a[mc(b,1)|0]=d;d=~~+g[fK(c,2)>>2];a[mc(b,2)|0]=d;d=~~+g[fK(c,3)>>2];a[mc(b,3)|0]=d;return}function ii(a){a=a|0;oF(a);return}function ij(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;p=i;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];ms(a,b,d,e,f,g,h,j,k,l,m,n,o);i=p;return}function ik(a){a=a|0;oE(a);return}function il(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;i=i+32|0;f=e|0;g=e+16|0;h=a+4|0;j=c[h>>2]|0;if((j|0)<(c[a+8>>2]|0)){k=a|0;l=c[k>>2]|0;m=l+(j*28&-1)|0;if((m|0)==0){n=j;o=l}else{l=m;m=b;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];n=c[h>>2]|0;o=c[k>>2]|0}k=o+(n*28&-1)+12|0;if((k|0)==0){p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}n=k;k=d;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}else{k=b;b=f;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];k=d;d=g;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];mr(a|0,((j*13&-1|0)/8&-1)+8|0);j=c[h>>2]|0;k=a|0;a=c[k>>2]|0;g=a+(j*28&-1)|0;if((g|0)==0){r=j;s=a}else{a=g;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];r=c[h>>2]|0;s=c[k>>2]|0}k=s+(r*28&-1)+12|0;if((k|0)==0){p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}r=k;c[r>>2]=c[d>>2];c[r+4>>2]=c[d+4>>2];c[r+8>>2]=c[d+8>>2];c[r+12>>2]=c[d+12>>2];p=c[h>>2]|0;q=p+1|0;c[h>>2]=q;i=e;return}}function im(a){a=a|0;oC(a);return}function io(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;p=i;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];mq(a,b,d,e,f,g,h,j,k,l,m,n,o);i=p;return}function ip(a){a=a|0;oB(a);return}function iq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;i=i+16|0;f=e|0;g=a+4|0;h=c[g>>2]|0;if((h|0)<(c[a+8>>2]|0)){j=a|0;k=c[j>>2]|0;l=k+(h*20&-1)|0;if((l|0)==0){m=h;n=k}else{k=l;l=b;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];m=c[g>>2]|0;n=c[j>>2]|0}j=n+(m*20&-1)+12|0;if((j|0)==0){o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}m=d;n=j;j=c[m+4>>2]|0;c[n>>2]=c[m>>2];c[n+4>>2]=j;o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}else{j=b;b=f;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];j=d;d=c[j>>2]|0;f=c[j+4>>2]|0;mp(a|0,((h*13&-1|0)/8&-1)+8|0);h=c[g>>2]|0;j=a|0;a=c[j>>2]|0;n=a+(h*20&-1)|0;if((n|0)==0){q=h;r=a}else{a=n;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];q=c[g>>2]|0;r=c[j>>2]|0}j=r+(q*20&-1)+12|0;if((j|0)==0){o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}q=j;c[q>>2]=d;c[q+4>>2]=f;o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}}function ir(a,b){a=a|0;b=b|0;mo(a,b);return}function is(a){a=a|0;oz(a);return}function it(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;p=i;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];mn(a,b,d,e,f,g,h,j,k,l,m,n,o);i=p;return}function iu(a){a=a|0;oy(a);return}function iv(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0;j=i;i=i+32|0;k=j|0;l=j+16|0;m=b+4|0;n=c[m>>2]|0;if((n|0)<(c[b+8>>2]|0)){o=b|0;p=c[o>>2]|0;q=p+(n*36&-1)|0;if((q|0)==0){r=n;s=p}else{p=q;q=e;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];r=c[m>>2]|0;s=c[o>>2]|0}q=s+(r*36&-1)+12|0;if((q|0)==0){t=r;u=s}else{s=q;q=f;c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];t=c[m>>2]|0;u=c[o>>2]|0}q=u+(t*36&-1)+24|0;if((q|0)==0){v=t;w=u}else{u=g;t=q;C=d[u]|d[u+1|0]<<8|d[u+2|0]<<16|d[u+3|0]<<24|0;a[t]=C&255;C=C>>8;a[t+1|0]=C&255;C=C>>8;a[t+2|0]=C&255;C=C>>8;a[t+3|0]=C&255;v=c[m>>2]|0;w=c[o>>2]|0}o=w+(v*36&-1)+28|0;if((o|0)==0){x=c[m>>2]|0;y=x+1|0;c[m>>2]=y;i=j;return}v=h;w=o;o=c[v+4>>2]|0;c[w>>2]=c[v>>2];c[w+4>>2]=o;x=c[m>>2]|0;y=x+1|0;c[m>>2]=y;i=j;return}else{o=e;e=k;c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];o=f;f=l;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];o=g;g=d[o]|d[o+1|0]<<8|d[o+2|0]<<16|d[o+3|0]<<24|0;o=h;h=c[o>>2]|0;l=c[o+4>>2]|0;mm(b|0,((n*13&-1|0)/8&-1)+8|0);n=c[m>>2]|0;o=b|0;b=c[o>>2]|0;k=b+(n*36&-1)|0;if((k|0)==0){z=n;A=b}else{b=k;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];z=c[m>>2]|0;A=c[o>>2]|0}e=A+(z*36&-1)+12|0;if((e|0)==0){B=z;D=A}else{A=e;c[A>>2]=c[f>>2];c[A+4>>2]=c[f+4>>2];c[A+8>>2]=c[f+8>>2];B=c[m>>2]|0;D=c[o>>2]|0}f=D+(B*36&-1)+24|0;if((f|0)==0){E=B;F=D}else{D=f;C=g;a[D]=C&255;C=C>>8;a[D+1|0]=C&255;C=C>>8;a[D+2|0]=C&255;C=C>>8;a[D+3|0]=C&255;E=c[m>>2]|0;F=c[o>>2]|0}o=F+(E*36&-1)+28|0;if((o|0)==0){x=c[m>>2]|0;y=x+1|0;c[m>>2]=y;i=j;return}E=o;c[E>>2]=h;c[E+4>>2]=l;x=c[m>>2]|0;y=x+1|0;c[m>>2]=y;i=j;return}}function iw(a){a=a|0;ow(a);return}function ix(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;p=i;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];mj(a,b,d,e,f,g,h,j,k,l,m,n,o);i=p;return}function iy(a){a=a|0;ov(a);return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iA(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<2)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iB(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*12&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iC(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*88&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iD(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*44&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iE(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*28&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iF(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*20&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iG(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*36&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iH(a){a=a|0;return(c[a+4>>2]|0)*28&-1|0}function iI(a){a=a|0;return c[a+4>>2]|0}function iJ(a){a=a|0;return c[a+4>>2]|0}function iK(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;h=i;i=i+32|0;j=h|0;k=h+16|0;l=b+4|0;m=c[l>>2]|0;if((m|0)<(c[b+8>>2]|0)){n=b|0;o=c[n>>2]|0;p=o+(m*28&-1)|0;if((p|0)==0){q=m;r=o}else{o=p;p=e;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];q=c[l>>2]|0;r=c[n>>2]|0}p=r+(q*28&-1)+12|0;if((p|0)==0){s=q;t=r}else{r=p;p=f;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];s=c[l>>2]|0;t=c[n>>2]|0}n=t+(s*28&-1)+24|0;if((n|0)==0){u=c[l>>2]|0;v=u+1|0;c[l>>2]=v;i=h;return}s=g;t=n;C=d[s]|d[s+1|0]<<8|d[s+2|0]<<16|d[s+3|0]<<24|0;a[t]=C&255;C=C>>8;a[t+1|0]=C&255;C=C>>8;a[t+2|0]=C&255;C=C>>8;a[t+3|0]=C&255;u=c[l>>2]|0;v=u+1|0;c[l>>2]=v;i=h;return}else{t=e;e=j;c[e>>2]=c[t>>2];c[e+4>>2]=c[t+4>>2];c[e+8>>2]=c[t+8>>2];t=f;f=k;c[f>>2]=c[t>>2];c[f+4>>2]=c[t+4>>2];c[f+8>>2]=c[t+8>>2];t=g;g=d[t]|d[t+1|0]<<8|d[t+2|0]<<16|d[t+3|0]<<24|0;mi(b|0,((m*13&-1|0)/8&-1)+8|0);m=c[l>>2]|0;t=b|0;b=c[t>>2]|0;k=b+(m*28&-1)|0;if((k|0)==0){w=m;x=b}else{b=k;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];w=c[l>>2]|0;x=c[t>>2]|0}e=x+(w*28&-1)+12|0;if((e|0)==0){y=w;z=x}else{x=e;c[x>>2]=c[f>>2];c[x+4>>2]=c[f+4>>2];c[x+8>>2]=c[f+8>>2];y=c[l>>2]|0;z=c[t>>2]|0}t=z+(y*28&-1)+24|0;if((t|0)==0){u=c[l>>2]|0;v=u+1|0;c[l>>2]=v;i=h;return}y=t;C=g;a[y]=C&255;C=C>>8;a[y+1|0]=C&255;C=C>>8;a[y+2|0]=C&255;C=C>>8;a[y+3|0]=C&255;u=c[l>>2]|0;v=u+1|0;c[l>>2]=v;i=h;return}}function iL(a){a=a|0;ot(a);return}function iM(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=a+4|0;h=c[g>>2]|0;if((h|0)<(c[a+8>>2]|0)){i=a|0;j=c[i>>2]|0;k=j+(h*12&-1)|0;if((k|0)==0){l=h;m=j}else{b[k>>1]=b[d>>1]|0;l=c[g>>2]|0;m=c[i>>2]|0}k=m+(l*12&-1)+4|0;if((k|0)==0){n=l;o=m}else{c[k>>2]=c[e>>2];n=c[g>>2]|0;o=c[i>>2]|0}i=o+(n*12&-1)+8|0;if((i|0)==0){p=c[g>>2]|0;q=p+1|0;c[g>>2]=q;return}c[i>>2]=c[f>>2];p=c[g>>2]|0;q=p+1|0;c[g>>2]=q;return}else{i=b[d>>1]|0;d=c[e>>2]|0;e=c[f>>2]|0;mh(a|0,((h*13&-1|0)/8&-1)+8|0);h=c[g>>2]|0;f=a|0;a=c[f>>2]|0;n=a+(h*12&-1)|0;if((n|0)==0){r=h;s=a}else{b[n>>1]=i;r=c[g>>2]|0;s=c[f>>2]|0}i=s+(r*12&-1)+4|0;if((i|0)==0){t=r;u=s}else{c[i>>2]=d;t=c[g>>2]|0;u=c[f>>2]|0}f=u+(t*12&-1)+8|0;if((f|0)==0){p=c[g>>2]|0;q=p+1|0;c[g>>2]=q;return}c[f>>2]=e;p=c[g>>2]|0;q=p+1|0;c[g>>2]=q;return}}function iN(a){a=a|0;os(a);return}function iO(a){a=a|0;or(a);return}function iP(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=a+4|0;f=c[e>>2]|0;do{if((f|0)<(c[a+8>>2]|0)){g=a|0;h=c[g>>2]|0;i=h+(f<<3)|0;if((i|0)==0){j=f;k=h}else{c[i>>2]=c[b>>2];j=c[e>>2]|0;k=c[g>>2]|0}g=k+(j<<3)+4|0;if((g|0)==0){break}c[g>>2]=c[d>>2]}else{g=c[b>>2]|0;i=c[d>>2]|0;mg(a|0,((f*13&-1|0)/8&-1)+8|0);h=c[e>>2]|0;l=a|0;m=c[l>>2]|0;n=m+(h<<3)|0;if((n|0)==0){o=h;p=m}else{c[n>>2]=g;o=c[e>>2]|0;p=c[l>>2]|0}l=p+(o<<3)+4|0;if((l|0)==0){break}c[l>>2]=i}}while(0);c[e>>2]=(c[e>>2]|0)+1;return}function iQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=i;i=i+8|0;d=c|0;xy(d,a);a=x4(d,b)|0;i=c;return a|0}function iR(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b|0;e=b+8|0;c[d>>2]=h1(a+12|0)|0;c[e>>2]=hU(a|0)|0;iP(a+24|0,d,e);i=b;return}function iS(a){a=a|0;var b=0;b=i;i=i+8|0;i$(b|0,a+24|0);i=b;return}function iT(a,b){a=a|0;b=b|0;nv(a,b);return}function iU(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=i;i=i+16|0;d=c|0;e=c+8|0;f=Zc(40)|0;if((b|0)==0){hc(d,0);hy(f,d);hT(a+36|0,f,a)}else{hR(f,2057,b,0);hT(a+36|0,f,a)}f=a+36|0;b=Zc(40)|0;iT(e,1);hy(b,e);hT(f,b,a);b=Zc(40)|0;iT(e,2);hy(b,e);hT(f,b,a);b=Zc(40)|0;iT(e,3);hy(b,e);hT(f,b,a);b=Zc(40)|0;iT(e,4);hy(b,e);hT(f,b,a);i=c;return}function iV(a,b){a=a|0;b=b|0;iZ(a+36|0,b);return}function iW(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a|0;a=0;while(1){if((a|0)>=(iJ(d)|0)){e=-3;f=1141;break}if((c[i0(d,a)>>2]|0)==(b|0)){break}else{a=a+1|0}}if((f|0)==1141){return e|0}e=c[(i0(d,a)|0)+16>>2]|0;return e|0}function iX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=iW(a,b)|0;if((e+3|0)>>>0<2){f=0;return f|0}if((e|0)==-1){g=b;h=a|0}else{i=d|0;j=a|0;a=i0(j,e)|0;i3(i,a);g=e;h=j}j=d|0;if((iJ(h)|0)>0){d=0;do{do{if((c[(i0(h,d)|0)+16>>2]|0)==(g|0)){if((c[i0(h,d)>>2]|0)==(b|0)){break}e=i0(h,d)|0;i3(j,e)}}while(0);d=d+1|0;}while((d|0)<(iJ(h)|0))}f=(i1(j)|0)>0;return f|0}function iY(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*28&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function iZ(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=i;i=i+224|0;f=e|0;g=e+8|0;h=e+24|0;j=e+56|0;k=e+72|0;l=e+88|0;m=e+104|0;n=e+120|0;o=e+128|0;p=e+136|0;q=e+144|0;r=e+152|0;s=e+160|0;t=e+168|0;u=e+176|0;v=e+184|0;w=e+192|0;x=e+200|0;y=e+208|0;z=e+216|0;tS(f);A=c[iA(a|0,gT(f)|0)>>2]|0;f=a+12|0;C=A+4|0;D=0;while(1){if((D|0)>=(h0(f)|0)){break}E=b[iB(f,D)>>1]|0;if(E<<16>>16==(b[C>>1]|0)){break}else{D=D+1|0}}if((D|0)>=(h0(f)|0)){i=e;return}C=b[iB(f,D)>>1]|0;E=c[(iB(f,D)|0)+4>>2]|0;F=c[(iB(f,D)|0)+8>>2]|0;rB(c[A+8>>2]|0);ed[c[(c[A>>2]|0)+8>>2]&127](A,d);if((C&32)==0){G=(C&64)!=0}else{G=1}d=C&-2154;if(d<<16>>16!=0){hV(g,d&65535);d=hm(g)|0;g7(44832,(B=i,i=i+24|0,c[B>>2]=2216,c[B+8>>2]=389,c[B+16>>2]=d,B)|0);eJ(g);hY()}eO(h|0);eO(h+8|0);eO(h+16|0);eO(h+24|0);if((C&1)==0){H=0}else{ed[c[(c[A>>2]|0)+12>>2]&127](j,A);g=hr(A,j)|0;d=c[g+4>>2]|0;D=h|0;c[D>>2]=c[g>>2];c[D+4>>2]=d;eJ(j);H=1}if((C&8)==0){I=H}else{ed[c[(c[A>>2]|0)+16>>2]&127](k,A);j=hr(A,k)|0;d=c[j+4>>2]|0;D=h+(H<<3)|0;c[D>>2]=c[j>>2];c[D+4>>2]=d;eJ(k);I=H+1|0}if((C&2048)==0){J=I}else{ed[c[(c[A>>2]|0)+20>>2]&127](l,A);C=hr(A,l)|0;H=c[C+4>>2]|0;k=h+(I<<3)|0;c[k>>2]=c[C>>2];c[k+4>>2]=H;eJ(l);J=I+1|0}if(G){ed[c[(c[A>>2]|0)+24>>2]&127](m,A);G=hr(A,m)|0;A=c[G+4>>2]|0;I=h+(J<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=A;eJ(m)}m=h|0;A=c[m+4>>2]|0;I=n|0;c[I>>2]=c[m>>2];c[I+4>>2]=A;A=h+8|0;I=c[A+4>>2]|0;m=o|0;c[m>>2]=c[A>>2];c[m+4>>2]=I;I=h+16|0;m=c[I+4>>2]|0;A=p|0;c[A>>2]=c[I>>2];c[A+4>>2]=m;m=h+24|0;h=c[m+4>>2]|0;A=q|0;c[A>>2]=c[m>>2];c[A+4>>2]=h;eO(r);eO(s);eO(t);eO(u);eO(v);eO(w);eO(x);eO(y);rL(E,F,n,o,p,q,r,s,t,u,v,w,x,y);y=a+28|0;pY(c[y>>2]|0);fq(z,0);rJ(0,z,0,0,0,0,c[a+32>>2]|0);pZ(c[y>>2]|0);rK(E);i=e;return}function i_(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+16|0;d=b|0;e=b+8|0;hW(a|0);iN(a+12|0);f=a+24|0;iO(f);hJ(a+36|0);c[a+72>>2]=0;c[d>>2]=0;c[e>>2]=0;iP(f,d,e);i=b;return}function i$(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;e=b+4|0;if((c[e>>2]|0)>0){f=j3(b)|0;g=a;a=c[f+4>>2]|0;c[g>>2]=c[f>>2];c[g+4>>2]=a;mw(b,(c[e>>2]|0)-1|0,1);i=d;return}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=167,c[B+16>>2]=9264,B)|0);hY()}}function i0(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*20&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function i1(a){a=a|0;return c[a+4>>2]|0}function i2(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function i3(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+4|0;e=c[d>>2]|0;if((e|0)<(c[a+8>>2]|0)){c[d>>2]=e+1;f=(c[a>>2]|0)+(e<<2)|0;if((f|0)==0){return a|0}c[f>>2]=c[b>>2];return a|0}else{f=c[b>>2]|0;lR(a,((e*13&-1|0)/8&-1)+8|0);e=c[d>>2]|0;c[d>>2]=e+1;d=(c[a>>2]|0)+(e<<2)|0;if((d|0)==0){return a|0}c[d>>2]=f;return a|0}return 0}function i4(a,b,d,f,g,h){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;j=i;i=i+24|0;k=j|0;l=j+16|0;i5(k);i6(a,b,d,f,k,h);h=k|0;if((i1(h)|0)<=0){m=g|0;n=i1(m)|0;o=(n|0)>0;i7(k);i=j;return o|0}f=d|0;d=g|0;g=0;while(1){p=0;do{q=e[jf(f,(c[jg(h,g)>>2]|0)+p|0)>>1]|0;L1275:do{if((q|0)!=(b|0)){r=iW(a,e[jf(f,(c[jg(h,g)>>2]|0)+p|0)>>1]|0)|0;s=r>>>0>4294967293?q:r;c[l>>2]=s;if((s|0)==(b|0)){break}else{t=0}while(1){if((t|0)>=(i1(d)|0)){break}if((c[jg(d,t)>>2]|0)==(s|0)){break L1275}else{t=t+1|0}}i3(d,l)}}while(0);p=p+1|0;}while((p|0)<3);p=g+1|0;if((p|0)<(i1(h)|0)){g=p}else{m=d;break}}n=i1(m)|0;o=(n|0)>0;i7(k);i=j;return o|0}function i5(a){a=a|0;oq(a);return}function i6(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;i=i+16|0;h=g|0;i9(h,b,b,b);b=i8(a,h,c,d,e,f)|0;i=g;return b|0}function i7(a){a=a|0;oo(a);return}function i8(a,b,d,f,g,h){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;j=i;i=i+48|0;k=j|0;l=j+40|0;m=k|0;i5(m);i5(k+12|0);i5(k+24|0);n=i2(b,0)|0;i3(k|0,n);iX(a,c[n>>2]|0,m);m=c[i2(b,0)>>2]|0;n=i2(b,1)|0;if((m|0)==(c[n>>2]|0)){o=1}else{m=k+12|0;p=m|0;i3(p,n);p=c[n>>2]|0;iX(a,p,m);o=2}m=c[i2(b,0)>>2]|0;p=c[i2(b,2)>>2]|0;do{if((m|0)==(p|0)){q=o}else{if((c[i2(b,1)>>2]|0)==(p|0)){q=o;break}n=k+24|0;r=n|0;s=i2(b,2)|0;i3(r,s);r=o+1|0;t=c[s>>2]|0;iX(a,t,n);q=r}}while(0);c[l>>2]=f;a=d|0;if((hU(a)|0)<=(f|0)){u=g|0;v=i1(u)|0;w=k+24|0;i7(w);x=k+12|0;i7(x);y=k|0;i7(y);z=(v|0)>0;i=j;return z|0}d=(h|0)==0;o=h|0;h=g|0;g=f;while(1){L1309:do{if(d){A=1259}else{f=0;while(1){if((f|0)>=(i1(o)|0)){A=1259;break L1309}if((c[jh(o,f)>>2]|0)==(g|0)){B=g;break}else{f=f+1|0}}}}while(0);do{if((A|0)==1259){A=0;f=k|0;b=0;while(1){if((b|0)<(i1(f)|0)){C=0;D=0}else{E=0;break}do{p=c[jg(f,b)>>2]|0;C=(p|0)==(e[jf(a,g+D|0)>>1]|0|0)|C;D=D+1|0;}while((D|0)<3&(C^1));if(C){E=1;break}else{b=b+1|0}}b=k+12|0;f=0;while(1){if((f|0)<(i1(b)|0)){F=0;G=0}else{H=0;break}do{p=c[jg(b,f)>>2]|0;F=(p|0)==(e[jf(a,g+G|0)>>1]|0|0)|F;G=G+1|0;}while((G|0)<3&(F^1));if(F){H=1;break}else{f=f+1|0}}f=H+E|0;b=k+24|0;p=0;while(1){if((p|0)<(i1(b)|0)){I=0;J=0}else{K=0;break}do{m=c[jg(b,p)>>2]|0;I=(m|0)==(e[jf(a,g+J|0)>>1]|0|0)|I;J=J+1|0;}while((J|0)<3&(I^1));if(I){K=1;break}else{p=p+1|0}}if((K+f|0)!=(q|0)){B=g;break}i3(h,l);B=c[l>>2]|0}}while(0);p=B+3|0;c[l>>2]=p;if((p|0)<(hU(a)|0)){g=p}else{u=h;break}}v=i1(u)|0;w=k+24|0;i7(w);x=k+12|0;i7(x);y=k|0;i7(y);z=(v|0)>0;i=j;return z|0}function i9(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;m$(a,b,c,d);return}function ja(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=i;i=i+64|0;f=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];f=e|0;g=e+8|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+56|0;c[f>>2]=b;m=a|0;n=a|0;o=0;while(1){if((o|0)>=(iJ(n)|0)){break}if((c[i0(n,o)>>2]|0)==(b|0)){p=1307;break}else{o=o+1|0}}if((p|0)==1307){i=e;return}o=a+12|0;a=h;q=0;while(1){if((q|0)>=(i1(o)|0)){p=1304;break}r=c[jg(o,q)>>2]|0;c[g>>2]=r;s=c[i0(n,r)>>2]|0;t=(i0(n,r)|0)+4|0;c[a>>2]=c[t>>2];c[a+4>>2]=c[t+4>>2];c[a+8>>2]=c[t+8>>2];t=i0(n,r)|0;if((s|0)==(b|0)){p=1308;break}u=t+16|0;jc(j,h,d);if(+jb(j)<1.0e-4){p=1301;break}else{q=q+1|0}}if((p|0)==1301){if((c[u>>2]|0)==-2){c[u>>2]=-1}jd(m,f,d,g);i=e;return}else if((p|0)==1304){c[k>>2]=iJ(n)|0;je(o,k);c[l>>2]=-2;jd(m,f,d,l);i=e;return}else if((p|0)==1308){i=e;return}}function jb(a){a=a|0;var b=0.0,c=0.0,d=0.0;b=+g[my(a,0)>>2];c=+g[my(a,1)>>2];d=+g[my(a,2)>>2];return+(b*b+0.0+c*c+d*d)}function jc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(b,0)>>2];e=d- +g[my(c,0)>>2];g[kP(a,0)>>2]=e;e=+g[my(b,1)>>2];d=e- +g[my(c,1)>>2];g[kP(a,1)>>2]=d;d=+g[my(b,2)>>2];e=d- +g[my(c,2)>>2];g[kP(a,2)>>2]=e;return}function jd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=i;i=i+16|0;g=f|0;h=a+4|0;j=c[h>>2]|0;if((j|0)<(c[a+8>>2]|0)){k=a|0;l=c[k>>2]|0;m=l+(j*20&-1)|0;if((m|0)==0){n=j;o=l}else{c[m>>2]=c[b>>2];n=c[h>>2]|0;o=c[k>>2]|0}m=o+(n*20&-1)+4|0;if((m|0)==0){p=n;q=o}else{o=m;m=d;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];p=c[h>>2]|0;q=c[k>>2]|0}k=q+(p*20&-1)+16|0;if((k|0)==0){r=c[h>>2]|0;s=r+1|0;c[h>>2]=s;i=f;return}c[k>>2]=c[e>>2];r=c[h>>2]|0;s=r+1|0;c[h>>2]=s;i=f;return}else{k=c[b>>2]|0;b=d;d=g;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];b=c[e>>2]|0;mf(a|0,((j*13&-1|0)/8&-1)+8|0);j=c[h>>2]|0;e=a|0;a=c[e>>2]|0;g=a+(j*20&-1)|0;if((g|0)==0){t=j;u=a}else{c[g>>2]=k;t=c[h>>2]|0;u=c[e>>2]|0}k=u+(t*20&-1)+4|0;if((k|0)==0){v=t;w=u}else{u=k;c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];v=c[h>>2]|0;w=c[e>>2]|0}e=w+(v*20&-1)+16|0;if((e|0)==0){r=c[h>>2]|0;s=r+1|0;c[h>>2]=s;i=f;return}c[e>>2]=b;r=c[h>>2]|0;s=r+1|0;c[h>>2]=s;i=f;return}}function je(a,b){a=a|0;b=b|0;i3(a,b);return}function jf(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=128,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if((e|0)>(b|0)|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=129,c[B+16>>2]=2184,B)|0);hY();return 0}return 0}function jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<2)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function jh(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=128,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if((e|0)>(b|0)|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<2)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=129,c[B+16>>2]=2184,B)|0);hY();return 0}return 0}function ji(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0;f=i;i=i+352|0;g=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[g>>2];g=f|0;h=f+16|0;j=f+32|0;k=f+48|0;l=f+64|0;m=f+80|0;n=f+88|0;o=f+104|0;p=f+120|0;q=f+128|0;r=f+144|0;s=f+160|0;t=f+176|0;u=f+192|0;v=f+208|0;w=f+224|0;x=f+232|0;y=f+248|0;z=f+264|0;A=f+280|0;B=f+296|0;C=f+312|0;D=f+328|0;E=f+344|0;iO(g);i5(h);jp(j);jq(k);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);js(l,0.0);c[m>>2]=0;jr(k,l,m);jt(n);jt(o);m=a+24|0;l=jj(m)|0;if((l|0)==0){jP(o);jP(n);jQ(k);jR(j);i7(h);gh(g);i=f;return}if((l|0)<2){F=0}else{F=c[(j2(m,l-2|0)|0)+4>>2]|0}l=a+12|0;G=a|0;H=c[(j3(m)|0)+4>>2]|0;c[p>>2]=F;if((F|0)<(H|0)){I=F;do{J=iC(l,e[iz(G,I)>>1]|0)|0;K=iC(l,e[iz(G,I+1|0)>>1]|0)|0;wP(n,p,J,K,iC(l,e[iz(G,I+2|0)>>1]|0)|0);I=(c[p>>2]|0)+3|0;c[p>>2]=I;}while((I|0)<(H|0))}H=c[(j3(m)|0)+4>>2]|0;I=hU(G)|0;c[p>>2]=H;if((H|0)<(I|0)){K=H;do{H=iC(l,e[iz(G,K)>>1]|0)|0;J=iC(l,e[iz(G,K+1|0)>>1]|0)|0;wP(o,p,H,J,iC(l,e[iz(G,K+2|0)>>1]|0)|0);K=(c[p>>2]|0)+3|0;c[p>>2]=K;}while((K|0)<(I|0))}I=hU(G)|0;K=q|0;p=r|0;J=h|0;H=0;do{L=(H|0)==0;if(L){M=c[(j3(m)|0)+4>>2]|0;N=F}else{M=I;N=c[(j3(m)|0)+4>>2]|0}O=L?o:n;ju(q);jv(r);js(s,0.0);js(t,0.0);fv(u,0.0);fv(v,0.0);jw(K,3);jx(p,3);c[w>>2]=N;if((N|0)<(M|0)){P=(H|0)==1;Q=N;do{R=iC(l,e[iz(G,Q)>>1]|0)|0;S=iC(l,e[iz(G,Q+1|0)>>1]|0)|0;T=w3(O,R,S,iC(l,e[iz(G,Q+2|0)>>1]|0)|0,q,r)|0;S=hU(G)|0;do{if((T|0)==1){je(J,w);R=h1(l)|0;if((jk(K)|0)>3){U=c[w>>2]|0;V=R-3|0;W=3;do{if((c[(j4(K,W)|0)+12>>2]|0)<3){X=e[iz(G,(c[(j4(K,W)|0)+12>>2]|0)+U|0)>>1]|0}else{X=V+(c[(j4(K,W)|0)+12>>2]|0)|0}if((c[(j4(K,W)|0)+16>>2]|0)<3){Y=e[iz(G,(c[(j4(K,W)|0)+16>>2]|0)+U|0)>>1]|0}else{Y=V+(c[(j4(K,W)|0)+16>>2]|0)|0}jy(a,j4(K,W)|0);jz(s,(iC(l,X)|0)+12|0);jz(t,(iC(l,Y)|0)+12|0);jc(A,t,s);jD(z,A,(j4(K,W)|0)+20|0);jC(y,s,z);jB(x,y);jA(a,x);fw(u,(iC(l,X)|0)+24|0);fw(v,(iC(l,Y)|0)+24|0);jF(D,v,u);ig(C,D,(j4(K,W)|0)+20|0);jE(B,u,C);jG(a,B);W=W+1|0;}while((W|0)<(jk(K)|0))}if((jl(p)|0)<=0){break}W=c[w>>2]|0;V=R-3|0;U=0;do{if((c[(j5(p,U)|0)+4>>2]|0)<3){Z=e[iz(G,(c[(j5(p,U)|0)+4>>2]|0)+W|0)>>1]|0}else{Z=V+(c[(j5(p,U)|0)+4>>2]|0)|0}if((c[(j5(p,U)|0)+8>>2]|0)<3){_=e[iz(G,(c[(j5(p,U)|0)+8>>2]|0)+W|0)>>1]|0}else{_=V+(c[(j5(p,U)|0)+8>>2]|0)|0}if((c[(j5(p,U)|0)+12>>2]|0)<3){$=e[iz(G,(c[(j5(p,U)|0)+12>>2]|0)+W|0)>>1]|0}else{$=V+(c[(j5(p,U)|0)+12>>2]|0)|0}jH(a,Z,_,$,0);U=U+1|0;}while((U|0)<(jl(p)|0))}}while(0);do{if((T|0)>-1){U=jl(p)|0;if((U|0)<=0){break}V=c[w>>2]|0;W=0;R=U;do{if((R|0)==1){aa=V}else{aa=(W*3&-1)+S|0}c[E>>2]=aa;if((jm(d)|0)==0){if((c[j5(p,W)>>2]|0)==0){ab=1464}else{ab=1449}}else{ab=1449}L1550:do{if((ab|0)==1449){ab=0;do{if((jm(d)|0)==1){if(L){if((c[j5(p,W)>>2]|0)==0){ab=1464;break L1550}}if(!P){break}if((c[j5(p,W)>>2]|0)==1){ab=1464;break L1550}}}while(0);do{if((jm(d)|0)==2){if(!L){if(P){ab=1464;break L1550}else{break}}if((c[j5(p,W)>>2]|0)==0){ab=1464;break L1550}}}while(0);if((jm(d)|0)!=3){break}if((c[j5(p,W)>>2]|0)==1){ab=1464}}}while(0);if((ab|0)==1464){ab=0;je(J,E)}if((jm(d)|0)==1&P){if((c[j5(p,W)>>2]|0)==0){ab=1471}else{ab=1468}}else{ab=1468}do{if((ab|0)==1468){ab=0;if((jm(d)|0)!=4){break}if((c[j5(p,W)>>2]|0)==0){ab=1471}}}while(0);if((ab|0)==1471){ab=0;U=(jm(d)|0)==4;ac=c[E>>2]|0;if(U){jI(a,e[iz(G,ac)>>1]|0);U=h1(l)|0;b[iz(G,ac)>>1]=U+65535&65535;U=ac+1|0;jI(a,e[iz(G,U)>>1]|0);ad=h1(l)|0;b[iz(G,U)>>1]=ad+65535&65535;ad=ac+2|0;jI(a,e[iz(G,ad)>>1]|0);U=h1(l)|0;b[iz(G,ad)>>1]=U+65535&65535}U=ac+2|0;ad=b[iz(G,U)>>1]|0;ae=ac+1|0;af=iz(G,ae)|0;b[af>>1]=(b[af>>1]|0)+ad&65535;ad=b[iz(G,ae)>>1]|0;af=b[iz(G,U)>>1]|0;b[iz(G,U)>>1]=ad-af&65535;af=b[iz(G,ae)>>1]|0;ad=b[iz(G,U)>>1]|0;b[iz(G,ae)>>1]=af-ad&65535;jJ(a,ac,3)}W=W+1|0;R=jl(p)|0;}while((W|0)<(R|0))}}while(0);jK(K);jL(p);Q=(c[w>>2]|0)+3|0;c[w>>2]=Q;}while((Q|0)<(M|0))}jM(r);jN(q);H=H+1|0;}while((H|0)<2);if((h1(l)|0)>0){H=0;while(1){iC(l,H);q=H+1|0;if((q|0)<(h1(l)|0)){H=q}else{ag=1;ah=0;break}}}else{ag=1;ah=0}do{if((ah|0)>=((i1(J)|0)-1|0)){break}H=c[jg(J,ah)>>2]|0;q=ah+1|0;r=(H|0)<(c[jg(J,q)>>2]|0)&(ag|0)<0?1:ag;H=c[jg(J,ah)>>2]|0;if((H|0)==(c[jg(J,q)>>2]|0)){j6(J,ah,1);ai=-1}else{ai=r}r=c[jg(J,ah)>>2]|0;if((r|0)>(c[jg(J,q)>>2]|0)){r=c[jg(J,q)>>2]|0;H=jg(J,ah)|0;c[H>>2]=(c[H>>2]|0)+r;r=c[jg(J,ah)>>2]|0;H=c[jg(J,q)>>2]|0;c[jg(J,q)>>2]=r-H;H=c[jg(J,ah)>>2]|0;r=c[jg(J,q)>>2]|0;c[jg(J,ah)>>2]=H-r;aj=-1}else{aj=ai}ag=(ah|0)==0&(aj|0)==-1?1:aj;ah=ag+ah|0;}while((ah|0)>-1);ah=i1(J)|0;while(1){ag=ah-1|0;if((ah|0)<=0){break}j7(G,c[jg(J,ag)>>2]|0,3);ah=ag}ah=h1(l)|0;c[j3(m)>>2]=ah;ah=hU(G)|0;c[(j3(m)|0)+4>>2]=ah;jP(o);jP(n);jQ(k);jR(j);i7(h);gh(g);i=f;return}function jj(a){a=a|0;return c[a+4>>2]|0}function jk(a){a=a|0;return c[a+4>>2]|0}function jl(a){a=a|0;return c[a+4>>2]|0}function jm(a){a=a|0;return c[a>>2]|0}function jn(a){a=a|0;return a|0}function jo(a){a=a|0;return a+16|0}function jp(a){a=a|0;on(a);return}function jq(a){a=a|0;om(a);return}function jr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;i=i+16|0;f=e|0;g=a+4|0;h=c[g>>2]|0;if((h|0)<(c[a+8>>2]|0)){j=a|0;k=c[j>>2]|0;l=k+(h<<4)|0;if((l|0)==0){m=h;n=k}else{k=l;l=b;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];m=c[g>>2]|0;n=c[j>>2]|0}j=n+(m<<4)+12|0;if((j|0)==0){o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}c[j>>2]=c[d>>2];o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}else{j=b;b=f;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];j=c[d>>2]|0;me(a|0,((h*13&-1|0)/8&-1)+8|0);h=c[g>>2]|0;d=a|0;a=c[d>>2]|0;f=a+(h<<4)|0;if((f|0)==0){q=h;r=a}else{a=f;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];q=c[g>>2]|0;r=c[d>>2]|0}d=r+(q<<4)+12|0;if((d|0)==0){o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}c[d>>2]=j;o=c[g>>2]|0;p=o+1|0;c[g>>2]=p;i=e;return}}function js(a,b){a=a|0;b=+b;m_(a,b);return}function jt(a){a=a|0;oj(a);return}function ju(a){a=a|0;oi(a);return}function jv(a){a=a|0;oh(a);return}function jw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*24&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*24&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*24&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];c[i+20>>2]=c[h+20>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function jx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<4)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<4)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a<<4)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function jy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;d=i;i=i+184|0;e=d|0;f=d+88|0;g=d+104|0;h=d+120|0;j=d+136|0;k=d+152|0;l=d+168|0;m=f;n=b;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];eT(g,0.0,1.0,0.0);n=h;m=jn(jT(a)|0)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];fv(j,0.0);j_(k,0);fv(l,0.0);jZ(e,f,g,h,j,k,l);jY(a+12|0,e);i=d;return}function jz(a,b){a=a|0;b=b|0;var c=0.0;c=+g[my(b,0)>>2];g[kP(a,0)>>2]=c;c=+g[my(b,1)>>2];g[kP(a,1)>>2]=c;c=+g[my(b,2)>>2];g[kP(a,2)>>2]=c;return a|0}function jA(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;jz((iC(c,(h1(c)|0)-1|0)|0)+12|0,b);return}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0;c=i;i=i+16|0;d=c|0;e=c+8|0;f=+jO(b);g[d>>2]=f;if(f!=0.0){lU(a,b,d);i=c;return}else{g[e>>2]=0.0;jD(a,b,e);i=c;return}}function jC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(b,0)>>2];e=d+ +g[my(c,0)>>2];g[kP(a,0)>>2]=e;e=+g[my(b,1)>>2];d=e+ +g[my(c,1)>>2];g[kP(a,1)>>2]=d;d=+g[my(b,2)>>2];e=d+ +g[my(c,2)>>2];g[kP(a,2)>>2]=e;return}function jD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(b,0)>>2];e=d*+g[c>>2];g[kP(a,0)>>2]=e;e=+g[my(b,1)>>2];d=e*+g[c>>2];g[kP(a,1)>>2]=d;d=+g[my(b,2)>>2];e=d*+g[c>>2];g[kP(a,2)>>2]=e;return}function jE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fK(b,0)>>2];e=d+ +g[fK(c,0)>>2];g[fL(a,0)>>2]=e;e=+g[fK(b,1)>>2];d=e+ +g[fK(c,1)>>2];g[fL(a,1)>>2]=d;d=+g[fK(b,2)>>2];e=d+ +g[fK(c,2)>>2];g[fL(a,2)>>2]=e;e=+g[fK(b,3)>>2];d=e+ +g[fK(c,3)>>2];g[fL(a,3)>>2]=d;return}function jF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fK(b,0)>>2];e=d- +g[fK(c,0)>>2];g[fL(a,0)>>2]=e;e=+g[fK(b,1)>>2];d=e- +g[fK(c,1)>>2];g[fL(a,1)>>2]=d;d=+g[fK(b,2)>>2];e=d- +g[fK(c,2)>>2];g[fL(a,2)>>2]=e;e=+g[fK(b,3)>>2];d=e- +g[fK(c,3)>>2];g[fL(a,3)>>2]=d;return}function jG(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;fw((iC(c,(h1(c)|0)-1|0)|0)+24|0,b);return}function jH(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;g=i;i=i+24|0;h=g|0;j=g+8|0;k=g+16|0;l=a|0;b[h>>1]=f+c&65535;hX(l,h);b[j>>1]=f+d&65535;hX(l,j);b[k>>1]=f+e&65535;hX(l,k);i=g;return}function jI(a,b){a=a|0;b=b|0;var c=0;c=a+12|0;j$(c,iC(c,b)|0);return}function jJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=i;i=i+64|0;f=d|0;h=d+16|0;j=d+32|0;k=d+48|0;if((c|0)<=0){i=d;return}l=a+12|0;m=a|0;a=h|0;n=h+4|0;o=h+8|0;p=f|0;q=f+4|0;r=f+8|0;s=0;do{t=s+b|0;u=t+2|0;v=iC(l,e[iz(m,u)>>1]|0)|0;jc(f,v,iC(l,e[iz(m,t)>>1]|0)|0);v=t+1|0;w=iC(l,e[iz(m,v)>>1]|0)|0;jc(h,w,iC(l,e[iz(m,t)>>1]|0)|0);ke(k,+g[a>>2],+g[n>>2],+g[o>>2],+g[p>>2],+g[q>>2],+g[r>>2]);jB(j,k);jz((iC(l,e[iz(m,t)>>1]|0)|0)+12|0,j);jz((iC(l,e[iz(m,v)>>1]|0)|0)+12|0,j);jz((iC(l,e[iz(m,u)>>1]|0)|0)+12|0,j);s=s+3|0;}while((s|0)<(c|0));i=d;return}function jK(a){a=a|0;mv(a,0,c[a+4>>2]|0);return}function jL(a){a=a|0;mu(a,0,c[a+4>>2]|0);return}function jM(a){a=a|0;of(a);return}function jN(a){a=a|0;od(a);return}function jO(a){a=a|0;return+(+oc(+jb(a)))}function jP(a){a=a|0;n3(a);return}function jQ(a){a=a|0;n1(a);return}function jR(a){a=a|0;nW(a);return}function jS(a){a=a|0;var b=0,c=0,d=0;b=i;i=i+8|0;c=b|0;d=jT(a)|0;jV(c,1);jU(d,c);i=b;return}function jT(a){a=a|0;var b=0,d=0;b=a+72|0;a=c[b>>2]|0;if((a|0)!=0){d=a;return d|0}a=Zc(420)|0;nS(a);c[b>>2]=a;d=a;return d|0}function jU(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[e>>2];e=ni(b)|0;b=a+416|0;c[b>>2]=c[b>>2]^e;i=d;return}function jV(a,b){a=a|0;b=b|0;nn(a,b);return}function jW(a,b){a=a|0;b=b|0;fw(jn(jT(a)|0)|0,b);return}function jX(a,b){a=a|0;b=b|0;fw(jo(jT(a)|0)|0,b);return}function jY(a,b){a=a|0;b=b|0;j$(a,b);return}function jZ(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0;j=i;k=b;b=i;i=i+12|0;i=i+7>>3<<3;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];k=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];k=e;e=i;i=i+16|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];k=f;f=i;i=i+16|0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];c[f+8>>2]=c[k+8>>2];c[f+12>>2]=c[k+12>>2];k=g;g=i;i=i+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];k=h;h=i;i=i+16|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];nQ(a,b,d,e,f,g,h);i=j;return}function j_(a,b){a=a|0;b=b|0;l7(a,b);return}function j$(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+88|0;e=d|0;f=a+4|0;g=c[f>>2]|0;if((g|0)<(c[a+8>>2]|0)){c[f>>2]=g+1;h=(c[a>>2]|0)+(g*88&-1)|0;if((h|0)==0){i=d;return a|0}Zp(h|0,b|0,88);i=d;return a|0}else{h=e;Zp(h|0,b|0,88);l6(a,((g*13&-1|0)/8&-1)+8|0);g=c[f>>2]|0;c[f>>2]=g+1;f=(c[a>>2]|0)+(g*88&-1)|0;if((f|0)==0){i=d;return a|0}Zp(f|0,h|0,88);i=d;return a|0}return 0}function j0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=i;i=i+184|0;g=f|0;h=f+88|0;j=f+104|0;k=f+120|0;l=f+136|0;m=f+152|0;n=f+168|0;o=a+12|0;a=iC(o,b)|0;j1(h,a,iC(o,d)|0,e);a=(iC(o,b)|0)+12|0;j1(j,a,(iC(o,d)|0)+12|0,e);a=(iC(o,b)|0)+24|0;ka(k,a,(iC(o,d)|0)+24|0,e);a=(iC(o,b)|0)+40|0;ka(l,a,(iC(o,d)|0)+40|0,e);if(e<.5){p=iC(o,b)|0}else{p=iC(o,d)|0}a=m;q=p+56|0;c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];q=(iC(o,b)|0)+72|0;ka(n,q,(iC(o,d)|0)+72|0,e);jZ(g,h,j,k,l,m,n);jY(o,g);i=f;return}function j1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;e=+g[my(b,0)>>2];f=e+(+g[my(c,0)>>2]-e)*d;g[kP(a,0)>>2]=f;f=+g[my(b,1)>>2];e=f+(+g[my(c,1)>>2]-f)*d;g[kP(a,1)>>2]=e;e=+g[my(b,2)>>2];f=e+(+g[my(c,2)>>2]-e)*d;g[kP(a,2)>>2]=f;return}function j2(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<3)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function j3(a){a=a|0;var b=0;b=c[a+4>>2]|0;if((b|0)>0){i=i;return(c[a>>2]|0)+(b-1<<3)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=135,c[B+16>>2]=9264,B)|0);hY();return 0}return 0}function j4(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*24&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function j5(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<4)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function j6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;c[f+(a<<2)>>2]=c[f+(b<<2)>>2];f=a+1|0;l=f+d|0;m=c[g>>2]|0;if((l|0)<(m|0)){a=f;b=l}else{j=m;break}}k=j-d|0;c[g>>2]=k;i=e;return}function j7(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((e|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}g=e+d|0;h=a+4|0;j=c[h>>2]|0;if((g|0)>(j|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((g|0)>=(j|0)){k=j;l=k-e|0;c[h>>2]=l;i=f;return}j=a|0;a=d;d=g;while(1){g=c[j>>2]|0;b[g+(a<<1)>>1]=b[g+(d<<1)>>1]|0;g=a+1|0;m=g+e|0;n=c[h>>2]|0;if((m|0)<(n|0)){a=g;d=m}else{k=n;break}}l=k-e|0;c[h>>2]=l;i=f;return}function j8(a){a=a|0;return a+32|0}function j9(a){a=a|0;return a+48|0}function ka(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;e=+g[fK(b,0)>>2];f=e+(+g[fK(c,0)>>2]-e)*d;g[fL(a,0)>>2]=f;f=+g[fK(b,1)>>2];e=f+(+g[fK(c,1)>>2]-f)*d;g[fL(a,1)>>2]=e;e=+g[fK(b,2)>>2];f=e+(+g[fK(c,2)>>2]-e)*d;g[fL(a,2)>>2]=f;f=+g[fK(b,3)>>2];e=f+(+g[fK(c,3)>>2]-f)*d;g[fL(a,3)>>2]=e;return}function kb(a,c,d,e,f,g){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=i;i=i+48|0;j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=h+40|0;p=a|0;a=g+c&65535;b[j>>1]=a;hX(p,j);b[k>>1]=g+d&65535;hX(p,k);k=g+e&65535;b[l>>1]=k;hX(p,l);b[m>>1]=g+f&65535;hX(p,m);b[n>>1]=a;hX(p,n);b[o>>1]=k;hX(p,o);i=h;return}function kc(a,c,d,e,f,g){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=i;i=i+48|0;j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=h+40|0;p=a|0;q=a+12|0;b[j>>1]=h1(q)&65535;hX(p,j);j=g+c|0;jI(a,j);b[k>>1]=h1(q)&65535;hX(p,k);jI(a,g+d|0);b[l>>1]=h1(q)&65535;hX(p,l);l=g+e|0;jI(a,l);b[m>>1]=h1(q)&65535;hX(p,m);jI(a,g+f|0);b[n>>1]=h1(q)&65535;hX(p,n);jI(a,j);b[o>>1]=h1(q)&65535;hX(p,o);jI(a,l);i=h;return}function kd(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;g=i;i=i+24|0;h=g|0;j=g+8|0;k=g+16|0;l=a|0;m=a+12|0;b[h>>1]=h1(m)&65535;hX(l,h);jI(a,f+c|0);b[j>>1]=h1(m)&65535;hX(l,j);jI(a,f+d|0);b[k>>1]=h1(m)&65535;hX(l,k);jI(a,f+e|0);i=g;return}function ke(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;eT(a,c*g-d*f,d*e-b*g,b*f-c*e);return}function kf(a,b,c){a=a|0;b=b|0;c=c|0;fA(j8(jT(a)|0)|0,b);fA(j9(jT(a)|0)|0,c);return}function kg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+24|0;e=d|0;f=d+16|0;g=i;i=i+8|0;h=a+12|0;a=(iC(h,(h1(h)|0)-1|0)|0)+40|0;j=b;b=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=b;ki(g,(iC(h,(h1(h)|0)-1|0)|0)+40|0);kh(e,f,g);fw(a,e);i=d;return}function kh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;f=b;b=i;i=i+8|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];f=d;d=i;i=i+8|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];l4(a,b,d);i=e;return}function ki(a,b){a=a|0;b=b|0;l5(a,b);return}function kj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+32|0;e=d|0;f=d+16|0;g=d+24|0;h=a+12|0;a=(iC(h,(h1(h)|0)-1|0)|0)+40|0;ir(f,(iC(h,(h1(h)|0)-1|0)|0)+40|0);h=b;b=c[h+4>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;kh(e,f,g);fw(a,e);i=d;return}function kk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;e=d|0;f=c[j3(a+24|0)>>2]|0;g=a+12|0;if((f|0)<(h1(g)|0)){h=f}else{i=d;return}do{kl(e,iC(g,h)|0,b);h=h+1|0;}while((h|0)<(h1(g)|0));i=d;return}function kl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e|0;jC(f,b,d);d=a;a=jz(b,f)|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];i=e;return}function km(a,b){a=a|0;b=+b;var c=0,d=0;c=i;i=i+16|0;d=c|0;eT(d,1.0,0.0,0.0);kn(a,b,d);i=c;return}function kn(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;i=i+120|0;f=e|0;g=e+40|0;h=e+56|0;j=e+72|0;k=e+88|0;l=e+104|0;m=g;n=d;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];uZ(f,b,g);g=c[j3(a+24|0)>>2]|0;n=a+12|0;if((g|0)>=(h1(n)|0)){i=e;return}a=j;m=l;d=g;do{g=iC(n,d)|0;o=iC(n,d)|0;c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];kq(h,f,j);jz(g,h);g=(iC(n,d)|0)+12|0;o=(iC(n,d)|0)+12|0;c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];kq(k,f,l);jz(g,k);d=d+1|0;}while((d|0)<(h1(n)|0));i=e;return}function ko(a,b){a=a|0;b=+b;var c=0,d=0;c=i;i=i+16|0;d=c|0;eT(d,0.0,1.0,0.0);kn(a,b,d);i=c;return}function kp(a,b){a=a|0;b=+b;var c=0,d=0;c=i;i=i+16|0;d=c|0;eT(d,0.0,0.0,1.0);kn(a,b,d);i=c;return}function kq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,j=0,k=0.0,l=0,m=0,n=0.0,o=0;e=i;f=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];f=lM(b,0)|0;h=+g[my(f,0)>>2];j=my(d,0)|0;k=h*+g[j>>2]+0.0;l=lM(b,1)|0;h=+g[my(l,0)>>2];m=my(d,1)|0;n=k+h*+g[m>>2];o=lM(b,2)|0;h=+g[my(o,0)>>2];b=my(d,2)|0;k=n+h*+g[b>>2];g[kP(a,0)>>2]=k;k=+g[my(f,1)>>2];h=k*+g[j>>2]+0.0;k=+g[my(l,1)>>2];n=h+k*+g[m>>2];k=+g[my(o,1)>>2];h=n+k*+g[b>>2];g[kP(a,1)>>2]=h;h=+g[my(f,2)>>2];k=h*+g[j>>2]+0.0;h=+g[my(l,2)>>2];n=k+h*+g[m>>2];h=+g[my(o,2)>>2];k=n+h*+g[b>>2];g[kP(a,2)>>2]=k;i=e;return}function kr(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0;d=i;i=i+80|0;e=d|0;f=d+16|0;h=d+24|0;j=d+32|0;k=d+48|0;l=d+56|0;m=d+64|0;i5(e);n=e|0;c[f>>2]=-1;je(n,f);f=a+24|0;o=(c[j3(f)>>2]|0)+1|0;p=a+12|0;if((o|0)<(h1(p)|0)){q=j|0;r=j+4|0;s=j+8|0;t=o;do{o=c[j3(f)>>2]|0;c[h>>2]=o;L1862:do{if((o|0)<(t|0)){u=0;v=o;while(1){do{if((c[jg(n,u)>>2]|0)<0){w=iC(p,t)|0;jc(j,w|0,iC(p,v)|0);x=+g[q>>2];if(x>.10000000149011612|x<-.10000000149011612){break}x=+g[r>>2];if(x>.10000000149011612|x<-.10000000149011612){break}x=+g[s>>2];if(!(x>.10000000149011612|x<-.10000000149011612)){y=v;break L1862}}}while(0);w=v+1|0;c[h>>2]=w;if((w|0)<(t|0)){u=u+1|0;v=w}else{y=w;break}}}else{y=o}}while(0);if((y|0)==(t|0)){c[k>>2]=-1;je(n,k)}else{je(n,h)}t=t+1|0;}while((t|0)<(h1(p)|0))}t=c[j3(f)>>2]|0;if((t|0)<(h1(p)|0)){h=t;t=0;while(1){if((c[jg(n,t)>>2]|0)==-1){k=iC(p,h)|0;g[l>>2]=+kt(b)+1.0;ks(m,k|0,l)}else{k=iC(p,h)|0;y=iC(p,c[jg(n,t)>>2]|0)|0;jz(k,y)}y=h+1|0;if((y|0)<(h1(p)|0)){h=y;t=t+1|0}else{break}}}t=c[(j3(f)|0)+4>>2]|0;h=hU(a|0)|0;jJ(a,t,h-(c[(j3(f)|0)+4>>2]|0)|0);i7(e);i=d;return}function ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e|0;jD(f,b,d);d=a;a=jz(b,f)|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];i=e;return}function kt(a){a=+a;return+(+(cm()|0)*4.656612873077393e-10*a)}function ku(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;kw(g,0);kx(h,0);kx(j,0);kv(a,g,h,j,b,c,d,e);i=f;return}function kv(a,b,d,e,f,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;j=+j;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0,T=0.0;l=i;i=i+208|0;m=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[m>>2];m=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[m>>2];m=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[m>>2];m=l|0;n=l+16|0;o=l+32|0;p=l+48|0;q=l+88|0;r=l+104|0;s=l+120|0;t=l+136|0;u=l+152|0;v=l+192|0;w=a+24|0;x=c[j3(w)>>2]|0;y=a+12|0;if((x|0)>=(h1(y)|0)){z=j3(w)|0;A=z+4|0;B=c[A>>2]|0;C=a|0;D=hU(C)|0;E=j3(w)|0;F=E+4|0;G=c[F>>2]|0;H=D-G|0;jJ(a,B,H);i=l;return}I=(k|0)==0;k=o;J=m;K=q;L=t;M=r;N=v;O=x;do{x=kO(b)|0;if((x|0)==1){js(m,1.0);g[kP(m,((kQ(d)|0)+1|0)%3&-1)>>2]=0.0;g[kP(m,((kQ(d)|0)+2|0)%3&-1)>>2]=0.0;P=iC(y,O)|0;Q=iC(y,O)|0;R=+g[kP(Q,kQ(d)|0)>>2]*f+j;c[k>>2]=c[J>>2];c[k+4>>2]=c[J+4>>2];c[k+8>>2]=c[J+8>>2];uZ(p,R,o);Q=iC(y,O)|0;c[K>>2]=c[Q>>2];c[K+4>>2]=c[Q+4>>2];c[K+8>>2]=c[Q+8>>2];kq(n,p,q);jz(P,n)}else if((x|0)==0){P=iC(y,O)|0;R=+g[kP(P,kQ(d)|0)>>2];if(I){S=R}else{S=+kT(R)}R=+kN(0.0,S*f+j+1.0);P=iC(y,O)|0;Q=kP(P,((kQ(d)|0)+1|0)%3&-1)|0;g[Q>>2]=R*+g[Q>>2];R=+kN(0.0,S*h+j+1.0);Q=iC(y,O)|0;P=kP(Q,((kQ(d)|0)+2|0)%3&-1)|0;g[P>>2]=R*+g[P>>2]}else if((x|0)==4){P=iC(y,O)|0;R=+g[kP(P,kQ(d)|0)>>2];if(I){T=R}else{T=+kT(R)}P=iC(y,O)|0;Q=kP(P,((kQ(d)|0)+1|0)%3&-1)|0;g[Q>>2]=T*f+j+ +g[Q>>2];Q=iC(y,O)|0;P=kP(Q,((kQ(d)|0)+2|0)%3&-1)|0;g[P>>2]=T*h+j+ +g[P>>2]}else if((x|0)==2){js(r,1.0);g[kP(r,((kQ(e)|0)+1|0)%3&-1)>>2]=0.0;g[kP(r,((kQ(e)|0)+2|0)%3&-1)>>2]=0.0;x=iC(y,O)|0;P=iC(y,O)|0;R=+g[kP(P,kQ(d)|0)>>2]*f+j;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];uZ(u,R,t);P=iC(y,O)|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];kq(s,u,v);jz(x,s)}O=O+1|0;}while((O|0)<(h1(y)|0));z=j3(w)|0;A=z+4|0;B=c[A>>2]|0;C=a|0;D=hU(C)|0;E=j3(w)|0;F=E+4|0;G=c[F>>2]|0;H=D-G|0;jJ(a,B,H);i=l;return}function kw(a,b){a=a|0;b=b|0;nk(a,b);return}function kx(a,b){a=a|0;b=b|0;nj(a,b);return}function ky(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;kw(g,0);kx(h,1);kx(j,1);kv(a,g,h,j,c,b,d,e);i=f;return}function kz(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;kw(g,0);kx(h,2);kx(j,2);kv(a,g,h,j,b,c,d,e);i=f;return}function kA(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,1);kx(f,0);kx(g,0);kv(a,e,f,g,b,b,c,0);i=d;return}function kB(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,1);kx(f,1);kx(g,1);kv(a,e,f,g,b,b,c,0);i=d;return}function kC(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,1);kx(f,2);kx(g,2);kv(a,e,f,g,b,b,c,0);i=d;return}function kD(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;kw(g,4);kx(h,0);kx(j,0);kv(a,g,h,j,b,c,d,e);i=f;return}function kE(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;kw(g,4);kx(h,1);kx(j,1);kv(a,g,h,j,c,b,d,e);i=f;return}function kF(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=f+8|0;j=f+16|0;kw(g,4);kx(h,2);kx(j,2);kv(a,g,h,j,b,c,d,e);i=f;return}function kG(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,g=0,h=0;e=i;i=i+24|0;f=e|0;g=e+8|0;h=e+16|0;kw(f,3);kx(g,0);kx(h,0);kv(a,f,g,h,b,c,d,0);i=e;return}function kH(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,g=0,h=0;e=i;i=i+24|0;f=e|0;g=e+8|0;h=e+16|0;kw(f,3);kx(g,1);kx(h,1);kv(a,f,g,h,c,b,d,0);i=e;return}function kI(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,g=0,h=0;e=i;i=i+24|0;f=e|0;g=e+8|0;h=e+16|0;kw(f,3);kx(g,2);kx(h,2);kv(a,f,g,h,b,c,d,0);i=e;return}function kJ(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,2);kx(f,0);kx(g,1);kv(a,e,f,g,b,b,c,0);i=d;return}function kK(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,2);kx(f,0);kx(g,2);kv(a,e,f,g,b,b,c,0);i=d;return}function kL(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,2);kx(f,1);kx(g,0);kv(a,e,f,g,b,b,c,0);i=d;return}function kM(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,2);kx(f,1);kx(g,2);kv(a,e,f,g,b,b,c,0);i=d;return}function kN(a,b){a=+a;b=+b;return+(a<b?b:a)}function kO(a){a=a|0;return c[a>>2]|0}function kP(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function kQ(a){a=a|0;return c[a>>2]|0}function kR(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,2);kx(f,2);kx(g,0);kv(a,e,f,g,b,b,c,0);i=d;return}function kS(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0,g=0;d=i;i=i+24|0;e=d|0;f=d+8|0;g=d+16|0;kw(e,2);kx(f,2);kx(g,1);kv(a,e,f,g,b,b,c,0);i=d;return}function kT(a){a=+a;return+(+V(+a))}function kU(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=i;i=i+88|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+64|0;m=e+80|0;js(h,1.0);kV(f,h,d);h=a+24|0;n=c[j3(h)>>2]|0;o=a+12|0;if((n|0)<(h1(o)|0)){p=n;do{kW(j,iC(o,p)|0,d);n=(iC(o,p)|0)+12|0;kX(l,(iC(o,p)|0)+12|0,f);jB(k,l);jz(n,k);p=p+1|0;}while((p|0)<(h1(o)|0))}o=jT(a)|0;jV(m,1);if(kY(o,m)|0){i=e;return}if(+g[d>>2]*+g[d+4>>2]*+g[d+8>>2]>=0.0){i=e;return}d=c[(j3(h)|0)+4>>2]|0;h=a|0;if((d|0)<(hU(h)|0)){q=d}else{i=e;return}do{d=b[iz(h,q)>>1]|0;a=q+1|0;m=b[iz(h,a)>>1]|0;b[iz(h,q)>>1]=m;b[iz(h,a)>>1]=d;q=q+3|0;}while((q|0)<(hU(h)|0));i=e;return}function kV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(b,0)>>2];e=d/+g[my(c,0)>>2];g[kP(a,0)>>2]=e;e=+g[my(b,1)>>2];d=e/+g[my(c,1)>>2];g[kP(a,1)>>2]=d;d=+g[my(b,2)>>2];e=d/+g[my(c,2)>>2];g[kP(a,2)>>2]=e;return}function kW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e|0;kX(f,b,d);d=a;a=jz(b,f)|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];i=e;return}function kX(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(b,0)>>2];e=d*+g[my(c,0)>>2];g[kP(a,0)>>2]=e;e=+g[my(b,1)>>2];d=e*+g[my(c,1)>>2];g[kP(a,1)>>2]=d;d=+g[my(b,2)>>2];e=d*+g[my(c,2)>>2];g[kP(a,2)>>2]=e;return}function kY(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[e>>2];e=c[a+416>>2]|0;a=(ni(b)&e|0)!=0;i=d;return a|0}function kZ(a){a=a|0;var b=0,c=0;b=i;i=i+16|0;c=b|0;eT(c,-1.0,1.0,1.0);k_(a,c);i=b;return}function k_(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;f=i;i=i+8|0;g=f|0;h=h1(a+12|0)|0;j=a+24|0;k=h-(c[j3(j)>>2]|0)|0;h=a|0;l=hU(h)|0;m=l-(c[(j3(j)|0)+4>>2]|0)|0;if((k|0)>0){l=0;do{n=j3(j)|0;o=c[n>>2]|0;c[n>>2]=o+1;jI(a,o);l=l+1|0;}while((l|0)<(k|0))}if((m|0)>0){l=0;do{o=(j3(j)|0)+4|0;n=c[o>>2]|0;c[o>>2]=n+1;b[g>>1]=(e[iz(h,n)>>1]|0)+k&65535;hX(h,g);l=l+1|0;}while((l|0)<(m|0))}kU(a,d);d=j3(j)|0;c[d>>2]=(c[d>>2]|0)-k;k=(j3(j)|0)+4|0;c[k>>2]=(c[k>>2]|0)-m;i=f;return}function k$(a){a=a|0;var b=0,c=0;b=i;i=i+16|0;c=b|0;eT(c,1.0,-1.0,1.0);k_(a,c);i=b;return}function k0(a){a=a|0;var b=0,c=0;b=i;i=i+16|0;c=b|0;eT(c,1.0,1.0,-1.0);k_(a,c);i=b;return}function k1(a,b,d,e,f,h,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0.0,W=0.0,X=0,Y=0,Z=0.0,_=0.0,$=0;l=i;i=i+40|0;m=l|0;n=l+16|0;o=l+32|0;p=o;q=i;i=i+8|0;r=q;s=i;i=i+36|0;i=i+7>>3<<3;t=i;i=i+12|0;i=i+7>>3<<3;u=i;i=i+12|0;i=i+7>>3<<3;v=i;i=i+12|0;i=i+7>>3<<3;w=i;i=i+8|0;x=i;i=i+8|0;y=i;i=i+8|0;z=i;i=i+8|0;A=i;i=i+8|0;B=i;i=i+12|0;i=i+7>>3<<3;C=i;i=i+12|0;i=i+7>>3<<3;D=i;i=i+12|0;i=i+7>>3<<3;E=i;i=i+36|0;i=i+7>>3<<3;F=i;i=i+12|0;i=i+7>>3<<3;G=i;i=i+12|0;i=i+7>>3<<3;H=i;i=i+12|0;i=i+7>>3<<3;I=i;i=i+12|0;i=i+7>>3<<3;J=i;i=i+8|0;K=i;i=i+12|0;i=i+7>>3<<3;L=i;i=i+12|0;i=i+7>>3<<3;M=i;i=i+8|0;N=i;i=i+12|0;i=i+7>>3<<3;O=i;i=i+12|0;i=i+7>>3<<3;P=i;i=i+8|0;Q=i;i=i+8|0;R=i;i=i+12|0;i=i+7>>3<<3;S=i;i=i+8|0;T=i;i=i+8|0;U=i;i=i+12|0;i=i+7>>3<<3;V=e*.5;W=f*.5;X=m;Y=jn(jT(a)|0)|0;c[X>>2]=c[Y>>2];c[X+4>>2]=c[Y+4>>2];c[X+8>>2]=c[Y+8>>2];c[X+12>>2]=c[Y+12>>2];Y=n;X=jo(jT(a)|0)|0;c[Y>>2]=c[X>>2];c[Y+4>>2]=c[X+4>>2];c[Y+8>>2]=c[X+8>>2];c[Y+12>>2]=c[X+12>>2];X=j8(jT(a)|0)|0;Y=c[X+4>>2]|0;c[o>>2]=c[X>>2];c[o+4>>2]=Y;Y=j9(jT(a)|0)|0;o=c[Y+4>>2]|0;c[q>>2]=c[Y>>2];c[q+4>>2]=o;o=h1(a+12|0)|0;Z=+(b|0);uY(s,360.0/Z,0.0,1.0,0.0);eT(t,V,d*-.5,0.0);_=d*.5;eT(u,W,_,0.0);eW(w,0.0,0.0);eW(x,0.0,1.0);eW(y,1.0/Z,0.0);q=(k|0)!=0;if(q){k2(z,0.0);eW(A,1.0,.5);kf(a,z,A)}if(W!=0.0){eT(B,W,_,0.0);jz(v,B)}else{eT(C,V,_,0.0);jz(v,C)}g[v+4>>2]=V*(V-W)/d;C=(j|0)!=0;if(!C){uY(E,180.0/Z,0.0,1.0,0.0);j=F;B=v;c[j>>2]=c[B>>2];c[j+4>>2]=c[B+4>>2];c[j+8>>2]=c[B+8>>2];kq(D,E,F);jz(v,D)}jB(G,v);jz(v,G);if((b|0)>0){G=(h|0)==0;h=I;D=t;F=L;E=u;B=O;j=v;A=0;do{jy(a,t);jA(a,v);kg(a,w);kj(a,w);jy(a,u);jA(a,v);kg(a,x);kj(a,x);jG(a,jo(jT(a)|0)|0);if(C){z=A+1|0;k=(z|0)==(b|0)?0:z<<1;z=k|1;Y=A<<1;X=Y|1;kb(a,k,z,X,Y,o);if(!G){kb(a,Y,X,z,k,o)}c[h>>2]=c[D>>2];c[h+4>>2]=c[D+4>>2];c[h+8>>2]=c[D+8>>2];kq(H,s,I);jz(t,H);k3(J,w,y);c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];kq(K,s,L);jz(u,K);k3(M,x,y);if(!C){$=1853}}else{c[h>>2]=c[D>>2];c[h+4>>2]=c[D+4>>2];c[h+8>>2]=c[D+8>>2];kq(H,s,I);jz(t,H);k3(J,w,y);c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];kq(K,s,L);jz(u,K);k3(M,x,y);$=1853}do{if(($|0)==1853){$=0;jy(a,t);jA(a,v);kg(a,w);kj(a,w);jy(a,u);jA(a,v);kg(a,x);kj(a,x);jG(a,jo(jT(a)|0)|0);k=A<<2;z=k|2;X=k|3;Y=k|1;kb(a,z,X,Y,k,o);if(G){break}kb(a,k,Y,X,z,o)}}while(0);c[B>>2]=c[j>>2];c[B+4>>2]=c[j+4>>2];c[B+8>>2]=c[j+8>>2];kq(N,s,O);jz(v,N);A=A+1|0;}while((A|0)<(b|0))}if(!q){jW(a,m);jX(a,n);kf(a,p,r);i=l;return}iR(a);eW(P,0.0,.5);eW(Q,.5,.5);kf(a,P,Q);jW(a,jn(jT(a)|0)|0);k4(a,b,e,0);eT(R,0.0,d,0.0);kk(a,R);km(a,180.0);eW(S,.5,.5);eW(T,.5,.5);kf(a,S,T);jW(a,jo(jT(a)|0)|0);k4(a,b,f,0);eT(U,0.0,_,0.0);kk(a,U);iS(a);jW(a,m);jX(a,n);kf(a,p,r);i=l;return}function k2(a,b){a=a|0;b=+b;mZ(a,b);return}function k3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+8|0;f=e|0;lw(f,b,d);d=fA(b,f)|0;f=a;a=c[d+4>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=a;i=e;return}function k4(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;f=i;i=i+216|0;g=f|0;h=f+16|0;j=f+24|0;k=f+32|0;l=f+72|0;m=f+88|0;n=f+104|0;o=f+112|0;p=f+120|0;q=f+128|0;r=f+136|0;s=f+144|0;t=f+152|0;u=f+168|0;v=f+184|0;w=f+200|0;x=h1(a+12|0)|0;eT(g,0.0,0.0,0.0);jy(a,g);eW(h,.5,.5);kg(a,h);eW(j,.5,.5);kj(a,j);uY(k,360.0/+(b|0),0.0,1.0,0.0);eT(l,d*.5,0.0,0.0);eT(m,.5,0.0,0.0);if((b|0)<=0){i=f;return}j=m;h=u;g=l;y=w;z=m;if((e|0)==0){e=0;while(1){jy(a,l);lx(o,j);eW(p,.5,.5);lw(n,o,p);kg(a,n);lx(r,j);eW(s,.5,.5);lw(q,r,s);kj(a,q);A=e+1|0;jH(a,0,A,(A|0)==(b|0)?1:e+2|0,x);c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];kq(t,k,u);jz(l,t);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];kq(v,k,w);jz(m,v);if((A|0)<(b|0)){e=A}else{break}}i=f;return}else{e=0;while(1){jy(a,l);lx(o,j);eW(p,.5,.5);lw(n,o,p);kg(a,n);lx(r,j);eW(s,.5,.5);lw(q,r,s);kj(a,q);jG(a,jo(jT(a)|0)|0);A=e+1|0;jH(a,0,A,(A|0)==(b|0)?1:e+2|0,x);c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];kq(t,k,u);jz(l,t);c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];kq(v,k,w);jz(m,v);if((A|0)<(b|0)){e=A}else{break}}i=f;return}}function k5(a,b,c){a=a|0;b=b|0;c=+c;k6(a,b,0.0,c);return}function k6(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0.0,aj=0.0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0;f=i;i=i+544|0;h=f|0;j=f+8|0;k=f+24|0;l=f+64|0;m=f+80|0;n=f+96|0;o=f+112|0;p=f+128|0;q=f+144|0;r=f+160|0;s=f+176|0;t=f+192|0;u=f+200|0;v=f+216|0;w=f+232|0;x=f+240|0;y=f+256|0;z=f+304|0;A=f+320|0;B=f+336|0;C=f+344|0;D=f+360|0;E=f+368|0;F=f+384|0;G=f+416|0;H=f+432|0;I=f+448|0;J=f+464|0;K=f+480|0;L=f+496|0;M=f+504|0;N=f+512|0;O=f+520|0;P=f+528|0;Q=f+536|0;R=e*.5;g[h>>2]=R;S=a|0;T=hU(S)|0;k7(j);U=d!=0.0;if(U){e=R*2.0+d;V=b|1;W=d/e;X=R/e}else{V=b;W=0.0;X=0.0}e=+k8(5.0)*.5+.5;R=+k9(1.0/+k8(e+2.0));eT(l,0.0,0.0,1.0);uZ(k,R*57.2957763671875,l);l=j|0;b=0;do{R=(b&1|0)!=0?.5:-.5;Y=e*((b&2|0)==0?-.5:.5);eT(n,R,Y,0.0);kq(m,k,n);la(l,m);eT(p,0.0,R,Y);kq(o,k,p);la(l,o);eT(r,Y,0.0,R);kq(q,k,r);la(l,q);b=b+1|0;}while((b|0)<4);e=1.0/+(V|0);b=V+1|0;V=y|0;q=y+12|0;r=y+24|0;k=y+36|0;R=X+W;W=X*2.0;o=d>0.0;Y=d*.5;Z=d*-.5;p=a+12|0;m=0;do{n=lk(l,c[50328+(m<<2)>>2]|0)|0;_=lk(l,c[50328+(m+1<<2)>>2]|0)|0;$=lk(l,c[50328+(m+2<<2)>>2]|0)|0;g[t>>2]=e;jc(u,_,n);lb(s,t,u);g[w>>2]=e;jc(x,$,n);lb(v,w,x);$=0;_=b;L2034:while(1){aa=($|0)<(b|0);d=+($|0);ab=_-1|0;ac=_-2|0;ad=0;do{if(!aa){break L2034}g[B>>2]=d;lb(A,B,s);jC(z,n,A);g[D>>2]=+(ad|0);lb(C,D,v);jC(V,z,C);jC(q,V,s);jC(r,V,v);jC(E,V,s);jC(k,E,v);ae=0;do{af=y+(ae*12&-1)|0;jB(G,af);jz(af,G);ag=F+(ae<<3)|0;g[ag>>2]=(+lc(+g[y+(ae*12&-1)+8>>2],+g[af>>2])+3.1415927410125732)/6.2831854820251465;ah=y+(ae*12&-1)+4|0;if(+kT(+g[ah>>2])>=1.0){g[ag>>2]=-1.0}eT(J,1.0,0.0,1.0);kX(I,af,J);jB(H,I);ai=+ld(af,H);aj=+lc(+g[ah>>2],ai)/3.1415927410125732+.5;ah=F+(ae<<3)+4|0;g[ah>>2]=aj;do{if(U){if(aj>.5){g[ah>>2]=R+X*(aj+-.5)*2.0;break}else{g[ah>>2]=W*aj;break}}}while(0);ks(K,af,h);ae=ae+1|0;}while((ae|0)<4);if(o){ae=y+4|0;aj=+g[ae>>2];g[ae>>2]=(aj>0.0?Y:Z)+aj;ae=y+16|0;aj=+g[ae>>2];g[ae>>2]=(aj>0.0?Y:Z)+aj;ae=y+28|0;aj=+g[ae>>2];g[ae>>2]=(aj>0.0?Y:Z)+aj;ae=y+40|0;aj=+g[ae>>2];g[ae>>2]=(aj>0.0?Y:Z)+aj}ae=(ad|0)<(ab|0);ah=(ad|0)<(ac|0);ag=6;ak=3;while(1){if((ag|0)==3){if(ae){al=1900}}else if((ag|0)==6){if(ah){al=1900}else{ag=3;ak=0;continue}}if((al|0)==1900){al=0;am=F+(c[50568+(ak<<2)>>2]<<3)|0;aj=+g[am>>2];an=50568+(ak+1<<2)|0;do{if(aj>=0.0){ao=F+(c[an>>2]<<3)|0;ai=+g[ao>>2];if(ai<0.0){break}if(+kT(aj-ai)<=.5){break}if(aj<ai){g[am>>2]=aj+1.0;break}else{g[ao>>2]=ai+1.0;break}}}while(0);af=F+(c[an>>2]<<3)|0;aj=+g[af>>2];ao=50568+(ak+2<<2)|0;do{if(aj>=0.0){ap=F+(c[ao>>2]<<3)|0;ai=+g[ap>>2];if(ai<0.0){break}if(+kT(aj-ai)<=.5){break}if(aj<ai){g[af>>2]=aj+1.0;break}else{g[ap>>2]=ai+1.0;break}}}while(0);af=F+(c[ao>>2]<<3)|0;aj=+g[af>>2];do{if(aj<0.0){aq=-1}else{ai=+g[am>>2];if(ai<0.0){aq=-1;break}if(+kT(aj-ai)<=.5){aq=-1;break}if(aj<ai){g[af>>2]=aj+1.0;aq=-1;break}else{g[am>>2]=ai+1.0;aq=-1;break}}}while(0);while(1){am=aq+1|0;if((am|0)>=3){break}af=c[50568+(am+ak<<2)>>2]|0;ao=c[50568+(((aq+2|0)%3&-1)+ak<<2)>>2]|0;an=c[50568+(((aq+3|0)%3&-1)+ak<<2)>>2]|0;jy(a,y+(af*12&-1)|0);ap=F+(af<<3)|0;if(+g[ap>>2]<0.0){eW(M,(+g[F+(ao<<3)>>2]+ +g[F+(an<<3)>>2])*.5,+g[F+(af<<3)+4>>2]);fA(L,M)}else{fA(L,ap)}eW(O,0.0,1.0);le(N,O,L);kg(a,N);eW(Q,0.0,1.0);le(P,Q,L);kj(a,P);aq=am}jH(a,0,2,1,(h1(p)|0)-3|0)}am=ak-3|0;if((am|0)>-1){ag=ak;ak=am}else{break}}ad=ad+1|0;}while((ad|0)!=(_|0));$=$+1|0;_=ab}m=m+3|0;}while(m>>>0<60);jJ(a,T,(hU(S)|0)-T|0);lf(j);i=f;return}function k7(a){a=a|0;nP(a);return}function k8(a){a=+a;return+(+W(+a))}function k9(a){a=+a;return+(+aa(+a))}function la(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+16|0;e=d|0;f=a+4|0;g=c[f>>2]|0;if((g|0)<(c[a+8>>2]|0)){c[f>>2]=g+1;h=(c[a>>2]|0)+(g*12&-1)|0;if((h|0)==0){i=d;return a|0}j=h;h=b;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];i=d;return a|0}else{h=b;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=c[h+4>>2];c[b+8>>2]=c[h+8>>2];l0(a,((g*13&-1|0)/8&-1)+8|0);g=c[f>>2]|0;c[f>>2]=g+1;f=(c[a>>2]|0)+(g*12&-1)|0;if((f|0)==0){i=d;return a|0}g=f;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];i=d;return a|0}return 0}function lb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(c,0)>>2];e=d*+g[b>>2];g[kP(a,0)>>2]=e;e=+g[my(c,1)>>2];d=e*+g[b>>2];g[kP(a,1)>>2]=d;d=+g[my(c,2)>>2];e=d*+g[b>>2];g[kP(a,2)>>2]=e;return}function lc(a,b){a=+a;b=+b;return+(+ac(+a,+b))}function ld(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[my(a,0)>>2];d=c*+g[my(b,0)>>2]+0.0;c=+g[my(a,1)>>2];e=d+c*+g[my(b,1)>>2];c=+g[my(a,2)>>2];return+(e+c*+g[my(b,2)>>2])}function le(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fP(b,0)>>2];e=d- +g[fP(c,0)>>2];g[fQ(a,0)>>2]=e;e=+g[fP(b,1)>>2];d=e- +g[fP(c,1)>>2];g[fQ(a,1)>>2]=d;return}function lf(a){a=a|0;nN(a);return}function lg(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0,g=0,h=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0;e=i;i=i+32|0;f=e|0;g=e+16|0;h=e+24|0;j=c*.5;c=d*.5;k=a|0;l=hU(k)|0;if((b|0)<=0){m=hU(k)|0;n=m-l|0;jJ(a,l,n);i=e;return}o=b<<1;p=(o|0)>0;d=(c-j)*.5;q=+(b|0);r=(j+c)*.5;s=a+12|0;t=0;while(1){if(p){u=0;while(1){v=0;do{w=v+u|0;c=+(w|0)/q;j=+((w|0)%(b|0)&-1|0)*6.2831854820251465/q;x=r+d*+lh(j);y=d*+li(j);z=+(t|0);A=z*6.2831854820251465/q;B=+lh(A);C=+li(A);eT(f,x*B-C*0.0,y,B*0.0+x*C);jy(a,f);C=z/q;eW(g,c,C);kg(a,g);eW(h,c,C);kj(a,h);D=t+1|0;C=r+d*+lh(j);z=d*+li(j);j=((D|0)==(b|0)?0.0:+(D|0)*6.2831854820251465)/q;x=+lh(j);B=+li(j);eT(f,C*x-B*0.0,z,x*0.0+C*B);jy(a,f);B=+(D|0)/q;eW(g,c,B);kg(a,g);eW(h,c,B);kj(a,h);v=v+1|0;}while((v|0)<2);jH(a,0,2,3,(h1(s)|0)-4|0);jH(a,0,3,1,(h1(s)|0)-4|0);v=u+1|0;if((v|0)<(o|0)){u=v}else{E=D;break}}}else{E=t+1|0}if((E|0)<(b|0)){t=E}else{break}}m=hU(k)|0;n=m-l|0;jJ(a,l,n);i=e;return}function lh(a){a=+a;return+(+Y(+a))}function li(a){a=+a;return+(+Z(+a))}function lj(a,b,c){a=a|0;b=b|0;c=+c;ll(a,b,c,0);return}function lk(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b*12&-1)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function ll(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b_=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cm=0,cn=0,co=0,cp=0,cq=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cx=0,cy=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,cG=0,cH=0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cS=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0;f=i;i=i+2064|0;h=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+56|0;n=f+64|0;o=f+72|0;p=f+80|0;q=f+88|0;r=f+96|0;s=f+104|0;t=f+120|0;u=f+128|0;v=f+136|0;w=f+144|0;x=f+152|0;y=f+160|0;z=f+168|0;A=f+176|0;B=f+184|0;C=f+200|0;D=f+208|0;E=f+216|0;F=f+224|0;G=f+232|0;H=f+240|0;I=f+248|0;J=f+256|0;K=f+264|0;L=f+280|0;M=f+288|0;N=f+296|0;O=f+304|0;P=f+312|0;Q=f+320|0;R=f+328|0;S=f+336|0;T=f+344|0;U=f+360|0;V=f+368|0;W=f+376|0;X=f+384|0;Y=f+392|0;Z=f+400|0;_=f+408|0;$=f+416|0;aa=f+424|0;ab=f+432|0;ac=f+448|0;ad=f+456|0;ae=f+464|0;af=f+472|0;ag=f+480|0;ah=f+488|0;ai=f+496|0;aj=f+504|0;ak=f+512|0;al=f+528|0;am=f+536|0;an=f+544|0;ao=f+552|0;ap=f+560|0;aq=f+568|0;ar=f+576|0;as=f+584|0;at=f+592|0;au=f+608|0;av=f+616|0;aw=f+624|0;ax=f+632|0;ay=f+640|0;az=f+648|0;aA=f+656|0;aB=f+664|0;aC=f+672|0;aD=f+688|0;aE=f+696|0;aF=f+704|0;aG=f+712|0;aH=f+720|0;aI=f+728|0;aJ=f+736|0;aK=f+744|0;aL=f+752|0;aM=f+760|0;aN=f+776|0;aO=f+784|0;aP=f+792|0;aQ=f+800|0;aR=f+808|0;aS=f+816|0;aT=f+824|0;aU=f+832|0;aV=f+840|0;aW=f+856|0;aX=f+864|0;aY=f+872|0;aZ=f+880|0;a_=f+888|0;a$=f+896|0;a0=f+904|0;a1=f+912|0;a2=f+920|0;a3=f+936|0;a4=f+944|0;a5=f+952|0;a6=f+960|0;a7=f+968|0;a8=f+976|0;a9=f+984|0;ba=f+992|0;bb=f+1e3|0;bc=f+1016|0;bd=f+1024|0;be=f+1032|0;bf=f+1040|0;bg=f+1048|0;bh=f+1056|0;bi=f+1064|0;bj=f+1072|0;bk=f+1080|0;bl=f+1088|0;bm=f+1104|0;bn=f+1112|0;bo=f+1120|0;bp=f+1128|0;bq=f+1136|0;br=f+1144|0;bs=f+1152|0;bt=f+1160|0;bu=f+1168|0;bv=f+1184|0;bw=f+1192|0;bx=f+1200|0;by=f+1208|0;bz=f+1216|0;bA=f+1224|0;bB=f+1232|0;bC=f+1240|0;bD=f+1248|0;bE=f+1264|0;bF=f+1272|0;bG=f+1280|0;bH=f+1288|0;bI=f+1296|0;bJ=f+1304|0;bK=f+1312|0;bL=f+1320|0;bM=f+1328|0;bN=f+1344|0;bO=f+1352|0;bP=f+1360|0;bQ=f+1368|0;bR=f+1376|0;bS=f+1384|0;bT=f+1392|0;bU=f+1400|0;bV=f+1408|0;bW=f+1416|0;bX=f+1432|0;bY=f+1440|0;bZ=f+1448|0;b_=f+1456|0;b$=f+1464|0;b0=f+1472|0;b1=f+1480|0;b2=f+1488|0;b3=f+1496|0;b4=f+1512|0;b5=f+1520|0;b6=f+1528|0;b7=f+1536|0;b8=f+1544|0;b9=f+1552|0;ca=f+1560|0;cb=f+1568|0;cc=f+1576|0;cd=f+1592|0;ce=f+1600|0;cf=f+1608|0;cg=f+1616|0;ch=f+1624|0;ci=f+1632|0;cj=f+1640|0;ck=f+1648|0;cl=f+1656|0;cm=f+1672|0;cn=f+1680|0;co=f+1688|0;cp=f+1696|0;cq=f+1704|0;cr=f+1712|0;cs=f+1720|0;ct=f+1728|0;cu=f+1736|0;cv=f+1744|0;cw=f+1760|0;cx=f+1768|0;cy=f+1776|0;cz=f+1784|0;cA=f+1792|0;cB=f+1800|0;cC=f+1808|0;cD=f+1816|0;cE=f+1824|0;cF=f+1840|0;cG=f+1848|0;cH=f+1856|0;cI=f+1864|0;cJ=f+1872|0;cK=f+1880|0;cL=f+1888|0;cM=f+1896|0;cN=f+1904|0;cO=f+1920|0;cP=f+1928|0;cQ=f+1936|0;cR=f+1944|0;cS=f+1952|0;cT=f+1960|0;cU=f+1968|0;cV=f+1976|0;cW=f+1984|0;cX=f+2e3|0;cY=f+2008|0;cZ=f+2016|0;c_=f+2024|0;c$=f+2032|0;c0=f+2040|0;c1=f+2048|0;c2=f+2056|0;if(d<0.0){js(j,d*2.0);jC(h,b,j);ll(a,h,-0.0-d,e);i=f;return}h=h1(a+12|0)|0;j=a|0;c3=hU(j)|0;g[l>>2]=.5;jD(k,b,l);lo(m,2);lp(n,0);lp(o,1);lp(p,2);lp(q,3);lq(r,0);l=k|0;b=k+4|0;c4=k+8|0;eT(s,-0.0- +g[l>>2],-0.0- +g[b>>2],-0.0- +g[c4>>2]-d);jy(a,s);s=jT(a)|0;k=m|0;m=c[k>>2]|0;c[u>>2]=m;c5=q|0;q=c[c5>>2]|0;c[v>>2]=q;c6=r|0;r=c[c6>>2]|0;c[w>>2]=r;lr(t,s,u,v,w);kg(a,t);t=jT(a)|0;c[y>>2]=m;c[z>>2]=q;c[A>>2]=r;ls(x,t,y,z,A);kj(a,x);eT(B,-0.0- +g[l>>2],+g[b>>2],-0.0- +g[c4>>2]-d);jy(a,B);B=jT(a)|0;c[D>>2]=m;x=o|0;o=c[x>>2]|0;c[E>>2]=o;c[F>>2]=r;lr(C,B,D,E,F);kg(a,C);C=jT(a)|0;c[H>>2]=m;c[I>>2]=q;c[J>>2]=r;ls(G,C,H,I,J);kj(a,G);eT(K,+g[l>>2],+g[b>>2],-0.0- +g[c4>>2]-d);jy(a,K);K=jT(a)|0;c[M>>2]=m;G=n|0;n=c[G>>2]|0;c[N>>2]=n;c[O>>2]=r;lr(L,K,M,N,O);kg(a,L);L=jT(a)|0;c[Q>>2]=m;c[R>>2]=q;c[S>>2]=r;ls(P,L,Q,R,S);kj(a,P);eT(T,+g[l>>2],-0.0- +g[b>>2],-0.0- +g[c4>>2]-d);jy(a,T);T=jT(a)|0;c[V>>2]=m;P=p|0;p=c[P>>2]|0;c[W>>2]=p;c[X>>2]=r;lr(U,T,V,W,X);kg(a,U);U=jT(a)|0;c[Z>>2]=m;c[_>>2]=q;c[$>>2]=r;ls(Y,U,Z,_,$);kj(a,Y);lq(aa,1);Y=c[aa>>2]|0;eT(ab,-0.0- +g[l>>2]-d,-0.0- +g[b>>2],+g[c4>>2]);jy(a,ab);ab=jT(a)|0;c[ad>>2]=m;c[ae>>2]=q;c[af>>2]=Y;lr(ac,ab,ad,ae,af);kg(a,ac);ac=jT(a)|0;c[ah>>2]=m;c[ai>>2]=q;c[aj>>2]=Y;ls(ag,ac,ah,ai,aj);kj(a,ag);eT(ak,-0.0- +g[l>>2]-d,+g[b>>2],+g[c4>>2]);jy(a,ak);ak=jT(a)|0;c[am>>2]=m;c[an>>2]=o;c[ao>>2]=Y;lr(al,ak,am,an,ao);kg(a,al);al=jT(a)|0;c[aq>>2]=m;c[ar>>2]=q;c[as>>2]=Y;ls(ap,al,aq,ar,as);kj(a,ap);eT(at,-0.0- +g[l>>2]-d,+g[b>>2],-0.0- +g[c4>>2]);jy(a,at);at=jT(a)|0;c[av>>2]=m;c[aw>>2]=n;c[ax>>2]=Y;lr(au,at,av,aw,ax);kg(a,au);au=jT(a)|0;c[az>>2]=m;c[aA>>2]=q;c[aB>>2]=Y;ls(ay,au,az,aA,aB);kj(a,ay);eT(aC,-0.0- +g[l>>2]-d,-0.0- +g[b>>2],-0.0- +g[c4>>2]);jy(a,aC);aC=jT(a)|0;c[aE>>2]=m;c[aF>>2]=p;c[aG>>2]=Y;lr(aD,aC,aE,aF,aG);kg(a,aD);aD=jT(a)|0;c[aI>>2]=m;c[aJ>>2]=q;c[aK>>2]=Y;ls(aH,aD,aI,aJ,aK);kj(a,aH);lq(aL,2);aH=c[aL>>2]|0;eT(aM,+g[l>>2],-0.0- +g[b>>2],+g[c4>>2]+d);jy(a,aM);aM=jT(a)|0;c[aO>>2]=m;c[aP>>2]=q;c[aQ>>2]=aH;lr(aN,aM,aO,aP,aQ);kg(a,aN);aN=jT(a)|0;c[aS>>2]=m;c[aT>>2]=q;c[aU>>2]=aH;ls(aR,aN,aS,aT,aU);kj(a,aR);eT(aV,+g[l>>2],+g[b>>2],+g[c4>>2]+d);jy(a,aV);aV=jT(a)|0;c[aX>>2]=m;c[aY>>2]=o;c[aZ>>2]=aH;lr(aW,aV,aX,aY,aZ);kg(a,aW);aW=jT(a)|0;c[a$>>2]=m;c[a0>>2]=q;c[a1>>2]=aH;ls(a_,aW,a$,a0,a1);kj(a,a_);eT(a2,-0.0- +g[l>>2],+g[b>>2],+g[c4>>2]+d);jy(a,a2);a2=jT(a)|0;c[a4>>2]=m;c[a5>>2]=n;c[a6>>2]=aH;lr(a3,a2,a4,a5,a6);kg(a,a3);a3=jT(a)|0;c[a8>>2]=m;c[a9>>2]=q;c[ba>>2]=aH;ls(a7,a3,a8,a9,ba);kj(a,a7);eT(bb,-0.0- +g[l>>2],-0.0- +g[b>>2],+g[c4>>2]+d);jy(a,bb);bb=jT(a)|0;c[bd>>2]=m;c[be>>2]=p;c[bf>>2]=aH;lr(bc,bb,bd,be,bf);kg(a,bc);bc=jT(a)|0;c[bh>>2]=m;c[bi>>2]=q;c[bj>>2]=aH;ls(bg,bc,bh,bi,bj);kj(a,bg);lq(bk,3);bg=c[bk>>2]|0;eT(bl,+g[l>>2]+d,-0.0- +g[b>>2],-0.0- +g[c4>>2]);jy(a,bl);bl=jT(a)|0;c[bn>>2]=m;c[bo>>2]=q;c[bp>>2]=bg;lr(bm,bl,bn,bo,bp);kg(a,bm);bm=jT(a)|0;c[br>>2]=m;c[bs>>2]=q;c[bt>>2]=bg;ls(bq,bm,br,bs,bt);kj(a,bq);eT(bu,+g[l>>2]+d,+g[b>>2],-0.0- +g[c4>>2]);jy(a,bu);bu=jT(a)|0;c[bw>>2]=m;c[bx>>2]=o;c[by>>2]=bg;lr(bv,bu,bw,bx,by);kg(a,bv);bv=jT(a)|0;c[bA>>2]=m;c[bB>>2]=q;c[bC>>2]=bg;ls(bz,bv,bA,bB,bC);kj(a,bz);eT(bD,+g[l>>2]+d,+g[b>>2],+g[c4>>2]);jy(a,bD);bD=jT(a)|0;c[bF>>2]=m;c[bG>>2]=n;c[bH>>2]=bg;lr(bE,bD,bF,bG,bH);kg(a,bE);bE=jT(a)|0;c[bJ>>2]=m;c[bK>>2]=q;c[bL>>2]=bg;ls(bI,bE,bJ,bK,bL);kj(a,bI);eT(bM,+g[l>>2]+d,-0.0- +g[b>>2],+g[c4>>2]);jy(a,bM);bM=jT(a)|0;c[bO>>2]=m;c[bP>>2]=p;c[bQ>>2]=bg;lr(bN,bM,bO,bP,bQ);kg(a,bN);bN=jT(a)|0;c[bS>>2]=m;c[bT>>2]=q;c[bU>>2]=bg;ls(bR,bN,bS,bT,bU);kj(a,bR);lq(bV,5);bR=c[bV>>2]|0;eT(bW,-0.0- +g[l>>2],-0.0- +g[b>>2]-d,+g[c4>>2]);jy(a,bW);bW=jT(a)|0;c[bY>>2]=m;c[bZ>>2]=q;c[b_>>2]=bR;lr(bX,bW,bY,bZ,b_);kg(a,bX);bX=jT(a)|0;c[b0>>2]=m;c[b1>>2]=q;c[b2>>2]=bR;ls(b$,bX,b0,b1,b2);kj(a,b$);eT(b3,-0.0- +g[l>>2],-0.0- +g[b>>2]-d,-0.0- +g[c4>>2]);jy(a,b3);b3=jT(a)|0;c[b5>>2]=m;c[b6>>2]=o;c[b7>>2]=bR;lr(b4,b3,b5,b6,b7);kg(a,b4);b4=jT(a)|0;c[b9>>2]=m;c[ca>>2]=q;c[cb>>2]=bR;ls(b8,b4,b9,ca,cb);kj(a,b8);eT(cc,+g[l>>2],-0.0- +g[b>>2]-d,-0.0- +g[c4>>2]);jy(a,cc);cc=jT(a)|0;c[ce>>2]=m;c[cf>>2]=n;c[cg>>2]=bR;lr(cd,cc,ce,cf,cg);kg(a,cd);cd=jT(a)|0;c[ci>>2]=m;c[cj>>2]=q;c[ck>>2]=bR;ls(ch,cd,ci,cj,ck);kj(a,ch);eT(cl,+g[l>>2],-0.0- +g[b>>2]-d,+g[c4>>2]);jy(a,cl);cl=jT(a)|0;ch=c[k>>2]|0;c[cn>>2]=ch;c[co>>2]=p;c[cp>>2]=bR;lr(cm,cl,cn,co,cp);kg(a,cm);cm=jT(a)|0;c[cr>>2]=ch;cp=c[c5>>2]|0;c[cs>>2]=cp;c[ct>>2]=bR;ls(cq,cm,cr,cs,ct);kj(a,cq);lq(cu,4);cq=c[cu>>2]|0;c[c6>>2]=cq;eT(cv,-0.0- +g[l>>2],+g[b>>2]+d,-0.0- +g[c4>>2]);jy(a,cv);cv=jT(a)|0;c[cx>>2]=ch;c[cy>>2]=cp;c[cz>>2]=cq;lr(cw,cv,cx,cy,cz);kg(a,cw);cw=jT(a)|0;c[cB>>2]=ch;c[cC>>2]=cp;c[cD>>2]=cq;ls(cA,cw,cB,cC,cD);kj(a,cA);eT(cE,-0.0- +g[l>>2],+g[b>>2]+d,+g[c4>>2]);jy(a,cE);cE=jT(a)|0;c[cG>>2]=ch;c[cH>>2]=c[x>>2];c[cI>>2]=cq;lr(cF,cE,cG,cH,cI);kg(a,cF);cF=jT(a)|0;c[cK>>2]=ch;c[cL>>2]=cp;c[cM>>2]=cq;ls(cJ,cF,cK,cL,cM);kj(a,cJ);eT(cN,+g[l>>2],+g[b>>2]+d,+g[c4>>2]);jy(a,cN);cN=jT(a)|0;c[cP>>2]=ch;c[cQ>>2]=c[G>>2];c[cR>>2]=cq;lr(cO,cN,cP,cQ,cR);kg(a,cO);cO=jT(a)|0;c[cT>>2]=ch;c[cU>>2]=cp;c[cV>>2]=cq;ls(cS,cO,cT,cU,cV);kj(a,cS);eT(cW,+g[l>>2],+g[b>>2]+d,-0.0- +g[c4>>2]);jy(a,cW);cW=jT(a)|0;c[cY>>2]=ch;c[cZ>>2]=c[P>>2];c[c_>>2]=cq;lr(cX,cW,cY,cZ,c_);kg(a,cX);cX=jT(a)|0;c[c0>>2]=ch;c[c1>>2]=cp;c[c2>>2]=cq;ls(c$,cX,c0,c1,c2);kj(a,c$);kb(a,0,1,2,3,h);kb(a,4,5,6,7,h);kb(a,8,9,10,11,h);kb(a,12,13,14,15,h);kb(a,16,17,18,19,h);kb(a,20,21,22,23,h);jJ(a,c3,(hU(j)|0)-c3|0);c3=hU(j)|0;if(d!=0.0){c$=0;while(1){c2=c[50040+(c$<<2)>>2]|0;c1=c[50040+((c$|1)<<2)>>2]|0;c0=c[50040+((c$|2)<<2)>>2]|0;cX=c[50040+((c$|3)<<2)>>2]|0;if(e){kb(a,c2,c1,c0,cX,h)}else{kc(a,c2,c1,c0,cX,h)}cX=c$+4|0;if((cX|0)<48){c$=cX}else{c7=0;break}}do{c$=c[50232+(c7<<2)>>2]|0;cX=c[50232+(c7+1<<2)>>2]|0;c0=c[50232+(c7+2<<2)>>2]|0;if(e){jH(a,c$,cX,c0,h)}else{kd(a,c$,cX,c0,h)}c7=c7+3|0;}while((c7|0)<24)}if(e){i=f;return}jJ(a,c3,(hU(j)|0)-c3|0);i=f;return}function lm(a,b,c){a=a|0;b=b|0;c=+c;ll(a,b,c,1);return}function ln(a,b,c){a=a|0;b=b|0;c=+c;ll(a,b,c,0);return}function lo(a,b){a=a|0;b=b|0;ng(a,b);return}function lp(a,b){a=a|0;b=b|0;nf(a,b);return}function lq(a,b){a=a|0;b=b|0;ne(a,b);return}function lr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=i;i=i+176|0;j=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[j>>2];j=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[j>>2];j=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[j>>2];j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=h+40|0;p=h+48|0;q=h+144|0;r=h+152|0;s=h+160|0;t=h+168|0;k2(j,0.0);k2(k,0.0);u=m9(d)|0;do{if((c[b+328+(u<<2)>>2]&1|0)==0){v=2e3}else{w=na(f)|0;x=b+64+(u*12&-1)|0;if((w|0)>=(nb(x)|0)){v=2e3;break}y=oG(x,w)|0;fA(j,y);y=b+64+((m9(d)|0)*12&-1)|0;w=(oG(y,na(f)|0)|0)+8|0;fA(k,w)}}while(0);do{if((v|0)==2e3){c[m>>2]=c[d>>2];nM(l,b,m);u=m9(d)|0;if((u|0)==1){k2(n,0.0);fA(j,n);k2(o,1.0);fA(k,o);break}else if((u|0)==2){k2(p|0,0.0);k2(p+8|0,.5);eW(p+16|0,.5,0.0);eW(p+24|0,1.0,.5);k2(p+32|0,0.0);k2(p+40|0,.5);eW(p+48|0,.5,0.0);eW(p+56|0,1.0,.5);eW(p+64|0,0.0,.5);eW(p+72|0,.5,1.0);eW(p+80|0,.5,.5);eW(p+88|0,1.0,1.0);fA(j,p+(na(f)<<4)|0);fA(k,p+(na(f)<<4)+8|0);break}else{break}}}while(0);k2(q,0.0);f=nc(e)|0;if((f|0)==2){eW(s,+g[j>>2],+g[k+4>>2]);fA(q,s)}else if((f|0)==1){eW(r,+g[k>>2],+g[j+4>>2]);fA(q,r)}else if((f|0)==0){fA(q,j)}else if((f|0)==3){fA(q,k)}lE(t,q,b+48|0);lw(a,t,b+40|0);i=h;return}function ls(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=i;i=i+176|0;j=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[j>>2];j=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[j>>2];j=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[j>>2];j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=h+40|0;p=h+48|0;q=h+144|0;r=h+152|0;s=h+160|0;t=h+168|0;k2(j,0.0);k2(k,0.0);u=m9(d)|0;do{if((c[b+372+(u<<2)>>2]&1|0)==0){v=2012}else{w=na(f)|0;x=b+196+(u*12&-1)|0;if((w|0)>=(nb(x)|0)){v=2012;break}y=oG(x,w)|0;fA(j,y);y=b+196+((m9(d)|0)*12&-1)|0;w=(oG(y,na(f)|0)|0)+8|0;fA(k,w)}}while(0);do{if((v|0)==2012){c[m>>2]=c[d>>2];nK(l,b,m);u=m9(d)|0;if((u|0)==2){k2(p|0,0.0);k2(p+8|0,.5);eW(p+16|0,.5,0.0);eW(p+24|0,1.0,.5);k2(p+32|0,0.0);k2(p+40|0,.5);eW(p+48|0,.5,0.0);eW(p+56|0,1.0,.5);eW(p+64|0,0.0,.5);eW(p+72|0,.5,1.0);eW(p+80|0,.5,.5);eW(p+88|0,1.0,1.0);w=p+(na(f)<<4)|0;fA(j,w);w=p+(na(f)<<4)+8|0;fA(k,w);break}else if((u|0)==1){k2(n,0.0);fA(j,n);k2(o,1.0);fA(k,o);break}else{break}}}while(0);k2(q,0.0);o=nc(e)|0;if((o|0)==0){fA(q,j)}else if((o|0)==1){eW(r,+g[k>>2],+g[j+4>>2]);fA(q,r)}else if((o|0)==2){eW(s,+g[j>>2],+g[k+4>>2]);fA(q,s)}else if((o|0)==3){fA(q,k)}lE(t,q,b+48|0);lw(a,t,b+40|0);i=h;return}function lt(a,b,d,e,f,g){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0;h=i;i=i+504|0;j=h|0;k=h+16|0;l=h+24|0;m=h+32|0;n=h+72|0;o=h+88|0;p=h+104|0;q=h+120|0;r=h+136|0;s=h+152|0;t=h+168|0;u=h+184|0;v=h+200|0;w=h+240|0;x=h+280|0;y=h+288|0;z=h+296|0;A=h+304|0;B=h+312|0;C=h+320|0;D=h+328|0;E=h+336|0;F=h+344|0;G=h+352|0;H=h+360|0;I=h+368|0;J=h+376|0;K=h+392|0;L=h+408|0;M=h+424|0;N=h+440|0;O=h+456|0;P=h+472|0;Q=h+488|0;R=d*.5;d=e*.5;S=h1(a+12|0)|0;e=+kN(R,d);eT(j,0.0,0.0,0.0);jy(a,j);eW(k,.5,.5);kg(a,k);eW(l,.5,.5);kj(a,l);uY(m,180.0/+(b|0),0.0,1.0,0.0);eT(n,R,0.0,0.0);eT(o,d,0.0,0.0);eT(p,0.0,0.0,R/e*-.5);eT(q,0.0,0.0,d/e*-.5);l=s;k=o;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];kq(r,m,s);jz(o,r);r=u;s=q;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];kq(t,m,u);jz(q,t);Zp(w|0,m|0,36);lv(v,m,w);lu(m,v);if((b|0)<=0){i=h;return}v=p;w=(g|0)==0;g=q;t=(f|0)==0;f=b<<1;u=K;r=n;l=M;j=p;T=O;U=Q;V=0;do{jy(a,n);lx(y,v);k2(z,.5);lw(x,y,z);kg(a,x);lx(B,v);k2(C,.5);lw(A,B,C);kj(a,A);if(!w){jG(a,jo(jT(a)|0)|0)}jy(a,o);lx(E,g);k2(F,.5);lw(D,E,F);kg(a,D);lx(H,g);k2(I,.5);lw(G,H,I);kj(a,G);if(!t){jG(a,jo(jT(a)|0)|0)}W=V<<1;kb(a,0,W|1,W+2|0,(W+3|0)%(f|0)&-1,S);c[u>>2]=c[r>>2];c[u+4>>2]=c[r+4>>2];c[u+8>>2]=c[r+8>>2];kq(J,m,K);jz(n,J);c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];kq(L,m,M);jz(p,L);c[T>>2]=c[k>>2];c[T+4>>2]=c[k+4>>2];c[T+8>>2]=c[k+8>>2];kq(N,m,O);jz(o,N);c[U>>2]=c[s>>2];c[U+4>>2]=c[s+4>>2];c[U+8>>2]=c[s+8>>2];kq(P,m,Q);jz(q,P);V=V+1|0;}while((V|0)<(b|0));i=h;return}function lu(a,b){a=a|0;b=b|0;jz(a|0,b|0);jz(a+12|0,b+12|0);jz(a+24|0,b+24|0);return a|0}function lv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;i=i+96|0;f=d;d=i;i=i+36|0;i=i+7>>3<<3;Zp(d,f,36);f=e|0;g=e+16|0;h=e+32|0;j=e+48|0;k=e+64|0;l=e+80|0;m=g;n=lM(d,0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];kq(f,b,g);g=j;n=lM(d,1)|0;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];kq(h,b,j);j=l;n=lM(d,2)|0;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];kq(k,b,l);l2(a,f,h,k);i=e;return}function lw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fP(b,0)>>2];e=d+ +g[fP(c,0)>>2];g[fQ(a,0)>>2]=e;e=+g[fP(b,1)>>2];d=e+ +g[fP(c,1)>>2];g[fQ(a,1)>>2]=d;return}function lx(a,b){a=a|0;b=b|0;l1(a,b);return}function ly(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0.0,ar=0,as=0.0,at=0.0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0;g=i;i=i+856|0;h=g|0;j=g+16|0;k=g+24|0;l=g+32|0;m=g+72|0;n=g+88|0;o=g+104|0;p=g+120|0;q=g+136|0;r=g+152|0;s=g+168|0;t=g+184|0;u=g+200|0;v=g+216|0;w=g+232|0;x=g+248|0;y=g+264|0;z=g+280|0;A=g+296|0;B=g+312|0;C=g+328|0;D=g+368|0;E=g+408|0;F=g+416|0;G=g+424|0;H=g+432|0;I=g+440|0;J=g+448|0;K=g+456|0;L=g+464|0;M=g+472|0;N=g+480|0;O=g+488|0;P=g+496|0;Q=g+504|0;R=g+512|0;S=g+520|0;T=g+528|0;U=g+536|0;V=g+544|0;W=g+552|0;X=g+560|0;Y=g+568|0;Z=g+576|0;_=g+584|0;$=g+592|0;aa=g+600|0;ab=g+616|0;ac=g+632|0;ad=g+648|0;ae=g+664|0;af=g+680|0;ag=g+696|0;ah=g+712|0;ai=g+728|0;aj=g+744|0;ak=g+760|0;al=g+776|0;am=g+792|0;an=g+808|0;ao=g+824|0;ap=g+840|0;aq=d*.5;d=e*.5;e=f*.5;ar=h1(a+12|0)|0;f=+kN(aq,d);as=aq+e;at=d+e;e=+kN(f,+kN(as,at));eT(h,0.0,0.0,0.0);jy(a,h);eW(j,.5,.5);kg(a,j);eW(k,.5,.5);kj(a,k);uY(l,180.0/+(b|0),0.0,1.0,0.0);eT(m,aq,0.0,0.0);eT(n,d,0.0,0.0);eT(o,as,0.0,0.0);eT(p,at,0.0,0.0);eT(q,0.0,0.0,aq/e*-.5);eT(r,0.0,0.0,d/e*-.5);eT(s,0.0,0.0,as/e*-.5);eT(t,0.0,0.0,at/e*-.5);k=v;j=n;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];kq(u,l,v);jz(n,u);u=x;v=r;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];kq(w,l,x);jz(r,w);w=z;x=p;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];kq(y,l,z);jz(p,y);y=B;z=t;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];kq(A,l,B);jz(t,A);Zp(D|0,l|0,36);lv(C,l,D);lu(l,C);if((b|0)<=0){i=g;return}C=q;D=r;A=s;B=t;y=ab;w=m;u=ad;k=q;h=af;au=ah;av=aj;aw=o;ax=al;ay=s;az=an;aA=ap;aB=0;while(1){jy(a,m);lx(F,C);k2(G,.5);lw(E,F,G);kg(a,E);lx(I,C);k2(J,.5);lw(H,I,J);kj(a,H);jy(a,n);lx(L,D);k2(M,.5);lw(K,L,M);kg(a,K);lx(O,D);k2(P,.5);lw(N,O,P);kj(a,N);jy(a,o);lx(R,A);k2(S,.5);lw(Q,R,S);kg(a,Q);lx(U,A);k2(V,.5);lw(T,U,V);kj(a,T);jG(a,jo(jT(a)|0)|0);jy(a,p);lx(X,B);k2(Y,.5);lw(W,X,Y);kg(a,W);lx(_,B);k2($,.5);lw(Z,_,$);kj(a,Z);jG(a,jo(jT(a)|0)|0);aC=aB+1|0;aD=aB<<2;aE=aD|1;aF=aD|2;aG=(aC|0)==(b|0)?0:aC<<2;aH=aG|1;kb(a,0,aE,aF,aH,ar);aI=aD+4|0;kb(a,aE,aD|3,aI,aF,ar);kb(a,aH,aF,aI,aG|3,ar);c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];kq(aa,l,ab);jz(m,aa);c[u>>2]=c[k>>2];c[u+4>>2]=c[k+4>>2];c[u+8>>2]=c[k+8>>2];kq(ac,l,ad);jz(q,ac);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];kq(ae,l,af);jz(n,ae);c[au>>2]=c[v>>2];c[au+4>>2]=c[v+4>>2];c[au+8>>2]=c[v+8>>2];kq(ag,l,ah);jz(r,ag);c[av>>2]=c[aw>>2];c[av+4>>2]=c[aw+4>>2];c[av+8>>2]=c[aw+8>>2];kq(ai,l,aj);jz(o,ai);c[ax>>2]=c[ay>>2];c[ax+4>>2]=c[ay+4>>2];c[ax+8>>2]=c[ay+8>>2];kq(ak,l,al);jz(s,ak);c[az>>2]=c[x>>2];c[az+4>>2]=c[x+4>>2];c[az+8>>2]=c[x+8>>2];kq(am,l,an);jz(p,am);c[aA>>2]=c[z>>2];c[aA+4>>2]=c[z+4>>2];c[aA+8>>2]=c[z+8>>2];kq(ao,l,ap);jz(t,ao);if((aC|0)<(b|0)){aB=aC}else{break}}i=g;return}function lz(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=i;i=i+168|0;f=e|0;g=e+40|0;h=e+56|0;j=e+64|0;k=e+72|0;l=e+88|0;m=e+104|0;n=e+112|0;o=e+120|0;p=e+136|0;q=e+152|0;r=e+160|0;uY(f,120.0,0.0,1.0,0.0);eT(g,0.0,0.0,b*.5);jy(a,g);eW(h,.5,.13397499918937683);kg(a,h);eW(j,.5,.13397499918937683);kj(a,j);j=l;h=g;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];kq(k,f,l);jz(g,k);jy(a,g);eW(m,0.0,1.0);kg(a,m);eW(n,0.0,1.0);kj(a,n);if((d|0)==0){d=p;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];kq(o,f,p);jz(g,o);jy(a,g);eW(q,1.0,1.0);kg(a,q);eW(r,1.0,1.0);kj(a,r);s=a+12|0;t=h1(s)|0;u=t-3|0;jH(a,0,1,2,u);i=e;return}else{jG(a,jo(jT(a)|0)|0);d=p;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];kq(o,f,p);jz(g,o);jy(a,g);eW(q,1.0,1.0);kg(a,q);eW(r,1.0,1.0);kj(a,r);jG(a,jo(jT(a)|0)|0);s=a+12|0;t=h1(s)|0;u=t-3|0;jH(a,0,1,2,u);i=e;return}}function lA(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;f=d+8|0;k2(e,b*.5);k2(f,b*-.5);lB(a,e,f,0.0,c);i=d;return}function lB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0,aa=0.0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0;h=i;i=i+368|0;j=b;b=i;i=i+8|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];j=d;d=i;i=i+8|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];j=h|0;k=h+8|0;l=h+16|0;m=h+32|0;n=h+40|0;o=h+48|0;p=h+56|0;q=h+64|0;r=h+72|0;s=h+80|0;t=h+88|0;u=h+96|0;v=h+104|0;w=h+120|0;x=h+128|0;y=h+136|0;z=h+144|0;A=h+152|0;B=h+160|0;C=h+168|0;D=h+176|0;E=h+184|0;F=h+192|0;G=h+208|0;H=h+216|0;I=h+224|0;J=h+232|0;K=h+240|0;L=h+248|0;M=h+256|0;N=h+264|0;O=h+272|0;P=h+280|0;Q=h+296|0;R=h+304|0;S=h+312|0;T=h+320|0;U=h+328|0;V=h+336|0;W=h+344|0;X=h+352|0;Y=h+360|0;lo(j,1);lq(k,0);Z=+g[d>>2];_=-0.0- +g[b+4>>2];eT(l,Z,e,_);jy(a,l);lp(m,1);l=jT(a)|0;$=c[j>>2]|0;c[o>>2]=$;j=c[m>>2]|0;c[p>>2]=j;m=c[k>>2]|0;c[q>>2]=m;lr(n,l,o,p,q);kg(a,n);n=jT(a)|0;c[s>>2]=$;c[t>>2]=j;c[u>>2]=m;ls(r,n,s,t,u);kj(a,r);aa=-0.0- +g[d+4>>2];eT(v,Z,e,aa);jy(a,v);lp(w,0);v=jT(a)|0;c[y>>2]=$;d=c[w>>2]|0;c[z>>2]=d;c[A>>2]=m;lr(x,v,y,z,A);kg(a,x);x=jT(a)|0;c[C>>2]=$;c[D>>2]=d;c[E>>2]=m;ls(B,x,C,D,E);kj(a,B);Z=+g[b>>2];eT(F,Z,e,aa);jy(a,F);lp(G,2);F=jT(a)|0;c[I>>2]=$;b=c[G>>2]|0;c[J>>2]=b;c[K>>2]=m;lr(H,F,I,J,K);kg(a,H);H=jT(a)|0;c[M>>2]=$;c[N>>2]=b;c[O>>2]=m;ls(L,H,M,N,O);kj(a,L);L=(f|0)!=0;if(L){jG(a,jo(jT(a)|0)|0)}eT(P,Z,e,_);jy(a,P);lp(Q,3);P=jT(a)|0;c[S>>2]=$;f=c[Q>>2]|0;c[T>>2]=f;c[U>>2]=m;lr(R,P,S,T,U);kg(a,R);R=jT(a)|0;c[W>>2]=$;c[X>>2]=f;c[Y>>2]=m;ls(V,R,W,X,Y);kj(a,V);if(!L){ab=a+12|0;ac=h1(ab)|0;ad=ac-4|0;kb(a,0,1,2,3,ad);ae=a|0;af=hU(ae)|0;ag=af-6|0;jJ(a,ag,6);i=h;return}jG(a,jo(jT(a)|0)|0);ab=a+12|0;ac=h1(ab)|0;ad=ac-4|0;kb(a,0,1,2,3,ad);ae=a|0;af=hU(ae)|0;ag=af-6|0;jJ(a,ag,6);i=h;return}function lC(a,b,d,e,f,h,j,k,l,m,n){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=+h;j=+j;k=+k;l=+l;m=+m;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0.0,bh=0,bi=0,bj=0,bk=0.0,bl=0,bm=0,bn=0,bo=0.0,bp=0.0,bq=0.0,br=0.0,bs=0,bt=0,bu=0;o=i;i=i+1720|0;p=o|0;q=o+40|0;r=o+80|0;s=o+120|0;t=o+264|0;u=o+280|0;v=o+296|0;w=o+312|0;x=o+328|0;y=o+344|0;z=o+360|0;A=o+376|0;B=o+392|0;C=o+408|0;D=o+424|0;E=o+440|0;F=o+456|0;G=o+472|0;H=o+488|0;I=o+504|0;J=o+520|0;K=o+536|0;L=o+552|0;M=o+568|0;N=o+584|0;O=o+600|0;P=o+616|0;Q=o+632|0;R=o+648|0;S=o+664|0;T=o+680|0;U=o+720|0;V=o+760|0;W=o+768|0;X=o+784|0;Y=o+816|0;Z=o+832|0;_=o+848|0;$=o+864|0;aa=o+872|0;ab=o+880|0;ac=o+888|0;ad=o+896|0;ae=o+904|0;af=o+912|0;ag=o+920|0;ah=o+928|0;ai=o+936|0;aj=o+944|0;ak=o+952|0;al=o+960|0;am=o+968|0;an=o+976|0;ao=o+1072|0;ap=o+1080|0;aq=o+1088|0;ar=o+1096|0;as=o+1104|0;at=o+1112|0;au=o+1120|0;av=o+1128|0;aw=o+1136|0;ax=o+1144|0;ay=o+1152|0;az=o+1160|0;aA=o+1168|0;aB=o+1176|0;aC=o+1184|0;aD=o+1192|0;aE=o+1200|0;aF=o+1208|0;aG=o+1216|0;aH=o+1224|0;aI=o+1232|0;aJ=o+1240|0;aK=o+1248|0;aL=o+1256|0;aM=o+1264|0;aN=o+1272|0;aO=o+1280|0;aP=o+1288|0;aQ=o+1296|0;aR=o+1304|0;aS=o+1312|0;aT=o+1320|0;aU=o+1328|0;aV=o+1336|0;aW=o+1344|0;aX=o+1352|0;aY=o+1360|0;aZ=o+1552|0;a_=o+1560|0;a$=o+1568|0;a0=o+1576|0;a1=o+1584|0;a2=o+1592|0;a3=o+1600|0;a4=o+1608|0;a5=o+1616|0;a6=o+1624|0;a7=o+1632|0;a8=o+1640|0;a9=o+1648|0;ba=o+1656|0;bb=o+1664|0;bc=o+1672|0;bd=o+1680|0;be=o+1688|0;bf=o+1704|0;bg=e*.5;e=f*.5;f=h*.5;h=j*.5;j=k*.5;bh=a|0;bi=hU(bh)|0;bj=h1(a+12|0)|0;if(j<0.0){bk=-0.0-d}else{bk=d}d=+(b|0);uY(p,180.0/d,0.0,1.0,0.0);uY(q,m*180.0/d,0.0,1.0,0.0);uY(r,m*-360.0/d,0.0,1.0,0.0);bl=s|0;d=bk*.5;eT(t,bg,d,0.0);jz(bl,t);t=s+12|0;bm=v;bn=s;c[bm>>2]=c[bn>>2];c[bm+4>>2]=c[bn+4>>2];c[bm+8>>2]=c[bn+8>>2];kq(u,p,v);jz(t,u);u=s+24|0;eT(w,f,d,0.0);jz(u,w);w=s+36|0;v=y;bn=u;c[v>>2]=c[bn>>2];c[v+4>>2]=c[bn+4>>2];c[v+8>>2]=c[bn+8>>2];kq(x,p,y);jz(w,x);x=s+48|0;m=f+j;eT(B,m,d,0.0);kq(A,p,B);kq(z,q,A);jz(x,z);z=s+60|0;A=E;B=x;c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];kq(D,p,E);kq(C,r,D);jz(z,C);C=s+72|0;d=bk*-.5;eT(F,e,d,0.0);jz(C,F);F=s+84|0;D=H;E=C;c[D>>2]=c[E>>2];c[D+4>>2]=c[E+4>>2];c[D+8>>2]=c[E+8>>2];kq(G,p,H);jz(F,G);G=s+96|0;eT(I,h,d,0.0);jz(G,I);I=s+108|0;H=K;D=G;c[H>>2]=c[D>>2];c[H+4>>2]=c[D+4>>2];c[H+8>>2]=c[D+8>>2];kq(J,p,K);jz(I,J);J=s+120|0;j=h+l*.5;eT(N,j,d,0.0);kq(M,p,N);kq(L,q,M);jz(J,L);L=s+132|0;M=Q;q=J;c[M>>2]=c[q>>2];c[M+4>>2]=c[q+4>>2];c[M+8>>2]=c[q+8>>2];kq(P,p,Q);kq(O,r,P);jz(L,O);if((n&1|0)!=0){n=S;O=s;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(bl,R);O=t;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(t,R);c[n>>2]=c[bn>>2];c[n+4>>2]=c[bn+4>>2];c[n+8>>2]=c[bn+8>>2];kq(R,p,S);jz(u,R);O=w;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(w,R);c[n>>2]=c[B>>2];c[n+4>>2]=c[B+4>>2];c[n+8>>2]=c[B+8>>2];kq(R,p,S);jz(x,R);O=z;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(z,R);c[n>>2]=c[E>>2];c[n+4>>2]=c[E+4>>2];c[n+8>>2]=c[E+8>>2];kq(R,p,S);jz(C,R);O=F;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(F,R);c[n>>2]=c[D>>2];c[n+4>>2]=c[D+4>>2];c[n+8>>2]=c[D+8>>2];kq(R,p,S);jz(G,R);O=I;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(I,R);c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];kq(R,p,S);jz(J,R);O=L;c[n>>2]=c[O>>2];c[n+4>>2]=c[O+4>>2];c[n+8>>2]=c[O+8>>2];kq(R,p,S);jz(L,R)}Zp(U|0,p|0,36);lv(T,p,U);lu(p,T);d=+kN(m,j);g[V>>2]=+kN(d,+kN(bg,e));jc(W,t,bl);e=+jO(W);Zq(X|0,0,32);jc(Y,w,u);bg=+jO(Y);W=X|0;g[W>>2]=bg;T=X+12|0;g[T>>2]=bg+ +g[T>>2];jc(Y,I,G);bg=+jO(Y);g[X+16>>2]=bg;U=X+28|0;g[U>>2]=bg+ +g[U>>2];jc(Y,x,w);bg=+jO(Y);R=X+4|0;g[R>>2]=bg;g[T>>2]=bg+ +g[T>>2]+bg;jc(Y,J,I);bg=+jO(Y);g[X+20>>2]=bg;d=bg+ +g[U>>2]+bg;jc(Y,z,x);bg=+jO(Y);S=X+8|0;g[S>>2]=bg;j=bg+ +g[T>>2];g[T>>2]=j;jc(Y,L,J);bg=+jO(Y);g[X+24>>2]=bg;m=bg+d;g[U>>2]=m;U=m>j?4:0;Y=X+((U|3)<<2)|0;j=+g[Y>>2];g[T>>2]=j;g[W>>2]=+g[X+(U<<2)>>2]/+g[Y>>2];m=+g[X+((U|1)<<2)>>2]/+g[Y>>2];g[R>>2]=m;d=+g[X+((U|2)<<2)>>2]/+g[Y>>2];g[S>>2]=d;S=Z|0;k2(S,0.0);Y=Z+8|0;k2(Y,.5);U=_|0;k2(U,0.0);X=_+8|0;k2(X,.5);eW($,.25,.75);eW(aa,.75,.75);if(bk<e){g[Z>>2]=1.0;bg=bk/e;g[Z+4>>2]=bg;g[Z+8>>2]=0.0;R=Z+12|0;g[R>>2]=+g[R>>2]-bg*.5;bo=1.0;bp=bg}else{bg=e/bk;g[Z>>2]=bg;g[Z+4>>2]=1.0;R=Z+8|0;g[R>>2]=+g[R>>2]-bg*.5;g[Z+12>>2]=0.0;bo=bg;bp=1.0}if(bk<j){g[_>>2]=1.0;bg=bk/j;g[_+4>>2]=bg;g[_+8>>2]=0.0;R=_+12|0;g[R>>2]=+g[R>>2]-bg*.5;bq=1.0;br=bg}else{bg=j/bk;g[_>>2]=bg;g[_+4>>2]=1.0;R=_+8|0;g[R>>2]=+g[R>>2]-bg*.5;g[_+12>>2]=0.0;bq=bg;br=1.0}do{if(bo+bq<.5){g[Z+8>>2]=0.0;g[_+8>>2]=.5-bq;eW(ab,.75,.25);fA($,ab);eW(ac,.75,.75);fA(aa,ac)}else{if(bp+br<.5){g[Z+12>>2]=0.0;g[_+12>>2]=.5-br;break}else{g[ad>>2]=.5;lD(ae,S,ad);g[af>>2]=.5;lD(ag,Y,af);g[ah>>2]=.5;lD(ai,U,ah);g[aj>>2]=.5;lD(ak,X,aj);eW(al,.5,0.0);k3(am,Y,al);break}}}while(0);br=1.0-m;eW(aq,0.0,0.0);lE(ap,aq,S);lw(ao,ap,Y);fA(an|0,ao);eW(at,1.0,0.0);lE(as,at,S);lw(ar,as,Y);fA(an+8|0,ar);eW(aw,br,0.0);lE(av,aw,U);lw(au,av,X);fA(an+40|0,au);bp=br-d;eW(az,bp,0.0);lE(ay,az,U);lw(ax,ay,X);fA(an+32|0,ax);d=bp-m;eW(aC,d,0.0);lE(aB,aC,U);lw(aA,aB,X);fA(an+24|0,aA);eW(aF,0.0,0.0);lE(aE,aF,U);lw(aD,aE,X);fA(an+16|0,aD);eW(aI,0.0,1.0);lE(aH,aI,S);lw(aG,aH,Y);fA(an+48|0,aG);eW(aL,1.0,1.0);lE(aK,aL,S);lw(aJ,aK,Y);fA(an+56|0,aJ);eW(aO,br,1.0);lE(aN,aO,U);lw(aM,aN,X);fA(an+88|0,aM);eW(aR,bp,1.0);lE(aQ,aR,U);lw(aP,aQ,X);fA(an+80|0,aP);eW(aU,d,1.0);lE(aT,aU,U);lw(aS,aT,X);fA(an+72|0,aS);eW(aX,0.0,1.0);lE(aW,aX,U);lw(aV,aW,X);fA(an+64|0,aV);if((b|0)<=0){bs=hU(bh)|0;bt=bs-bi|0;jJ(a,bi,bt);i=o;return}aV=aY|0;aW=aY+4|0;aX=aY+8|0;aS=aY+12|0;aT=aY+16|0;aU=aY+20|0;aP=aY+24|0;aQ=aY+28|0;aR=aY+32|0;aM=aY+36|0;aN=aY+40|0;aO=aY+44|0;aJ=aY+48|0;Y=aY+52|0;aK=aY+56|0;S=aY+60|0;aL=aY+64|0;aG=aY+68|0;aH=aY+72|0;aI=aY+76|0;aD=aY+80|0;aE=aY+84|0;aF=aY+88|0;aA=aY+92|0;aB=aY+96|0;aC=aY+100|0;ax=aY+104|0;ay=aY+108|0;az=aY+112|0;au=aY+116|0;av=aY+120|0;aw=aY+124|0;ar=aY+128|0;as=aY+132|0;at=aY+136|0;ao=aY+140|0;ap=aY+144|0;aq=aY+148|0;al=aY+152|0;am=aY+156|0;aj=aY+160|0;ak=aY+164|0;ah=aY+168|0;ai=aY+172|0;af=aY+176|0;ag=aY+180|0;ad=aY+184|0;ae=aY+188|0;_=bf;Z=s;ac=0;do{ab=ac*36&-1;ac=ac+1|0;R=(ac|0)==(b|0)?0:ac*36&-1;c[aV>>2]=ab;c[aW>>2]=ab;c[aX>>2]=ab;c[aS>>2]=ab;c[aT>>2]=ab;c[aU>>2]=ab;c[aP>>2]=ab;c[aQ>>2]=ab;c[aR>>2]=ab;c[aM>>2]=ab;c[aN>>2]=R;c[aO>>2]=R;c[aJ>>2]=R;c[Y>>2]=R;c[aK>>2]=ab;c[S>>2]=ab;c[aL>>2]=ab;c[aG>>2]=ab;c[aH>>2]=ab;c[aI>>2]=R;c[aD>>2]=R;c[aE>>2]=ab;c[aF>>2]=ab;c[aA>>2]=ab;c[aB>>2]=ab;c[aC>>2]=ab;c[ax>>2]=ab;c[ay>>2]=ab;c[az>>2]=ab;c[au>>2]=R;c[av>>2]=R;c[aw>>2]=ab;c[ar>>2]=ab;c[as>>2]=ab;c[at>>2]=ab;c[ao>>2]=ab;c[ap>>2]=ab;c[aq>>2]=ab;c[al>>2]=ab;c[am>>2]=ab;c[aj>>2]=ab;c[ak>>2]=ab;c[ah>>2]=ab;c[ai>>2]=ab;c[af>>2]=R;c[ag>>2]=ab;c[ad>>2]=ab;c[ae>>2]=R;R=0;while(1){ab=(R|0)/3&-1;W=(ab|0)%6&-1;T=s+(ab*12&-1)|0;jy(a,T);O=(R|0)%3&-1;do{if((O|0)==0){lx(a_,T);lF(aZ,a_,V);if((R|0)>17){g[a0>>2]=-1.0;lD(a1,aZ,a0);fA(a$,aa)}else{fA(a$,$)}k2(a4,.25);lE(a3,aZ,a4);lw(a2,a3,a$);kg(a,a2);k2(a7,.25);lE(a6,aZ,a7);lw(a5,a6,a$);kj(a,a5)}else{if(W>>>0<2){n=an+(ab<<3)|0;kg(a,n);kj(a,n);break}if((W|0)==2&(O|0)==2){d=(R-6|0)>>>0<3?0.0:1.0;eW(ba,1.0,d);lE(a9,ba,U);lw(a8,a9,X);kg(a,a8);eW(bd,1.0,d);lE(bc,bd,U);lw(bb,bc,X);kj(a,bb);break}else{n=an+(ab<<3)|0;kg(a,n);kj(a,n);break}}}while(0);if((R|0)>17){jG(a,jo(jT(a)|0)|0)}ab=R+1|0;if((ab|0)<36){R=ab}else{bu=0;break}}do{R=bu|1;ab=bu|2;O=bu|3;kb(a,(((c[49656+(bu<<2)>>2]|0)*3&-1)+(c[aY+(bu<<2)>>2]|0)|0)+(c[49848+(bu<<2)>>2]|0)|0,(((c[49656+(R<<2)>>2]|0)*3&-1)+(c[aY+(R<<2)>>2]|0)|0)+(c[49848+(R<<2)>>2]|0)|0,(((c[49656+(ab<<2)>>2]|0)*3&-1)+(c[aY+(ab<<2)>>2]|0)|0)+(c[49848+(ab<<2)>>2]|0)|0,(((c[49656+(O<<2)>>2]|0)*3&-1)+(c[aY+(O<<2)>>2]|0)|0)+(c[49848+(O<<2)>>2]|0)|0,bj);bu=bu+4|0;}while((bu|0)<48);c[_>>2]=c[Z>>2];c[_+4>>2]=c[Z+4>>2];c[_+8>>2]=c[Z+8>>2];kq(be,p,bf);jz(bl,be);O=t;c[_>>2]=c[O>>2];c[_+4>>2]=c[O+4>>2];c[_+8>>2]=c[O+8>>2];kq(be,p,bf);jz(t,be);c[_>>2]=c[bn>>2];c[_+4>>2]=c[bn+4>>2];c[_+8>>2]=c[bn+8>>2];kq(be,p,bf);jz(u,be);O=w;c[_>>2]=c[O>>2];c[_+4>>2]=c[O+4>>2];c[_+8>>2]=c[O+8>>2];kq(be,p,bf);jz(w,be);c[_>>2]=c[B>>2];c[_+4>>2]=c[B+4>>2];c[_+8>>2]=c[B+8>>2];kq(be,p,bf);jz(x,be);O=z;c[_>>2]=c[O>>2];c[_+4>>2]=c[O+4>>2];c[_+8>>2]=c[O+8>>2];kq(be,p,bf);jz(z,be);c[_>>2]=c[E>>2];c[_+4>>2]=c[E+4>>2];c[_+8>>2]=c[E+8>>2];kq(be,p,bf);jz(C,be);O=F;c[_>>2]=c[O>>2];c[_+4>>2]=c[O+4>>2];c[_+8>>2]=c[O+8>>2];kq(be,p,bf);jz(F,be);c[_>>2]=c[D>>2];c[_+4>>2]=c[D+4>>2];c[_+8>>2]=c[D+8>>2];kq(be,p,bf);jz(G,be);O=I;c[_>>2]=c[O>>2];c[_+4>>2]=c[O+4>>2];c[_+8>>2]=c[O+8>>2];kq(be,p,bf);jz(I,be);c[_>>2]=c[q>>2];c[_+4>>2]=c[q+4>>2];c[_+8>>2]=c[q+8>>2];kq(be,p,bf);jz(J,be);O=L;c[_>>2]=c[O>>2];c[_+4>>2]=c[O+4>>2];c[_+8>>2]=c[O+8>>2];kq(be,p,bf);jz(L,be);}while((ac|0)<(b|0));bs=hU(bh)|0;bt=bs-bi|0;jJ(a,bi,bt);i=o;return}function lD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+8|0;f=e|0;nJ(f,b,d);d=fA(b,f)|0;f=a;a=c[d+4>>2]|0;c[f>>2]=c[d>>2];c[f+4>>2]=a;i=e;return}function lE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fP(b,0)>>2];e=d*+g[fP(c,0)>>2];g[fQ(a,0)>>2]=e;e=+g[fP(b,1)>>2];d=e*+g[fP(c,1)>>2];g[fQ(a,1)>>2]=d;return}function lF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fP(b,0)>>2];e=d/+g[c>>2];g[fQ(a,0)>>2]=e;e=+g[fP(b,1)>>2];d=e/+g[c>>2];g[fQ(a,1)>>2]=d;return}function lG(a,b){a=a|0;b=+b;var d=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;d=i;i=i+128|0;f=d|0;h=d+8|0;j=d+24|0;k=d+32|0;l=d+48|0;m=d+64|0;n=d+80|0;o=d+96|0;p=d+112|0;g[f>>2]=b;q=a+12|0;r=h1(q)|0;s=a+24|0;t=r-(c[j3(s)>>2]|0)|0;r=a|0;a=hU(r)|0;u=a-(c[(j3(s)|0)+4>>2]|0)|0;s=(u|0)/3&-1;a=cJ(s|0,4)|0;v=Zn(K?-1:a)|0;a=(u|0)>2;if(a){Zq(v|0,-1|0,((u|0)>5?s<<2:4)|0)}v=cJ(t|0,4)|0;w=Zn(K?-1:v)|0;v=w;Zq(w|0,0,t<<2|0);if((u|0)>0){t=0;do{w=v+((e[iz(r,t)>>1]|0)<<2)|0;c[w>>2]=(c[w>>2]|0)+1;t=t+1|0;}while((t|0)<(u|0))}if(a){x=0}else{i=d;return}do{g[j>>2]=.3333333432674408;a=x*3&-1;u=iC(q,e[iz(r,a)>>1]|0)|0;jC(l,u,iC(q,e[iz(r,a+1|0)>>1]|0)|0);jC(k,l,iC(q,e[iz(r,a+2|0)>>1]|0)|0);lb(h,j,k);u=0;do{t=iC(q,e[iz(r,u+a|0)>>1]|0)|0;jc(o,t,h);jB(n,o);jD(m,n,f);lH(p,t,m);u=u+1|0;}while((u|0)<3);x=x+1|0;}while((x|0)<(s|0));i=d;return}function lH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e|0;jc(f,b,d);d=a;a=jz(b,f)|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];i=e;return}function lI(a,b){a=a|0;b=b|0;lP(a,b,0);return}function lJ(a,b){a=a|0;b=b|0;return}function lK(a){a=a|0;return c[a+4>>2]|0}function lL(a,b){a=a|0;b=b|0;return a+((2>>>(1-b<<2>>>0)&3)<<2)|0}function lM(a,b){a=a|0;b=b|0;return(a|0)+(b*12&-1)|0}function lN(a,b){a=a|0;b=b|0;return a+((35>>>(1-b<<2>>>0)&3)<<2)|0}function lO(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+12>>2]=f;return}function lP(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;g=i;i=i+16|0;h=g|0;if((d|0)==0){j=a+24|0;k=a|0;l=j3(j)|0;m=l+4|0;n=c[m>>2]|0;o=hU(k)|0;p=j3(j)|0;q=p+4|0;r=c[q>>2]|0;s=o-r|0;jJ(a,n,s);i=g;return}t=a|0;u=a+24|0;v=a+12|0;w=(f|0)==0;x=h;y=d;while(1){d=y-1|0;z=hU(t)|0;A=c[(j3(u)|0)+4>>2]|0;if((A|0)<(z|0)){B=A;do{A=h1(v)|0;C=e[iz(t,B)>>1]|0;D=B+1|0;j0(a,C,e[iz(t,D)>>1]|0,.5);if(w){C=e[iz(t,D)>>1]|0;E=B+2|0;j0(a,C,e[iz(t,E)>>1]|0,.5);C=e[iz(t,E)>>1]|0;j0(a,C,e[iz(t,B)>>1]|0,.5)}else{C=iC(v,A)|0;c[x>>2]=c[C>>2];c[x+4>>2]=c[C+4>>2];c[x+8>>2]=c[C+8>>2];ja(f,A,h);C=e[iz(t,D)>>1]|0;D=B+2|0;j0(a,C,e[iz(t,D)>>1]|0,.5);C=A+1|0;E=iC(v,C)|0;c[x>>2]=c[E>>2];c[x+4>>2]=c[E+4>>2];c[x+8>>2]=c[E+8>>2];ja(f,C,h);C=e[iz(t,D)>>1]|0;j0(a,C,e[iz(t,B)>>1]|0,.5);C=A+2|0;D=iC(v,C)|0;c[x>>2]=c[D>>2];c[x+4>>2]=c[D+4>>2];c[x+8>>2]=c[D+8>>2];ja(f,C,h)}C=B+1|0;D=A+1|0;jH(a,A,e[iz(t,C)>>1]|0,D,0);E=A+2|0;F=B+2|0;jH(a,E,D,e[iz(t,F)>>1]|0,0);jH(a,A,D,E,0);b[iz(t,C)>>1]=A&65535;b[iz(t,F)>>1]=E&65535;B=B+3|0;}while((B|0)<(z|0))}if((d|0)==0){j=u;k=t;break}else{y=d}}l=j3(j)|0;m=l+4|0;n=c[m>>2]|0;o=hU(k)|0;p=j3(j)|0;q=p+4|0;r=c[q>>2]|0;s=o-r|0;jJ(a,n,s);i=g;return}function lQ(a){a=a|0;nG(a);return}function lR(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<2)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<2)|0;if((h|0)!=0){c[h>>2]=c[(c[g>>2]|0)+(a<<2)>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function lS(a){a=a|0;j6(a,0,c[a+4>>2]|0);return}function lT(a,b){a=a|0;b=b|0;nE(b,a+12|0);return(i1(b|0)|0)>0|0}function lU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[my(b,0)>>2];e=d/+g[c>>2];g[kP(a,0)>>2]=e;e=+g[my(b,1)>>2];d=e/+g[c>>2];g[kP(a,1)>>2]=d;d=+g[my(b,2)>>2];e=d/+g[c>>2];g[kP(a,2)>>2]=e;return}function lV(a){a=a|0;m1(a);return}function lW(a,b){a=a|0;b=b|0;eI(a,20152);return}function lX(a,b){a=a|0;b=b|0;eI(a,20368);return}function lY(a,b){a=a|0;b=b|0;eI(a,45272);return}function lZ(a,b){a=a|0;b=b|0;eI(a,8456);return}function l_(a){a=a|0;m0(a);return}function l$(a){a=a|0;l_(a);Zg(a);return}function l0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*12&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*12&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*12&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function l1(a,b){a=a|0;b=b|0;var c=0.0;c=+g[lL(b,0)>>2];fT(a|0,c,+g[lL(b,1)>>2]);return}function l2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=b;b=i;i=i+12|0;i=i+7>>3<<3;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];g=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];g=e;e=i;i=i+12|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];l3(a,b,d,e);i=f;return}function l3(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;g=b;b=i;i=i+12|0;i=i+7>>3<<3;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];g=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];g=e;e=i;i=i+12|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];g=a;h=b;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];h=a+12|0;g=d;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];g=a+24|0;a=e;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];i=f;return}function l4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;f=b;b=i;i=i+8|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];f=d;d=i;i=i+8|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fN(a|0,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);i=e;return}function l5(a,b){a=a|0;b=b|0;var c=0.0;c=+g[lN(b,0)>>2];fT(a|0,c,+g[lN(b,1)>>2]);return}function l6(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*88&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*88&-1)|0;if((h|0)!=0){Zp(h|0,(c[g>>2]|0)+(a*88&-1)|0,88)}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function l7(a,b){a=a|0;b=b|0;lO(a|0,b,b,b,b);return}function l8(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0;f=i;i=i+240|0;h=f|0;j=f+24|0;k=f+48|0;l=f+64|0;m=f+80|0;n=f+96|0;o=f+112|0;p=f+128|0;q=f+144|0;r=f+160|0;s=f+176|0;t=f+184|0;u=f+200|0;v=f+216|0;w=f+232|0;lQ(h);k7(j|0);k7(j+12|0);i5(k);i5(l);i5(m);x=a+24|0;y=c[j3(x)>>2]|0;z=a+12|0;if((y|0)<(h1(z)|0)){A=n;B=y;do{y=iC(z,B)|0;c[A>>2]=c[y>>2];c[A+4>>2]=c[y+4>>2];c[A+8>>2]=c[y+8>>2];ja(h,B,n);B=B+1|0;}while((B|0)<(h1(z)|0))}if((b|0)==0){i7(m);i7(l);i7(k);C=j+12|0;lf(C);D=j|0;lf(D);lV(h);i=f;return}B=l|0;n=m|0;A=j|0;y=j+12|0;E=(e|0)==0;F=k|0;G=a|0;H=0;I=b;while(1){b=I-1|0;lP(a,d,h);J=h1(z)|0;lR(B,J-(c[j3(x)>>2]|0)|0);J=h1(z)|0;lR(n,J-(c[j3(x)>>2]|0)|0);J=h1(z)|0;l9(A,J-(c[j3(x)>>2]|0)|0,o);J=h1(z)|0;l9(y,J-(c[j3(x)>>2]|0)|0,p);J=c[j3(x)>>2]|0;if((J|0)<(h1(z)|0)){K=j+(H*12&-1)|0;L=J;do{J=lk(K,L-(c[j3(x)>>2]|0)|0)|0;jz(J,iC(z,L)|0);L=L+1|0;}while((L|0)<(h1(z)|0))}if(E){M=H}else{L=H;K=e;while(1){J=K-1|0;lS(F);do{if(lT(h,k)|0){if((i1(F)|0)<=0){break}N=j+(L*12&-1)|0;O=j+((1-L|0)*12&-1)|0;P=0;do{lS(n);Q=c[jg(F,P)>>2]|0;do{if(i4(h,Q,G,c[(j3(x)|0)+4>>2]|0,m,0)|0){js(q,0.0);R=i1(n)|0;if((R|0)>0){S=0;while(1){T=c[jg(n,S)>>2]|0;kl(r,q,lk(N,T-(c[j3(x)>>2]|0)|0)|0);T=S+1|0;U=i1(n)|0;if((T|0)<(U|0)){S=T}else{V=U;break}}}else{V=R}W=+(V|0);X=+lh(6.2831854820251465/W)*2.0+3.0;Y=1.25-X*X*.03125;g[s>>2]=W*(1.0-Y)/Y;S=c[jg(F,P)>>2]|0;lb(v,s,lk(N,S-(c[j3(x)>>2]|0)|0)|0);jC(u,v,q);g[w>>2]=W+ +g[s>>2];lU(t,u,w);lS(B);S=jg(F,P)|0;i3(B,S);S=c[jg(F,P)>>2]|0;iX(h,S,l);if((i1(B)|0)>0){Z=0}else{break}do{S=c[jg(B,Z)>>2]|0;jz(lk(O,S-(c[j3(x)>>2]|0)|0)|0,t);Z=Z+1|0;}while((Z|0)<(i1(B)|0))}}while(0);P=P+1|0;}while((P|0)<(i1(F)|0))}}while(0);P=1-L|0;if((J|0)==0){M=P;break}else{L=P;K=J}}}K=j+(M*12&-1)|0;if((lK(K)|0)>0){L=0;do{P=iC(z,(c[j3(x)>>2]|0)+L|0)|0;jz(P|0,lk(K,L)|0);L=L+1|0;}while((L|0)<(lK(K)|0))}if((b|0)==0){break}else{H=M;I=b}}i7(m);i7(l);i7(k);C=j+12|0;lf(C);D=j|0;lf(D);lV(h);i=f;return}function l9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;f=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];if((b|0)<=0){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=202,c[B+16>>2]=3040,B)|0);hY()}l0(a,b);f=a+4|0;g=c[f>>2]|0;if((g|0)>=(b|0)){c[f>>2]=b;i=e;return}h=a|0;a=d;d=g;do{g=(c[h>>2]|0)+(d*12&-1)|0;if((g|0)!=0){j=g;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2]}d=d+1|0;}while((d|0)<(b|0));c[f>>2]=b;i=e;return}function ma(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;return}function mb(a,b){a=a|0;b=b|0;return a+((1>>>(1-b<<2>>>0)&3)<<2)|0}function mc(a,b){a=a|0;b=b|0;return(a|0)+b|0}function md(a,b){a=a|0;b=b|0;jz(a|0,b|0);c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];g[a+20>>2]=+g[b+20>>2];return a|0}function me(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<4)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<4)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a<<4)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*20&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*20&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*20&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<3)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<3)|0;if((h|0)!=0){i=(c[g>>2]|0)+(a<<3)|0;j=h;h=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=h}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*12&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*12&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*12&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*28&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*28&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*28&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];c[i+20>>2]=c[h+20>>2];c[i+24>>2]=c[h+24>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mj(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;p=i;i=i+96|0;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];q=p|0;r=p+8|0;s=p+16|0;t=p+24|0;u=p+32|0;v=p+40|0;w=p+48|0;x=p+56|0;y=p+64|0;z=p+72|0;A=p+80|0;B=p+88|0;C=a|0;c[q>>2]=c[b>>2];mk(C,0,q);c[r>>2]=c[d>>2];mk(C,1,r);c[s>>2]=c[e>>2];ml(C,2,s);c[t>>2]=c[f>>2];fh(C,3,t);c[u>>2]=c[g>>2];fh(C,4,u);c[v>>2]=c[h>>2];fh(C,5,v);c[w>>2]=c[j>>2];fh(C,6,w);c[x>>2]=c[k>>2];fh(C,7,x);c[y>>2]=c[l>>2];fh(C,8,y);c[z>>2]=c[m>>2];fh(C,9,z);c[A>>2]=c[n>>2];fh(C,10,A);c[B>>2]=c[o>>2];fh(C,11,B);i=p;return}function mk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];a[b+(d*3&-1)|0]=7;a[b+(d*3&-1)+1|0]=fi(e)&255;a[b+(d*3&-1)+2|0]=12;i=f;return}function ml(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];a[b+(d*3&-1)|0]=20;a[b+(d*3&-1)+1|0]=fi(e)&255;a[b+(d*3&-1)+2|0]=4;i=f;return}function mm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*36&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*36&-1)|0;if((h|0)!=0){Zp(h|0,(c[g>>2]|0)+(a*36&-1)|0,36)}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mn(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;p=i;i=i+96|0;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];q=p|0;r=p+8|0;s=p+16|0;t=p+24|0;u=p+32|0;v=p+40|0;w=p+48|0;x=p+56|0;y=p+64|0;z=p+72|0;A=p+80|0;B=p+88|0;C=a|0;c[q>>2]=c[b>>2];mk(C,0,q);c[r>>2]=c[d>>2];mk(C,1,r);c[s>>2]=c[e>>2];ml(C,2,s);c[t>>2]=c[f>>2];ft(C,3,t);c[u>>2]=c[g>>2];fh(C,4,u);c[v>>2]=c[h>>2];fh(C,5,v);c[w>>2]=c[j>>2];fh(C,6,w);c[x>>2]=c[k>>2];fh(C,7,x);c[y>>2]=c[l>>2];fh(C,8,y);c[z>>2]=c[m>>2];fh(C,9,z);c[A>>2]=c[n>>2];fh(C,10,A);c[B>>2]=c[o>>2];fh(C,11,B);i=p;return}function mo(a,b){a=a|0;b=b|0;var c=0.0;c=+g[mb(b,0)>>2];fT(a|0,c,+g[mb(b,1)>>2]);return}function mp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*20&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*20&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*20&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mq(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;p=i;i=i+96|0;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];q=p|0;r=p+8|0;s=p+16|0;t=p+24|0;u=p+32|0;v=p+40|0;w=p+48|0;x=p+56|0;y=p+64|0;z=p+72|0;A=p+80|0;B=p+88|0;C=a|0;c[q>>2]=c[b>>2];mk(C,0,q);c[r>>2]=c[d>>2];ft(C,1,r);c[s>>2]=c[e>>2];fh(C,2,s);c[t>>2]=c[f>>2];fh(C,3,t);c[u>>2]=c[g>>2];fh(C,4,u);c[v>>2]=c[h>>2];fh(C,5,v);c[w>>2]=c[j>>2];fh(C,6,w);c[x>>2]=c[k>>2];fh(C,7,x);c[y>>2]=c[l>>2];fh(C,8,y);c[z>>2]=c[m>>2];fh(C,9,z);c[A>>2]=c[n>>2];fh(C,10,A);c[B>>2]=c[o>>2];fh(C,11,B);i=p;return}function mr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*28&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*28&-1)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a*28&-1)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];c[i+20>>2]=c[h+20>>2];c[i+24>>2]=c[h+24>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function ms(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;p=i;i=i+96|0;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];q=p|0;r=p+8|0;s=p+16|0;t=p+24|0;u=p+32|0;v=p+40|0;w=p+48|0;x=p+56|0;y=p+64|0;z=p+72|0;A=p+80|0;B=p+88|0;C=a|0;c[q>>2]=c[b>>2];mk(C,0,q);c[r>>2]=c[d>>2];mt(C,1,r);c[s>>2]=c[e>>2];fh(C,2,s);c[t>>2]=c[f>>2];fh(C,3,t);c[u>>2]=c[g>>2];fh(C,4,u);c[v>>2]=c[h>>2];fh(C,5,v);c[w>>2]=c[j>>2];fh(C,6,w);c[x>>2]=c[k>>2];fh(C,7,x);c[y>>2]=c[l>>2];fh(C,8,y);c[z>>2]=c[m>>2];fh(C,9,z);c[A>>2]=c[n>>2];fh(C,10,A);c[B>>2]=c[o>>2];fh(C,11,B);i=p;return}function mt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[g>>2];a[b+(d*3&-1)|0]=8;a[b+(d*3&-1)+1|0]=fi(e)&255;a[b+(d*3&-1)+2|0]=16;i=f;return}function mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;l=f+(a<<4)|0;m=f+(b<<4)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];m=a+1|0;l=m+d|0;f=c[g>>2]|0;if((l|0)<(f|0)){a=m;b=l}else{j=f;break}}k=j-d|0;c[g>>2]=k;i=e;return}function mv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;md(f+(a*24&-1)|0,f+(b*24&-1)|0);f=a+1|0;l=f+d|0;m=c[g>>2]|0;if((l|0)<(m|0)){a=f;b=l}else{j=m;break}}k=j-d|0;c[g>>2]=k;i=e;return}function mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;l=f+(b<<3)|0;m=f+(a<<3)|0;f=c[l+4>>2]|0;c[m>>2]=c[l>>2];c[m+4>>2]=f;f=a+1|0;m=f+d|0;l=c[g>>2]|0;if((m|0)<(l|0)){a=f;b=m}else{j=l;break}}k=j-d|0;c[g>>2]=k;i=e;return}function mx(a,b){a=a|0;b=b|0;return a+((18>>>(2-b<<2>>>0)&3)<<2)|0}function my(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function mz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*44&-1)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a*44&-1)|0;if((h|0)!=0){Zp(h|0,(c[g>>2]|0)+(a*44&-1)|0,44)}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mA(a,b,d,e,f,g,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;p=i;i=i+96|0;q=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[q>>2];q=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[q>>2];q=e;e=i;i=i+4|0;i=i+7>>3<<3;c[e>>2]=c[q>>2];q=f;f=i;i=i+4|0;i=i+7>>3<<3;c[f>>2]=c[q>>2];q=g;g=i;i=i+4|0;i=i+7>>3<<3;c[g>>2]=c[q>>2];q=h;h=i;i=i+4|0;i=i+7>>3<<3;c[h>>2]=c[q>>2];q=j;j=i;i=i+4|0;i=i+7>>3<<3;c[j>>2]=c[q>>2];q=k;k=i;i=i+4|0;i=i+7>>3<<3;c[k>>2]=c[q>>2];q=l;l=i;i=i+4|0;i=i+7>>3<<3;c[l>>2]=c[q>>2];q=m;m=i;i=i+4|0;i=i+7>>3<<3;c[m>>2]=c[q>>2];q=n;n=i;i=i+4|0;i=i+7>>3<<3;c[n>>2]=c[q>>2];q=o;o=i;i=i+4|0;i=i+7>>3<<3;c[o>>2]=c[q>>2];q=p|0;r=p+8|0;s=p+16|0;t=p+24|0;u=p+32|0;v=p+40|0;w=p+48|0;x=p+56|0;y=p+64|0;z=p+72|0;A=p+80|0;B=p+88|0;C=a|0;c[q>>2]=c[b>>2];mk(C,0,q);c[r>>2]=c[d>>2];mk(C,1,r);c[s>>2]=c[e>>2];ml(C,2,s);c[t>>2]=c[f>>2];mt(C,3,t);c[u>>2]=c[g>>2];fh(C,4,u);c[v>>2]=c[h>>2];fh(C,5,v);c[w>>2]=c[j>>2];fh(C,6,w);c[x>>2]=c[k>>2];fh(C,7,x);c[y>>2]=c[l>>2];fh(C,8,y);c[z>>2]=c[m>>2];fh(C,9,z);c[A>>2]=c[n>>2];fh(C,10,A);c[B>>2]=c[o>>2];fh(C,11,B);i=p;return}function mB(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+8|0;if((c[e>>2]|0)>=(d|0)){return}f=Zn(d<<1)|0;g=c[a+4>>2]|0;h=a|0;if((g|0)>0){a=0;do{i=f+(a<<1)|0;if((i|0)!=0){b[i>>1]=b[(c[h>>2]|0)+(a<<1)>>1]|0}a=a+1|0;}while((a|0)<(g|0))}g=c[h>>2]|0;if((g|0)!=0){Zh(g)}c[h>>2]=f;c[e>>2]=d;return}function mC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<4)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<4)|0;if((h|0)!=0){i=h;h=(c[g>>2]|0)+(a<<4)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mD(a,b){a=a|0;b=b|0;mE(a|0,fO(b,0)|0);mE(a+12|0,fO(b,1)|0);mE(a+24|0,fO(b,2)|0);return}function mE(a,b){a=a|0;b=b|0;mF(a,b);return}function mF(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[mx(b,0)>>2];d=+g[mx(b,1)>>2];fU(a|0,c,d,+g[mx(b,2)>>2]);return}function mG(a,b){a=a|0;b=b|0;mM(a,b);return}function mH(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*24&-1)|0;f=a+4|0;g=a|0;if((c[f>>2]|0)>0){a=0;do{h=e+(a*24&-1)|0;if((h|0)!=0){mI(h,(c[g>>2]|0)+(a*24&-1)|0)}mJ((c[g>>2]|0)+(a*24&-1)|0);a=a+1|0;}while((a|0)<(c[f>>2]|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mI(a,b){a=a|0;b=b|0;mL(a,b);return}function mJ(a){a=a|0;mK(a);return}function mK(a){a=a|0;eJ(a|0);return}function mL(a,b){a=a|0;b=b|0;var d=0,e=0;mG(a|0,b|0);d=b+16|0;b=c[d+4>>2]|0;e=a+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=b;return}function mM(a,b){a=a|0;b=b|0;mN(a|0,b|0);return}function mN(a,b){a=a|0;b=b|0;mO(a|0,b|0);return}function mO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=b|0;c[e>>2]=0;f=b+4|0;c[f>>2]=0;c[b+8>>2]=0;g=d+4|0;gV(b,c[g>>2]|0);b=c[g>>2]|0;if((b|0)>0){h=0;i=b}else{j=b;c[f>>2]=j;return}while(1){b=(c[e>>2]|0)+h|0;if((b|0)==0){k=i}else{a[b]=a[m5(d,h)|0]|0;k=c[g>>2]|0}b=h+1|0;if((b|0)<(k|0)){h=b;i=k}else{j=k;break}}c[f>>2]=j;return}function mP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b*24&-1)|0;f=a+4|0;g=a|0;if((c[f>>2]|0)>0){a=0;do{h=e+(a*24&-1)|0;if((h|0)!=0){mQ(h,(c[g>>2]|0)+(a*24&-1)|0)}mR((c[g>>2]|0)+(a*24&-1)|0);a=a+1|0;}while((a|0)<(c[f>>2]|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function mQ(a,b){a=a|0;b=b|0;mT(a,b);return}function mR(a){a=a|0;mS(a);return}function mS(a){a=a|0;eJ(a|0);return}function mT(a,b){a=a|0;b=b|0;var d=0;mG(a|0,b|0);d=a+12|0;a=b+12|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];return}function mU(a,b){a=a|0;b=b|0;var d=0,e=0;mV(a|0,b|0);d=b+16|0;b=c[d+4>>2]|0;e=a+16|0;c[e>>2]=c[d>>2];c[e+4>>2]=b;return a|0}function mV(a,b){a=a|0;b=b|0;mW(a|0,b|0);return a|0}function mW(a,b){a=a|0;b=b|0;mX(a|0,b|0);return a|0}function mX(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if((b|0)==(d|0)){return b|0}e=d+4|0;f=c[e>>2]|0;do{if((c[b+8>>2]|0)<(f|0)){gV(b,f);g=b+4|0;h=c[g>>2]|0;L2795:do{if((h|0)>0){i=b|0;j=0;k=h;while(1){if((j|0)>=(c[e>>2]|0)){l=k;break L2795}m=a[m5(d,j)|0]|0;a[(c[i>>2]|0)+j|0]=m;m=j+1|0;n=c[g>>2]|0;if((m|0)<(n|0)){j=m;k=n}else{l=n;break}}}else{l=h}}while(0);h=c[e>>2]|0;if((l|0)>=(h|0)){o=h;break}g=b|0;k=l;j=h;while(1){h=(c[g>>2]|0)+k|0;if((h|0)==0){p=j}else{a[h]=a[m5(d,k)|0]|0;p=c[e>>2]|0}h=k+1|0;if((h|0)<(p|0)){k=h;j=p}else{o=p;break}}}else{j=b+4|0;k=c[j>>2]|0;L2782:do{if((k|0)>0){g=b|0;h=0;i=k;n=f;while(1){if((h|0)>=(n|0)){q=i;r=n;break L2782}m=a[m5(d,h)|0]|0;a[(c[g>>2]|0)+h|0]=m;m=h+1|0;s=c[j>>2]|0;t=c[e>>2]|0;if((m|0)<(s|0)){h=m;i=s;n=t}else{q=s;r=t;break}}}else{q=k;r=f}}while(0);if((q|0)>=(r|0)){o=r;break}k=b|0;j=q;n=r;while(1){i=(c[k>>2]|0)+j|0;if((i|0)==0){u=n}else{a[i]=a[m5(d,j)|0]|0;u=c[e>>2]|0}i=j+1|0;if((i|0)<(u|0)){j=i;n=u}else{o=u;break}}}}while(0);c[b+4>>2]=o;return b|0}function mY(a,b){a=a|0;b=b|0;var d=0,e=0;mV(a|0,b|0);d=a+12|0;e=b+12|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];return a|0}function mZ(a,b){a=a|0;b=+b;fT(a|0,b,b);return}function m_(a,b){a=a|0;b=+b;fU(a|0,b,b,b);return}function m$(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ma(a|0,b,c,d);return}function m0(a){a=a|0;hh(a|0);return}function m1(a){a=a|0;i7(a+12|0);m2(a|0);return}function m2(a){a=a|0;nC(a);return}function m3(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;l=f+(a*12&-1)|0;m=f+(b*12&-1)|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];m=a+1|0;l=m+d|0;f=c[g>>2]|0;if((l|0)<(f|0)){a=m;b=l}else{j=f;break}}k=j-d|0;c[g>>2]=k;i=e;return}function m4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)>=(h|0)){j=h;k=j-d|0;c[g>>2]=k;i=e;return}h=a|0;a=b;b=f;while(1){f=c[h>>2]|0;c[f+(a<<2)>>2]=c[f+(b<<2)>>2];f=a+1|0;l=f+d|0;m=c[g>>2]|0;if((l|0)<(m|0)){a=f;b=l}else{j=m;break}}k=j-d|0;c[g>>2]=k;i=e;return}function m5(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=128,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if((e|0)>(b|0)|(e|b|0)==0){i=d;return(c[a>>2]|0)+b|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=129,c[B+16>>2]=2184,B)|0);hY();return 0}return 0}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)<(h|0)){j=a|0;k=b;b=f;while(1){f=c[j>>2]|0;mU(f+(k*24&-1)|0,f+(b*24&-1)|0);f=k+1|0;l=f+d|0;m=c[g>>2]|0;if((l|0)<(m|0)){k=f;b=l}else{n=m;break}}}else{n=h}if((d|0)<=0){o=n;p=o-d|0;c[g>>2]=p;i=e;return}h=a|0;a=n-d|0;while(1){mJ((c[h>>2]|0)+(a*24&-1)|0);n=a+1|0;b=c[g>>2]|0;if((n|0)<(b|0)){a=n}else{o=b;break}}p=o-d|0;c[g>>2]=p;i=e;return}function m7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=190,c[B+16>>2]=9192,B)|0);hY()}if((d|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=191,c[B+16>>2]=8096,B)|0);hY()}f=d+b|0;g=a+4|0;h=c[g>>2]|0;if((f|0)>(h|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=192,c[B+16>>2]=7040,B)|0);hY()}if((f|0)<(h|0)){j=a|0;k=b;b=f;while(1){f=c[j>>2]|0;mY(f+(k*24&-1)|0,f+(b*24&-1)|0);f=k+1|0;l=f+d|0;m=c[g>>2]|0;if((l|0)<(m|0)){k=f;b=l}else{n=m;break}}}else{n=h}if((d|0)<=0){o=n;p=o-d|0;c[g>>2]=p;i=e;return}h=a|0;a=n-d|0;while(1){mR((c[h>>2]|0)+(a*24&-1)|0);n=a+1|0;b=c[g>>2]|0;if((n|0)<(b|0)){a=n}else{o=b;break}}p=o-d|0;c[g>>2]=p;i=e;return}function m8(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function m9(a){a=a|0;return c[a>>2]|0}function na(a){a=a|0;return c[a>>2]|0}function nb(a){a=a|0;return c[a+4>>2]|0}function nc(a){a=a|0;return c[a>>2]|0}function nd(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function ne(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function nf(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function ng(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function nh(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function ni(a){a=a|0;return c[a>>2]|0}function nj(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function nk(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function nl(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function nm(a,b){a=a|0;b=b|0;return(a|0)+(b<<2)|0}function nn(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function no(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function np(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nq(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nr(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nt(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nu(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nv(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function nw(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nx(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function ny(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nz(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nA(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nB(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function nC(a){a=a|0;nD(a|0);return}function nD(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function nE(a,b){a=a|0;b=b|0;nF(a|0,b|0);return a|0}function nF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if((a|0)==(b|0)){return a|0}d=b+4|0;e=c[d>>2]|0;do{if((c[a+8>>2]|0)<(e|0)){lR(a,e);f=a+4|0;g=c[f>>2]|0;L2953:do{if((g|0)>0){h=a|0;i=0;j=g;while(1){if((i|0)>=(c[d>>2]|0)){k=j;break L2953}l=c[jh(b,i)>>2]|0;c[(c[h>>2]|0)+(i<<2)>>2]=l;l=i+1|0;m=c[f>>2]|0;if((l|0)<(m|0)){i=l;j=m}else{k=m;break}}}else{k=g}}while(0);g=c[d>>2]|0;if((k|0)>=(g|0)){n=g;break}f=a|0;j=k;i=g;while(1){g=(c[f>>2]|0)+(j<<2)|0;if((g|0)==0){o=i}else{c[g>>2]=c[jh(b,j)>>2];o=c[d>>2]|0}g=j+1|0;if((g|0)<(o|0)){j=g;i=o}else{n=o;break}}}else{i=a+4|0;j=c[i>>2]|0;L2940:do{if((j|0)>0){f=a|0;g=0;h=j;m=e;while(1){if((g|0)>=(m|0)){p=h;q=m;break L2940}l=c[jh(b,g)>>2]|0;c[(c[f>>2]|0)+(g<<2)>>2]=l;l=g+1|0;r=c[i>>2]|0;s=c[d>>2]|0;if((l|0)<(r|0)){g=l;h=r;m=s}else{p=r;q=s;break}}}else{p=j;q=e}}while(0);if((p|0)>=(q|0)){n=q;break}j=a|0;i=p;m=q;while(1){h=(c[j>>2]|0)+(i<<2)|0;if((h|0)==0){t=m}else{c[h>>2]=c[jh(b,i)>>2];t=c[d>>2]|0}h=i+1|0;if((h|0)<(t|0)){i=h;m=t}else{n=t;break}}}}while(0);c[a+4>>2]=n;return a|0}function nG(a){a=a|0;nH(a|0);i5(a+12|0);return}function nH(a){a=a|0;nI(a);return}function nI(a){a=a|0;m8(a|0);return}function nJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0;d=+g[fP(b,0)>>2];e=d*+g[c>>2];g[fQ(a,0)>>2]=e;e=+g[fP(b,1)>>2];d=e*+g[c>>2];g[fQ(a,1)>>2]=d;return}function nK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;f=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];f=0;g=(c[b+372+(m9(d)<<2)>>2]|0)>>>1;while(1){d=g>>>1;if((d|0)==0){break}else{f=f+1|0;g=d}}nL(a,f);i=e;return}function nL(a,b){a=a|0;b=b|0;nd(a,b);return}function nM(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;f=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];f=0;g=(c[b+328+(m9(d)<<2)>>2]|0)>>>1;while(1){d=g>>>1;if((d|0)==0){break}else{f=f+1|0;g=d}}nL(a,f);i=e;return}function nN(a){a=a|0;nO(a|0);return}function nO(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function nP(a){a=a|0;nh(a|0);return}function nQ(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0;j=i;k=b;b=i;i=i+12|0;i=i+7>>3<<3;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];k=d;d=i;i=i+12|0;i=i+7>>3<<3;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];k=e;e=i;i=i+16|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];k=f;f=i;i=i+16|0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];c[f+8>>2]=c[k+8>>2];c[f+12>>2]=c[k+12>>2];k=g;g=i;i=i+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];k=h;h=i;i=i+16|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];jz(a|0,b);jz(a+12|0,d);fw(a+24|0,e);fw(a+40|0,f);nR(a+56|0,g);fw(a+72|0,h);i=j;return}function nR(a,b){a=a|0;b=b|0;var d=0;d=c[nl(b,0)>>2]|0;c[nm(a,0)>>2]=d;d=c[nl(b,1)>>2]|0;c[nm(a,1)>>2]=d;d=c[nl(b,2)>>2]|0;c[nm(a,2)>>2]=d;d=c[nl(b,3)>>2]|0;c[nm(a,3)>>2]=d;return a|0}function nS(a){a=a|0;nT(a);return}function nT(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;b=i;i=i+64|0;c=b|0;d=b+16|0;e=b+32|0;f=b+40|0;g=b+48|0;h=b+56|0;nU(a+64|0);nU(a+76|0);nU(a+88|0);nU(a+100|0);nU(a+112|0);nU(a+124|0);nU(a+136|0);nU(a+148|0);nU(a+160|0);nU(a+172|0);nU(a+184|0);nU(a+196|0);nU(a+208|0);nU(a+220|0);nU(a+232|0);nU(a+244|0);nU(a+256|0);nU(a+268|0);nU(a+280|0);nU(a+292|0);nU(a+304|0);nU(a+316|0);eU(c,0.0,0.0,0.0,1.0);fw(a|0,c);eU(d,0.0,0.0,0.0,1.0);fw(a+16|0,d);k2(e,0.0);fA(a+32|0,e);k2(f,0.0);fA(a+40|0,f);k2(g,1.0);fA(a+48|0,g);k2(h,1.0);fA(a+56|0,h);Zq(a+328|0,0,92);i=b;return}function nU(a){a=a|0;nV(a);return}function nV(a){a=a|0;no(a|0);return}function nW(a){a=a|0;nX(a|0);return}function nX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+4|0;d=a|0;a=c[d>>2]|0;if((c[b>>2]|0)>0){e=0;f=a;while(1){nY(f+(e<<4)|0);g=e+1|0;h=c[d>>2]|0;if((g|0)<(c[b>>2]|0)){e=g;f=h}else{i=h;break}}}else{i=a}if((i|0)==0){return}Zh(i);return}function nY(a){a=a|0;nZ(a);return}function nZ(a){a=a|0;n_(a+4|0);return}function n_(a){a=a|0;n$(a);return}function n$(a){a=a|0;n0(a|0);return}function n0(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function n1(a){a=a|0;n2(a|0);return}function n2(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function n3(a){a=a|0;n4(a|0);return}function n4(a){a=a|0;n5(a);return}function n5(a){a=a|0;n6(a|0);return}function n6(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+4|0;d=a|0;a=c[d>>2]|0;if((c[b>>2]|0)>0){e=0;f=a;while(1){n7(f+(e*48&-1)|0);g=e+1|0;h=c[d>>2]|0;if((g|0)<(c[b>>2]|0)){e=g;f=h}else{i=h;break}}}else{i=a}if((i|0)==0){return}Zh(i);return}function n7(a){a=a|0;n8(a);return}function n8(a){a=a|0;n9(a+24|0);return}function n9(a){a=a|0;oa(a);return}function oa(a){a=a|0;ob(a|0);return}function ob(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oc(a){a=+a;return+(+W(+a))}function od(a){a=a|0;oe(a|0);return}function oe(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function of(a){a=a|0;og(a|0);return}function og(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oh(a){a=a|0;np(a|0);return}function oi(a){a=a|0;nq(a|0);return}function oj(a){a=a|0;ok(a|0);return}function ok(a){a=a|0;ol(a);return}function ol(a){a=a|0;nr(a|0);return}function om(a){a=a|0;ns(a|0);return}function on(a){a=a|0;nt(a|0);return}function oo(a){a=a|0;op(a|0);return}function op(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oq(a){a=a|0;nu(a|0);return}function or(a){a=a|0;nw(a|0);return}function os(a){a=a|0;nx(a|0);return}function ot(a){a=a|0;ou(a|0);return}function ou(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function ov(a){a=a|0;ny(a|0);return}function ow(a){a=a|0;ox(a|0);return}function ox(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oy(a){a=a|0;nz(a|0);return}function oz(a){a=a|0;oA(a|0);return}function oA(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oB(a){a=a|0;nA(a|0);return}function oC(a){a=a|0;oD(a|0);return}function oD(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oE(a){a=a|0;nB(a|0);return}function oF(a){a=a|0;oQ(a|0);return}function oG(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);hY();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<4)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);hY();return 0}return 0}function oH(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oI(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oJ(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oK(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oL(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oM(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function oN(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oO(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function oP(a){a=a|0;c[a>>2]=0;return}function oQ(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oR(a){a=a|0;oH(a|0);return}function oS(a){a=a|0;oI(a|0);return}function oT(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=gU(a)|0;gO(a,(gU(b)|0)+c|0);d=hs(a,c)|0;e=pi(b,0)|0;Zp(d|0,e|0,(gU(a)|0)-c|0);return a|0}function oU(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=i;i=i+288|0;e=d|0;f=d+16|0;g=d+32|0;h=d+48|0;j=d+64|0;k=d+80|0;l=d+96|0;m=d+112|0;n=d+128|0;o=d+144|0;p=d+160|0;q=d+176|0;r=d+192|0;s=d+208|0;t=d+224|0;u=d+240|0;v=d+256|0;w=d+272|0;eI(a,22456);if(!c){eI(e,19848);oT(a,e);eJ(e)}if((b|0)==13){eI(t,9840);oT(a,t);eJ(t)}else if((b|0)==11){eI(r,10480);oT(a,r);eJ(r)}else if((b|0)==14){eI(u,9672);oT(a,u);eJ(u)}else if((b|0)==7){eI(n,11168);oT(a,n);eJ(n)}else if((b|0)==0){eI(f,16392);oT(a,f);eJ(f)}else if((b|0)==2){eI(h,15704);oT(a,h);eJ(h)}else if((b|0)==1){eI(g,16240);oT(a,g);eJ(g)}else if((b|0)==12){eI(s,10024);oT(a,s);eJ(s)}else if((b|0)==10){eI(q,10584);oT(a,q);eJ(q)}else if((b|0)==8){eI(o,10960);oT(a,o);eJ(o)}else if((b|0)==3){eI(j,13064);oT(a,j);eJ(j)}else if((b|0)==4){eI(k,12760);oT(a,k);eJ(k)}else if((b|0)==9){eI(p,10760);oT(a,p);eJ(p)}else if((b|0)==6){eI(m,11256);oT(a,m);eJ(m)}else if((b|0)==5){eI(l,12552);oT(a,l);eJ(l)}else{eI(v,9552);oT(a,v);eJ(v)}if(c){i=d;return}eI(w,19320);oT(a,w);eJ(w);i=d;return}function oV(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;i=i+16|0;e=d|0;mG(e,b);mG(a,oT(e,c)|0);eJ(e);i=d;return}function oW(a){a=a|0;oX(a|0);return}function oX(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function oY(a){a=a|0;oZ(a|0);return}function oZ(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function o_(a){a=a|0;oJ(a|0);return}function o$(a){a=a|0;oK(a|0);return}function o0(a){a=a|0;o1(a|0);return}function o1(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function o2(a){a=a|0;o3(a|0);return}function o3(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)==0){return}Zh(b);return}function o4(a){a=a|0;oL(a|0);return}function o5(a,b){a=a|0;b=b|0;o6(a|0,b|0);return}function o6(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a|0;c[d>>2]=0;e=a+4|0;c[e>>2]=0;c[a+8>>2]=0;f=b+4|0;o7(a,c[f>>2]|0);a=c[f>>2]|0;if((a|0)>0){g=0;h=a}else{i=a;c[e>>2]=i;return}while(1){a=(c[d>>2]|0)+(g<<2)|0;if((a|0)==0){j=h}else{c[a>>2]=c[hS(b,g)>>2];j=c[f>>2]|0}a=g+1|0;if((a|0)<(j|0)){g=a;h=j}else{i=j;break}}c[e>>2]=i;return}function o7(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+8|0;if((c[d>>2]|0)>=(b|0)){return}e=Zn(b<<2)|0;f=c[a+4>>2]|0;g=a|0;if((f|0)>0){a=0;do{h=e+(a<<2)|0;if((h|0)!=0){c[h>>2]=c[(c[g>>2]|0)+(a<<2)>>2]}a=a+1|0;}while((a|0)<(f|0))}f=c[g>>2]|0;if((f|0)!=0){Zh(f)}c[g>>2]=e;c[d>>2]=b;return}function o8(a){a=a|0;o9(a|0);return}function o9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+4|0;d=a|0;a=c[d>>2]|0;if((c[b>>2]|0)>0){e=0;f=a;while(1){mR(f+(e*24&-1)|0);g=e+1|0;h=c[d>>2]|0;if((g|0)<(c[b>>2]|0)){e=g;f=h}else{i=h;break}}}else{i=a}if((i|0)==0){return}Zh(i);return}function pa(a){a=a|0;pb(a|0);return}function pb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+4|0;d=a|0;a=c[d>>2]|0;if((c[b>>2]|0)>0){e=0;f=a;while(1){mJ(f+(e*24&-1)|0);g=e+1|0;h=c[d>>2]|0;if((g|0)<(c[b>>2]|0)){e=g;f=h}else{i=h;break}}}else{i=a}if((i|0)==0){return}Zh(i);return}function pc(a){a=a|0;oN(a|0);return}function pd(a){a=a|0;oO(a|0);return}function pe(a){a=a|0;pS(a);return}function pf(a,b){a=a|0;b=b|0;var d=0;pg(a);d=a|0;c[d>>2]=c[(c[b>>2]|0)+32>>2];c[d+4>>2]=0;return}function pg(a){a=a|0;pn(a);return}function ph(){dt()}function pi(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=44984,c[B+8>>2]=76,c[B+16>>2]=19432,B)|0);hY();return 0}if((gU(a)|0)<(b|0)){g7(3208,(B=i,i=i+24|0,c[B>>2]=44984,c[B+8>>2]=77,c[B+16>>2]=9400,B)|0);hY();return 0}else{e=m5(a|0,b)|0;i=d;return e|0}return 0}function pj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=d;d=i;i=i+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];g=e;e=i;i=i+8|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];g=b|0;b=Zc(40)|0;h=b;pe(h);c[g>>2]=h;e$(b+16|0,d);a[(c[g>>2]|0)+24|0]=0;b=pk(e)|0;h=pk(e)|0;c2(1,(c[g>>2]|0)+28|0);bI(36160,c[(c[g>>2]|0)+28>>2]|0);bh(1,(c[g>>2]|0)+32|0);ce(33984);aS(3553,c[(c[g>>2]|0)+32>>2]|0);d0(3553,10242,33071);d0(3553,10243,33071);d0(3553,10241,9728);d0(3553,10240,9728);e=d|0;j=d+4|0;dm(3553,0,b|0,c[e>>2]|0,c[j>>2]|0,0,h|0,5121,0);cO(36160,36064,3553,c[(c[g>>2]|0)+32>>2]|0,0);c[(c[g>>2]|0)+36>>2]=1280;a9(1,(c[g>>2]|0)+36|0);cx(36161,c[(c[g>>2]|0)+36>>2]|0);bS(36161,33189,c[e>>2]|0,c[j>>2]|0);aW(36160,36096,36161,c[(c[g>>2]|0)+36>>2]|0);aS(3553,0);g=bY(36160)|0;if((g|0)==36053){bI(36160,0);i=f;return}else{g7(23552,(B=i,i=i+24|0,c[B>>2]=45216,c[B+8>>2]=406,c[B+16>>2]=g,B)|0);pl()}}function pk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b-36|0)>>>0<3){i=i;return 6408}else{g7(8728,(B=i,i=i+24|0,c[B>>2]=45216,c[B+8>>2]=233,c[B+16>>2]=b,B)|0);pl();return 0}return 0}function pl(){g3();qz()}function pm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b;b=a;f=c[e+4>>2]|0;c[b>>2]=c[e>>2];c[b+4>>2]=f;f=d;d=a+8|0;a=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;return}function pn(a){a=a|0;var b=0;b=a|0;c[b>>2]=0;c[b+4>>2]=0;return}function po(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;d=c[a>>2]|0;if((c[d>>2]|0)==0){e=0;return e|0}e=(c[d+8>>2]|0)+b|0;return e|0}function pp(b){b=b|0;return(a[b+16|0]&1)!=0|0}function pq(b){b=b|0;return(a[b+16|0]&1)!=0|0}function pr(b){b=b|0;return(a[b+4|0]&1)!=0|0}function ps(a){a=a|0;return+(+g[a>>2])}function pt(b){b=b|0;return(a[b+4|0]&1)!=0|0}function pu(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return}function pv(b){b=b|0;return(a[b+4|0]&1)!=0|0}function pw(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return}function px(b){b=b|0;return(a[b+4|0]&1)!=0|0}function py(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return}function pz(b){b=b|0;return(a[b+4|0]&1)!=0|0}function pA(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return}function pB(b){b=b|0;return(a[b+4|0]&1)!=0|0}function pC(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return}function pD(b,c){b=b|0;c=c|0;g[b>>2]=+g[c>>2];a[b+4|0]=1;return}function pE(b,d){b=b|0;d=d|0;c[b>>2]=c[d>>2];a[b+4|0]=1;return}function pF(b,d){b=b|0;d=d|0;c[b>>2]=c[d>>2];a[b+4|0]=1;return}function pG(b,d){b=b|0;d=d|0;c[b>>2]=c[d>>2];a[b+4|0]=1;return}function pH(a){a=a|0;c[a>>2]=0;return}function pI(a){a=a|0;c[a>>2]=0;return}function pJ(a){a=a|0;c[a>>2]=0;return}function pK(a){a=a|0;c[a>>2]=1;return}function pL(a){a=a|0;c[a>>2]=0;return}function pM(b){b=b|0;a[b+4|0]=0;return}function pN(b){b=b|0;a[b+16|0]=0;return}function pO(a,b){a=a|0;b=b|0;e$(a|0,b|0);e$(a+8|0,b+8|0);return a|0}function pP(a,b,c){a=a|0;b=b|0;c=c|0;pm(a,b,c);return}function pQ(a,b){a=a|0;b=b|0;pR(a,b);return}function pR(a,b){a=a|0;b=b|0;eG(a|0,b,b);return}function pS(a){a=a|0;pT(a|0);return}function pT(a){a=a|0;pU(a);return}function pU(a){a=a|0;pQ(a|0,0);pQ(a+8|0,0);return}function pV(a,b){a=a|0;b=b|0;var d=0;d=a|0;a=Zc(12)|0;c[d>>2]=a;c[a>>2]=b;if((b|0)==0){return}dI(1,a+4|0);a=Zn(b)|0;c[(c[d>>2]|0)+8>>2]=a;return}function pW(a){a=a|0;var b=0,d=0,e=0,f=0;b=a|0;a=c[b>>2]|0;do{if((c[a>>2]|0)==0){d=a}else{d2(1,a+4|0);e=c[b>>2]|0;f=c[e+8>>2]|0;if((f|0)==0){d=e;break}Zh(f);d=c[b>>2]|0}}while(0);if((d|0)==0){return}Zg(d);return}function pX(a){a=a|0;var b=0;b=a|0;a=c[b>>2]|0;if((c[a>>2]|0)==0){return}cL(34963,c[a+4>>2]|0);a=c[b>>2]|0;cS(34963,c[a>>2]|0,c[a+8>>2]|0,35044);return}function pY(a){a=a|0;var b=0;b=c[a>>2]|0;if((c[b>>2]|0)==0){return}cL(34963,c[b+4>>2]|0);return}function pZ(a){a=a|0;if((c[c[a>>2]>>2]|0)==0){return}cL(34963,0);return}function p_(a){a=a|0;var b=0,d=0;b=Zc(104)|0;d=b;Zq(b|0,0,104);p$(d);c[a>>2]=d;return}function p$(a){a=a|0;p9(a);return}function p0(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;b=i;i=i+80|0;d=b|0;e=b+16|0;f=b+32|0;g=b+40|0;h=b+48|0;j=b+56|0;k=b+64|0;l=b+72|0;m=a|0;a=c[m>>2]|0;n=a|0;if(pp(n)|0){o=c[16934]|0;p1(d,n);qv(o,d);p=c[m>>2]|0}else{p=a}a=p+20|0;if(pq(a)|0){d=c[16934]|0;p2(e,a);qR(d,e);q=c[m>>2]|0}else{q=p}p=q+40|0;if(pr(p)|0){e=c[16934]|0;qS(e,+ps(p));r=c[m>>2]|0}else{r=q}q=r+48|0;if(pt(q)|0){p=c[16934]|0;pu(f,q);qU(p,f,+ps((c[m>>2]|0)+56|0));s=c[m>>2]|0}else{s=r}r=s+64|0;if(pv(r)|0){f=c[16934]|0;pw(g,r);pw(h,(c[m>>2]|0)+72|0);qW(f,g,h);t=c[m>>2]|0}else{t=s}s=t+80|0;if(px(s)|0){h=c[16934]|0;py(j,s);qX(h,j);u=c[m>>2]|0}else{u=t}t=u+88|0;if(pz(t)|0){j=c[16934]|0;pA(k,t);qZ(j,k);v=c[m>>2]|0}else{v=u}u=v+96|0;if(pB(u)|0){k=c[16934]|0;pC(l,u);q$(k,l);w=c[m>>2]|0}else{w=v}if((w|0)==0){i=b;return}Zg(w);i=b;return}function p1(a,b){a=a|0;b=b|0;var d=0;d=a;a=b;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];return}function p2(a,b){a=a|0;b=b|0;var d=0;d=a;a=b;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];return}function p3(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+32|0;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=d|0;f=d+16|0;g=(c[a>>2]|0)+20|0;if(!(pq(g)|0)){q4(e,c[16934]|0);p4(g,e)}e=c[16934]|0;g=f;a=b;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];qR(e,f);i=d;return}function p4(b,c){b=b|0;c=c|0;fw(b|0,c);a[b+16|0]=1;return}function p5(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=i;i=i+8|0;e=d|0;f=(c[a>>2]|0)+40|0;if(!(pr(f)|0)){g[e>>2]=+qB(c[16934]|0);pD(f,e)}qS(c[16934]|0,b);i=d;return}function p6(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+24|0;f=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[f>>2];f=e|0;h=e+8|0;j=e+16|0;k=a|0;a=c[k>>2]|0;l=a+48|0;if(pt(l)|0){m=a}else{qD(f,c[16934]|0);pE(l,f);m=c[k>>2]|0}k=m+56|0;if(!(pr(k)|0)){g[h>>2]=+qE(c[16934]|0);pD(k,h)}h=c[16934]|0;c[j>>2]=c[b>>2];qU(h,j,d);i=e;return}function p7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+32|0;f=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[f>>2];f=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];f=e|0;g=e+8|0;h=e+16|0;j=e+24|0;k=a|0;a=c[k>>2]|0;l=a+64|0;if(pv(l)|0){m=a}else{qG(f,c[16934]|0);pF(l,f);m=c[k>>2]|0}k=m+72|0;if(!(pv(k)|0)){qH(g,c[16934]|0);pF(k,g)}g=c[16934]|0;c[h>>2]=c[b>>2];c[j>>2]=c[d>>2];qW(g,h,j);i=e;return}function p8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[e>>2];e=d|0;f=d+8|0;g=(c[a>>2]|0)+80|0;if(!(px(g)|0)){qJ(e,c[16934]|0);pG(g,e)}e=c[16934]|0;c[f>>2]=c[b>>2];qX(e,f);i=d;return}function p9(a){a=a|0;qa(a|0);qb(a+20|0);qc(a+40|0);qd(a+48|0);qc(a+56|0);qe(a+64|0);qe(a+72|0);qf(a+80|0);qg(a+88|0);qh(a+96|0);return}function qa(a){a=a|0;qs(a);return}function qb(a){a=a|0;pN(a);return}function qc(a){a=a|0;pM(a);return}function qd(a){a=a|0;qq(a);return}function qe(a){a=a|0;qo(a);return}function qf(a){a=a|0;qm(a);return}function qg(a){a=a|0;qk(a);return}function qh(a){a=a|0;qi(a);return}function qi(b){b=b|0;qj(b|0);a[b+4|0]=0;return}function qj(a){a=a|0;pH(a);return}function qk(b){b=b|0;ql(b|0);a[b+4|0]=0;return}function ql(a){a=a|0;pI(a);return}function qm(b){b=b|0;qn(b|0);a[b+4|0]=0;return}function qn(a){a=a|0;pJ(a);return}function qo(b){b=b|0;qp(b|0);a[b+4|0]=0;return}function qp(a){a=a|0;pK(a);return}function qq(b){b=b|0;qr(b|0);a[b+4|0]=0;return}function qr(a){a=a|0;pL(a);return}function qs(b){b=b|0;pT(b|0);a[b+16|0]=0;return}function qt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=i;i=i+208|0;e=b;b=i;i=i+8|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];e=d|0;f=d+16|0;h=d+24|0;j=d+32|0;k=d+40|0;l=d+48|0;m=d+64|0;n=d+72|0;o=d+80|0;p=d+96|0;q=d+112|0;r=d+120|0;s=d+128|0;t=d+136|0;u=d+144|0;v=d+152|0;w=d+160|0;x=d+168|0;y=d+176|0;z=d+184|0;A=d+192|0;B=d+200|0;C=a|0;D=Zc(64)|0;E=D;Zq(D|0,0,64);qu(E);c[C>>2]=E;c[f>>2]=0;c[h>>2]=0;c[j>>2]=0;c[k>>2]=0;eX(e,f,h,j,k);pO(D,e);k2(n,0.0);qw(m,n);pP(l,m,b);qv(a,l);l=(c[C>>2]|0)+16|0;fv(o,-1.0);fw(l,o);eU(p,.10000000149011612,.20000000298023224,.30000001192092896,1.0);qR(a,p);g[(c[C>>2]|0)+32>>2]=-1.0;qS(a,1.0);p=c[C>>2]|0;qT(q,1);c[p+36>>2]=c[q>>2];g[(c[C>>2]|0)+40>>2]=-1.0;qT(r,0);qU(a,r,0.0);r=c[C>>2]|0;qV(s,0);c[r+44>>2]=c[s>>2];s=c[C>>2]|0;qV(t,0);c[s+48>>2]=c[t>>2];qV(u,7);qV(v,8);qW(a,u,v);v=c[C>>2]|0;fp(w,0);c[v+52>>2]=c[w>>2];fp(x,4);qX(a,x);x=c[C>>2]|0;qY(y,0);c[x+56>>2]=c[y>>2];qY(z,1);qZ(a,z);z=c[C>>2]|0;q_(A,2);c[z+60>>2]=c[A>>2];q_(B,0);q$(a,B);i=d;return}function qu(a){a=a|0;q6(a);return}function qv(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=a|0;if(q1(c[e>>2]|0,b)|0){i=d;return}cf(c[b>>2]|0,c[b+4>>2]|0,c[b+8>>2]|0,c[b+12>>2]|0);pO(c[e>>2]|0,b);i=d;return}function qw(a,b){a=a|0;b=b|0;var d=0;d=~~+g[fP(b,0)>>2];c[fS(a,0)>>2]=d;d=~~+g[fP(b,1)>>2];c[fS(a,1)>>2]=d;return}function qx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+40|0;e=d|0;f=d+16|0;g=d+32|0;h=b|0;b=c[h>>2]|0;if((a[b+24|0]&1)==0){bI(36160,c[b+28>>2]|0);b=c[h>>2]|0;q2(e,c[16934]|0);pO(b,e);e=c[16934]|0;pQ(g,0);pP(f,g,(c[h>>2]|0)+16|0);qv(e,f);a[(c[h>>2]|0)+24|0]=1;i=d;return}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=45216,c[B+8>>2]=455,c[B+16>>2]=15816,B)|0);pl()}}function qy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;e=d|0;f=b|0;if((a[(c[f>>2]|0)+24|0]&1)==0){g7(3208,(B=i,i=i+24|0,c[B>>2]=45216,c[B+8>>2]=480,c[B+16>>2]=10192,B)|0);pl()}else{bI(36160,0);b=c[16934]|0;g=e;h=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];qv(b,e);a[(c[f>>2]|0)+24|0]=0;i=d;return}}function qz(){dt()}function qA(a){a=a|0;return c[a>>2]|0}function qB(a){a=a|0;return+(+g[(c[a>>2]|0)+32>>2])}function qC(a){a=a|0;return c[a>>2]|0}function qD(a,b){a=a|0;b=b|0;c[a>>2]=c[(c[b>>2]|0)+36>>2];return}function qE(a){a=a|0;return+(+g[(c[a>>2]|0)+40>>2])}function qF(a){a=a|0;return c[a>>2]|0}function qG(a,b){a=a|0;b=b|0;c[a>>2]=c[(c[b>>2]|0)+44>>2];return}function qH(a,b){a=a|0;b=b|0;c[a>>2]=c[(c[b>>2]|0)+48>>2];return}function qI(a){a=a|0;return c[a>>2]|0}function qJ(a,b){a=a|0;b=b|0;c[a>>2]=c[(c[b>>2]|0)+52>>2];return}function qK(a){a=a|0;return c[a>>2]|0}function qL(a){a=a|0;return c[a>>2]|0}function qM(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function qN(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function qO(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function qP(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function qQ(a){a=a|0;return c[a+4>>2]|0}function qR(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=a|0;if(q3((c[e>>2]|0)+16|0,b)|0){i=d;return}aI(+(+g[b>>2]),+(+g[b+4>>2]),+(+g[b+8>>2]),+(+g[b+12>>2]));fw((c[e>>2]|0)+16|0,b);i=d;return}function qS(a,b){a=a|0;b=+b;var d=0;d=a|0;if(+g[(c[d>>2]|0)+32>>2]==b){return}bb(+b);g[(c[d>>2]|0)+32>>2]=b;return}function qT(a,b){a=a|0;b=b|0;qP(a,b);return}function qU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=i;f=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[f>>2];f=a|0;a=c[f>>2]|0;h=qC(a+36|0)|0;do{if((h|0)==(qC(b)|0)){if(+g[a+40>>2]!=d){break}i=e;return}}while(0);c[a+36>>2]=c[b>>2];g[(c[f>>2]|0)+40>>2]=d;i=e;return}function qV(a,b){a=a|0;b=b|0;qO(a,b);return}function qW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+8|0;f=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[f>>2];f=d;d=i;i=i+4|0;i=i+7>>3<<3;c[d>>2]=c[f>>2];f=e|0;g=a|0;a=c[g>>2]|0;h=qF(a+44|0)|0;do{if((h|0)==(qF(b)|0)){j=qF(a+48|0)|0;if((j|0)!=(qF(d)|0)){break}i=e;return}}while(0);a=c[b>>2]|0;c[f>>2]=a;h=c[d>>2]|0;c[f+4>>2]=h;d=qF(f|0)|0;if((d|0)==7){k=770}else if((d|0)==3){k=768}else if((d|0)==5){k=774}else if((d|0)==12){k=32770}else if((d|0)==6){k=775}else if((d|0)==4){k=769}else if((d|0)==1){k=0}else if((d|0)==13){k=32771}else if((d|0)==14){k=32772}else if((d|0)==11){k=32769}else if((d|0)==9){k=772}else if((d|0)==8){k=771}else if((d|0)==10){k=773}else{k=1}d=qF(f+4|0)|0;if((d|0)==4){l=769}else if((d|0)==3){l=768}else if((d|0)==10){l=773}else if((d|0)==9){l=772}else if((d|0)==12){l=32770}else if((d|0)==11){l=32769}else if((d|0)==2){l=1}else if((d|0)==14){l=32772}else if((d|0)==13){l=32771}else if((d|0)==8){l=771}else if((d|0)==7){l=770}else if((d|0)==6){l=775}else if((d|0)==5){l=774}else{l=0}if((qF(b)|0)==0){bw(3042)}else{dB(3042);dM(k|0,l|0)}c[(c[g>>2]|0)+44>>2]=a;c[(c[g>>2]|0)+48>>2]=h;i=e;return}function qX(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;e=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[e>>2];e=a|0;a=qI((c[e>>2]|0)+52|0)|0;f=qI(b)|0;if((a|0)==(f|0)){i=d;return}if((f|0)==4){bj(515)}else if((f|0)==6){bj(517)}else if((f|0)==2){bj(513)}else if((f|0)==1){bj(512)}else if((f|0)==8){bj(519)}else if((f|0)==3){bj(514)}else if((f|0)==5){bj(516)}else if((f|0)==7){bj(518)}if((qI(b)|0)==0){bw(2929)}else{dB(2929)}c[(c[e>>2]|0)+52>>2]=c[b>>2];i=d;return}function qY(a,b){a=a|0;b=b|0;qN(a,b);return}function qZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;e=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[e>>2];e=a|0;a=qK((c[e>>2]|0)+56|0)|0;f=qK(b)|0;if((a|0)==(f|0)){i=d;return}if((f|0)==2){dB(2884);bJ(1028);d1(2305)}else if((f|0)==0){bw(2884)}else if((f|0)==1){dB(2884);bJ(1028);d1(2304)}c[(c[e>>2]|0)+56>>2]=c[b>>2];i=d;return}function q_(a,b){a=a|0;b=b|0;qM(a,b);return}function q$(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[e>>2];e=c[a>>2]|0;a=qL(e+60|0)|0;if((a|0)==(qL(b)|0)){i=d;return}c[e+60>>2]=c[b>>2];i=d;return}function q0(a,b){a=a|0;b=b|0;var d=0,e=0;a=i;d=b;b=i;i=i+4|0;i=i+7>>3<<3;c[b>>2]=c[d>>2];d=qA(b)|0;b=d<<14&16384;e=(d&2|0)==0?b:b|256;cH(((d&4|0)==0?e:e|1024)|0);i=a;return}function q1(a,b){a=a|0;b=b|0;var c=0;if(!(q5(a|0,b|0)|0)){c=0;return c|0}c=q5(a+8|0,b+8|0)|0;return c|0}function q2(a,b){a=a|0;b=b|0;var d=0;d=a;a=c[b>>2]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];return}function q3(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0;c=0;while(1){if(c>>>0>=4){d=1;e=3206;break}f=+g[fK(a,c)>>2];if(f==+g[fK(b,c)>>2]){c=c+1|0}else{d=0;e=3205;break}}if((e|0)==3205){return d|0}else if((e|0)==3206){return d|0}return 0}function q4(a,b){a=a|0;b=b|0;var d=0;d=a;a=(c[b>>2]|0)+16|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];return}function q5(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=0;while(1){if(d>>>0>=2){e=1;f=3213;break}g=c[fR(a,d)>>2]|0;if((g|0)==(c[fR(b,d)>>2]|0)){d=d+1|0}else{e=0;f=3212;break}}if((f|0)==3212){return e|0}else if((f|0)==3213){return e|0}return 0}function q6(a){a=a|0;pT(a|0);qr(a+36|0);qp(a+44|0);qp(a+48|0);qn(a+52|0);ql(a+56|0);qj(a+60|0);return}function q7(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=i;i=i+32|0;e=d|0;f=d+16|0;g=d+24|0;h=Zn((Zr(b|0)|0)+2|0)|0;Zp(h+1|0,b|0,(Zr(b|0)|0)+1|0);a[h]=10;q8(e);b=h;j=0;k=10;L3580:while(1){l=(j|0)==0;m=b;n=k;L3582:while(1){do{if(l){if(!((n<<24>>24|0)==10|(n<<24>>24|0)==13)){break}if((a[m+1|0]|0)==91){o=3221;break L3582}}else{if((n<<24>>24|0)==10|(n<<24>>24|0)==13){o=3230;break L3582}else if((n<<24>>24|0)!=93){break}a[m]=0}}while(0);p=m+1|0;q=a[p]|0;if(q<<24>>24==0){break L3580}else{m=p;n=q}}if((o|0)==3221){o=0;a[m]=0;n=m+2|0;r=n;s=n}else if((o|0)==3230){o=0;c[f>>2]=j;c[g>>2]=m;q9(e,f,g);r=0;s=m+1|0}n=a[s]|0;if(n<<24>>24==0){break}else{b=s;j=r;k=n}}k=e|0;if((qQ(k)|0)>0){r=0;j=0;s=0;while(1){if((bq(c[rb(k,s)>>2]|0,21152)|0)==0){t=c[(rb(k,s)|0)+4>>2]|0}else{t=r}if((bq(c[rb(k,s)>>2]|0,44584)|0)==0){u=c[(rb(k,s)|0)+4>>2]|0}else{u=j}b=s+1|0;if((b|0)<(qQ(k)|0)){r=t;j=u;s=b}else{break}}if((t|0)==0){v=u;o=3242}else{w=u;x=t}}else{v=0;o=3242}if((o|0)==3242){g7(20856,(B=i,i=i+1|0,i=i+7>>3<<3,c[B>>2]=0,B)|0);w=v;x=0}if((w|0)==0){g7(15528,(B=i,i=i+1|0,i=i+7>>3<<3,c[B>>2]=0,B)|0)}v=wx(0,x)|0;o=wx(0,w)|0;t=c[16936]|0;L3616:do{if((t|0)>0){u=0;while(1){y=67752+(u<<2)|0;z=c[y>>2]|0;s=c[z>>2]|0;if((c[s+12>>2]|0)==(v|0)){if((c[s+16>>2]|0)==(o|0)){break}}u=u+1|0;if((u|0)>=(t|0)){break L3616}}if((h|0)==0){A=z;ra(e);i=d;return A|0}Zh(h);A=c[y>>2]|0;ra(e);i=d;return A|0}}while(0);y=Zc(4)|0;rc(y,x,w);w=c[16936]|0;c[67752+(w<<2)>>2]=y;c[16936]=w+1;if((h|0)==0){A=y;ra(e);i=d;return A|0}Zh(h);A=y;ra(e);i=d;return A|0}function q8(a){a=a|0;rG(a);return}function q9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=a+4|0;f=c[e>>2]|0;do{if((f|0)<(c[a+8>>2]|0)){g=a|0;h=c[g>>2]|0;i=h+(f<<3)|0;if((i|0)==0){j=f;k=h}else{c[i>>2]=c[b>>2];j=c[e>>2]|0;k=c[g>>2]|0}g=k+(j<<3)+4|0;if((g|0)==0){break}c[g>>2]=c[d>>2]}else{g=c[b>>2]|0;i=c[d>>2]|0;rD(a|0,((f*13&-1|0)/8&-1)+8|0);h=c[e>>2]|0;l=a|0;m=c[l>>2]|0;n=m+(h<<3)|0;if((n|0)==0){o=h;p=m}else{c[n>>2]=g;o=c[e>>2]|0;p=c[l>>2]|0}l=p+(o<<3)+4|0;if((l|0)==0){break}c[l>>2]=i}}while(0);c[e>>2]=(c[e>>2]|0)+1;return}function ra(a){a=a|0;rE(a);return}function rb(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((b|0)<=-1){g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=121,c[B+16>>2]=19432,B)|0);r_();return 0}e=c[a+4>>2]|0;if(e>>>0>b>>>0|(e|b|0)==0){i=d;return(c[a>>2]|0)+(b<<3)|0}else{g7(3208,(B=i,i=i+24|0,c[B>>2]=22088,c[B+8>>2]=122,c[B+16>>2]=10832,B)|0);r_();return 0}return 0}function rc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;i=i+8216|0;f=e+8192|0;g=e+8200|0;h=e+8208|0;j=a|0;a=Zc(20)|0;Zq(a|0,0,20);c[j>>2]=a;k=e|0;c[f>>2]=k;c[a+12>>2]=wx(0,b)|0;rd(k,b,0);b=bp(35633)|0;c[(c[j>>2]|0)+4>>2]=b;cw(c[(c[j>>2]|0)+4>>2]|0,1,f|0,0);a3(c[(c[j>>2]|0)+4>>2]|0);b=e+4096|0;dr(c[(c[j>>2]|0)+4>>2]|0,4096,h|0,b|0);ci(c[(c[j>>2]|0)+4>>2]|0,35713,g|0);do{if((c[g>>2]|0)==1){if((c[h>>2]|0)<=16){break}g4(7544,(B=i,i=i+8|0,c[B>>2]=b,B)|0);g4(8520,(B=i,i=i+8|0,c[B>>2]=k,B)|0)}else{g7(9864,(B=i,i=i+8|0,c[B>>2]=b,B)|0);g7(8520,(B=i,i=i+8|0,c[B>>2]=k,B)|0)}}while(0);a=wx(0,d)|0;c[(c[j>>2]|0)+16>>2]=a;rd(k,0,d);d=bp(35632)|0;c[(c[j>>2]|0)+8>>2]=d;cw(c[(c[j>>2]|0)+8>>2]|0,1,f|0,0);a3(c[(c[j>>2]|0)+8>>2]|0);dr(c[(c[j>>2]|0)+8>>2]|0,4096,h|0,b|0);ci(c[(c[j>>2]|0)+8>>2]|0,35713,g|0);do{if((c[g>>2]|0)==1){if((c[h>>2]|0)<=16){break}g4(3264,(B=i,i=i+8|0,c[B>>2]=b,B)|0);g4(8520,(B=i,i=i+8|0,c[B>>2]=k,B)|0)}else{g7(6512,(B=i,i=i+8|0,c[B>>2]=b,B)|0);g7(8520,(B=i,i=i+8|0,c[B>>2]=k,B)|0)}}while(0);k=dN()|0;c[c[j>>2]>>2]=k;k=c[j>>2]|0;bV(c[k>>2]|0,c[k+4>>2]|0);k=c[j>>2]|0;bV(c[k>>2]|0,c[k+8>>2]|0);aQ(c[c[j>>2]>>2]|0);dn(c[c[j>>2]>>2]|0,4096,h|0,b|0);bA(c[c[j>>2]>>2]|0,35714,g|0);if((c[g>>2]|0)!=1){g7(2448,(B=i,i=i+8|0,c[B>>2]=b,B)|0);l=c[j>>2]|0;m=l|0;n=c[m>>2]|0;d8(n|0);i=e;return}if((c[h>>2]|0)<=16){l=c[j>>2]|0;m=l|0;n=c[m>>2]|0;d8(n|0);i=e;return}g4(46288,(B=i,i=i+8|0,c[B>>2]=b,B)|0);l=c[j>>2]|0;m=l|0;n=c[m>>2]|0;d8(n|0);i=e;return}function rd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+80|0;g=f|0;h=(d|0)!=0;Zt(b|0,(h?d:e)|0);e=bf(b|0,44536)|0;if((e|0)==0){i=f;return}d=cZ(e+8|0)|0;if((d|0)<=100){i=f;return}j=e+8|0;while(1){e=a[j]|0;if((e<<24>>24|0)==49){k=3300;break}else if((e<<24>>24|0)!=32){break}j=j+1|0}do{if((k|0)==3300){e=j+1|0;if((a[e]|0)==0){break}l=j+2|0;if((a[l]|0)==0){break}a[l]=48;a[e]=48}}while(0);if((d|0)<=120){i=f;return}d=b+((Zr(b|0)|0)+1|0)|0;j=bf(b|0,21504)|0;if((j|0)==0){i=f;return}k=dO(j|0,40)|0;if((k|0)==0){i=f;return}j=dO(k|0,41)|0;if((j|0)==0){i=f;return}if((dO(j|0,123)|0)==0){i=f;return}j=g|0;c[j>>2]=22440;c[g+4>>2]=22112;c[g+8>>2]=21896;c[g+12>>2]=h?21664:21344;c[g+16>>2]=20848;c[g+20>>2]=h?20680:20400;c[g+24>>2]=20192;c[g+28>>2]=h?19920:19696;c[g+32>>2]=19464;c[g+36>>2]=h?19184:16296;c[g+40>>2]=15952;c[g+44>>2]=21344;c[g+48>>2]=15512;c[g+52>>2]=20400;c[g+56>>2]=12936;c[g+60>>2]=19696;c[g+64>>2]=12600;c[g+68>>2]=16296;c[g+72>>2]=0;g=d;d=j;j=22440;while(1){h=bf(b|0,j|0)|0;if((h|0)==0){m=g}else{k=d+4|0;e=g;l=j;n=h;while(1){h=Zr(l|0)|0;o=c[k>>2]|0;p=Zr(o|0)|0;if(p>>>0>h>>>0){Zu(n+p|0,n+h|0,(e-n|0)-h|0);q=c[k>>2]|0}else{q=o}Zp(n|0,q|0,p);if(p>>>0<h>>>0){o=p-h|0;Zq(n+h|0,32,o|0);r=o}else{r=p-h|0}h=e+r|0;p=c[d>>2]|0;o=bf(b|0,p|0)|0;if((o|0)==0){m=h;break}else{e=h;l=p;n=o}}}n=d+8|0;l=c[n>>2]|0;if((l|0)==0){break}else{g=m;d=n;j=l}}i=f;return}function re(a){a=a|0;return}function rf(a,b){a=a|0;b=+b;return}function rg(a,b){a=a|0;b=+b;return}function rh(a){a=a|0;return 16224|0}function ri(a){a=a|0;return}function rj(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function rk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=b+104|0;f=c[e>>2]|0;if((f|0)==0){g=0}else{g=(a[b+(f-1<<3)+1|0]|0)+1&255}h=d+2|0;if((a[h]|0)==0){return}else{i=0;j=h;k=f}do{a[b+(k<<3)|0]=a[d+(i*3&-1)|0]|0;a[b+(c[e>>2]<<3)+2|0]=a[d+(i*3&-1)+1|0]|0;a[b+(c[e>>2]<<3)+3|0]=a[j]|0;a[b+(c[e>>2]<<3)+1|0]=g;f=c[e>>2]|0;c[b+(f<<3)+4>>2]=-1;k=f+1|0;c[e>>2]=k;i=i+1|0;j=d+(i*3&-1)+2|0;}while((a[j]|0)!=0);return}function rl(a){a=a|0;return c[a>>2]|0}function