20755 lines
1.7 MiB
Plaintext
20755 lines
1.7 MiB
Plaintext
// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code
|
|
// Note: Some Emscripten settings may limit the speed of the generated code.
|
|
// The Module object: Our interface to the outside world. We import
|
|
// and export values on it, and do the work to get that through
|
|
// closure compiler if necessary. There are various ways Module can be used:
|
|
// 1. Not defined. We create it here
|
|
// 2. A function parameter, function(Module) { ..generated code.. }
|
|
// 3. pre-run appended it, var Module = {}; ..generated code..
|
|
// 4. External script tag defines var Module.
|
|
// We need to do an eval in order to handle the closure compiler
|
|
// case, where this code here is minified but Module was defined
|
|
// elsewhere (e.g. case 4 above). We also need to check if Module
|
|
// already exists (e.g. case 3 above).
|
|
// Note that if you want to run closure, and also to use Module
|
|
// after the generated code, you will need to define var Module = {};
|
|
// before the code. Then that object will be used in the code, and you
|
|
// can continue to use Module afterwards as well.
|
|
var Module;
|
|
if (!Module) Module = eval('(function() { try { return ioq3ded || {} } catch(e) { return {} } })()');
|
|
|
|
// Sometimes an existing Module object exists with properties
|
|
// meant to overwrite the default module functionality. Here
|
|
// we collect those properties and reapply _after_ we configure
|
|
// the current environment's defaults to avoid having to be so
|
|
// defensive during initialization.
|
|
var moduleOverrides = {};
|
|
for (var key in Module) {
|
|
if (Module.hasOwnProperty(key)) {
|
|
moduleOverrides[key] = Module[key];
|
|
}
|
|
}
|
|
|
|
// The environment setup code below is customized to use Module.
|
|
// *** Environment setup code ***
|
|
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
|
|
var ENVIRONMENT_IS_WEB = typeof window === 'object';
|
|
var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
|
|
var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
|
|
|
|
if (ENVIRONMENT_IS_NODE) {
|
|
// Expose functionality in the same simple way that the shells work
|
|
// Note that we pollute the global namespace here, otherwise we break in node
|
|
if (!Module['print']) Module['print'] = function print(x) {
|
|
process['stdout'].write(x + '\n');
|
|
};
|
|
if (!Module['printErr']) Module['printErr'] = function printErr(x) {
|
|
process['stderr'].write(x + '\n');
|
|
};
|
|
|
|
var nodeFS = require('fs');
|
|
var nodePath = require('path');
|
|
|
|
Module['read'] = function read(filename, binary) {
|
|
filename = nodePath['normalize'](filename);
|
|
var ret = nodeFS['readFileSync'](filename);
|
|
// The path is absolute if the normalized version is the same as the resolved.
|
|
if (!ret && filename != nodePath['resolve'](filename)) {
|
|
filename = path.join(__dirname, '..', 'src', filename);
|
|
ret = nodeFS['readFileSync'](filename);
|
|
}
|
|
if (ret && !binary) ret = ret.toString();
|
|
return ret;
|
|
};
|
|
|
|
Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
|
|
|
|
Module['load'] = function load(f) {
|
|
globalEval(read(f));
|
|
};
|
|
|
|
Module['arguments'] = process['argv'].slice(2);
|
|
|
|
module['exports'] = Module;
|
|
}
|
|
else if (ENVIRONMENT_IS_SHELL) {
|
|
if (!Module['print']) Module['print'] = print;
|
|
if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
|
|
|
|
if (typeof read != 'undefined') {
|
|
Module['read'] = read;
|
|
} else {
|
|
Module['read'] = function read() { throw 'no read() available (jsc?)' };
|
|
}
|
|
|
|
Module['readBinary'] = function readBinary(f) {
|
|
return read(f, 'binary');
|
|
};
|
|
|
|
if (typeof scriptArgs != 'undefined') {
|
|
Module['arguments'] = scriptArgs;
|
|
} else if (typeof arguments != 'undefined') {
|
|
Module['arguments'] = arguments;
|
|
}
|
|
|
|
this['ioq3ded'] = Module;
|
|
|
|
eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly)
|
|
}
|
|
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
|
|
Module['read'] = function read(url) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('GET', url, false);
|
|
xhr.send(null);
|
|
return xhr.responseText;
|
|
};
|
|
|
|
if (typeof arguments != 'undefined') {
|
|
Module['arguments'] = arguments;
|
|
}
|
|
|
|
if (typeof console !== 'undefined') {
|
|
if (!Module['print']) Module['print'] = function print(x) {
|
|
console.log(x);
|
|
};
|
|
if (!Module['printErr']) Module['printErr'] = function printErr(x) {
|
|
console.log(x);
|
|
};
|
|
} else {
|
|
// Probably a worker, and without console.log. We can do very little here...
|
|
var TRY_USE_DUMP = false;
|
|
if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
|
|
dump(x);
|
|
}) : (function(x) {
|
|
// self.postMessage(x); // enable this if you want stdout to be sent as messages
|
|
}));
|
|
}
|
|
|
|
if (ENVIRONMENT_IS_WEB) {
|
|
this['ioq3ded'] = Module;
|
|
} else {
|
|
Module['load'] = importScripts;
|
|
}
|
|
}
|
|
else {
|
|
// Unreachable because SHELL is dependant on the others
|
|
throw 'Unknown runtime environment. Where are we?';
|
|
}
|
|
|
|
function globalEval(x) {
|
|
eval.call(null, x);
|
|
}
|
|
if (!Module['load'] == 'undefined' && Module['read']) {
|
|
Module['load'] = function load(f) {
|
|
globalEval(Module['read'](f));
|
|
};
|
|
}
|
|
if (!Module['print']) {
|
|
Module['print'] = function(){};
|
|
}
|
|
if (!Module['printErr']) {
|
|
Module['printErr'] = Module['print'];
|
|
}
|
|
if (!Module['arguments']) {
|
|
Module['arguments'] = [];
|
|
}
|
|
// *** Environment setup code ***
|
|
|
|
// Closure helpers
|
|
Module.print = Module['print'];
|
|
Module.printErr = Module['printErr'];
|
|
|
|
// Callbacks
|
|
Module['preRun'] = [];
|
|
Module['postRun'] = [];
|
|
|
|
// Merge back in the overrides
|
|
for (var key in moduleOverrides) {
|
|
if (moduleOverrides.hasOwnProperty(key)) {
|
|
Module[key] = moduleOverrides[key];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// === Auto-generated preamble library stuff ===
|
|
|
|
//========================================
|
|
// Runtime code shared with compiler
|
|
//========================================
|
|
|
|
var Runtime = {
|
|
stackSave: function () {
|
|
return STACKTOP;
|
|
},
|
|
stackRestore: function (stackTop) {
|
|
STACKTOP = stackTop;
|
|
},
|
|
forceAlign: function (target, quantum) {
|
|
quantum = quantum || 4;
|
|
if (quantum == 1) return target;
|
|
if (isNumber(target) && isNumber(quantum)) {
|
|
return Math.ceil(target/quantum)*quantum;
|
|
} else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
|
|
return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
|
|
}
|
|
return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
|
|
},
|
|
isNumberType: function (type) {
|
|
return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
|
|
},
|
|
isPointerType: function isPointerType(type) {
|
|
return type[type.length-1] == '*';
|
|
},
|
|
isStructType: function isStructType(type) {
|
|
if (isPointerType(type)) return false;
|
|
if (isArrayType(type)) return true;
|
|
if (/<?{ ?[^}]* ?}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
|
|
// See comment in isStructPointerType()
|
|
return type[0] == '%';
|
|
},
|
|
INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
|
|
FLOAT_TYPES: {"float":0,"double":0},
|
|
or64: function (x, y) {
|
|
var l = (x | 0) | (y | 0);
|
|
var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
|
|
return l + h;
|
|
},
|
|
and64: function (x, y) {
|
|
var l = (x | 0) & (y | 0);
|
|
var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
|
|
return l + h;
|
|
},
|
|
xor64: function (x, y) {
|
|
var l = (x | 0) ^ (y | 0);
|
|
var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
|
|
return l + h;
|
|
},
|
|
getNativeTypeSize: function (type) {
|
|
switch (type) {
|
|
case 'i1': case 'i8': return 1;
|
|
case 'i16': return 2;
|
|
case 'i32': return 4;
|
|
case 'i64': return 8;
|
|
case 'float': return 4;
|
|
case 'double': return 8;
|
|
default: {
|
|
if (type[type.length-1] === '*') {
|
|
return Runtime.QUANTUM_SIZE; // A pointer
|
|
} else if (type[0] === 'i') {
|
|
var bits = parseInt(type.substr(1));
|
|
assert(bits % 8 === 0);
|
|
return bits/8;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
getNativeFieldSize: function (type) {
|
|
return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
|
|
},
|
|
dedup: function dedup(items, ident) {
|
|
var seen = {};
|
|
if (ident) {
|
|
return items.filter(function(item) {
|
|
if (seen[item[ident]]) return false;
|
|
seen[item[ident]] = true;
|
|
return true;
|
|
});
|
|
} else {
|
|
return items.filter(function(item) {
|
|
if (seen[item]) return false;
|
|
seen[item] = true;
|
|
return true;
|
|
});
|
|
}
|
|
},
|
|
set: function set() {
|
|
var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
|
|
var ret = {};
|
|
for (var i = 0; i < args.length; i++) {
|
|
ret[args[i]] = 0;
|
|
}
|
|
return ret;
|
|
},
|
|
STACK_ALIGN: 8,
|
|
getAlignSize: function (type, size, vararg) {
|
|
// we align i64s and doubles on 64-bit boundaries, unlike x86
|
|
if (vararg) return 8;
|
|
if (!vararg && (type == 'i64' || type == 'double')) return 8;
|
|
if (!type) return Math.min(size, 8); // align structures internally to 64 bits
|
|
return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
|
|
},
|
|
calculateStructAlignment: function calculateStructAlignment(type) {
|
|
type.flatSize = 0;
|
|
type.alignSize = 0;
|
|
var diffs = [];
|
|
var prev = -1;
|
|
var index = 0;
|
|
type.flatIndexes = type.fields.map(function(field) {
|
|
index++;
|
|
var size, alignSize;
|
|
if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
|
|
size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
|
|
alignSize = Runtime.getAlignSize(field, size);
|
|
} else if (Runtime.isStructType(field)) {
|
|
if (field[1] === '0') {
|
|
// this is [0 x something]. When inside another structure like here, it must be at the end,
|
|
// and it adds no size
|
|
// XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
|
|
size = 0;
|
|
if (Types.types[field]) {
|
|
alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
|
|
} else {
|
|
alignSize = type.alignSize || QUANTUM_SIZE;
|
|
}
|
|
} else {
|
|
size = Types.types[field].flatSize;
|
|
alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
|
|
}
|
|
} else if (field[0] == 'b') {
|
|
// bN, large number field, like a [N x i8]
|
|
size = field.substr(1)|0;
|
|
alignSize = 1;
|
|
} else if (field[0] === '<') {
|
|
// vector type
|
|
size = alignSize = Types.types[field].flatSize; // fully aligned
|
|
} else if (field[0] === 'i') {
|
|
// illegal integer field, that could not be legalized because it is an internal structure field
|
|
// it is ok to have such fields, if we just use them as markers of field size and nothing more complex
|
|
size = alignSize = parseInt(field.substr(1))/8;
|
|
assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
|
|
} else {
|
|
assert(false, 'invalid type for calculateStructAlignment');
|
|
}
|
|
if (type.packed) alignSize = 1;
|
|
type.alignSize = Math.max(type.alignSize, alignSize);
|
|
var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
|
|
type.flatSize = curr + size;
|
|
if (prev >= 0) {
|
|
diffs.push(curr-prev);
|
|
}
|
|
prev = curr;
|
|
return curr;
|
|
});
|
|
if (type.name_ && type.name_[0] === '[') {
|
|
// arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
|
|
// allocating a potentially huge array for [999999 x i8] etc.
|
|
type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
|
|
}
|
|
type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
|
|
if (diffs.length == 0) {
|
|
type.flatFactor = type.flatSize;
|
|
} else if (Runtime.dedup(diffs).length == 1) {
|
|
type.flatFactor = diffs[0];
|
|
}
|
|
type.needsFlattening = (type.flatFactor != 1);
|
|
return type.flatIndexes;
|
|
},
|
|
generateStructInfo: function (struct, typeName, offset) {
|
|
var type, alignment;
|
|
if (typeName) {
|
|
offset = offset || 0;
|
|
type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
|
|
if (!type) return null;
|
|
if (type.fields.length != struct.length) {
|
|
printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
|
|
return null;
|
|
}
|
|
alignment = type.flatIndexes;
|
|
} else {
|
|
var type = { fields: struct.map(function(item) { return item[0] }) };
|
|
alignment = Runtime.calculateStructAlignment(type);
|
|
}
|
|
var ret = {
|
|
__size__: type.flatSize
|
|
};
|
|
if (typeName) {
|
|
struct.forEach(function(item, i) {
|
|
if (typeof item === 'string') {
|
|
ret[item] = alignment[i] + offset;
|
|
} else {
|
|
// embedded struct
|
|
var key;
|
|
for (var k in item) key = k;
|
|
ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
|
|
}
|
|
});
|
|
} else {
|
|
struct.forEach(function(item, i) {
|
|
ret[item[1]] = alignment[i];
|
|
});
|
|
}
|
|
return ret;
|
|
},
|
|
dynCall: function (sig, ptr, args) {
|
|
if (args && args.length) {
|
|
if (!args.splice) args = Array.prototype.slice.call(args);
|
|
args.splice(0, 0, ptr);
|
|
return Module['dynCall_' + sig].apply(null, args);
|
|
} else {
|
|
return Module['dynCall_' + sig].call(null, ptr);
|
|
}
|
|
},
|
|
functionPointers: [null],
|
|
addFunction: function (func) {
|
|
for (var i = 0; i < Runtime.functionPointers.length; i++) {
|
|
if (!Runtime.functionPointers[i]) {
|
|
Runtime.functionPointers[i] = func;
|
|
return 2*(1 + i);
|
|
}
|
|
}
|
|
throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
|
|
},
|
|
removeFunction: function (index) {
|
|
Runtime.functionPointers[(index-2)/2] = null;
|
|
},
|
|
getAsmConst: function (code, numArgs) {
|
|
// code is a constant string on the heap, so we can cache these
|
|
if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
|
|
var func = Runtime.asmConstCache[code];
|
|
if (func) return func;
|
|
var args = [];
|
|
for (var i = 0; i < numArgs; i++) {
|
|
args.push(String.fromCharCode(36) + i); // $0, $1 etc
|
|
}
|
|
code = Pointer_stringify(code);
|
|
if (code[0] === '"') {
|
|
// tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
|
|
if (code.indexOf('"', 1) === code.length-1) {
|
|
code = code.substr(1, code.length-2);
|
|
} else {
|
|
// something invalid happened, e.g. EM_ASM("..code($0)..", input)
|
|
abort('invalid EM_ASM input |' + code + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
|
|
}
|
|
}
|
|
return Runtime.asmConstCache[code] = eval('(function(' + args.join(',') + '){ ' + code + ' })'); // new Function does not allow upvars in node
|
|
},
|
|
warnOnce: function (text) {
|
|
if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
|
|
if (!Runtime.warnOnce.shown[text]) {
|
|
Runtime.warnOnce.shown[text] = 1;
|
|
Module.printErr(text);
|
|
}
|
|
},
|
|
funcWrappers: {},
|
|
getFuncWrapper: function (func, sig) {
|
|
assert(sig);
|
|
if (!Runtime.funcWrappers[func]) {
|
|
Runtime.funcWrappers[func] = function dynCall_wrapper() {
|
|
return Runtime.dynCall(sig, func, arguments);
|
|
};
|
|
}
|
|
return Runtime.funcWrappers[func];
|
|
},
|
|
UTF8Processor: function () {
|
|
var buffer = [];
|
|
var needed = 0;
|
|
this.processCChar = function (code) {
|
|
code = code & 0xFF;
|
|
|
|
if (buffer.length == 0) {
|
|
if ((code & 0x80) == 0x00) { // 0xxxxxxx
|
|
return String.fromCharCode(code);
|
|
}
|
|
buffer.push(code);
|
|
if ((code & 0xE0) == 0xC0) { // 110xxxxx
|
|
needed = 1;
|
|
} else if ((code & 0xF0) == 0xE0) { // 1110xxxx
|
|
needed = 2;
|
|
} else { // 11110xxx
|
|
needed = 3;
|
|
}
|
|
return '';
|
|
}
|
|
|
|
if (needed) {
|
|
buffer.push(code);
|
|
needed--;
|
|
if (needed > 0) return '';
|
|
}
|
|
|
|
var c1 = buffer[0];
|
|
var c2 = buffer[1];
|
|
var c3 = buffer[2];
|
|
var c4 = buffer[3];
|
|
var ret;
|
|
if (buffer.length == 2) {
|
|
ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F));
|
|
} else if (buffer.length == 3) {
|
|
ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
|
|
} else {
|
|
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
|
var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
|
|
((c3 & 0x3F) << 6) | (c4 & 0x3F);
|
|
ret = String.fromCharCode(
|
|
Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
|
|
(codePoint - 0x10000) % 0x400 + 0xDC00);
|
|
}
|
|
buffer.length = 0;
|
|
return ret;
|
|
}
|
|
this.processJSString = function processJSString(string) {
|
|
string = unescape(encodeURIComponent(string));
|
|
var ret = [];
|
|
for (var i = 0; i < string.length; i++) {
|
|
ret.push(string.charCodeAt(i));
|
|
}
|
|
return ret;
|
|
}
|
|
},
|
|
stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
|
|
staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
|
|
dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
|
|
alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
|
|
makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; },
|
|
GLOBAL_BASE: 8,
|
|
QUANTUM_SIZE: 4,
|
|
__dummy__: 0
|
|
}
|
|
|
|
|
|
Module['Runtime'] = Runtime;
|
|
|
|
function jsCall() {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
return Runtime.functionPointers[args[0]].apply(null, args.slice(1));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//========================================
|
|
// Runtime essentials
|
|
//========================================
|
|
|
|
var __THREW__ = 0; // Used in checking for thrown exceptions.
|
|
|
|
var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
|
|
var EXITSTATUS = 0;
|
|
|
|
var undef = 0;
|
|
// tempInt is used for 32-bit signed values or smaller. tempBigInt is used
|
|
// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
|
|
var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
|
|
var tempI64, tempI64b;
|
|
var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
|
|
|
|
function assert(condition, text) {
|
|
if (!condition) {
|
|
abort('Assertion failed: ' + text);
|
|
}
|
|
}
|
|
|
|
var globalScope = this;
|
|
|
|
// C calling interface. A convenient way to call C functions (in C files, or
|
|
// defined with extern "C").
|
|
//
|
|
// Note: LLVM optimizations can inline and remove functions, after which you will not be
|
|
// able to call them. Closure can also do so. To avoid that, add your function to
|
|
// the exports using something like
|
|
//
|
|
// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
|
|
//
|
|
// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
|
|
// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
|
|
// 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
|
|
// @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,
|
|
// except that 'array' is not possible (there is no way for us to know the length of the array)
|
|
// @param args An array of the arguments to the function, as native JS values (as in returnType)
|
|
// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
|
|
// @return The return value, as a native JS value (as in returnType)
|
|
function ccall(ident, returnType, argTypes, args) {
|
|
return ccallFunc(getCFunc(ident), returnType, argTypes, args);
|
|
}
|
|
Module["ccall"] = ccall;
|
|
|
|
// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
|
|
function getCFunc(ident) {
|
|
try {
|
|
var func = Module['_' + ident]; // closure exported function
|
|
if (!func) func = eval('_' + ident); // explicit lookup
|
|
} catch(e) {
|
|
}
|
|
assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
|
|
return func;
|
|
}
|
|
|
|
// Internal function that does a C call using a function, not an identifier
|
|
function ccallFunc(func, returnType, argTypes, args) {
|
|
var stack = 0;
|
|
function toC(value, type) {
|
|
if (type == 'string') {
|
|
if (value === null || value === undefined || value === 0) return 0; // null string
|
|
value = intArrayFromString(value);
|
|
type = 'array';
|
|
}
|
|
if (type == 'array') {
|
|
if (!stack) stack = Runtime.stackSave();
|
|
var ret = Runtime.stackAlloc(value.length);
|
|
writeArrayToMemory(value, ret);
|
|
return ret;
|
|
}
|
|
return value;
|
|
}
|
|
function fromC(value, type) {
|
|
if (type == 'string') {
|
|
return Pointer_stringify(value);
|
|
}
|
|
assert(type != 'array');
|
|
return value;
|
|
}
|
|
var i = 0;
|
|
var cArgs = args ? args.map(function(arg) {
|
|
return toC(arg, argTypes[i++]);
|
|
}) : [];
|
|
var ret = fromC(func.apply(null, cArgs), returnType);
|
|
if (stack) Runtime.stackRestore(stack);
|
|
return ret;
|
|
}
|
|
|
|
// Returns a native JS wrapper for a C function. This is similar to ccall, but
|
|
// returns a function you can call repeatedly in a normal way. For example:
|
|
//
|
|
// var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
|
|
// alert(my_function(5, 22));
|
|
// alert(my_function(99, 12));
|
|
//
|
|
function cwrap(ident, returnType, argTypes) {
|
|
var func = getCFunc(ident);
|
|
return function() {
|
|
return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
|
|
}
|
|
}
|
|
Module["cwrap"] = cwrap;
|
|
|
|
// Sets a value in memory in a dynamic way at run-time. Uses the
|
|
// type data. This is the same as makeSetValue, except that
|
|
// makeSetValue is done at compile-time and generates the needed
|
|
// code then, whereas this function picks the right code at
|
|
// run-time.
|
|
// Note that setValue and getValue only do *aligned* writes and reads!
|
|
// Note that ccall uses JS types as for defining types, while setValue and
|
|
// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
|
|
function setValue(ptr, value, type, noSafe) {
|
|
type = type || 'i8';
|
|
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
|
|
switch(type) {
|
|
case 'i1': HEAP8[(ptr)]=value; break;
|
|
case 'i8': HEAP8[(ptr)]=value; break;
|
|
case 'i16': HEAP16[((ptr)>>1)]=value; break;
|
|
case 'i32': HEAP32[((ptr)>>2)]=value; break;
|
|
case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
|
|
case 'float': HEAPF32[((ptr)>>2)]=value; break;
|
|
case 'double': HEAPF64[((ptr)>>3)]=value; break;
|
|
default: abort('invalid type for setValue: ' + type);
|
|
}
|
|
}
|
|
Module['setValue'] = setValue;
|
|
|
|
// Parallel to setValue.
|
|
function getValue(ptr, type, noSafe) {
|
|
type = type || 'i8';
|
|
if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
|
|
switch(type) {
|
|
case 'i1': return HEAP8[(ptr)];
|
|
case 'i8': return HEAP8[(ptr)];
|
|
case 'i16': return HEAP16[((ptr)>>1)];
|
|
case 'i32': return HEAP32[((ptr)>>2)];
|
|
case 'i64': return HEAP32[((ptr)>>2)];
|
|
case 'float': return HEAPF32[((ptr)>>2)];
|
|
case 'double': return HEAPF64[((ptr)>>3)];
|
|
default: abort('invalid type for setValue: ' + type);
|
|
}
|
|
return null;
|
|
}
|
|
Module['getValue'] = getValue;
|
|
|
|
var ALLOC_NORMAL = 0; // Tries to use _malloc()
|
|
var ALLOC_STACK = 1; // Lives for the duration of the current function call
|
|
var ALLOC_STATIC = 2; // Cannot be freed
|
|
var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
|
|
var ALLOC_NONE = 4; // Do not allocate
|
|
Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
|
|
Module['ALLOC_STACK'] = ALLOC_STACK;
|
|
Module['ALLOC_STATIC'] = ALLOC_STATIC;
|
|
Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
|
|
Module['ALLOC_NONE'] = ALLOC_NONE;
|
|
|
|
// allocate(): This is for internal use. You can use it yourself as well, but the interface
|
|
// is a little tricky (see docs right below). The reason is that it is optimized
|
|
// for multiple syntaxes to save space in generated code. So you should
|
|
// normally not use allocate(), and instead allocate memory using _malloc(),
|
|
// initialize it with setValue(), and so forth.
|
|
// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
|
|
// in *bytes* (note that this is sometimes confusing: the next parameter does not
|
|
// affect this!)
|
|
// @types: Either an array of types, one for each byte (or 0 if no type at that position),
|
|
// or a single type which is used for the entire block. This only matters if there
|
|
// is initial data - if @slab is a number, then this does not matter at all and is
|
|
// ignored.
|
|
// @allocator: How to allocate memory, see ALLOC_*
|
|
function allocate(slab, types, allocator, ptr) {
|
|
var zeroinit, size;
|
|
if (typeof slab === 'number') {
|
|
zeroinit = true;
|
|
size = slab;
|
|
} else {
|
|
zeroinit = false;
|
|
size = slab.length;
|
|
}
|
|
|
|
var singleType = typeof types === 'string' ? types : null;
|
|
|
|
var ret;
|
|
if (allocator == ALLOC_NONE) {
|
|
ret = ptr;
|
|
} else {
|
|
ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
|
|
}
|
|
|
|
if (zeroinit) {
|
|
var ptr = ret, stop;
|
|
assert((ret & 3) == 0);
|
|
stop = ret + (size & ~3);
|
|
for (; ptr < stop; ptr += 4) {
|
|
HEAP32[((ptr)>>2)]=0;
|
|
}
|
|
stop = ret + size;
|
|
while (ptr < stop) {
|
|
HEAP8[((ptr++)|0)]=0;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
if (singleType === 'i8') {
|
|
if (slab.subarray || slab.slice) {
|
|
HEAPU8.set(slab, ret);
|
|
} else {
|
|
HEAPU8.set(new Uint8Array(slab), ret);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
var i = 0, type, typeSize, previousType;
|
|
while (i < size) {
|
|
var curr = slab[i];
|
|
|
|
if (typeof curr === 'function') {
|
|
curr = Runtime.getFunctionIndex(curr);
|
|
}
|
|
|
|
type = singleType || types[i];
|
|
if (type === 0) {
|
|
i++;
|
|
continue;
|
|
}
|
|
|
|
if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
|
|
|
|
setValue(ret+i, curr, type);
|
|
|
|
// no need to look up size unless type changes, so cache it
|
|
if (previousType !== type) {
|
|
typeSize = Runtime.getNativeTypeSize(type);
|
|
previousType = type;
|
|
}
|
|
i += typeSize;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
Module['allocate'] = allocate;
|
|
|
|
function Pointer_stringify(ptr, /* optional */ length) {
|
|
// TODO: use TextDecoder
|
|
// Find the length, and check for UTF while doing so
|
|
var hasUtf = false;
|
|
var t;
|
|
var i = 0;
|
|
while (1) {
|
|
t = HEAPU8[(((ptr)+(i))|0)];
|
|
if (t >= 128) hasUtf = true;
|
|
else if (t == 0 && !length) break;
|
|
i++;
|
|
if (length && i == length) break;
|
|
}
|
|
if (!length) length = i;
|
|
|
|
var ret = '';
|
|
|
|
if (!hasUtf) {
|
|
var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
|
|
var curr;
|
|
while (length > 0) {
|
|
curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
|
|
ret = ret ? ret + curr : curr;
|
|
ptr += MAX_CHUNK;
|
|
length -= MAX_CHUNK;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
var utf8 = new Runtime.UTF8Processor();
|
|
for (i = 0; i < length; i++) {
|
|
t = HEAPU8[(((ptr)+(i))|0)];
|
|
ret += utf8.processCChar(t);
|
|
}
|
|
return ret;
|
|
}
|
|
Module['Pointer_stringify'] = Pointer_stringify;
|
|
|
|
// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
|
|
// a copy of that string as a Javascript String object.
|
|
function UTF16ToString(ptr) {
|
|
var i = 0;
|
|
|
|
var str = '';
|
|
while (1) {
|
|
var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
|
|
if (codeUnit == 0)
|
|
return str;
|
|
++i;
|
|
// fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
|
|
str += String.fromCharCode(codeUnit);
|
|
}
|
|
}
|
|
Module['UTF16ToString'] = UTF16ToString;
|
|
|
|
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
|
|
// null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
|
|
function stringToUTF16(str, outPtr) {
|
|
for(var i = 0; i < str.length; ++i) {
|
|
// charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
|
|
var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
|
|
HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
|
|
}
|
|
// Null-terminate the pointer to the HEAP.
|
|
HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
|
|
}
|
|
Module['stringToUTF16'] = stringToUTF16;
|
|
|
|
// Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns
|
|
// a copy of that string as a Javascript String object.
|
|
function UTF32ToString(ptr) {
|
|
var i = 0;
|
|
|
|
var str = '';
|
|
while (1) {
|
|
var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
|
|
if (utf32 == 0)
|
|
return str;
|
|
++i;
|
|
// Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
|
|
if (utf32 >= 0x10000) {
|
|
var ch = utf32 - 0x10000;
|
|
str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
|
|
} else {
|
|
str += String.fromCharCode(utf32);
|
|
}
|
|
}
|
|
}
|
|
Module['UTF32ToString'] = UTF32ToString;
|
|
|
|
// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
|
|
// null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
|
|
// but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string.
|
|
function stringToUTF32(str, outPtr) {
|
|
var iChar = 0;
|
|
for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
|
|
// Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
|
|
var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
|
|
if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
|
|
var trailSurrogate = str.charCodeAt(++iCodeUnit);
|
|
codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
|
|
}
|
|
HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
|
|
++iChar;
|
|
}
|
|
// Null-terminate the pointer to the HEAP.
|
|
HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
|
|
}
|
|
Module['stringToUTF32'] = stringToUTF32;
|
|
|
|
function demangle(func) {
|
|
try {
|
|
// Special-case the entry point, since its name differs from other name mangling.
|
|
if (func == 'Object._main' || func == '_main') {
|
|
return 'main()';
|
|
}
|
|
if (typeof func === 'number') func = Pointer_stringify(func);
|
|
if (func[0] !== '_') return func;
|
|
if (func[1] !== '_') return func; // C function
|
|
if (func[2] !== 'Z') return func;
|
|
switch (func[3]) {
|
|
case 'n': return 'operator new()';
|
|
case 'd': return 'operator delete()';
|
|
}
|
|
var i = 3;
|
|
// params, etc.
|
|
var basicTypes = {
|
|
'v': 'void',
|
|
'b': 'bool',
|
|
'c': 'char',
|
|
's': 'short',
|
|
'i': 'int',
|
|
'l': 'long',
|
|
'f': 'float',
|
|
'd': 'double',
|
|
'w': 'wchar_t',
|
|
'a': 'signed char',
|
|
'h': 'unsigned char',
|
|
't': 'unsigned short',
|
|
'j': 'unsigned int',
|
|
'm': 'unsigned long',
|
|
'x': 'long long',
|
|
'y': 'unsigned long long',
|
|
'z': '...'
|
|
};
|
|
function dump(x) {
|
|
//return;
|
|
if (x) Module.print(x);
|
|
Module.print(func);
|
|
var pre = '';
|
|
for (var a = 0; a < i; a++) pre += ' ';
|
|
Module.print (pre + '^');
|
|
}
|
|
var subs = [];
|
|
function parseNested() {
|
|
i++;
|
|
if (func[i] === 'K') i++; // ignore const
|
|
var parts = [];
|
|
while (func[i] !== 'E') {
|
|
if (func[i] === 'S') { // substitution
|
|
i++;
|
|
var next = func.indexOf('_', i);
|
|
var num = func.substring(i, next) || 0;
|
|
parts.push(subs[num] || '?');
|
|
i = next+1;
|
|
continue;
|
|
}
|
|
if (func[i] === 'C') { // constructor
|
|
parts.push(parts[parts.length-1]);
|
|
i += 2;
|
|
continue;
|
|
}
|
|
var size = parseInt(func.substr(i));
|
|
var pre = size.toString().length;
|
|
if (!size || !pre) { i--; break; } // counter i++ below us
|
|
var curr = func.substr(i + pre, size);
|
|
parts.push(curr);
|
|
subs.push(curr);
|
|
i += pre + size;
|
|
}
|
|
i++; // skip E
|
|
return parts;
|
|
}
|
|
var first = true;
|
|
function parse(rawList, limit, allowVoid) { // main parser
|
|
limit = limit || Infinity;
|
|
var ret = '', list = [];
|
|
function flushList() {
|
|
return '(' + list.join(', ') + ')';
|
|
}
|
|
var name;
|
|
if (func[i] === 'N') {
|
|
// namespaced N-E
|
|
name = parseNested().join('::');
|
|
limit--;
|
|
if (limit === 0) return rawList ? [name] : name;
|
|
} else {
|
|
// not namespaced
|
|
if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
|
|
var size = parseInt(func.substr(i));
|
|
if (size) {
|
|
var pre = size.toString().length;
|
|
name = func.substr(i + pre, size);
|
|
i += pre + size;
|
|
}
|
|
}
|
|
first = false;
|
|
if (func[i] === 'I') {
|
|
i++;
|
|
var iList = parse(true);
|
|
var iRet = parse(true, 1, true);
|
|
ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
|
|
} else {
|
|
ret = name;
|
|
}
|
|
paramLoop: while (i < func.length && limit-- > 0) {
|
|
//dump('paramLoop');
|
|
var c = func[i++];
|
|
if (c in basicTypes) {
|
|
list.push(basicTypes[c]);
|
|
} else {
|
|
switch (c) {
|
|
case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
|
|
case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference
|
|
case 'L': { // literal
|
|
i++; // skip basic type
|
|
var end = func.indexOf('E', i);
|
|
var size = end - i;
|
|
list.push(func.substr(i, size));
|
|
i += size + 2; // size + 'EE'
|
|
break;
|
|
}
|
|
case 'A': { // array
|
|
var size = parseInt(func.substr(i));
|
|
i += size.toString().length;
|
|
if (func[i] !== '_') throw '?';
|
|
i++; // skip _
|
|
list.push(parse(true, 1, true)[0] + ' [' + size + ']');
|
|
break;
|
|
}
|
|
case 'E': break paramLoop;
|
|
default: ret += '?' + c; break paramLoop;
|
|
}
|
|
}
|
|
}
|
|
if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void)
|
|
return rawList ? list : ret + flushList();
|
|
}
|
|
return parse();
|
|
} catch(e) {
|
|
return func;
|
|
}
|
|
}
|
|
|
|
function demangleAll(text) {
|
|
return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
|
|
}
|
|
|
|
function stackTrace() {
|
|
var stack = new Error().stack;
|
|
return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6.
|
|
}
|
|
|
|
// Memory management
|
|
|
|
var PAGE_SIZE = 4096;
|
|
function alignMemoryPage(x) {
|
|
return (x+4095)&-4096;
|
|
}
|
|
|
|
var HEAP;
|
|
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
|
|
|
|
var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
|
|
var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
|
|
var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
|
|
|
|
function enlargeMemory() {
|
|
abort('Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', or (2) set Module.TOTAL_MEMORY before the program runs.');
|
|
}
|
|
|
|
var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
|
|
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 234881024;
|
|
var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
|
|
|
|
var totalMemory = 4096;
|
|
while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
|
|
if (totalMemory < 16*1024*1024) {
|
|
totalMemory *= 2;
|
|
} else {
|
|
totalMemory += 16*1024*1024
|
|
}
|
|
}
|
|
if (totalMemory !== TOTAL_MEMORY) {
|
|
Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable');
|
|
TOTAL_MEMORY = totalMemory;
|
|
}
|
|
|
|
// Initialize the runtime's memory
|
|
// check for full engine support (use string 'subarray' to avoid closure compiler confusion)
|
|
assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
|
|
'Cannot fallback to non-typed array case: Code is too specialized');
|
|
|
|
var buffer = new ArrayBuffer(TOTAL_MEMORY);
|
|
HEAP8 = new Int8Array(buffer);
|
|
HEAP16 = new Int16Array(buffer);
|
|
HEAP32 = new Int32Array(buffer);
|
|
HEAPU8 = new Uint8Array(buffer);
|
|
HEAPU16 = new Uint16Array(buffer);
|
|
HEAPU32 = new Uint32Array(buffer);
|
|
HEAPF32 = new Float32Array(buffer);
|
|
HEAPF64 = new Float64Array(buffer);
|
|
|
|
// Endianness check (note: assumes compiler arch was little-endian)
|
|
HEAP32[0] = 255;
|
|
assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
|
|
|
|
Module['HEAP'] = HEAP;
|
|
Module['HEAP8'] = HEAP8;
|
|
Module['HEAP16'] = HEAP16;
|
|
Module['HEAP32'] = HEAP32;
|
|
Module['HEAPU8'] = HEAPU8;
|
|
Module['HEAPU16'] = HEAPU16;
|
|
Module['HEAPU32'] = HEAPU32;
|
|
Module['HEAPF32'] = HEAPF32;
|
|
Module['HEAPF64'] = HEAPF64;
|
|
|
|
function callRuntimeCallbacks(callbacks) {
|
|
while(callbacks.length > 0) {
|
|
var callback = callbacks.shift();
|
|
if (typeof callback == 'function') {
|
|
callback();
|
|
continue;
|
|
}
|
|
var func = callback.func;
|
|
if (typeof func === 'number') {
|
|
if (callback.arg === undefined) {
|
|
Runtime.dynCall('v', func);
|
|
} else {
|
|
Runtime.dynCall('vi', func, [callback.arg]);
|
|
}
|
|
} else {
|
|
func(callback.arg === undefined ? null : callback.arg);
|
|
}
|
|
}
|
|
}
|
|
|
|
var __ATPRERUN__ = []; // functions called before the runtime is initialized
|
|
var __ATINIT__ = []; // functions called during startup
|
|
var __ATMAIN__ = []; // functions called when main() is to be run
|
|
var __ATEXIT__ = []; // functions called during shutdown
|
|
var __ATPOSTRUN__ = []; // functions called after the runtime has exited
|
|
|
|
var runtimeInitialized = false;
|
|
|
|
function preRun() {
|
|
// compatibility - merge in anything from Module['preRun'] at this time
|
|
if (Module['preRun']) {
|
|
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
|
|
while (Module['preRun'].length) {
|
|
addOnPreRun(Module['preRun'].shift());
|
|
}
|
|
}
|
|
callRuntimeCallbacks(__ATPRERUN__);
|
|
}
|
|
|
|
function ensureInitRuntime() {
|
|
if (runtimeInitialized) return;
|
|
runtimeInitialized = true;
|
|
callRuntimeCallbacks(__ATINIT__);
|
|
}
|
|
|
|
function preMain() {
|
|
callRuntimeCallbacks(__ATMAIN__);
|
|
}
|
|
|
|
function exitRuntime() {
|
|
callRuntimeCallbacks(__ATEXIT__);
|
|
}
|
|
|
|
function postRun() {
|
|
// compatibility - merge in anything from Module['postRun'] at this time
|
|
if (Module['postRun']) {
|
|
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
|
|
while (Module['postRun'].length) {
|
|
addOnPostRun(Module['postRun'].shift());
|
|
}
|
|
}
|
|
callRuntimeCallbacks(__ATPOSTRUN__);
|
|
}
|
|
|
|
function addOnPreRun(cb) {
|
|
__ATPRERUN__.unshift(cb);
|
|
}
|
|
Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
|
|
|
|
function addOnInit(cb) {
|
|
__ATINIT__.unshift(cb);
|
|
}
|
|
Module['addOnInit'] = Module.addOnInit = addOnInit;
|
|
|
|
function addOnPreMain(cb) {
|
|
__ATMAIN__.unshift(cb);
|
|
}
|
|
Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
|
|
|
|
function addOnExit(cb) {
|
|
__ATEXIT__.unshift(cb);
|
|
}
|
|
Module['addOnExit'] = Module.addOnExit = addOnExit;
|
|
|
|
function addOnPostRun(cb) {
|
|
__ATPOSTRUN__.unshift(cb);
|
|
}
|
|
Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
|
|
|
|
// Tools
|
|
|
|
// This processes a JS string into a C-line array of numbers, 0-terminated.
|
|
// For LLVM-originating strings, see parser.js:parseLLVMString function
|
|
function intArrayFromString(stringy, dontAddNull, length /* optional */) {
|
|
var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
|
|
if (length) {
|
|
ret.length = length;
|
|
}
|
|
if (!dontAddNull) {
|
|
ret.push(0);
|
|
}
|
|
return ret;
|
|
}
|
|
Module['intArrayFromString'] = intArrayFromString;
|
|
|
|
function intArrayToString(array) {
|
|
var ret = [];
|
|
for (var i = 0; i < array.length; i++) {
|
|
var chr = array[i];
|
|
if (chr > 0xFF) {
|
|
chr &= 0xFF;
|
|
}
|
|
ret.push(String.fromCharCode(chr));
|
|
}
|
|
return ret.join('');
|
|
}
|
|
Module['intArrayToString'] = intArrayToString;
|
|
|
|
// Write a Javascript array to somewhere in the heap
|
|
function writeStringToMemory(string, buffer, dontAddNull) {
|
|
var array = intArrayFromString(string, dontAddNull);
|
|
var i = 0;
|
|
while (i < array.length) {
|
|
var chr = array[i];
|
|
HEAP8[(((buffer)+(i))|0)]=chr;
|
|
i = i + 1;
|
|
}
|
|
}
|
|
Module['writeStringToMemory'] = writeStringToMemory;
|
|
|
|
function writeArrayToMemory(array, buffer) {
|
|
for (var i = 0; i < array.length; i++) {
|
|
HEAP8[(((buffer)+(i))|0)]=array[i];
|
|
}
|
|
}
|
|
Module['writeArrayToMemory'] = writeArrayToMemory;
|
|
|
|
function writeAsciiToMemory(str, buffer, dontAddNull) {
|
|
for (var i = 0; i < str.length; i++) {
|
|
HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
|
|
}
|
|
if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
|
|
}
|
|
Module['writeAsciiToMemory'] = writeAsciiToMemory;
|
|
|
|
function unSign(value, bits, ignore) {
|
|
if (value >= 0) {
|
|
return value;
|
|
}
|
|
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
|
|
: Math.pow(2, bits) + value;
|
|
}
|
|
function reSign(value, bits, ignore) {
|
|
if (value <= 0) {
|
|
return value;
|
|
}
|
|
var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
|
|
: Math.pow(2, bits-1);
|
|
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
|
|
// but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
|
|
// TODO: In i64 mode 1, resign the two parts separately and safely
|
|
value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
|
|
}
|
|
return value;
|
|
}
|
|
|
|
// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
|
|
if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
|
|
var ah = a >>> 16;
|
|
var al = a & 0xffff;
|
|
var bh = b >>> 16;
|
|
var bl = b & 0xffff;
|
|
return (al*bl + ((ah*bl + al*bh) << 16))|0;
|
|
};
|
|
Math.imul = Math['imul'];
|
|
|
|
|
|
var Math_abs = Math.abs;
|
|
var Math_cos = Math.cos;
|
|
var Math_sin = Math.sin;
|
|
var Math_tan = Math.tan;
|
|
var Math_acos = Math.acos;
|
|
var Math_asin = Math.asin;
|
|
var Math_atan = Math.atan;
|
|
var Math_atan2 = Math.atan2;
|
|
var Math_exp = Math.exp;
|
|
var Math_log = Math.log;
|
|
var Math_sqrt = Math.sqrt;
|
|
var Math_ceil = Math.ceil;
|
|
var Math_floor = Math.floor;
|
|
var Math_pow = Math.pow;
|
|
var Math_imul = Math.imul;
|
|
var Math_fround = Math.fround;
|
|
var Math_min = Math.min;
|
|
|
|
// A counter of dependencies for calling run(). If we need to
|
|
// do asynchronous work before running, increment this and
|
|
// decrement it. Incrementing must happen in a place like
|
|
// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
|
|
// Note that you can add dependencies in preRun, even though
|
|
// it happens right before run - run will be postponed until
|
|
// the dependencies are met.
|
|
var runDependencies = 0;
|
|
var runDependencyWatcher = null;
|
|
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
|
|
|
|
function addRunDependency(id) {
|
|
runDependencies++;
|
|
if (Module['monitorRunDependencies']) {
|
|
Module['monitorRunDependencies'](runDependencies);
|
|
}
|
|
}
|
|
Module['addRunDependency'] = addRunDependency;
|
|
function removeRunDependency(id) {
|
|
runDependencies--;
|
|
if (Module['monitorRunDependencies']) {
|
|
Module['monitorRunDependencies'](runDependencies);
|
|
}
|
|
if (runDependencies == 0) {
|
|
if (runDependencyWatcher !== null) {
|
|
clearInterval(runDependencyWatcher);
|
|
runDependencyWatcher = null;
|
|
}
|
|
if (dependenciesFulfilled) {
|
|
var callback = dependenciesFulfilled;
|
|
dependenciesFulfilled = null;
|
|
callback(); // can add another dependenciesFulfilled
|
|
}
|
|
}
|
|
}
|
|
Module['removeRunDependency'] = removeRunDependency;
|
|
|
|
Module["preloadedImages"] = {}; // maps url to image data
|
|
Module["preloadedAudios"] = {}; // maps url to audio data
|
|
|
|
|
|
var memoryInitializer = null;
|
|
|
|
// === Body ===
|
|
|
|
|
|
|
|
STATIC_BASE = 8;
|
|
|
|
STATICTOP = STATIC_BASE + 2645600;
|
|
|
|
|
|
/* global initializers */ __ATINIT__.push({ func: function() { runPostSets() } });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _stdout;
|
|
var _stdout=_stdout=allocate(1, "i32*", ALLOC_STATIC);
|
|
|
|
|
|
var _stderr;
|
|
var _stderr=_stderr=allocate(1, "i32*", ALLOC_STATIC);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _in6addr_any;
|
|
var _in6addr_any=_in6addr_any=allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_STATIC);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* memory initializer */ allocate([40,2,0,0,16,0,0,0,232,146,0,0,4,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,177,0,0,8,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,145,0,0,168,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,174,0,0,88,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,143,0,0,172,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,171,0,0,176,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,142,0,0,180,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,138,0,0,4,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,136,0,0,8,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,134,0,0,12,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,132,0,0,16,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,130,0,0,20,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,128,0,0,24,1,0,0,3,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,126,0,0,36,1,0,0,3,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,124,0,0,48,1,0,0,3,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,123,0,0,60,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,121,0,0,64,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,118,0,0,68,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,116,0,0,72,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,115,0,0,76,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,114,0,0,80,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,112,0,0,84,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,87,0,0,8,0,0,0,64,86,0,0,108,0,0,0,80,85,0,0,50,0,0,0,192,83,0,0,62,0,0,0,184,82,0,0,90,0,0,0,48,109,0,0,72,0,0,0,248,81,0,0,78,0,0,0,96,81,0,0,12,0,0,0,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,0,0,0,0,0,0,0,0,208,0,0,0,16,3,0,0,104,177,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,174,0,0,80,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,171,0,0,160,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,169,0,0,164,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,166,0,0,168,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,164,0,0,172,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,162,0,0,176,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,160,0,0,180,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,157,0,0,184,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,155,0,0,188,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,153,0,0,192,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,151,0,0,196,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,149,0,0,200,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,148,0,0,204,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,95,0,0,0,0,0,0,32,0,0,0,176,158,0,0,20,0,0,0,0,0,0,0,32,156,0,0,24,0,0,0,0,0,0,0,56,94,0,0,8,0,0,0,8,0,0,0,32,93,0,0,32,0,0,0,0,0,0,0,24,92,0,0,36,0,0,0,0,0,0,0,96,91,0,0,156,0,0,0,0,0,0,0,240,88,0,0,152,0,0,0,0,0,0,0,232,86,0,0,44,0,0,0,240,255,255,255,112,154,0,0,28,0,0,0,0,0,0,0,40,86,0,0,40,0,0,0,0,0,0,0,56,85,0,0,72,0,0,0,8,0,0,0,168,83,0,0,16,0,0,0,240,255,255,255,136,82,0,0,108,0,0,0,16,0,0,0,240,192,0,0,84,0,0,0,8,0,0,0,200,81,0,0,88,0,0,0,4,0,0,0,48,81,0,0,112,0,0,0,8,0,0,0,16,185,0,0,76,0,0,0,8,0,0,0,0,80,0,0,116,0,0,0,8,0,0,0,32,79,0,0,12,0,0,0,16,0,0,0,216,180,0,0,68,0,0,0,10,0,0,0,248,76,0,0,148,0,0,0,4,0,0,0,64,175,0,0,104,0,0,0,16,0,0,0,48,75,0,0,128,0,0,0,10,0,0,0,64,74,0,0,48,0,0,0,16,0,0,0,80,73,0,0,52,0,0,0,16,0,0,0,176,72,0,0,60,0,0,0,16,0,0,0,16,72,0,0,132,0,0,0,8,0,0,0,152,71,0,0,164,0,0,0,248,255,255,255,56,71,0,0,168,0,0,0,8,0,0,0,160,70,0,0,172,0,0,0,8,0,0,0,48,70,0,0,176,0,0,0,8,0,0,0,168,68,0,0,180,0,0,0,8,0,0,0,216,144,0,0,184,1,0,0,8,0,0,0,144,67,0,0,4,0,0,0,8,0,0,0,32,67,0,0,56,0,0,0,16,0,0,0,200,66,0,0,64,0,0,0,16,0,0,0,40,66,0,0,80,0,0,0,12,0,0,0,136,65,0,0,120,0,0,0,8,0,0,0,24,65,0,0,124,0,0,0,8,0,0,0,192,167,0,0,140,0,0,0,8,0,0,0,48,170,0,0,144,0,0,0,5,0,0,0,144,64,0,0,160,0,0,0,0,0,0,0,248,237,0,0,92,0,0,0,0,0,0,0,128,237,0,0,96,0,0,0,0,0,0,0,160,235,0,0,100,0,0,0,0,0,0,0,72,234,0,0,192,1,0,0,10,0,0,0,88,146,0,0,188,1,0,0,16,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,48,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,49,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,50,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,51,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,52,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,53,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,54,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,55,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,56,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,57,0,0,0,1,0,0,0,0,0,0,0,184,202,0,0,8,199,0,0,255,255,255,255,0,0,0,0,203,209,3,0,233,160,0,0,148,24,0,0,194,27,0,0,146,14,0,0,166,14,0,0,222,23,0,0,243,90,0,0,37,130,0,0,38,27,0,0,158,30,0,0,242,37,0,0,41,36,0,0,107,67,0,0,109,15,0,0,242,6,0,0,96,32,0,0,68,6,0,0,54,6,0,0,127,6,0,0,76,4,0,0,189,4,0,0,214,4,0,0,110,4,0,0,213,6,0,0,35,4,0,0,222,4,0,0,125,4,0,0,249,4,0,0,134,17,0,0,245,10,0,0,144,13,0,0,59,85,0,0,135,4,0,0,134,6,0,0,42,4,0,0,19,4,0,0,244,3,0,0,29,4,0,0,46,4,0,0,190,6,0,0,120,3,0,0,156,4,0,0,82,3,0,0,192,3,0,0,12,3,0,0,216,6,0,0,224,12,0,0,134,41,0,0,162,17,0,0,249,22,0,0,125,10,0,0,42,18,0,0,253,14,0,0,45,8,0,0,75,7,0,0,24,10,0,0,157,7,0,0,180,7,0,0,172,3,0,0,110,4,0,0,252,6,0,0,134,6,0,0,182,4,0,0,87,22,0,0,240,23,0,0,54,28,0,0,254,25,0,0,126,14,0,0,211,14,0,0,212,5,0,0,244,5,0,0,167,8,0,0,116,4,0,0,75,5,0,0,203,3,0,0,132,8,0,0,224,4,0,0,48,5,0,0,171,4,0,0,234,6,0,0,54,4,0,0,240,4,0,0,242,4,0,0,144,4,0,0,197,3,0,0,131,4,0,0,162,4,0,0,67,5,0,0,204,4,0,0,249,5,0,0,64,6,0,0,57,10,0,0,0,8,0,0,242,9,0,0,203,12,0,0,106,9,0,0,1,14,0,0,200,9,0,0,240,10,0,0,115,10,0,0,2,24,0,0,79,14,0,0,24,11,0,0,173,55,0,0,92,12,0,0,173,8,0,0,151,6,0,0,136,12,0,0,179,10,0,0,184,13,0,0,188,18,0,0,251,15,0,0,187,13,0,0,168,20,0,0,176,15,0,0,1,31,0,0,143,23,0,0,240,20,0,0,84,15,0,0,28,19,0,0,159,14,0,0,214,17,0,0,199,18,0,0,220,22,0,0,0,25,0,0,81,24,0,0,99,32,0,0,203,90,0,0,158,30,0,0,161,27,0,0,231,34,0,0,61,21,0,0,131,17,0,0,57,14,0,0,136,20,0,0,192,20,0,0,208,20,0,0,250,20,0,0,164,13,0,0,154,9,0,0,158,6,0,0,29,7,0,0,73,8,0,0,124,7,0,0,125,4,0,0,236,5,0,0,87,5,0,0,212,4,0,0,5,4,0,0,234,4,0,0,80,4,0,0,221,4,0,0,238,3,0,0,125,4,0,0,1,4,0,0,217,4,0,0,184,3,0,0,7,5,0,0,229,3,0,0,177,6,0,0,241,3,0,0,163,4,0,0,111,3,0,0,75,4,0,0,161,3,0,0,54,4,0,0,183,3,0,0,120,6,0,0,162,3,0,0,129,4,0,0,6,4,0,0,238,4,0,0,38,4,0,0,190,4,0,0,36,4,0,0,85,6,0,0,162,3,0,0,82,4,0,0,144,3,0,0,10,4,0,0,124,3,0,0,134,4,0,0,222,3,0,0,151,4,0,0,82,3,0,0,97,4,0,0,135,3,0,0,63,4,0,0,152,3,0,0,120,4,0,0,32,4,0,0,134,13,0,0,192,8,0,0,45,17,0,0,104,47,0,0,78,30,0,0,65,5,0,0,27,5,0,0,206,12,0,0,158,7,0,0,118,3,0,0,255,3,0,0,88,4,0,0,53,4,0,0,18,4,0,0,37,4,0,0,47,4,0,0,204,5,0,0,233,3,0,0,72,4,0,0,147,3,0,0,28,4,0,0,227,3,0,0,46,4,0,0,108,3,0,0,87,4,0,0,83,3,0,0,35,4,0,0,37,3,0,0,88,4,0,0,155,3,0,0,79,4,0,0,49,3,0,0,107,7,0,0,80,7,0,0,208,3,0,0,73,3,0,0,103,4,0,0,188,3,0,0,135,4,0,0,182,3,0,0,111,30,0,0,186,3,0,0,9,5,0,0,165,3,0,0,103,4,0,0,135,12,0,0,252,3,0,0,159,3,0,0,75,5,0,0,0,3,0,0,16,4,0,0,233,2,0,0,184,3,0,0,37,3,0,0,49,4,0,0,228,2,0,0,245,3,0,0,37,3,0,0,240,3,0,0,28,3,0,0,228,3,0,0,33,4,0,0,193,44,0,0,192,52,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,7,0,0,0,15,0,0,0,31,0,0,0,63,0,0,0,127,0,0,0,255,0,0,0,255,1,0,0,255,3,0,0,255,7,0,0,255,15,0,0,255,31,0,0,255,63,0,0,255,127,0,0,255,255,0,0,255,255,1,0,255,255,3,0,255,255,7,0,255,255,15,0,255,255,31,0,255,255,63,0,255,255,127,0,255,255,255,0,255,255,255,1,255,255,255,3,255,255,255,7,255,255,255,15,255,255,255,31,255,255,255,63,255,255,255,127,255,255,255,255,236,0,0,0,144,12,0,0,184,187,0,0,32,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,224,0,0,112,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,184,0,0,192,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,158,0,0,196,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,139,0,0,200,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,119,0,0,204,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,102,0,0,208,0,0,0,3,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,88,0,0,220,0,0,0,3,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,16,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,17,0,17,0,17,0,17,0,18,0,18,0,18,0,18,0,19,0,19,0,19,0,19,0,20,0,20,0,20,0,20,0,21,0,21,0,21,0,21,0,16,0,201,0,196,0,0,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,13,0,15,0,17,0,19,0,23,0,27,0,31,0,35,0,43,0,51,0,59,0,67,0,83,0,99,0,115,0,131,0,163,0,195,0,227,0,2,1,0,0,0,0,0,0,16,0,16,0,16,0,16,0,17,0,17,0,18,0,18,0,19,0,19,0,20,0,20,0,21,0,21,0,22,0,22,0,23,0,23,0,24,0,24,0,25,0,25,0,26,0,26,0,27,0,27,0,28,0,28,0,29,0,29,0,64,0,64,0,1,0,2,0,3,0,4,0,5,0,7,0,9,0,13,0,17,0,25,0,33,0,49,0,65,0,97,0,129,0,193,0,1,1,129,1,1,2,1,3,1,4,1,6,1,8,1,12,1,16,1,24,1,32,1,48,1,64,1,96,0,0,0,0,16,0,17,0,18,0,0,0,8,0,7,0,9,0,6,0,10,0,5,0,11,0,4,0,12,0,3,0,13,0,2,0,14,0,1,0,15,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,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0,18,7,31,0,0,8,112,0,0,8,48,0,0,9,192,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,160,0,0,8,0,0,0,8,128,0,0,8,64,0,0,9,224,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,144,0,19,7,59,0,0,8,120,0,0,8,56,0,0,9,208,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,176,0,0,8,8,0,0,8,136,0,0,8,72,0,0,9,240,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,0,8,116,0,0,8,52,0,0,9,200,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,168,0,0,8,4,0,0,8,132,0,0,8,68,0,0,9,232,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,152,0,20,7,83,0,0,8,124,0,0,8,60,0,0,9,216,0,18,7,23,0,0,8,108,0,0,8,44,0,0,9,184,0,0,8,12,0,0,8,140,0,0,8,76,0,0,9,248,0,16,7,3,0,0,8,82,0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0,0,8,50,0,0,9,196,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,164,0,0,8,2,0,0,8,130,0,0,8,66,0,0,9,228,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,148,0,20,7,67,0,0,8,122,0,0,8,58,0,0,9,212,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,180,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,244,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,204,0,17,7,15,0,0,8,102,0,0,8,38,0,0,9,172,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,236,0,16,7,9,0,0,8,94,0,0,8,30,0,0,9,156,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,220,0,18,7,27,0,0,8,110,0,0,8,46,0,0,9,188,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,252,0,96,7,0,0,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,194,0,16,7,10,0,0,8,97,0,0,8,33,0,0,9,162,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,226,0,16,7,6,0,0,8,89,0,0,8,25,0,0,9,146,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,210,0,17,7,17,0,0,8,105,0,0,8,41,0,0,9,178,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,242,0,16,7,4,0,0,8,85,0,0,8,21,0,16,8,2,1,19,7,43,0,0,8,117,0,0,8,53,0,0,9,202,0,17,7,13,0,0,8,101,0,0,8,37,0,0,9,170,0,0,8,5,0,0,8,133,0,0,8,69,0,0,9,234,0,16,7,8,0,0,8,93,0,0,8,29,0,0,9,154,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,218,0,18,7,23,0,0,8,109,0,0,8,45,0,0,9,186,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,250,0,16,7,3,0,0,8,83,0,0,8,19,0,21,8,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,198,0,17,7,11,0,0,8,99,0,0,8,35,0,0,9,166,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,230,0,16,7,7,0,0,8,91,0,0,8,27,0,0,9,150,0,20,7,67,0,0,8,123,0,0,8,59,0,0,9,214,0,18,7,19,0,0,8,107,0,0,8,43,0,0,9,182,0,0,8,11,0,0,8,139,0,0,8,75,0,0,9,246,0,16,7,5,0,0,8,87,0,0,8,23,0,64,8,0,0,19,7,51,0,0,8,119,0,0,8,55,0,0,9,206,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,174,0,0,8,7,0,0,8,135,0,0,8,71,0,0,9,238,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,158,0,20,7,99,0,0,8,127,0,0,8,63,0,0,9,222,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,190,0,0,8,15,0,0,8,143,0,0,8,79,0,0,9,254,0,96,7,0,0,0,8,80,0,0,8,16,0,20,8,115,0,18,7,31,0,0,8,112,0,0,8,48,0,0,9,193,0,16,7,10,0,0,8,96,0,0,8,32,0,0,9,161,0,0,8,0,0,0,8,128,0,0,8,64,0,0,9,225,0,16,7,6,0,0,8,88,0,0,8,24,0,0,9,145,0,19,7,59,0,0,8,120,0,0,8,56,0,0,9,209,0,17,7,17,0,0,8,104,0,0,8,40,0,0,9,177,0,0,8,8,0,0,8,136,0,0,8,72,0,0,9,241,0,16,7,4,0,0,8,84,0,0,8,20,0,21,8,227,0,19,7,43,0,0,8,116,0,0,8,52,0,0,9,201,0,17,7,13,0,0,8,100,0,0,8,36,0,0,9,169,0,0,8,4,0,0,8,132,0,0,8,68,0,0,9,233,0,16,7,8,0,0,8,92,0,0,8,28,0,0,9,153,0,20,7,83,0,0,8,124,0,0,8,60,0,0,9,217,0,18,7,23,0,0,8,108,0,0,8,44,0,0,9,185,0,0,8,12,0,0,8,140,0,0,8,76,0,0,9,249,0,16,7,3,0,0,8,82,0,0,8,18,0,21,8,163,0,19,7,35,0,0,8,114,0,0,8,50,0,0,9,197,0,17,7,11,0,0,8,98,0,0,8,34,0,0,9,165,0,0,8,2,0,0,8,130,0,0,8,66,0,0,9,229,0,16,7,7,0,0,8,90,0,0,8,26,0,0,9,149,0,20,7,67,0,0,8,122,0,0,8,58,0,0,9,213,0,18,7,19,0,0,8,106,0,0,8,42,0,0,9,181,0,0,8,10,0,0,8,138,0,0,8,74,0,0,9,245,0,16,7,5,0,0,8,86,0,0,8,22,0,64,8,0,0,19,7,51,0,0,8,118,0,0,8,54,0,0,9,205,0,17,7,15,0,0,8,102,0,0,8,38,0,0,9,173,0,0,8,6,0,0,8,134,0,0,8,70,0,0,9,237,0,16,7,9,0,0,8,94,0,0,8,30,0,0,9,157,0,20,7,99,0,0,8,126,0,0,8,62,0,0,9,221,0,18,7,27,0,0,8,110,0,0,8,46,0,0,9,189,0,0,8,14,0,0,8,142,0,0,8,78,0,0,9,253,0,96,7,0,0,0,8,81,0,0,8,17,0,21,8,131,0,18,7,31,0,0,8,113,0,0,8,49,0,0,9,195,0,16,7,10,0,0,8,97,0,0,8,33,0,0,9,163,0,0,8,1,0,0,8,129,0,0,8,65,0,0,9,227,0,16,7,6,0,0,8,89,0,0,8,25,0,0,9,147,0,19,7,59,0,0,8,121,0,0,8,57,0,0,9,211,0,17,7,17,0,0,8,105,0,0,8,41,0,0,9,179,0,0,8,9,0,0,8,137,0,0,8,73,0,0,9,243,0,16,7,4,0,0,8,85,0,0,8,21,0,16,8,2,1,19,7,43,0,0,8,117,0,0,8,53,0,0,9,203,0,17,7,13,0,0,8,101,0,0,8,37,0,0,9,171,0,0,8,5,0,0,8,133,0,0,8,69,0,0,9,235,0,16,7,8,0,0,8,93,0,0,8,29,0,0,9,155,0,20,7,83,0,0,8,125,0,0,8,61,0,0,9,219,0,18,7,23,0,0,8,109,0,0,8,45,0,0,9,187,0,0,8,13,0,0,8,141,0,0,8,77,0,0,9,251,0,16,7,3,0,0,8,83,0,0,8,19,0,21,8,195,0,19,7,35,0,0,8,115,0,0,8,51,0,0,9,199,0,17,7,11,0,0,8,99,0,0,8,35,0,0,9,167,0,0,8,3,0,0,8,131,0,0,8,67,0,0,9,231,0,16,7,7,0,0,8,91,0,0,8,27,0,0,9,151,0,20,7,67,0,0,8,123,0,0,8,59,0,0,9,215,0,18,7,19,0,0,8,107,0,0,8,43,0,0,9,183,0,0,8,11,0,0,8,139,0,0,8,75,0,0,9,247,0,16,7,5,0,0,8,87,0,0,8,23,0,64,8,0,0,19,7,51,0,0,8,119,0,0,8,55,0,0,9,207,0,17,7,15,0,0,8,103,0,0,8,39,0,0,9,175,0,0,8,7,0,0,8,135,0,0,8,71,0,0,9,239,0,16,7,9,0,0,8,95,0,0,8,31,0,0,9,159,0,20,7,99,0,0,8,127,0,0,8,63,0,0,9,223,0,18,7,27,0,0,8,111,0,0,8,47,0,0,9,191,0,0,8,15,0,0,8,143,0,0,8,79,0,0,9,255,0,16,5,1,0,23,5,1,1,19,5,17,0,27,5,1,16,17,5,5,0,25,5,1,4,21,5,65,0,29,5,1,64,16,5,3,0,24,5,1,2,20,5,33,0,28,5,1,32,18,5,9,0,26,5,1,8,22,5,129,0,64,5,0,0,16,5,2,0,23,5,129,1,19,5,25,0,27,5,1,24,17,5,7,0,25,5,1,6,21,5,97,0,29,5,1,96,16,5,4,0,24,5,1,3,20,5,49,0,28,5,1,48,18,5,13,0,26,5,1,12,22,5,193,0,64,5,0,0,248,78,0,0,16,0,0,0,32,0,0,0,32,70,0,0,24,0,0,0,0,0,0,0,112,237,0,0,28,0,0,0,0,0,0,0,120,231,0,0,36,0,0,0,0,0,0,0,88,224,0,0,40,0,0,0,0,0,0,0,168,218,0,0,32,0,0,0,0,0,0,0,208,214,0,0,64,0,0,0,0,0,0,0,16,211,0,0,44,0,0,0,0,0,0,0,120,206,0,0,60,0,0,0,0,0,0,0,192,202,0,0,180,0,0,0,10,0,0,0,16,199,0,0,132,0,0,0,0,0,0,0,8,196,0,0,4,0,0,0,8,0,0,0,240,192,0,0,200,0,0,0,8,0,0,0,16,190,0,0,184,0,0,0,8,0,0,0,16,185,0,0,196,0,0,0,8,0,0,0,216,180,0,0,148,0,0,0,10,0,0,0,216,178,0,0,12,0,0,0,8,0,0,0,64,175,0,0,8,0,0,0,19,0,0,0,168,172,0,0,140,0,0,0,10,0,0,0,48,170,0,0,192,0,0,0,8,0,0,0,192,167,0,0,168,0,0,0,8,0,0,0,136,165,0,0,120,0,0,0,0,0,0,0,152,163,0,0,20,0,0,0,32,0,0,0,208,161,0,0,48,0,0,0,8,0,0,0,176,158,0,0,92,0,0,0,0,0,0,0,32,156,0,0,96,0,0,0,0,0,0,0,112,154,0,0,100,0,0,0,0,0,0,0,168,152,0,0,176,0,0,0,24,0,0,0,176,150,0,0,188,0,0,0,16,0,0,0,32,149,0,0,160,0,0,0,8,0,0,0,176,147,0,0,144,0,0,0,10,0,0,0,88,146,0,0,156,0,0,0,8,0,0,0,216,144,0,0,204,0,0,0,8,0,0,0,248,142,0,0,112,0,0,0,0,0,0,0,160,139,0,0,104,0,0,0,0,0,0,0,64,137,0,0,108,0,0,0,0,0,0,0,80,135,0,0,164,0,0,0,8,0,0,0,168,133,0,0,116,0,0,0,0,0,0,0,120,131,0,0,84,0,0,0,32,0,0,0,152,128,0,0,52,0,0,0,32,0,0,0,160,126,0,0,56,0,0,0,32,0,0,0,240,124,0,0,68,0,0,0,0,0,0,0,160,123,0,0,72,0,0,0,0,0,0,0,64,122,0,0,76,0,0,0,0,0,0,0,96,119,0,0,80,0,0,0,0,0,0,0,64,117,0,0,88,0,0,0,32,0,0,0,8,116,0,0,124,0,0,0,0,0,0,0,216,114,0,0,128,0,0,0,0,0,0,0,40,113,0,0,136,0,0,0,0,0,0,0,232,111,0,0,152,0,0,0,32,0,0,0,144,110,0,0,172,0,0,0,16,0,0,0,0,0,0,0,24,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,17,74,29,0,0,0,0,0,48,235,0,0,66,0,0,0,0,65,0,0,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,73,0,0,64,0,0,0,120,72,0,0,14,0,0,0,248,71,0,0,44,0,0,0,120,71,0,0,18,0,0,0,16,71,0,0,46,0,0,0,128,70,0,0,48,0,0,0,8,70,0,0,30,0,0,0,64,68,0,0,20,0,0,0,120,67,0,0,68,0,0,0,16,67,0,0,8,0,0,0,184,66,0,0,38,0,0,0,24,66,0,0,56,0,0,0,120,65,0,0,32,0,0,0,0,65,0,0,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,0,0,0,66,0,0,0,0,0,0,0,0,0,0,0,8,173,0,0,1,0,0,0,0,0,0,0,232,219,0,0,2,0,0,0,0,0,0,0,56,182,0,0,3,0,0,0,0,0,0,0,216,156,0,0,4,0,0,0,0,0,0,0,32,138,0,0,5,0,0,0,0,0,0,0,216,117,0,0,6,0,0,0,0,0,0,0,40,101,0,0,7,0,0,0,0,0,0,0,184,87,0,0,8,0,0,0,0,0,0,0,208,75,0,0,9,0,0,0,0,0,0,0,248,67,0,0,10,0,0,0,0,0,0,0,240,234,0,0,11,0,0,0,0,0,0,0,240,228,0,0,12,0,0,0,0,0,0,0,216,221,0,0,13,0,0,0,0,0,0,0,176,216,0,0,14,0,0,0,0,0,0,0,0,213,0,0,15,0,0,0,0,0,0,0,240,208,0,0,16,0,0,0,0,0,0,0,200,204,0,0,17,0,0,0,0,0,0,0,216,200,0,0,18,0,0,0,0,0,0,0,88,197,0,0,19,0,0,0,0,0,0,0,88,194,0,0,20,0,0,0,0,0,0,0,80,191,0,0,21,0,0,0,0,0,0,0,48,188,0,0,22,0,0,0,0,0,0,0,80,183,0,0,23,0,0,0,0,0,0,0,144,179,0,0,24,0,0,0,0,0,0,0,8,177,0,0,25,0,0,0,0,0,0,0,216,173,0,0,26,0,0,0,0,0,0,0,56,171,0,0,27,0,0,0,0,0,0,0,192,168,0,0,28,0,0,0,0,0,0,0,120,166,0,0,29,0,0,0,0,0,0,0,56,164,0,0,30,0,0,0,0,0,0,0,112,162,0,0,31,0,0,0,0,0,0,0,208,160,0,0,32,0,0,0,0,0,0,0,72,157,0,0,33,0,0,0,0,0,0,0,240,154,0,0,34,0,0,0,0,0,0,0,144,153,0,0,35,0,0,0,0,0,0,0,104,151,0,0,36,0,0,0,0,0,0,0,176,149,0,0,37,0,0,0,0,0,0,0,48,148,0,0,38,0,0,0,0,0,0,0,184,146,0,0,39,0,0,0,0,0,0,0,72,145,0,0,40,0,0,0,0,0,0,0,152,143,0,0,41,0,0,0,0,0,0,0,16,142,0,0,42,0,0,0,0,0,0,0,104,138,0,0,43,0,0,0,0,0,0,0,40,136,0,0,44,0,0,0,0,0,0,0,184,134,0,0,45,0,0,0,0,0,0,0,152,132,0,0,46,0,0,0,0,0,0,0,104,130,0,0,47,0,0,0,0,0,0,0,8,128,0,0,48,0,0,0,0,0,0,0,8,126,0,0,49,0,0,0,0,0,0,0,72,124,0,0,50,0,0,0,0,0,0,0,24,123,0,0,51,0,0,0,0,0,0,0,136,121,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,112,137,0,255,9,47,15,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,16,66,32,99,48,132,64,165,80,198,96,231,112,8,129,41,145,74,161,107,177,140,193,173,209,206,225,239,241,49,18,16,2,115,50,82,34,181,82,148,66,247,114,214,98,57,147,24,131,123,179,90,163,189,211,156,195,255,243,222,227,98,36,67,52,32,4,1,20,230,100,199,116,164,68,133,84,106,165,75,181,40,133,9,149,238,229,207,245,172,197,141,213,83,54,114,38,17,22,48,6,215,118,246,102,149,86,180,70,91,183,122,167,25,151,56,135,223,247,254,231,157,215,188,199,196,72,229,88,134,104,167,120,64,8,97,24,2,40,35,56,204,201,237,217,142,233,175,249,72,137,105,153,10,169,43,185,245,90,212,74,183,122,150,106,113,26,80,10,51,58,18,42,253,219,220,203,191,251,158,235,121,155,88,139,59,187,26,171,166,108,135,124,228,76,197,92,34,44,3,60,96,12,65,28,174,237,143,253,236,205,205,221,42,173,11,189,104,141,73,157,151,126,182,110,213,94,244,78,19,62,50,46,81,30,112,14,159,255,190,239,221,223,252,207,27,191,58,175,89,159,120,143,136,145,169,129,202,177,235,161,12,209,45,193,78,241,111,225,128,16,161,0,194,48,227,32,4,80,37,64,70,112,103,96,185,131,152,147,251,163,218,179,61,195,28,211,127,227,94,243,177,2,144,18,243,34,210,50,53,66,20,82,119,98,86,114,234,181,203,165,168,149,137,133,110,245,79,229,44,213,13,197,226,52,195,36,160,20,129,4,102,116,71,100,36,84,5,68,219,167,250,183,153,135,184,151,95,231,126,247,29,199,60,215,211,38,242,54,145,6,176,22,87,102,118,118,21,70,52,86,76,217,109,201,14,249,47,233,200,153,233,137,138,185,171,169,68,88,101,72,6,120,39,104,192,24,225,8,130,56,163,40,125,203,92,219,63,235,30,251,249,139,216,155,187,171,154,187,117,74,84,90,55,106,22,122,241,10,208,26,179,42,146,58,46,253,15,237,108,221,77,205,170,189,139,173,232,157,201,141,38,124,7,108,100,92,69,76,162,60,131,44,224,28,193,12,31,239,62,255,93,207,124,223,155,175,186,191,217,143,248,159,23,110,54,126,85,78,116,94,147,46,178,62,209,14,240,30,0,0,0,0,0,0,0,0,0,0,0,0,150,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7,143,244,106,112,53,165,99,233,163,149,100,158,50,136,219,14,164,184,220,121,30,233,213,224,136,217,210,151,43,76,182,9,189,124,177,126,7,45,184,231,145,29,191,144,100,16,183,29,242,32,176,106,72,113,185,243,222,65,190,132,125,212,218,26,235,228,221,109,81,181,212,244,199,133,211,131,86,152,108,19,192,168,107,100,122,249,98,253,236,201,101,138,79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,141,200,32,110,59,94,16,105,76,228,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253,133,13,210,107,181,10,165,250,168,181,53,108,152,178,66,214,201,187,219,64,249,188,172,227,108,216,50,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38,58,0,222,81,128,81,215,200,22,97,208,191,181,244,180,33,35,196,179,86,153,149,186,207,15,165,189,184,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,124,111,47,17,76,104,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188,32,210,152,42,16,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,184,232,162,201,7,120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61,109,8,151,108,100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78,0,98,242,237,149,6,108,123,165,1,27,193,244,8,130,87,196,15,245,198,217,176,101,80,233,183,18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,124,211,140,101,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212,65,165,223,74,215,149,216,61,109,196,209,164,251,244,214,211,106,233,105,67,252,217,110,52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,201,124,13,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,179,133,111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41,34,152,208,176,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192,32,131,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,119,210,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,100,148,62,106,109,13,168,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,240,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,108,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,111,223,185,249,249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,126,147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,6,181,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,239,96,223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102,188,160,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,5,85,190,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49,207,208,181,139,158,217,44,29,174,222,91,176,194,100,155,38,242,99,236,156,163,106,117,10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,191,149,20,122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,229,183,239,220,124,33,223,219,11,212,210,211,134,66,226,212,241,248,179,221,104,110,131,218,31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,90,8,136,112,106,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,211,255,107,97,69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194,179,3,57,97,38,103,167,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,220,90,214,217,102,11,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207,178,71,233,255,181,48,28,242,189,189,138,194,186,202,48,147,179,83,166,163,180,36,5,54,208,186,147,6,215,205,41,87,222,84,191,103,217,35,46,122,102,179,184,74,97,196,2,27,104,93,148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141,239,2,45,0,0,0,0,65,49,27,25,130,98,54,50,195,83,45,43,4,197,108,100,69,244,119,125,134,167,90,86,199,150,65,79,8,138,217,200,73,187,194,209,138,232,239,250,203,217,244,227,12,79,181,172,77,126,174,181,142,45,131,158,207,28,152,135,81,18,194,74,16,35,217,83,211,112,244,120,146,65,239,97,85,215,174,46,20,230,181,55,215,181,152,28,150,132,131,5,89,152,27,130,24,169,0,155,219,250,45,176,154,203,54,169,93,93,119,230,28,108,108,255,223,63,65,212,158,14,90,205,162,36,132,149,227,21,159,140,32,70,178,167,97,119,169,190,166,225,232,241,231,208,243,232,36,131,222,195,101,178,197,218,170,174,93,93,235,159,70,68,40,204,107,111,105,253,112,118,174,107,49,57,239,90,42,32,44,9,7,11,109,56,28,18,243,54,70,223,178,7,93,198,113,84,112,237,48,101,107,244,247,243,42,187,182,194,49,162,117,145,28,137,52,160,7,144,251,188,159,23,186,141,132,14,121,222,169,37,56,239,178,60,255,121,243,115,190,72,232,106,125,27,197,65,60,42,222,88,5,79,121,240,68,126,98,233,135,45,79,194,198,28,84,219,1,138,21,148,64,187,14,141,131,232,35,166,194,217,56,191,13,197,160,56,76,244,187,33,143,167,150,10,206,150,141,19,9,0,204,92,72,49,215,69,139,98,250,110,202,83,225,119,84,93,187,186,21,108,160,163,214,63,141,136,151,14,150,145,80,152,215,222,17,169,204,199,210,250,225,236,147,203,250,245,92,215,98,114,29,230,121,107,222,181,84,64,159,132,79,89,88,18,14,22,25,35,21,15,218,112,56,36,155,65,35,61,167,107,253,101,230,90,230,124,37,9,203,87,100,56,208,78,163,174,145,1,226,159,138,24,33,204,167,51,96,253,188,42,175,225,36,173,238,208,63,180,45,131,18,159,108,178,9,134,171,36,72,201,234,21,83,208,41,70,126,251,104,119,101,226,246,121,63,47,183,72,36,54,116,27,9,29,53,42,18,4,242,188,83,75,179,141,72,82,112,222,101,121,49,239,126,96,254,243,230,231,191,194,253,254,124,145,208,213,61,160,203,204,250,54,138,131,187,7,145,154,120,84,188,177,57,101,167,168,75,152,131,59,10,169,152,34,201,250,181,9,136,203,174,16,79,93,239,95,14,108,244,70,205,63,217,109,140,14,194,116,67,18,90,243,2,35,65,234,193,112,108,193,128,65,119,216,71,215,54,151,6,230,45,142,197,181,0,165,132,132,27,188,26,138,65,113,91,187,90,104,152,232,119,67,217,217,108,90,30,79,45,21,95,126,54,12,156,45,27,39,221,28,0,62,18,0,152,185,83,49,131,160,144,98,174,139,209,83,181,146,22,197,244,221,87,244,239,196,148,167,194,239,213,150,217,246,233,188,7,174,168,141,28,183,107,222,49,156,42,239,42,133,237,121,107,202,172,72,112,211,111,27,93,248,46,42,70,225,225,54,222,102,160,7,197,127,99,84,232,84,34,101,243,77,229,243,178,2,164,194,169,27,103,145,132,48,38,160,159,41,184,174,197,228,249,159,222,253,58,204,243,214,123,253,232,207,188,107,169,128,253,90,178,153,62,9,159,178,127,56,132,171,176,36,28,44,241,21,7,53,50,70,42,30,115,119,49,7,180,225,112,72,245,208,107,81,54,131,70,122,119,178,93,99,78,215,250,203,15,230,225,210,204,181,204,249,141,132,215,224,74,18,150,175,11,35,141,182,200,112,160,157,137,65,187,132,70,93,35,3,7,108,56,26,196,63,21,49,133,14,14,40,66,152,79,103,3,169,84,126,192,250,121,85,129,203,98,76,31,197,56,129,94,244,35,152,157,167,14,179,220,150,21,170,27,0,84,229,90,49,79,252,153,98,98,215,216,83,121,206,23,79,225,73,86,126,250,80,149,45,215,123,212,28,204,98,19,138,141,45,82,187,150,52,145,232,187,31,208,217,160,6,236,243,126,94,173,194,101,71,110,145,72,108,47,160,83,117,232,54,18,58,169,7,9,35,106,84,36,8,43,101,63,17,228,121,167,150,165,72,188,143,102,27,145,164,39,42,138,189,224,188,203,242,161,141,208,235,98,222,253,192,35,239,230,217], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
|
|
/* memory initializer */ allocate([189,225,188,20,252,208,167,13,63,131,138,38,126,178,145,63,185,36,208,112,248,21,203,105,59,70,230,66,122,119,253,91,181,107,101,220,244,90,126,197,55,9,83,238,118,56,72,247,177,174,9,184,240,159,18,161,51,204,63,138,114,253,36,147,0,0,0,0,55,106,194,1,110,212,132,3,89,190,70,2,220,168,9,7,235,194,203,6,178,124,141,4,133,22,79,5,184,81,19,14,143,59,209,15,214,133,151,13,225,239,85,12,100,249,26,9,83,147,216,8,10,45,158,10,61,71,92,11,112,163,38,28,71,201,228,29,30,119,162,31,41,29,96,30,172,11,47,27,155,97,237,26,194,223,171,24,245,181,105,25,200,242,53,18,255,152,247,19,166,38,177,17,145,76,115,16,20,90,60,21,35,48,254,20,122,142,184,22,77,228,122,23,224,70,77,56,215,44,143,57,142,146,201,59,185,248,11,58,60,238,68,63,11,132,134,62,82,58,192,60,101,80,2,61,88,23,94,54,111,125,156,55,54,195,218,53,1,169,24,52,132,191,87,49,179,213,149,48,234,107,211,50,221,1,17,51,144,229,107,36,167,143,169,37,254,49,239,39,201,91,45,38,76,77,98,35,123,39,160,34,34,153,230,32,21,243,36,33,40,180,120,42,31,222,186,43,70,96,252,41,113,10,62,40,244,28,113,45,195,118,179,44,154,200,245,46,173,162,55,47,192,141,154,112,247,231,88,113,174,89,30,115,153,51,220,114,28,37,147,119,43,79,81,118,114,241,23,116,69,155,213,117,120,220,137,126,79,182,75,127,22,8,13,125,33,98,207,124,164,116,128,121,147,30,66,120,202,160,4,122,253,202,198,123,176,46,188,108,135,68,126,109,222,250,56,111,233,144,250,110,108,134,181,107,91,236,119,106,2,82,49,104,53,56,243,105,8,127,175,98,63,21,109,99,102,171,43,97,81,193,233,96,212,215,166,101,227,189,100,100,186,3,34,102,141,105,224,103,32,203,215,72,23,161,21,73,78,31,83,75,121,117,145,74,252,99,222,79,203,9,28,78,146,183,90,76,165,221,152,77,152,154,196,70,175,240,6,71,246,78,64,69,193,36,130,68,68,50,205,65,115,88,15,64,42,230,73,66,29,140,139,67,80,104,241,84,103,2,51,85,62,188,117,87,9,214,183,86,140,192,248,83,187,170,58,82,226,20,124,80,213,126,190,81,232,57,226,90,223,83,32,91,134,237,102,89,177,135,164,88,52,145,235,93,3,251,41,92,90,69,111,94,109,47,173,95,128,27,53,225,183,113,247,224,238,207,177,226,217,165,115,227,92,179,60,230,107,217,254,231,50,103,184,229,5,13,122,228,56,74,38,239,15,32,228,238,86,158,162,236,97,244,96,237,228,226,47,232,211,136,237,233,138,54,171,235,189,92,105,234,240,184,19,253,199,210,209,252,158,108,151,254,169,6,85,255,44,16,26,250,27,122,216,251,66,196,158,249,117,174,92,248,72,233,0,243,127,131,194,242,38,61,132,240,17,87,70,241,148,65,9,244,163,43,203,245,250,149,141,247,205,255,79,246,96,93,120,217,87,55,186,216,14,137,252,218,57,227,62,219,188,245,113,222,139,159,179,223,210,33,245,221,229,75,55,220,216,12,107,215,239,102,169,214,182,216,239,212,129,178,45,213,4,164,98,208,51,206,160,209,106,112,230,211,93,26,36,210,16,254,94,197,39,148,156,196,126,42,218,198,73,64,24,199,204,86,87,194,251,60,149,195,162,130,211,193,149,232,17,192,168,175,77,203,159,197,143,202,198,123,201,200,241,17,11,201,116,7,68,204,67,109,134,205,26,211,192,207,45,185,2,206,64,150,175,145,119,252,109,144,46,66,43,146,25,40,233,147,156,62,166,150,171,84,100,151,242,234,34,149,197,128,224,148,248,199,188,159,207,173,126,158,150,19,56,156,161,121,250,157,36,111,181,152,19,5,119,153,74,187,49,155,125,209,243,154,48,53,137,141,7,95,75,140,94,225,13,142,105,139,207,143,236,157,128,138,219,247,66,139,130,73,4,137,181,35,198,136,136,100,154,131,191,14,88,130,230,176,30,128,209,218,220,129,84,204,147,132,99,166,81,133,58,24,23,135,13,114,213,134,160,208,226,169,151,186,32,168,206,4,102,170,249,110,164,171,124,120,235,174,75,18,41,175,18,172,111,173,37,198,173,172,24,129,241,167,47,235,51,166,118,85,117,164,65,63,183,165,196,41,248,160,243,67,58,161,170,253,124,163,157,151,190,162,208,115,196,181,231,25,6,180,190,167,64,182,137,205,130,183,12,219,205,178,59,177,15,179,98,15,73,177,85,101,139,176,104,34,215,187,95,72,21,186,6,246,83,184,49,156,145,185,180,138,222,188,131,224,28,189,218,94,90,191,237,52,152,190,0,0,0,0,101,103,188,184,139,200,9,170,238,175,181,18,87,151,98,143,50,240,222,55,220,95,107,37,185,56,215,157,239,40,180,197,138,79,8,125,100,224,189,111,1,135,1,215,184,191,214,74,221,216,106,242,51,119,223,224,86,16,99,88,159,87,25,80,250,48,165,232,20,159,16,250,113,248,172,66,200,192,123,223,173,167,199,103,67,8,114,117,38,111,206,205,112,127,173,149,21,24,17,45,251,183,164,63,158,208,24,135,39,232,207,26,66,143,115,162,172,32,198,176,201,71,122,8,62,175,50,160,91,200,142,24,181,103,59,10,208,0,135,178,105,56,80,47,12,95,236,151,226,240,89,133,135,151,229,61,209,135,134,101,180,224,58,221,90,79,143,207,63,40,51,119,134,16,228,234,227,119,88,82,13,216,237,64,104,191,81,248,161,248,43,240,196,159,151,72,42,48,34,90,79,87,158,226,246,111,73,127,147,8,245,199,125,167,64,213,24,192,252,109,78,208,159,53,43,183,35,141,197,24,150,159,160,127,42,39,25,71,253,186,124,32,65,2,146,143,244,16,247,232,72,168,61,88,20,155,88,63,168,35,182,144,29,49,211,247,161,137,106,207,118,20,15,168,202,172,225,7,127,190,132,96,195,6,210,112,160,94,183,23,28,230,89,184,169,244,60,223,21,76,133,231,194,209,224,128,126,105,14,47,203,123,107,72,119,195,162,15,13,203,199,104,177,115,41,199,4,97,76,160,184,217,245,152,111,68,144,255,211,252,126,80,102,238,27,55,218,86,77,39,185,14,40,64,5,182,198,239,176,164,163,136,12,28,26,176,219,129,127,215,103,57,145,120,210,43,244,31,110,147,3,247,38,59,102,144,154,131,136,63,47,145,237,88,147,41,84,96,68,180,49,7,248,12,223,168,77,30,186,207,241,166,236,223,146,254,137,184,46,70,103,23,155,84,2,112,39,236,187,72,240,113,222,47,76,201,48,128,249,219,85,231,69,99,156,160,63,107,249,199,131,211,23,104,54,193,114,15,138,121,203,55,93,228,174,80,225,92,64,255,84,78,37,152,232,246,115,136,139,174,22,239,55,22,248,64,130,4,157,39,62,188,36,31,233,33,65,120,85,153,175,215,224,139,202,176,92,51,59,182,89,237,94,209,229,85,176,126,80,71,213,25,236,255,108,33,59,98,9,70,135,218,231,233,50,200,130,142,142,112,212,158,237,40,177,249,81,144,95,86,228,130,58,49,88,58,131,9,143,167,230,110,51,31,8,193,134,13,109,166,58,181,164,225,64,189,193,134,252,5,47,41,73,23,74,78,245,175,243,118,34,50,150,17,158,138,120,190,43,152,29,217,151,32,75,201,244,120,46,174,72,192,192,1,253,210,165,102,65,106,28,94,150,247,121,57,42,79,151,150,159,93,242,241,35,229,5,25,107,77,96,126,215,245,142,209,98,231,235,182,222,95,82,142,9,194,55,233,181,122,217,70,0,104,188,33,188,208,234,49,223,136,143,86,99,48,97,249,214,34,4,158,106,154,189,166,189,7,216,193,1,191,54,110,180,173,83,9,8,21,154,78,114,29,255,41,206,165,17,134,123,183,116,225,199,15,205,217,16,146,168,190,172,42,70,17,25,56,35,118,165,128,117,102,198,216,16,1,122,96,254,174,207,114,155,201,115,202,34,241,164,87,71,150,24,239,169,57,173,253,204,94,17,69,6,238,77,118,99,137,241,206,141,38,68,220,232,65,248,100,81,121,47,249,52,30,147,65,218,177,38,83,191,214,154,235,233,198,249,179,140,161,69,11,98,14,240,25,7,105,76,161,190,81,155,60,219,54,39,132,53,153,146,150,80,254,46,46,153,185,84,38,252,222,232,158,18,113,93,140,119,22,225,52,206,46,54,169,171,73,138,17,69,230,63,3,32,129,131,187,118,145,224,227,19,246,92,91,253,89,233,73,152,62,85,241,33,6,130,108,68,97,62,212,170,206,139,198,207,169,55,126,56,65,127,214,93,38,195,110,179,137,118,124,214,238,202,196,111,214,29,89,10,177,161,225,228,30,20,243,129,121,168,75,215,105,203,19,178,14,119,171,92,161,194,185,57,198,126,1,128,254,169,156,229,153,21,36,11,54,160,54,110,81,28,142,167,22,102,134,194,113,218,62,44,222,111,44,73,185,211,148,240,129,4,9,149,230,184,177,123,73,13,163,30,46,177,27,72,62,210,67,45,89,110,251,195,246,219,233,166,145,103,81,31,169,176,204,122,206,12,116,148,97,185,102,241,6,5,222,0,0,0,0,119,7,48,150,238,14,97,44,153,9,81,186,7,109,196,25,112,106,244,143,233,99,165,53,158,100,149,163,14,219,136,50,121,220,184,164,224,213,233,30,151,210,217,136,9,182,76,43,126,177,124,189,231,184,45,7,144,191,29,145,29,183,16,100,106,176,32,242,243,185,113,72,132,190,65,222,26,218,212,125,109,221,228,235,244,212,181,81,131,211,133,199,19,108,152,86,100,107,168,192,253,98,249,122,138,101,201,236,20,1,92,79,99,6,108,217,250,15,61,99,141,8,13,245,59,110,32,200,76,105,16,94,213,96,65,228,162,103,113,114,60,3,228,209,75,4,212,71,210,13,133,253,165,10,181,107,53,181,168,250,66,178,152,108,219,187,201,214,172,188,249,64,50,216,108,227,69,223,92,117,220,214,13,207,171,209,61,89,38,217,48,172,81,222,0,58,200,215,81,128,191,208,97,22,33,180,244,181,86,179,196,35,207,186,149,153,184,189,165,15,40,2,184,158,95,5,136,8,198,12,217,178,177,11,233,36,47,111,124,135,88,104,76,17,193,97,29,171,182,102,45,61,118,220,65,144,1,219,113,6,152,210,32,188,239,213,16,42,113,177,133,137,6,182,181,31,159,191,228,165,232,184,212,51,120,7,201,162,15,0,249,52,150,9,168,142,225,14,152,24,127,106,13,187,8,109,61,45,145,100,108,151,230,99,92,1,107,107,81,244,28,108,97,98,133,101,48,216,242,98,0,78,108,6,149,237,27,1,165,123,130,8,244,193,245,15,196,87,101,176,217,198,18,183,233,80,139,190,184,234,252,185,136,124,98,221,29,223,21,218,45,73,140,211,124,243,251,212,76,101,77,178,97,88,58,181,81,206,163,188,0,116,212,187,48,226,74,223,165,65,61,216,149,215,164,209,196,109,211,214,244,251,67,105,233,106,52,110,217,252,173,103,136,70,218,96,184,208,68,4,45,115,51,3,29,229,170,10,76,95,221,13,124,201,80,5,113,60,39,2,65,170,190,11,16,16,201,12,32,134,87,104,181,37,32,111,133,179,185,102,212,9,206,97,228,159,94,222,249,14,41,217,201,152,176,208,152,34,199,215,168,180,89,179,61,23,46,180,13,129,183,189,92,59,192,186,108,173,237,184,131,32,154,191,179,182,3,182,226,12,116,177,210,154,234,213,71,57,157,210,119,175,4,219,38,21,115,220,22,131,227,99,11,18,148,100,59,132,13,109,106,62,122,106,90,168,228,14,207,11,147,9,255,157,10,0,174,39,125,7,158,177,240,15,147,68,135,8,163,210,30,1,242,104,105,6,194,254,247,98,87,93,128,101,103,203,25,108,54,113,110,107,6,231,254,212,27,118,137,211,43,224,16,218,122,90,103,221,74,204,249,185,223,111,142,190,239,249,23,183,190,67,96,176,142,213,214,214,163,232,161,209,147,126,56,216,194,196,79,223,242,82,209,187,103,241,166,188,87,103,63,181,6,221,72,178,54,75,216,13,43,218,175,10,27,76,54,3,74,246,65,4,122,96,223,96,239,195,168,103,223,85,49,110,142,239,70,105,190,121,203,97,179,140,188,102,131,26,37,111,210,160,82,104,226,54,204,12,119,149,187,11,71,3,34,2,22,185,85,5,38,47,197,186,59,190,178,189,11,40,43,180,90,146,92,179,106,4,194,215,255,167,181,208,207,49,44,217,158,139,91,222,174,29,155,100,194,176,236,99,242,38,117,106,163,156,2,109,147,10,156,9,6,169,235,14,54,63,114,7,103,133,5,0,87,19,149,191,74,130,226,184,122,20,123,177,43,174,12,182,27,56,146,210,142,155,229,213,190,13,124,220,239,183,11,219,223,33,134,211,210,212,241,212,226,66,104,221,179,248,31,218,131,110,129,190,22,205,246,185,38,91,111,176,119,225,24,183,71,119,136,8,90,230,255,15,106,112,102,6,59,202,17,1,11,92,143,101,158,255,248,98,174,105,97,107,255,211,22,108,207,69,160,10,226,120,215,13,210,238,78,4,131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,71,77,62,110,119,219,174,209,106,74,217,214,90,220,64,223,11,102,55,216,59,240,169,188,174,83,222,187,158,197,71,178,207,127,48,181,255,233,189,189,242,28,202,186,194,138,83,179,147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222,87,41,35,217,103,191,179,102,122,46,196,97,74,184,93,104,27,2,42,111,43,148,180,11,190,55,195,12,142,161,90,5,223,27,45,2,239,141,0,0,0,0,25,27,49,65,50,54,98,130,43,45,83,195,100,108,197,4,125,119,244,69,86,90,167,134,79,65,150,199,200,217,138,8,209,194,187,73,250,239,232,138,227,244,217,203,172,181,79,12,181,174,126,77,158,131,45,142,135,152,28,207,74,194,18,81,83,217,35,16,120,244,112,211,97,239,65,146,46,174,215,85,55,181,230,20,28,152,181,215,5,131,132,150,130,27,152,89,155,0,169,24,176,45,250,219,169,54,203,154,230,119,93,93,255,108,108,28,212,65,63,223,205,90,14,158,149,132,36,162,140,159,21,227,167,178,70,32,190,169,119,97,241,232,225,166,232,243,208,231,195,222,131,36,218,197,178,101,93,93,174,170,68,70,159,235,111,107,204,40,118,112,253,105,57,49,107,174,32,42,90,239,11,7,9,44,18,28,56,109,223,70,54,243,198,93,7,178,237,112,84,113,244,107,101,48,187,42,243,247,162,49,194,182,137,28,145,117,144,7,160,52,23,159,188,251,14,132,141,186,37,169,222,121,60,178,239,56,115,243,121,255,106,232,72,190,65,197,27,125,88,222,42,60,240,121,79,5,233,98,126,68,194,79,45,135,219,84,28,198,148,21,138,1,141,14,187,64,166,35,232,131,191,56,217,194,56,160,197,13,33,187,244,76,10,150,167,143,19,141,150,206,92,204,0,9,69,215,49,72,110,250,98,139,119,225,83,202,186,187,93,84,163,160,108,21,136,141,63,214,145,150,14,151,222,215,152,80,199,204,169,17,236,225,250,210,245,250,203,147,114,98,215,92,107,121,230,29,64,84,181,222,89,79,132,159,22,14,18,88,15,21,35,25,36,56,112,218,61,35,65,155,101,253,107,167,124,230,90,230,87,203,9,37,78,208,56,100,1,145,174,163,24,138,159,226,51,167,204,33,42,188,253,96,173,36,225,175,180,63,208,238,159,18,131,45,134,9,178,108,201,72,36,171,208,83,21,234,251,126,70,41,226,101,119,104,47,63,121,246,54,36,72,183,29,9,27,116,4,18,42,53,75,83,188,242,82,72,141,179,121,101,222,112,96,126,239,49,231,230,243,254,254,253,194,191,213,208,145,124,204,203,160,61,131,138,54,250,154,145,7,187,177,188,84,120,168,167,101,57,59,131,152,75,34,152,169,10,9,181,250,201,16,174,203,136,95,239,93,79,70,244,108,14,109,217,63,205,116,194,14,140,243,90,18,67,234,65,35,2,193,108,112,193,216,119,65,128,151,54,215,71,142,45,230,6,165,0,181,197,188,27,132,132,113,65,138,26,104,90,187,91,67,119,232,152,90,108,217,217,21,45,79,30,12,54,126,95,39,27,45,156,62,0,28,221,185,152,0,18,160,131,49,83,139,174,98,144,146,181,83,209,221,244,197,22,196,239,244,87,239,194,167,148,246,217,150,213,174,7,188,233,183,28,141,168,156,49,222,107,133,42,239,42,202,107,121,237,211,112,72,172,248,93,27,111,225,70,42,46,102,222,54,225,127,197,7,160,84,232,84,99,77,243,101,34,2,178,243,229,27,169,194,164,48,132,145,103,41,159,160,38,228,197,174,184,253,222,159,249,214,243,204,58,207,232,253,123,128,169,107,188,153,178,90,253,178,159,9,62,171,132,56,127,44,28,36,176,53,7,21,241,30,42,70,50,7,49,119,115,72,112,225,180,81,107,208,245,122,70,131,54,99,93,178,119,203,250,215,78,210,225,230,15,249,204,181,204,224,215,132,141,175,150,18,74,182,141,35,11,157,160,112,200,132,187,65,137,3,35,93,70,26,56,108,7,49,21,63,196,40,14,14,133,103,79,152,66,126,84,169,3,85,121,250,192,76,98,203,129,129,56,197,31,152,35,244,94,179,14,167,157,170,21,150,220,229,84,0,27,252,79,49,90,215,98,98,153,206,121,83,216,73,225,79,23,80,250,126,86,123,215,45,149,98,204,28,212,45,141,138,19,52,150,187,82,31,187,232,145,6,160,217,208,94,126,243,236,71,101,194,173,108,72,145,110,117,83,160,47,58,18,54,232,35,9,7,169,8,36,84,106,17,63,101,43,150,167,121,228,143,188,72,165,164,145,27,102,189,138,42,39,242,203,188,224,235,208,141,161,192,253,222,98,217,230,239,35,20,188,225,189,13,167,208,252,38,138,131,63,63,145,178,126,112,208,36,185,105,203,21,248,66,230,70,59,91,253,119,122,220,101,107,181,197,126,90,244,238,83,9,55,247,72,56,118,184,9,174,177,161,18,159,240,138,63,204,51,147,36,253,114,0,0,0,0,1,194,106,55,3,132,212,110,2,70,190,89,7,9,168,220,6,203,194,235,4,141,124,178,5,79,22,133,14,19,81,184,15,209,59,143,13,151,133,214,12,85,239,225,9,26,249,100,8,216,147,83,10,158,45,10,11,92,71,61,28,38,163,112,29,228,201,71,31,162,119,30,30,96,29,41,27,47,11,172,26,237,97,155,24,171,223,194,25,105,181,245,18,53,242,200,19,247,152,255,17,177,38,166,16,115,76,145,21,60,90,20,20,254,48,35,22,184,142,122,23,122,228,77,56,77,70,224,57,143,44,215,59,201,146,142,58,11,248,185,63,68,238,60,62,134,132,11,60,192,58,82,61,2,80,101,54,94,23,88,55,156,125,111,53,218,195,54,52,24,169,1,49,87,191,132,48,149,213,179,50,211,107,234,51,17,1,221,36,107,229,144,37,169,143,167,39,239,49,254,38,45,91,201,35,98,77,76,34,160,39,123,32,230,153,34,33,36,243,21,42,120,180,40,43,186,222,31,41,252,96,70,40,62,10,113,45,113,28,244,44,179,118,195,46,245,200,154,47,55,162,173,112,154,141,192,113,88,231,247,115,30,89,174,114,220,51,153,119,147,37,28,118,81,79,43,116,23,241,114,117,213,155,69,126,137,220,120,127,75,182,79,125,13,8,22,124,207,98,33,121,128,116,164,120,66,30,147,122,4,160,202,123,198,202,253,108,188,46,176,109,126,68,135,111,56,250,222,110,250,144,233,107,181,134,108,106,119,236,91,104,49,82,2,105,243,56,53,98,175,127,8,99,109,21,63,97,43,171,102,96,233,193,81,101,166,215,212,100,100,189,227,102,34,3,186,103,224,105,141,72,215,203,32,73,21,161,23,75,83,31,78,74,145,117,121,79,222,99,252,78,28,9,203,76,90,183,146,77,152,221,165,70,196,154,152,71,6,240,175,69,64,78,246,68,130,36,193,65,205,50,68,64,15,88,115,66,73,230,42,67,139,140,29,84,241,104,80,85,51,2,103,87,117,188,62,86,183,214,9,83,248,192,140,82,58,170,187,80,124,20,226,81,190,126,213,90,226,57,232,91,32,83,223,89,102,237,134,88,164,135,177,93,235,145,52,92,41,251,3,94,111,69,90,95,173,47,109,225,53,27,128,224,247,113,183,226,177,207,238,227,115,165,217,230,60,179,92,231,254,217,107,229,184,103,50,228,122,13,5,239,38,74,56,238,228,32,15,236,162,158,86,237,96,244,97,232,47,226,228,233,237,136,211,235,171,54,138,234,105,92,189,253,19,184,240,252,209,210,199,254,151,108,158,255,85,6,169,250,26,16,44,251,216,122,27,249,158,196,66,248,92,174,117,243,0,233,72,242,194,131,127,240,132,61,38,241,70,87,17,244,9,65,148,245,203,43,163,247,141,149,250,246,79,255,205,217,120,93,96,216,186,55,87,218,252,137,14,219,62,227,57,222,113,245,188,223,179,159,139,221,245,33,210,220,55,75,229,215,107,12,216,214,169,102,239,212,239,216,182,213,45,178,129,208,98,164,4,209,160,206,51,211,230,112,106,210,36,26,93,197,94,254,16,196,156,148,39,198,218,42,126,199,24,64,73,194,87,86,204,195,149,60,251,193,211,130,162,192,17,232,149,203,77,175,168,202,143,197,159,200,201,123,198,201,11,17,241,204,68,7,116,205,134,109,67,207,192,211,26,206,2,185,45,145,175,150,64,144,109,252,119,146,43,66,46,147,233,40,25,150,166,62,156,151,100,84,171,149,34,234,242,148,224,128,197,159,188,199,248,158,126,173,207,156,56,19,150,157,250,121,161,152,181,111,36,153,119,5,19,155,49,187,74,154,243,209,125,141,137,53,48,140,75,95,7,142,13,225,94,143,207,139,105,138,128,157,236,139,66,247,219,137,4,73,130,136,198,35,181,131,154,100,136,130,88,14,191,128,30,176,230,129,220,218,209,132,147,204,84,133,81,166,99,135,23,24,58,134,213,114,13,169,226,208,160,168,32,186,151,170,102,4,206,171,164,110,249,174,235,120,124,175,41,18,75,173,111,172,18,172,173,198,37,167,241,129,24,166,51,235,47,164,117,85,118,165,183,63,65,160,248,41,196,161,58,67,243,163,124,253,170,162,190,151,157,181,196,115,208,180,6,25,231,182,64,167,190,183,130,205,137,178,205,219,12,179,15,177,59,177,73,15,98,176,139,101,85,187,215,34,104,186,21,72,95,184,83,246,6,185,145,156,49,188,222,138,180,189,28,224,131,191,90,94,218,190,152,52,237,0,0,0,0,184,188,103,101,170,9,200,139,18,181,175,238,143,98,151,87,55,222,240,50,37,107,95,220,157,215,56,185,197,180,40,239,125,8,79,138,111,189,224,100,215,1,135,1,74,214,191,184,242,106,216,221,224,223,119,51,88,99,16,86,80,25,87,159,232,165,48,250,250,16,159,20,66,172,248,113,223,123,192,200,103,199,167,173,117,114,8,67,205,206,111,38,149,173,127,112,45,17,24,21,63,164,183,251,135,24,208,158,26,207,232,39,162,115,143,66,176,198,32,172,8,122,71,201,160,50,175,62,24,142,200,91,10,59,103,181,178,135,0,208,47,80,56,105,151,236,95,12,133,89,240,226,61,229,151,135,101,134,135,209,221,58,224,180,207,143,79,90,119,51,40,63,234,228,16,134,82,88,119,227,64,237,216,13,248,81,191,104,240,43,248,161,72,151,159,196,90,34,48,42,226,158,87,79,127,73,111,246,199,245,8,147,213,64,167,125,109,252,192,24,53,159,208,78,141,35,183,43,159,150,24,197,39,42,127,160,186,253,71,25,2,65,32,124,16,244,143,146,168,72,232,247,155,20,88,61,35,168,63,88,49,29,144,182,137,161,247,211,20,118,207,106,172,202,168,15,190,127,7,225,6,195,96,132,94,160,112,210,230,28,23,183,244,169,184,89,76,21,223,60,209,194,231,133,105,126,128,224,123,203,47,14,195,119,72,107,203,13,15,162,115,177,104,199,97,4,199,41,217,184,160,76,68,111,152,245,252,211,255,144,238,102,80,126,86,218,55,27,14,185,39,77,182,5,64,40,164,176,239,198,28,12,136,163,129,219,176,26,57,103,215,127,43,210,120,145,147,110,31,244,59,38,247,3,131,154,144,102,145,47,63,136,41,147,88,237,180,68,96,84,12,248,7,49,30,77,168,223,166,241,207,186,254,146,223,236,70,46,184,137,84,155,23,103,236,39,112,2,113,240,72,187,201,76,47,222,219,249,128,48,99,69,231,85,107,63,160,156,211,131,199,249,193,54,104,23,121,138,15,114,228,93,55,203,92,225,80,174,78,84,255,64,246,232,152,37,174,139,136,115,22,55,239,22,4,130,64,248,188,62,39,157,33,233,31,36,153,85,120,65,139,224,215,175,51,92,176,202,237,89,182,59,85,229,209,94,71,80,126,176,255,236,25,213,98,59,33,108,218,135,70,9,200,50,233,231,112,142,142,130,40,237,158,212,144,81,249,177,130,228,86,95,58,88,49,58,167,143,9,131,31,51,110,230,13,134,193,8,181,58,166,109,189,64,225,164,5,252,134,193,23,73,41,47,175,245,78,74,50,34,118,243,138,158,17,150,152,43,190,120,32,151,217,29,120,244,201,75,192,72,174,46,210,253,1,192,106,65,102,165,247,150,94,28,79,42,57,121,93,159,150,151,229,35,241,242,77,107,25,5,245,215,126,96,231,98,209,142,95,222,182,235,194,9,142,82,122,181,233,55,104,0,70,217,208,188,33,188,136,223,49,234,48,99,86,143,34,214,249,97,154,106,158,4,7,189,166,189,191,1,193,216,173,180,110,54,21,8,9,83,29,114,78,154,165,206,41,255,183,123,134,17,15,199,225,116,146,16,217,205,42,172,190,168,56,25,17,70,128,165,118,35,216,198,102,117,96,122,1,16,114,207,174,254,202,115,201,155,87,164,241,34,239,24,150,71,253,173,57,169,69,17,94,204,118,77,238,6,206,241,137,99,220,68,38,141,100,248,65,232,249,47,121,81,65,147,30,52,83,38,177,218,235,154,214,191,179,249,198,233,11,69,161,140,25,240,14,98,161,76,105,7,60,155,81,190,132,39,54,219,150,146,153,53,46,46,254,80,38,84,185,153,158,232,222,252,140,93,113,18,52,225,22,119,169,54,46,206,17,138,73,171,3,63,230,69,187,131,129,32,227,224,145,118,91,92,246,19,73,233,89,253,241,85,62,152,108,130,6,33,212,62,97,68,198,139,206,170,126,55,169,207,214,127,65,56,110,195,38,93,124,118,137,179,196,202,238,214,89,29,214,111,225,161,177,10,243,20,30,228,75,168,121,129,19,203,105,215,171,119,14,178,185,194,161,92,1,126,198,57,156,169,254,128,36,21,153,229,54,160,54,11,142,28,81,110,134,102,22,167,62,218,113,194,44,111,222,44,148,211,185,73,9,4,129,240,177,184,230,149,163,13,73,123,27,177,46,30,67,210,62,72,251,110,89,45,233,219,246,195,81,103,145,166,204,176,169,31,116,12,206,122,102,185,97,148,222,5,6,241,114,98,0,0,0,0,0,0,37,115,61,37,115,10,0,0,102,111,117,110,100,32,35,32,119,105,116,104,111,117,116,32,110,97,109,101,0,0,0,0,109,97,116,99,104,102,105,108,101,0,0,0,0,0,0,0,119,97,115,32,107,105,99,107,101,100,0,0,0,0,0,0,118,105,101,119,97,110,103,108,101,115,91,50,93,0,0,0,67,111,110,110,101,99,116,101,100,32,116,111,32,97,32,112,117,114,101,32,115,101,114,118,101,114,46,10,0,0,0,0,104,101,97,114,116,98,101,97,116,0,0,0,0,0,0,0,67,111,109,95,69,118,101,110,116,76,111,111,112,58,32,98,97,100,32,101,118,101,110,116,32,116,121,112,101,32,37,105,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,101,118,97,108,102,108,111,97,116,0,0,0,0,0,0,0,114,110,100,46,99,0,0,0,101,118,101,110,116,80,97,114,109,115,91,49,93,0,0,0,32,0,0,0,0,0,0,0,67,97,110,110,111,116,32,107,105,99,107,32,104,111,115,116,32,112,108,97,121,101,114,10,0,0,0,0,0,0,0,0,37,115,47,37,115,0,0,0,83,86,95,80,97,99,107,101,116,69,118,101,110,116,32,116,105,109,101,58,32,37,105,10,0,0,0,0,0,0,0,0,101,118,97,108,0,0,0,0,114,110,100,102,105,108,101,0,101,118,101,110,116,80,97,114,109,115,91,48,93,0,0,0,37,105,32,0,0,0,0,0,85,115,97,103,101,58,32,37,115,32,60,99,108,105,101,110,116,32,110,117,109,98,101,114,62,10,0,0,0,0,0,0,83,101,114,118,101,114,32,100,105,115,99,111,110,110,101,99,116,101,100,0,0,0,0,0,87,65,82,78,73,78,71,58,32,67,111,109,95,80,117,115,104,69,118,101,110,116,32,111,118,101,114,102,108,111,119,10,0,0,0,0,0,0,0,0,32,119,105,116,104,111,117,116,32,110,111,116,105,102,105,99,97,116,105,111,110,0,0,0,112,114,97,103,109,97,0,0,115,121,110,46,99,0,0,0,116,111,114,115,111,84,105,109,101,114,0,0,0,0,0,0,119,104,105,99,104,0,0,0,10,0,0,0,0,0,0,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,116,111,32,106,111,117,114,110,97,108,32,102,105,108,101,0,0,0,112,114,105,110,116,10,83,101,114,118,101,114,32,117,115,101,115,32,112,114,111,116,111,99,111,108,32,118,101,114,115,105,111,110,32,37,105,32,40,121,111,117,114,115,32,105,115,32,37,105,41,46,10,0,0,0,77,97,112,32,119,105,116,104,32,110,111,32,112,108,97,110,101,115,0,0,0,0,0,0,101,114,114,111,114,0,0,0,115,121,110,102,105,108,101,0,100,101,108,116,97,95,97,110,103,108,101,115,91,50,93,0,116,111,117,99,104,70,105,108,101,0,0,0,0,0,0,0,32,37,53,105,0,0,0,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,102,114,111,109,32,106,111,117,114,110,97,108,32,102,105,108,101,0,108,105,110,101,0,0,0,0,115,97,121,32,37,115,0,0,100,101,108,116,97,95,97,110,103,108,101,115,91,48,93,0,102,100,105,114,0,0,0,0,37,53,105,0,0,0,0,0,67,111,109,95,81,117,101,117,101,69,118,101,110,116,58,32,111,118,101,114,102,108,111,119,10,0,0,0,0,0,0,0,37,115,32,114,101,115,111,108,118,101,100,32,116,111,32,37,115,10,0,0,0,0,0,0,117,110,100,101,102,0,0,0,116,101,108,108,32,37,100,32,37,115,0,0,0,0,0,0,112,109,95,116,121,112,101,0,100,105,114,0,0,0,0,0,37,55,105,32,0,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,115,32,115,101,116,0,0,0,0,0,67,111,117,108,100,110,39,116,32,111,112,101,110,32,106,111,117,114,110,97,108,32,102,105,108,101,115,10,0,0,0,0,27,91,37,100,109,0,0,0,125,0,0,0,0,0,0,0,33,61,0,0,0,0,0,0,100,101,102,105,110,101,32,37,115,32,105,110,99,111,109,112,108,101,116,101,0,0,0,0,98,111,116,108,105,98,46,108,111,103,0,0,0,0,0,0,98,111,116,95,114,101,108,111,97,100,99,104,97,114,97,99,116,101,114,115,0,0,0,0,100,101,102,105,110,101,0,0,83,101,114,118,101,114,58,32,37,115,10,0,0,0,0,0,99,111,117,110,108,100,110,39,116,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,115,97,121,95,116,101,97,109,32,37,115,0,0,0,0,0,102,117,110,99,95,115,116,97,116,105,99,0,0,0,0,0,105,110,118,97,108,105,100,32,103,111,97,108,32,115,116,97,116,101,32,37,100,10,0,0,100,97,109,97,103,101,67,111,117,110,116,0,0,0,0,0,112,97,116,104,0,0,0,0,98,111,116,102,105,108,101,115,0,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,98,111,116,95,114,101,108,111,97,100,99,104,97,114,97,99,116,101,114,115,0,0,0,0,65,65,83,95,76,105,110,107,69,110,116,105,116,121,58,32,97,97,115,32,110,111,116,32,108,111,97,100,101,100,10,0,119,114,105,116,116,101,110,32,37,100,32,98,121,116,101,115,32,111,102,32,114,111,117,116,105,110,103,32,99,97,99,104,101,10,0,0,0,0,0,0,48,0,0,0,0,0,0,0,99,111,109,95,106,111,117,114,110,97,108,0,0,0,0,0,52,48,48,0,0,0,0,0,109,101,109,111,114,121,100,117,109,112,0,0,0,0,0,0,101,114,114,111,114,32,111,112,101,110,105,110,103,32,37,115,10,0,0,0,0,0,0,0,13,37,54,100,32,112,111,115,115,105,98,108,101,32,112,111,114,116,97,108,32,97,114,101,97,115,10,0,0,0,0,0,67,111,117,108,100,110,39,116,32,108,111,97,100,32,115,121,109,98,111,108,32,102,105,108,101,58,32,37,115,10,0,0,81,95,115,116,114,110,99,112,121,122,58,32,100,101,115,116,115,105,122,101,32,60,32,49,0,0,0,0,0,0,0,0,73,80,58,32,37,115,10,0,37,115,32,114,101,99,118,32,37,52,105,32,58,32,115,61,37,105,10,0,0,0,0,0,105,110,99,108,117,100,101,0,98,111,116,95,116,101,115,116,114,99,104,97,116,0,0,0,112,111,115,46,116,114,66,97,115,101,91,48,93,0,0,0,100,97,109,97,103,101,80,105,116,99,104,0,0,0,0,0,100,117,109,112,117,115,101,114,0,0,0,0,0,0,0,0,94,55,0,0,0,0,0,0,82,101,112,108,97,121,105,110,103,32,106,111,117,114,110,97,108,101,100,32,101,118,101,110,116,115,10,0,0,0,0,0,37,115,0,0,0,0,0,0,101,110,100,105,102,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,0,0,100,97,109,97,103,101,89,97,119,0,0,0,0,0,0,0,37,115,0,0,0,0,0,0,98,111,116,95,101,110,97,98,108,101,0,0,0,0,0,0,70,83,95,67,114,101,97,116,101,80,97,116,104,58,32,102,97,105,108,101,100,32,116,111,32,99,114,101,97,116,101,32,112,97,116,104,32,34,37,115,34,0,0,0,0,0,0,0,106,111,117,114,110,97,108,100,97,116,97,46,100,97,116,0,37,115,47,37,115,0,0,0,101,108,115,101,0,0,0,0,37,115,32,104,97,115,32,37,100,32,99,104,97,116,32,108,105,110,101,115,10,0,0,0,37,52,105,32,0,0,0,0,100,97,109,97,103,101,69,118,101,110,116,0,0,0,0,0,100,105,115,99,111,110,110,101,99,116,101,100,0,0,0,0,106,111,117,114,110,97,108,46,100,97,116,0,0,0,0,0,32,100,101,102,97,117,108,116,58,34,37,115,94,55,34,0,101,108,105,102,0,0,0,0,98,111,116,95,116,101,115,116,105,99,104,97,116,0,0,0,90,77,66,73,32,0,0,0,118,105,101,119,104,101,105,103,104,116,0,0,0,0,0,0,85,110,112,117,114,101,32,99,108,105,101,110,116,32,100,101,116,101,99,116,101,100,46,32,73,110,118,97,108,105,100,32,46,80,75,51,32,102,105,108,101,115,32,114,101,102,101,114,101,110,99,101,100,33,0,0,74,111,117,114,110,97,108,105,110,103,32,101,118,101,110,116,115,10,0,0,0,0,0,0,105,102,110,100,101,102,0,0,37,115,10,0,0,0,0,0,67,78,67,84,32,0,0,0,101,120,116,101,114,110,97,108,69,118,101,110,116,80,97,114,109,0,0,0,0,0,0,0,105,103,110,111,114,105,110,103,32,111,117,116,100,97,116,101,100,32,99,112,32,99,111,109,109,97,110,100,32,102,114,111,109,32,99,108,105,101,110,116,32,37,115,10,0,0,0,0,99,111,109,95,101,114,114,111,114,77,101,115,115,97,103,101,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,105,102,100,101,102,0,0,0,116,111,111,32,109,97,110,121,32,101,120,112,97,110,115,105,111,110,115,32,105,110,32,99,104,97,116,32,109,101,115,115,97,103,101,10,0,0,0,0,37,53,105,32,0,0,0,0,100,101,108,116,97,95,97,110,103,108,101,115,91,49,93,0,118,109,47,117,105,46,113,118,109,0,0,0,0,0,0,0,106,111,117,114,110,97,108,0,49,0,0,0,0,0,0,0,112,114,111,116,111,99,111,108,0,0,0,0,0,0,0,0,77,97,112,32,119,105,116,104,32,110,111,32,108,101,97,102,115,0,0,0,0,0,0,0,105,102,0,0,0,0,0,0,66,111,116,67,111,110,115,116,114,117,99,116,67,104,97,116,58,32,109,101,115,115,97,103,101,32,34,37,115,34,32,105,110,118,97,108,105,100,32,101,115,99,97,112,101,32,99,104,97,114,10,0,0,0,0,0,37,51,105,32,0,0,0,0,115,112,101,101,100,0,0,0,118,109,47,99,103,97,109,101,46,113,118,109,0,0,0,0,72,117,110,107,95,70,114,101,101,84,101,109,112,77,101,109,111,114,121,58,32,110,111,116,32,116,104,101,32,102,105,110,97,108,32,98,108,111,99,107,10,0,0,0,0,0,0,0,66,85,71,58,32,119,114,111,110,103,32,112,117,110,99,116,117,97,116,105,111,110,32,115,117,98,116,121,112,101,0,0,37,49,46,50,102,0,0,0,66,111,116,67,111,110,115,116,114,117,99,116,67,104,97,116,58,32,109,101,115,115,97,103,101,32,34,37,115,34,32,116,111,111,32,108,111,110,103,10,0,0,0,0,0,0,0,0,45,45,45,32,45,45,45,45,45,32,45,45,45,45,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,32,45,45,45,45,45,45,45,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,32,45,45,45,45,45,32,45,45,45,45,45,10,0,0,0,0,0,0,0,103,114,97,118,105,116,121,0,37,115,47,112,97,107,37,100,0,0,0,0,0,0,0,0,98,114,111,107,101,110,32,100,111,119,110,108,111,97,100,0,72,117,110,107,95,70,114,101,101,84,101,109,112,77,101,109,111,114,121,58,32,98,97,100,32,109,97,103,105,99,0,0,82,101,115,111,108,118,105,110,103,32,37,115,32,40,73,80,118,52,41,10,0,0,0,0,32,105,110,116,101,103,101,114,0,0,0,0,0,0,0,0,66,111,116,67,111,110,115,116,114,117,99,116,67,104,97,116,58,32,117,110,107,110,111,119,110,32,114,97,110,100,111,109,32,115,116,114,105,110,103,32,37,115,10,0,0,0,0,0,110,117,109,32,115,99,111,114,101,32,112,105,110,103,32,110,97,109,101,32,32,32,32,32,32,32,32,32,32,32,32,108,97,115,116,109,115,103,32,97,100,100,114,101,115,115,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,113,112,111,114,116,32,114,97,116,101,10,0,0,0,0,0,0,0,0,101,120,116,101,114,110,97,108,69,118,101,110,116,0,0,0,46,112,107,51,100,105,114,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,102,105,108,101,32,34,37,115,34,32,99,111,109,112,108,101,116,101,100,10,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,98,105,116,32,108,101,110,103,116,104,32,114,101,112,101,97,116,0,0,0,0,0,0,0,27,91,48,109,10,0,0,0,72,117,110,107,95,65,108,108,111,99,97,116,101,84,101,109,112,77,101,109,111,114,121,58,32,102,97,105,108,101,100,32,111,110,32,37,105,0,0,0,123,0,0,0,0,0,0,0,61,61,0,0,0,0,0,0,100,101,102,105,110,101,32,37,115,32,104,97,115,32,116,111,111,32,109,97,110,121,32,112,97,114,109,115,0,0,0,0,67,108,111,115,101,100,32,108,111,103,32,37,115,10,0,0,37,115,37,99,98,97,115,101,113,51,37,99,98,111,116,108,105,98,46,108,111,103,0,0,59,0,0,0,0,0,0,0,32,102,108,111,97,116,0,0,35,112,114,97,103,109,97,32,100,105,114,101,99,116,105,118,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,98,111,116,102,105,108,101,115,0,0,0,0,0,0,0,0,45,45,45,45,45,45,32,83,101,114,118,101,114,32,73,110,105,116,105,97,108,105,122,97,116,105,111,110,32,45,45,45,45,45,45,10,0,0,0,0,66,111,116,67,111,110,115,116,114,117,99,116,67,104,97,116,58,32,109,101,115,115,97,103,101,32,37,115,32,116,111,111,32,108,111,110,103,10,0,0,102,117,110,99,95,100,111,111,114,0,0,0,0,0,0,0,109,97,112,58,32,37,115,10,0,0,0,0,0,0,0,0,103,111,97,108,32,115,116,97,116,101,32,104,97,110,100,108,101,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,119,101,97,112,111,110,115,116,97,116,101,0,0,0,0,0,47,0,0,0,0,0,0,0,98,111,116,95,101,110,97,98,108,101,0,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,99,108,105,101,110,116,32,97,99,107,110,111,119,108,101,100,103,101,32,111,102,32,98,108,111,99,107,32,37,100,10,0,0,0,0,125,10,0,0,0,0,0,0,65,65,83,95,84,114,97,99,101,65,114,101,97,115,58,32,115,116,97,99,107,32,111,118,101,114,102,108,111,119,10,0,10,114,111,117,116,101,32,99,97,99,104,101,32,119,114,105,116,116,101,110,32,116,111,32,37,115,10,0,0,0,0,0,98,111,116,95,118,105,115,117,97,108,105,122,101,106,117,109,112,112,97,100,115,0,0,0,112,104,121,115,95,119,97,116,101,114,103,114,97,118,105,116,121,0,0,0,0,0,0,0,72,117,110,107,95,65,108,108,111,99,32,102,97,105,108,101,100,32,111,110,32,37,105,0,115,104,111,119,109,101,109,111,114,121,117,115,97,103,101,0,119,114,105,116,105,110,103,32,37,115,10,0,0,0,0,0,112,111,115,115,105,98,108,101,32,112,111,114,116,97,108,58,32,37,100,13,10,0,0,0,118,109,47,37,115,46,109,97,112,0,0,0,0,0,0,0,81,95,115,116,114,110,99,112,121,122,58,32,78,85,76,76,32,115,114,99,0,0,0,0,83,121,115,95,83,101,110,100,80,97,99,107,101,116,58,32,37,115,10,0,0,0,0,0,37,115,32,114,101,99,118,32,37,52,105,32,58,32,115,61,37,105,32,102,114,97,103,109,101,110,116,61,37,105,44,37,105,10,0,0,0,0,0,0,99,115,32,37,105,32,34,37,115,34,10,0,0,0,0,0,32,117,110,115,105,103,110,101,100,0,0,0,0,0,0,0,35,101,114,114,111,114,32,100,105,114,101,99,116,105,118,101,58,32,37,115,0,0,0,0,66,111,116,67,111,110,115,116,114,117,99,116,67,104,97,116,58,32,109,101,115,115,97,103,101,32,37,115,32,118,97,114,105,97,98,108,101,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,112,111,115,46,116,114,84,105,109,101,0,0,0,0,0,0,83,101,114,118,101,114,32,105,110,102,111,32,115,101,116,116,105,110,103,115,58,10,0,0,112,109,95,102,108,97,103,115,0,0,0,0,0,0,0,0,70,105,108,101,32,110,111,116,32,102,111,117,110,100,58,32,34,37,115,34,10,0,0,0,115,121,115,116,101,109,105,110,102,111,0,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,102,105,108,101,32,34,37,115,34,32,97,98,111,114,116,101,100,10,0,72,117,110,107,95,65,108,108,111,99,58,32,72,117,110,107,32,109,101,109,111,114,121,32,115,121,115,116,101,109,32,110,111,116,32,105,110,105,116,105,97,108,105,122,101,100,0,0,37,115,32,37,105,32,34,37,115,34,10,0,0,0,0,0,32,108,111,110,103,0,0,0,99,111,117,108,100,110,39,116,32,108,111,97,100,32,99,104,97,116,32,37,115,32,102,114,111,109,32,37,115,10,0,0,83,121,115,116,101,109,32,105,110,102,111,32,115,101,116,116,105,110,103,115,58,10,0,0,101,118,101,110,116,115,91,49], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10240);
|
|
/* memory initializer */ allocate([93,0,0,0,0,0,0,0,85,115,97,103,101,58,32,119,104,105,99,104,32,60,102,105,108,101,62,10,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,115,32,68,111,110,101,10,0,0,0,0,0,0,0,0,98,97,115,101,103,97,109,101,0,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,114,101,102,117,115,105,110,103,32,116,111,32,99,114,101,97,116,101,32,114,101,108,97,116,105,118,101,32,112,97,116,104,32,34,37,115,34,10,0,72,117,110,107,95,67,108,101,97,114,58,32,114,101,115,101,116,32,116,104,101,32,104,117,110,107,32,111,107,10,0,0,98,99,115,49,0,0,0,0,98,105,110,97,114,121,0,0,35,108,105,110,101,32,100,105,114,101,99,116,105,118,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,105,99,104,97,116,100,97,116,97,32,116,97,98,108,101,32,102,117,108,108,59,32,99,111,117,108,100,110,39,116,32,108,111,97,100,32,99,104,97,116,32,37,115,32,102,114,111,109,32,37,115,10,0,0,0,0,80,108,97,121,101,114,32,37,115,32,105,115,32,110,111,116,32,111,110,32,116,104,101,32,115,101,114,118,101,114,10,0,101,118,101,110,116,115,91,48,93,0,0,0,0,0,0,0,70,105,108,101,32,34,37,115,34,32,102,111,117,110,100,32,97,116,32,34,37,115,34,10,0,0,0,0,0,0,0,0,100,111,110,101,100,108,0,0,109,101,109,105,110,102,111,0,44,32,116,104,101,32,100,101,102,97,117,108,116,0,0,0,98,99,115,50,0,0,0,0,111,99,116,97,108,0,0,0,109,105,115,112,108,97,99,101,100,32,35,101,108,105,102,0,98,111,116,95,114,101,108,111,97,100,99,104,97,114,97,99,116,101,114,115,0,0,0,0,45,45,45,45,45,45,45,45,10,0,0,0,0,0,0,0,109,111,118,101,109,101,110,116,68,105,114,0,0,0,0,0,70,105,108,101,32,34,37,115,34,32,102,111,117,110,100,32,105,110,32,34,37,115,34,10,0,0,0,0,0,0,0,0,115,116,111,112,100,108,0,0,72,117,110,107,32,100,97,116,97,32,102,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,37,105,32,109,101,103,115,0,0,0,0,115,116,97,116,117,115,82,101,115,112,111,110,115,101,10,37,115,10,37,115,0,0,0,0,98,99,115,48,0,0,0,0,110,111,116,104,105,110,103,32,116,111,32,101,118,97,108,117,97,116,101,0,0,0,0,0,108,111,97,100,101,100,32,37,115,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,117,115,101,114,105,110,102,111,10,0,0,0,0,0,0,0,101,118,101,110,116,83,101,113,117,101,110,99,101,0,0,0,85,115,97,103,101,58,32,116,111,117,99,104,70,105,108,101,32,60,102,105,108,101,62,10,0,0,0,0,0,0,0,0,100,111,119,110,108,111,97,100,0,0,0,0,0,0,0,0,37,105,0,0,0,0,0,0,77,105,110,105,109,117,109,32,99,111,109,95,104,117,110,107,77,101,103,115,32,105,115,32,37,105,44,32,97,108,108,111,99,97,116,105,110,103,32,37,105,32,109,101,103,115,46,10,0,0,0,0,0,0,0,0,37,105,32,37,105,32,34,37,115,34,10,0,0,0,0,0,113,0,0,0,0,0,0,0,83,86,95,83,116,97,114,116,117,112,58,32,115,118,115,46,105,110,105,116,105,97,108,105,122,101,100,0,0,0,0,0,110,111,32,108,101,97,100,105,110,103,32,40,32,97,102,116,101,114,32,36,101,118,97,108,105,110,116,47,36,101,118,97,108,102,108,111,97,116,0,0,99,111,117,108,100,110,39,116,32,102,105,110,100,32,99,104,97,116,32,37,115,32,105,110,32,37,115,10,0,0,0,0,85,115,97,103,101,58,32,100,117,109,112,117,115,101,114,32,60,117,115,101,114,105,100,62,10,0,0,0,0,0,0,0,112,109,95,116,105,109,101,0,104,97,110,100,108,101,32,37,105,58,32,37,115,10,0,0,118,100,114,0,0,0,0,0,77,105,110,105,109,117,109,32,99,111,109,95,104,117,110,107,77,101,103,115,32,102,111,114,32,97,32,100,101,100,105,99,97,116,101,100,32,115,101,114,118,101,114,32,105,115,32,37,105,44,32,97,108,108,111,99,97,116,105,110,103,32,37,105,32,109,101,103,115,46,10,0,114,95,100,101,98,117,103,83,117,114,102,97,99,101,85,112,100,97,116,101,0,0,0,0,112,114,105,110,116,10,89,111,117,32,97,114,101,32,98,97,110,110,101,100,32,102,114,111,109,32,116,104,105,115,32,115,101,114,118,101,114,46,10,0,83,86,67,95,83,116,97,116,117,115,58,32,114,97,116,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,0,0,0,0,0,99,103,97,109,101,0,0,0,101,120,112,101,99,116,101,100,32,97,32,37,115,44,32,102,111,117,110,100,32,37,115,0,99,97,110,39,116,32,101,118,97,108,117,97,116,101,32,37,115,0,0,0,0,0,0,0,67,77,111,100,95,76,111,97,100,66,114,117,115,104,101,115,58,32,98,97,100,32,115,104,97,100,101,114,78,117,109,58,32,37,105,0,0,0,0,0,117,110,107,110,111,119,110,32,100,101,102,105,110,105,116,105,111,110,32,37,115,0,0,0,83,86,95,77,97,112,82,101,115,116,97,114,116,95,102,40,37,100,41,58,32,100,114,111,112,112,101,100,32,99,108,105,101,110,116,32,37,105,32,45,32,100,101,110,105,101,100,33,10,0,0,0,0,0,0,0,108,101,103,115,84,105,109,101,114,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,99,112,0,0,0,0,0,0,83,86,70,95,67,76,73,69,78,84,77,65,83,75,58,32,99,108,105,101,110,116,78,117,109,32,62,61,32,51,50,0,49,50,56,0,0,0,0,0,83,86,67,95,83,116,97,116,117,115,58,32,114,97,116,101,32,108,105,109,105,116,32,102,114,111,109,32,37,115,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,0,0,0,0,0,118,109,47,37,115,46,113,118,109,0,0,0,0,0,0,0,112,117,110,99,116,117,97,116,105,111,110,0,0,0,0,0,99,97,110,39,116,32,101,118,97,108,117,97,116,101,32,37,115,44,32,110,111,116,32,100,101,102,105,110,101,100,0,0,101,120,112,101,99,116,101,100,32,116,121,112,101,32,102,111,117,110,100,32,37,115,0,0,109,97,112,95,114,101,115,116,97,114,116,10,0,0,0,0,118,101,108,111,99,105,116,121,91,50,93,0,0,0,0,0,37,115,37,99,37,115,10,0,100,105,115,99,111,110,110,101,99,116,0,0,0,0,0,0,99,111,109,95,104,117,110,107,77,101,103,115,0,0,0,0,112,114,105,110,116,10,37,115,0,0,0,0,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,0,0,81,117,97,107,101,65,114,101,110,97,45,49,0,0,0,0,110,97,109,101,0,0,0,0,110,111,32,118,97,108,117,101,32,97,102,116,101,114,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,0,0,116,121,112,101,0,0,0,0,115,118,95,115,101,114,118,101,114,105,100,0,0,0,0,0,119,101,97,112,111,110,84,105,109,101,0,0,0,0,0,0,32,32,32,32,110,111,116,32,105,110,32,116,104,101,32,109,97,110,105,102,101,115,116,10,0,0,0,0,0,0,0,0,117,115,101,114,105,110,102,111,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,111,100,101,32,108,101,110,103,116,104,115,32,115,101,116,0,0,0,0,0,0,0,0,117,115,101,114,110,97,109,101,0,0,0,0,0,0,0,0,72,117,110,107,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,32,102,97,105,108,101,100,46,32,70,105,108,101,32,115,121,115,116,101,109,32,108,111,97,100,32,115,116,97,99,107,32,110,111,116,32,122,101,114,111,0,0,0,0,0,118,97,108,117,101,32,37,108,100,32,111,117,116,32,111,102,32,114,97,110,103,101,32,91,37,102,44,32,37,102,93,0,60,61,0,0,0,0,0,0,100,101,102,105,110,101,32,37,115,32,119,105,116,104,32,116,111,111,32,109,97,110,121,32,112,97,114,109,115,0,0,0,66,97,100,32,114,99,111,110,112,97,115,115,119,111,114,100,46,10,0,0,0,0,0,0,99,97,110,39,116,32,99,108,111,115,101,32,108,111,103,32,102,105,108,101,32,37,115,10,0,0,0,0,0,0,0,0,37,115,37,99,37,115,37,99,98,111,116,108,105,98,46,108,111,103,0,0,0,0,0,0,41,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,115,118,95,112,117,114,101,32,115,101,116,32,98,117,116,32,110,111,32,80,75,51,32,102,105,108,101,115,32,108,111,97,100,101,100,10,0,0,0,110,117,109,98,101,114,0,0,63,32,97,102,116,101,114,32,63,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,109,97,120,95,112,114,111,106,101,99,116,105,108,101,105,110,102,111,32,61,32,37,100,10,0,0,0,0,0,0,0,0,83,86,95,71,101,116,85,115,101,114,105,110,102,111,58,32,98,97,100,32,105,110,100,101,120,32,37,105,0,0,0,0,99,104,97,116,0,0,0,0,102,117,110,99,95,112,108,97,116,0,0,0,0,0,0,0,109,97,112,110,97,109,101,0,109,97,120,115,0,0,0,0,118,105,101,119,97,110,103,108,101,115,91,48,93,0,0,0,32,32,32,32,105,110,32,116,104,101,32,109,97,110,105,102,101,115,116,10,0,0,0,0,86,77,95,82,101,115,116,97,114,116,32,111,110,32,103,97,109,101,32,102,97,105,108,101,100,0,0,0,0,0,0,0,71,111,105,110,103,32,102,114,111,109,32,67,83,95,67,79,78,78,69,67,84,69,68,32,116,111,32,67,83,95,80,82,73,77,69,68,32,102,111,114,32,37,115,10,0,0,0,0,32,37,52,100,32,37,115,10,0,0,0,0,0,0,0,0,65,65,83,95,84,114,97,99,101,66,111,117,110,100,105,110,103,66,111,120,58,32,115,116,97,99,107,32,111,118,101,114,102,108,111,119,10,0,0,0,85,110,97,98,108,101,32,116,111,32,111,112,101,110,32,102,105,108,101,58,32,37,115,10,0,0,0,0,0,0,0,0,116,114,105,103,103,101,114,95,112,117,115,104,32,119,105,116,104,111,117,116,32,116,105,109,101,10,0,0,0,0,0,0,49,0,0,0,0,0,0,0,115,104,111,119,99,97,99,104,101,117,112,100,97,116,101,115,0,0,0,0,0,0,0,0,97,97,115,32,102,105,108,101,32,37,115,32,105,115,32,111,117,116,32,111,102,32,100,97,116,101,10,0,0,0,0,0,77,65,88,95,80,79,82,84,65,76,65,82,69,65,83,10,0,0,0,0,0,0,0,0,109,105,115,115,105,110,103,32,125,0,0,0,0,0,0,0,73,110,116,101,114,112,114,101,116,101,114,32,101,114,114,111,114,58,32,111,112,83,116,97,99,107,91,48,93,32,61,32,37,88,44,32,111,112,83,116,97,99,107,79,102,115,32,61,32,37,100,0,0,0,0,0,81,95,115,116,114,110,99,112,121,122,58,32,78,85,76,76,32,100,101,115,116,0,0,0,78,111,32,114,99,111,110,112,97,115,115,119,111,114,100,32,115,101,116,32,111,110,32,116,104,101,32,115,101,114,118,101,114,46,10,0,0,0,0,0,83,121,115,95,83,101,110,100,80,97,99,107,101,116,58,32,98,97,100,32,97,100,100,114,101,115,115,32,116,121,112,101,0,0,0,0,0,0,0,0,37,115,32,115,101,110,100,32,37,52,105,32,58,32,115,61,37,105,32,97,99,107,61,37,105,10,0,0,0,0,0,0,37,105,0,0,0,0,0,0,58,32,119,105,116,104,111,117,116,32,63,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,0,0,37,100,32,117,115,101,100,32,37,100,10,0,0,0,0,0,118,97,114,105,97,98,108,101,32,99,104,97,110,103,101,32,45,45,32,114,101,115,116,97,114,116,105,110,103,46,10,0,118,105,101,119,97,110,103,108,101,115,91,49,93,0,0,0,32,32,32,32,111,110,32,116,104,101,32,112,117,114,101,32,108,105,115,116,10,0,0,0,115,101,114,118,101,114,105,110,102,111,0,0,0,0,0,0,83,86,95,83,101,110,100,67,108,105,101,110,116,71,97,109,101,83,116,97,116,101,40,41,32,102,111,114,32,37,115,10,0,0,0,0,0,0,0,0,82,99,111,110,32,102,114,111,109,32,37,115,58,32,37,115,10,0,0,0,0,0,0,0,109,97,112,115,47,37,115,46,98,115,112,0,0,0,0,0,115,116,114,105,110,103,0,0,100,105,118,105,100,101,32,98,121,32,122,101,114,111,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,37,105,0,0,0,0,0,0,118,101,108,111,99,105,116,121,91,49,93,0,0,0,0,0,32,32,32,32,110,111,116,32,111,110,32,116,104,101,32,112,117,114,101,32,108,105,115,116,10,0,0,0,0,0,0,0,76,111,115,116,32,114,101,108,105,97,98,108,101,32,99,111,109,109,97,110,100,115,0,0,94,49,69,114,114,111,114,58,32,83,86,95,66,111,116,76,105,98,83,101,116,117,112,32,119,105,116,104,111,117,116,32,83,86,95,66,111,116,73,110,105,116,66,111,116,76,105,98,10,0,0,0,0,0,0,0,58,58,0,0,0,0,0,0,66,97,100,32,114,99,111,110,32,102,114,111,109,32,37,115,58,32,37,115,10,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,0,0,99,111,117,108,100,110,39,116,32,114,101,97,100,32,101,120,112,101,99,116,101,100,32,116,111,107,101,110,0,0,0,0,109,105,115,105,110,103,32,118,97,108,117,101,115,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,49,0,0,0,0,0,0,0,118,101,108,111,99,105,116,121,91,48,93,0,0,0,0,0,37,115,32,40,37,105,32,102,105,108,101,115,41,10,0,0,67,108,105,101,110,116,32,37,115,32,108,111,115,116,32,37,105,32,99,108,105,101,110,116,67,111,109,109,97,110,100,115,10,0,0,0,0,0,0,0,44,32,115,101,116,116,105,110,103,32,116,111,32,37,102,10,0,0,0,0,0,0,0,0,113,99,111,110,115,111,108,101,46,108,111,103,0,0,0,0,34,37,115,34,32,105,115,58,34,37,115,94,55,34,0,0,83,86,67,95,82,101,109,111,116,101,67,111,109,109,97,110,100,58,32,114,97,116,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,0,0,0,0,0,0,117,105,95,115,105,110,103,108,101,80,108,97,121,101,114,65,99,116,105,118,101,0,0,0,101,120,112,101,99,116,101,100,32,37,115,44,32,102,111,117,110,100,32,37,115,0,0,0,116,111,111,32,109,97,110,121,32,40,32,105,110,32,35,105,102,47,35,101,108,105,102,0,115,118,95,99,104,101,97,116,115,0,0,0,0,0,0,0,98,111,98,67,121,99,108,101,0,0,0,0,0,0,0,0,67,117,114,114,101,110,116,32,115,101,97,114,99,104,32,112,97,116,104,58,10,0,0,0,99,108,105,101,110,116,67,111,109,109,97,110,100,58,32,37,115,32,58,32,37,105,32,58,32,37,115,10,0,0,0,0,44,32,115,101,116,116,105,110,103,32,116,111,32,37,100,10,0,0,0,0,0,0,0,0,90,111,110,101,32,100,97,116,97,32,102,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,37,105,32,109,101,103,115,0,0,0,0,83,86,67,95,82,101,109,111,116,101,67,111,109,109,97,110,100,58,32,114,97,116,101,32,108,105,109,105,116,32,102,114,111,109,32,37,115,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,0,0,0,0,0,0,45,45,45,45,45,32,83,101,114,118,101,114,32,83,104,117,116,100,111,119,110,32,40,37,115,41,32,45,45,45,45,45,10,0,0,0,0,0,0,0,116,114,97,105,108,105,110,103,32,111,112,101,114,97,116,111,114,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,56,0,0,0,0,0,0,0,99,111,109,109,97,110,100,84,105,109,101,0,0,0,0,0,37,100,32,102,105,108,101,115,32,108,105,115,116,101,100,10,0,0,0,0,0,0,0,0,67,97,110,110,111,116,32,118,97,108,105,100,97,116,101,32,112,117,114,101,32,99,108,105,101,110,116,33,0,0,0,0,99,111,109,95,101,114,114,111,114,67,111,100,101,0,0,0,32,111,117,116,32,111,102,32,114,97,110,103,101,32,40,109,97,120,32,37,102,41,0,0,50,52,0,0,0,0,0,0,98,97,100,32,99,111,110,110,101,99,116,105,111,110,108,101,115,115,32,112,97,99,107,101,116,32,102,114,111,109,32,37,115,58,10,37,115,10,0,0,101,120,101,99,37,115,32,60,102,105,108,101,110,97,109,101,62,32,58,32,101,120,101,99,117,116,101,32,97,32,115,99,114,105,112,116,32,102,105,108,101,37,115,10,0,0,0,0,100,105,115,99,111,110,110,101,99,116,32,34,37,115,34,0,99,97,110,39,116,32,114,101,97,100,32,116,111,107,101,110,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,37,115,32,105,110,32,35,105,102,47,35,101,108,105,102,0,110,111,32,114,99,104,97,116,115,10,0,0,0,0,0,0,115,118,95,109,97,120,99,108,105,101,110,116,115,0,0,0,83,121,115,95,83,116,114,105,110,103,84,111,83,111,99,107,97,100,100,114,58,32,69,114,114,111,114,32,114,101,115,111,108,118,105,110,103,32,37,115,58,32,37,115,10,0,0,0,101,120,97,109,112,108,101,58,32,102,100,105,114,32,42,113,51,100,109,42,46,98,115,112,10,0,0,0,0,0,0,0,37,115,58,32,100,105,100,110,39,116,32,103,101,116,32,99,112,32,99,111,109,109,97,110,100,44,32,114,101,115,101,110,100,105,110,103,32,103,97,109,101,115,116,97,116,101,10,0,32,111,117,116,32,111,102,32,114,97,110,103,101,32,40,109,97,120,32,37,100,41,0,0,99,111,109,95,122,111,110,101,77,101,103,115,0,0,0,0,67,77,95,71,101,110,101,114,97,116,101,80,97,116,99,104,70,97,99,101,116,115,58,32,115,111,117,114,99,101,32,105,115,32,62,32,77,65,88,95,71,82,73,68,95,83,73,90,69,0,0,0,0,0,0,0,100,105,115,99,111,110,110,101,99,116,0,0,0,0,0,0,83,86,67,95,68,105,114,101,99,116,67,111,110,110,101,99,116,32,40,41,10,0,0,0,112,114,105,110,116,32,34,37,115,10,34,10,0,0,0,0,112,114,105,109,105,116,105,118,101,32,116,111,107,101,110,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,61,32,37,100,0,0,0,0,0,0,111,117,116,32,111,102,32,111,112,101,114,97,116,111,114,32,115,112,97,99,101,0,0,0,77,97,112,32,104,97,115,32,110,111,32,110,111,100,101,115,0,0,0,0,0,0,0,0,62,0,0,0,0,0,0,0,103,95,100,111,87,97,114,109,117,112,0,0,0,0,0,0,83,121,115,95,83,116,114,105,110,103,84,111,83,111,99,107,97,100,100,114,58,32,69,114,114,111,114,32,114,101,115,111,108,118,105,110,103,32,37,115,58,32,78,111,32,97,100,100,114,101,115,115,32,111,102,32,114,101,113,117,105,114,101,100,32,116,121,112,101,32,102,111,117,110,100,46,10,0,0,0,117,115,97,103,101,58,32,102,100,105,114,32,60,102,105,108,116,101,114,62,10,0,0,0,99,109,100,67,111,117,110,116,32,62,32,77,65,88,95,80,65,67,75,69,84,95,85,83,69,82,67,77,68,83,10,0,32,111,117,116,32,111,102,32,114,97,110,103,101,32,40,109,105,110,32,37,102,41,0,0,70,73,88,73,78,71,32,69,78,84,45,62,83,46,78,85,77,66,69,82,33,33,33,10,0,0,0,0,0,0,0,0,83,109,97,108,108,32,122,111,110,101,32,100,97,116,97,32,102,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,37,49,46,49,102,32,109,101,103,115,0,0,0,114,99,111,110,0,0,0,0,114,101,104,97,115,104,98,97,110,115,10,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,101,114,97,116,111,114,32,37,115,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,0,0,115,112,0,0,0,0,0,0,72,111,115,116,110,97,109,101,58,32,37,115,10,0,0,0,37,115,10,0,0,0,0,0,99,109,100,67,111,117,110,116,32,60,32,49,10,0,0,0,32,111,117,116,32,111,102,32,114,97,110,103,101,32,40,109,105,110,32,37,100,41,0,0,103,101,116,99,104,97,108,108,101,110,103,101,0,0,0,0,115,101,114,118,101,114,98,97,110,115,46,100,97,116,0,0,81,117,97,107,101,51,65,114,101,110,97,0,0,0,0,0,111,112,101,114,97,116,111,114,32,37,115,32,97,102,116,101,114,32,111,112,101,114,97,116,111,114,32,105,110,32,35,105,102,47,35,101,108,105,102,0,60,0,0,0,0,0,0,0,103,114,97,112,112,108,101,114,101,97,99,104,0,0,0,0,48,0,0,0,0,0,0,0,110,101,116,95,100,114,111,112,115,105,109,0,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,0,0,0,0,0,0,67,98,117,102,95,65,100,100,84,101,120,116,58,32,111,118,101,114,102,108,111,119,10,0,87,65,82,78,73,78,71,58,32,98,97,100,32,99,111,109,109,97,110,100,32,98,121,116,101,32,102,111,114,32,99,108,105,101,110,116,32,37,105,10,0,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,99,118,97,114,32,39,37,115,39,0,0,0,0,0,0,105,110,102,105,110,105,116,121,0,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,108,101,110,103,116,104,32,111,114,32,100,105,115,116,97,110,99,101,32,115,121,109,98,111,108,115,0,0,0,0,0,101,109,115,99,114,105,112,116,101,110,32,0,0,0,0,0,32,32,32,32,32,32,32,32,37,56,105,32,98,121,116,101,115,32,105,110,32,115,109,97,108,108,32,90,111,110,101,32,109,101,109,111,114,121,10,0,118,97,108,117,101,32,37,108,100,32,111,117,116,32,111,102,32,114,97,110,103,101,32,91,37,108,100,44,32,37,108,100,93,0,0,0,0,0,0,0,62,61,0,0,0,0,0,0,40,0,0,0,0,0,0,0,103,101,116,105,110,102,111,0,79,112,101,110,101,100,32,108,111,103,32,37,115,10,0,0,98,97,115,101,103,97,109,101,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,115,118,95,98,97,110,70,105,108,101,0,0,0,0,0,0,110,117,109,98,101,114,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,61,32,37,100,0,0,0,0,0,0,0,43,43,32,111,114,32,45,45,32,117,115,101,100,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,109,97,120,95,112,114,111,106,101,99,116,105,108,101,105,110,102,111,0,0,0,0,0,0,83,86,95,71,101,116,85,115,101,114,105,110,102,111,58,32,98,117,102,102,101,114,83,105,122,101,32,61,61,32,37,105,0,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,91,44,32,102,111,117,110,100,32,37,115,0,0,0,0,102,117,110,99,95,98,111,98,98,105,110,103,0,0,0,0,102,111,114,99,101,114,101,97,99,104,97,98,105,108,105,116,121,0,0,0,0,0,0,0,103,95,103,97,109,101,116,121,112,101,0,0,0,0,0,0,110,101,116,95,115,111,99,107,115,80,97,115,115,119,111,114,100,0,0,0,0,0,0,0,109,105,110,115,0,0,0,0,68,105,114,101,99,116,111,114,121,32,111,102,32,37,115,32,37,115,10,0,0,0,0,0,66,97,100,32,103,97,109,101,32,115,121,115,116,101,109,32,116,114,97,112,58,32,37,108,100,0,0,0,0,0,0,0,37,115,32,97,99,107,110,111,119,108,101,100,103,101,100,32,103,97,109,101,115,116,97,116,101,10,0,0,0,0,0,0,32,37,52,100,32,37,102,10,0,0,0,0,0,0,0,0,65,65,83,95,65,114,101,97,80,114,101,115,101,110,99,101,84,121,112,101,58,32,105,110,118,97,108,105,100,32,97,114,101,97,32,110,117,109,98,101,114,10,0,0,0,0,0,0,32,97,110,100,32,105,115,0,109,97,112,115,47,37,115,46,114,99,100,0,0,0,0,0,111,114,105,103,105,110,0,0,112,104,121,115,95,119,97,116,101,114,102,114,105,99,116,105,111,110,0,0,0,0,0,0,32,32,32,32,32,32,32,32,37,56,105,32,98,121,116,101,115,32,105,110,32,100,121,110,97,109,105,99,32,111,116,104,101,114,10,0,0,0,0,0,99,111,117,108,100,110,39,116,32,119,114,105,116,101,32,37,115,10,0,0,0,0,0,0,115,118,95,109,97,112,67,104,101,99,107,115,117,109,0,0,65,65,83,95,69,110,116,105,116,121,77,111,100,101,108,78,117,109,58,32,101,110,116,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,65,65,83,95,77,65,88,95,80,79,82,84,65,76,83,10,0,0,0,0,0,0,0,0,125,0,0,0,0,0,0,0,86,77,32,112,114,111,103,114,97,109,32,99,111,117,110,116,101,114,32,111,117,116,32,111,102,32,114,97,110,103,101,32,105,110,32,79,80,95,74,85,77,80,0,0,0,0,0,0,103,101,116,115,116,97,116,117,115,0,0,0,0,0,0,0,79,118,101,114,115,105,122,101,32,112,97,99,107,101,116,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,78,101,116,99,104,97,110,95,84,114,97,110,115,109,105,116,58,32,108,101,110,103,116,104,32,61,32,37,105,0,0,0,115,118,95,108,97,110,70,111,114,99,101,82,97,116,101,0,98,105,110,97,114,121,32,110,117,109,98,101,114,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,61,32,37,100,0,0,0,0,0,0,0,0,33,32,111,114,32,126,32,97,102,116,101,114,32,118,97,108,117,101,32,105,110,32,35,105,102,47,35,101,108,105,102,0,118,97,114,105,97,98,108,101,115,32,102,114,111,109,32,116,104,101,32,109,97,116,99,104,32,116,101,109,112,108,97,116,101,40,115,41,32,99,111,117,108,100,32,98,101,32,105,110,118,97,108,105,100,32,119,104,101,110,32,111,117,116,112,117,116,116,105,110,103,32,111,110,101,32,111,102,32,116,104,101,32,99,104,97,116,32,109,101,115,115,97,103,101,115,0,0,99,97,108,99,117,108,97,116,105,110,103,32,99,108,117,115,116,101,114,115,46,46,46,10,0,0,0,0,0,0,0,0,77,83,71,95,87,114,105,116,101,83,116,114,105,110,103,58,32,66,73,71,95,73,78,70,79,95,83,84,82,73,78,71,0,0,0,0,0,0,0,0,67,97,110,39,116,32,102,105,110,100,32,109,97,112,32,37,115,10,0,0,0,0,0,0,110,101,116,95,115,111,99,107,115,85,115,101,114,110,97,109,101,0,0,0,0,0,0,0,117,115,97,103,101,58,32,100,105,114,32,60,100,105,114,101,99,116,111,114,121,62,32,91,101,120,116,101,110,115,105,111,110,93,10,0,0,0,0,0,115,116,97,116,117,115,0,0,37,115,32,58,32,100,114,111,112,112,101,100,32,103,97,109,101,115,116,97,116,101,44,32,114,101,115,101,110,100,105,110,103,10,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,99,118,97,114,32,39,37,115,39,32,109,117,115,116,32,98,101,32,110,117,109,101,114,105,99,0,0,0,0,0,0,32,32,32,32,32,32,32,32,37,56,105,32,98,121,116,101,115,32,105,110,32,100,121,110,97,109,105,99,32,114,101,110,100,101,114,101,114,10,0,0,83,86,32,112,97,99,107,101,116,32,37,115,32,58,32,37,115,10,0,0,0,0,0,0,70,108,111,111,100,65,114,101,97,95,114,58,32,114,101,102,108,111,111,100,101,100,0,0,115,118,95,109,97,112,67,104,101,99,107,115,117,109,0,0,104,101,120,97,100,101,99,105,109,97,108,32,110,117,109,98,101,114,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,61,32,37,100,0,0,0,105,108,108,105,103,97,108,32,111,112,101,114,97,116,111,114,32,37,115,32,111,110,32,102,108,111,97,116,105,110,103,32,112,111,105,110,116,32,111,112,101,114,97,110,100,115,0,0,49,48,48,48,0,0,0,0,97,108,108,32,107,101,121,115,32,104,97,118,101,32,97,32,38,32,111,114,32,33,32,112,114,101,102,105,120,0,0,0,10,112,108,101,97,115,101,32,119,97,105,116,32,119,104,105,108,101,32,115,116,111,114,105,110,103,32,114,101,97,99,104,97,98,105,108,105,116,121,46,46,46,10,0,0,0,0,0,102,115,95,99,111,109,112,108,101,116,101,77,97,110,105,102,101,115,116,0,0,0,0,0,49,48,56,48,0,0,0,0,47,100,101,115,99,114,105,112,116,105,111,110,46,116,120,116,0,0,0,0,0,0,0,0,37,115,32,58,32,105,103,110,111,114,105,110,103,32,112,114,101,32,109,97,112,95,114,101,115,116,97,114,116,32,47,32,111,117,116,100,97,116,101,100,32,99,108,105,101,110,116,32,109,101,115,115,97,103,101,10,0,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,99,118,97,114,32,39,37,115,39,32,109,117,115,116,32,98,101,32,105,110,116,101,103,114,97,108,0,0,0,0,0,46,46,0,0,0,0,0,0,32,32,32,32,32,32,32,32,37,56,105,32,98,121,116,101,115,32,105,110,32,100,121,110,97,109,105,99,32,98,111,116,108,105,98,10,0,0,0,0,99,111,110,110,101,99,116,0,115,118,95,107,105,108,108,115,101,114,118,101,114,0,0,0,110,97,109,101,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,61,32,37,100,0,116,111,111,32,109,97,110,121,32,41,32,105,110,32,35,105,102,47,35,101,108,115,105,102,0,0,0,0,0,0,0,0,100,114,111,112,112,101,100,119,101,105,103,104,116,0,0,0,116,104,101,32,107,101,121,32,37,115,32,119,105,116,104,32,112,114,101,102,105,120,32,33,32,105,115,32,105,110,115,105,100,101,32,116,104,101,32,109,97,116,99,104,32,116,101,109,112,108,97,116,101,32,115,116,114,105,110,103,32,37,115,0,13,37,54,46,49,102,37,37,0,0,0,0,0,0,0,0,80,114,101,100,105,99,116,77,111,118,101,109,101,110,116,58,32,115,116,97,114,116,32,115,111,108,105,100,10,0,0,0,37,115,46,112,107,51,0,0,110,101,116,95,115,111,99,107,115,80,111,114,116,0,0,0,77,83,71,95,87,114,105,116,101,68,101,108,116,97,69,110,116,105,116,121,58,32,66,97,100,32,101,110,116,105,116,121,32,110,117,109,98,101,114,58,32,37,105,0,0,0,0,0,46,0,0,0,0,0,0,0,110,101,120,116,100,108,0,0,99,118,97,114,95,114,101,115,116,97,114,116,0,0,0,0,37,56,105,32,98,121,116,101,115,32,105,110,32,37,105,32,122,111,110,101,32,98,108,111,99,107,115,10,0,0,0,0,69,114,114,111,114,58,32,84,111,111,32,109,97,110,121,32,99,118,97,114,115,44,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32,110,101,119,32,111,110,101,33,0,49,0,0,0,0,0,0,0,115,118,95,112,97,100,80,97,99,107,101,116,115,0,0,0,110,101,119,108,105,110,101,32,105,110,115,105,100,101,32,115,116,114,105,110,103,32,37,115,0,0,0,0,0,0,0,0,109,105,115,112,108,97,99,101,100,32,109,105,110,117,115,32,115,105,103,110,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,0,99,111,117,108,100,110,39,116,32,108,111,97,100,32,105,116,101,109,32,99,111,110,102,105,103,10,0,0,0,0,0,0,116,104,101,32,107,101,121,32,37,115,32,119,105,116,104,32,112,114,101,102,105,120,32,33,32,105,115,32,105,110,115,105,100,101,32,116,104,101,32,107,101,121,32,37,115,0,0,0,99,97,108,99,117,108,97,116,105,110,103,32,114,101,97,99,104,97,98,105,108,105,116,121,46,46,46,10,0,0,0,0,52,53,48,0,0,0,0,0,109,97,112,115,47,37,115,46,98,115,112,0,0,0,0,0,110,101,116,95,115,111,99,107,115,83,101,114,118,101,114,0,102,114,97,109,101,0,0,0,36,109,111,100,108,105,115,116,0,0,0,0,0,0,0,0,99,108,105,101,110,116,32,116,101,120,116,32,105,103,110,111,114,101,100,32,102,111,114,32,37,115,58,32,37,115,10,0,99,118,97,114,108,105,115,116,0,0,0,0,0,0,0,0,37,56,105,32,117,110,117,115,101,100,32,104,105,103,104,119,97,116,101,114,10,0,0,0,115,118,95,112,97,117,115,101,100,0,0,0,0,0,0,0,115,118,95,115,104,111,119,108,111,115,115,0,0,0,0,0,109,105,115,115,105,110,103,32,116,114,97,105,108,105,110,103,32,113,117,111,116,101,0,0,100,101,102,105,110,101,100,32,119,105,116,104,111,117,116,32,41,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,105,116,101,109,115,46,99,0,111,110,101,32,111,102,32,116,104,101,32,109,97,116,99,104,32,116,101,109,112,108,97,116,101,115,32,100,111,101,115,32,110,111,116,32,108,101,97,118,101,32,115,112,97,99,101,32,102,111,114,32,116,104,101,32,107,101,121,32,37,115,32,119,105,116,104,32,116,104,101,32,38,32,112,114,101,102,105,120,0,0,0,0,0,0,0,0,37,100,32,119,101,97,112,111,110,32,106,117,109,112,32,97,114,101,97,115,10,0,0,0,114,115,95,109,97,120,106,117,109,112,102,97,108,108,104,101,105,103,104,116,0,0,0,0,98,115,112,0,0,0,0,0,48,0,0,0,0,0,0,0,99,111,110,115,116,97,110,116,76,105,103,104,116,0,0,0,117,115,101,114,105,110,102,111,32,115,116,114,105,110,103,32,108,101,110,103,116,104,32,101,120,99,101,101,100,101,100,0,114,101,99,117,114,115,105,118,101,32,101,114,114,111,114,32,97,102,116,101,114,58,32,37,115,0,0,0,0,0,0,0,117,110,115,101,116,0,0,0,37,56,105,32,116,111,116,97,108,32,104,117,110,107,32,105,110,32,117,115,101,10,0,0,116,105,109,101,100,32,111,117,116,0,0,0,0,0,0,0,101,120,101,99,113,0,0,0,51,0,0,0,0,0,0,0,115,116,114,105,110,103,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,61,32,37,100,0,0,0,0,0,0,0,111,117,116,32,111,102,32,118,97,108,117,101,32,115,112,97,99,101,0,0,0,0,0,0,115,112,105,110,100,111,119,110,0,0,0,0,0,0,0,0,105,116,101,109,99,111,110,102,105,103,0,0,0,0,0,0,37,115,32,105,110,32,115,111,108,105,100,32,97,116,32,40,37,49,46,49,102,32,37,49,46,49,102,32,37,49,46,49,102,41,10,0,0,0,0,0,48,0,0,0,0,0,0,0,109,97,112,115,0,0,0,0,110,101,116,95,115,111,99,107,115,69,110,97,98,108,101,100,0,0,0,0,0,0,0,0,97,110,103,108,101,115,50,91,50,93,0,0,0,0,0,0,77,65,88,95,80,65,84,67,72,95,80,76,65,78,69,83,0,0,0,0,0,0,0,0,115,110,97,112,115,0,0,0,114,101,115,101,116,0,0,0,37,56,105,32,104,105,103,104,32,116,101,109,112,72,105,103,104,119,97,116,101,114,10,0,67,77,95,71,101,110,101,114,97,116,101,80,97,116,99,104,70,97,99,101,116,115,58,32,101,118,101,110,32,115,105,122,101,115,32,97,114,101,32,105,110,118,97,108,105,100,32,102,111,114,32,113,117,97,100,114,97,116,105,99,32,109,101,115,104,101,115,0,0,0,0,0,71,111,105,110,103,32,102,114,111,109,32,67,83,95,90,79,77,66,73,69,32,116,111,32,67,83,95,70,82,69,69,32,102,111,114,32,99,108,105,101,110,116,32,37,100,10,0,0,99,104,97,108,108,101,110,103,101,82,101,115,112,111,110,115,101,32,37,100,32,37,100,32,37,100,0,0,0,0,0,0,115,118,95,114,101,99,111,110,110,101,99,116,108,105,109,105,116,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,101,115,99,97,112,101,32,99,104,97,114,0,0,0,0,0,100,101,102,105,110,101,100,32,119,105,116,104,111,117,116,32,110,97,109,101,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,0,77,79,68,95,76,111,97,100,66,109,111,100,101,108,58,32,102,117,110,110,121,32,108,117,109,112,32,115,105,122,101,0,115,112,105,110,117,112,0,0,48,0,0,0,0,0,0,0,105,116,101,109,95,105,110,118,117,108,110,101,114,97,98,105,108,105,116,121,0,0,0,0,114,115,95,109,97,120,102,97,108,108,104,101,105,103,104,116,0,0,0,0,0,0,0,0,99,111,110,115,111,108,101,58,32,0,0,0,0,0,0,0,97,110,103,108,101,115,50,91,48,93,0,0,0,0,0,0,70,83,95,70,114,101,101,70,105,108,101,40,32,78,85,76,76,32,41,0,0,0,0,0,49,48,48,0,0,0,0,0,115,101,116,97,0,0,0,0,83,86,95,81,115,111,114,116,69,110,116,105,116,121,83,116,97,116,101,115,58,32,100,117,112,108,105,99,97,116,101,100,32,101,110,116,105,116,121,0,37,56,105,32,104,105,103,104,32,116,101,109,112,10,0,0,115,118,95,109,105,110,82,97,116,101,0,0,0,0,0,0,115,118,95,109,97,115,116,101,114,37,100,0,0,0,0,0,116,111,111,32,108,97,114,103,101,32,118,97,108,117,101,32,105,110,32,101,115,99,97,112,101,32,99,104,97,114,97,99,116,101,114,0,0,0,0,0,117,110,100,101,102,105,110,101,100,32,110,97,109,101,32,37,115,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,114,101,108,111,97,100,0,0,103,95,103,97,109,101,116,121,112,101,0,0,0,0,0,0,105,116,101,109,95,114,101,103,101,110,0,0,0,0,0,0,114,115,95,102,97,108,108,100,97,109,97,103,101,49,48,0,99,104,97,116,32,34,37,115,34,0,0,0,0,0,0,0,110,101,116,95,109,99,97,115,116,54,105,102,97,99,101,0,97,110,103,108,101,115,91,50,93,0,0,0,0,0,0,0,87,114,105,116,105,110,103,32,37,115,32,116,111,32,106,111,117,114,110,97,108,32,102,105,108,101,46,10,0,0,0,0,104,97,110,100,105,99,97,112,0,0,0,0,0,0,0,0,115,101,116,117,0,0,0,0,37,56,105,32,104,105,103,104,32,112,101,114,109,97,110,101,110,116,10,0,0,0,0,0,49,48,48,48,0,0,0,0,109,97,115,116,101,114,46,113,117,97,107,101,106,115,46,99,111,109,0,0,0,0,0,0,102,105,108,101,32,37,115,44,32,108,105,110,101,32,37,100,58,32,37,115,10,0,0,0,110,101,116,95,101,110,97,98,108,101,100,0,0,0,0,0,100,101,102,105,110,101,100,0,97,99,116,105,118,97,116,101,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,103,111,97,108,32,115,116,97,116,101,32,104,97,110,100,108,101,32,37,100,10,0,0,0,105,116,0,0,0,0,0,0,105,116,101,109,95,113,117,97,100,0,0,0,0,0,0,0,114,115,95,102,97,108,108,100,97,109,97,103,101,53,0,0,99,111,110,115,111,108,101,95,116,101,108,108,58,32,0,0,102,102,48,52,58,58,54,57,54,102,58,55,49,55,53,58,54,49,54,98,58,54,53,51,51,0,0,0,0,0,0,0,116,105,109,101,50,0,0,0,87,114,105,116,105,110,103,32,108,101,110,32,102,111,114,32,37,115,32,116,111,32,106,111,117,114,110,97,108,32,102,105,108,101,46,10,0,0,0,0,114,97,116,101,0,0,0,0,115,101,116,115,0,0,0,0,105,110,118,97,108,105,100,32,115,116,111,114,101,100,32,98,108,111,99,107,32,108,101,110,103,116,104,115,0,0,0,0,97,114,99,104,0,0,0,0,37,56,105,32,104,105,103,104,32,109,97,114,107,10,0,0,102,108,111,97,116,32,111,117,116,32,111,102,32,114,97,110,103,101,32,91,37,102,44,32,37,102,93,0,0,0,0,0,124,124,0,0,0,0,0,0,100,101,102,105,110,101,32,119,105,116,104,32,109,111,114,101,32,116,104,97,110,32,37,100,32,112,97,114,97,109,101,116,101,114,115,0,0,0,0,0,99,97,110,39,116,32,111,112,101,110,32,116,104,101,32,108,111,103,32,102,105,108,101,32,37,115,10,0,0,0,0,0,115,118,95,77,97,120,82,97,116,101,0,0,0,0,0,0,103,97,109,101,100,105,114,0,40,0,0,0,0,0,0,0,115,118,95,109,97,115,116,101,114,49,0,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,32,105,110,32,35,105,102,47,35,101,108,105,102,0,0,0,0,0,0,0,109,97,120,95,119,101,97,112,111,110,105,110,102,111,32,61,32,37,100,10,0,0,0,0,97,109,109,111,105,110,100,101,120,0,0,0,0,0,0,0,99,111,117,108,100,110,39,116,32,108,111,97,100,32,119,101,105,103,104,116,115,10,0,0,109,97,108,101,0,0,0,0,110,97,109,101,0,0,0,0,101,110,116,105,116,121,32,37,115,32,109,111,100,101,108,32,110,117,109,98,101,114,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,119,101,97,112,111,110,95,98,102,103,0,0,0,0,0,0,114,115,95,115,116,97,114,116,101,108,101,118,97,116,111,114,0,0,0,0,0,0,0,0,85,115,97,103,101,58,32,116,101,108,108,32,60,99,108,105,101,110,116,32,110,117,109,98,101,114,62,32,60,116,101,120,116,62,10,0,0,0,0,0,110,101,116,95,109,99,97,115,116,54,97,100,100,114,0,0,114,101,115,112,97,119,110,116,105,109,101,0,0,0,0,0,97,112,111,115,46,116,114,68,101,108,116,97,91,50,93,0,87,114,105,116,105,110,103,32,122,101,114,111,32,102,111,114,32,37,115,32,116,111,32,106,111,117,114,110,97,108,32,102,105,108,101,46,10,0,0,0,110,97,109,101,0,0,0,0,32,37,52,100,32,37,100,10,0,0,0,0,0,0,0,0,83,86,95,71,101,116,85,115,101,114,99,109,100,58,32,98,97,100,32,99,108,105,101,110,116,78,117,109,58,37,105,0,115,101,116,0,0,0,0,0,116,114,105,103,103,101,114,95,112,117,115,104,32,119,105,116,104,111,117,116,32,116,97,114,103,101,116,32,101,110,116,105,116,121,32,37,115,10,0,0,67,77,111,100,95,76,111,97], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+20480);
|
|
/* memory initializer */ allocate([100,83,104,97,100,101,114,115,58,32,102,117,110,110,121,32,108,117,109,112,32,115,105,122,101,0,0,0,0,0,0,0,56,48,48,0,0,0,0,0,37,115,32,119,114,105,116,116,101,110,32,115,117,99,99,101,115,115,102,117,108,108,121,10,0,0,0,0,0,0,0,0,37,56,105,32,108,111,119,32,116,101,109,112,72,105,103,104,119,97,116,101,114,10,0,0,97,97,115,32,102,105,108,101,32,37,115,32,105,115,32,118,101,114,115,105,111,110,32,37,105,44,32,110,111,116,32,37,105,10,0,0,0,0,0,0,65,65,83,95,69,110,116,105,116,121,84,121,112,101,58,32,101,110,116,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,65,65,83,95,77,65,88,95,67,76,85,83,84,69,82,83,10,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,101,110,116,105,116,105,101,115,32,105,110,32,66,83,80,32,102,105,108,101,10,0,0,86,77,32,112,114,111,103,114,97,109,32,99,111,117,110,116,101,114,32,111,117,116,32,111,102,32,114,97,110,103,101,32,105,110,32,79,80,95,76,69,65,86,69,0,0,0,0,0,118,109,105,110,102,111,0,0,109,97,112,95,114,101,115,116,97,114,116,32,48,10,0,0,78,69,84,95,71,101,116,80,97,99,107,101,116,58,32,37,115,10,0,0,0,0,0,0,37,115,32,115,101,110,100,32,37,52,105,32,58,32,115,61,37,105,32,102,114,97,103,109,101,110,116,61,37,105,44,37,105,10,0,0,0,0,0,0,115,118,95,100,108,85,82,76,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,109,105,115,112,108,97,99,101,100,32,35,101,110,100,105,102,0,0,0,0,0,0,0,0,97,109,109,111,97,109,111,117,110,116,0,0,0,0,0,0,103,111,97,108,32,104,101,97,112,32,111,118,101,114,102,108,111,119,10,0,0,0,0,0,102,101,109,97,108,101,0,0,119,101,97,112,111,110,95,114,97,105,108,103,117,110,0,0,114,115,95,102,117,110,99,98,111,98,0,0,0,0,0,0,77,83,71,95,87,114,105,116,101,83,116,114,105,110,103,58,32,77,65,88,95,83,84,82,73,78,71,95,67,72,65,82,83,0,0,0,0,0,0,0,69,120,99,101,112,116,32,35,37,100,58,32,37,115,47,37,100,10,0,0,0,0,0,0,37,105,0,0,0,0,0,0,97,112,111,115,46,116,114,68,101,108,116,97,91,49,93,0,82,101,97,100,32,102,114,111,109,32,106,111,117,114,110,97,108,68,97,116,97,70,105,108,101,32,102,97,105,108,101,100,0,0,0,0,0,0,0,0,99,108,105,101,110,116,107,105,99,107,0,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,119,114,105,116,105,110,103,32,98,108,111,99,107,32,37,100,10,0,0,116,111,103,103,108,101,0,0,37,56,105,32,108,111,119,32,116,101,109,112,10,0,0,0,82,101,115,116,97,114,116,105,110,103,32,115,101,114,118,101,114,32,100,117,101,32,116,111,32,110,117,109,83,110,97,112,115,104,111,116,69,110,116,105,116,105,101,115,32,119,114,97,112,112,105,110,103,0,0,0,115,118,95,97,108,108,111,119,68,111,119,110,108,111,97,100,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,35,101,108,115,101,32,97,102,116,101,114,32,35,101,108,115,101,0,0,0,0,0,0,0,101,120,116,114,97,122,118,101,108,111,99,105,116,121,0,0,37,100,58,32,37,115,0,0,110,97,109,101,0,0,0,0,119,101,97,112,111,110,95,112,108,97,115,109,97,103,117,110,0,0,0,0,0,0,0,0,114,115,95,97,105,114,99,111,110,116,114,111,108,108,101,100,106,117,109,112,112,97,100,0,66,97,110,32,35,37,100,58,32,37,115,47,37,100,10,0,58,58,0,0,0,0,0,0,97,112,111,115,46,116,114,68,101,108,116,97,91,48,93,0,76,111,97,100,105,110,103,32,37,115,32,102,114,111,109,32,106,111,117,114,110,97,108,32,102,105,108,101,46,10,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,98,101,103,105,110,110,105,110,103,32,34,37,115,34,10,0,0,0,0,49,0,0,0,0,0,0,0,112,114,105,110,116,0,0,0,37,115,37,115,0,0,0,0,37,56,105,32,108,111,119,32,112,101,114,109,97,110,101,110,116,10,0,0,0,0,0,0,115,101,99,116,111,114,32,37,105,58,32,37,105,32,101,110,116,105,116,105,101,115,10,0,109,97,112,32,37,115,10,0,92,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,109,105,115,112,108,97,99,101,100,32,35,101,108,115,101,0,97,110,103,108,101,111,102,102,115,101,116,0,0,0,0,0,97,118,111,105,100,32,103,111,97,108,32,37,115,44,32,110,117,109,98,101,114,32,37,100,32,102,111,114,32,37,102,32,115,101,99,111,110,100,115,0,33,0,0,0,0,0,0,0,119,101,97,112,111,110,95,108,105,103,104,116,110,105,110,103,0,0,0,0,0,0,0,0,50,53,48,0,0,0,0,0,67,108,105,101,110,116,32,37,105,32,105,115,32,110,111,116,32,97,99,116,105,118,101,10,0,0,0,0,0,0,0,0,110,101,116,95,105,112,54,0,97,112,111,115,46,116,114,66,97,115,101,91,50,93,0,0,70,83,95,82,101,97,100,70,105,108,101,32,119,105,116,104,32,101,109,112,116,121,32,110,97,109,101,0,0,0,0,0,70,105,108,101,32,34,37,115,34,32,110,111,116,32,102,111,117,110,100,32,111,110,32,115,101,114,118,101,114,32,102,111,114,32,97,117,116,111,100,111,119,110,108,111,97,100,105,110,103,46,10,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,34,37,115,34,32,102,105,108,101,32,110,111,116,32,102,111,117,110,100,32,111,110,32,115,101,114,118,101,114,10,0,0,0,0,0,49,0,0,0,0,0,0,0,37,56,105,32,108,111,119,32,109,97,114,107,10,0,0,0,87,97,114,110,105,110,103,58,32,99,118,97,114,32,34,37,115,34,32,103,105,118,101,110,32,105,110,105,116,105,97,108,32,118,97,108,117,101,115,58,32,34,37,115,34,32,97,110,100,32,34,37,115,34,10,0,82,101,115,116,97,114,116,105,110,103,32,115,101,114,118,101,114,32,100,117,101,32,116,111,32,116,105,109,101,32,119,114,97,112,112,105,110,103,0,0,93,0,0,0,0,0,0,0,115,118,95,122,111,109,98,105,101,116,105,109,101,0,0,0,101,120,112,101,99,116,101,100,32,110,97,109,101,32,97,102,116,101,114,32,35,105,102,100,101,102,44,32,102,111,117,110,100,32,37,115,0,0,0,0,111,102,102,115,101,116,0,0,38,0,0,0,0,0,0,0,119,101,97,112,111,110,95,114,111,99,107,101,116,108,97,117,110,99,104,101,114,0,0,0,114,115,95,106,117,109,112,112,97,100,0,0,0,0,0,0,66,97,100,32,99,108,105,101,110,116,32,115,108,111,116,58,32,37,105,10,0,0,0,0,48,46,48,46,48,46,48,0,97,112,111,115,46,116,114,68,117,114,97,116,105,111,110,0,66,97,100,32,111,114,105,103,105,110,32,105,110,32,70,83,95,83,101,101,107,0,0,0,103,95,103,97,109,101,116,121,112,101,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,100,111,119,110,108,111,97,100,32,34,37,115,34,32,98,101,99,97,117,115,101,32,97,117,116,111,100,111,119,110,108,111,97,100,105,110,103,32,105,115,32,100,105,115,97,98,108,101,100,32,111,110,32,116,104,101,32,115,101,114,118,101,114,46,10,10,84,104,101,32,115,101,114,118,101,114,32,121,111,117,32,97,114,101,32,99,111,110,110,101,99,116,105,110,103,32,116,111,32,105,115,32,110,111,116,32,97,32,112,117,114,101,32,115,101,114,118,101,114,44,32,115,101,116,32,97,117,116,111,100,111,119,110,108,111,97,100,32,116,111,32,78,111,32,105,110,32,121,111,117,114,32,115,101,116,116,105,110,103,115,32,97,110,100,32,121,111,117,32,109,105,103,104,116,32,98,101,32,97,98,108,101,32,116,111,32,106,111,105,110,32,116,104,101,32,103,97,109,101,32,97,110,121,119,97,121,46,10,0,0,0,0,0,0,115,118,95,99,104,101,97,116,115,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,109,115,103,32,111,118,101,114,102,108,111,119,101,100,32,102,111,114,32,37,115,10,0,37,56,105,32,98,121,116,101,115,32,116,111,116,97,108,32,122,111,110,101,10,0,0,0,37,102,0,0,0,0,0,0,91,0,0,0,0,0,0,0,50,48,48,0,0,0,0,0,35,105,102,100,101,102,32,119,105,116,104,111,117,116,32,110,97,109,101,0,0,0,0,0,114,101,99,111,105,108,0,0,102,111,117,110,100,32,37,100,32,108,101,118,101,108,32,105,116,101,109,115,10,0,0,0,119,101,97,112,111,110,95,103,114,101,110,97,100,101,108,97,117,110,99,104,101,114,0,0,114,115,95,98,102,103,106,117,109,112,0,0,0,0,0,0,66,97,100,32,115,108,111,116,32,110,117,109,98,101,114,58,32,37,115,10,0,0,0,0,110,101,116,95,105,112,0,0,97,112,111,115,46,116,114,84,105,109,101,0,0,0,0,0,70,83,95,87,114,105,116,101,58,32,45,49,32,98,121,116,101,115,32,119,114,105,116,116,101,110,10,0,0,0,0,0,117,110,107,110,111,119,110,32,112,114,105,110,116,32,116,121,112,101,10,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,100,111,119,110,108,111,97,100,32,34,37,115,34,32,98,101,99,97,117,115,101,32,97,117,116,111,100,111,119,110,108,111,97,100,105,110,103,32,105,115,32,100,105,115,97,98,108,101,100,32,111,110,32,116,104,101,32,115,101,114,118,101,114,46,10,10,89,111,117,32,119,105,108,108,32,110,101,101,100,32,116,111,32,103,101,116,32,116,104,105,115,32,102,105,108,101,32,101,108,115,101,119,104,101,114,101,32,98,101,102,111,114,101,32,121,111,117,32,99,97,110,32,99,111,110,110,101,99,116,32,116,111,32,116,104,105,115,32,112,117,114,101,32,115,101,114,118,101,114,46,10,0,0,0,0,0,0,0,37,115,0,0,0,0,0,0,67,118,97,114,95,85,112,100,97,116,101,58,32,115,114,99,32,37,115,32,108,101,110,103,116,104,32,37,117,32,101,120,99,101,101,100,115,32,77,65,88,95,67,86,65,82,95,86,65,76,85,69,95,83,84,82,73,78,71,0,0,0,0,0,37,56,105,32,98,121,116,101,115,32,116,111,116,97,108,32,104,117,110,107,10,0,0,0,35,52,54,50,32,78,101,116,99,104,97,110,95,84,114,97,110,115,109,105,116,78,101,120,116,70,114,97,103,109,101,110,116,58,32,112,111,112,112,105,110,103,32,97,32,113,117,101,117,101,100,32,109,101,115,115,97,103,101,32,102,111,114,32,116,114,97,110,115,109,105,116,10,0,0,0,0,0,0,0,116,105,109,101,115,99,97,108,101,0,0,0,0,0,0,0,67,98,117,102,95,69,120,101,99,117,116,101,84,101,120,116,58,32,98,97,100,32,101,120,101,99,95,119,104,101,110,0,125,0,0,0,0,0,0,0,115,118,95,116,105,109,101,111,117,116,0,0,0,0,0,0,42,101,120,116,101,114,110,0,97,99,99,101,108,101,114,97,116,105,111,110,0,0,0,0,37,115,32,110,111,116,32,114,101,97,99,104,97,98,108,101,32,102,111,114,32,98,111,116,115,32,97,116,32,40,37,49,46,49,102,32,37,49,46,49,102,32,37,49,46,49,102,41,10,0,0,0,0,0,0,0,66,111,116,67,104,101,99,107,67,104,97,116,77,101,115,115,97,103,101,73,110,116,101,103,114,101,116,121,58,32,109,101,115,115,97,103,101,32,34,37,115,34,32,105,110,118,97,108,105,100,32,101,115,99,97,112,101,32,99,104,97,114,10,0,105,116,101,109,95,104,101,97,108,116,104,95,109,101,103,97,0,0,0,0,0,0,0,0,114,115,95,114,111,99,107,101,116,106,117,109,112,0,0,0,79,80,95,66,76,79,67,75,95,67,79,80,89,32,111,117,116,32,111,102,32,114,97,110,103,101,33,0,0,0,0,0,78,111,32,112,108,97,121,101,114,32,115,112,101,99,105,102,105,101,100,46,10,0,0,0,49,0,0,0,0,0,0,0,116,105,109,101,0,0,0,0,70,83,95,87,114,105,116,101,58,32,48,32,98,121,116,101,115,32,119,114,105,116,116,101,110,10,0,0,0,0,0,0,94,49,69,120,105,116,58,32,37,115,0,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,34,37,115,34,32,100,111,119,110,108,111,97,100,32,100,105,115,97,98,108,101,100,10,0,0,0,0,67,118,97,114,95,85,112,100,97,116,101,58,32,104,97,110,100,108,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,0,0,67,108,105,112,87,105,110,100,105,110,103,58,32,77,65,88,95,80,79,73,78,84,83,95,79,78,95,87,73,78,68,73,78,71,0,0,0,0,0,0,69,82,82,79,82,58,32,116,119,111,32,99,111,110,115,101,99,117,116,105,118,101,32,102,114,101,101,32,98,108,111,99,107,115,10,0,0,0,0,0,67,77,95,71,101,110,101,114,97,116,101,80,97,116,99,104,70,97,99,101,116,115,58,32,98,97,100,32,112,97,114,97,109,101,116,101,114,115,58,32,40,37,105,44,32,37,105,44,32,37,112,41,0,0,0,0,49,48,0,0,0,0,0,0,123,0,0,0,0,0,0,0,115,118,95,102,112,115,0,0,100,101,102,105,110,101,32,119,105,116,104,32,109,105,115,112,108,97,99,101,100,32,35,35,0,0,0,0,0,0,0,0,115,112,101,101,100,0,0,0,77,65,88,95,83,85,66,77,79,68,69,76,83,32,101,120,99,101,101,100,101,100,0,0,37,115,32,105,110,32,115,111,108,105,100,32,97,116,32,40,37,49,46,49,102,32,37,49,46,49,102,32,37,49,46,49,102,41,10,0,0,0,0,0,37,115,32,61,32,123,34,37,115,34,125,32,47,47,77,73,83,83,73,78,71,32,82,65,78,68,79,77,13,10,0,0,112,114,105,110,116,10,71,97,109,101,32,109,105,115,109,97,116,99,104,58,32,84,104,105,115,32,105,115,32,97,32,37,115,32,115,101,114,118,101,114,10,0,0,0,0,0,0,0,105,116,101,109,95,97,114,109,111,114,95,99,111,109,98,97,116,0,0,0,0,0,0,0,114,115,95,115,116,97,114,116,106,117,109,112,0,0,0,0,98,97,110,32,101,120,99,101,112,116,105,111,110,0,0,0,110,101,116,95,101,110,97,98,108,101,100,0,0,0,0,0,97,110,103,108,101,115,91,48,93,0,0,0,0,0,0,0,70,83,95,82,101,97,100,58,32,45,49,32,98,121,116,101,115,32,114,101,97,100,0,0,94,49,70,97,116,97,108,58,32,37,115,0,0,0,0,0,67,97,110,110,111,116,32,97,117,116,111,100,111,119,110,108,111,97,100,32,105,100,32,112,107,51,32,102,105,108,101,32,34,37,115,34,0,0,0,0,94,51,87,65,82,78,73,78,71,58,32,85,110,115,101,116,116,105,110,103,32,67,86,65,82,95,82,79,77,32,99,118,97,114,32,39,37,115,39,44,32,115,105,110,99,101,32,105,116,32,105,115,32,97,108,115,111,32,67,86,65,82,95,65,82,67,72,73,86,69,10,0,115,118,115,46,110,101,120,116,83,110,97,112,115,104,111,116,69,110,116,105,116,105,101,115,32,119,114,97,112,112,101,100,0,0,0,0,0,0,0,0,69,82,82,79,82,58,32,110,101,120,116,32,98,108,111,99,107,32,100,111,101,115,110,39,116,32,104,97,118,101,32,112,114,111,112,101,114,32,98,97,99,107,32,108,105,110,107,10,0,0,0,0,0,0,0,0,115,118,95,102,112,115,0,0,41,0,0,0,0,0,0,0,115,118,95,112,114,105,118,97,116,101,80,97,115,115,119,111,114,100,0,0,0,0,0,0,35,35,0,0,0,0,0,0,118,115,112,114,101,97,100,0,105,116,101,109,95,98,111,116,114,111,97,109,0,0,0,0,105,116,101,109,95,97,114,109,111,114,95,98,111,100,121,0,55,48,0,0,0,0,0,0,65,100,100,101,100,32,37,115,58,32,37,115,47,37,100,10,0,0,0,0,0,0,0,0,87,97,114,110,105,110,103,58,32,115,101,108,101,99,116,40,41,32,115,121,115,99,97,108,108,32,102,97,105,108,101,100,58,32,37,115,10,0,0,0,109,111,100,101,108,105,110,100,101,120,50,0,0,0,0,0,118,109,47,37,115,46,113,118,109,0,0,0,0,0,0,0,94,49,69,114,114,111,114,58,32,37,115,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,34,37,115,34,32,99,97,110,110,111,116,32,100,111,119,110,108,111,97,100,32,105,100,32,112,107,51,32,102,105,108,101,115,10,0,69,114,114,111,114,58,32,37,115,58,32,86,97,114,105,97,98,108,101,32,37,115,32,105,115,32,110,111,116,32,117,115,101,114,32,99,114,101,97,116,101,100,46,10,0,0,0,0,69,82,82,79,82,58,32,98,108,111,99,107,32,115,105,122,101,32,100,111,101,115,32,110,111,116,32,116,111,117,99,104,32,116,104,101,32,110,101,120,116,32,98,108,111,99,107,10,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,114,99,111,110,80,97,115,115,119,111,114,100,0,0,0,0,114,101,99,117,114,115,105,118,101,32,100,101,102,105,110,101,32,40,114,101,109,111,118,101,100,32,114,101,99,117,114,115,105,111,110,41,0,0,0,0,104,115,112,114,101,97,100,0,110,111,116,98,111,116,0,0,98,114,111,97,100,99,97,115,116,58,32,37,115,10,0,0,66,111,116,77,97,116,99,104,86,97,114,105,97,98,108,101,58,32,118,97,114,105,97,98,108,101,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,0,0,97,114,101,97,32,37,100,32,99,101,110,116,101,114,32,37,102,32,37,102,32,37,102,32,105,110,32,115,111,108,105,100,63,13,10,0,0,0,0,0,114,115,95,115,116,97,114,116,119,97,108,107,111,102,102,108,101,100,103,101,0,0,0,0,69,114,114,111,114,58,32,37,115,32,37,115,47,37,100,32,115,117,112,101,114,115,101,100,101,115,32,97,108,114,101,97,100,121,32,101,120,105,115,116,105,110,103,32,37,115,32,37,115,47,37,100,10,0,0,0,110,101,116,95,114,101,115,116,97,114,116,0,0,0,0,0,111,114,105,103,105,110,50,91,49,93,0,0,0,0,0,0,37,115,46,106,115,0,0,0,94,51,87,97,114,110,105,110,103,58,32,37,115,0,0,0,85,115,97,103,101,58,32,37,115,32,60,118,97,114,110,97,109,101,62,10,0,0,0,0,70,105,108,101,32,34,37,115,34,32,105,115,32,110,111,116,32,114,101,102,101,114,101,110,99,101,100,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,100,111,119,110,108,111,97,100,101,100,46,0,0,0,105,110,118,97,108,105,100,32,98,108,111,99,107,32,116,121,112,101,0,0,0,0,0,0,105,110,95,114,101,115,116,97,114,116,0,0,0,0,0,0,98,108,111,99,107,58,37,112,32,32,32,32,115,105,122,101,58,37,55,105,32,32,32,32,116,97,103,58,37,51,105,10,0,0,0,0,0,0,0,0,117,110,101,120,112,101,99,116,101,100,32,102,108,111,97,116,0,0,0,0,0,0,0,0,38,38,0,0,0,0,0,0,100,101,102,105,110,101,32,37,115,32,109,105,115,115,105,110,103,32,112,97,114,109,115,0,119,98,0,0,0,0,0,0,115,118,95,107,105,108,108,115,101,114,118,101,114,0,0,0,104,111,109,101,100,105,114,0,98,97,108,97,110,99,101,0,63,0,0,0,0,0,0,0,115,118,95,114,101,102,101,114,101,110,99,101,100,80,97,107,78,97,109,101,115,0,0,0,100,101,102,105,110,101,32,110,111,116,32,116,101,114,109,105,110,97,116,101,100,0,0,0,51,50,0,0,0,0,0,0,110,117,109,112,114,111,106,101,99,116,105,108,101,115,0,0,110,111,116,115,105,110,103,108,101,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,105,110,116,101,103,101,114,44,32,102,111,117,110,100,32,37,115,0,0,0,0,0,0,109,111,100,101,108,0,0,0,83,86,95,83,101,116,85,115,101,114,105,110,102,111,58,32,98,97,100,32,105,110,100,101,120,32,37,105,0,0,0,0,102,111,117,110,100,32,97,32,116,114,105,103,103,101,114,95,112,117,115,104,32,119,105,116,104,32,118,101,108,111,99,105,116,121,32,37,102,32,37,102,32,37,102,10,0,0,0,0,53,48,48,0,0,0,0,0,32,32,32,32,100,97,116,97,32,108,101,110,103,116,104,32,58,32,37,55,105,10,0,0,66,97,110,0,0,0,0,0,87,65,82,78,73,78,71,58,32,67,111,117,108,100,110,39,116,32,98,105,110,100,32,116,111,32,97,32,118,52,32,105,112,32,97,100,100,114,101,115,115,46,10,0,0,0,0,0,105,110,100,101,120,0,0,0,111,114,105,103,105,110,50,91,48,93,0,0,0,0,0,0,70,83,95,70,79,112,101,110,70,105,108,101,82,101,97,100,58,32,37,115,32,40,102,111,117,110,100,32,105,110,32,39,37,115,37,99,37,115,39,41,10,0,0,0,0,0,0,0,101,109,112,116,121,32,99,111,110,115,111,108,101,32,109,101,115,115,97,103,101,32,104,101,97,112,10,0,0,0,0,0,37,115,0,0,0,0,0,0,123,10,0,0,0,0,0,0,83,86,95,71,101,116,83,101,114,118,101,114,105,110,102,111,58,32,98,117,102,102,101,114,83,105,122,101,32,61,61,32,37,105,0,0,0,0,0,0,65,65,83,95,80,111,105,110,116,65,114,101,97,78,117,109,58,32,97,97,115,32,110,111,116,32,108,111,97,100,101,100,10,0,0,0,0,0,0,0,97,114,101,97,32,37,100,32,104,97,115,32,109,111,114,101,32,116,104,97,110,32,49,50,56,32,114,101,97,99,104,97,98,105,108,105,116,105,101,115,10,0,0,0,0,0,0,0,37,105,32,99,118,97,114,32,105,110,100,101,120,101,115,10,0,0,0,0,0,0,0,0,99,108,105,101,110,116,68,111,119,110,108,111,97,100,58,32,37,100,32,58,32,34,37,115,34,32,105,115,32,110,111,116,32,114,101,102,101,114,101,110,99,101,100,32,97,110,100,32,99,97,110,110,111,116,32,98,101,32,100,111,119,110,108,111,97,100,101,100,46,10,0,0,116,97,114,103,101,116,110,97,109,101,0,0,0,0,0,0,112,104,121,115,95,103,114,97,118,105,116,121,0,0,0,0,48,0,0,0,0,0,0,0,37,115,32,105,115,32,110,111,116,32,97,110,32,65,65,83,32,102,105,108,101,10,0,0,65,65,83,95,69,110,116,105,116,121,77,111,100,101,108,105,110,100,101,120,58,32,101,110,116,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,99,108,117,115,116,101,114,32,37,100,32,116,111,117,99,104,101,100,32,99,108,117,115,116,101,114,32,37,100,32,97,116,32,97,114,101,97,32,37,100,10,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,37,115,0,0,0,0,0,0,86,77,32,112,114,111,103,114,97,109,32,99,111,117,110,116,101,114,32,111,117,116,32,111,102,32,114,97,110,103,101,32,105,110,32,79,80,95,67,65,76,76,0,0,0,0,0,0,118,109,112,114,111,102,105,108,101,0,0,0,0,0,0,0,83,101,114,118,101,114,32,119,97,115,32,107,105,108,108,101,100,0,0,0,0,0,0,0,91,37,115,93,58,37,104,117,0,0,0,0,0,0,0,0,37,105,0,0,0,0,0,0,58,0,0,0,0,0,0,0,115,118,95,114,101,102,101,114,101,110,99,101,100,80,97,107,115,0,0,0,0,0,0,0,100,101,102,105,110,101,32,112,97,114,97,109,101,116,101,114,115,32,110,111,116,32,116,101,114,109,105,110,97,116,101,100,0,0,0,0,0,0,0,0,112,114,111,106,101,99,116,105,108,101,0,0,0,0,0,0,110,111,116,116,101,97,109,0,105,110,118,97,108,105,100,32,116,111,107,101,110,32,37,115,0,0,0,0,0,0,0,0,102,117,110,99,98,111,98,32,114,101,97,99,104,32,102,114,111,109,32,97,114,101,97,32,37,100,32,116,111,32,37,100,10,0,0,0,0,0,0,0,114,115,95,115,116,97,114,116,103,114,97,112,112,108,101,0,32,32,32,32,116,97,98,108,101,32,108,101,110,103,116,104,58,32,37,55,105,10,0,0,110,101,116,95,112,111,114,116,0,0,0,0,0,0,0,0,69,120,99,101,112,116,105,111,110,0,0,0,0,0,0,0,111,114,105,103,105,110,50,91,50,93,0,0,0,0,0,0,46,100,97,116,0,0,0,0,107,105,99,107,110,117,109,0,83,86,95,66,111,116,95,72,117,110,107,65,108,108,111,99,58,32,65,108,108,111,99,32,119,105,116,104,32,109,97,114,107,115,32,97,108,114,101,97,100,121,32,115,101,116,0,0,10,37,105,32,116,111,116,97,108,32,99,118,97,114,115,10,0,0,0,0,0,0,0,0,98,97,115,101,113,51,0,0,83,86,95,80,97,99,107,101,116,69,118,101,110,116,58,32,102,105,120,105,110,103,32,117,112,32,97,32,116,114,97,110,115,108,97,116,101,100,32,112,111,114,116,10,0,0,0,0,59,0,0,0,0,0,0,0,115,118,95,112,97,107,78,97,109,101,115,0,0,0,0,0,116,119,111,32,116,104,101,32,115,97,109,101,32,100,101,102,105,110,101,32,112,97,114,97,109,101,116,101,114,115,0,0,119,101,97,112,111,110,105,110,100,101,120,0,0,0,0,0,110,111,116,102,114,101,101,0,110,111,116,32,97,108,108,111,119,101,100,32,116,111,32,104,97,118,101,32,97,100,106,97,99,101,110,116,32,118,97,114,105,97,98,108,101,115,0,0,102,117,110,99,98,111,98,32,109,111,100,101,108,32,37,100,44,32,115,116,97,114,116,32,61,32,123,37,49,46,49,102,44,32,37,49,46,49,102,44,32,37,49,46,49,102,125,32,101,110,100,32,61,32,123,37,49,46,49,102,44,32,37,49,46,49,102,44,32,37,49,46,49,102,125,10,0,0,0,0,51,48,48,0,0,0,0,0,32,32,32,32,99,111,100,101,32,108,101,110,103,116,104,32,58,32,37,55,105,10,0,0,87,65,82,78,73,78,71,58,32,67,111,117,108,100,110,39,116,32,98,105,110,100,32,116,111,32,97,32,118,54,32,105,112,32,97,100,100,114,101,115,115,46,10,0,0,0,0,0,69,114,114,111,114,58,32,37,115,32,37,115,47,37,100,32,115,117,112,101,114,115,101,100,101,115,32,37,115,32,37,115,47,37,100,10,0,0,0,0,103,101,110,101,114,105,99,49,0,0,0,0,0,0,0,0,46,103,97,109,101,0,0,0,98,111,116,95,105,110,116,101,114,98,114,101,101,100,119,114,105,116,101,0,0,0,0,0,98,111,116,95,103,114,111,117,110,100,111,110,108,121,0,0,32,37,115,32,34,37,115,34,10,0,0,0,0,0,0,0,112,107,51,0,0,0,0,0,47,37,115,47,37,115,0,0,105,110,102,111,82,101,115,112,111,110,115,101,10,37,115,0,44,0,0,0,0,0,0,0,115,118,95,112,97,107,115,0,105,110,118,97,108,105,100,32,100,101,102,105,110,101,32,112,97,114,97,109,101,116,101,114,0,0,0,0,0,0,0,0,108,101,118,101,108,0,0,0,105,116,101,109,32,37,115,32,114,101,97,99,104,97,98,108,101,32,102,114,111,109,32,106,117,109,112,112,97,100,32,97,114,101,97,32,37,100,13,10,0,0,0,0,0,0,0,0,99,97,110,39,116,32,104,97,118,101,32,109,111,114,101,32,116,104,97,110,32,37,100,32,109,97,116,99,104,32,118,97,114,105,97,98,108,101,115,0,115,112,97,119,110,102,108,97,103,115,0,0,0,0,0,0,114,115,95,115,116,97,114,116,99,114,111,117,99,104,0,0,105,110,116,101,114,112,114,101,116,101,100,10,0,0,0,0,110,101,116,95,112,111,114,116,54,0,0,0,0,0,0,0,69,114,114,111,114,58,32,67,97,110,32,98,97,110,32,112,108,97,121,101,114,115,32,99,111,110,110,101,99,116,101,100,32,118,105,97,32,116,104,101,32,105,110,116,101,114,110,101,116,32,111,110,108,121,46,10,0,0,0,0,0,0,0,0,108,111,111,112,83,111,117,110,100,0,0,0,0,0,0,0,70,83,95,70,79,112,101,110,70,105,108,101,82,101,97,100,58,32,37,115,32,40,102,111,117,110,100,32,105,110,32,39,37,115,39,41,10,0,0,0,50,48,0,0,0,0,0,0,63,0,0,0,0,0,0,0,37,115,0,0,0,0,0,0,66,65,68,78,65,77,69,0,103,97,109,101,0,0,0,0,46,0,0,0,0,0,0,0,115,118,95,112,117,114,101,0,101,120,112,101,99,116,101,100,32,100,101,102,105,110,101,32,112,97,114,97,109,101,116,101,114,0,0,0,0,0,0,0,110,117,109,98,101,114,0,0,105,116,101,109,32,37,115,32,119,105,116,104,111,117,116,32,111,114,105,103,105,110,10,0,102,117,110,99,95,98,111,98,98,105,110,103,32,119,105,116,104,32,105,110,118,97,108,105,100,32,109,111,100,101,108,32,110,117,109,98,101,114,10,0,114,115,95,98,97,114,114,105,101,114,106,117,109,112,0,0,99,111,109,112,105,108,101,100,32,111,110,32,108,111,97,100,10,0,0,0,0,0,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,114,101,108,97,121,32,97,100,100,114,101,115,115,32,105,115,32,110,111,116,32,73,80,86,52,58,32,37,105,10,0,0,0,69,114,114,111,114,58,32,80,108,97,121,101,114,110,117,109,32,37,115,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,10,0,0,0,0,111,116,104,101,114,69,110,116,105,116,121,78,117,109,50,0,67,111,117,108,100,110,39,116,32,111,112,101,110,32,37,115,0,0,0,0,0,0,0,0,98,111,116,95,105,110,116,101,114,98,114,101,101,100,99,121,99,108,101,0,0,0,0,0,67,0,0,0,0,0,0,0,71,111,105,110,103,32,102,114,111,109,32,67,83,95,80,82,73,77,69,68,32,116,111,32,67,83,95,65,67,84,73,86,69,32,102,111,114,32,37,115,10,0,0,0,0,0,0,0,102,115,95,103,97,109,101,0,60,0,0,0,0,0,0,0,115,118,95,115,101,114,118,101,114,105,100,0,0,0,0,0,114,101,100,101,102,105,110,105,116,105,111,110,32,111,102,32,37,115,0,0,0,0,0,0,98,111,117,110,99,101,115,116,111,112,0,0,0,0,0,0,101,110,116,105,116,121,32,37,115,32,117,110,107,110,111,119,110,32,105,116,101,109,13,10,0,0,0,0,0,0,0,0,102,117,110,99,95,98,111,98,98,105,110,103,32,119,105,116,104,111,117,116,32,109,111,100,101,108,10,0,0,0,0,0,53,48,0,0,0,0,0,0,110,97,116,105,118,101,10,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,114,101,113,117,101,115,116,32,100,101,110,105,101,100,58,32,37,105,10,0,0,0,0,0,0,69,114,114,111,114,58,32,77,97,120,105,109,117,109,32,110,117,109,98,101,114,32,111,102,32,98,97,110,115,47,101,120,99,101,112,116,105,111,110,115,32,101,120,99,101,101,100,101,100,46,10,0,0,0,0,0,109,111,100,101,108,105,110,100,101,120,0,0,0,0,0,0,117,105,46,113,118,109,0,0,49,48,0,0,0,0,0,0,108,111,103,102,105,108,101,0,76,0,0,0,0,0,0,0,71,111,105,110,103,32,116,111,32,67,83,95,90,79,77,66,73,69,32,102,111,114,32,37,115,10,0,0,0,0,0,0,109,97,120,80,105,110,103,0,67,98,117,102,95,69,120,101,99,117,116,101,84,101,120,116,58,32,69,88,69,67,95,78,79,87,32,99,97,108,108,101,100,32,97,110,32,97,115,121,110,99,32,104,97,110,100,108,101,114,0,0,0,0,0,0,62,0,0,0,0,0,0,0,115,118,95,99,104,101,97,116,115,0,0,0,0,0,0,0,99,97,110,39,116,32,114,101,100,101,102,105,110,101,32,37,115,0,0,0,0,0,0,0,98,111,117,110,99,101,102,114,105,99,0,0,0,0,0,0,115,112,97,119,110,102,108,97,103,115,0,0,0,0,0,0,124,0,0,0,0,0,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,105,115,32,110,111,116,32,97,32,115,116,114,105,110,103,10,0,0,0,0,0,0,102,117,110,99,95,98,111,98,98,105,110,103,0,0,0,0,114,115,95,116,101,108,101,112,111,114,116,0,0,0,0,0,37,115,32,58,32,0,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,102,97,105,108,101,100,10,0,0,0,85,115,97,103,101,58,32,37,115,32,40,105,112,91,47,115,117,98,110,101,116,93,32,124,32,99,108,105,101,110,116,110,117,109,32,91,115,117,98,110,101,116,93,41,10,0,0,0,112,111,119,101,114,117,112,115,0,0,0,0,0,0,0,0,99,103,97,109,101,46,113,118,109,0,0,0,0,0,0,0,97,114,101,97,32,62,61,32,99,109,46,110,117,109,65,114,101,97,115,0,0,0,0,0,98,111,116,95,105,110,116,101,114,98,114,101,101,100,98,111,116,115,0,0,0,0,0,0,65,0,0,0,0,0,0,0,67,108,105,112,87,105,110,100,105,110,103,58,32,112,111,105,110,116,115,32,101,120,99,101,101,100,101,100,32,101,115,116,105,109,97,116,101,0,0,0,87,65,82,78,73,78,71,58,32,67,77,95,65,100,100,70,97,99,101,116,66,101,118,101,108,115,46,46,46,32,105,110,118,97,108,105,100,32,98,101,118,101,108,10,0,0,0,0,109,105,110,80,105,110,103,0,33,0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,110,97,109,101,32,97,102,116,101,114,32,35,100,101,102,105,110,101,44,32,102,111,117,110,100,32,37,115,0,0,0,98,111,117,110,99,101,0,0,103,114,97,112,112,108,101,111,102,102,0,0,0,0,0,0,105,116,101,109,32,37,115,32,104,97,115,32,109,111,100,101,108,105,110,100,101,120,32,48,0,0,0,0,0,0,0,0,77,97,112,32,119,105,116,104,32,110,111,32,109,111,100,101,108,115,0,0,0,0,0,0,99,97,110,110,111,116,32,98,111,117,110,100,32,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,98,101,116,119,101,101,110,32,37,100,32,97,110,100,32,37,100,10,0,0,0,0,0,0,0,104,101,105,103,104,116,0,0,114,115,95,119,97,116,101,114,106,117,109,112,0,0,0,0,82,101,103,105,115,116,101,114,101,100,32,118,105,114,116,117,97,108,32,109,97,99,104,105,110,101,115,58,10,0,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,114,101,113,117,101,115,116,32,100,101,110,105,101,100,10,0,0,69,114,114,111,114,58,32,73,110,118,97,108,105,100,32,98,97,110,32,110,117,109,98,101,114,32,103,105,118,101,110,10,0,0,0,0,0,0,0,0,115,111,108,105,100,0,0,0,108,101,118,101,108,115,104,111,116,115,0,0,0,0,0,0,83,86,95,71,101,116,67,104,97,108,108,101,110,103,101,58,32,114,97,116,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,83,86,95,65,114,101,97,69,110,116,105,116,105,101,115,58,32,77,65,88,67,79,85,78,84,10,0,0,0,0,0,0,73,0,0,0,0,0,0,0,83,86,95,83,118,69,110,116,105,116,121,70,111,114,71,101,110,116,105,116,121,58,32,98,97,100,32,103,69,110,116,0,100,105,115,99,111,110,110,101,99,116,32,34,37,115,34,0,35,52,54,50,32,83,86,95,78,101,116,99,104,97,110,95,84,114,97,110,115,109,105,116,58,32,117,110,115,101,110,116,32,102,114,97,103,109,101,110,116,115,44,32,115,116,97,99,107,101,100,10,0,0,0,0,37,100,0,0,0,0,0,0,126,0,0,0,0,0,0,0,115,118,95,102,108,111,111,100,80,114,111,116,101,99,116,0,35,100,101,102,105,110,101,32,119,105,116,104,111,117,116,32,110,97,109,101,0,0,0,0,100,101,116,111,110,97,116,105,111,110,0,0,0,0,0,0,99,109,100,95,103,114,97,112,112,108,101,111,102,102,0,0,37,100,32,99,97,109,112,32,115,112,111,116,115,10,0,0,61,0,0,0,0,0,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,105,115,32,110,111,116,32,97,110,32,105,110,116,101,103,101,114,10,0,0,0,0,108,105,112,0,0,0,0,0,54,48,0,0,0,0,0,0,32,32,32,32,37,57,46,48,102,32,116,111,116,97,108,10,0,0,0,0,0,0,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,98,97,100,32,114,101,115,112,111,110,115,101,10,0,0,0,0,98,97,110,0,0,0,0,0,111,114,105,103,105,110,91,50,93,0,0,0,0,0,0,0,118,109,47,113,97,103,97,109,101,46,113,118,109,0,0,0,98,111,116,95,105,110,116,101,114,98,114,101,101,100,99,104,97,114,0,0,0,0,0,0,82,0,0,0,0,0,0,0,112,114,105,110,116,32,34,37,115,94,55,32,37,115,10,34,0,0,0,0,0,0,0,0,109,97,105,110,0,0,0,0,103,95,110,101,101,100,112,97,115,115,0,0,0,0,0,0,105,111,113,51,95,115,101,114,118,101,114,46,112,105,100,0,94,0,0,0,0,0,0,0,115,118,95,109,97,120,80,105,110,103,0,0,0,0,0,0,99,97,110,39,116,32,117,110,100,101,102,32,37,115,0,0,112,117,115,104,0,0,0,0,103,114,97,112,112,108,101,111,110,0,0,0,0,0,0,0,37,100,32,109,97,112,32,108,111,99,97,116,105,111,110,115,10,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,114,97,110,100,111,109,32,37,115,0,0,0,0,0,0,0,99,97,110,110,111,116,32,98,111,117,110,100,32,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,98,101,116,119,101,101,110,32,37,102,32,97,110,100,32,37,102,10,0,0,0,0,0,0,0,112,114,105,110,116,0,0,0,102,117,110,99,95,112,108,97,116,32,119,105,116,104,32,105,110,118,97,108,105,100,32,109,111,100,101,108,32,110,117,109,98,101,114,10,0,0,0,0,112,104,121,115,95,102,97,108,108,100,101,108,116,97,49,48,0,0,0,0,0,0,0,0,37,50,105,37,37,32,37,57,105,32,37,115,10,0,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,114,101,99,118,58,32,37,115,10,0,0,0,0,0,0,0,0,101,120,99,101,112,116,105,111,110,0,0,0,0,0,0,0,111,114,105,103,105,110,91,49,93,0,0,0,0,0,0,0,46,109,101,110,117,0,0,0,98,111,116,95,109,105,110,112,108,97,121,101,114,115,0,0,85,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,119,105,110,100,111,119,32,115,105,122,101,0,0,0,0,0,71,111,105,110,103,32,102,114,111,109,32,67,83,95,70,82,69,69,32,116,111,32,67,83,95,67,79,78,78,69,67,84,69,68,32,102,111,114,32,37,115,10,0,0,0,0,0,0,94,51,67,111,117,108,100,110,39,116,32,119,114,105,116,101,32,37,115,46,10,0,0,0,115,109,97,108,108,0,0,0,101,120,112,101,99,116,101,100,32,110,117,109,98,101,114,44,32,102,111,117,110,100,32,37,115,0,0,0,0,0,0,0,35,35,0,0,0,0,0,0,109,105,115,115,105,110,103,32,35,101,110,100,105,102,0,0,108,111,103,32,102,105,108,101,32,37,115,32,105,115,32,97,108,114,101,97,100,121,32,111,112,101,110,101,100,10,0,0,112,117,114,101,0,0,0,0,98,111,116,95,100,101,118,101,108,111,112,101,114,0,0,0,105,110,118,97,108,105,100,32,114,101,116,117,114,110,32,118,97,108,117,101,32,37,115,0,37,115,47,37,115,0,0,0,124,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,110,97,109,101,44,32,102,111,117,110,100,32,37,115,0,115,118,95,109,105,110,80,105,110,103,0,0,0,0,0,0,109,97,120,95,119,101,97,112,111,110,105,110,102,111,0,0,104,101,97,108,116,104,105,110,99,0,0,0,0,0,0,0,99,109,100,95,103,114,97,112,112,108,101,111,110,0,0,0,99,97,109,112,32,115,112,111,116,32,97,116,32,37,49,46,49,102,32,37,49,46,49,102,32,37,49,46,49,102,32,105,110,32,115,111,108,105,100,10,0,0,0,0,0,0,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,105,115,32,110,111,116,32,97,32,102,108,111,97,116,10,0,0,0,0,0,0,0,99,108,97,115,115,110,97,109,101,0,0,0,0,0,0,0,102,117,110,99,95,112,108,97,116,32,119,105,116,104,111,117,116,32,109,111,100,101,108,10,0,0,0,0,0,0,0,0,83,86,95,71,101,116,67,111,110,102,105,103,115,116,114,105,110,103,58,32,98,97,100,32,105,110,100,101,120,32,37,105,0,0,0,0,0,0,0,0,52,48,0,0,0,0,0,0,86,77,95,67,97,108,108,40,32,37,100,32,41,10,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,115,101,110,100,58,32,37,115,10,0,0,0,0,0,0,0,0,116,121,112,101,0,0,0,0,68,101,108,101,116,105,110,103,32,37,115,32,37,115,47,37,100,10,0,0,0,0,0,0,111,114,105,103,105,110,91,48,93,0,0,0,0,0,0,0,46,97,114,101,110,97,0,0,49,48,50,52,0,0,0,0,98,111,116,95,99,104,97,108,108,101,110,103,101,0,0,0,115,107,105,108,108,32,37,46,49,102,10,0,0,0,0,0,83,86,95,83,101,116,66,114,117,115,104,77,111,100,101,108,58,32,37,115,32,105,115,110,39,116,32,97,32,98,114,117,115,104,32,109,111,100,101,108,0,0,0,0,0,0,0,0,101,109,112,116,121,32,97,97,115,32,108,105,110,107,32,104,101,97,112,10,0,0,0,0,65,65,83,95,69,110,97,98,108,101,82,111,117,116,105,110,103,65,114,101,97,58,32,97,114,101,97,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,115,0,0,0,0,0,0,0,116,97,114,103,101,116,0,0,99,111,110,110,101,99,116,82,101,115,112,111,110,115,101,32,37,100,0,0,0,0,0,0,49,48,48,0,0,0,0,0,97,97,115,111,112,116,105,109,105,122,101,0,0,0,0,0,99,97,110,39,116,32,111,112,101,110,32,37,115,10,0,0,90,95,77,97,108,108,111,99,58,32,102,97,105,108,101,100,32,111,110,32,97,108,108,111,99,97,116,105,111,110,32,111,102,32,37,105,32,98,121,116,101,115,32,102,114,111,109,32,116,104,101,32,37,115,32,122,111,110,101,0,0,0,0,0,61,61,61,61,61,32,112,101,110,100,105,110,103,32,115,101], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+30720);
|
|
/* memory initializer */ allocate([114,118,101,114,32,99,111,109,109,97,110,100,115,32,61,61,61,61,61,10,0,0,0,0,65,65,83,95,70,108,111,111,100,67,108,117,115,116,101,114,65,114,101,97,115,95,114,58,32,97,114,101,97,110,117,109,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,123,0,0,0,0,0,0,0,86,77,95,80,114,101,112,97,114,101,73,110,116,101,114,112,114,101,116,101,114,58,32,74,117,109,112,32,116,111,32,105,110,118,97,108,105,100,32,105,110,115,116,114,117,99,116,105,111,110,32,110,117,109,98,101,114,0,0,0,0,0,0,0,118,109,95,117,105,0,0,0,37,115,58,37,104,117,0,0,103,97,109,101,116,121,112,101,0,0,0,0,0,0,0,0,110,101,116,95,113,112,111,114,116,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,117,110,100,101,102,32,119,105,116,104,111,117,116,32,110,97,109,101,0,0,0,0,0,0,49,48,48,0,0,0,0,0,100,97,109,97,103,101,116,121,112,101,0,0,0,0,0,0,48,0,0,0,0,0,0,0,114,97,110,100,111,109,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,105,115,32,110,111,116,32,105,110,105,116,105,97,108,105,122,101,100,10,0,0,0,102,117,110,99,95,112,108,97,116,0,0,0,0,0,0,0,112,104,121,115,95,102,97,108,108,100,101,108,116,97,53,0,99,97,110,39,116,32,114,101,97,100,32,37,100,32,98,105,116,115,0,0,0,0,0,0,86,77,95,67,97,108,108,32,119,105,116,104,32,78,85,76,76,32,118,109,0,0,0,0,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,99,111,110,110,101,99,116,58,32,37,115,10,0,0,0,0,0,69,114,114,111,114,58,32,73,110,118,97,108,105,100,32,97,100,100,114,101,115,115,32,37,115,10,0,0,0,0,0,0,97,112,111,115,46,116,114,84,121,112,101,0,0,0,0,0,46,98,111,116,0,0,0,0,107,105,99,107,97,108,108,0,98,111,116,95,114,111,99,107,101,116,106,117,109,112,0,0,32,0,0,0,0,0,0,0,71,97,109,101,32,114,101,106,101,99,116,101,100,32,97,32,99,111,110,110,101,99,116,105,111,110,58,32,37,115,46,10,0,0,0,0,0,0,0,0,90,95,84,97,103,77,97,108,108,111,99,58,32,116,114,105,101,100,32,116,111,32,117,115,101,32,97,32,48,32,116,97,103,0,0,0,0,0,0,0,115,118,95,109,97,120,99,108,105,101,110,116,115,0,0,0,34,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,92,0,0,0,0,0,0,0,115,118,95,100,108,82,97,116,101,0,0,0,0,0,0,0,118,105,115,100,97,109,97,103,101,0,0,0,0,0,0,0,111,102,102,104,97,110,100,103,114,97,112,112,108,101,0,0,119,97,105,116,0,0,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,10,0,0,0,0,0,0,0,116,114,105,103,103,101,114,95,109,117,108,116,105,112,108,101,32,110,111,116,32,105,110,32,97,110,121,32,97,114,101,97,10,0,0,0,0,0,0,0,50,55,48,0,0,0,0,0,102,111,114,99,101,102,117,108,108,121,32,117,110,108,111,97,100,105,110,103,32,37,115,32,118,109,10,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,103,101,116,104,111,115,116,98,121,110,97,109,101,58,32,97,100,100,114,101,115,115,32,116,121,112,101,32,119,97,115,32,110,111,116,32,65,70,95,73,78,69,84,10,0,0,0,0,85,115,97,103,101,58,32,37,115,32,40,105,112,91,47,115,117,98,110,101,116,93,32,124,32,110,117,109,41,10,0,0,112,111,115,46,116,114,68,117,114,97,116,105,111,110,0,0,46,99,111,110,102,105,103,0,98,111,116,95,103,114,97,112,112,108,101,0,0,0,0,0,98,111,116,95,114,101,97,99,104,97,98,105,108,105,116,121,0,0,0,0,0,0,0,0,83,0,0,0,0,0,0,0,46,112,107,51,0,0,0,0,112,114,105,110,116,10,37,115,10,0,0,0,0,0,0,0,90,95,70,114,101,101,58,32,109,101,109,111,114,121,32,98,108,111,99,107,32,119,114,111,116,101,32,112,97,115,116,32,101,110,100,0,0,0,0,0,103,95,104,117,109,97,110,112,108,97,121,101,114,115,0,0,47,98,97,115,101,0,0,0,45,0,0,0,0,0,0,0,102,105,108,101,32,37,115,32,110,111,116,32,102,111,117,110,100,0,0,0,0,0,0,0,115,118,95,109,97,120,82,97,116,101,0,0,0,0,0,0,99,97,110,110,111,116,32,105,110,116,101,114,98,114,101,101,100,32,119,101,105,103,104,116,32,99,111,110,102,105,103,115,44,32,117,110,101,113,117,97,108,32,110,117,109,119,101,105,103,104,116,115,10,0,0,0,114,97,100,105,117,115,0,0,51,0,0,0,0,0,0,0,119,101,105,103,104,116,0,0,59,0,0,0,0,0,0,0,99,111,117,108,100,110,39,116,32,108,111,97,100,32,97,110,121,32,115,107,105,108,108,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,116,101,108,101,112,111,114,116,101,100,32,105,110,116,111,32,115,108,105,109,101,32,111,114,32,108,97,118,97,32,97,116,32,100,101,115,116,32,37,115,10,0,0,0,0,0,0,0,112,104,121,115,95,106,117,109,112,118,101,108,0,0,0,0,86,77,95,70,114,101,101,40,37,115,41,32,111,110,32,114,117,110,110,105,110,103,32,118,109,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,103,101,116,104,111,115,116,98,121,110,97,109,101,58,32,37,115,10,0,0,0,0,0,0,37,100,32,37,115,32,37,100,10,0,0,0,0,0,0,0,97,110,103,108,101,115,91,49,93,0,0,0,0,0,0,0,46,99,102,103,0,0,0,0,98,111,116,95,114,101,112,111,114,116,0,0,0,0,0,0,115,101,116,97,32,37,115,32,34,37,115,34,10,0,0,0,82,101,106,101,99,116,101,100,32,97,32,99,111,110,110,101,99,116,105,111,110,46,10,0,90,95,70,114,101,101,58,32,102,114,101,101,100,32,97,32,102,114,101,101,100,32,112,111,105,110,116,101,114,0,0,0,116,116,121,32,99,111,110,115,111,108,101,32,109,111,100,101,32,100,105,115,97,98,108,101,100,10,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,118,97,114,32,110,97,109,101,32,115,116,114,105,110,103,58,32,37,115,10,0,0,0,99,108,105,101,110,116,115,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,116,111,111,32,102,97,114,32,98,97,99,107,0,0,0,82,101,99,101,105,118,101,100,32,115,105,103,110,97,108,32,37,100,0,0,0,0,0,0,43,0,0,0,0,0,0,0,35,105,110,99,108,117,100,101,32,119,105,116,104,111,117,116,32,102,105,108,101,32,110,97,109,101,32,98,101,116,119,101,101,110,32,60,32,62,0,0,115,118,95,109,105,110,82,97,116,101,0,0,0,0,0,0,99,97,110,110,111,116,32,105,110,116,101,114,98,114,101,101,100,32,119,101,105,103,104,116,32,99,111,110,102,105,103,115,44,32,117,110,101,113,117,97,108,32,110,101,120,116,10,0,100,97,109,97,103,101,0,0,101,110,116,105,116,121,116,121,112,101,109,105,115,115,105,108,101,0,0,0,0,0,0,0,114,97,110,103,101,0,0,0,117,110,107,110,111,119,110,32,109,101,115,115,97,103,101,32,99,111,109,112,111,110,101,110,116,32,37,115,0,0,0,0,108,111,97,100,101,100,32,100,101,102,97,117,108,116,32,115,107,105,108,108,32,37,102,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,97,110,103,108,101,0,0,0,51,51,0,0,0,0,0,0,37,115,32,108,111,97,100,101,100,32,105,110,32,37,100,32,98,121,116,101,115,32,111,110,32,116,104,101,32,104,117,110,107,10,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,79,112,101,110,83,111,99,107,115,58,32,115,111,99,107,101,116,58,32,37,115,10,0,0,0,0,0,37,115,47,37,115,0,0,0,99,108,105,101,110,116,78,117,109,0,0,0,0,0,0,0,46,116,120,116,0,0,0,0,98,111,116,95,112,97,117,115,101,0,0,0,0,0,0,0,94,51,87,65,82,78,73,78,71,58,32,118,97,108,117,101,32,111,102,32,118,97,114,105,97,98,108,101,32,34,37,115,34,32,116,111,111,32,108,111,110,103,32,116,111,32,119,114,105,116,101,32,116,111,32,102,105,108,101,10,0,0,0,0,112,114,105,110,116,10,83,101,114,118,101,114,32,105,115,32,102,117,108,108,46,10,0,0,114,0,0,0,0,0,0,0,90,95,70,114,101,101,58,32,102,114,101,101,100,32,97,32,112,111,105,110,116,101,114,32,119,105,116,104,111,117,116,32,90,79,78,69,73,68,0,0,109,97,112,110,97,109,101,0,99,108,95,115,104,111,119,110,101,116,0,0,0,0,0,0,68,79,85,66,76,69,32,83,73,71,78,65,76,32,70,65,85,76,84,58,32,82,101,99,101,105,118,101,100,32,115,105,103,110,97,108,32,37,100,44,32,101,120,105,116,105,110,103,46,46,46,10,0,0,0,0,37,0,0,0,0,0,0,0,35,105,110,99,108,117,100,101,32,109,105,115,115,105,110,103,32,116,114,97,105,108,105,110,103,32,62,0,0,0,0,0,56,0,0,0,0,0,0,0,99,97,110,110,111,116,32,105,110,116,101,114,98,114,101,101,100,32,119,101,105,103,104,116,32,99,111,110,102,105,103,115,44,32,117,110,101,113,117,97,108,32,98,97,108,97,110,99,101,10,0,0,0,0,0,0,103,114,97,118,105,116,121,0,49,48,0,0,0,0,0,0,105,110,102,111,95,99,97,109,112,0,0,0,0,0,0,0,37,99,114,37,115,37,99,0,108,111,97,100,101,100,32,99,97,99,104,101,100,32,100,101,102,97,117,108,116,32,115,107,105,108,108,32,37,102,32,102,114,111,109,32,37,115,10,0,116,101,108,101,112,111,114,116,101,114,32,100,101,115,116,105,110,97,116,105,111,110,32,40,37,115,41,32,105,110,32,115,111,108,105,100,10,0,0,0,112,104,121,115,95,109,97,120,98,97,114,114,105,101,114,0,70,97,105,108,101,100,32,108,111,97,100,105,110,103,32,100,108,108,44,32,116,114,121,105,110,103,32,110,101,120,116,10,0,0,0,0,0,0,0,0,79,112,101,110,105,110,103,32,99,111,110,110,101,99,116,105,111,110,32,116,111,32,83,79,67,75,83,32,115,101,114,118,101,114,46,10,0,0,0,0,65,108,108,32,98,97,110,115,32,97,110,100,32,101,120,99,101,112,116,105,111,110,115,32,104,97,118,101,32,98,101,101,110,32,100,101,108,101,116,101,100,46,10,0,0,0,0,0,119,101,97,112,111,110,0,0,46,115,104,97,100,101,114,0,101,120,112,101,99,116,101,100,32,117,110,115,105,103,110,101,100,32,118,97,108,117,101,44,32,102,111,117,110,100,32,37,115,0,0,0,0,0,0,0,98,111,116,95,110,111,99,104,97,116,0,0,0,0,0,0,79,112,101,110,105,110,103,32,113,99,111,110,115,111,108,101,46,108,111,103,32,102,97,105,108,101,100,33,10,0,0,0,99,108,95,99,100,107,101,121,0,0,0,0,0,0,0,0,115,101,114,118,101,114,32,105,115,32,102,117,108,108,32,111,110,32,108,111,99,97,108,32,99,111,110,110,101,99,116,0,90,95,70,114,101,101,58,32,78,85,76,76,32,112,111,105,110,116,101,114,0,0,0,0,104,111,115,116,110,97,109,101,0,0,0,0,0,0,0,0,94,51,69,88,69,67,95,78,79,87,32,37,115,10,0,0,105,111,113,51,32,49,46,51,54,95,71,73,84,95,52,102,55,100,55,98,102,45,50,48,49,52,45,48,50,45,48,49,32,100,101,100,105,99,97,116,101,100,32,115,101,114,118,101,114,32,40,37,115,41,10,0,47,0,0,0,0,0,0,0,35,105,110,99,108,117,100,101,32,119,105,116,104,111,117,116,32,102,105,108,101,32,110,97,109,101,0,0,0,0,0,0,115,118,95,109,97,120,99,108,105,101,110,116,115,0,0,0,99,97,110,110,111,116,32,105,110,116,101,114,98,114,101,101,100,32,119,101,105,103,104,116,32,99,111,110,102,105,103,115,44,32,117,110,101,113,117,97,108,32,99,104,105,108,100,10,0,0,0,0,0,0,0,0,102,108,97,103,115,0,0,0,119,101,97,112,105,110,100,101,120,95,103,114,97,112,112,108,101,0,0,0,0,0,0,0,109,101,115,115,97,103,101,0,37,99,118,37,108,100,37,99,0,0,0,0,0,0,0,0,108,111,97,100,101,100,32,115,107,105,108,108,32,37,102,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,116,101,108,101,112,111,114,116,101,114,32,100,101,115,116,105,110,97,116,105,111,110,32,40,37,115,41,32,119,105,116,104,111,117,116,32,111,114,105,103,105,110,10,0,0,0,0,0,49,56,0,0,0,0,0,0,84,114,121,32,108,111,97,100,105,110,103,32,100,108,108,32,102,105,108,101,32,37,115,10,0,0,0,0,0,0,0,0,78,69,84,95,74,111,105,110,77,117,108,116,105,99,97,115,116,54,58,32,67,111,117,108,100,110,39,116,32,106,111,105,110,32,109,117,108,116,105,99,97,115,116,32,103,114,111,117,112,58,32,37,115,10,0,0,83,101,114,118,101,114,32,105,115,32,110,111,116,32,114,117,110,110,105,110,103,46,10,0,111,116,104,101,114,69,110,116,105,116,121,78,117,109,0,0,113,51,107,101,121,0,0,0,67,77,95,65,100,106,117,115,116,65,114,101,97,80,111,114,116,97,108,83,116,97,116,101,58,32,110,101,103,97,116,105,118,101,32,114,101,102,101,114,101,110,99,101,32,99,111,117,110,116,0,0,0,0,0,0,98,111,116,95,102,97,115,116,99,104,97,116,0,0,0,0,62,62,61,0,0,0,0,0,117,115,97,103,101,58,32,114,101,115,101,116,32,60,118,97,114,105,97,98,108,101,62,10,0,0,0,0,0,0,0,0,66,97,115,101,87,105,110,100,105,110,103,70,111,114,80,108,97,110,101,58,32,110,111,32,97,120,105,115,32,102,111,117,110,100,0,0,0,0,0,0,111,110,108,121,32,98,111,116,115,32,111,110,32,115,101,114,118,101,114,0,0,0,0,0,37,115,10,0,0,0,0,0,119,97,105,116,0,0,0,0,87,65,82,78,73,78,71,58,32,98,101,118,101,108,32,112,108,97,110,101,32,97,108,114,101,97,100,121,32,117,115,101,100,10,0,0,0,0,0,0,67,77,95,76,101,97,102,65,114,101,97,58,32,98,97,100,32,110,117,109,98,101,114,0,37,105,0,0,0,0,0,0,70,101,98,32,50,51,32,50,48,49,52,0,0,0,0,0,42,0,0,0,0,0,0,0,99,97,110,39,116,32,109,101,114,103,101,32,37,115,32,119,105,116,104,32,37,115,0,0,110,111,110,97,109,101,0,0,108,111,97,100,101,100,32,37,115,10,0,0,0,0,0,0,109,111,100,101,108,0,0,0,57,0,0,0,0,0,0,0,111,114,105,103,105,110,0,0,99,104,97,116,32,109,101,115,115,97,103,101,32,116,111,111,32,108,111,110,103,0,0,0,108,111,97,100,101,100,32,100,101,102,97,117,108,116,32,115,107,105,108,108,32,37,100,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,67,77,111,100,95,76,111,97,100,83,117,98,109,111,100,101,108,115,58,32,102,117,110,110,121,32,108,117,109,112,32,115,105,122,101,0,0,0,0,0,116,101,108,101,112,111,114,116,101,114,32,119,105,116,104,111,117,116,32,109,105,115,99,95,116,101,108,101,112,111,114,116,101,114,95,100,101,115,116,32,40,37,115,41,10,0,0,0,112,104,121,115,95,109,97,120,119,97,116,101,114,106,117,109,112,0,0,0,0,0,0,0,86,77,95,67,114,101,97,116,101,58,32,110,111,32,102,114,101,101,32,118,109,95,116,0,78,69,84,95,74,111,105,110,77,117,108,116,105,99,97,115,116,54,58,32,67,111,117,108,100,110,39,116,32,115,101,116,32,115,99,111,112,101,32,111,110,32,109,117,108,116,105,99,97,115,116,32,115,111,99,107,101,116,58,32,37,115,10,0,102,108,117,115,104,98,97,110,115,0,0,0,0,0,0,0,101,70,108,97,103,115,0,0,70,83,95,70,79,112,101,110,70,105,108,101,82,101,97,100,58,32,78,85,76,76,32,39,102,105,108,101,110,97,109,101,39,32,112,97,114,97,109,101,116,101,114,32,112,97,115,115,101,100,0,0,0,0,0,0,83,86,95,71,101,116,67,104,97,108,108,101,110,103,101,58,32,114,97,116,101,32,108,105,109,105,116,32,102,114,111,109,32,37,115,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,98,111,116,95,116,101,115,116,99,108,117,115,116,101,114,115,0,0,0,0,0,0,0,0,79,98,106,101,99,116,32,37,105,32,116,111,117,99,104,105,110,103,32,51,32,97,114,101,97,115,32,97,116,32,37,102,32,37,102,32,37,102,10,0,117,115,97,103,101,58,32,37,115,32,60,118,97,114,105,97,98,108,101,62,32,60,118,97,108,117,101,62,10,0,0,0,37,115,58,32,68,101,108,116,97,32,114,101,113,117,101,115,116,32,102,114,111,109,32,111,117,116,32,111,102,32,100,97,116,101,32,101,110,116,105,116,105,101,115,46,10,0,0,0,112,97,115,115,119,111,114,100,0,0,0,0,0,0,0,0,77,73,83,83,73,78,71,32,86,65,76,85,69,10,0,0,35,52,54,50,32,78,101,116,99,104,97,110,95,84,114,97,110,115,109,105,116,78,101,120,116,70,114,97,103,109,101,110,116,58,32,114,101,109,97,105,110,105,110,103,32,113,117,101,117,101,100,32,109,101,115,115,97,103,101,10,0,0,0,0,101,99,104,111,0,0,0,0,67,77,95,76,101,97,102,67,108,117,115,116,101,114,58,32,98,97,100,32,110,117,109,98,101,114,0,0,0,0,0,0,102,105,108,101,32,37,115,44,32,108,105,110,101,32,37,100,58,32,37,115,10,0,0,0,112,114,111,116,111,99,111,108,0,0,0,0,0,0,0,0,45,118,0,0,0,0,0,0,46,42,0,0,0,0,0,0,115,116,114,105,110,103,105,122,105,110,103,32,111,112,101,114,97,116,111,114,32,119,105,116,104,111,117,116,32,100,101,102,105,110,101,32,112,97,114,97,109,101,116,101,114,0,0,0,115,118,95,104,111,115,116,110,97,109,101,0,0,0,0,0,116,111,111,32,109,97,110,121,32,102,117,122,122,121,32,119,101,105,103,104,116,115,0,0,110,97,109,101,0,0,0,0,119,101,97,112,105,110,100,101,120,95,98,102,103,49,48,107,0,0,0,0,0,0,0,0,116,97,114,103,101,116,95,108,111,99,97,116,105,111,110,0,108,111,97,100,101,100,32,37,115,10,0,0,0,0,0,0,108,111,97,100,101,100,32,99,97,99,104,101,100,32,100,101,102,97,117,108,116,32,115,107,105,108,108,32,37,100,32,102,114,111,109,32,37,115,10,0,116,114,105,103,103,101,114,95,116,101,108,101,112,111,114,116,32,97,116,32,37,49,46,48,102,32,37,49,46,48,102,32,37,49,46,48,102,32,119,105,116,104,111,117,116,32,116,97,114,103,101,116,10,0,0,0,48,46,55,0,0,0,0,0,37,54,105,32,65,65,83,32,109,101,109,111,114,121,47,67,80,85,32,117,115,97,103,101,32,40,116,104,101,32,108,111,119,101,114,32,116,104,101,32,98,101,116,116,101,114,41,10,0,0,0,0,0,0,0,0,86,77,95,67,114,101,97,116,101,58,32,98,97,100,32,112,97,114,109,115,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,74,111,105,110,77,117,108,116,105,99,97,115,116,54,58,32,73,110,99,111,114,114,101,99,116,32,109,117,108,116,105,99,97,115,116,32,97,100,100,114,101,115,115,32,103,105,118,101,110,44,32,112,108,101,97,115,101,32,115,101,116,32,99,118,97,114,32,37,115,32,116,111,32,97,32,115,97,110,101,32,118,97,108,117,101,46,10,0,0,0,0,101,120,99,101,112,116,100,101,108,0,0,0,0,0,0,0,112,111,115,46,116,114,84,121,112,101,0,0,0,0,0,0,100,109,95,0,0,0,0,0,108,111,103,0,0,0,0,0,98,111,116,95,116,101,115,116,115,111,108,105,100,0,0,0,116,111,103,103,108,101,58,32,110,111,116,104,105,110,103,32,116,111,32,116,111,103,103,108,101,32,116,111,10,0,0,0,37,115,32,0,0,0,0,0,37,115,58,114,101,99,111,110,110,101,99,116,10,0,0,0,118,115,116,114,0,0,0,0,67,77,95,73,110,108,105,110,101,77,111,100,101,108,58,32,98,97,100,32,110,117,109,98,101,114,0,0,0,0,0,0,103,97,109,101,110,97,109,101,0,0,0,0,0,0,0,0,115,97,121,32,37,115,0,0,45,45,118,101,114,115,105,111,110,0,0,0,0,0,0,0,58,58,0,0,0,0,0,0,115,118,95,112,114,105,118,97,116,101,67,108,105,101,110,116,115,0,0,0,0,0,0,0,119,101,105,103,104,116,0,0,99,111,117,108,100,110,39,116,32,108,111,97,100,32,116,104,101,32,119,101,97,112,111,110,32,99,111,110,102,105,103,10,0,0,0,0,0,0,0,0,53,0,0,0,0,0,0,0,99,108,97,115,115,110,97,109,101,0,0,0,0,0,0,0,109,105,115,115,105,110,103,32,125,0,0,0,0,0,0,0,98,111,116,115,47,100,101,102,97,117,108,116,95,99,46,99,0,0,0,0,0,0,0,0,83,101,114,118,101,114,32,99,111,109,109,97,110,100,32,111,118,101,114,102,108,111,119,0,116,114,105,103,103,101,114,95,116,101,108,101,112,111,114,116,32,109,111,100,101,108,32,61,32,34,37,115,34,10,0,0,112,104,121,115,95,109,97,120,115,116,101,101,112,110,101,115,115,0,0,0,0,0,0,0,37,54,105,32,116,111,116,97,108,32,114,101,97,99,104,97,98,105,108,105,116,121,32,97,114,101,97,115,10,0,0,0,86,77,95,82,101,115,116,97,114,116,32,102,97,105,108,101,100,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,54,83,111,99,107,101,116,58,32,98,105,110,100,58,32,37,115,10,0,0,0,0,0,0,0,98,97,110,100,101,108,0,0,103,114,111,117,110,100,69,110,116,105,116,121,78,117,109,0,94,51,87,65,82,78,73,78,71,58,32,67,111,117,108,100,32,110,111,116,32,99,114,101,97,116,101,32,110,101,119,32,99,111,109,95,112,105,112,101,102,105,108,101,32,97,116,32,37,115,46,32,99,111,109,95,112,105,112,101,102,105,108,101,32,119,105,108,108,32,110,111,116,32,98,101,32,117,115,101,100,46,10,0,0,0,0,0,98,111,116,95,116,101,115,116,114,99,104,97,116,0,0,0,37,100,0,0,0,0,0,0,100,114,111,112,105,110,103,32,73,83,67,84,76,32,115,101,113,117,101,110,99,101,58,32,37,100,44,32,84,84,89,95,101,114,97,115,101,58,32,37,100,10,0,0,0,0,0,0,45,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,0,0,0,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,32,99,111,100,101,0,0,0,0,0,37,100,0,0,0,0,0,0,10,0,0,0,0,0,0,0,117,110,101,120,112,101,99,116,101,100,32,112,117,110,99,116,117,97,116,105,111,110,32,37,115,0,0,0,0,0,0,0,67,108,105,101,110,116,32,37,105,32,99,111,110,110,101,99,116,105,110,103,32,119,105,116,104,32,37,105,32,99,104,97,108,108,101,110,103,101,32,112,105,110,103,10,0,0,0,0,101,120,101,99,0,0,0,0,46,46,46,0,0,0,0,0,67,77,95,67,108,105,112,72,97,110,100,108,101,84,111,77,111,100,101,108,58,32,98,97,100,32,104,97,110,100,108,101,32,37,105,32,60,32,37,105,32,60,32,37,105,0,0,0,111,117,116,32,111,102,32,116,111,107,101,110,32,115,112,97,99,101,0,0,0,0,0,0,111,112,101,110,108,111,103,32,60,102,105,108,101,110,97,109,101,62,10,0,0,0,0,0,37,115,58,32,98,111,116,32,108,105,98,114,97,114,121,32,117,115,101,100,32,98,101,102,111,114,101,32,98,101,105,110,103,32,115,101,116,117,112,10,0,0,0,0,0,0,0,0,99,104,97,108,108,101,110,103,101,0,0,0,0,0,0,0,77,105,115,115,105,110,103,32,114,101,116,117,114,110,32,118,97,108,117,101,0,0,0,0,83,121,115,95,76,111,97,100,71,97,109,101,68,108,108,40,37,115,41,32,102,111,117,110,100,32,118,109,77,97,105,110,32,102,117,110,99,116,105,111,110,32,97,116,32,37,112,10,0,0,0,0,0,0,0,0,119,101,97,112,111,110,32,110,117,109,98,101,114,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,45,62,0,0,0,0,0,0,37,100,0,0,0,0,0,0,110,111,109,97,112,0,0,0,99,111,117,110,108,100,110,39,116,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,105,110,118,97,108,105,100,32,119,101,97,112,111,110,32,115,116,97,116,101,32,37,100,10,0,0,0,0,0,0,0,0,119,101,97,112,111,110,115,46,99,0,0,0,0,0,0,0,119,101,97,112,105,110,100,101,120,95,114,111,99,107,101,116,108,97,117,110,99,104,101,114,0,0,0,0,0,0,0,0,111,117,116,32,111,102,32,108,101,118,101,108,32,105,116,101,109,115,10,0,0,0,0,0,117,110,101,120,112,101,99,116,101,100,32,37,115,0,0,0,99,111,117,108,100,110,39,116,32,102,105,110,100,32,115,107,105,108,108,32,37,100,32,105,110,32,37,115,10,0,0,0,110,111,32,101,110,116,105,116,121,32,119,105,116,104,32,109,111,100,101,108,32,37,100,10,0,0,0,0,0,0,0,0,116,114,105,103,103,101,114,95,116,101,108,101,112,111,114,116,0,0,0,0,0,0,0,0,49,57,0,0,0,0,0,0,99,108,117,115,116,101,114,32,37,100,32,104,97,115,32,37,100,32,114,101,97,99,104,97,98,105,108,105,116,121,32,97,114,101,97,115,10,0,0,0,83,86,95,71,101,116,67,111,110,102,105,103,115,116,114,105,110,103,58,32,98,117,102,102,101,114,83,105,122,101,32,61,61,32,37,105,0,0,0,0,86,77,95,82,101,115,116,97,114,116,40,41,10,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,54,83,111,99,107,101,116,58,32,115,101,116,115,111,99,107,111,112,116,32,73,80,86,54,95,86,54,79,78,76,89,58,32,37,115,10,0,0,0,0,0,109,111,100,101,108,105,110,100,101,120,0,0,0,0,0,0,101,120,99,101,112,116,97,100,100,114,0,0,0,0,0,0,108,101,103,115,65,110,105,109,0,0,0,0,0,0,0,0,70,83,95,70,67,114,101,97,116,101,79,112,101,110,80,105,112,101,70,105,108,101,58,32,37,115,10,0,0,0,0,0,109,97,120,95,109,101,115,115,97,103,101,115,0,0,0,0,98,111,116,95,116,101,115,116,105,99,104,97,116,0,0,0,37,115,10,0,0,0,0,0,54,49,52,52,0,0,0,0,83,86,95,83,101,116,66,114,117,115,104,77,111,100,101,108,58,32,78,85,76,76,0,0,37,100,32,98,121,116,101,115,32,114,111,117,116,105,110,103,32,99,97,99,104,101,10,0,109,111,118,101,32,115,116,97,116,101,32,104,97,110,100,108,101,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,117,115,97,103,101,58,32,116,111,103,103,108,101,32,60,118,97,114,105,97,98,108,101,62,32,91,118,97,108,117,101,49,44,32,118,97,108,117,101,50,44,32,46,46,46,93,10,0,116,114,105,103,103,101,114,95,112,117,115,104,32,115,116,97,114,116,32,115,111,108,105,100,10,0,0,0,0,0,0,0,112,104,121,115,95,115,116,111,112,115,112,101,101,100,0,0,102,111,114,99,101,119,114,105,116,101,0,0,0,0,0,0,116,114,121,105,110,103,32,116,111,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,65,65,83,95,69,110,116,105,116,121,73,110,102,111,58,32,101,110,116,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,115,101,116,0,0,0,0,0,65,65,83,95,77,65,88,95,80,79,82,84,65,76,73,78,68,69,88,83,73,90,69,10,0,0,0,0,0,0,0,0,67,108,105,101,110,116,32,37,105,32,114,101,106,101,99,116,101,100,32,111,110,32,97,32,116,111,111,32,104,105,103,104,32,112,105,110,103,10,0,0,101,110,116,100,97,116,97,0,86,77,95,80,114,101,112,97,114,101,73,110,116,101,114,112,114,101,116,101,114,58,32,112,99,32,62,32,104,101,97,100,101,114,45,62,99,111,100,101,76,101,110,103,116,104,0,0,99,109,100,108,105,115,116,0,118,109,95,103,97,109,101,0,119,98,0,0,0,0,0,0,67,77,95,67,108,105,112,72,97,110,100,108,101,84,111,77,111,100,101,108,58,32,98,97,100,32,104,97,110,100,108,101,32,37,105,0,0,0,0,0,83,86,95,83,101,116,67,111,110,102,105,103,115,116,114,105,110,103,58,32,98,97,100,32,105,110,100,101,120,32,37,105,0,0,0,0,0,0,0,0,98,111,116,0,0,0,0,0,83,86,67,95,73,110,102,111,58,32,114,97,116,101,32,108,105,109,105,116,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,0,0,0,0,0,0,0,115,104,111,119,100,114,111,112,0,0,0,0,0,0,0,0,110,97,109,101,0,0,0,0,83,121,115,95,76,111,97,100,71,97,109,101,68,108,108,40,37,115,41,32,102,97,105,108,101,100,32,116,111,32,102,105,110,100,32,118,109,77,97,105,110,32,102,117,110,99,116,105,111,110,58,10,34,37,115,34,32,33,10,0,0,0,0,0,71,101,110,101,116,105,99,80,97,114,101,110,116,115,65,110,100,67,104,105,108,100,83,101,108,101,99,116,105,111,110,58,32,116,111,111,32,109,97,110,121,32,98,111,116,115,10,0,60,60,0,0,0,0,0,0,77,105,115,109,97,116,99,104,101,100,32,66,79,84,76,73,66,95,65,80,73,95,86,69,82,83,73,79,78,58,32,101,120,112,101,99,116,101,100,32,37,105,44,32,103,111,116,32,37,105,10,0,0,0,0,0,115,118,95,107,101,121,119,111,114,100,115,0,0,0,0,0,98,111,116,102,105,108,101,115,0,0,0,0,0,0,0,0,119,101,97,112,111,110,99,111,110,102,105,103,0,0,0,0,56,48,48,0,0,0,0,0,109,97,120,95,108,101,118,101,108,105,116,101,109,115,0,0,115,121,110,111,110,121,109,32,109,117,115,116,32,104,97,118,101,32,97,116,32,108,101,97,115,116,32,116,119,111,32,101,110,116,114,105,101,115,0,0,108,111,97,100,101,100,32,115,107,105,108,108,32,37,100,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,0,0,116,97,114,103,101,116,95,116,101,108,101,112,111,114,116,101,114,32,119,105,116,104,111,117,116,32,116,97,114,103,101,116,10,0,0,0,0,0,0,0,112,104,121,115,95,109,97,120,115,116,101,112,0,0,0,0,99,97,110,39,116,32,119,114,105,116,101,32,37,100,32,98,105,116,115,0,0,0,0,0,37,54,100,32,99,108,117,115,116,101,114,115,32,99,114,101,97,116,101,100,10,0,0,0,94,51,87,97,114,110,105,110,103,58,32,74,117,109,112,32,116,97,98,108,101,32,115,105,122,101,32,111,102,32,37,115,32,110,111,116,32,109,97,116,99,104,105,110,103,32,97,102,116,101,114,32,86,77,95,82,101,115,116,97,114,116,40,41,10,0,0,0,0,0,0,0,66,73,71,32,73,110,102,111,32,115,116,114,105,110,103,32,108,101,110,103,116,104,32,101,120,99,101,101,100,101,100,10,0,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,54,83,111,99,107,101,116,58,32,105,111,99,116,108,32,70,73,79,78,66,73,79,58,32,37,115,10,0,0,0,0,0,0,98,97,110,97,100,100,114,0,101,118,101,110,116,80,97,114,109,0,0,0,0,0,0,0,97,98,0,0,0,0,0,0,107,105,99,107,98,111,116,115,0,0,0,0,0,0,0,0,98,111,116,95,114,101,108,111,97,100,99,104,97,114,97,99,116,101,114,115,0,0,0,0,70,83,95,70,79,112,101,110,70,105,108,101,65,112,112,101,110,100,58,32,37,115,10,0,67,118,97,114,32,37,115,32,100,111,101,115,32,110,111,116,32,101,120,105,115,116,46,10,0,0,0,0,0,0,0,0,99,118,97,114,95,114,101,115,116,97,114,116,0,0,0,0,112,114,105,110,116,10,83,101,114,118,101,114,32,105,115,32,102,111,114,32,108,111,119,32,112,105,110,103,115,32,111,110,108,121,10,0,0,0,0,0,99,102,103,0,0,0,0,0,67,77,95,76,111,97,100,77,97,112,58,32,37,115,32,104,97,115,32,119,114,111,110,103,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,32,40,37,105,32,115,104,111,117,108,100,32,98,101,32,37,105,41,0,0,0,0,0,0,0,83,86,67,95,73,110,102,111,58,32,114,97,116,101,32,108,105,109,105,116,32,102,114,111,109,32,37,115,32,101,120,99,101,101,100,101,100,44,32,100,114,111,112,112,105,110,103,32,114,101,113,117,101,115,116,10,0,0,0,0,0,0,0,0,118,109,77,97,105,110,0,0,62,62,0,0,0,0,0,0,99,104,97,116,32,115,116,97,116,101,32,104,97,110,100,108,101,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,66,111,116,85,112,100,97,116,101,69,110,116,105,116,121,0,103,95,103,97,109,101,116,121,112,101,0,0,0,0,0,0,119,101,105,103,104,116,70,105,108,101,76,105,115,116,32,119,97,115,32,102,117,108,108,32,116,114,121,105,110,103,32,116,111,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,99,111,117,108,100,110,39,116,32,108,111,97,100,32,119,101,97,112,111,110,32,99,111,110,102,105,103,32,37,115,10,0,115,118,95,103,114,97,118,105,116,121,0,0,0,0,0,0,105,116,101,109,32,105,110,102,111,32,37,100,32,34,37,115,34,32,104,97,115,32,110,111,32,102,117,122,122,121,32,119,101,105,103,104,116,13,10,0,93,0,0,0,0,0,0,0,108,111,97,100,101,100,32,99,97,99,104,101,100,32,115,107,105,108,108,32,37,102,32,102,114,111,109,32,37,115,10,0,116,97,114,103,101,116,95,116,101,108,101,112,111,114,116,101,114,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,37,54,100,32,112,111,114,116,97,108,115,32,99,114,101,97,116,101,100,10,0,0,0,0,76,111,97,100,105,110,103,32,37,100,32,106,117,109,112,32,116,97,98,108,101,32,116,97,114,103,101,116,115,10,0,0,73,110,102,111,32,115,116,114,105,110,103,32,108,101,110,103,116,104,32,101,120,99,101,101,100,101,100,10,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,54,83,111,99,107,101,116,58,32,115,111,99,107,101,116,58,32,37,115,10,0,0,0,0,0,116,111,114,115,111,65,110,105,109,0,0,0,0,0,0,0,108,105,115,116,98,97,110,115,0,0,0,0,0,0,0,0,49,48,48,0,0,0,0,0,48,0,0,0,0,0,0,0,70,83,95,70,79,112,101,110,70,105,108,101,87,114,105,116,101,58,32,37,115,10,0,0,117,115,97,103,101,58,32,112,114,105,110,116,32,60,118,97,114,105,97,98,108,101,62,10,0,0,0,0,0,0,0,0,99,104,97,114,97,99,116,101,114,32,104,97,110,100,108,101,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,0,98,97,115,101,113,51,0,0,115,97,102,101,0,0,0,0,67,108,105,101,110,116,32,37,105,32,114,101,106,101,99,116,101,100,32,111,110,32,97,32,116,111,111,32,108,111,119,32,112,105,110,103,10,0,0,0,37,105,32,99,111,109,109,97,110,100,115,10,0,0,0,0,67,111,117,108,100,110,39,116,32,108,111,97,100,32,37,115,0,0,0,0,0,0,0,0,65,65,83,95,80,114,101,115,101,110,99,101,84,121,112,101,66,111,117,110,100,105,110,103,66,111,120,58,32,117,110,107,110,111,119,110,32,112,114,101,115,101,110,99,101,32,116,121,112,101,10,0,0,0,0,0,37,100,32,109,105,100,114,97,110,103,101,32,97,114,101,97,32,37,100,0,0,0,0,0,117,105,95,115,105,110,103,108,101,80,108,97,121,101,114,65,99,116,105,118,101,0,0,0,100,108,108,69,110,116,114,121,0,0,0,0,0,0,0,0,94,61,0,0,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,116,105,109,101,108,105,109,105,116,0,0,0,0,0,0,0,115,119,105,116,99,104,32,119,105,116,104,111,117,116,32,100,101,102,97,117,108,116,0,0,108,111,97,100,101,100,32,37,115,10,0,0,0,0,0,0,51,50,0,0,0,0,0,0,108,111,97,100,101,100,32,37,115,10,0,0,0,0,0,0,41,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,100,101,102,105,110,105,116,105,111,110,32,37,115,0,0,0,83,86,95,83,118,69,110,116,105,116,121,70,111,114,71,101,110,116,105,116,121,58,32,98,97,100,32,103,69,110,116,0,116,114,105,103,103,101,114,95,109,117,108,116,105,112,108,101,32,97,116,32,37,49,46,48,102,32,37,49,46,48,102,32,37,49,46,48,102,32,119,105,116,104,111,117,116,32,116,97,114,103,101,116,10,0,0,0,112,104,121,115,95,115,119,105,109,97,99,99,101,108,101,114,97,116,101,0,0,0,0,0,112,111,114,116,97,108,32,37,100,58,32,97,114,101,97,32,37,100,13,10,0,0,0,0,94,51,87,97,114,110,105,110,103,58,32,68,97,116,97,32,114,101,103,105,111,110,32,115,105,122,101,32,111,102,32,37,115,32,110,111,116,32,109,97,116,99,104,105,110,103,32,97,102,116,101,114,32,86,77,95,82,101,115,116,97,114,116,40,41,10,0,0,0,0,0,0,92,37,115,92,37,115,0,0,79,112,101,110,105,110,103,32,73,80,54,32,115,111,99,107,101,116,58,32,91,58,58,93,58,37,105,10,0,0,0,0,37,100,32,97,114,101,97,32,99,97,99,104,101,32,117,112,100,97,116,101,115,10,0,0,101,84,121,112,101,0,0,0,114,101,104,97,115,104,98,97,110,115,0,0,0,0,0,0,98,111,116,95,116,104,105,110,107,116,105,109,101,0,0,0,37,102,0,0,0,0,0,0,67,108,105,101,110,116,32,113,117,105,116,0,0,0,0,0,112,114,105,110,116,10,83,101,114,118,101,114,32,105,115,32,102,111,114,32,104,105,103,104,32,112,105,110,103,115,32,111,110,108,121,10,0,0,0,0,67,118,97,114,95,71,101,116,58,32,78,85,76,76,32,112,97,114,97,109,101,116,101,114,0,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,67,77,95,71,114,105,100,80,108,97,110,101,32,117,110,114,101,115,111,108,118,97,98,108,101,10,0,0,0,0,0,67,77,95,76,111,97,100,77,97,112,40,32,37,115,44,32,37,105,32,41,10,0,0,0,115,112,101,101,100,0,0,0,84,101,115,116,105,110,103,32,102,97,116,97,108,32,101,114,114,111,114,0,0,0,0,0,65,65,83,32,100,97,116,97,32,111,112,116,105,109,105,122,101,100,46,10,0,0,0,0,103,95,103,97,109,101,116,121,112,101,0,0,0,0,0,0,84,101,115,116,105,110,103,32,100,114,111,112,32,101,114,114,111,114,0,0,0,0,0,0,83,121,115,95,76,111,97,100,71,97,109,101,68,108,108,40,37,115,41,32,102,97,105,108,101,100,58,10,34,37,115,34,10,0,0,0,0,0,0,0,124,61,0,0,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,32,77,97,112,32,76,111,97,100,105,110,103,32,45,45,45,45,45,45,45,45,45,45,45,45,10,0,0,50,48,0,0,0,0,0,0,125,0,0,0,0,0,0,0,110,111,32,119,101,97,112,111,110,32,105,110,102,111,32,108,111,97,100,101,100,10,0,0,115,118,95,109,97,120,98,97,114,114,105,101,114,0,0,0,110,111,32,105,116,101,109,32,105,110,102,111,32,108,111,97,100,101,100,10,0,0,0,0,44,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,105,110,116,101,103,101,114,44,32,102,108,111,97,116,32,111,114,32,115,116,114,105,110,103,44,32,102,111,117,110,100,32,37,115,0,0,0,0,0,102,114,101,101,122,101,32,60,115,101,99,111,110,100,115,62,10,0,0,0,0,0,0,0,116,114,105,103,103,101,114,95,109,117,108,116,105,112,108,101,32,109,111,100,101,108,32,61,32,34,37,115,34,10,0,0,112,104,121,115,95,97,105,114,97,99,99,101,108,101,114,97,116,101,0,0,0,0,0,0,10,0,0,0,0,0,0,0,94,51,87,97,114,110,105,110,103,58,32,37,115,32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,97,32,114,101,99,111,103,110,105,115,97,98,108,101,32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32,105,116,115,32,104,101,97,100,101,114,10,0,0,94,51,67,97,110,39,116,32,117,115,101,32,107,101,121,115,32,111,114,32,118,97,108,117,101,115,32,119,105,116,104,32,97,32,39,37,99,39,58,32,37,115,32,61,32,37,115,10,0,0,0,0,0,0,0,0,79,112,101,110,105,110,103,32,73,80,54,32,115,111,99,107,101,116,58,32,37,115,58,37,105,10,0,0,0,0,0,0,115,101,114,118,101,114,0,0,97,110,103,108,101,115,50,91,49,93,0,0,0,0,0,0,116,101,108,108,0,0,0,0,45,45,45,32,67,111,109,109,111,110,32,73,110,105,116,105,97,108,105,122,97,116,105,111,110,32,67,111,109,112,108,101,116,101,32,45,45,45,10,0,99,111,109,95,112,105,112,101,102,105,108,101,0,0,0,0,98,111,116,95,115,97,118,101,114,111,117,116,105,110,103,99,97,99,104,101,0,0,0,0,117,105,95,115,105,110,103,108,101,80,108,97,121,101,114,65,99,116,105,118,101,0,0,0,37,105,0,0,0,0,0,0,114,95,117,105,70,117,108,108,83,99,114,101,101,110,0,0,83,101,114,118,101,114,32,113,117,105,116,0,0,0,0,0,99,105,110,101,109,97,116,105,99,32,105,110,116,114,111,46,82,111,81,0,0,0,0,0,112,104,121,115,95,102,114,105,99,116,105,111,110,0,0,0,112,114,105,110,116,10,78,111,32,111,114,32,98,97,100,32,99,104,97,108,108,101,110,103,101,32,102,111,114,32,121,111,117,114,32,97,100,100,114,101], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+40960);
|
|
/* memory initializer */ allocate([115,115,46,10,0,0,0,0,67,109,100,95,65,100,100,67,111,109,109,97,110,100,58,32,37,115,32,97,108,114,101,97,100,121,32,100,101,102,105,110,101,100,10,0,0,0,0,0,110,101,120,116,109,97,112,0,49,0,0,0,0,0,0,0,99,105,110,101,109,97,116,105,99,32,105,100,108,111,103,111,46,82,111,81,10,0,0,0,37,115,0,0,0,0,0,0,112,114,111,116,111,99,111,108,0,0,0,0,0,0,0,0,68,97,114,107,80,108,97,99,101,115,0,0,0,0,0,0,65,65,83,32,102,105,108,101,32,110,111,116,32,115,101,113,117,101,110,116,105,97,108,108,121,32,114,101,97,100,10,0,99,111,109,95,112,114,111,116,111,99,111,108,0,0,0,0,110,97,110,0,0,0,0,0,76,111,97,100,105,110,103,32,68,76,76,32,102,105,108,101,58,32,37,115,10,0,0,0,38,61,0,0,0,0,0,0,66,111,116,76,111,97,100,77,97,112,0,0,0,0,0,0,102,114,97,103,108,105,109,105,116,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,110,97,109,101,32,37,115,0,65,65,83,95,85,112,100,97,116,101,69,110,116,105,116,121,58,32,110,111,116,32,108,111,97,100,101,100,10,0,0,0,119,101,97,112,111,110,32,37,115,32,117,115,101,115,32,117,110,100,101,102,105,110,101,100,32,112,114,111,106,101,99,116,105,108,101,32,105,110,32,37,115,10,0,0,0,0,0,0,49,56,0,0,0,0,0,0,117,110,107,110,111,119,110,32,100,101,102,105,110,105,116,105,111,110,32,37,115,0,0,0,101,109,112,116,121,32,115,116,114,105,110,103,0,0,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,37,100,32,97,108,114,101,97,100,121,32,105,110,105,116,105,97,108,105,122,101,100,0,0,0,81,117,97,107,101,51,65,114,101,110,97,0,0,0,0,0,65,65,83,95,78,101,120,116,65,114,101,97,82,101,97,99,104,97,98,105,108,105,116,121,58,32,114,101,97,99,104,110,117,109,32,60,32,115,101,116,116,105,110,103,115,45,62,102,105,114,115,116,114,101,97,99,104,97,98,108,101,97,114,97,0,0,0,0,0,0,0,0,116,114,105,103,103,101,114,95,109,117,108,116,105,112,108,101,0,0,0,0,0,0,0,0,49,48,0,0,0,0,0,0,65,65,83,32,115,104,117,116,100,111,119,110,46,10,0,0,13,37,54,100,0,0,0,0,94,51,87,97,114,110,105,110,103,58,32,37,115,32,104,97,115,32,98,97,100,32,104,101,97,100,101,114,10,0,0,0,73,110,102,111,95,83,101,116,86,97,108,117,101,70,111,114,75,101,121,58,32,111,118,101,114,115,105,122,101,32,105,110,102,111,115,116,114,105,110,103,0,0,0,0,0,0,0,0,79,112,101,110,105,110,103,32,73,80,54,32,115,111,99,107,101,116,58,32,91,37,115,93,58,37,105,10,0,0,0,0,99,108,105,101,110,116,0,0,101,118,101,110,116,0,0,0,115,97,121,0,0,0,0,0,99,111,109,95,103,97,109,101,110,97,109,101,0,0,0,0,118,101,114,115,105,111,110,0,98,111,116,95,97,97,115,111,112,116,105,109,105,122,101,0,70,83,95,83,86,95,70,79,112,101,110,70,105,108,101,82,101,97,100,32,40,102,115,95,98,97,115,101,112,97,116,104,41,58,32,37,115,10,0,0,110,111,32,112,111,114,116,97,108,32,111,102,32,97,114,101,97,32,37,100,10,0,0,0,37,115,32,37,115,32,37,115,0,0,0,0,0,0,0,0,108,111,103,102,105,108,101,32,111,112,101,110,101,100,32,111,110,32,37,115,10,0,0,0,82,101,115,116,114,105,99,116,101,100,32,115,111,117,114,99,101,32,116,114,105,101,100,32,116,111,32,109,111,100,105,102,121,32,34,37,115,34,0,0,98,115,112,32,101,110,116,105,116,121,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,0,0,99,111,109,95,105,110,116,114,111,112,108,97,121,101,100,0,83,101,114,118,101,114,32,102,97,116,97,108,32,99,114,97,115,104,101,100,58,32,37,115,0,0,0,0,0,0,0,0,99,111,109,95,98,117,115,121,87,97,105,116,0,0,0,0,10,13,59,0,0,0,0,0,105,112,0,0,0,0,0,0,99,111,109,95,97,98,110,111,114,109,97,108,69,120,105,116,0,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,67,77,95,83,101,116,66,111,114,100,101,114,73,110,119,97,114,100,58,32,109,105,120,101,100,32,112,108,97,110,101,32,115,105,100,101,115,10,0,99,109,95,112,108,97,121,101,114,67,117,114,118,101,67,108,105,112,0,0,0,0,0,0,99,111,109,95,109,97,120,102,112,115,77,105,110,105,109,105,122,101,100,0,0,0,0,0,99,111,109,95,109,105,110,105,109,105,122,101,100,0,0,0,104,101,97,114,116,98,101,97,116,32,37,115,10,0,0,0,67,98,117,102,95,73,110,115,101,114,116,84,101,120,116,32,111,118,101,114,102,108,111,119,101,100,10,0,0,0,0,0,99,111,109,95,109,97,120,102,112,115,85,110,102,111,99,117,115,101,100,0,0,0,0,0,45,45,0,0,0,0,0,0,66,111,116,83,116,97,114,116,70,114,97,109,101,0,0,0,100,109,102,108,97,103,115,0,115,119,105,116,99,104,0,0,119,101,97,112,111,110,32,37,115,32,104,97,115,32,110,111,32,112,114,111,106,101,99,116,105,108,101,32,105,110,32,37,115,10,0,0,0,0,0,0,115,118,95,115,116,101,112,0,109,111,114,101,32,116,104,97,110,32,37,100,32,105,116,101,109,32,105,110,102,111,32,100,101,102,105,110,101,100,0,0,40,0,0,0,0,0,0,0,99,104,97,114,97,99,116,101,114,105,115,116,105,99,32,105,110,100,101,120,32,111,117,116,32,111,102,32,114,97,110,103,101,32,91,48,44,32,37,100,93,0,0,0,0,0,0,0,99,111,109,95,117,110,102,111,99,117,115,101,100,0,0,0,65,65,83,95,78,101,120,116,65,114,101,97,82,101,97,99,104,97,98,105,108,105,116,121,58,32,97,114,101,97,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,98,111,116,95,110,111,116,116,101,97,109,0,0,0,0,0,112,104,121,115,95,119,97,108,107,97,99,99,101,108,101,114,97,116,101,0,0,0,0,0,49,48,50,52,0,0,0,0,13,37,54,100,32,114,101,109,111,118,101,100,32,112,111,114,116,97,108,32,97,114,101,97,115,0,0,0,0,0,0,0,46,46,46,119,104,105,99,104,32,104,97,115,32,118,109,77,97,103,105,99,32,86,77,95,77,65,71,73,67,95,86,69,82,50,10,0,0,0,0,0,92,59,34,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,83,111,99,107,101,116,58,32,98,105,110,100,58,32,37,115,10,0,0,0,0,0,0,0,0,108,111,99,97,108,104,111,115,116,0,0,0,0,0,0,0,97,112,111,115,46,116,114,66,97,115,101,91,48,93,0,0,107,105,108,108,115,101,114,118,101,114,0,0,0,0,0,0,99,111,109,95,97,110,115,105,67,111,108,111,114,0,0,0,67,77,95,67,104,97,110,103,101,65,114,101,97,80,111,114,116,97,108,83,116,97,116,101,58,32,98,97,100,32,97,114,101,97,32,110,117,109,98,101,114,0,0,0,0,0,0,0,118,109,95,99,103,97,109,101,0,0,0,0,0,0,0,0,99,111,109,95,98,117,105,108,100,83,99,114,105,112,116,0,98,111,116,95,102,111,114,99,101,119,114,105,116,101,0,0,70,83,95,83,86,95,70,79,112,101,110,70,105,108,101,82,101,97,100,32,40,102,115,95,104,111,109,101,112,97,116,104,41,58,32,37,115,10,0,0,114,98,0,0,0,0,0,0,99,108,95,114,117,110,110,105,110,103,0,0,0,0,0,0,82,101,115,116,114,105,99,116,101,100,32,115,111,117,114,99,101,32,116,114,105,101,100,32,116,111,32,115,101,116,32,34,37,115,34,32,116,111,32,34,37,115,34,0,0,0,0,0,70,114,101,101,87,105,110,100,105,110,103,58,32,102,114,101,101,100,32,97,32,102,114,101,101,100,32,119,105,110,100,105,110,103,0,0,0,0,0,0,115,118,95,114,117,110,110,105,110,103,0,0,0,0,0,0,49,46,50,46,51,0,0,0,67,108,105,101,110,116,32,102,97,116,97,108,32,99,114,97,115,104,101,100,58,32,37,115,0,0,0,0,0,0,0,0,115,118,95,112,97,99,107,101,116,100,101,108,97,121,0,0,112,114,105,110,116,10,85,115,101,114,105,110,102,111,32,115,116,114,105,110,103,32,108,101,110,103,116,104,32,101,120,99,101,101,100,101,100,46,32,32,84,114,121,32,114,101,109,111,118,105,110,103,32,115,101,116,117,32,99,118,97,114,115,32,102,114,111,109,32,121,111,117,114,32,99,111,110,102,105,103,46,10,0,0,0,0,0,0,69,82,82,79,82,58,32,116,111,111,32,109,97,110,121,32,98,101,118,101,108,115,10,0,99,108,95,112,97,99,107,101,116,100,101,108,97,121,0,0,67,77,95,83,101,116,66,111,114,100,101,114,73,110,119,97,114,100,58,32,98,97,100,32,112,97,114,97,109,101,116,101,114,0,0,0,0,0,0,0,99,109,95,110,111,67,117,114,118,101,115,0,0,0,0,0,115,118,95,112,97,117,115,101,100,0,0,0,0,0,0,0,99,108,95,112,97,117,115,101,100,0,0,0,0,0,0,0,83,101,110,100,105,110,103,32,104,101,97,114,116,98,101,97,116,32,116,111,32,37,115,10,0,0,0,0,0,0,0,0,99,111,109,95,99,97,109,101,114,97,77,111,100,101,0,0,43,43,0,0,0,0,0,0,66,111,116,76,105,98,83,104,117,116,100,111,119,110,0,0,109,97,112,110,97,109,101,0,114,101,116,117,114,110,0,0,119,101,97,112,111,110,32,37,100,32,104,97,115,32,110,111,32,110,97,109,101,32,105,110,32,37,115,10,0,0,0,0,40,108,97,115,116,41,32,116,114,97,118,101,108,32,116,121,112,101,32,37,100,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,10,0,0,0,0,0,0,105,116,101,109,105,110,102,111,0,0,0,0,0,0,0,0,91,0,0,0,0,0,0,0,101,120,112,101,99,116,101,100,32,105,110,116,101,103,101,114,32,105,110,100,101,120,44,32,102,111,117,110,100,32,37,115,0,0,0,0,0,0,0,0,116,105,109,101,100,101,109,111,0,0,0,0,0,0,0,0,65,65,83,95,65,114,101,97,84,114,97,118,101,108,84,105,109,101,84,111,71,111,97,108,65,114,101,97,58,32,103,111,97,108,97,114,101,97,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,0,0,77,97,112,32,119,105,116,104,32,110,111,32,115,104,97,100,101,114,115,0,0,0,0,0,65,65,83,95,65,114,101,97,82,101,97,99,104,97,98,105,108,105,116,121,58,32,97,114,101,97,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,49,53,48,0,0,0,0,0,109,97,120,101,110,116,105,116,105,101,115,0,0,0,0,0,102,111,114,99,101,114,101,97,99,104,97,98,105,108,105,116,121,0,0,0,0,0,0,0,94,51,87,97,114,110,105,110,103,58,32,67,111,117,108,100,110,39,116,32,111,112,101,110,32,86,77,32,102,105,108,101,32,37,115,10,0,0,0,0,73,110,102,111,95,82,101,109,111,118,101,75,101,121,95,66,105,103,58,32,111,118,101,114,115,105,122,101,32,105,110,102,111,115,116,114,105,110,103,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,83,111,99,107,101,116,58,32,115,101,116,115,111,99,107,111,112,116,32,83,79,95,66,82,79,65,68,67,65,83,84,58,32,37,115,10,0,0,0,0,0,115,101,110,100,32,112,97,99,107,101,116,32,37,52,105,10,0,0,0,0,0,0,0,0,112,111,115,46,116,114,68,101,108,116,97,91,50,93,0,0,115,112,100,101,118,109,97,112,0,0,0,0,0,0,0,0,99,111,109,95,115,112,101,101,100,115,0,0,0,0,0,0,99,111,109,95,115,104,111,119,116,114,97,99,101,0,0,0,98,111,116,95,102,111,114,99,101,114,101,97,99,104,97,98,105,108,105,116,121,0,0,0,119,98,0,0,0,0,0,0,102,105,120,101,100,116,105,109,101,0,0,0,0,0,0,0,87,65,82,78,73,78,71,58,32,83,86,95,85,110,108,105,110,107,69,110,116,105,116,121,58,32,110,111,116,32,102,111,117,110,100,32,105,110,32,119,111,114,108,100,83,101,99,116,111,114,10,0,0,0,0,0,117,105,95,115,105,110,103,108,101,80,108,97,121,101,114,65,99,116,105,118,101,0,0,0,37,115,32,105,115,32,99,104,101,97,116,32,112,114,111,116,101,99,116,101,100,46,10,0,37,115,58,32,68,101,108,116,97,32,114,101,113,117,101,115,116,32,102,114,111,109,32,111,117,116,32,111,102,32,100,97,116,101,32,112,97,99,107,101,116,46,10,0,0,0,0,0,116,105,109,101,115,99,97,108,101,0,0,0,0,0,0,0,83,101,114,118,101,114,32,100,105,100,110,39,116,32,104,97,118,101,32,67,68,10,0,0,99,111,109,95,98,108,111,111,100,0,0,0,0,0,0,0,35,52,54,50,32,78,101,116,99,104,97,110,95,84,114,97,110,115,109,105,116,78,101,120,116,70,114,97,103,109,101,110,116,58,32,101,109,112,116,105,101,100,32,113,117,101,117,101,10,0,0,0,0,0,0,0,37,115,10,0,0,0,0,0,108,111,99,97,108,104,111,115,116,0,0,0,0,0,0,0,56,53,0,0,0,0,0,0,77,65,88,95,70,65,67,69,84,83,0,0,0,0,0,0,48,0,0,0,0,0,0,0,99,111,109,95,109,97,120,102,112,115,0,0,0,0,0,0,49,0,0,0,0,0,0,0,103,97,109,101,95,114,101,115,116,97,114,116,0,0,0,0,105,110,99,111,114,114,101,99,116,32,100,97,116,97,32,99,104,101,99,107,0,0,0,0,45,61,0,0,0,0,0,0,34,0,0,0,0,0,0,0,49,48,50,52,0,0,0,0,58,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,100,101,102,105,110,105,116,105,111,110,32,37,115,32,105,110,32,37,115,10,0,0,0,0,99,108,105,101,110,116,32,37,100,32,100,105,100,110,39,116,32,102,105,110,100,32,106,117,109,112,112,97,100,32,114,101,97,99,104,97,98,105,108,105,116,121,10,0,0,0,0,0,99,111,117,110,108,100,110,39,116,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,125,0,0,0,0,0,0,125,0,0,0,0,0,0,0,119,114,105,116,101,99,111,110,102,105,103,0,0,0,0,0,65,65,83,95,65,114,101,97,84,114,97,118,101,108,84,105,109,101,84,111,71,111,97,108,65,114,101,97,58,32,97,114,101,97,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,65,65,83,95,77,65,88,95,82,69,65,67,72,65,66,73,76,73,84,89,83,73,90,69,10,0,0,0,0,0,0,0,112,104,121,115,95,109,97,120,115,119,105,109,118,101,108,111,99,105,116,121,0,0,0,0,49,50,56,0,0,0,0,0,102,111,114,99,101,99,108,117,115,116,101,114,105,110,103,0,70,97,105,108,101,100,46,10,0,0,0,0,0,0,0,0,73,110,102,111,95,82,101,109,111,118,101,75,101,121,58,32,111,118,101,114,115,105,122,101,32,105,110,102,111,115,116,114,105,110,103,0,0,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,83,111,99,107,101,116,58,32,105,111,99,116,108,32,70,73,79,78,66,73,79,58,32,37,115,10,0,0,0,0,0,0,0,37,115,58,102,114,97,103,109,101,110,116,76,101,110,103,116,104,32,37,105,32,62,32,109,115,103,45,62,109,97,120,115,105,122,101,10,0,0,0,0,97,112,111,115,46,116,114,66,97,115,101,91,49,93,0,0,115,112,109,97,112,0,0,0,99,104,97,110,103,101,86,101,99,116,111,114,115,0,0,0,113,117,105,116,0,0,0,0,98,111,116,95,102,111,114,99,101,99,108,117,115,116,101,114,105,110,103,0,0,0,0,0,119,114,105,116,105,110,103,32,116,111,58,32,37,115,10,0,102,114,101,101,122,101,0,0,37,115,32,119,105,108,108,32,98,101,32,99,104,97,110,103,101,100,32,117,112,111,110,32,114,101,115,116,97,114,116,105,110,103,46,10,0,0,0,0,99,114,97,115,104,0,0,0,83,101,114,118,101,114,32,100,105,100,110,39,116,32,104,97,118,101,32,67,68,0,0,0,101,114,114,111,114,0,0,0,78,69,84,95,67,111,109,112,97,114,101,66,97,115,101,65,100,114,58,32,98,97,100,32,97,100,100,114,101,115,115,32,116,121,112,101,10,0,0,0,118,115,116,114,32,60,118,97,114,105,97,98,108,101,110,97,109,101,62,32,58,32,101,120,101,99,117,116,101,32,97,32,118,97,114,105,97,98,108,101,32,99,111,109,109,97,110,100,10,0,0,0,0,0,0,0,37,115,58,114,101,99,111,110,110,101,99,116,32,114,101,106,101,99,116,101,100,32,58,32,116,111,111,32,115,111,111,110,10,0,0,0,0,0,0,0,115,101,116,101,110,118,0,0,99,109,95,110,111,65,114,101,97,115,0,0,0,0,0,0,99,111,109,95,97,108,116,105,118,101,99,0,0,0,0,0,93,37,115,10,0,0,0,0,67,111,117,108,100,110,39,116,32,114,101,115,111,108,118,101,32,97,100,100,114,101,115,115,58,32,37,115,10,0,0,0,115,104,111,119,112,97,99,107,101,116,115,0,0,0,0,0,32,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,116,111,111,32,102,97,114,32,98,97,99,107,0,0,0,101,120,112,101,99,116,101,100,32,97,32,99,111,109,109,97,44,32,102,111,117,110,100,32,37,115,0,0,0,0,0,0,43,61,0,0,0,0,0,0,116,111,111,32,102,101,119,32,100,101,102,105,110,101,32,112,97,114,109,115,0,0,0,0,109,97,120,101,110,116,105,116,105,101,115,0,0,0,0,0,115,119,105,116,99,104,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,100,101,102,97,117,108,116,0,0,0,0,99,108,95,112,97,117,115,101,100,0,0,0,0,0,0,0,109,111,114,101,32,116,104,97,110,32,37,100,32,112,114,111,106,101,99,116,105,108,101,115,32,100,101,102,105,110,101,100,32,105,110,32,37,115,10,0,99,108,105,101,110,116,32,37,100,58,32,111,110,32,102,117,110,99,95,98,111,98,98,105,110,103,32,119,105,116,104,111,117,116,32,114,101,97,99,104,97,98,105,108,105,116,121,10,0,0,0,0,0,0,0,0,98,111,116,102,105,108,101,115,0,0,0,0,0,0,0,0,125,0,0,0,0,0,0,0,123,0,0,0,0,0,0,0,32,32,32,32,37,115,10,0,52,48,57,54,0,0,0,0,65,65,83,95,66,101,115,116,82,101,97,99,104,97,98,108,101,65,114,101,97,58,32,97,97,115,32,110,111,116,32,108,111,97,100,101,100,10,0,0,99,109,100,32,37,53,100,58,32,37,115,10,0,0,0,0,112,104,121,115,95,109,97,120,99,114,111,117,99,104,118,101,108,111,99,105,116,121,0,0,109,97,120,99,108,105,101,110,116,115,0,0,0,0,0,0,37,54,100,32,102,111,114,99,101,100,32,112,111,114,116,97,108,32,97,114,101,97,115,10,0,0,0,0,0,0,0,0,76,111,97,100,105,110,103,32,118,109,32,102,105,108,101,32,37,115,46,46,46,10,0,0,73,110,102,111,95,86,97,108,117,101,70,111,114,75,101,121,58,32,111,118,101,114,115,105,122,101,32,105,110,102,111,115,116,114,105,110,103,0,0,0,87,65,82,78,73,78,71,58,32,78,69,84,95,73,80,83,111,99,107,101,116,58,32,115,111,99,107,101,116,58,32,37,115,10,0,0,0,0,0,0,37,115,58,105,108,108,101,103,97,108,32,102,114,97,103,109,101,110,116,32,108,101,110,103,116,104,10,0,0,0,0,0,112,111,115,46,116,114,66,97,115,101,91,50,93,0,0,0,100,101,118,109,97,112,0,0,32,32,32,32,37,115,32,61,32,34,37,115,34,10,0,0,102,115,95,109,97,110,105,102,101,115,116,0,0,0,0,0,98,111,116,95,118,105,115,117,97,108,105,122,101,106,117,109,112,112,97,100,115,0,0,0,70,83,95,83,86,95,70,79,112,101,110,70,105,108,101,87,114,105,116,101,58,32,37,115,10,0,0,0,0,0,0,0,102,115,95,99,100,110,0,0,37,115,32,105,115,32,119,114,105,116,101,32,112,114,111,116,101,99,116,101,100,46,10,0,93,0,0,0,0,0,0,0,105,110,99,111,114,114,101,99,116,32,104,101,97,100,101,114,32,99,104,101,99,107,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100,101,0,0,0,67,111,109,95,82,97,110,100,111,109,66,121,116,101,115,58,32,117,115,105,110,103,32,119,101,97,107,32,114,97,110,100,111,109,105,122,97,116,105,111,110,10,0,0,0,0,0,0,119,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,45,0,0,0,0,0,0,0,83,101,114,118,101,114,32,99,114,97,115,104,101,100,58,32,37,115,0,0,0,0,0,0,32,34,0,0,0,0,0,0,101,120,101,99,105,110,103,32,37,115,10,0,0,0,0,0,60,60,61,0,0,0,0,0,113,112,111,114,116,0,0,0,37,52,105,32,116,114,97,99,101,115,32,32,40,37,105,98,32,37,105,112,41,32,37,52,105,32,112,111,105,110,116,115,10,0,0,0,0,0,0,0,67,77,95,76,111,97,100,77,97,112,58,32,78,85,76,76,32,110,97,109,101,0,0,0,102,105,108,101,32,37,115,32,115,116,105,108,108,32,111,112,101,110,32,105,110,32,112,114,101,99,111,109,112,105,108,101,114,10,0,0,0,0,0,0,102,114,97,109,101,58,37,105,32,97,108,108,58,37,51,105,32,115,118,58,37,51,105,32,101,118,58,37,51,105,32,99,108,58,37,51,105,32,103,109,58,37,51,105,32,114,102,58,37,51,105,32,98,107,58,37,51,105,10,0,0,0,0,0,37,115,32,114,101,99,117,114,115,105,118,101,108,121,32,105,110,99,108,117,100,101,100,0,70,83,95,70,105,108,101,70,111,114,72,97,110,100,108,101,58,32,78,85,76,76,0,0,48,0,0,0,0,0,0,0,100,101,100,105,99,97,116,101,100,32,115,101,116,32,116,111,32,48,0,0,0,0,0,0,37,115,58,32,105,110,118,97,108,105,100,32,101,110,116,105,116,121,32,110,117,109,98,101,114,32,37,100,44,32,91,48,44,32,37,100,93,10,0,0,37,115,32,104,97,115,32,110,111,32,73,80,118,54,32,97,100,100,114,101,115,115,46,10,0,0,0,0,0,0,0,0,115,97,121,95,116,101,97,109,32,37,115,0,0,0,0,0,102,111,117,110,100,32,37,115,0,0,0,0,0,0,0,0,70,83,95,70,105,108,101,70,111,114,72,97,110,100,108,101,58,32,99,97,110,39,116,32,103,101,116,32,70,73,76,69,32,111,110,32,122,105,112,32,102,105,108,101,0,0,0,0,100,101,100,105,99,97,116,101,100,0,0,0,0,0,0,0,110,101,103,97,116,105,118,101,32,118,97,108,117,101,32,115,101,116,32,116,111,32,122,101,114,111,0,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100,101,0,0,0,44,0,0,0,0,0,0,0,37,61,0,0,0,0,0,0,41,0,0,0,0,0,0,0,49,50,56,0,0,0,0,0,99,97,115,101,0,0,0,0,119,101,97,112,111,110,32,115,116,97,116,101,32,104,97,110,100,108,101,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,0,0,109,97,112,95,114,101,115,116,97,114,116,32,48,0,0,0,32,105,110,116,101,103,101,114,0,0,0,0,0,0,0,0,112,114,111,106,101,99,116,105,108,101,105,110,102,111,0,0,99,108,105,101,110,116,32,37,100,58,32,111,110,32,102,117,110,99,95,112,108,97,116,32,119,105,116,104,111,117,116,32,114,101,97,99,104,97,98,105,108,105,116,121,10,0,0,0,109,97,120,95,105,116,101,109,105,110,102,111,32,61,32,37,100,10,0,0,0,0,0,0,70,83,95,70,105,108,101,70,111,114,72,97,110,100,108,101,58,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,86,77,95,67,114,101,97,116,101,32,111,110,32,103,97,109,101,32,102,97,105,108,101,100,0,0,0,0,0,0,0,0,123,0,0,0,0,0,0,0,72,105,116,99,104,32,119,97,114,110,105,110,103,58,32,37,105,32,109,115,101,99,32,102,114,97,109,101,32,116,105,109,101,10,0,0,0,0,0,0,115,107,105,108,108,0,0,0,109,97,120,95,114,111,117,116,105,110,103,99,97,99,104,101,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,109,111,118,101,32,115,116,97,116,101,32,37,100,10,0,0,116,114,105,103,103,101,114,95,112,117,115,104,32,110,111,116,32,105,110,32,97,110,121,32,106,117,109,112,32,112,97,100,32,97,114,101,97,10,0,0,112,104,121,115,95,109,97,120,119,97,108,107,118,101,108,111,99,105,116,121,0,0,0,0,108,111,97,100,101,100,32,37,115,10,0,0,0,0,0,0,97,114,101,97,32,37,100,32,105,115,32,97,32,102,111,114,99,101,100,32,112,111,114,116,97,108,32,97,114,101,97,13,10,0,0,0,0,0,0,0,118,109,47,37,115,46,113,118,109,0,0,0,0,0,0,0,32,46,46,46,32,0,0,0,79,112,101,110,105,110,103,32,73,80,32,115,111,99,107,101,116,58,32,48,46,48,46,48,46,48,58,37,105,10,0,0,37,115,58,68,114,111,112,112,101,100,32,97,32,109,101,115,115,97,103,101,32,102,114,97,103,109,101,110,116,10,0,0,109,111,100,101,108,0,0,0,71,101,110,101,116,105,99,80,97,114,101,110,116,115,65,110,100,67,104,105,108,100,83,101,108,101,99,116,105,111,110,58,32,116,111,111,32,102,101,119,32,118,97,108,105,100,32,98,111,116,115,10,0,0,0,0,32,102,108,111,97,116,0,0,112,111,115,46,116,114,68,101,108,116,97,91,49,93,0,0,37,115,58,32,78,111,116,32,97,108,108,111,119,101,100,32,116,111,32,109,97,110,105,112,117,108,97,116,101,32,39,37,115,39,32,100,117,101,32,116,111,32,37,115,32,101,120,116,101,110,115,105,111,110,0,0,109,97,112,0,0,0,0,0,87,114,105,116,105,110,103,32,37,115,46,10,0,0,0,0,32,117,110,115,105,103,110,101,100,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,104,97,116,32,115,116,97,116,101,32,37,100,10,0,0,46,113,118,109,0,0,0,0,46,99,102,103,0,0,0,0,50,0,0,0,0,0,0,0,70,105,108,101,115,121,115,116,101,109,32,99,97,108,108,32,109,97,100,101,32,119,105,116,104,111,117,116,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,0,0,0,0,0,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,37,100,10,0,0,0,109,97,120,95,97,97,115,108,105,110,107,115,0,0,0,0,37,115,0,0,0,0,0,0,32,108,111,110,103,0,0,0,37,100,32,112,111,114,116,97,108,32,99,97,99,104,101,32,117,112,100,97,116,101,115,10,0,0,0,0,0,0,0,0,46,106,115,0,0,0,0,0,85,115,97,103,101,58,32,119,114,105,116,101,99,111,110,102,105,103,32,60,102,105,108,101,110,97,109,101,62,10,0,0,37,115,32,105,115,32,114,101,97,100,32,111,110,108,121,46,10,0,0,0,0,0,0,0,109,111,100,101,108,0,0,0,98,105,110,97,114,121,0,0,70,83,95,72,97,110,100,108,101,70,111,114,70,105,108,101,58,32,110,111,110,101,32,102,114,101,101,0,0,0,0,0,113,51,99,111,110,102,105,103,95,115,101,114,118,101,114,46,99,102,103,0,0,0,0,0,54,0,0,0,0,0,0,0,77,83,71,95,67,111,112,121,58,32,99,97,110,39,116,32,99,111,112,121,32,105,110,116,111,32,97,32,115,109,97,108,108,101,114,32,109,115,103,95,116,32,98,117,102,102,101,114,0,0,0,0,0,0,0,0,65,65,83,32,105,110,105,116,105,97,108,105,122,101,100,46,10,0,0,0,0,0,0,0,99,97,110,39,116,32,115,101,101,107,32,116,111,32,97,97,115,32,108,117,109,112,10,0,111,99,116,97,108,0,0,0,65,65,83,95,69,110,116,105,116,121,73,110,102,111,58,32,97,97,115,119,111,114,108,100,32,110,111,116,32,105,110,105,116,105,97,108,105,122,101,100,10,0,0,0,0,0,0,0,37,100,32,102,105,108,101,115,32,105,110,32,112,107,51,32,102,105,108,101,115,10,0,0,47,47,32,103,101,110,101,114,97,116,101,100,32,98,121,32,113,117,97,107,101,44,32,100,111,32,110,111,116,32,109,111,100,105,102,121,10,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,10,69,82,82,79,82,58,32,37,115,10,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,10,0,0,0,0,112,111,114,116,97,108,32,97,114,101,97,32,37,100,32,105,115,32,115,101,112,101,114,97,116,105,110,103,32,109,111,114,101,32,116,104,97,110,32,116,119,111,32,99,108,117,115,116,101,114,115,13,10,0,0,0,37,108,102,32,37,108,102,32,37,108,102,0,0,0,0,0,99,111,117,108,100,110,39,116,32,101,120,101,99,32,37,115,10,0,0,0,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,0,50,0,0,0,0,0,0,0,67,111,117,108,100,110,39,116,32,119,114,105,116,101,32,37,115,46,10,0,0,0,0,0,114,43,98,0,0,0,0,0,99,104,97,108,108,101,110,103,101,0,0,0,0,0,0,0,80,97,114,115,101,77,101,115,104,58,32,77,65,88,95,80,65,84,67,72,95,86,69,82,84,83,0,0,0,0,0,0,102,115,95,98,97,115,101,103,97,109,101,0,0,0,0,0,99,111,109,95,104,111,109,101,112,97,116,104,0,0,0,0,101,120,112,101,99,116,101,100,32,97,32,37,115,44,32,102,111,117,110,100,32,37,115,0,102,115,95,99,111,109,112,108,101,116,101,77,97,110,105,102,101,115,116,0,0,0,0,0,98,97,115,101,113,51,0,0,108,111,111,112,98,97,99,107,0,0,0,0,0,0,0,0,82,101,115,111,108,118,105,110,103,32,37,115,32,40,73,80,118,54,41,10,0,0,0,0,48,0,0,0,0,0,0,0,112,117,110,99,116,117,97,116,105,111,110,0,0,0,0,0,102,115,95,109,97,110,105,102,101,115,116,0,0,0,0,0,99,111,109,95,98,97,115,101,103,97,109,101,0,0,0,0,105,110,118,97,108,105,100,32,108,105,116,101,114,97,108,47,108,101,110,103,116,104,32,99,111,100,101,0,0,0,0,0,66,85,71,58,32,110,111,32,115,117,98,32,115,116,114,117,99,116,117,114,101,32,100,101,102,105,110,101,100,0,0,0,47,61,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,99,111,109,109,97,39,115,0,0,0,0,0,0,0,0,109,97,120,99,108,105,101,110,116,115,0,0,0,0,0,0,100,101,102,97,117,108,116,0,110,101,120,116,109,97,112,0,110,97,109,101,0,0,0,0,119,101,97,112,111,110,32,105,110,102,111,32,110,117,109,98,101,114,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,32,105,110,32,37,115,10,0,0,0,0,0,0,0,116,114,97,118,101,108,32,116,121,112,101,32,37,100,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,10,0,0,0,0,0,50,53,54,0,0,0,0,0,99,111,110,116,101,110,116,46,113,117,97,107,101,106,115,46,99,111,109,0,0,0,0,0,118,109,95,103,97,109,101,0,109,111,114,101,32,116,104,97,110,32,51,50,32,99,111,110,116,101,120,116,32,108,101,118,101,108,115,0,0,0,0,0,99,111,109,95,115,116,97,110,100,97,108,111,110,101,0,0,99,111,117,110,108,100,110,39,116,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,65,65,83,95,65,114,101,97,73,110,102,111,58,32,97,114,101,97,110,117,109,32,37,100,32,111,117,116,32,111,102,32,114,97,110,103,101,10,0,0,114,111,117,116,101,32,99,97,99,104,101,32,100,117,109,112,32,104,97,115,32,119,114,111,110,103,32,118,101,114,115,105,111,110,32,37,100,44,32,115,104,111,117,108,100,32,98,101,32,37,100,10,0,0,0,0,116,114,105,103,103,101,114,95,112,117,115,104,0,0,0,0,51,50,48,0,0,0,0,0,77,83,71,95,87,114,105,116,101,66,105,116,115,58,32,98,97,100,32,98,105,116,115,32,37,105,0,0,0,0,0,0,109,97,112,115,47,37,115,46,97,97,115,0,0,0,0,0,112,111,114,116,97,108,32,97,114,101,97,32,37,100,32,104,97,115,32,110,111,32,98,97,99,107,32,99,108,117,115,116,101,114,13,10,0,0,0,0,37,105,32,115,121,109,98,111,108,115,32,112,97,114,115,101,100,32,102,114,111,109,32,37,115,10,0,0,0,0,0,0,67,111,109,95,115,112,114,105,110,116,102,58,32,79,117,116,112,117,116,32,108,101,110,103,116,104,32,37,100,32,116,111,111,32,115,104,111,114,116,44,32,114,101,113,117,105,114,101,32,37,100,32,98,121,116,101,115,46,10,0,0,0,0,0,79,112,101,110,105,110,103,32,73,80,32,115,111,99,107,101,116,58,32,37,115,58,37,105,10,0,0,0,0,0,0,0,37,115,58,68,114,111,112,112,101,100,32,37,105,32,112,97,99,107,101,116,115,32,97,116,32,37,105,10,0,0,0,0,110,117,109,98,101,114,0,0,112,111,115,46,116,114,68,101,108,116,97,91,48,93,0,0,102,115,95,99,100,110,0,0,115,101,99,116,111,114,108,105,115,116,0,0,0,0,0,0,100,101,118,101,108,111,112,101,114,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,107,105,99,107,0,0,0,0,69,114,114,111,114,32,100,117,114,105,110,103,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,0,0,0,0,0,98,111,116,95,109,97,120,100,101,98,117,103,112,111,108,121,115,0,0,0,0,0,0,0,115,116,114,105,110,103,0,0,102,115,95,100,101,98,117,103,0,0,0,0,0,0,0,0,70,101,98,32,50,51,32,50,48,49,52,0,0,0,0,0,108,97,116,99,104,101,100,58,32,34,37,115,34,10,0,0,99,111,117,108,100,110,39,116,32,114,101,97,100,32,101,120,112,101,99,116,101,100,32,116,111,107,101,110,0,0,0,0,45,45,45,45,45,32,70,83,95,83,116,97,114,116,117,112,32,45,45,45,45,45,10,0,101,109,115,99,114,105,112,116,101,110,45,0,0,0,0,0,101,120,112,101,99,116,101,100,32,37,115,44,32,102,111,117,110,100,32,37,115,0,0,0,73,110,118,97,108,105,100,32,103,97,109,101,32,102,111,108,100,101,114,0,0,0,0,0,105,111,113,51,32,49,46,51,54,95,71,73,84,95,52,102,55,100,55,98,102,45,50,48,49,52,45,48,50,45,48,49,0,0,0,0,0,0,0,0,46,99,102,103,0,0,0,0,99,111,117,108,100,110,39,116,32,102,105,110,100,32,101,120,112,101,99,116,101,100,32,37,115,0,0,0,0,0,0,0,101,120,101,99,32,113,51,99,111,110,102,105,103,95,115,101,114,118,101,114,46,99,102,103,10,0,0,0,0,0,0,0,37,115,32,37,115,32,37,115,10,0,0,0,0,0,0,0,32,32,32,32,114,101,106,101,99,116,101,100,32,99,111,110,110,101,99,116,32,102,114,111,109,32,118,101,114,115,105,111,110,32,37,105,10,0,0,0,67,77,111,100,95,76,111,97,100,66,114,117,115,104,83,105,100,101,115,58,32,98,97,100,32,115,104,97,100,101,114,78,117,109,58,32,37,105,0,0,115,116,114,105,110,103,32,108,111,110,103,101,114,32,116,104,97,110,32,77,65,88,95,84,79,75,69,78,32,37,100,0,70,83,95,70,79,112,101,110,70,105,108,101,66,121,77,111,100,101,58,32,98,97,100,32,109,111,100,101,0,0,0,0,102,115,95,103,97,109,101,0,102,111,117,110,100,32,36,32,97,116,32,101,110,100,32,111,102,32,108,105,110,101,0,0,114,99,104,97,116,46,99,0,102,115,95,103,97,109,101,0,71,97,109,101,32,100,105,114,101,99,116,111,114,121,32,99,104,97,110,103,101,100,0,0,37,115,32,104,97,115,32,110,111,32,73,80,118,52,32,97,100,100,114,101,115,115,46,10,0,0,0,0,0,0,0,0,102,111,117,110,100,32,36,32,119,105,116,104,111,117,116,32,110,97,109,101,0,0,0,0,114,99,104,97,116,102,105,108,101,0,0,0,0,0,0,0,106,117,109,112,112,97,100,95,101,110,116,0,0,0,0,0,102,115,95,104,111,109,101,112,97,116,104,0,0,0,0,0,101,120,101,99,32,97,117,116,111,101,120,101,99,46,99,102,103,10,0,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,115,32,115,101,116,0,0,0,101,120,101,99,32,113,51,99,111,110,102,105,103,95,115,101,114,118,101,114,46,99,102,103,10,0,0,0,0,0,0,0,83,121,115,95,85,110,108,111,97,100,68,108,108,40,78,85,76,76,41,10,0,0,0,0,117,110,107,110,111,119,110,32,115,116,114,117,99,116,117,114,101,32,102,105,101,108,100,32,37,115,0,0,0,0,0,0,42,61,0,0,0,0,0,0,44,0,0,0,0,0,0,0,45,45,45,45,45,45,45,32,66,111,116,76,105,98,32,73,110,105,116,105,97,108,105,122,97,116,105,111,110,32,45,45,45,45,45,45,45,10,0,0,123,0,0,0,0,0,0,0,101,118,97,108,105,110,116,0,115,118,95,114,117,110,110,105,110,103,0,0,0,0,0,0,119,101,97,112,111,110,105,110,102,111,0,0,0,0,0,0,48,0,0,0,0,0,0,0,66,111,116,70,117,110,99,66,111,98,83,116,97,114,116,69,110,100,58,32,110,111,32,101,110,116,105,116,121,32,119,105,116,104,32,109,111,100,101,108,32,37,100,10,0,0,0,0,109,97,120,95,105,116,101,109,105,110,102,111,0,0,0,0,103,114,97,112,112,108,101,80,111,105,110,116,91,50,93,0,102,115,95,98,97,115,101,112,97,116,104,0,0,0,0,0,113,97,103,97,109,101,0,0,99,111,117,110,108,100,110,39,116,32,108,111,97,100,32,37,115,10,0,0,0,0,0,0,97,108,108,98,111,116,115,0,98,111,116,102,105,108,101,115,0,0,0,0,0,0,0,0,65,65,83,95,76,105,110,107,69,110,116,105,116,121,58,32,115,116,97,99,107,32,111,118,101,114,102,108,111,119,10,0,37,115,32,105,115,32,110,111,116,32,97,32,114,111,117,116,101,32,99,97,99,104,101,32,100,117,109,112,10,0,0,0,99,108,97,115,115,110,97,109,101,0,0,0,0,0,0,0,101,120,101,99,32,100,101,102,97,117,108,116,46,99,102,103,10,0,0,0,0,0,0,0,112,104,121,115,95,109,97,120,118,101,108,111,99,105,116,121,0,0,0,0,0,0,0,0,115,97,118,101,114,111,117,116,105,110,103,99,97,99,104,101,0,0,0,0,0,0,0,0,112,111,114,116,97,108,32,97,114,101,97,32,37,100,32,104,97,115,32,110,111,32,102,114,111,110,116,32,99,108,117,115,116,101,114,13,10,0,0,0,87,65,82,78,73,78,71,58,32,105,110,99,111,109,112,108,101,116,101,32,108,105,110,101,32,97,116,32,101,110,100,32,111,102,32,102,105,108,101,10,0,0,0,0,0,0,0,0,81,95,115,116,114,99,97,116,58,32,97,108,114,101,97,100,121,32,111,118,101,114,102,108,111,119,101,100,0,0,0,0,73,80,54,58,32,37,115,10,0,0,0,0,0,0,0,0,37,115,58,79,117,116,32,111,102,32,111,114,100,101,114,32,112,97,99,107,101,116,32,37,105,32,97,116,32,37,105,10,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,112,114,101,99,111,109,112,105,108,101,114,32,100,105,114,101,99,116,105,118,101,32,37,115,0,0,0,0,0,0,0,0,110,111,99,104,97,116,0,0,112,111,115,46,116,114,66,97,115,101,91,49,93,0,0,0,103,114,97,112,112,108,101,80,111,105,110,116,91,49,93,0,67,111,117,108,100,110,39,116,32,108,111,97,100,32,100,101,102,97,117,108,116,46,99,102,103,0,0,0,0,0,0,0,109,97,112,95,114,101,115,116,97,114,116,0,0,0,0,0,97,108,108,0,0,0,0,0,37,115,32,117,110,100,101,102,105,110,101,100,10,0,0,0,102,111,117,110,100,32,35,32,97,116,32,101,110,100,32,111,102,32,108,105,110,101,0,0,109,97,116,99,104,46,99,0,103,114,97,112,112,108,101,80,111,105,110,116,91,48,93,0,100,101,102,97,117,108,116,46,99,102,103,0,0,0,0,0,85,115,97,103,101,58,32,107,105,99,107,32,60,112,108,97,121,101,114,32,110,97,109,101,62,10,107,105,99,107,32,97,108,108,32,61,32,107,105,99,107,32,101,118,101,114,121,111,110,101,10,107,105,99,107,32,97,108,108,98,111,116,115,32,61,32,107,105,99,107,32,97,108,108,32,98,111,116,115,10,0,0,0,0,0,0,0,0,98,111,116,95,100,101,118,101,108,111,112,101,114,0,0,0,98,111,116,95,100,101,98,117,103,0,0,0,0,0,0,0,83,86,95,66,111,116,70,114,101,101,67,108,105,101,110,116,58,32,98,97,100,32,99,108,105,101,110,116,78,117,109,58,32,37,105,0,0,0,0,0,70,83,95,83,86,95,70,79,112,101,110,70,105,108,101,87,114,105,116,101,0,0,0,0,70,83,95,72,111,109,101,82,101,109,111,118,101,0,0,0,70,83,95,70,79,112,101,110,70,105,108,101,87,114,105,116,101,0,0,0,0,0,0,0,70,83,95,70,79,112,101,110,70,105,108,101,65,112,112,101,110,100,0,0,0,0,0,0,70,83,95,70,67,114,101,97,116,101,79,112,101,110,80,105,112,101,70,105,108,101,0,0,0,0,0,0,0,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,36,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,193,0,0,128,193,0,0,0,193,0,0,0,0,0,0,128,65,0,0,128,65,0,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,193,0,0,112,193,0,0,112,193,0,0,0,0,0,0,112,65,0,0,112,65,0,0,112,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+51200);
|
|
|
|
|
|
|
|
var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
|
|
|
|
assert(tempDoublePtr % 8 == 0);
|
|
|
|
function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
|
|
|
|
HEAP8[tempDoublePtr] = HEAP8[ptr];
|
|
|
|
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
|
|
|
|
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
|
|
|
|
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
|
|
|
|
}
|
|
|
|
function copyTempDouble(ptr) {
|
|
|
|
HEAP8[tempDoublePtr] = HEAP8[ptr];
|
|
|
|
HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
|
|
|
|
HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
|
|
|
|
HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
|
|
|
|
HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
|
|
|
|
HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
|
|
|
|
HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
|
|
|
|
HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function _emscripten_memcpy_big(dest, src, num) {
|
|
HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
|
|
return dest;
|
|
}
|
|
Module["_memcpy"] = _memcpy;var _llvm_memcpy_p0i8_p0i8_i32=_memcpy;
|
|
|
|
function _llvm_lifetime_start() {}
|
|
|
|
function _llvm_lifetime_end() {}
|
|
|
|
var _llvm_va_start=undefined;
|
|
|
|
|
|
|
|
|
|
|
|
Module["_strlen"] = _strlen;
|
|
|
|
function __reallyNegative(x) {
|
|
return x < 0 || (x === 0 && (1/x) === -Infinity);
|
|
}function __formatString(format, varargs) {
|
|
var textIndex = format;
|
|
var argIndex = 0;
|
|
function getNextArg(type) {
|
|
// NOTE: Explicitly ignoring type safety. Otherwise this fails:
|
|
// int x = 4; printf("%c\n", (char)x);
|
|
var ret;
|
|
if (type === 'double') {
|
|
ret = HEAPF64[(((varargs)+(argIndex))>>3)];
|
|
} else if (type == 'i64') {
|
|
ret = [HEAP32[(((varargs)+(argIndex))>>2)],
|
|
HEAP32[(((varargs)+(argIndex+8))>>2)]];
|
|
argIndex += 8; // each 32-bit chunk is in a 64-bit block
|
|
|
|
} else {
|
|
type = 'i32'; // varargs are always i32, i64, or double
|
|
ret = HEAP32[(((varargs)+(argIndex))>>2)];
|
|
}
|
|
argIndex += Math.max(Runtime.getNativeFieldSize(type), Runtime.getAlignSize(type, null, true));
|
|
return ret;
|
|
}
|
|
|
|
var ret = [];
|
|
var curr, next, currArg;
|
|
while(1) {
|
|
var startTextIndex = textIndex;
|
|
curr = HEAP8[(textIndex)];
|
|
if (curr === 0) break;
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
if (curr == 37) {
|
|
// Handle flags.
|
|
var flagAlwaysSigned = false;
|
|
var flagLeftAlign = false;
|
|
var flagAlternative = false;
|
|
var flagZeroPad = false;
|
|
var flagPadSign = false;
|
|
flagsLoop: while (1) {
|
|
switch (next) {
|
|
case 43:
|
|
flagAlwaysSigned = true;
|
|
break;
|
|
case 45:
|
|
flagLeftAlign = true;
|
|
break;
|
|
case 35:
|
|
flagAlternative = true;
|
|
break;
|
|
case 48:
|
|
if (flagZeroPad) {
|
|
break flagsLoop;
|
|
} else {
|
|
flagZeroPad = true;
|
|
break;
|
|
}
|
|
case 32:
|
|
flagPadSign = true;
|
|
break;
|
|
default:
|
|
break flagsLoop;
|
|
}
|
|
textIndex++;
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
}
|
|
|
|
// Handle width.
|
|
var width = 0;
|
|
if (next == 42) {
|
|
width = getNextArg('i32');
|
|
textIndex++;
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
} else {
|
|
while (next >= 48 && next <= 57) {
|
|
width = width * 10 + (next - 48);
|
|
textIndex++;
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
}
|
|
}
|
|
|
|
// Handle precision.
|
|
var precisionSet = false, precision = -1;
|
|
if (next == 46) {
|
|
precision = 0;
|
|
precisionSet = true;
|
|
textIndex++;
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
if (next == 42) {
|
|
precision = getNextArg('i32');
|
|
textIndex++;
|
|
} else {
|
|
while(1) {
|
|
var precisionChr = HEAP8[((textIndex+1)|0)];
|
|
if (precisionChr < 48 ||
|
|
precisionChr > 57) break;
|
|
precision = precision * 10 + (precisionChr - 48);
|
|
textIndex++;
|
|
}
|
|
}
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
}
|
|
if (precision === -1) {
|
|
precision = 6; // Standard default.
|
|
precisionSet = false;
|
|
}
|
|
|
|
// Handle integer sizes. WARNING: These assume a 32-bit architecture!
|
|
var argSize;
|
|
switch (String.fromCharCode(next)) {
|
|
case 'h':
|
|
var nextNext = HEAP8[((textIndex+2)|0)];
|
|
if (nextNext == 104) {
|
|
textIndex++;
|
|
argSize = 1; // char (actually i32 in varargs)
|
|
} else {
|
|
argSize = 2; // short (actually i32 in varargs)
|
|
}
|
|
break;
|
|
case 'l':
|
|
var nextNext = HEAP8[((textIndex+2)|0)];
|
|
if (nextNext == 108) {
|
|
textIndex++;
|
|
argSize = 8; // long long
|
|
} else {
|
|
argSize = 4; // long
|
|
}
|
|
break;
|
|
case 'L': // long long
|
|
case 'q': // int64_t
|
|
case 'j': // intmax_t
|
|
argSize = 8;
|
|
break;
|
|
case 'z': // size_t
|
|
case 't': // ptrdiff_t
|
|
case 'I': // signed ptrdiff_t or unsigned size_t
|
|
argSize = 4;
|
|
break;
|
|
default:
|
|
argSize = null;
|
|
}
|
|
if (argSize) textIndex++;
|
|
next = HEAP8[((textIndex+1)|0)];
|
|
|
|
// Handle type specifier.
|
|
switch (String.fromCharCode(next)) {
|
|
case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
|
|
// Integer.
|
|
var signed = next == 100 || next == 105;
|
|
argSize = argSize || 4;
|
|
var currArg = getNextArg('i' + (argSize * 8));
|
|
var origArg = currArg;
|
|
var argText;
|
|
// Flatten i64-1 [low, high] into a (slightly rounded) double
|
|
if (argSize == 8) {
|
|
currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
|
|
}
|
|
// Truncate to requested size.
|
|
if (argSize <= 4) {
|
|
var limit = Math.pow(256, argSize) - 1;
|
|
currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
|
|
}
|
|
// Format the number.
|
|
var currAbsArg = Math.abs(currArg);
|
|
var prefix = '';
|
|
if (next == 100 || next == 105) {
|
|
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else
|
|
argText = reSign(currArg, 8 * argSize, 1).toString(10);
|
|
} else if (next == 117) {
|
|
if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else
|
|
argText = unSign(currArg, 8 * argSize, 1).toString(10);
|
|
currArg = Math.abs(currArg);
|
|
} else if (next == 111) {
|
|
argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
|
|
} else if (next == 120 || next == 88) {
|
|
prefix = (flagAlternative && currArg != 0) ? '0x' : '';
|
|
if (argSize == 8 && i64Math) {
|
|
if (origArg[1]) {
|
|
argText = (origArg[1]>>>0).toString(16);
|
|
var lower = (origArg[0]>>>0).toString(16);
|
|
while (lower.length < 8) lower = '0' + lower;
|
|
argText += lower;
|
|
} else {
|
|
argText = (origArg[0]>>>0).toString(16);
|
|
}
|
|
} else
|
|
if (currArg < 0) {
|
|
// Represent negative numbers in hex as 2's complement.
|
|
currArg = -currArg;
|
|
argText = (currAbsArg - 1).toString(16);
|
|
var buffer = [];
|
|
for (var i = 0; i < argText.length; i++) {
|
|
buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
|
|
}
|
|
argText = buffer.join('');
|
|
while (argText.length < argSize * 2) argText = 'f' + argText;
|
|
} else {
|
|
argText = currAbsArg.toString(16);
|
|
}
|
|
if (next == 88) {
|
|
prefix = prefix.toUpperCase();
|
|
argText = argText.toUpperCase();
|
|
}
|
|
} else if (next == 112) {
|
|
if (currAbsArg === 0) {
|
|
argText = '(nil)';
|
|
} else {
|
|
prefix = '0x';
|
|
argText = currAbsArg.toString(16);
|
|
}
|
|
}
|
|
if (precisionSet) {
|
|
while (argText.length < precision) {
|
|
argText = '0' + argText;
|
|
}
|
|
}
|
|
|
|
// Add sign if needed
|
|
if (currArg >= 0) {
|
|
if (flagAlwaysSigned) {
|
|
prefix = '+' + prefix;
|
|
} else if (flagPadSign) {
|
|
prefix = ' ' + prefix;
|
|
}
|
|
}
|
|
|
|
// Move sign to prefix so we zero-pad after the sign
|
|
if (argText.charAt(0) == '-') {
|
|
prefix = '-' + prefix;
|
|
argText = argText.substr(1);
|
|
}
|
|
|
|
// Add padding.
|
|
while (prefix.length + argText.length < width) {
|
|
if (flagLeftAlign) {
|
|
argText += ' ';
|
|
} else {
|
|
if (flagZeroPad) {
|
|
argText = '0' + argText;
|
|
} else {
|
|
prefix = ' ' + prefix;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Insert the result into the buffer.
|
|
argText = prefix + argText;
|
|
argText.split('').forEach(function(chr) {
|
|
ret.push(chr.charCodeAt(0));
|
|
});
|
|
break;
|
|
}
|
|
case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
|
|
// Float.
|
|
var currArg = getNextArg('double');
|
|
var argText;
|
|
if (isNaN(currArg)) {
|
|
argText = 'nan';
|
|
flagZeroPad = false;
|
|
} else if (!isFinite(currArg)) {
|
|
argText = (currArg < 0 ? '-' : '') + 'inf';
|
|
flagZeroPad = false;
|
|
} else {
|
|
var isGeneral = false;
|
|
var effectivePrecision = Math.min(precision, 20);
|
|
|
|
// Convert g/G to f/F or e/E, as per:
|
|
// http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
|
|
if (next == 103 || next == 71) {
|
|
isGeneral = true;
|
|
precision = precision || 1;
|
|
var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
|
|
if (precision > exponent && exponent >= -4) {
|
|
next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
|
|
precision -= exponent + 1;
|
|
} else {
|
|
next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
|
|
precision--;
|
|
}
|
|
effectivePrecision = Math.min(precision, 20);
|
|
}
|
|
|
|
if (next == 101 || next == 69) {
|
|
argText = currArg.toExponential(effectivePrecision);
|
|
// Make sure the exponent has at least 2 digits.
|
|
if (/[eE][-+]\d$/.test(argText)) {
|
|
argText = argText.slice(0, -1) + '0' + argText.slice(-1);
|
|
}
|
|
} else if (next == 102 || next == 70) {
|
|
argText = currArg.toFixed(effectivePrecision);
|
|
if (currArg === 0 && __reallyNegative(currArg)) {
|
|
argText = '-' + argText;
|
|
}
|
|
}
|
|
|
|
var parts = argText.split('e');
|
|
if (isGeneral && !flagAlternative) {
|
|
// Discard trailing zeros and periods.
|
|
while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
|
|
(parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
|
|
parts[0] = parts[0].slice(0, -1);
|
|
}
|
|
} else {
|
|
// Make sure we have a period in alternative mode.
|
|
if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
|
|
// Zero pad until required precision.
|
|
while (precision > effectivePrecision++) parts[0] += '0';
|
|
}
|
|
argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
|
|
|
|
// Capitalize 'E' if needed.
|
|
if (next == 69) argText = argText.toUpperCase();
|
|
|
|
// Add sign.
|
|
if (currArg >= 0) {
|
|
if (flagAlwaysSigned) {
|
|
argText = '+' + argText;
|
|
} else if (flagPadSign) {
|
|
argText = ' ' + argText;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add padding.
|
|
while (argText.length < width) {
|
|
if (flagLeftAlign) {
|
|
argText += ' ';
|
|
} else {
|
|
if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
|
|
argText = argText[0] + '0' + argText.slice(1);
|
|
} else {
|
|
argText = (flagZeroPad ? '0' : ' ') + argText;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Adjust case.
|
|
if (next < 97) argText = argText.toUpperCase();
|
|
|
|
// Insert the result into the buffer.
|
|
argText.split('').forEach(function(chr) {
|
|
ret.push(chr.charCodeAt(0));
|
|
});
|
|
break;
|
|
}
|
|
case 's': {
|
|
// String.
|
|
var arg = getNextArg('i8*');
|
|
var argLength = arg ? _strlen(arg) : '(null)'.length;
|
|
if (precisionSet) argLength = Math.min(argLength, precision);
|
|
if (!flagLeftAlign) {
|
|
while (argLength < width--) {
|
|
ret.push(32);
|
|
}
|
|
}
|
|
if (arg) {
|
|
for (var i = 0; i < argLength; i++) {
|
|
ret.push(HEAPU8[((arg++)|0)]);
|
|
}
|
|
} else {
|
|
ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
|
|
}
|
|
if (flagLeftAlign) {
|
|
while (argLength < width--) {
|
|
ret.push(32);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case 'c': {
|
|
// Character.
|
|
if (flagLeftAlign) ret.push(getNextArg('i8'));
|
|
while (--width > 0) {
|
|
ret.push(32);
|
|
}
|
|
if (!flagLeftAlign) ret.push(getNextArg('i8'));
|
|
break;
|
|
}
|
|
case 'n': {
|
|
// Write the length written so far to the next parameter.
|
|
var ptr = getNextArg('i32*');
|
|
HEAP32[((ptr)>>2)]=ret.length;
|
|
break;
|
|
}
|
|
case '%': {
|
|
// Literal percent sign.
|
|
ret.push(curr);
|
|
break;
|
|
}
|
|
default: {
|
|
// Unknown specifiers remain untouched.
|
|
for (var i = startTextIndex; i < textIndex + 2; i++) {
|
|
ret.push(HEAP8[(i)]);
|
|
}
|
|
}
|
|
}
|
|
textIndex += 2;
|
|
// TODO: Support a/A (hex float) and m (last error) specifiers.
|
|
// TODO: Support %1${specifier} for arg selection.
|
|
} else {
|
|
ret.push(curr);
|
|
textIndex += 1;
|
|
}
|
|
}
|
|
return ret;
|
|
}function _snprintf(s, n, format, varargs) {
|
|
// int snprintf(char *restrict s, size_t n, const char *restrict format, ...);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
|
|
var result = __formatString(format, varargs);
|
|
var limit = (n === undefined) ? result.length
|
|
: Math.min(result.length, Math.max(n - 1, 0));
|
|
if (s < 0) {
|
|
s = -s;
|
|
var buf = _malloc(limit+1);
|
|
HEAP32[((s)>>2)]=buf;
|
|
s = buf;
|
|
}
|
|
for (var i = 0; i < limit; i++) {
|
|
HEAP8[(((s)+(i))|0)]=result[i];
|
|
}
|
|
if (limit < n || (n === undefined)) HEAP8[(((s)+(i))|0)]=0;
|
|
return result.length;
|
|
}function _vsnprintf(s, n, format, va_arg) {
|
|
return _snprintf(s, n, format, HEAP32[((va_arg)>>2)]);
|
|
}
|
|
|
|
function _llvm_va_end() {}
|
|
|
|
|
|
|
|
|
|
function _isspace(chr) {
|
|
return (chr == 32) || (chr >= 9 && chr <= 13);
|
|
}
|
|
|
|
|
|
var ___errno_state=0;function ___setErrNo(value) {
|
|
// For convenient setting and returning of errno.
|
|
HEAP32[((___errno_state)>>2)]=value;
|
|
return value;
|
|
}
|
|
|
|
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:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,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:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function __parseInt(str, endptr, base, min, max, bits, unsign) {
|
|
// Skip space.
|
|
while (_isspace(HEAP8[(str)])) str++;
|
|
|
|
// Check for a plus/minus sign.
|
|
var multiplier = 1;
|
|
if (HEAP8[(str)] == 45) {
|
|
multiplier = -1;
|
|
str++;
|
|
} else if (HEAP8[(str)] == 43) {
|
|
str++;
|
|
}
|
|
|
|
// Find base.
|
|
var finalBase = base;
|
|
if (!finalBase) {
|
|
if (HEAP8[(str)] == 48) {
|
|
if (HEAP8[((str+1)|0)] == 120 ||
|
|
HEAP8[((str+1)|0)] == 88) {
|
|
finalBase = 16;
|
|
str += 2;
|
|
} else {
|
|
finalBase = 8;
|
|
str++;
|
|
}
|
|
}
|
|
} else if (finalBase==16) {
|
|
if (HEAP8[(str)] == 48) {
|
|
if (HEAP8[((str+1)|0)] == 120 ||
|
|
HEAP8[((str+1)|0)] == 88) {
|
|
str += 2;
|
|
}
|
|
}
|
|
}
|
|
if (!finalBase) finalBase = 10;
|
|
|
|
// Get digits.
|
|
var chr;
|
|
var ret = 0;
|
|
while ((chr = HEAP8[(str)]) != 0) {
|
|
var digit = parseInt(String.fromCharCode(chr), finalBase);
|
|
if (isNaN(digit)) {
|
|
break;
|
|
} else {
|
|
ret = ret * finalBase + digit;
|
|
str++;
|
|
}
|
|
}
|
|
|
|
// Apply sign.
|
|
ret *= multiplier;
|
|
|
|
// Set end pointer.
|
|
if (endptr) {
|
|
HEAP32[((endptr)>>2)]=str;
|
|
}
|
|
|
|
// Unsign if needed.
|
|
if (unsign) {
|
|
if (Math.abs(ret) > max) {
|
|
ret = max;
|
|
___setErrNo(ERRNO_CODES.ERANGE);
|
|
} else {
|
|
ret = unSign(ret, bits);
|
|
}
|
|
}
|
|
|
|
// Validate range.
|
|
if (ret > max || ret < min) {
|
|
ret = ret > max ? max : min;
|
|
___setErrNo(ERRNO_CODES.ERANGE);
|
|
}
|
|
|
|
if (bits == 64) {
|
|
return ((asm["setTempRet0"]((tempDouble=ret,(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)),ret>>>0)|0);
|
|
}
|
|
|
|
return ret;
|
|
}function _strtol(str, endptr, base) {
|
|
return __parseInt(str, endptr, base, -2147483648, 2147483647, 32); // LONG_MIN, LONG_MAX.
|
|
}function _atoi(ptr) {
|
|
return _strtol(ptr, null, 10);
|
|
}
|
|
|
|
|
|
|
|
Module["_rand_r"] = _rand_r;
|
|
|
|
var ___rand_seed=allocate([0x0273459b, 0, 0, 0], "i32", ALLOC_STATIC);
|
|
Module["_rand"] = _rand;
|
|
|
|
|
|
|
|
|
|
Module["_memset"] = _memset;var _llvm_memset_p0i8_i32=_memset;
|
|
|
|
function _strrchr(ptr, chr) {
|
|
var ptr2 = ptr + _strlen(ptr);
|
|
do {
|
|
if (HEAP8[(ptr2)] == chr) return ptr2;
|
|
ptr2--;
|
|
} while (ptr2 >= ptr);
|
|
return 0;
|
|
}
|
|
|
|
function _strstr(ptr1, ptr2) {
|
|
var check = 0, start;
|
|
do {
|
|
if (!check) {
|
|
start = ptr1;
|
|
check = ptr2;
|
|
}
|
|
var curr1 = HEAP8[((ptr1++)|0)];
|
|
var curr2 = HEAP8[((check++)|0)];
|
|
if (curr2 == 0) return start;
|
|
if (curr2 != curr1) {
|
|
// rewind to one character after start, to find ez in eeez
|
|
ptr1 = start + 1;
|
|
check = 0;
|
|
}
|
|
} while (curr1);
|
|
return 0;
|
|
}
|
|
|
|
var _llvm_memset_p0i8_i64=_memset;
|
|
|
|
function _strchr(ptr, chr) {
|
|
ptr--;
|
|
do {
|
|
ptr++;
|
|
var val = HEAP8[(ptr)];
|
|
if (val == chr) return ptr;
|
|
} while (val);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
Module["_memmove"] = _memmove;var _llvm_memmove_p0i8_p0i8_i32=_memmove;
|
|
|
|
|
|
Module["_strcat"] = _strcat;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"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",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};
|
|
|
|
var TTY={ttys:[],init:function () {
|
|
// https://github.com/kripken/emscripten/pull/1555
|
|
// if (ENVIRONMENT_IS_NODE) {
|
|
// // currently, FS.init does not distinguish if process.stdin is a file or TTY
|
|
// // device, it always assumes it's a TTY device. because of this, we're forcing
|
|
// // process.stdin to UTF8 encoding to at least make stdin reading compatible
|
|
// // with text files until FS.init can be refactored.
|
|
// process['stdin']['setEncoding']('utf8');
|
|
// }
|
|
},shutdown:function () {
|
|
// https://github.com/kripken/emscripten/pull/1555
|
|
// if (ENVIRONMENT_IS_NODE) {
|
|
// // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
|
|
// // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
|
|
// // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
|
|
// // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
|
|
// // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
|
|
// process['stdin']['pause']();
|
|
// }
|
|
},register:function (dev, ops) {
|
|
TTY.ttys[dev] = { input: [], output: [], ops: ops };
|
|
FS.registerDevice(dev, TTY.stream_ops);
|
|
},stream_ops:{open:function (stream) {
|
|
var tty = TTY.ttys[stream.node.rdev];
|
|
if (!tty) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
|
|
}
|
|
stream.tty = tty;
|
|
stream.seekable = false;
|
|
},close:function (stream) {
|
|
// flush any pending line data
|
|
if (stream.tty.output.length) {
|
|
stream.tty.ops.put_char(stream.tty, 10);
|
|
}
|
|
},read:function (stream, buffer, offset, length, pos /* ignored */) {
|
|
if (!stream.tty || !stream.tty.ops.get_char) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
|
|
}
|
|
var bytesRead = 0;
|
|
for (var i = 0; i < length; i++) {
|
|
var result;
|
|
try {
|
|
result = stream.tty.ops.get_char(stream.tty);
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
|
}
|
|
if (result === undefined && bytesRead === 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
|
|
}
|
|
if (result === null || result === undefined) break;
|
|
bytesRead++;
|
|
buffer[offset+i] = result;
|
|
}
|
|
if (bytesRead) {
|
|
stream.node.timestamp = Date.now();
|
|
}
|
|
return bytesRead;
|
|
},write:function (stream, buffer, offset, length, pos) {
|
|
if (!stream.tty || !stream.tty.ops.put_char) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
|
|
}
|
|
for (var i = 0; i < length; i++) {
|
|
try {
|
|
stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
|
}
|
|
}
|
|
if (length) {
|
|
stream.node.timestamp = Date.now();
|
|
}
|
|
return i;
|
|
}},default_tty_ops:{get_char:function (tty) {
|
|
if (!tty.input.length) {
|
|
var result = null;
|
|
if (ENVIRONMENT_IS_NODE) {
|
|
result = process['stdin']['read']();
|
|
if (!result) {
|
|
if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) {
|
|
return null; // EOF
|
|
}
|
|
return undefined; // no data available
|
|
}
|
|
} else if (typeof window != 'undefined' &&
|
|
typeof window.prompt == 'function') {
|
|
// Browser.
|
|
result = window.prompt('Input: '); // returns null on cancel
|
|
if (result !== null) {
|
|
result += '\n';
|
|
}
|
|
} else if (typeof readline == 'function') {
|
|
// Command line.
|
|
result = readline();
|
|
if (result !== null) {
|
|
result += '\n';
|
|
}
|
|
}
|
|
if (!result) {
|
|
return null;
|
|
}
|
|
tty.input = intArrayFromString(result, true);
|
|
}
|
|
return tty.input.shift();
|
|
},put_char:function (tty, val) {
|
|
if (val === null || val === 10) {
|
|
Module['print'](tty.output.join(''));
|
|
tty.output = [];
|
|
} else {
|
|
tty.output.push(TTY.utf8.processCChar(val));
|
|
}
|
|
}},default_tty1_ops:{put_char:function (tty, val) {
|
|
if (val === null || val === 10) {
|
|
Module['printErr'](tty.output.join(''));
|
|
tty.output = [];
|
|
} else {
|
|
tty.output.push(TTY.utf8.processCChar(val));
|
|
}
|
|
}}};
|
|
|
|
var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) {
|
|
return MEMFS.createNode(null, '/', 16384 | 0777, 0);
|
|
},createNode:function (parent, name, mode, dev) {
|
|
if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
|
|
// no supported
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
if (!MEMFS.ops_table) {
|
|
MEMFS.ops_table = {
|
|
dir: {
|
|
node: {
|
|
getattr: MEMFS.node_ops.getattr,
|
|
setattr: MEMFS.node_ops.setattr,
|
|
lookup: MEMFS.node_ops.lookup,
|
|
mknod: MEMFS.node_ops.mknod,
|
|
mknod: MEMFS.node_ops.mknod,
|
|
rename: MEMFS.node_ops.rename,
|
|
unlink: MEMFS.node_ops.unlink,
|
|
rmdir: MEMFS.node_ops.rmdir,
|
|
readdir: MEMFS.node_ops.readdir,
|
|
symlink: MEMFS.node_ops.symlink
|
|
},
|
|
stream: {
|
|
llseek: MEMFS.stream_ops.llseek
|
|
}
|
|
},
|
|
file: {
|
|
node: {
|
|
getattr: MEMFS.node_ops.getattr,
|
|
setattr: MEMFS.node_ops.setattr
|
|
},
|
|
stream: {
|
|
llseek: MEMFS.stream_ops.llseek,
|
|
read: MEMFS.stream_ops.read,
|
|
write: MEMFS.stream_ops.write,
|
|
allocate: MEMFS.stream_ops.allocate,
|
|
mmap: MEMFS.stream_ops.mmap
|
|
}
|
|
},
|
|
link: {
|
|
node: {
|
|
getattr: MEMFS.node_ops.getattr,
|
|
setattr: MEMFS.node_ops.setattr,
|
|
readlink: MEMFS.node_ops.readlink
|
|
},
|
|
stream: {}
|
|
},
|
|
chrdev: {
|
|
node: {
|
|
getattr: MEMFS.node_ops.getattr,
|
|
setattr: MEMFS.node_ops.setattr
|
|
},
|
|
stream: FS.chrdev_stream_ops
|
|
},
|
|
};
|
|
}
|
|
var node = FS.createNode(parent, name, mode, dev);
|
|
if (FS.isDir(node.mode)) {
|
|
node.node_ops = MEMFS.ops_table.dir.node;
|
|
node.stream_ops = MEMFS.ops_table.dir.stream;
|
|
node.contents = {};
|
|
} else if (FS.isFile(node.mode)) {
|
|
node.node_ops = MEMFS.ops_table.file.node;
|
|
node.stream_ops = MEMFS.ops_table.file.stream;
|
|
node.contents = [];
|
|
node.contentMode = MEMFS.CONTENT_FLEXIBLE;
|
|
} else if (FS.isLink(node.mode)) {
|
|
node.node_ops = MEMFS.ops_table.link.node;
|
|
node.stream_ops = MEMFS.ops_table.link.stream;
|
|
} else if (FS.isChrdev(node.mode)) {
|
|
node.node_ops = MEMFS.ops_table.chrdev.node;
|
|
node.stream_ops = MEMFS.ops_table.chrdev.stream;
|
|
}
|
|
node.timestamp = Date.now();
|
|
// add the new node to the parent
|
|
if (parent) {
|
|
parent.contents[name] = node;
|
|
}
|
|
return node;
|
|
},ensureFlexible:function (node) {
|
|
if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
|
|
var contents = node.contents;
|
|
node.contents = Array.prototype.slice.call(contents);
|
|
node.contentMode = MEMFS.CONTENT_FLEXIBLE;
|
|
}
|
|
},node_ops:{getattr:function (node) {
|
|
var attr = {};
|
|
// device numbers reuse inode numbers.
|
|
attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
|
|
attr.ino = node.id;
|
|
attr.mode = node.mode;
|
|
attr.nlink = 1;
|
|
attr.uid = 0;
|
|
attr.gid = 0;
|
|
attr.rdev = node.rdev;
|
|
if (FS.isDir(node.mode)) {
|
|
attr.size = 4096;
|
|
} else if (FS.isFile(node.mode)) {
|
|
attr.size = node.contents.length;
|
|
} else if (FS.isLink(node.mode)) {
|
|
attr.size = node.link.length;
|
|
} else {
|
|
attr.size = 0;
|
|
}
|
|
attr.atime = new Date(node.timestamp);
|
|
attr.mtime = new Date(node.timestamp);
|
|
attr.ctime = new Date(node.timestamp);
|
|
// NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
|
|
// but this is not required by the standard.
|
|
attr.blksize = 4096;
|
|
attr.blocks = Math.ceil(attr.size / attr.blksize);
|
|
return attr;
|
|
},setattr:function (node, attr) {
|
|
if (attr.mode !== undefined) {
|
|
node.mode = attr.mode;
|
|
}
|
|
if (attr.timestamp !== undefined) {
|
|
node.timestamp = attr.timestamp;
|
|
}
|
|
if (attr.size !== undefined) {
|
|
MEMFS.ensureFlexible(node);
|
|
var contents = node.contents;
|
|
if (attr.size < contents.length) contents.length = attr.size;
|
|
else while (attr.size > contents.length) contents.push(0);
|
|
}
|
|
},lookup:function (parent, name) {
|
|
throw FS.genericErrors[ERRNO_CODES.ENOENT];
|
|
},mknod:function (parent, name, mode, dev) {
|
|
return MEMFS.createNode(parent, name, mode, dev);
|
|
},rename:function (old_node, new_dir, new_name) {
|
|
// if we're overwriting a directory at new_name, make sure it's empty.
|
|
if (FS.isDir(old_node.mode)) {
|
|
var new_node;
|
|
try {
|
|
new_node = FS.lookupNode(new_dir, new_name);
|
|
} catch (e) {
|
|
}
|
|
if (new_node) {
|
|
for (var i in new_node.contents) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
|
|
}
|
|
}
|
|
}
|
|
// do the internal rewiring
|
|
delete old_node.parent.contents[old_node.name];
|
|
old_node.name = new_name;
|
|
new_dir.contents[new_name] = old_node;
|
|
old_node.parent = new_dir;
|
|
},unlink:function (parent, name) {
|
|
delete parent.contents[name];
|
|
},rmdir:function (parent, name) {
|
|
var node = FS.lookupNode(parent, name);
|
|
for (var i in node.contents) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
|
|
}
|
|
delete parent.contents[name];
|
|
},readdir:function (node) {
|
|
var entries = ['.', '..']
|
|
for (var key in node.contents) {
|
|
if (!node.contents.hasOwnProperty(key)) {
|
|
continue;
|
|
}
|
|
entries.push(key);
|
|
}
|
|
return entries;
|
|
},symlink:function (parent, newname, oldpath) {
|
|
var node = MEMFS.createNode(parent, newname, 0777 | 40960, 0);
|
|
node.link = oldpath;
|
|
return node;
|
|
},readlink:function (node) {
|
|
if (!FS.isLink(node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
return node.link;
|
|
}},stream_ops:{read:function (stream, buffer, offset, length, position) {
|
|
var contents = stream.node.contents;
|
|
if (position >= contents.length)
|
|
return 0;
|
|
var size = Math.min(contents.length - position, length);
|
|
assert(size >= 0);
|
|
if (size > 8 && contents.subarray) { // non-trivial, and typed array
|
|
buffer.set(contents.subarray(position, position + size), offset);
|
|
} else
|
|
{
|
|
for (var i = 0; i < size; i++) {
|
|
buffer[offset + i] = contents[position + i];
|
|
}
|
|
}
|
|
return size;
|
|
},write:function (stream, buffer, offset, length, position, canOwn) {
|
|
var node = stream.node;
|
|
node.timestamp = Date.now();
|
|
var contents = node.contents;
|
|
if (length && contents.length === 0 && position === 0 && buffer.subarray) {
|
|
// just replace it with the new data
|
|
if (canOwn && offset === 0) {
|
|
node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
|
|
node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED;
|
|
} else {
|
|
node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
|
|
node.contentMode = MEMFS.CONTENT_FIXED;
|
|
}
|
|
return length;
|
|
}
|
|
MEMFS.ensureFlexible(node);
|
|
var contents = node.contents;
|
|
while (contents.length < position) contents.push(0);
|
|
for (var i = 0; i < length; i++) {
|
|
contents[position + i] = buffer[offset + i];
|
|
}
|
|
return length;
|
|
},llseek:function (stream, offset, whence) {
|
|
var position = offset;
|
|
if (whence === 1) { // SEEK_CUR.
|
|
position += stream.position;
|
|
} else if (whence === 2) { // SEEK_END.
|
|
if (FS.isFile(stream.node.mode)) {
|
|
position += stream.node.contents.length;
|
|
}
|
|
}
|
|
if (position < 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
stream.ungotten = [];
|
|
stream.position = position;
|
|
return position;
|
|
},allocate:function (stream, offset, length) {
|
|
MEMFS.ensureFlexible(stream.node);
|
|
var contents = stream.node.contents;
|
|
var limit = offset + length;
|
|
while (limit > contents.length) contents.push(0);
|
|
},mmap:function (stream, buffer, offset, length, position, prot, flags) {
|
|
if (!FS.isFile(stream.node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
|
|
}
|
|
var ptr;
|
|
var allocated;
|
|
var contents = stream.node.contents;
|
|
// Only make a new copy when MAP_PRIVATE is specified.
|
|
if ( !(flags & 2) &&
|
|
(contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
|
|
// We can't emulate MAP_SHARED when the file is not backed by the buffer
|
|
// we're mapping to (e.g. the HEAP buffer).
|
|
allocated = false;
|
|
ptr = contents.byteOffset;
|
|
} else {
|
|
// Try to avoid unnecessary slices.
|
|
if (position > 0 || position + length < contents.length) {
|
|
if (contents.subarray) {
|
|
contents = contents.subarray(position, position + length);
|
|
} else {
|
|
contents = Array.prototype.slice.call(contents, position, position + length);
|
|
}
|
|
}
|
|
allocated = true;
|
|
ptr = _malloc(length);
|
|
if (!ptr) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
|
|
}
|
|
buffer.set(contents, ptr);
|
|
}
|
|
return { ptr: ptr, allocated: allocated };
|
|
}}};
|
|
|
|
var IDBFS={dbs:{},indexedDB:function () {
|
|
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
|
|
},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
|
|
// reuse all of the core MEMFS functionality
|
|
return MEMFS.mount.apply(null, arguments);
|
|
},syncfs:function (mount, populate, callback) {
|
|
IDBFS.getLocalSet(mount, function(err, local) {
|
|
if (err) return callback(err);
|
|
|
|
IDBFS.getRemoteSet(mount, function(err, remote) {
|
|
if (err) return callback(err);
|
|
|
|
var src = populate ? remote : local;
|
|
var dst = populate ? local : remote;
|
|
|
|
IDBFS.reconcile(src, dst, callback);
|
|
});
|
|
});
|
|
},getDB:function (name, callback) {
|
|
// check the cache first
|
|
var db = IDBFS.dbs[name];
|
|
if (db) {
|
|
return callback(null, db);
|
|
}
|
|
|
|
var req;
|
|
try {
|
|
req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
|
|
} catch (e) {
|
|
return callback(e);
|
|
}
|
|
req.onupgradeneeded = function(e) {
|
|
var db = e.target.result;
|
|
var transaction = e.target.transaction;
|
|
|
|
var fileStore;
|
|
|
|
if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
|
|
fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
|
|
} else {
|
|
fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
|
|
}
|
|
|
|
fileStore.createIndex('timestamp', 'timestamp', { unique: false });
|
|
};
|
|
req.onsuccess = function() {
|
|
db = req.result;
|
|
|
|
// add to the cache
|
|
IDBFS.dbs[name] = db;
|
|
callback(null, db);
|
|
};
|
|
req.onerror = function() {
|
|
callback(this.error);
|
|
};
|
|
},getLocalSet:function (mount, callback) {
|
|
var entries = {};
|
|
|
|
function isRealDir(p) {
|
|
return p !== '.' && p !== '..';
|
|
};
|
|
function toAbsolute(root) {
|
|
return function(p) {
|
|
return PATH.join2(root, p);
|
|
}
|
|
};
|
|
|
|
var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
|
|
|
|
while (check.length) {
|
|
var path = check.pop();
|
|
var stat;
|
|
|
|
try {
|
|
stat = FS.stat(path);
|
|
} catch (e) {
|
|
return callback(e);
|
|
}
|
|
|
|
if (FS.isDir(stat.mode)) {
|
|
check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
|
|
}
|
|
|
|
entries[path] = { timestamp: stat.mtime };
|
|
}
|
|
|
|
return callback(null, { type: 'local', entries: entries });
|
|
},getRemoteSet:function (mount, callback) {
|
|
var entries = {};
|
|
|
|
IDBFS.getDB(mount.mountpoint, function(err, db) {
|
|
if (err) return callback(err);
|
|
|
|
var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
|
|
transaction.onerror = function() { callback(this.error); };
|
|
|
|
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
|
|
var index = store.index('timestamp');
|
|
|
|
index.openKeyCursor().onsuccess = function(event) {
|
|
var cursor = event.target.result;
|
|
|
|
if (!cursor) {
|
|
return callback(null, { type: 'remote', db: db, entries: entries });
|
|
}
|
|
|
|
entries[cursor.primaryKey] = { timestamp: cursor.key };
|
|
|
|
cursor.continue();
|
|
};
|
|
});
|
|
},loadLocalEntry:function (path, callback) {
|
|
var stat, node;
|
|
|
|
try {
|
|
var lookup = FS.lookupPath(path);
|
|
node = lookup.node;
|
|
stat = FS.stat(path);
|
|
} catch (e) {
|
|
return callback(e);
|
|
}
|
|
|
|
if (FS.isDir(stat.mode)) {
|
|
return callback(null, { timestamp: stat.mtime, mode: stat.mode });
|
|
} else if (FS.isFile(stat.mode)) {
|
|
return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
|
|
} else {
|
|
return callback(new Error('node type not supported'));
|
|
}
|
|
},storeLocalEntry:function (path, entry, callback) {
|
|
try {
|
|
if (FS.isDir(entry.mode)) {
|
|
FS.mkdir(path, entry.mode);
|
|
} else if (FS.isFile(entry.mode)) {
|
|
FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
|
|
} else {
|
|
return callback(new Error('node type not supported'));
|
|
}
|
|
|
|
FS.utime(path, entry.timestamp, entry.timestamp);
|
|
} catch (e) {
|
|
return callback(e);
|
|
}
|
|
|
|
callback(null);
|
|
},removeLocalEntry:function (path, callback) {
|
|
try {
|
|
var lookup = FS.lookupPath(path);
|
|
var stat = FS.stat(path);
|
|
|
|
if (FS.isDir(stat.mode)) {
|
|
FS.rmdir(path);
|
|
} else if (FS.isFile(stat.mode)) {
|
|
FS.unlink(path);
|
|
}
|
|
} catch (e) {
|
|
return callback(e);
|
|
}
|
|
|
|
callback(null);
|
|
},loadRemoteEntry:function (store, path, callback) {
|
|
var req = store.get(path);
|
|
req.onsuccess = function(event) { callback(null, event.target.result); };
|
|
req.onerror = function() { callback(this.error); };
|
|
},storeRemoteEntry:function (store, path, entry, callback) {
|
|
var req = store.put(entry, path);
|
|
req.onsuccess = function() { callback(null); };
|
|
req.onerror = function() { callback(this.error); };
|
|
},removeRemoteEntry:function (store, path, callback) {
|
|
var req = store.delete(path);
|
|
req.onsuccess = function() { callback(null); };
|
|
req.onerror = function() { callback(this.error); };
|
|
},reconcile:function (src, dst, callback) {
|
|
var total = 0;
|
|
|
|
var create = [];
|
|
Object.keys(src.entries).forEach(function (key) {
|
|
var e = src.entries[key];
|
|
var e2 = dst.entries[key];
|
|
if (!e2 || e.timestamp > e2.timestamp) {
|
|
create.push(key);
|
|
total++;
|
|
}
|
|
});
|
|
|
|
var remove = [];
|
|
Object.keys(dst.entries).forEach(function (key) {
|
|
var e = dst.entries[key];
|
|
var e2 = src.entries[key];
|
|
if (!e2) {
|
|
remove.push(key);
|
|
total++;
|
|
}
|
|
});
|
|
|
|
if (!total) {
|
|
return callback(null);
|
|
}
|
|
|
|
var errored = false;
|
|
var completed = 0;
|
|
var db = src.type === 'remote' ? src.db : dst.db;
|
|
var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
|
|
var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
|
|
|
|
function done(err) {
|
|
if (err) {
|
|
if (!done.errored) {
|
|
done.errored = true;
|
|
return callback(err);
|
|
}
|
|
return;
|
|
}
|
|
if (++completed >= total) {
|
|
return callback(null);
|
|
}
|
|
};
|
|
|
|
transaction.onerror = function() { done(this.error); };
|
|
|
|
// sort paths in ascending order so directory entries are created
|
|
// before the files inside them
|
|
create.sort().forEach(function (path) {
|
|
if (dst.type === 'local') {
|
|
IDBFS.loadRemoteEntry(store, path, function (err, entry) {
|
|
if (err) return done(err);
|
|
IDBFS.storeLocalEntry(path, entry, done);
|
|
});
|
|
} else {
|
|
IDBFS.loadLocalEntry(path, function (err, entry) {
|
|
if (err) return done(err);
|
|
IDBFS.storeRemoteEntry(store, path, entry, done);
|
|
});
|
|
}
|
|
});
|
|
|
|
// sort paths in descending order so files are deleted before their
|
|
// parent directories
|
|
remove.sort().reverse().forEach(function(path) {
|
|
if (dst.type === 'local') {
|
|
IDBFS.removeLocalEntry(path, done);
|
|
} else {
|
|
IDBFS.removeRemoteEntry(store, path, done);
|
|
}
|
|
});
|
|
}};
|
|
|
|
var NODEFS={isWindows:false,staticInit:function () {
|
|
NODEFS.isWindows = !!process.platform.match(/^win/);
|
|
},mount:function (mount) {
|
|
assert(ENVIRONMENT_IS_NODE);
|
|
return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
|
|
},createNode:function (parent, name, mode, dev) {
|
|
if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
var node = FS.createNode(parent, name, mode);
|
|
node.node_ops = NODEFS.node_ops;
|
|
node.stream_ops = NODEFS.stream_ops;
|
|
return node;
|
|
},getMode:function (path) {
|
|
var stat;
|
|
try {
|
|
stat = fs.lstatSync(path);
|
|
if (NODEFS.isWindows) {
|
|
// On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
|
|
// propagate write bits to execute bits.
|
|
stat.mode = stat.mode | ((stat.mode & 146) >> 1);
|
|
}
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
return stat.mode;
|
|
},realPath:function (node) {
|
|
var parts = [];
|
|
while (node.parent !== node) {
|
|
parts.push(node.name);
|
|
node = node.parent;
|
|
}
|
|
parts.push(node.mount.opts.root);
|
|
parts.reverse();
|
|
return PATH.join.apply(null, parts);
|
|
},flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) {
|
|
if (flags in NODEFS.flagsToPermissionStringMap) {
|
|
return NODEFS.flagsToPermissionStringMap[flags];
|
|
} else {
|
|
return flags;
|
|
}
|
|
},node_ops:{getattr:function (node) {
|
|
var path = NODEFS.realPath(node);
|
|
var stat;
|
|
try {
|
|
stat = fs.lstatSync(path);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
// node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
|
|
// See http://support.microsoft.com/kb/140365
|
|
if (NODEFS.isWindows && !stat.blksize) {
|
|
stat.blksize = 4096;
|
|
}
|
|
if (NODEFS.isWindows && !stat.blocks) {
|
|
stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
|
|
}
|
|
return {
|
|
dev: stat.dev,
|
|
ino: stat.ino,
|
|
mode: stat.mode,
|
|
nlink: stat.nlink,
|
|
uid: stat.uid,
|
|
gid: stat.gid,
|
|
rdev: stat.rdev,
|
|
size: stat.size,
|
|
atime: stat.atime,
|
|
mtime: stat.mtime,
|
|
ctime: stat.ctime,
|
|
blksize: stat.blksize,
|
|
blocks: stat.blocks
|
|
};
|
|
},setattr:function (node, attr) {
|
|
var path = NODEFS.realPath(node);
|
|
try {
|
|
if (attr.mode !== undefined) {
|
|
fs.chmodSync(path, attr.mode);
|
|
// update the common node structure mode as well
|
|
node.mode = attr.mode;
|
|
}
|
|
if (attr.timestamp !== undefined) {
|
|
var date = new Date(attr.timestamp);
|
|
fs.utimesSync(path, date, date);
|
|
}
|
|
if (attr.size !== undefined) {
|
|
fs.truncateSync(path, attr.size);
|
|
}
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},lookup:function (parent, name) {
|
|
var path = PATH.join2(NODEFS.realPath(parent), name);
|
|
var mode = NODEFS.getMode(path);
|
|
return NODEFS.createNode(parent, name, mode);
|
|
},mknod:function (parent, name, mode, dev) {
|
|
var node = NODEFS.createNode(parent, name, mode, dev);
|
|
// create the backing node for this in the fs root as well
|
|
var path = NODEFS.realPath(node);
|
|
try {
|
|
if (FS.isDir(node.mode)) {
|
|
fs.mkdirSync(path, node.mode);
|
|
} else {
|
|
fs.writeFileSync(path, '', { mode: node.mode });
|
|
}
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
return node;
|
|
},rename:function (oldNode, newDir, newName) {
|
|
var oldPath = NODEFS.realPath(oldNode);
|
|
var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
|
|
try {
|
|
fs.renameSync(oldPath, newPath);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},unlink:function (parent, name) {
|
|
var path = PATH.join2(NODEFS.realPath(parent), name);
|
|
try {
|
|
fs.unlinkSync(path);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},rmdir:function (parent, name) {
|
|
var path = PATH.join2(NODEFS.realPath(parent), name);
|
|
try {
|
|
fs.rmdirSync(path);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},readdir:function (node) {
|
|
var path = NODEFS.realPath(node);
|
|
try {
|
|
return fs.readdirSync(path);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},symlink:function (parent, newName, oldPath) {
|
|
var newPath = PATH.join2(NODEFS.realPath(parent), newName);
|
|
try {
|
|
fs.symlinkSync(oldPath, newPath);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},readlink:function (node) {
|
|
var path = NODEFS.realPath(node);
|
|
try {
|
|
return fs.readlinkSync(path);
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
}},stream_ops:{open:function (stream) {
|
|
var path = NODEFS.realPath(stream.node);
|
|
try {
|
|
if (FS.isFile(stream.node.mode)) {
|
|
stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
|
|
}
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},close:function (stream) {
|
|
try {
|
|
if (FS.isFile(stream.node.mode) && stream.nfd) {
|
|
fs.closeSync(stream.nfd);
|
|
}
|
|
} catch (e) {
|
|
if (!e.code) throw e;
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
},read:function (stream, buffer, offset, length, position) {
|
|
// FIXME this is terrible.
|
|
var nbuffer = new Buffer(length);
|
|
var res;
|
|
try {
|
|
res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
if (res > 0) {
|
|
for (var i = 0; i < res; i++) {
|
|
buffer[offset + i] = nbuffer[i];
|
|
}
|
|
}
|
|
return res;
|
|
},write:function (stream, buffer, offset, length, position) {
|
|
// FIXME this is terrible.
|
|
var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
|
|
var res;
|
|
try {
|
|
res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
return res;
|
|
},llseek:function (stream, offset, whence) {
|
|
var position = offset;
|
|
if (whence === 1) { // SEEK_CUR.
|
|
position += stream.position;
|
|
} else if (whence === 2) { // SEEK_END.
|
|
if (FS.isFile(stream.node.mode)) {
|
|
try {
|
|
var stat = fs.fstatSync(stream.nfd);
|
|
position += stat.size;
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (position < 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
|
|
stream.position = position;
|
|
return position;
|
|
}}};
|
|
|
|
var _stdin=allocate(1, "i32*", ALLOC_STATIC);
|
|
|
|
var _stdout=allocate(1, "i32*", ALLOC_STATIC);
|
|
|
|
var _stderr=allocate(1, "i32*", ALLOC_STATIC);
|
|
|
|
function _fflush(stream) {
|
|
// int fflush(FILE *stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
|
|
// we don't currently perform any user-space buffering of data
|
|
}var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) {
|
|
if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
|
|
return ___setErrNo(e.errno);
|
|
},lookupPath:function (path, opts) {
|
|
path = PATH.resolve(FS.cwd(), path);
|
|
opts = opts || {};
|
|
|
|
var defaults = {
|
|
follow_mount: true,
|
|
recurse_count: 0
|
|
};
|
|
for (var key in defaults) {
|
|
if (opts[key] === undefined) {
|
|
opts[key] = defaults[key];
|
|
}
|
|
}
|
|
|
|
if (opts.recurse_count > 8) { // max recursive lookup of 8
|
|
throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
|
|
}
|
|
|
|
// split the path
|
|
var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
|
|
return !!p;
|
|
}), false);
|
|
|
|
// start at the root
|
|
var current = FS.root;
|
|
var current_path = '/';
|
|
|
|
for (var i = 0; i < parts.length; i++) {
|
|
var islast = (i === parts.length-1);
|
|
if (islast && opts.parent) {
|
|
// stop resolving
|
|
break;
|
|
}
|
|
|
|
current = FS.lookupNode(current, parts[i]);
|
|
current_path = PATH.join2(current_path, parts[i]);
|
|
|
|
// jump to the mount's root node if this is a mountpoint
|
|
if (FS.isMountpoint(current)) {
|
|
if (!islast || (islast && opts.follow_mount)) {
|
|
current = current.mounted.root;
|
|
}
|
|
}
|
|
|
|
// by default, lookupPath will not follow a symlink if it is the final path component.
|
|
// setting opts.follow = true will override this behavior.
|
|
if (!islast || opts.follow) {
|
|
var count = 0;
|
|
while (FS.isLink(current.mode)) {
|
|
var link = FS.readlink(current_path);
|
|
current_path = PATH.resolve(PATH.dirname(current_path), link);
|
|
|
|
var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
|
|
current = lookup.node;
|
|
|
|
if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
|
|
throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return { path: current_path, node: current };
|
|
},getPath:function (node) {
|
|
var path;
|
|
while (true) {
|
|
if (FS.isRoot(node)) {
|
|
var mount = node.mount.mountpoint;
|
|
if (!path) return mount;
|
|
return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
|
|
}
|
|
path = path ? node.name + '/' + path : node.name;
|
|
node = node.parent;
|
|
}
|
|
},hashName:function (parentid, name) {
|
|
var hash = 0;
|
|
|
|
|
|
for (var i = 0; i < name.length; i++) {
|
|
hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
|
|
}
|
|
return ((parentid + hash) >>> 0) % FS.nameTable.length;
|
|
},hashAddNode:function (node) {
|
|
var hash = FS.hashName(node.parent.id, node.name);
|
|
node.name_next = FS.nameTable[hash];
|
|
FS.nameTable[hash] = node;
|
|
},hashRemoveNode:function (node) {
|
|
var hash = FS.hashName(node.parent.id, node.name);
|
|
if (FS.nameTable[hash] === node) {
|
|
FS.nameTable[hash] = node.name_next;
|
|
} else {
|
|
var current = FS.nameTable[hash];
|
|
while (current) {
|
|
if (current.name_next === node) {
|
|
current.name_next = node.name_next;
|
|
break;
|
|
}
|
|
current = current.name_next;
|
|
}
|
|
}
|
|
},lookupNode:function (parent, name) {
|
|
var err = FS.mayLookup(parent);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
var hash = FS.hashName(parent.id, name);
|
|
for (var node = FS.nameTable[hash]; node; node = node.name_next) {
|
|
var nodeName = node.name;
|
|
if (node.parent.id === parent.id && nodeName === name) {
|
|
return node;
|
|
}
|
|
}
|
|
// if we failed to find it in the cache, call into the VFS
|
|
return FS.lookup(parent, name);
|
|
},createNode:function (parent, name, mode, rdev) {
|
|
if (!FS.FSNode) {
|
|
FS.FSNode = function(parent, name, mode, rdev) {
|
|
if (!parent) {
|
|
parent = this; // root node sets parent to itself
|
|
}
|
|
this.parent = parent;
|
|
this.mount = parent.mount;
|
|
this.mounted = null;
|
|
this.id = FS.nextInode++;
|
|
this.name = name;
|
|
this.mode = mode;
|
|
this.node_ops = {};
|
|
this.stream_ops = {};
|
|
this.rdev = rdev;
|
|
};
|
|
|
|
FS.FSNode.prototype = {};
|
|
|
|
// compatibility
|
|
var readMode = 292 | 73;
|
|
var writeMode = 146;
|
|
|
|
// NOTE we must use Object.defineProperties instead of individual calls to
|
|
// Object.defineProperty in order to make closure compiler happy
|
|
Object.defineProperties(FS.FSNode.prototype, {
|
|
read: {
|
|
get: function() { return (this.mode & readMode) === readMode; },
|
|
set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
|
|
},
|
|
write: {
|
|
get: function() { return (this.mode & writeMode) === writeMode; },
|
|
set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
|
|
},
|
|
isFolder: {
|
|
get: function() { return FS.isDir(this.mode); },
|
|
},
|
|
isDevice: {
|
|
get: function() { return FS.isChrdev(this.mode); },
|
|
},
|
|
});
|
|
}
|
|
|
|
var node = new FS.FSNode(parent, name, mode, rdev);
|
|
|
|
FS.hashAddNode(node);
|
|
|
|
return node;
|
|
},destroyNode:function (node) {
|
|
FS.hashRemoveNode(node);
|
|
},isRoot:function (node) {
|
|
return node === node.parent;
|
|
},isMountpoint:function (node) {
|
|
return !!node.mounted;
|
|
},isFile:function (mode) {
|
|
return (mode & 61440) === 32768;
|
|
},isDir:function (mode) {
|
|
return (mode & 61440) === 16384;
|
|
},isLink:function (mode) {
|
|
return (mode & 61440) === 40960;
|
|
},isChrdev:function (mode) {
|
|
return (mode & 61440) === 8192;
|
|
},isBlkdev:function (mode) {
|
|
return (mode & 61440) === 24576;
|
|
},isFIFO:function (mode) {
|
|
return (mode & 61440) === 4096;
|
|
},isSocket:function (mode) {
|
|
return (mode & 49152) === 49152;
|
|
},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) {
|
|
var flags = FS.flagModes[str];
|
|
if (typeof flags === 'undefined') {
|
|
throw new Error('Unknown file open mode: ' + str);
|
|
}
|
|
return flags;
|
|
},flagsToPermissionString:function (flag) {
|
|
var accmode = flag & 2097155;
|
|
var perms = ['r', 'w', 'rw'][accmode];
|
|
if ((flag & 512)) {
|
|
perms += 'w';
|
|
}
|
|
return perms;
|
|
},nodePermissions:function (node, perms) {
|
|
if (FS.ignorePermissions) {
|
|
return 0;
|
|
}
|
|
// return 0 if any user, group or owner bits are set.
|
|
if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
|
|
return ERRNO_CODES.EACCES;
|
|
} else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
|
|
return ERRNO_CODES.EACCES;
|
|
} else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
|
|
return ERRNO_CODES.EACCES;
|
|
}
|
|
return 0;
|
|
},mayLookup:function (dir) {
|
|
return FS.nodePermissions(dir, 'x');
|
|
},mayCreate:function (dir, name) {
|
|
try {
|
|
var node = FS.lookupNode(dir, name);
|
|
return ERRNO_CODES.EEXIST;
|
|
} catch (e) {
|
|
}
|
|
return FS.nodePermissions(dir, 'wx');
|
|
},mayDelete:function (dir, name, isdir) {
|
|
var node;
|
|
try {
|
|
node = FS.lookupNode(dir, name);
|
|
} catch (e) {
|
|
return e.errno;
|
|
}
|
|
var err = FS.nodePermissions(dir, 'wx');
|
|
if (err) {
|
|
return err;
|
|
}
|
|
if (isdir) {
|
|
if (!FS.isDir(node.mode)) {
|
|
return ERRNO_CODES.ENOTDIR;
|
|
}
|
|
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
|
|
return ERRNO_CODES.EBUSY;
|
|
}
|
|
} else {
|
|
if (FS.isDir(node.mode)) {
|
|
return ERRNO_CODES.EISDIR;
|
|
}
|
|
}
|
|
return 0;
|
|
},mayOpen:function (node, flags) {
|
|
if (!node) {
|
|
return ERRNO_CODES.ENOENT;
|
|
}
|
|
if (FS.isLink(node.mode)) {
|
|
return ERRNO_CODES.ELOOP;
|
|
} else if (FS.isDir(node.mode)) {
|
|
if ((flags & 2097155) !== 0 || // opening for write
|
|
(flags & 512)) {
|
|
return ERRNO_CODES.EISDIR;
|
|
}
|
|
}
|
|
return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
|
|
},MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
|
|
fd_start = fd_start || 0;
|
|
fd_end = fd_end || FS.MAX_OPEN_FDS;
|
|
for (var fd = fd_start; fd <= fd_end; fd++) {
|
|
if (!FS.streams[fd]) {
|
|
return fd;
|
|
}
|
|
}
|
|
throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
|
|
},getStream:function (fd) {
|
|
return FS.streams[fd];
|
|
},createStream:function (stream, fd_start, fd_end) {
|
|
if (!FS.FSStream) {
|
|
FS.FSStream = function(){};
|
|
FS.FSStream.prototype = {};
|
|
// compatibility
|
|
Object.defineProperties(FS.FSStream.prototype, {
|
|
object: {
|
|
get: function() { return this.node; },
|
|
set: function(val) { this.node = val; }
|
|
},
|
|
isRead: {
|
|
get: function() { return (this.flags & 2097155) !== 1; }
|
|
},
|
|
isWrite: {
|
|
get: function() { return (this.flags & 2097155) !== 0; }
|
|
},
|
|
isAppend: {
|
|
get: function() { return (this.flags & 1024); }
|
|
}
|
|
});
|
|
}
|
|
if (stream.__proto__) {
|
|
// reuse the object
|
|
stream.__proto__ = FS.FSStream.prototype;
|
|
} else {
|
|
var newStream = new FS.FSStream();
|
|
for (var p in stream) {
|
|
newStream[p] = stream[p];
|
|
}
|
|
stream = newStream;
|
|
}
|
|
var fd = FS.nextfd(fd_start, fd_end);
|
|
stream.fd = fd;
|
|
FS.streams[fd] = stream;
|
|
return stream;
|
|
},closeStream:function (fd) {
|
|
FS.streams[fd] = null;
|
|
},getStreamFromPtr:function (ptr) {
|
|
return FS.streams[ptr - 1];
|
|
},getPtrForStream:function (stream) {
|
|
return stream ? stream.fd + 1 : 0;
|
|
},chrdev_stream_ops:{open:function (stream) {
|
|
var device = FS.getDevice(stream.node.rdev);
|
|
// override node's stream ops with the device's
|
|
stream.stream_ops = device.stream_ops;
|
|
// forward the open call
|
|
if (stream.stream_ops.open) {
|
|
stream.stream_ops.open(stream);
|
|
}
|
|
},llseek:function () {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
|
|
}},major:function (dev) {
|
|
return ((dev) >> 8);
|
|
},minor:function (dev) {
|
|
return ((dev) & 0xff);
|
|
},makedev:function (ma, mi) {
|
|
return ((ma) << 8 | (mi));
|
|
},registerDevice:function (dev, ops) {
|
|
FS.devices[dev] = { stream_ops: ops };
|
|
},getDevice:function (dev) {
|
|
return FS.devices[dev];
|
|
},getMounts:function (mount) {
|
|
var mounts = [];
|
|
var check = [mount];
|
|
|
|
while (check.length) {
|
|
var m = check.pop();
|
|
|
|
mounts.push(m);
|
|
|
|
check.push.apply(check, m.mounts);
|
|
}
|
|
|
|
return mounts;
|
|
},syncfs:function (populate, callback) {
|
|
if (typeof(populate) === 'function') {
|
|
callback = populate;
|
|
populate = false;
|
|
}
|
|
|
|
var mounts = FS.getMounts(FS.root.mount);
|
|
var completed = 0;
|
|
|
|
function done(err) {
|
|
if (err) {
|
|
if (!done.errored) {
|
|
done.errored = true;
|
|
return callback(err);
|
|
}
|
|
return;
|
|
}
|
|
if (++completed >= mounts.length) {
|
|
callback(null);
|
|
}
|
|
};
|
|
|
|
// sync all mounts
|
|
mounts.forEach(function (mount) {
|
|
if (!mount.type.syncfs) {
|
|
return done(null);
|
|
}
|
|
mount.type.syncfs(mount, populate, done);
|
|
});
|
|
},mount:function (type, opts, mountpoint) {
|
|
var root = mountpoint === '/';
|
|
var pseudo = !mountpoint;
|
|
var node;
|
|
|
|
if (root && FS.root) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
|
|
} else if (!root && !pseudo) {
|
|
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
|
|
|
|
mountpoint = lookup.path; // use the absolute path
|
|
node = lookup.node;
|
|
|
|
if (FS.isMountpoint(node)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
|
|
}
|
|
|
|
if (!FS.isDir(node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
|
|
}
|
|
}
|
|
|
|
var mount = {
|
|
type: type,
|
|
opts: opts,
|
|
mountpoint: mountpoint,
|
|
mounts: []
|
|
};
|
|
|
|
// create a root node for the fs
|
|
var mountRoot = type.mount(mount);
|
|
mountRoot.mount = mount;
|
|
mount.root = mountRoot;
|
|
|
|
if (root) {
|
|
FS.root = mountRoot;
|
|
} else if (node) {
|
|
// set as a mountpoint
|
|
node.mounted = mount;
|
|
|
|
// add the new mount to the current mount's children
|
|
if (node.mount) {
|
|
node.mount.mounts.push(mount);
|
|
}
|
|
}
|
|
|
|
return mountRoot;
|
|
},unmount:function (mountpoint) {
|
|
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
|
|
|
|
if (!FS.isMountpoint(lookup.node)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
|
|
// destroy the nodes for this mount, and all its child mounts
|
|
var node = lookup.node;
|
|
var mount = node.mounted;
|
|
var mounts = FS.getMounts(mount);
|
|
|
|
Object.keys(FS.nameTable).forEach(function (hash) {
|
|
var current = FS.nameTable[hash];
|
|
|
|
while (current) {
|
|
var next = current.name_next;
|
|
|
|
if (mounts.indexOf(current.mount) !== -1) {
|
|
FS.destroyNode(current);
|
|
}
|
|
|
|
current = next;
|
|
}
|
|
});
|
|
|
|
// no longer a mountpoint
|
|
node.mounted = null;
|
|
|
|
// remove this mount from the child mounts
|
|
var idx = node.mount.mounts.indexOf(mount);
|
|
assert(idx !== -1);
|
|
node.mount.mounts.splice(idx, 1);
|
|
},lookup:function (parent, name) {
|
|
return parent.node_ops.lookup(parent, name);
|
|
},mknod:function (path, mode, dev) {
|
|
var lookup = FS.lookupPath(path, { parent: true });
|
|
var parent = lookup.node;
|
|
var name = PATH.basename(path);
|
|
var err = FS.mayCreate(parent, name);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
if (!parent.node_ops.mknod) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
return parent.node_ops.mknod(parent, name, mode, dev);
|
|
},create:function (path, mode) {
|
|
mode = mode !== undefined ? mode : 0666;
|
|
mode &= 4095;
|
|
mode |= 32768;
|
|
return FS.mknod(path, mode, 0);
|
|
},mkdir:function (path, mode) {
|
|
mode = mode !== undefined ? mode : 0777;
|
|
mode &= 511 | 512;
|
|
mode |= 16384;
|
|
return FS.mknod(path, mode, 0);
|
|
},mkdev:function (path, mode, dev) {
|
|
if (typeof(dev) === 'undefined') {
|
|
dev = mode;
|
|
mode = 0666;
|
|
}
|
|
mode |= 8192;
|
|
return FS.mknod(path, mode, dev);
|
|
},symlink:function (oldpath, newpath) {
|
|
var lookup = FS.lookupPath(newpath, { parent: true });
|
|
var parent = lookup.node;
|
|
var newname = PATH.basename(newpath);
|
|
var err = FS.mayCreate(parent, newname);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
if (!parent.node_ops.symlink) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
return parent.node_ops.symlink(parent, newname, oldpath);
|
|
},rename:function (old_path, new_path) {
|
|
var old_dirname = PATH.dirname(old_path);
|
|
var new_dirname = PATH.dirname(new_path);
|
|
var old_name = PATH.basename(old_path);
|
|
var new_name = PATH.basename(new_path);
|
|
// parents must exist
|
|
var lookup, old_dir, new_dir;
|
|
try {
|
|
lookup = FS.lookupPath(old_path, { parent: true });
|
|
old_dir = lookup.node;
|
|
lookup = FS.lookupPath(new_path, { parent: true });
|
|
new_dir = lookup.node;
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
|
|
}
|
|
// need to be part of the same mount
|
|
if (old_dir.mount !== new_dir.mount) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
|
|
}
|
|
// source must exist
|
|
var old_node = FS.lookupNode(old_dir, old_name);
|
|
// old path should not be an ancestor of the new path
|
|
var relative = PATH.relative(old_path, new_dirname);
|
|
if (relative.charAt(0) !== '.') {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
// new path should not be an ancestor of the old path
|
|
relative = PATH.relative(new_path, old_dirname);
|
|
if (relative.charAt(0) !== '.') {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
|
|
}
|
|
// see if the new path already exists
|
|
var new_node;
|
|
try {
|
|
new_node = FS.lookupNode(new_dir, new_name);
|
|
} catch (e) {
|
|
// not fatal
|
|
}
|
|
// early out if nothing needs to change
|
|
if (old_node === new_node) {
|
|
return;
|
|
}
|
|
// we'll need to delete the old entry
|
|
var isdir = FS.isDir(old_node.mode);
|
|
var err = FS.mayDelete(old_dir, old_name, isdir);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
// need delete permissions if we'll be overwriting.
|
|
// need create permissions if new doesn't already exist.
|
|
err = new_node ?
|
|
FS.mayDelete(new_dir, new_name, isdir) :
|
|
FS.mayCreate(new_dir, new_name);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
if (!old_dir.node_ops.rename) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
|
|
}
|
|
// if we are going to change the parent, check write permissions
|
|
if (new_dir !== old_dir) {
|
|
err = FS.nodePermissions(old_dir, 'w');
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
}
|
|
// remove the node from the lookup hash
|
|
FS.hashRemoveNode(old_node);
|
|
// do the underlying fs rename
|
|
try {
|
|
old_dir.node_ops.rename(old_node, new_dir, new_name);
|
|
} catch (e) {
|
|
throw e;
|
|
} finally {
|
|
// add the node back to the hash (in case node_ops.rename
|
|
// changed its name)
|
|
FS.hashAddNode(old_node);
|
|
}
|
|
},rmdir:function (path) {
|
|
var lookup = FS.lookupPath(path, { parent: true });
|
|
var parent = lookup.node;
|
|
var name = PATH.basename(path);
|
|
var node = FS.lookupNode(parent, name);
|
|
var err = FS.mayDelete(parent, name, true);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
if (!parent.node_ops.rmdir) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
if (FS.isMountpoint(node)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
|
|
}
|
|
parent.node_ops.rmdir(parent, name);
|
|
FS.destroyNode(node);
|
|
},readdir:function (path) {
|
|
var lookup = FS.lookupPath(path, { follow: true });
|
|
var node = lookup.node;
|
|
if (!node.node_ops.readdir) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
|
|
}
|
|
return node.node_ops.readdir(node);
|
|
},unlink:function (path) {
|
|
var lookup = FS.lookupPath(path, { parent: true });
|
|
var parent = lookup.node;
|
|
var name = PATH.basename(path);
|
|
var node = FS.lookupNode(parent, name);
|
|
var err = FS.mayDelete(parent, name, false);
|
|
if (err) {
|
|
// POSIX says unlink should set EPERM, not EISDIR
|
|
if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
if (!parent.node_ops.unlink) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
if (FS.isMountpoint(node)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
|
|
}
|
|
parent.node_ops.unlink(parent, name);
|
|
FS.destroyNode(node);
|
|
},readlink:function (path) {
|
|
var lookup = FS.lookupPath(path);
|
|
var link = lookup.node;
|
|
if (!link.node_ops.readlink) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
return link.node_ops.readlink(link);
|
|
},stat:function (path, dontFollow) {
|
|
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
var node = lookup.node;
|
|
if (!node.node_ops.getattr) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
return node.node_ops.getattr(node);
|
|
},lstat:function (path) {
|
|
return FS.stat(path, true);
|
|
},chmod:function (path, mode, dontFollow) {
|
|
var node;
|
|
if (typeof path === 'string') {
|
|
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
node = lookup.node;
|
|
} else {
|
|
node = path;
|
|
}
|
|
if (!node.node_ops.setattr) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
node.node_ops.setattr(node, {
|
|
mode: (mode & 4095) | (node.mode & ~4095),
|
|
timestamp: Date.now()
|
|
});
|
|
},lchmod:function (path, mode) {
|
|
FS.chmod(path, mode, true);
|
|
},fchmod:function (fd, mode) {
|
|
var stream = FS.getStream(fd);
|
|
if (!stream) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
|
|
}
|
|
FS.chmod(stream.node, mode);
|
|
},chown:function (path, uid, gid, dontFollow) {
|
|
var node;
|
|
if (typeof path === 'string') {
|
|
var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
|
node = lookup.node;
|
|
} else {
|
|
node = path;
|
|
}
|
|
if (!node.node_ops.setattr) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
node.node_ops.setattr(node, {
|
|
timestamp: Date.now()
|
|
// we ignore the uid / gid for now
|
|
});
|
|
},lchown:function (path, uid, gid) {
|
|
FS.chown(path, uid, gid, true);
|
|
},fchown:function (fd, uid, gid) {
|
|
var stream = FS.getStream(fd);
|
|
if (!stream) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
|
|
}
|
|
FS.chown(stream.node, uid, gid);
|
|
},truncate:function (path, len) {
|
|
if (len < 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
var node;
|
|
if (typeof path === 'string') {
|
|
var lookup = FS.lookupPath(path, { follow: true });
|
|
node = lookup.node;
|
|
} else {
|
|
node = path;
|
|
}
|
|
if (!node.node_ops.setattr) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EPERM);
|
|
}
|
|
if (FS.isDir(node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
|
|
}
|
|
if (!FS.isFile(node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
var err = FS.nodePermissions(node, 'w');
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
node.node_ops.setattr(node, {
|
|
size: len,
|
|
timestamp: Date.now()
|
|
});
|
|
},ftruncate:function (fd, len) {
|
|
var stream = FS.getStream(fd);
|
|
if (!stream) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
|
|
}
|
|
if ((stream.flags & 2097155) === 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
FS.truncate(stream.node, len);
|
|
},utime:function (path, atime, mtime) {
|
|
var lookup = FS.lookupPath(path, { follow: true });
|
|
var node = lookup.node;
|
|
node.node_ops.setattr(node, {
|
|
timestamp: Math.max(atime, mtime)
|
|
});
|
|
},open:function (path, flags, mode, fd_start, fd_end) {
|
|
flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
|
|
mode = typeof mode === 'undefined' ? 0666 : mode;
|
|
if ((flags & 64)) {
|
|
mode = (mode & 4095) | 32768;
|
|
} else {
|
|
mode = 0;
|
|
}
|
|
var node;
|
|
if (typeof path === 'object') {
|
|
node = path;
|
|
} else {
|
|
path = PATH.normalize(path);
|
|
try {
|
|
var lookup = FS.lookupPath(path, {
|
|
follow: !(flags & 131072)
|
|
});
|
|
node = lookup.node;
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
}
|
|
// perhaps we need to create the node
|
|
if ((flags & 64)) {
|
|
if (node) {
|
|
// if O_CREAT and O_EXCL are set, error out if the node already exists
|
|
if ((flags & 128)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
|
|
}
|
|
} else {
|
|
// node doesn't exist, try to create it
|
|
node = FS.mknod(path, mode, 0);
|
|
}
|
|
}
|
|
if (!node) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
|
|
}
|
|
// can't truncate a device
|
|
if (FS.isChrdev(node.mode)) {
|
|
flags &= ~512;
|
|
}
|
|
// check permissions
|
|
var err = FS.mayOpen(node, flags);
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
// do truncation if necessary
|
|
if ((flags & 512)) {
|
|
FS.truncate(node, 0);
|
|
}
|
|
// we've already handled these, don't pass down to the underlying vfs
|
|
flags &= ~(128 | 512);
|
|
|
|
// register the stream with the filesystem
|
|
var stream = FS.createStream({
|
|
node: node,
|
|
path: FS.getPath(node), // we want the absolute path to the node
|
|
flags: flags,
|
|
seekable: true,
|
|
position: 0,
|
|
stream_ops: node.stream_ops,
|
|
// used by the file family libc calls (fopen, fwrite, ferror, etc.)
|
|
ungotten: [],
|
|
error: false
|
|
}, fd_start, fd_end);
|
|
// call the new stream's open function
|
|
if (stream.stream_ops.open) {
|
|
stream.stream_ops.open(stream);
|
|
}
|
|
if (Module['logReadFiles'] && !(flags & 1)) {
|
|
if (!FS.readFiles) FS.readFiles = {};
|
|
if (!(path in FS.readFiles)) {
|
|
FS.readFiles[path] = 1;
|
|
Module['printErr']('read file: ' + path);
|
|
}
|
|
}
|
|
return stream;
|
|
},close:function (stream) {
|
|
try {
|
|
if (stream.stream_ops.close) {
|
|
stream.stream_ops.close(stream);
|
|
}
|
|
} catch (e) {
|
|
throw e;
|
|
} finally {
|
|
FS.closeStream(stream.fd);
|
|
}
|
|
},llseek:function (stream, offset, whence) {
|
|
if (!stream.seekable || !stream.stream_ops.llseek) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
|
|
}
|
|
return stream.stream_ops.llseek(stream, offset, whence);
|
|
},read:function (stream, buffer, offset, length, position) {
|
|
if (length < 0 || position < 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
if ((stream.flags & 2097155) === 1) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
|
|
}
|
|
if (FS.isDir(stream.node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
|
|
}
|
|
if (!stream.stream_ops.read) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
var seeking = true;
|
|
if (typeof position === 'undefined') {
|
|
position = stream.position;
|
|
seeking = false;
|
|
} else if (!stream.seekable) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
|
|
}
|
|
var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
|
|
if (!seeking) stream.position += bytesRead;
|
|
return bytesRead;
|
|
},write:function (stream, buffer, offset, length, position, canOwn) {
|
|
if (length < 0 || position < 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
if ((stream.flags & 2097155) === 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
|
|
}
|
|
if (FS.isDir(stream.node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
|
|
}
|
|
if (!stream.stream_ops.write) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
var seeking = true;
|
|
if (typeof position === 'undefined') {
|
|
position = stream.position;
|
|
seeking = false;
|
|
} else if (!stream.seekable) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
|
|
}
|
|
if (stream.flags & 1024) {
|
|
// seek to the end before writing in append mode
|
|
FS.llseek(stream, 0, 2);
|
|
}
|
|
var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
|
|
if (!seeking) stream.position += bytesWritten;
|
|
return bytesWritten;
|
|
},allocate:function (stream, offset, length) {
|
|
if (offset < 0 || length <= 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
if ((stream.flags & 2097155) === 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EBADF);
|
|
}
|
|
if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
|
|
}
|
|
if (!stream.stream_ops.allocate) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
|
|
}
|
|
stream.stream_ops.allocate(stream, offset, length);
|
|
},mmap:function (stream, buffer, offset, length, position, prot, flags) {
|
|
// TODO if PROT is PROT_WRITE, make sure we have write access
|
|
if ((stream.flags & 2097155) === 1) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EACCES);
|
|
}
|
|
if (!stream.stream_ops.mmap) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
|
|
}
|
|
return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
|
|
},ioctl:function (stream, cmd, arg) {
|
|
if (!stream.stream_ops.ioctl) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
|
|
}
|
|
return stream.stream_ops.ioctl(stream, cmd, arg);
|
|
},readFile:function (path, opts) {
|
|
opts = opts || {};
|
|
opts.flags = opts.flags || 'r';
|
|
opts.encoding = opts.encoding || 'binary';
|
|
if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
|
|
throw new Error('Invalid encoding type "' + opts.encoding + '"');
|
|
}
|
|
var ret;
|
|
var stream = FS.open(path, opts.flags);
|
|
var stat = FS.stat(path);
|
|
var length = stat.size;
|
|
var buf = new Uint8Array(length);
|
|
FS.read(stream, buf, 0, length, 0);
|
|
if (opts.encoding === 'utf8') {
|
|
ret = '';
|
|
var utf8 = new Runtime.UTF8Processor();
|
|
for (var i = 0; i < length; i++) {
|
|
ret += utf8.processCChar(buf[i]);
|
|
}
|
|
} else if (opts.encoding === 'binary') {
|
|
ret = buf;
|
|
}
|
|
FS.close(stream);
|
|
return ret;
|
|
},writeFile:function (path, data, opts) {
|
|
opts = opts || {};
|
|
opts.flags = opts.flags || 'w';
|
|
opts.encoding = opts.encoding || 'utf8';
|
|
if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
|
|
throw new Error('Invalid encoding type "' + opts.encoding + '"');
|
|
}
|
|
var stream = FS.open(path, opts.flags, opts.mode);
|
|
if (opts.encoding === 'utf8') {
|
|
var utf8 = new Runtime.UTF8Processor();
|
|
var buf = new Uint8Array(utf8.processJSString(data));
|
|
FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
|
|
} else if (opts.encoding === 'binary') {
|
|
FS.write(stream, data, 0, data.length, 0, opts.canOwn);
|
|
}
|
|
FS.close(stream);
|
|
},cwd:function () {
|
|
return FS.currentPath;
|
|
},chdir:function (path) {
|
|
var lookup = FS.lookupPath(path, { follow: true });
|
|
if (!FS.isDir(lookup.node.mode)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
|
|
}
|
|
var err = FS.nodePermissions(lookup.node, 'x');
|
|
if (err) {
|
|
throw new FS.ErrnoError(err);
|
|
}
|
|
FS.currentPath = lookup.path;
|
|
},createDefaultDirectories:function () {
|
|
FS.mkdir('/tmp');
|
|
},createDefaultDevices:function () {
|
|
// create /dev
|
|
FS.mkdir('/dev');
|
|
// setup /dev/null
|
|
FS.registerDevice(FS.makedev(1, 3), {
|
|
read: function() { return 0; },
|
|
write: function() { return 0; }
|
|
});
|
|
FS.mkdev('/dev/null', FS.makedev(1, 3));
|
|
// setup /dev/tty and /dev/tty1
|
|
// stderr needs to print output using Module['printErr']
|
|
// so we register a second tty just for it.
|
|
TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
|
|
TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
|
|
FS.mkdev('/dev/tty', FS.makedev(5, 0));
|
|
FS.mkdev('/dev/tty1', FS.makedev(6, 0));
|
|
// we're not going to emulate the actual shm device,
|
|
// just create the tmp dirs that reside in it commonly
|
|
FS.mkdir('/dev/shm');
|
|
FS.mkdir('/dev/shm/tmp');
|
|
},createStandardStreams:function () {
|
|
// TODO deprecate the old functionality of a single
|
|
// input / output callback and that utilizes FS.createDevice
|
|
// and instead require a unique set of stream ops
|
|
|
|
// by default, we symlink the standard streams to the
|
|
// default tty devices. however, if the standard streams
|
|
// have been overwritten we create a unique device for
|
|
// them instead.
|
|
if (Module['stdin']) {
|
|
FS.createDevice('/dev', 'stdin', Module['stdin']);
|
|
} else {
|
|
FS.symlink('/dev/tty', '/dev/stdin');
|
|
}
|
|
if (Module['stdout']) {
|
|
FS.createDevice('/dev', 'stdout', null, Module['stdout']);
|
|
} else {
|
|
FS.symlink('/dev/tty', '/dev/stdout');
|
|
}
|
|
if (Module['stderr']) {
|
|
FS.createDevice('/dev', 'stderr', null, Module['stderr']);
|
|
} else {
|
|
FS.symlink('/dev/tty1', '/dev/stderr');
|
|
}
|
|
|
|
// open default streams for the stdin, stdout and stderr devices
|
|
var stdin = FS.open('/dev/stdin', 'r');
|
|
HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
|
|
assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
|
|
|
|
var stdout = FS.open('/dev/stdout', 'w');
|
|
HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
|
|
assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
|
|
|
|
var stderr = FS.open('/dev/stderr', 'w');
|
|
HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
|
|
assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
|
|
},ensureErrnoError:function () {
|
|
if (FS.ErrnoError) return;
|
|
FS.ErrnoError = function ErrnoError(errno) {
|
|
this.errno = errno;
|
|
for (var key in ERRNO_CODES) {
|
|
if (ERRNO_CODES[key] === errno) {
|
|
this.code = key;
|
|
break;
|
|
}
|
|
}
|
|
this.message = ERRNO_MESSAGES[errno];
|
|
};
|
|
FS.ErrnoError.prototype = new Error();
|
|
FS.ErrnoError.prototype.constructor = FS.ErrnoError;
|
|
// Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
|
|
[ERRNO_CODES.ENOENT].forEach(function(code) {
|
|
FS.genericErrors[code] = new FS.ErrnoError(code);
|
|
FS.genericErrors[code].stack = '<generic error, no stack>';
|
|
});
|
|
},staticInit:function () {
|
|
FS.ensureErrnoError();
|
|
|
|
FS.nameTable = new Array(4096);
|
|
|
|
FS.mount(MEMFS, {}, '/');
|
|
|
|
FS.createDefaultDirectories();
|
|
FS.createDefaultDevices();
|
|
},init:function (input, output, error) {
|
|
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)');
|
|
FS.init.initialized = true;
|
|
|
|
FS.ensureErrnoError();
|
|
|
|
// Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
|
|
Module['stdin'] = input || Module['stdin'];
|
|
Module['stdout'] = output || Module['stdout'];
|
|
Module['stderr'] = error || Module['stderr'];
|
|
|
|
FS.createStandardStreams();
|
|
},quit:function () {
|
|
FS.init.initialized = false;
|
|
for (var i = 0; i < FS.streams.length; i++) {
|
|
var stream = FS.streams[i];
|
|
if (!stream) {
|
|
continue;
|
|
}
|
|
FS.close(stream);
|
|
}
|
|
},getMode:function (canRead, canWrite) {
|
|
var mode = 0;
|
|
if (canRead) mode |= 292 | 73;
|
|
if (canWrite) mode |= 146;
|
|
return mode;
|
|
},joinPath:function (parts, forceRelative) {
|
|
var path = PATH.join.apply(null, parts);
|
|
if (forceRelative && path[0] == '/') path = path.substr(1);
|
|
return path;
|
|
},absolutePath:function (relative, base) {
|
|
return PATH.resolve(base, relative);
|
|
},standardizePath:function (path) {
|
|
return PATH.normalize(path);
|
|
},findObject:function (path, dontResolveLastLink) {
|
|
var ret = FS.analyzePath(path, dontResolveLastLink);
|
|
if (ret.exists) {
|
|
return ret.object;
|
|
} else {
|
|
___setErrNo(ret.error);
|
|
return null;
|
|
}
|
|
},analyzePath:function (path, dontResolveLastLink) {
|
|
// operate from within the context of the symlink's target
|
|
try {
|
|
var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
|
path = lookup.path;
|
|
} catch (e) {
|
|
}
|
|
var ret = {
|
|
isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
|
|
parentExists: false, parentPath: null, parentObject: null
|
|
};
|
|
try {
|
|
var lookup = FS.lookupPath(path, { parent: true });
|
|
ret.parentExists = true;
|
|
ret.parentPath = lookup.path;
|
|
ret.parentObject = lookup.node;
|
|
ret.name = PATH.basename(path);
|
|
lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
|
ret.exists = true;
|
|
ret.path = lookup.path;
|
|
ret.object = lookup.node;
|
|
ret.name = lookup.node.name;
|
|
ret.isRoot = lookup.path === '/';
|
|
} catch (e) {
|
|
ret.error = e.errno;
|
|
};
|
|
return ret;
|
|
},createFolder:function (parent, name, canRead, canWrite) {
|
|
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
|
var mode = FS.getMode(canRead, canWrite);
|
|
return FS.mkdir(path, mode);
|
|
},createPath:function (parent, path, canRead, canWrite) {
|
|
parent = typeof parent === 'string' ? parent : FS.getPath(parent);
|
|
var parts = path.split('/').reverse();
|
|
while (parts.length) {
|
|
var part = parts.pop();
|
|
if (!part) continue;
|
|
var current = PATH.join2(parent, part);
|
|
try {
|
|
FS.mkdir(current);
|
|
} catch (e) {
|
|
// ignore EEXIST
|
|
}
|
|
parent = current;
|
|
}
|
|
return current;
|
|
},createFile:function (parent, name, properties, canRead, canWrite) {
|
|
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
|
var mode = FS.getMode(canRead, canWrite);
|
|
return FS.create(path, mode);
|
|
},createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
|
|
var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
|
|
var mode = FS.getMode(canRead, canWrite);
|
|
var node = FS.create(path, mode);
|
|
if (data) {
|
|
if (typeof data === 'string') {
|
|
var arr = new Array(data.length);
|
|
for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
|
|
data = arr;
|
|
}
|
|
// make sure we can write to the file
|
|
FS.chmod(node, mode | 146);
|
|
var stream = FS.open(node, 'w');
|
|
FS.write(stream, data, 0, data.length, 0, canOwn);
|
|
FS.close(stream);
|
|
FS.chmod(node, mode);
|
|
}
|
|
return node;
|
|
},createDevice:function (parent, name, input, output) {
|
|
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
|
var mode = FS.getMode(!!input, !!output);
|
|
if (!FS.createDevice.major) FS.createDevice.major = 64;
|
|
var dev = FS.makedev(FS.createDevice.major++, 0);
|
|
// Create a fake device that a set of stream ops to emulate
|
|
// the old behavior.
|
|
FS.registerDevice(dev, {
|
|
open: function(stream) {
|
|
stream.seekable = false;
|
|
},
|
|
close: function(stream) {
|
|
// flush any pending line data
|
|
if (output && output.buffer && output.buffer.length) {
|
|
output(10);
|
|
}
|
|
},
|
|
read: function(stream, buffer, offset, length, pos /* ignored */) {
|
|
var bytesRead = 0;
|
|
for (var i = 0; i < length; i++) {
|
|
var result;
|
|
try {
|
|
result = input();
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
|
}
|
|
if (result === undefined && bytesRead === 0) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
|
|
}
|
|
if (result === null || result === undefined) break;
|
|
bytesRead++;
|
|
buffer[offset+i] = result;
|
|
}
|
|
if (bytesRead) {
|
|
stream.node.timestamp = Date.now();
|
|
}
|
|
return bytesRead;
|
|
},
|
|
write: function(stream, buffer, offset, length, pos) {
|
|
for (var i = 0; i < length; i++) {
|
|
try {
|
|
output(buffer[offset+i]);
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
|
}
|
|
}
|
|
if (length) {
|
|
stream.node.timestamp = Date.now();
|
|
}
|
|
return i;
|
|
}
|
|
});
|
|
return FS.mkdev(path, mode, dev);
|
|
},createLink:function (parent, name, target, canRead, canWrite) {
|
|
var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
|
|
return FS.symlink(target, path);
|
|
},forceLoadFile:function (obj) {
|
|
if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
|
|
var success = true;
|
|
if (typeof XMLHttpRequest !== 'undefined') {
|
|
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.");
|
|
} else if (Module['read']) {
|
|
// Command-line.
|
|
try {
|
|
// WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
|
|
// read() will try to parse UTF8.
|
|
obj.contents = intArrayFromString(Module['read'](obj.url), true);
|
|
} catch (e) {
|
|
success = false;
|
|
}
|
|
} else {
|
|
throw new Error('Cannot load without read() or XMLHttpRequest.');
|
|
}
|
|
if (!success) ___setErrNo(ERRNO_CODES.EIO);
|
|
return success;
|
|
},createLazyFile:function (parent, name, url, canRead, canWrite) {
|
|
if (typeof XMLHttpRequest !== 'undefined') {
|
|
if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
|
|
// Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
|
|
function LazyUint8Array() {
|
|
this.lengthKnown = false;
|
|
this.chunks = []; // Loaded chunks. Index is the chunk number
|
|
}
|
|
LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
|
|
if (idx > this.length-1 || idx < 0) {
|
|
return undefined;
|
|
}
|
|
var chunkOffset = idx % this.chunkSize;
|
|
var chunkNum = Math.floor(idx / this.chunkSize);
|
|
return this.getter(chunkNum)[chunkOffset];
|
|
}
|
|
LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
|
|
this.getter = getter;
|
|
}
|
|
LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
|
|
// Find length
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('HEAD', url, false);
|
|
xhr.send(null);
|
|
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
|
|
var datalength = Number(xhr.getResponseHeader("Content-length"));
|
|
var header;
|
|
var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
|
|
var chunkSize = 1024*1024; // Chunk size in bytes
|
|
|
|
if (!hasByteServing) chunkSize = datalength;
|
|
|
|
// Function to get a range from the remote URL.
|
|
var doXHR = (function(from, to) {
|
|
if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
|
|
if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
|
|
|
|
// TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('GET', url, false);
|
|
if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
|
|
|
|
// Some hints to the browser that we want binary data.
|
|
if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
|
|
if (xhr.overrideMimeType) {
|
|
xhr.overrideMimeType('text/plain; charset=x-user-defined');
|
|
}
|
|
|
|
xhr.send(null);
|
|
if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
|
|
if (xhr.response !== undefined) {
|
|
return new Uint8Array(xhr.response || []);
|
|
} else {
|
|
return intArrayFromString(xhr.responseText || '', true);
|
|
}
|
|
});
|
|
var lazyArray = this;
|
|
lazyArray.setDataGetter(function(chunkNum) {
|
|
var start = chunkNum * chunkSize;
|
|
var end = (chunkNum+1) * chunkSize - 1; // including this byte
|
|
end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
|
|
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
|
|
lazyArray.chunks[chunkNum] = doXHR(start, end);
|
|
}
|
|
if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
|
|
return lazyArray.chunks[chunkNum];
|
|
});
|
|
|
|
this._length = datalength;
|
|
this._chunkSize = chunkSize;
|
|
this.lengthKnown = true;
|
|
}
|
|
|
|
var lazyArray = new LazyUint8Array();
|
|
Object.defineProperty(lazyArray, "length", {
|
|
get: function() {
|
|
if(!this.lengthKnown) {
|
|
this.cacheLength();
|
|
}
|
|
return this._length;
|
|
}
|
|
});
|
|
Object.defineProperty(lazyArray, "chunkSize", {
|
|
get: function() {
|
|
if(!this.lengthKnown) {
|
|
this.cacheLength();
|
|
}
|
|
return this._chunkSize;
|
|
}
|
|
});
|
|
|
|
var properties = { isDevice: false, contents: lazyArray };
|
|
} else {
|
|
var properties = { isDevice: false, url: url };
|
|
}
|
|
|
|
var node = FS.createFile(parent, name, properties, canRead, canWrite);
|
|
// This is a total hack, but I want to get this lazy file code out of the
|
|
// core of MEMFS. If we want to keep this lazy file concept I feel it should
|
|
// be its own thin LAZYFS proxying calls to MEMFS.
|
|
if (properties.contents) {
|
|
node.contents = properties.contents;
|
|
} else if (properties.url) {
|
|
node.contents = null;
|
|
node.url = properties.url;
|
|
}
|
|
// override each stream op with one that tries to force load the lazy file first
|
|
var stream_ops = {};
|
|
var keys = Object.keys(node.stream_ops);
|
|
keys.forEach(function(key) {
|
|
var fn = node.stream_ops[key];
|
|
stream_ops[key] = function forceLoadLazyFile() {
|
|
if (!FS.forceLoadFile(node)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
|
}
|
|
return fn.apply(null, arguments);
|
|
};
|
|
});
|
|
// use a custom read function
|
|
stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
|
|
if (!FS.forceLoadFile(node)) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EIO);
|
|
}
|
|
var contents = stream.node.contents;
|
|
if (position >= contents.length)
|
|
return 0;
|
|
var size = Math.min(contents.length - position, length);
|
|
assert(size >= 0);
|
|
if (contents.slice) { // normal array
|
|
for (var i = 0; i < size; i++) {
|
|
buffer[offset + i] = contents[position + i];
|
|
}
|
|
} else {
|
|
for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
|
|
buffer[offset + i] = contents.get(position + i);
|
|
}
|
|
}
|
|
return size;
|
|
};
|
|
node.stream_ops = stream_ops;
|
|
return node;
|
|
},createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
|
|
Browser.init();
|
|
// TODO we should allow people to just pass in a complete filename instead
|
|
// of parent and name being that we just join them anyways
|
|
var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
|
|
function processData(byteArray) {
|
|
function finish(byteArray) {
|
|
if (!dontCreateFile) {
|
|
FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
|
|
}
|
|
if (onload) onload();
|
|
removeRunDependency('cp ' + fullname);
|
|
}
|
|
var handled = false;
|
|
Module['preloadPlugins'].forEach(function(plugin) {
|
|
if (handled) return;
|
|
if (plugin['canHandle'](fullname)) {
|
|
plugin['handle'](byteArray, fullname, finish, function() {
|
|
if (onerror) onerror();
|
|
removeRunDependency('cp ' + fullname);
|
|
});
|
|
handled = true;
|
|
}
|
|
});
|
|
if (!handled) finish(byteArray);
|
|
}
|
|
addRunDependency('cp ' + fullname);
|
|
if (typeof url == 'string') {
|
|
Browser.asyncLoad(url, function(byteArray) {
|
|
processData(byteArray);
|
|
}, onerror);
|
|
} else {
|
|
processData(url);
|
|
}
|
|
},indexedDB:function () {
|
|
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
|
|
},DB_NAME:function () {
|
|
return 'EM_FS_' + window.location.pathname;
|
|
},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
|
|
onload = onload || function(){};
|
|
onerror = onerror || function(){};
|
|
var indexedDB = FS.indexedDB();
|
|
try {
|
|
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
|
|
} catch (e) {
|
|
return onerror(e);
|
|
}
|
|
openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
|
|
console.log('creating db');
|
|
var db = openRequest.result;
|
|
db.createObjectStore(FS.DB_STORE_NAME);
|
|
};
|
|
openRequest.onsuccess = function openRequest_onsuccess() {
|
|
var db = openRequest.result;
|
|
var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
|
|
var files = transaction.objectStore(FS.DB_STORE_NAME);
|
|
var ok = 0, fail = 0, total = paths.length;
|
|
function finish() {
|
|
if (fail == 0) onload(); else onerror();
|
|
}
|
|
paths.forEach(function(path) {
|
|
var putRequest = files.put(FS.analyzePath(path).object.contents, path);
|
|
putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
|
|
putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
|
|
});
|
|
transaction.onerror = onerror;
|
|
};
|
|
openRequest.onerror = onerror;
|
|
},loadFilesFromDB:function (paths, onload, onerror) {
|
|
onload = onload || function(){};
|
|
onerror = onerror || function(){};
|
|
var indexedDB = FS.indexedDB();
|
|
try {
|
|
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
|
|
} catch (e) {
|
|
return onerror(e);
|
|
}
|
|
openRequest.onupgradeneeded = onerror; // no database to load from
|
|
openRequest.onsuccess = function openRequest_onsuccess() {
|
|
var db = openRequest.result;
|
|
try {
|
|
var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
|
|
} catch(e) {
|
|
onerror(e);
|
|
return;
|
|
}
|
|
var files = transaction.objectStore(FS.DB_STORE_NAME);
|
|
var ok = 0, fail = 0, total = paths.length;
|
|
function finish() {
|
|
if (fail == 0) onload(); else onerror();
|
|
}
|
|
paths.forEach(function(path) {
|
|
var getRequest = files.get(path);
|
|
getRequest.onsuccess = function getRequest_onsuccess() {
|
|
if (FS.analyzePath(path).exists) {
|
|
FS.unlink(path);
|
|
}
|
|
FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
|
|
ok++;
|
|
if (ok + fail == total) finish();
|
|
};
|
|
getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
|
|
});
|
|
transaction.onerror = onerror;
|
|
};
|
|
openRequest.onerror = onerror;
|
|
}};var PATH={splitPath:function (filename) {
|
|
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
|
|
return splitPathRe.exec(filename).slice(1);
|
|
},normalizeArray:function (parts, allowAboveRoot) {
|
|
// if the path tries to go above the root, `up` ends up > 0
|
|
var up = 0;
|
|
for (var i = parts.length - 1; i >= 0; i--) {
|
|
var last = parts[i];
|
|
if (last === '.') {
|
|
parts.splice(i, 1);
|
|
} else if (last === '..') {
|
|
parts.splice(i, 1);
|
|
up++;
|
|
} else if (up) {
|
|
parts.splice(i, 1);
|
|
up--;
|
|
}
|
|
}
|
|
// if the path is allowed to go above the root, restore leading ..s
|
|
if (allowAboveRoot) {
|
|
for (; up--; up) {
|
|
parts.unshift('..');
|
|
}
|
|
}
|
|
return parts;
|
|
},normalize:function (path) {
|
|
var isAbsolute = path.charAt(0) === '/',
|
|
trailingSlash = path.substr(-1) === '/';
|
|
// Normalize the path
|
|
path = PATH.normalizeArray(path.split('/').filter(function(p) {
|
|
return !!p;
|
|
}), !isAbsolute).join('/');
|
|
if (!path && !isAbsolute) {
|
|
path = '.';
|
|
}
|
|
if (path && trailingSlash) {
|
|
path += '/';
|
|
}
|
|
return (isAbsolute ? '/' : '') + path;
|
|
},dirname:function (path) {
|
|
var result = PATH.splitPath(path),
|
|
root = result[0],
|
|
dir = result[1];
|
|
if (!root && !dir) {
|
|
// No dirname whatsoever
|
|
return '.';
|
|
}
|
|
if (dir) {
|
|
// It has a dirname, strip trailing slash
|
|
dir = dir.substr(0, dir.length - 1);
|
|
}
|
|
return root + dir;
|
|
},basename:function (path) {
|
|
// EMSCRIPTEN return '/'' for '/', not an empty string
|
|
if (path === '/') return '/';
|
|
var lastSlash = path.lastIndexOf('/');
|
|
if (lastSlash === -1) return path;
|
|
return path.substr(lastSlash+1);
|
|
},extname:function (path) {
|
|
return PATH.splitPath(path)[3];
|
|
},join:function () {
|
|
var paths = Array.prototype.slice.call(arguments, 0);
|
|
return PATH.normalize(paths.join('/'));
|
|
},join2:function (l, r) {
|
|
return PATH.normalize(l + '/' + r);
|
|
},resolve:function () {
|
|
var resolvedPath = '',
|
|
resolvedAbsolute = false;
|
|
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
|
var path = (i >= 0) ? arguments[i] : FS.cwd();
|
|
// Skip empty and invalid entries
|
|
if (typeof path !== 'string') {
|
|
throw new TypeError('Arguments to path.resolve must be strings');
|
|
} else if (!path) {
|
|
continue;
|
|
}
|
|
resolvedPath = path + '/' + resolvedPath;
|
|
resolvedAbsolute = path.charAt(0) === '/';
|
|
}
|
|
// At this point the path should be resolved to a full absolute path, but
|
|
// handle relative paths to be safe (might happen when process.cwd() fails)
|
|
resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
|
|
return !!p;
|
|
}), !resolvedAbsolute).join('/');
|
|
return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
|
|
},relative:function (from, to) {
|
|
from = PATH.resolve(from).substr(1);
|
|
to = PATH.resolve(to).substr(1);
|
|
function trim(arr) {
|
|
var start = 0;
|
|
for (; start < arr.length; start++) {
|
|
if (arr[start] !== '') break;
|
|
}
|
|
var end = arr.length - 1;
|
|
for (; end >= 0; end--) {
|
|
if (arr[end] !== '') break;
|
|
}
|
|
if (start > end) return [];
|
|
return arr.slice(start, end - start + 1);
|
|
}
|
|
var fromParts = trim(from.split('/'));
|
|
var toParts = trim(to.split('/'));
|
|
var length = Math.min(fromParts.length, toParts.length);
|
|
var samePartsLength = length;
|
|
for (var i = 0; i < length; i++) {
|
|
if (fromParts[i] !== toParts[i]) {
|
|
samePartsLength = i;
|
|
break;
|
|
}
|
|
}
|
|
var outputParts = [];
|
|
for (var i = samePartsLength; i < fromParts.length; i++) {
|
|
outputParts.push('..');
|
|
}
|
|
outputParts = outputParts.concat(toParts.slice(samePartsLength));
|
|
return outputParts.join('/');
|
|
}};var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () {
|
|
Browser.mainLoop.shouldPause = true;
|
|
},resume:function () {
|
|
if (Browser.mainLoop.paused) {
|
|
Browser.mainLoop.paused = false;
|
|
Browser.mainLoop.scheduler();
|
|
}
|
|
Browser.mainLoop.shouldPause = false;
|
|
},updateStatus:function () {
|
|
if (Module['setStatus']) {
|
|
var message = Module['statusMessage'] || 'Please wait...';
|
|
var remaining = Browser.mainLoop.remainingBlockers;
|
|
var expected = Browser.mainLoop.expectedBlockers;
|
|
if (remaining) {
|
|
if (remaining < expected) {
|
|
Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
|
|
} else {
|
|
Module['setStatus'](message);
|
|
}
|
|
} else {
|
|
Module['setStatus']('');
|
|
}
|
|
}
|
|
}},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
|
|
if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
|
|
|
|
if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
|
|
Browser.initted = true;
|
|
|
|
try {
|
|
new Blob();
|
|
Browser.hasBlobConstructor = true;
|
|
} catch(e) {
|
|
Browser.hasBlobConstructor = false;
|
|
console.log("warning: no blob constructor, cannot create blobs with mimetypes");
|
|
}
|
|
Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
|
|
Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
|
|
if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
|
|
console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
|
|
Module.noImageDecoding = true;
|
|
}
|
|
|
|
// Support for plugins that can process preloaded files. You can add more of these to
|
|
// your app by creating and appending to Module.preloadPlugins.
|
|
//
|
|
// Each plugin is asked if it can handle a file based on the file's name. If it can,
|
|
// it is given the file's raw data. When it is done, it calls a callback with the file's
|
|
// (possibly modified) data. For example, a plugin might decompress a file, or it
|
|
// might create some side data structure for use later (like an Image element, etc.).
|
|
|
|
var imagePlugin = {};
|
|
imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
|
|
return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
|
|
};
|
|
imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
|
|
var b = null;
|
|
if (Browser.hasBlobConstructor) {
|
|
try {
|
|
b = new Blob([byteArray], { type: Browser.getMimetype(name) });
|
|
if (b.size !== byteArray.length) { // Safari bug #118630
|
|
// Safari's Blob can only take an ArrayBuffer
|
|
b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
|
|
}
|
|
} catch(e) {
|
|
Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
|
|
}
|
|
}
|
|
if (!b) {
|
|
var bb = new Browser.BlobBuilder();
|
|
bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
|
|
b = bb.getBlob();
|
|
}
|
|
var url = Browser.URLObject.createObjectURL(b);
|
|
var img = new Image();
|
|
img.onload = function img_onload() {
|
|
assert(img.complete, 'Image ' + name + ' could not be decoded');
|
|
var canvas = document.createElement('canvas');
|
|
canvas.width = img.width;
|
|
canvas.height = img.height;
|
|
var ctx = canvas.getContext('2d');
|
|
ctx.drawImage(img, 0, 0);
|
|
Module["preloadedImages"][name] = canvas;
|
|
Browser.URLObject.revokeObjectURL(url);
|
|
if (onload) onload(byteArray);
|
|
};
|
|
img.onerror = function img_onerror(event) {
|
|
console.log('Image ' + url + ' could not be decoded');
|
|
if (onerror) onerror();
|
|
};
|
|
img.src = url;
|
|
};
|
|
Module['preloadPlugins'].push(imagePlugin);
|
|
|
|
var audioPlugin = {};
|
|
audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
|
|
return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
|
|
};
|
|
audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
|
|
var done = false;
|
|
function finish(audio) {
|
|
if (done) return;
|
|
done = true;
|
|
Module["preloadedAudios"][name] = audio;
|
|
if (onload) onload(byteArray);
|
|
}
|
|
function fail() {
|
|
if (done) return;
|
|
done = true;
|
|
Module["preloadedAudios"][name] = new Audio(); // empty shim
|
|
if (onerror) onerror();
|
|
}
|
|
if (Browser.hasBlobConstructor) {
|
|
try {
|
|
var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
|
|
} catch(e) {
|
|
return fail();
|
|
}
|
|
var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
|
|
var audio = new Audio();
|
|
audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
|
|
audio.onerror = function audio_onerror(event) {
|
|
if (done) return;
|
|
console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
|
|
function encode64(data) {
|
|
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
var PAD = '=';
|
|
var ret = '';
|
|
var leftchar = 0;
|
|
var leftbits = 0;
|
|
for (var i = 0; i < data.length; i++) {
|
|
leftchar = (leftchar << 8) | data[i];
|
|
leftbits += 8;
|
|
while (leftbits >= 6) {
|
|
var curr = (leftchar >> (leftbits-6)) & 0x3f;
|
|
leftbits -= 6;
|
|
ret += BASE[curr];
|
|
}
|
|
}
|
|
if (leftbits == 2) {
|
|
ret += BASE[(leftchar&3) << 4];
|
|
ret += PAD + PAD;
|
|
} else if (leftbits == 4) {
|
|
ret += BASE[(leftchar&0xf) << 2];
|
|
ret += PAD;
|
|
}
|
|
return ret;
|
|
}
|
|
audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
|
|
finish(audio); // we don't wait for confirmation this worked - but it's worth trying
|
|
};
|
|
audio.src = url;
|
|
// workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
|
|
Browser.safeSetTimeout(function() {
|
|
finish(audio); // try to use it even though it is not necessarily ready to play
|
|
}, 10000);
|
|
} else {
|
|
return fail();
|
|
}
|
|
};
|
|
Module['preloadPlugins'].push(audioPlugin);
|
|
|
|
// Canvas event setup
|
|
|
|
var canvas = Module['canvas'];
|
|
canvas.requestPointerLock = canvas['requestPointerLock'] ||
|
|
canvas['mozRequestPointerLock'] ||
|
|
canvas['webkitRequestPointerLock'];
|
|
canvas.exitPointerLock = document['exitPointerLock'] ||
|
|
document['mozExitPointerLock'] ||
|
|
document['webkitExitPointerLock'] ||
|
|
function(){}; // no-op if function does not exist
|
|
canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
|
|
|
|
function pointerLockChange() {
|
|
Browser.pointerLock = document['pointerLockElement'] === canvas ||
|
|
document['mozPointerLockElement'] === canvas ||
|
|
document['webkitPointerLockElement'] === canvas;
|
|
}
|
|
|
|
document.addEventListener('pointerlockchange', pointerLockChange, false);
|
|
document.addEventListener('mozpointerlockchange', pointerLockChange, false);
|
|
document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
|
|
|
|
if (Module['elementPointerLock']) {
|
|
canvas.addEventListener("click", function(ev) {
|
|
if (!Browser.pointerLock && canvas.requestPointerLock) {
|
|
canvas.requestPointerLock();
|
|
ev.preventDefault();
|
|
}
|
|
}, false);
|
|
}
|
|
},createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
|
|
var ctx;
|
|
try {
|
|
if (useWebGL) {
|
|
var contextAttributes = {
|
|
antialias: false,
|
|
alpha: false
|
|
};
|
|
|
|
if (webGLContextAttributes) {
|
|
for (var attribute in webGLContextAttributes) {
|
|
contextAttributes[attribute] = webGLContextAttributes[attribute];
|
|
}
|
|
}
|
|
|
|
|
|
var errorInfo = '?';
|
|
function onContextCreationError(event) {
|
|
errorInfo = event.statusMessage || errorInfo;
|
|
}
|
|
canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
|
|
try {
|
|
['experimental-webgl', 'webgl'].some(function(webglId) {
|
|
return ctx = canvas.getContext(webglId, contextAttributes);
|
|
});
|
|
} finally {
|
|
canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
|
|
}
|
|
} else {
|
|
ctx = canvas.getContext('2d');
|
|
}
|
|
if (!ctx) throw ':(';
|
|
} catch (e) {
|
|
Module.print('Could not create canvas: ' + [errorInfo, e]);
|
|
return null;
|
|
}
|
|
if (useWebGL) {
|
|
// Set the background of the WebGL canvas to black
|
|
canvas.style.backgroundColor = "black";
|
|
|
|
// Warn on context loss
|
|
canvas.addEventListener('webglcontextlost', function(event) {
|
|
alert('WebGL context lost. You will need to reload the page.');
|
|
}, false);
|
|
}
|
|
if (setInModule) {
|
|
GLctx = Module.ctx = ctx;
|
|
Module.useWebGL = useWebGL;
|
|
Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
|
|
Browser.init();
|
|
}
|
|
return ctx;
|
|
},destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
|
|
Browser.lockPointer = lockPointer;
|
|
Browser.resizeCanvas = resizeCanvas;
|
|
if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
|
|
if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
|
|
|
|
var canvas = Module['canvas'];
|
|
function fullScreenChange() {
|
|
Browser.isFullScreen = false;
|
|
if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
|
|
document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
|
|
document['fullScreenElement'] || document['fullscreenElement']) === canvas) {
|
|
canvas.cancelFullScreen = document['cancelFullScreen'] ||
|
|
document['mozCancelFullScreen'] ||
|
|
document['webkitCancelFullScreen'];
|
|
canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
|
|
if (Browser.lockPointer) canvas.requestPointerLock();
|
|
Browser.isFullScreen = true;
|
|
if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
|
|
} else if (Browser.resizeCanvas){
|
|
Browser.setWindowedCanvasSize();
|
|
}
|
|
if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
|
|
}
|
|
|
|
if (!Browser.fullScreenHandlersInstalled) {
|
|
Browser.fullScreenHandlersInstalled = true;
|
|
document.addEventListener('fullscreenchange', fullScreenChange, false);
|
|
document.addEventListener('mozfullscreenchange', fullScreenChange, false);
|
|
document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
|
|
}
|
|
|
|
canvas.requestFullScreen = canvas['requestFullScreen'] ||
|
|
canvas['mozRequestFullScreen'] ||
|
|
(canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
|
|
canvas.requestFullScreen();
|
|
},requestAnimationFrame:function requestAnimationFrame(func) {
|
|
if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
|
|
setTimeout(func, 1000/60);
|
|
} else {
|
|
if (!window.requestAnimationFrame) {
|
|
window.requestAnimationFrame = window['requestAnimationFrame'] ||
|
|
window['mozRequestAnimationFrame'] ||
|
|
window['webkitRequestAnimationFrame'] ||
|
|
window['msRequestAnimationFrame'] ||
|
|
window['oRequestAnimationFrame'] ||
|
|
window['setTimeout'];
|
|
}
|
|
window.requestAnimationFrame(func);
|
|
}
|
|
},safeCallback:function (func) {
|
|
return function() {
|
|
if (!ABORT) return func.apply(null, arguments);
|
|
};
|
|
},safeRequestAnimationFrame:function (func) {
|
|
return Browser.requestAnimationFrame(function() {
|
|
if (!ABORT) func();
|
|
});
|
|
},safeSetTimeout:function (func, timeout) {
|
|
return setTimeout(function() {
|
|
if (!ABORT) func();
|
|
}, timeout);
|
|
},safeSetInterval:function (func, timeout) {
|
|
return setInterval(function() {
|
|
if (!ABORT) func();
|
|
}, timeout);
|
|
},getMimetype:function (name) {
|
|
return {
|
|
'jpg': 'image/jpeg',
|
|
'jpeg': 'image/jpeg',
|
|
'png': 'image/png',
|
|
'bmp': 'image/bmp',
|
|
'ogg': 'audio/ogg',
|
|
'wav': 'audio/wav',
|
|
'mp3': 'audio/mpeg'
|
|
}[name.substr(name.lastIndexOf('.')+1)];
|
|
},getUserMedia:function (func) {
|
|
if(!window.getUserMedia) {
|
|
window.getUserMedia = navigator['getUserMedia'] ||
|
|
navigator['mozGetUserMedia'];
|
|
}
|
|
window.getUserMedia(func);
|
|
},getMovementX:function (event) {
|
|
return event['movementX'] ||
|
|
event['mozMovementX'] ||
|
|
event['webkitMovementX'] ||
|
|
0;
|
|
},getMovementY:function (event) {
|
|
return event['movementY'] ||
|
|
event['mozMovementY'] ||
|
|
event['webkitMovementY'] ||
|
|
0;
|
|
},getMouseWheelDelta:function (event) {
|
|
return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event.detail : -event.wheelDelta));
|
|
},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
|
|
if (Browser.pointerLock) {
|
|
// When the pointer is locked, calculate the coordinates
|
|
// based on the movement of the mouse.
|
|
// Workaround for Firefox bug 764498
|
|
if (event.type != 'mousemove' &&
|
|
('mozMovementX' in event)) {
|
|
Browser.mouseMovementX = Browser.mouseMovementY = 0;
|
|
} else {
|
|
Browser.mouseMovementX = Browser.getMovementX(event);
|
|
Browser.mouseMovementY = Browser.getMovementY(event);
|
|
}
|
|
|
|
// check if SDL is available
|
|
if (typeof SDL != "undefined") {
|
|
Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
|
|
Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
|
|
} else {
|
|
// just add the mouse delta to the current absolut mouse position
|
|
// FIXME: ideally this should be clamped against the canvas size and zero
|
|
Browser.mouseX += Browser.mouseMovementX;
|
|
Browser.mouseY += Browser.mouseMovementY;
|
|
}
|
|
} else {
|
|
// Otherwise, calculate the movement based on the changes
|
|
// in the coordinates.
|
|
var rect = Module["canvas"].getBoundingClientRect();
|
|
var x, y;
|
|
|
|
// Neither .scrollX or .pageXOffset are defined in a spec, but
|
|
// we prefer .scrollX because it is currently in a spec draft.
|
|
// (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
|
|
var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
|
|
var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
|
|
if (event.type == 'touchstart' ||
|
|
event.type == 'touchend' ||
|
|
event.type == 'touchmove') {
|
|
var t = event.touches.item(0);
|
|
if (t) {
|
|
x = t.pageX - (scrollX + rect.left);
|
|
y = t.pageY - (scrollY + rect.top);
|
|
} else {
|
|
return;
|
|
}
|
|
} else {
|
|
x = event.pageX - (scrollX + rect.left);
|
|
y = event.pageY - (scrollY + rect.top);
|
|
}
|
|
|
|
// the canvas might be CSS-scaled compared to its backbuffer;
|
|
// SDL-using content will want mouse coordinates in terms
|
|
// of backbuffer units.
|
|
var cw = Module["canvas"].width;
|
|
var ch = Module["canvas"].height;
|
|
x = x * (cw / rect.width);
|
|
y = y * (ch / rect.height);
|
|
|
|
Browser.mouseMovementX = x - Browser.mouseX;
|
|
Browser.mouseMovementY = y - Browser.mouseY;
|
|
Browser.mouseX = x;
|
|
Browser.mouseY = y;
|
|
}
|
|
},xhrLoad:function (url, onload, onerror) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('GET', url, true);
|
|
xhr.responseType = 'arraybuffer';
|
|
xhr.onload = function xhr_onload() {
|
|
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
|
|
onload(xhr.response);
|
|
} else {
|
|
onerror();
|
|
}
|
|
};
|
|
xhr.onerror = onerror;
|
|
xhr.send(null);
|
|
},asyncLoad:function (url, onload, onerror, noRunDep) {
|
|
Browser.xhrLoad(url, function(arrayBuffer) {
|
|
assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
|
|
onload(new Uint8Array(arrayBuffer));
|
|
if (!noRunDep) removeRunDependency('al ' + url);
|
|
}, function(event) {
|
|
if (onerror) {
|
|
onerror();
|
|
} else {
|
|
throw 'Loading data file "' + url + '" failed.';
|
|
}
|
|
});
|
|
if (!noRunDep) addRunDependency('al ' + url);
|
|
},resizeListeners:[],updateResizeListeners:function () {
|
|
var canvas = Module['canvas'];
|
|
Browser.resizeListeners.forEach(function(listener) {
|
|
listener(canvas.width, canvas.height);
|
|
});
|
|
},setCanvasSize:function (width, height, noUpdates) {
|
|
var canvas = Module['canvas'];
|
|
canvas.width = width;
|
|
canvas.height = height;
|
|
if (!noUpdates) Browser.updateResizeListeners();
|
|
},windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
|
|
var canvas = Module['canvas'];
|
|
this.windowedWidth = canvas.width;
|
|
this.windowedHeight = canvas.height;
|
|
canvas.width = screen.width;
|
|
canvas.height = screen.height;
|
|
// check if SDL is available
|
|
if (typeof SDL != "undefined") {
|
|
var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
|
|
flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
|
|
HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
|
|
}
|
|
Browser.updateResizeListeners();
|
|
},setWindowedCanvasSize:function () {
|
|
var canvas = Module['canvas'];
|
|
canvas.width = this.windowedWidth;
|
|
canvas.height = this.windowedHeight;
|
|
// check if SDL is available
|
|
if (typeof SDL != "undefined") {
|
|
var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
|
|
flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
|
|
HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
|
|
}
|
|
Browser.updateResizeListeners();
|
|
}};
|
|
|
|
|
|
var CRC32={TABLE:[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],Start:function () {
|
|
return -1;
|
|
},Update:function (crc, buffer, offset, len) {
|
|
for (var i = offset, l = offset + len; i < l; i++) {
|
|
crc = CRC32.TABLE[(crc ^ buffer[i]) & 0xff] ^ (crc >>> 8);
|
|
}
|
|
return crc;
|
|
},Finish:function (crc) {
|
|
return (crc ^ -1) >>> 0;
|
|
}};var SYSC={cb_context_t:{__size__:8,data:0,cb:4},startup_data_t:{__size__:4100,gameName:0,after:4096},download_progress_data_t:{__size__:8,loaded:0,total:4},download_complete_data_t:{__size__:4,progress:0},eula:"LIMITED USE SOFTWARE LICENSE AGREEMENT\n\n \n\nThis Limited Use Software License Agreement (the \"Agreement\") is a legal agreement between you, the end-user, and Id Software, Inc. (\"ID\"). BY CONTINUING THE INSTALLATION OF THIS GAME DEMO PROGRAM ENTITLED QUAKE III: ARENA (THE \"SOFTWARE\"), BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE, COMPUTER RAM OR OTHER STORAGE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT.\n\n\n\n1. Grant of License. Subject to the terms and provisions of this Agreement, ID grants to you the non-exclusive and limited right to use the Software only in executable or object code form. The term \"Software\" includes all elements of the Software, including, without limitation, data files and screen displays. You are not receiving any ownership or proprietary right, title or interest in or to the Software or the copyright, trademarks, or other rights related thereto. For purposes of this section, \"use\" means loading the Software into RAM and/or onto computer hard drive, as well as installation of the Software on a hard disk or other storage device and means the uses permitted in section 3. hereinbelow. You agree that the Software will not be shipped, transferred or exported into any country in violation of the U.S. Export Administration Act (or any other law governing such matters) by you or anyone at your direction and that you will not utilize and will not authorize anyone to utilize, in any other manner, the Software in violation of any applicable law. The Software may not be downloaded or otherwise exported or exported into (or to a national or resident of) any country to which the U.S. has embargoed goods or to anyone or into any country who/which are prohibited, by applicable law, from receiving such property.\n\n\n\n2. Prohibitions. You, either directly or indirectly, shall not do any of the following acts:\n\n\n\na. rent the Software;\n\n\n\nb. sell the Software;\n\n\n\nc. lease or lend the Software;\n\n\n\nd. offer the Software on a \"pay-per-play\" basis;\n\n\n\ne. distribute the Software (except as permitted by section 3. hereinbelow);\n\n\n\nf. in any other manner and through any medium whatsoever commercially exploit the Software or use the Software for any commercial purpose;\n\n\n\ng. disassemble, reverse engineer, decompile, modify or alter the Software including, without limitation, creating or developing extra or add-on levels for the Software;\n\n\n\nh. translate the Software;\n\n\n\ni. reproduce or copy the Software (except as permitted by section 3. hereinbelow);\n\n\n\nj. publicly display the Software;\n\n\n\nk. prepare or develop derivative works based upon the Software; or\n\n\n\nl. remove or alter any legal notices or other markings or legends, such as trademark and copyright notices, affixed on or within the Software.\n\n\n\n3. Permitted Distribution and Copying. So long as this Agreement accompanies each copy you make of the Software, and so long as you fully comply, at all times, with this Agreement, ID grants to you the non-exclusive and limited right to copy the Software and to distribute such copies of the Software free of charge for non-commercial purposes which shall include the free of charge distribution of copies of the Software as mounted on the covers of magazines; provided, however, you shall not copy or distribute the Software in any infringing manner or in any manner which violates any law or third party right and you shall not distribute the Software together with any material which is infringing, libelous, defamatory, obscene, false, misleading, or otherwise illegal or unlawful. You agree to label conspicuously as \"SHAREWARE\" or \"DEMO\" each CD or other non-electronic copy of the Software that you make and distribute. ID reserves all rights not granted in this Agreement. You shall not commercially distribute the Software unless you first enter into a separate contract with ID, a copy of which you may request, but which ID may decline to execute. For more information visit www.quake3arena.com.\n\n\n\n4. Intellectual Property Rights. The Software and all copyrights, trademarks and all other conceivable intellectual property rights related to the Software are owned by ID and are protected by United States copyright laws, international treaty provisions and all applicable law, such as the Lanham Act. You must treat the Software like any other copyrighted material, as required by 17 U.S.C., §101 et seq. and other applicable law. You agree to use your best efforts to see that any user of the Software licensed hereunder complies with this Agreement. You agree that you are receiving a copy of the Software by license only and not by sale and that the \"first sale\" doctrine of 17 U.S.C. §109 does not apply to your receipt or use of the Software.\n\n\n\n5. NO WARRANTIES. ID DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE WITH RESPECT TO THE SOFTWARE. ID DOES NOT WARRANT THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE OR THAT THE SOFTWARE WILL MEET YOUR SPECIFIC REQUIREMENTS. ADDITIONAL STATEMENTS SUCH AS PRESENTATIONS, WHETHER ORAL OR WRITTEN, DO NOT CONSTITUTE WARRANTIES BY ID AND SHOULD NOT BE RELIED UPON. THIS SECTION 5. SHALL SURVIVE CANCELLATION OR TERMINATION OF THIS AGREEMENT.\n\n\n\n6. Governing Law, Venue, Indemnity and Liability Limitation. This Agreement shall be construed in accordance with and governed by the applicable laws of the State of Texas and applicable United States federal law. Copyright and other proprietary matters will be governed by United States laws and international treaties. Exclusive venue for all litigation regarding this Agreement shall be in Dallas County, Texas and you agree to submit to the jurisdiction of the courts in Dallas, Texas for any such litigation. You agree to indemnify, defend and hold harmless ID and ID's officers, employees, directors, agents, licensees (excluding you), successors and assigns from and against all losses, lawsuits, damages, causes of action and claims relating to and/or arising from your breach of this Agreement. You agree that your unauthorized use of the Software, or any part thereof, may immediately and irreparably damage ID such that ID could not be adequately compensated solely by a monetary award and that at ID's option ID shall be entitled to an injunctive order, in addition to all other available remedies including a monetary award, appropriately restraining and/or prohibiting such unauthorized use without the necessity of ID posting bond or other security. IN ANY CASE, ID AND ID'S OFFICERS, EMPLOYEES, DIRECTORS, AGENTS, LICENSEES, SUBLICENSEES, SUCCESSORS AND ASSIGNS SHALL NOT BE LIABLE FOR LOSS OF DATA, LOSS OF PROFITS, LOST SAVINGS, SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT, PUNITIVE OR OTHER SIMILAR DAMAGES ARISING FROM ANY ALLEGED CLAIM FOR BREACH OF WARRANTY, BREACH OF CONTRACT, NEGLIGENCE, STRICT PRODUCT LIABILITY, OR OTHER LEGAL THEORY EVEN IF ID OR ITS AGENT HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR EVEN IF SUCH DAMAGES ARE FORESEEABLE, OR LIABLE FOR ANY CLAIM BY ANY OTHER PARTY. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to you. This Section 6. shall survive cancellation or termination of this Agreement.\n\n\n\n7. U.S. Government Restricted Rights. To the extent applicable, the United States Government shall only have those rights to use the Software as expressly stated and expressly limited and restricted in this Agreement, as provided in 48 C.F.R. §§ 227.7201 through 227.7204, inclusive.\n\n\n\n8. General Provisions. Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed by you. ID may assign its rights under this Agreement in ID's sole discretion. Should any provision of this Agreement be held to be void, invalid, unenforceable or illegal by a court of competent jurisdiction, the validity and enforceability of the other provisions shall not be affected thereby. If any provision is determined to be unenforceable by a court of competent jurisdiction, you agree to a modification of such provision to provide for enforcement of the provision's intent, to the extent permitted by applicable law. Failure of ID to enforce any provision of this Agreement shall not constitute or be construed as a waiver of such provision or of the right to enforce such provision. Immediately upon your failure to comply with or breach of any term or provision of this Agreement, THIS AGREEMENT AND YOUR LICENSE SHALL AUTOMATICALLY TERMINATE, WITHOUT NOTICE, AND ID MAY PURSUE ALL RELIEF AND REMEDIES AGAINST YOU WHICH ARE AVAILABLE UNDER APPLICABLE LAW AND/OR THIS AGREEMENT. In the event this Agreement is terminated, you shall have no right to use the Software, in any manner, and you shall immediately destroy all copies of the Software in your possession, custody or control.\n\n\n\nYOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, YOU UNDERSTAND THIS AGREEMENT, AND UNDERSTAND THAT BY CONTINUING THE INSTALLATION OF THE SOFTWARE, BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE OR RAM, YOU AGREE TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT. YOU FURTHER AGREE THAT, EXCEPT FOR WRITTEN SEPARATE AGREEMENTS BETWEEN ID AND YOU, THIS AGREEMENT IS A COMPLETE AND EXCLUSIVE STATEMENT OF THE RIGHTS AND LIABILITIES OF THE PARTIES HERETO. THIS AGREEMENT SUPERSEDES ALL PRIOR ORAL AGREEMENTS, PROPOSALS OR UNDERSTANDINGS, AND ANY OTHER COMMUNICATIONS BETWEEN ID AND YOU RELATING TO THE SUBJECT MATTER OF THIS AGREEMENT.",installers:[{name:"linuxq3ademo-1.11-6.x86.gz.sh",offset:5468,paks:[{src:"demoq3/pak0.pk3",dest:"baseq3/pak0.pk3",checksum:2483777038}]},{name:"linuxq3apoint-1.32b-3.x86.run",offset:8251,paks:[{src:"baseq3/pak1.pk3",dest:"baseq3/pak1.pk3",checksum:1635885364},{src:"baseq3/pak2.pk3",dest:"baseq3/pak2.pk3",checksum:2142044321},{src:"baseq3/pak3.pk3",dest:"baseq3/pak3.pk3",checksum:682311620},{src:"baseq3/pak4.pk3",dest:"baseq3/pak4.pk3",checksum:4113726565},{src:"baseq3/pak5.pk3",dest:"baseq3/pak5.pk3",checksum:590466266},{src:"baseq3/pak6.pk3",dest:"baseq3/pak6.pk3",checksum:231612509},{src:"baseq3/pak7.pk3",dest:"baseq3/pak7.pk3",checksum:3663817674},{src:"baseq3/pak8.pk3",dest:"baseq3/pak8.pk3",checksum:136401958}]}],manifest:null,Print:function (str) {
|
|
str = allocate(intArrayFromString(str + '\n'), 'i8', ALLOC_STACK);
|
|
|
|
_Com_Printf(str);
|
|
},Error:function (level, err) {
|
|
if (level === 'fatal') {
|
|
level = 0;
|
|
} else if (level === 'drop') {
|
|
level = 1;
|
|
} else if (level === 'serverdisconnect') {
|
|
level = 2;
|
|
} else if (level === 'disconnect') {
|
|
level = 3;
|
|
} else if (level === 'need_cd') {
|
|
level = 4;
|
|
} else {
|
|
level = 0;
|
|
}
|
|
|
|
err = allocate(intArrayFromString(err + '\n'), 'i8', ALLOC_STACK);
|
|
|
|
_Com_Error(level, err);
|
|
},ProxyCallback:function (context) {
|
|
try {
|
|
_Com_ProxyCallback(context);
|
|
} catch (e) {
|
|
if (e instanceof ExitStatus) {
|
|
return;
|
|
}
|
|
// TODO should we try and call back in using __Error?
|
|
throw e;
|
|
}
|
|
},CRC32File:function (path) {
|
|
var stack = Runtime.stackSave();
|
|
var chunkSize = 1024*1024;
|
|
var bufp = allocate(chunkSize, 'i8', ALLOC_STACK);
|
|
var crc = CRC32.Start();
|
|
|
|
var start = Date.now();
|
|
|
|
try {
|
|
var slab = HEAP8;
|
|
var n = 0;
|
|
var pos = 0;
|
|
var stream = FS.open(path, 'r', 0666);
|
|
do {
|
|
n = FS.read(stream, slab, bufp, chunkSize, pos);
|
|
crc = CRC32.Update(crc, slab, bufp, n);
|
|
pos += n;
|
|
} while (n);
|
|
FS.close(stream);
|
|
} catch (e) {
|
|
Runtime.stackRestore(stack);
|
|
return null;
|
|
}
|
|
|
|
SYSC.Print('generated crc32 for ' + path + ' in ' + ((Date.now() - start) / 1000).toFixed(2) + ' seconds');
|
|
|
|
Runtime.stackRestore(stack);
|
|
return CRC32.Finish(crc);
|
|
},GetCDN:function () {
|
|
return Pointer_stringify(_Com_GetCDN());
|
|
},GetManifest:function () {
|
|
var manifest = Pointer_stringify(_Com_GetManifest());
|
|
|
|
if (!manifest) {
|
|
return [];
|
|
}
|
|
|
|
return manifest.split(' ').map(function (entry) {
|
|
var split = entry.split('@');
|
|
|
|
return {
|
|
name: split[0],
|
|
checksum: parseInt(split[1], 10),
|
|
compressed: parseInt(split[2], 10)
|
|
};
|
|
});
|
|
},DownloadAsset:function (asset, onprogress, onload) {
|
|
var root = SYSC.GetCDN();
|
|
var name = asset.name.replace(/(.+\/|)(.+?)$/, '$1' + asset.checksum + '-$2');
|
|
var url = 'http://' + root + '/assets/' + name;
|
|
|
|
SYS.DoXHR(url, {
|
|
dataType: 'arraybuffer',
|
|
onprogress: onprogress,
|
|
onload: onload
|
|
});
|
|
},DownloadAssets:function (assets, onstartasset, onprogress, onendasset, callback) {
|
|
var progress = [];
|
|
|
|
function downloadedBytes() {
|
|
return progress.reduce(function (a, b) { return a + b; });
|
|
}
|
|
|
|
function totalBytes() {
|
|
return assets.reduce(function (a, b) { return a + b.compressed; }, 0);
|
|
}
|
|
|
|
function nextDownload() {
|
|
nextDownload.pos = nextDownload.pos == undefined ? 0 : nextDownload.pos + 1;
|
|
|
|
if (nextDownload.pos >= assets.length) {
|
|
return callback();
|
|
}
|
|
|
|
var asset = assets[nextDownload.pos];
|
|
|
|
onstartasset(asset);
|
|
|
|
SYSC.DownloadAsset(asset, function (loaded, total) {
|
|
progress[nextDownload.pos] = loaded;
|
|
|
|
onprogress(downloadedBytes(), totalBytes());
|
|
}, function (err, data) {
|
|
if (err) return callback(err);
|
|
|
|
onendasset(asset, data, function (err) {
|
|
if (err) return callback(err);
|
|
|
|
setTimeout(nextDownload);
|
|
});
|
|
});
|
|
}
|
|
|
|
nextDownload();
|
|
},UpdateManifest:function (callback) {
|
|
var fs_cdn = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('fs_cdn'), 'i8', ALLOC_STACK)));
|
|
var fs_game = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('fs_game'), 'i8', ALLOC_STACK)));
|
|
var com_basegame = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('com_basegame'), 'i8', ALLOC_STACK)));
|
|
var mapname = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('mapname'), 'i8', ALLOC_STACK)));
|
|
var url = 'http://' + fs_cdn + '/assets/manifest.json';
|
|
|
|
function isInstaller(name) {
|
|
return SYSC.installers.some(function (installer) {
|
|
return installer.name === name;
|
|
});
|
|
}
|
|
|
|
function isCommon(name) {
|
|
var basepakRx = RegExp('(' + com_basegame + (fs_game ? '|' + fs_game : '') + ')\/pak.+\.pk3$');
|
|
return name.match(basepakRx);
|
|
}
|
|
|
|
function isMapPak(name) {
|
|
return PATH.basename(name) === (mapname + '.pk3');
|
|
}
|
|
|
|
function activePaks(entry) {
|
|
return isInstaller(entry.name) || isCommon(entry.name) || isMapPak(entry.name);
|
|
}
|
|
|
|
function formatManifestString(manifest) {
|
|
return manifest.map(function (entry) {
|
|
return entry.name + '@' + entry.checksum + '@' + entry.compressed;
|
|
}).join(' ');
|
|
}
|
|
|
|
SYS.DoXHR(url, {
|
|
dataType: 'json',
|
|
onload: function (err, manifest) {
|
|
if (err) return callback(new Error('Failed to download and parse manifest, ' + err.message));
|
|
|
|
var fs_manifestName = allocate(intArrayFromString('fs_manifest'), 'i8', ALLOC_STACK);
|
|
var fs_manifest = allocate(intArrayFromString(formatManifestString(manifest.filter(activePaks))), 'i8', ALLOC_STACK);
|
|
_Cvar_Set(fs_manifestName, fs_manifest);
|
|
|
|
var fs_completeManifestName = allocate(intArrayFromString('fs_completeManifest'), 'i8', ALLOC_STACK);
|
|
var fs_completeManifest = allocate(intArrayFromString(formatManifestString(manifest)), 'i8', ALLOC_STACK);
|
|
_Cvar_Set(fs_completeManifestName, fs_completeManifest);
|
|
|
|
return callback();
|
|
}
|
|
});
|
|
},SavePak:function (name, buffer, callback) {
|
|
var fs_homepath = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('fs_homepath'), 'i8', ALLOC_STACK)));
|
|
var localPath = PATH.join(fs_homepath, name);
|
|
|
|
try {
|
|
FS.mkdir(PATH.dirname(localPath), 0777);
|
|
} catch (e) {
|
|
if (e.errno !== ERRNO_CODES.EEXIST) {
|
|
return callback(e);
|
|
}
|
|
}
|
|
|
|
FS.writeFile(localPath, new Uint8Array(buffer), { encoding: 'binary', flags: 'w', canOwn: true });
|
|
|
|
FS.syncfs(callback);
|
|
},ValidateInstaller:function (installer) {
|
|
var fs_homepath = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('fs_homepath'), 'i8', ALLOC_STACK)));
|
|
|
|
for (var i = 0; i < installer.paks.length; i++) {
|
|
var pak = installer.paks[i];
|
|
var localPath = PATH.join(fs_homepath, pak.dest);
|
|
var crc = SYSC.CRC32File(localPath);
|
|
|
|
if (crc !== pak.checksum) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
},DirtyInstallers:function () {
|
|
var installers = [];
|
|
var assets = SYSC.GetManifest();
|
|
|
|
for (var i = 0; i < SYSC.installers.length; i++) {
|
|
var installer = SYSC.installers[i];
|
|
|
|
var asset;
|
|
for (var j = 0; j < assets.length; j++) {
|
|
if (assets[j].name === installer.name) {
|
|
asset = assets[j];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!asset) {
|
|
return callback(new Error('Failed to find "' + installer.name + '" in manifest'));
|
|
}
|
|
|
|
if (!SYSC.ValidateInstaller(installer)) {
|
|
// append the installer info to the asset
|
|
asset.installer = installer;
|
|
|
|
installers.push(asset);
|
|
}
|
|
}
|
|
|
|
return installers;
|
|
},ExtractInstaller:function (data, paks, callback) {
|
|
var gunzip = new Zlib.Gunzip(data);
|
|
var buffer = gunzip.decompress();
|
|
var tar = new Tar(buffer);
|
|
|
|
function nextEntry() {
|
|
nextEntry.pos = nextEntry.pos == undefined ? 0 : nextEntry.pos + 1;
|
|
|
|
if (nextEntry.pos >= paks.length) {
|
|
return callback();
|
|
}
|
|
|
|
var entry = paks[nextEntry.pos];
|
|
|
|
var pakPath = entry.src;
|
|
var buffer = tar.getContent(pakPath);
|
|
|
|
// TODO validate buffer checksum
|
|
|
|
SYSC.SavePak(entry.dest, buffer, function (err) {
|
|
if (err) return callback(err);
|
|
|
|
nextEntry();
|
|
});
|
|
}
|
|
|
|
nextEntry();
|
|
},SyncInstallers:function (callback) {
|
|
var downloads = SYSC.DirtyInstallers();
|
|
|
|
if (!downloads.length) {
|
|
return callback();
|
|
}
|
|
|
|
SYS.PromptEULA(function (err) {
|
|
if (err) return callback(err);
|
|
|
|
SYSC.DownloadAssets(downloads, function (asset) {
|
|
SYS.LoadingDescription('loading ' + asset.name);
|
|
}, function (loaded, total) {
|
|
SYS.LoadingProgress(loaded / total);
|
|
}, function (asset, data, next) {
|
|
SYSC.ExtractInstaller(new Uint8Array(data, asset.installer.offset), asset.installer.paks, next);
|
|
}, function (err) {
|
|
SYS.LoadingDescription(null);
|
|
|
|
setTimeout(function () {
|
|
callback(err);
|
|
});
|
|
});
|
|
});
|
|
},ValidatePak:function (asset) {
|
|
var fs_homepath = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('fs_homepath'), 'i8', ALLOC_STACK)));
|
|
var localPath = PATH.join(fs_homepath, asset.name);
|
|
var crc = SYSC.CRC32File(localPath);
|
|
|
|
return crc === asset.checksum;
|
|
},DirtyPaks:function () {
|
|
return SYSC.GetManifest().filter(function (asset) {
|
|
return asset.name.indexOf('.pk3') !== -1 && !SYSC.ValidatePak(asset);
|
|
});
|
|
},SyncPaks:function (callback) {
|
|
var downloads = SYSC.DirtyPaks();
|
|
|
|
SYSC.DownloadAssets(downloads, function (asset) {
|
|
SYS.LoadingDescription('loading ' + asset.name);
|
|
}, function (loaded, total) {
|
|
SYS.LoadingProgress(loaded / total);
|
|
}, function (asset, data, next) {
|
|
SYSC.SavePak(asset.name, data, next);
|
|
}, function (err) {
|
|
SYS.LoadingDescription(null);
|
|
|
|
setTimeout(function () {
|
|
callback(err);
|
|
});
|
|
});
|
|
},FS_Startup:function (callback) {
|
|
SYSC.UpdateManifest(function (err) {
|
|
if (err) return callback(err);
|
|
|
|
SYSC.SyncInstallers(function (err) {
|
|
if (err) return callback(err);
|
|
|
|
SYSC.SyncPaks(Browser.safeCallback(callback));
|
|
});
|
|
});
|
|
},FS_Shutdown:function (callback) {
|
|
callback(null);
|
|
}};var SYS={timeBase:null,DoXHR:function (url, opts) {
|
|
if (!url) {
|
|
return opts.onload(new Error('Must provide a URL'));
|
|
}
|
|
|
|
var http = require('http');
|
|
|
|
http.get(url, function (res) {
|
|
var buf = [];
|
|
|
|
res.on('data', function (data) {
|
|
buf.push(data);
|
|
});
|
|
|
|
res.on('end', function () {
|
|
var err = null;
|
|
var data;
|
|
|
|
if (!(res.statusCode >= 200 && res.statusCode < 300)) {
|
|
err = new Error('Couldn\'t load ' + url + '. Status: ' + res.statusCode);
|
|
} else {
|
|
var buffer = Buffer.concat(buf);
|
|
|
|
// Manually parse out a request expecting a JSON response.
|
|
if (opts.dataType === 'json') {
|
|
var str = buffer.toString();
|
|
try {
|
|
data = JSON.parse(str);
|
|
} catch (e) {
|
|
err = e;
|
|
}
|
|
} else {
|
|
// Convert from node Buffer -> ArrayBuffer.
|
|
data = (new Uint8Array(buffer)).buffer;
|
|
}
|
|
}
|
|
|
|
if (opts.onload) {
|
|
opts.onload(err, data);
|
|
}
|
|
});
|
|
});
|
|
},LoadingDescription:function (desc) {
|
|
if (desc) {
|
|
console.log(desc);
|
|
}
|
|
},LoadingProgress:function (frac) {
|
|
console.log('loaded ' + (frac*100).toFixed(2) + '%');
|
|
},PromptEULA:function (callback) {
|
|
var readline = require('readline');
|
|
var lines = SYSC.eula.split('\n');
|
|
|
|
console.log('In order to continue, the official Quake3 demo will need to be installed.');
|
|
console.log('Please read through the demo\'s EULA and type \'y\' if you agree to it and would like to continue.\n');
|
|
|
|
console.log(lines.pop());
|
|
|
|
var rl = readline.createInterface(process.stdin, process.stdout);
|
|
rl.prompt();
|
|
|
|
rl.on('line', function (line) {
|
|
line = line.trim();
|
|
|
|
if (lines.length) {
|
|
console.log(lines.pop());
|
|
return;
|
|
}
|
|
|
|
if (!line) {
|
|
rl.setPrompt('Agree? (y/n): ');
|
|
rl.prompt();
|
|
return;
|
|
}
|
|
|
|
rl.close();
|
|
|
|
if (line !== 'y' && line !== 'yes') {
|
|
return callback(new Error('You must agree to the EULA to continue'));
|
|
}
|
|
|
|
return callback();
|
|
});
|
|
}};function _Sys_Milliseconds() {
|
|
var time = process.hrtime();
|
|
|
|
if (!SYS.timeBase) {
|
|
SYS.timeBase = time[0] * 1000 + parseInt(time[1] / 1000000, 10);
|
|
}
|
|
|
|
return (time[0] * 1000 + parseInt(time[1] / 1000000, 10)) - SYS.timeBase;
|
|
}
|
|
|
|
|
|
Module["_strncpy"] = _strncpy;
|
|
|
|
var _sin=Math_sin;
|
|
|
|
var _cos=Math_cos;
|
|
|
|
var _atan2=Math_atan2;
|
|
|
|
var _ceilf=Math_ceil;
|
|
|
|
var _floorf=Math_floor;
|
|
|
|
var _sqrtf=Math_sqrt;
|
|
|
|
|
|
function _round(x) {
|
|
return (x < 0) ? -Math.round(-x) : Math.round(x);
|
|
}var _roundf=_round;
|
|
|
|
function _Sys_Sleep() {
|
|
}
|
|
|
|
|
|
Module["_strcpy"] = _strcpy;
|
|
|
|
var _llvm_memcpy_p0i8_p0i8_i64=_memcpy;
|
|
|
|
function _qsort(base, num, size, cmp) {
|
|
if (num == 0 || size == 0) return;
|
|
// forward calls to the JavaScript sort method
|
|
// first, sort the items logically
|
|
var keys = [];
|
|
for (var i = 0; i < num; i++) keys.push(i);
|
|
keys.sort(function(a, b) {
|
|
return Module['dynCall_iii'](cmp, base+a*size, base+b*size);
|
|
});
|
|
// apply the sort
|
|
var temp = _malloc(num*size);
|
|
_memcpy(temp, base, num*size);
|
|
for (var i = 0; i < num; i++) {
|
|
if (keys[i] == i) continue; // already in place
|
|
_memcpy(base+i*size, temp+keys[i]*size, size);
|
|
}
|
|
_free(temp);
|
|
}
|
|
|
|
var _fabsf=Math_abs;
|
|
|
|
function _strpbrk(ptr1, ptr2) {
|
|
var curr;
|
|
var searchSet = {};
|
|
while (1) {
|
|
var curr = HEAP8[((ptr2++)|0)];
|
|
if (!curr) break;
|
|
searchSet[curr] = 1;
|
|
}
|
|
while (1) {
|
|
curr = HEAP8[(ptr1)];
|
|
if (!curr) break;
|
|
if (curr in searchSet) return ptr1;
|
|
ptr1++;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function _time(ptr) {
|
|
var ret = Math.floor(Date.now()/1000);
|
|
if (ptr) {
|
|
HEAP32[((ptr)>>2)]=ret;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
var ___tm_current=allocate(44, "i8", ALLOC_STATIC);
|
|
|
|
|
|
var ___tm_timezone=allocate(intArrayFromString("GMT"), "i8", ALLOC_STATIC);
|
|
|
|
|
|
var _tzname=allocate(8, "i32*", ALLOC_STATIC);
|
|
|
|
var _daylight=allocate(1, "i32*", ALLOC_STATIC);
|
|
|
|
var _timezone=allocate(1, "i32*", ALLOC_STATIC);function _tzset() {
|
|
// TODO: Use (malleable) environment variables instead of system settings.
|
|
if (_tzset.called) return;
|
|
_tzset.called = true;
|
|
|
|
HEAP32[((_timezone)>>2)]=-(new Date()).getTimezoneOffset() * 60;
|
|
|
|
var winter = new Date(2000, 0, 1);
|
|
var summer = new Date(2000, 6, 1);
|
|
HEAP32[((_daylight)>>2)]=Number(winter.getTimezoneOffset() != summer.getTimezoneOffset());
|
|
|
|
var winterName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | winter.toString().match(/\(([A-Z]+)\)/)[1];
|
|
var summerName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | summer.toString().match(/\(([A-Z]+)\)/)[1];
|
|
var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL);
|
|
var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL);
|
|
HEAP32[((_tzname)>>2)]=winterNamePtr;
|
|
HEAP32[(((_tzname)+(4))>>2)]=summerNamePtr;
|
|
}function _localtime_r(time, tmPtr) {
|
|
_tzset();
|
|
var date = new Date(HEAP32[((time)>>2)]*1000);
|
|
HEAP32[((tmPtr)>>2)]=date.getSeconds();
|
|
HEAP32[(((tmPtr)+(4))>>2)]=date.getMinutes();
|
|
HEAP32[(((tmPtr)+(8))>>2)]=date.getHours();
|
|
HEAP32[(((tmPtr)+(12))>>2)]=date.getDate();
|
|
HEAP32[(((tmPtr)+(16))>>2)]=date.getMonth();
|
|
HEAP32[(((tmPtr)+(20))>>2)]=date.getFullYear()-1900;
|
|
HEAP32[(((tmPtr)+(24))>>2)]=date.getDay();
|
|
|
|
var start = new Date(date.getFullYear(), 0, 1);
|
|
var yday = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
|
|
HEAP32[(((tmPtr)+(28))>>2)]=yday;
|
|
HEAP32[(((tmPtr)+(36))>>2)]=start.getTimezoneOffset() * 60;
|
|
|
|
var dst = Number(start.getTimezoneOffset() != date.getTimezoneOffset());
|
|
HEAP32[(((tmPtr)+(32))>>2)]=dst;
|
|
|
|
HEAP32[(((tmPtr)+(40))>>2)]=___tm_timezone;
|
|
|
|
return tmPtr;
|
|
}function _localtime(time) {
|
|
return _localtime_r(time, ___tm_current);
|
|
}
|
|
|
|
|
|
var ___tm_formatted=allocate(44, "i8", ALLOC_STATIC);
|
|
|
|
|
|
function _mktime(tmPtr) {
|
|
_tzset();
|
|
var year = HEAP32[(((tmPtr)+(20))>>2)];
|
|
var timestamp = new Date(year >= 1900 ? year : year + 1900,
|
|
HEAP32[(((tmPtr)+(16))>>2)],
|
|
HEAP32[(((tmPtr)+(12))>>2)],
|
|
HEAP32[(((tmPtr)+(8))>>2)],
|
|
HEAP32[(((tmPtr)+(4))>>2)],
|
|
HEAP32[((tmPtr)>>2)],
|
|
0).getTime() / 1000;
|
|
HEAP32[(((tmPtr)+(24))>>2)]=new Date(timestamp).getDay();
|
|
var yday = Math.round((timestamp - (new Date(year, 0, 1)).getTime()) / (1000 * 60 * 60 * 24));
|
|
HEAP32[(((tmPtr)+(28))>>2)]=yday;
|
|
return timestamp;
|
|
}function _asctime_r(tmPtr, buf) {
|
|
var date = new Date(_mktime(tmPtr)*1000);
|
|
var formatted = date.toString();
|
|
var datePart = formatted.replace(/\d{4}.*/, '').replace(/ 0/, ' ');
|
|
var timePart = formatted.match(/\d{2}:\d{2}:\d{2}/)[0];
|
|
formatted = datePart + timePart + ' ' + date.getFullYear() + '\n';
|
|
formatted.split('').forEach(function(chr, index) {
|
|
HEAP8[(((buf)+(index))|0)]=chr.charCodeAt(0);
|
|
});
|
|
HEAP8[(((buf)+(25))|0)]=0;
|
|
return buf;
|
|
}function _asctime(tmPtr) {
|
|
return _asctime_r(tmPtr, ___tm_formatted);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
|
|
return FS.createNode(null, '/', 16384 | 0777, 0);
|
|
},createSocket:function (family, type, protocol) {
|
|
var streaming = type == 1;
|
|
if (protocol) {
|
|
assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
|
|
}
|
|
|
|
// create our internal socket structure
|
|
var sock = {
|
|
family: family,
|
|
type: type,
|
|
protocol: protocol,
|
|
server: null,
|
|
peers: {},
|
|
pending: [],
|
|
recv_queue: [],
|
|
sock_ops: SOCKFS.websocket_sock_ops
|
|
};
|
|
|
|
// create the filesystem node to store the socket structure
|
|
var name = SOCKFS.nextname();
|
|
var node = FS.createNode(SOCKFS.root, name, 49152, 0);
|
|
node.sock = sock;
|
|
|
|
// and the wrapping stream that enables library functions such
|
|
// as read and write to indirectly interact with the socket
|
|
var stream = FS.createStream({
|
|
path: name,
|
|
node: node,
|
|
flags: FS.modeStringToFlags('r+'),
|
|
seekable: false,
|
|
stream_ops: SOCKFS.stream_ops
|
|
});
|
|
|
|
// map the new stream to the socket structure (sockets have a 1:1
|
|
// relationship with a stream)
|
|
sock.stream = stream;
|
|
|
|
return sock;
|
|
},getSocket:function (fd) {
|
|
var stream = FS.getStream(fd);
|
|
if (!stream || !FS.isSocket(stream.node.mode)) {
|
|
return null;
|
|
}
|
|
return stream.node.sock;
|
|
},stream_ops:{poll:function (stream) {
|
|
var sock = stream.node.sock;
|
|
return sock.sock_ops.poll(sock);
|
|
},ioctl:function (stream, request, varargs) {
|
|
var sock = stream.node.sock;
|
|
return sock.sock_ops.ioctl(sock, request, varargs);
|
|
},read:function (stream, buffer, offset, length, position /* ignored */) {
|
|
var sock = stream.node.sock;
|
|
var msg = sock.sock_ops.recvmsg(sock, length);
|
|
if (!msg) {
|
|
// socket is closed
|
|
return 0;
|
|
}
|
|
buffer.set(msg.buffer, offset);
|
|
return msg.buffer.length;
|
|
},write:function (stream, buffer, offset, length, position /* ignored */) {
|
|
var sock = stream.node.sock;
|
|
return sock.sock_ops.sendmsg(sock, buffer, offset, length);
|
|
},close:function (stream) {
|
|
var sock = stream.node.sock;
|
|
sock.sock_ops.close(sock);
|
|
}},nextname:function () {
|
|
if (!SOCKFS.nextname.current) {
|
|
SOCKFS.nextname.current = 0;
|
|
}
|
|
return 'socket[' + (SOCKFS.nextname.current++) + ']';
|
|
},websocket_sock_ops:{createPeer:function (sock, addr, port) {
|
|
var ws;
|
|
|
|
if (typeof addr === 'object') {
|
|
ws = addr;
|
|
addr = null;
|
|
port = null;
|
|
}
|
|
|
|
if (ws) {
|
|
// for sockets that've already connected (e.g. we're the server)
|
|
// we can inspect the _socket property for the address
|
|
if (ws._socket) {
|
|
addr = ws._socket.remoteAddress;
|
|
port = ws._socket.remotePort;
|
|
}
|
|
// if we're just now initializing a connection to the remote,
|
|
// inspect the url property
|
|
else {
|
|
var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
|
|
if (!result) {
|
|
throw new Error('WebSocket URL must be in the format ws(s)://address:port');
|
|
}
|
|
addr = result[1];
|
|
port = parseInt(result[2], 10);
|
|
}
|
|
} else {
|
|
// create the actual websocket object and connect
|
|
try {
|
|
var url = 'ws://' + addr + ':' + port;
|
|
// the node ws library API is slightly different than the browser's
|
|
var opts = ENVIRONMENT_IS_NODE ? {headers: {'websocket-protocol': ['binary']}} : ['binary'];
|
|
// If node we use the ws library.
|
|
var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket'];
|
|
ws = new WebSocket(url, opts);
|
|
ws.binaryType = 'arraybuffer';
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
|
|
}
|
|
}
|
|
|
|
|
|
var peer = {
|
|
addr: addr,
|
|
port: port,
|
|
socket: ws,
|
|
dgram_send_queue: []
|
|
};
|
|
|
|
SOCKFS.websocket_sock_ops.addPeer(sock, peer);
|
|
SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
|
|
|
|
// if this is a bound dgram socket, send the port number first to allow
|
|
// us to override the ephemeral port reported to us by remotePort on the
|
|
// remote end.
|
|
if (sock.type === 2 && typeof sock.sport !== 'undefined') {
|
|
peer.dgram_send_queue.push(new Uint8Array([
|
|
255, 255, 255, 255,
|
|
'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),
|
|
((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
|
|
]));
|
|
}
|
|
|
|
return peer;
|
|
},getPeer:function (sock, addr, port) {
|
|
return sock.peers[addr + ':' + port];
|
|
},addPeer:function (sock, peer) {
|
|
sock.peers[peer.addr + ':' + peer.port] = peer;
|
|
},removePeer:function (sock, peer) {
|
|
delete sock.peers[peer.addr + ':' + peer.port];
|
|
},handlePeerEvents:function (sock, peer) {
|
|
var first = true;
|
|
|
|
function handleOpen() {
|
|
try {
|
|
var queued = peer.dgram_send_queue.shift();
|
|
while (queued) {
|
|
peer.socket.send(queued);
|
|
queued = peer.dgram_send_queue.shift();
|
|
}
|
|
} catch (e) {
|
|
// not much we can do here in the way of proper error handling as we've already
|
|
// lied and said this data was sent. shut it down.
|
|
peer.socket.close();
|
|
}
|
|
}
|
|
|
|
function handleMessage(data) {
|
|
assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer
|
|
data = new Uint8Array(data); // make a typed array view on the array buffer
|
|
|
|
|
|
// if this is the port message, override the peer's port with it
|
|
var wasfirst = first;
|
|
first = false;
|
|
if (wasfirst &&
|
|
data.length === 10 &&
|
|
data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
|
|
data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
|
|
// update the peer's port and it's key in the peer map
|
|
var newport = ((data[8] << 8) | data[9]);
|
|
SOCKFS.websocket_sock_ops.removePeer(sock, peer);
|
|
peer.port = newport;
|
|
SOCKFS.websocket_sock_ops.addPeer(sock, peer);
|
|
return;
|
|
}
|
|
|
|
sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
|
|
}
|
|
|
|
function handleClose() {
|
|
SOCKFS.websocket_sock_ops.removePeer(sock, peer);
|
|
}
|
|
|
|
if (ENVIRONMENT_IS_NODE) {
|
|
peer.socket.on('open', handleOpen);
|
|
peer.socket.on('message', function(data, flags) {
|
|
if (!flags.binary) {
|
|
return;
|
|
}
|
|
handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer
|
|
});
|
|
peer.socket.on('error', handleClose);
|
|
peer.socket.on('close', handleClose);
|
|
} else {
|
|
peer.socket.onopen = handleOpen;
|
|
peer.socket.onmessage = function peer_socket_onmessage(event) {
|
|
handleMessage(event.data);
|
|
};
|
|
peer.socket.onerror = handleClose;
|
|
peer.socket.onclose = handleClose;
|
|
}
|
|
},poll:function (sock) {
|
|
if (sock.type === 1 && sock.server) {
|
|
// listen sockets should only say they're available for reading
|
|
// if there are pending clients.
|
|
return sock.pending.length ? (64 | 1) : 0;
|
|
}
|
|
|
|
var mask = 0;
|
|
var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets
|
|
SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
|
|
null;
|
|
|
|
if (sock.recv_queue.length ||
|
|
!dest || // connection-less sockets are always ready to read
|
|
(dest && dest.socket.readyState === dest.socket.CLOSING) ||
|
|
(dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed
|
|
mask |= (64 | 1);
|
|
}
|
|
|
|
if (!dest || // connection-less sockets are always ready to write
|
|
(dest && dest.socket.readyState === dest.socket.OPEN)) {
|
|
mask |= 4;
|
|
}
|
|
|
|
if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
|
|
(dest && dest.socket.readyState === dest.socket.CLOSED)) {
|
|
mask |= 16;
|
|
}
|
|
|
|
return mask;
|
|
},ioctl:function (sock, request, arg) {
|
|
switch (request) {
|
|
case 21531:
|
|
var bytes = 0;
|
|
if (sock.recv_queue.length) {
|
|
bytes = sock.recv_queue[0].data.length;
|
|
}
|
|
HEAP32[((arg)>>2)]=bytes;
|
|
return 0;
|
|
default:
|
|
return ERRNO_CODES.EINVAL;
|
|
}
|
|
},close:function (sock) {
|
|
// if we've spawned a listen server, close it
|
|
if (sock.server) {
|
|
try {
|
|
sock.server.close();
|
|
} catch (e) {
|
|
}
|
|
sock.server = null;
|
|
}
|
|
// close any peer connections
|
|
var peers = Object.keys(sock.peers);
|
|
for (var i = 0; i < peers.length; i++) {
|
|
var peer = sock.peers[peers[i]];
|
|
try {
|
|
peer.socket.close();
|
|
} catch (e) {
|
|
}
|
|
SOCKFS.websocket_sock_ops.removePeer(sock, peer);
|
|
}
|
|
return 0;
|
|
},bind:function (sock, addr, port) {
|
|
if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound
|
|
}
|
|
sock.saddr = addr;
|
|
sock.sport = port || _mkport();
|
|
// in order to emulate dgram sockets, we need to launch a listen server when
|
|
// binding on a connection-less socket
|
|
// note: this is only required on the server side
|
|
if (sock.type === 2) {
|
|
// close the existing server if it exists
|
|
if (sock.server) {
|
|
sock.server.close();
|
|
sock.server = null;
|
|
}
|
|
// swallow error operation not supported error that occurs when binding in the
|
|
// browser where this isn't supported
|
|
try {
|
|
sock.sock_ops.listen(sock, 0);
|
|
} catch (e) {
|
|
if (!(e instanceof FS.ErrnoError)) throw e;
|
|
if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
|
|
}
|
|
}
|
|
},connect:function (sock, addr, port) {
|
|
if (sock.server) {
|
|
throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
|
|
}
|
|
|
|
// TODO autobind
|
|
// if (!sock.addr && sock.type == 2) {
|
|
// }
|
|
|
|
// early out if we're already connected / in the middle of connecting
|
|
if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') {
|
|
var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
|
|
if (dest) {
|
|
if (dest.socket.readyState === dest.socket.CONNECTING) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
|
|
} else {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
|
|
}
|
|
}
|
|
}
|
|
|
|
// add the socket to our peer list and set our
|
|
// destination address / port to match
|
|
var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
|
|
sock.daddr = peer.addr;
|
|
sock.dport = peer.port;
|
|
|
|
// always "fail" in non-blocking mode
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
|
|
},listen:function (sock, backlog) {
|
|
if (!ENVIRONMENT_IS_NODE) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
|
|
}
|
|
if (sock.server) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening
|
|
}
|
|
var WebSocketServer = require('ws').Server;
|
|
var host = sock.saddr;
|
|
sock.server = new WebSocketServer({
|
|
host: host,
|
|
port: sock.sport
|
|
// TODO support backlog
|
|
});
|
|
|
|
sock.server.on('connection', function(ws) {
|
|
if (sock.type === 1) {
|
|
var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);
|
|
|
|
// create a peer on the new socket
|
|
var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
|
|
newsock.daddr = peer.addr;
|
|
newsock.dport = peer.port;
|
|
|
|
// push to queue for accept to pick up
|
|
sock.pending.push(newsock);
|
|
} else {
|
|
// create a peer on the listen socket so calling sendto
|
|
// with the listen socket and an address will resolve
|
|
// to the correct client
|
|
SOCKFS.websocket_sock_ops.createPeer(sock, ws);
|
|
}
|
|
});
|
|
sock.server.on('closed', function() {
|
|
sock.server = null;
|
|
});
|
|
sock.server.on('error', function() {
|
|
// don't throw
|
|
});
|
|
},accept:function (listensock) {
|
|
if (!listensock.server) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
var newsock = listensock.pending.shift();
|
|
newsock.stream.flags = listensock.stream.flags;
|
|
return newsock;
|
|
},getname:function (sock, peer) {
|
|
var addr, port;
|
|
if (peer) {
|
|
if (sock.daddr === undefined || sock.dport === undefined) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
|
|
}
|
|
addr = sock.daddr;
|
|
port = sock.dport;
|
|
} else {
|
|
// TODO saddr and sport will be set for bind()'d UDP sockets, but what
|
|
// should we be returning for TCP sockets that've been connect()'d?
|
|
addr = sock.saddr || 0;
|
|
port = sock.sport || 0;
|
|
}
|
|
return { addr: addr, port: port };
|
|
},sendmsg:function (sock, buffer, offset, length, addr, port) {
|
|
if (sock.type === 2) {
|
|
// connection-less sockets will honor the message address,
|
|
// and otherwise fall back to the bound destination address
|
|
if (addr === undefined || port === undefined) {
|
|
addr = sock.daddr;
|
|
port = sock.dport;
|
|
}
|
|
// if there was no address to fall back to, error out
|
|
if (addr === undefined || port === undefined) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
|
|
}
|
|
} else {
|
|
// connection-based sockets will only use the bound
|
|
addr = sock.daddr;
|
|
port = sock.dport;
|
|
}
|
|
|
|
// find the peer for the destination address
|
|
var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
|
|
|
|
// early out if not connected with a connection-based socket
|
|
if (sock.type === 1) {
|
|
if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
|
|
} else if (dest.socket.readyState === dest.socket.CONNECTING) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
|
|
}
|
|
}
|
|
|
|
// create a copy of the incoming data to send, as the WebSocket API
|
|
// doesn't work entirely with an ArrayBufferView, it'll just send
|
|
// the entire underlying buffer
|
|
var data;
|
|
if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
|
|
data = buffer.slice(offset, offset + length);
|
|
} else { // ArrayBufferView
|
|
data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length);
|
|
}
|
|
|
|
// if we're emulating a connection-less dgram socket and don't have
|
|
// a cached connection, queue the buffer to send upon connect and
|
|
// lie, saying the data was sent now.
|
|
if (sock.type === 2) {
|
|
if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
|
|
// if we're not connected, open a new connection
|
|
if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
|
|
dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
|
|
}
|
|
dest.dgram_send_queue.push(data);
|
|
return length;
|
|
}
|
|
}
|
|
|
|
try {
|
|
// send the actual data
|
|
dest.socket.send(data);
|
|
return length;
|
|
} catch (e) {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
|
}
|
|
},recvmsg:function (sock, length) {
|
|
// http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
|
|
if (sock.type === 1 && sock.server) {
|
|
// tcp servers should not be recv()'ing on the listen socket
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
|
|
}
|
|
|
|
var queued = sock.recv_queue.shift();
|
|
if (!queued) {
|
|
if (sock.type === 1) {
|
|
var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
|
|
|
|
if (!dest) {
|
|
// if we have a destination address but are not connected, error out
|
|
throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
|
|
}
|
|
else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
|
|
// return null if the socket has closed
|
|
return null;
|
|
}
|
|
else {
|
|
// else, our socket is in a valid state but truly has nothing available
|
|
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
|
|
}
|
|
} else {
|
|
throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
|
|
}
|
|
}
|
|
|
|
// queued.data will be an ArrayBuffer if it's unadulterated, but if it's
|
|
// requeued TCP data it'll be an ArrayBufferView
|
|
var queuedLength = queued.data.byteLength || queued.data.length;
|
|
var queuedOffset = queued.data.byteOffset || 0;
|
|
var queuedBuffer = queued.data.buffer || queued.data;
|
|
var bytesRead = Math.min(length, queuedLength);
|
|
var res = {
|
|
buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
|
|
addr: queued.addr,
|
|
port: queued.port
|
|
};
|
|
|
|
|
|
// push back any unread data for TCP connections
|
|
if (sock.type === 1 && bytesRead < queuedLength) {
|
|
var bytesRemaining = queuedLength - bytesRead;
|
|
queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
|
|
sock.recv_queue.unshift(queued);
|
|
}
|
|
|
|
return res;
|
|
}}};function _send(fd, buf, len, flags) {
|
|
var sock = SOCKFS.getSocket(fd);
|
|
if (!sock) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
// TODO honor flags
|
|
return _write(fd, buf, len);
|
|
}
|
|
|
|
function _pwrite(fildes, buf, nbyte, offset) {
|
|
// ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
try {
|
|
var slab = HEAP8;
|
|
return FS.write(stream, slab, buf, nbyte, offset);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}function _write(fildes, buf, nbyte) {
|
|
// ssize_t write(int fildes, const void *buf, size_t nbyte);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
|
|
try {
|
|
var slab = HEAP8;
|
|
return FS.write(stream, slab, buf, nbyte);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
function _fileno(stream) {
|
|
// int fileno(FILE *stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
|
|
return FS.getStreamFromPtr(stream).fd;
|
|
}function _fputc(c, stream) {
|
|
// int fputc(int c, FILE *stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
|
|
var chr = unSign(c & 0xFF);
|
|
HEAP8[((_fputc.ret)|0)]=chr;
|
|
var fd = _fileno(stream);
|
|
var ret = _write(fd, _fputc.ret, 1);
|
|
if (ret == -1) {
|
|
var streamObj = FS.getStreamFromPtr(stream);
|
|
if (streamObj) streamObj.error = true;
|
|
return -1;
|
|
} else {
|
|
return chr;
|
|
}
|
|
}function _putchar(c) {
|
|
// int putchar(int c);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html
|
|
return _fputc(c, HEAP32[((_stdout)>>2)]);
|
|
}
|
|
Module["_saveSetjmp"] = _saveSetjmp;
|
|
|
|
|
|
Module["_testSetjmp"] = _testSetjmp;function _longjmp(env, value) {
|
|
asm['setThrew'](env, value || 1);
|
|
throw 'longjmp';
|
|
}
|
|
|
|
var _setjmp=undefined;
|
|
|
|
function _toupper(chr) {
|
|
if (chr >= 97 && chr <= 122) {
|
|
return chr - 97 + 65;
|
|
} else {
|
|
return chr;
|
|
}
|
|
}
|
|
|
|
function _Sys_SetEnv(name, value) {
|
|
name = Pointer_stringify(name);
|
|
value = Pointer_stringify(value);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var _environ=allocate(1, "i32*", ALLOC_STATIC);var ___environ=_environ;function ___buildEnvironment(env) {
|
|
// WARNING: Arbitrary limit!
|
|
var MAX_ENV_VALUES = 64;
|
|
var TOTAL_ENV_SIZE = 1024;
|
|
|
|
// Statically allocate memory for the environment.
|
|
var poolPtr;
|
|
var envPtr;
|
|
if (!___buildEnvironment.called) {
|
|
___buildEnvironment.called = true;
|
|
// Set default values. Use string keys for Closure Compiler compatibility.
|
|
ENV['USER'] = 'root';
|
|
ENV['PATH'] = '/';
|
|
ENV['PWD'] = '/';
|
|
ENV['HOME'] = '/home/emscripten';
|
|
ENV['LANG'] = 'en_US.UTF-8';
|
|
ENV['_'] = './this.program';
|
|
// Allocate memory.
|
|
poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC);
|
|
envPtr = allocate(MAX_ENV_VALUES * 4,
|
|
'i8*', ALLOC_STATIC);
|
|
HEAP32[((envPtr)>>2)]=poolPtr;
|
|
HEAP32[((_environ)>>2)]=envPtr;
|
|
} else {
|
|
envPtr = HEAP32[((_environ)>>2)];
|
|
poolPtr = HEAP32[((envPtr)>>2)];
|
|
}
|
|
|
|
// Collect key=value lines.
|
|
var strings = [];
|
|
var totalSize = 0;
|
|
for (var key in env) {
|
|
if (typeof env[key] === 'string') {
|
|
var line = key + '=' + env[key];
|
|
strings.push(line);
|
|
totalSize += line.length;
|
|
}
|
|
}
|
|
if (totalSize > TOTAL_ENV_SIZE) {
|
|
throw new Error('Environment size exceeded TOTAL_ENV_SIZE!');
|
|
}
|
|
|
|
// Make new.
|
|
var ptrSize = 4;
|
|
for (var i = 0; i < strings.length; i++) {
|
|
var line = strings[i];
|
|
writeAsciiToMemory(line, poolPtr);
|
|
HEAP32[(((envPtr)+(i * ptrSize))>>2)]=poolPtr;
|
|
poolPtr += line.length + 1;
|
|
}
|
|
HEAP32[(((envPtr)+(strings.length * ptrSize))>>2)]=0;
|
|
}var ENV={};function _getenv(name) {
|
|
// char *getenv(const char *name);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
|
|
if (name === 0) return 0;
|
|
name = Pointer_stringify(name);
|
|
if (!ENV.hasOwnProperty(name)) return 0;
|
|
|
|
if (_getenv.ret) _free(_getenv.ret);
|
|
_getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL);
|
|
return _getenv.ret;
|
|
}
|
|
|
|
function _Sys_RandomBytes(string, len) {
|
|
return false;
|
|
}
|
|
|
|
|
|
Module["_tolower"] = _tolower;
|
|
|
|
function _srand(seed) {
|
|
HEAP32[((___rand_seed)>>2)]=seed
|
|
}
|
|
|
|
function _setvbuf(stream, buf, type, size) {
|
|
// int setvbuf(FILE *restrict stream, char *restrict buf, int type, size_t size);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/setvbuf.html
|
|
// TODO: Implement custom buffering.
|
|
return 0;
|
|
}
|
|
|
|
function _ftell(stream) {
|
|
// long ftell(FILE *stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ftell.html
|
|
stream = FS.getStreamFromPtr(stream);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
if (FS.isChrdev(stream.node.mode)) {
|
|
___setErrNo(ERRNO_CODES.ESPIPE);
|
|
return -1;
|
|
} else {
|
|
return stream.position;
|
|
}
|
|
}
|
|
|
|
|
|
function _lseek(fildes, offset, whence) {
|
|
// off_t lseek(int fildes, off_t offset, int whence);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
try {
|
|
return FS.llseek(stream, offset, whence);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}function _fseek(stream, offset, whence) {
|
|
// int fseek(FILE *stream, long offset, int whence);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html
|
|
var fd = _fileno(stream);
|
|
var ret = _lseek(fd, offset, whence);
|
|
if (ret == -1) {
|
|
return -1;
|
|
}
|
|
stream = FS.getStreamFromPtr(stream);
|
|
stream.eof = false;
|
|
return 0;
|
|
}
|
|
|
|
function _Sys_Mkdir(directory) {
|
|
directory = Pointer_stringify(directory);
|
|
try {
|
|
FS.mkdir(directory, 0777);
|
|
} catch (e) {
|
|
if (!(e instanceof FS.ErrnoError)) {
|
|
SYSC.Error('drop', e.message);
|
|
}
|
|
return e.errno === ERRNO_CODES.EEXIST;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
function _unlink(path) {
|
|
// int unlink(const char *path);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/unlink.html
|
|
path = Pointer_stringify(path);
|
|
try {
|
|
FS.unlink(path);
|
|
return 0;
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
function _rmdir(path) {
|
|
// int rmdir(const char *path);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/rmdir.html
|
|
path = Pointer_stringify(path);
|
|
try {
|
|
FS.rmdir(path);
|
|
return 0;
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}function _remove(path) {
|
|
// int remove(const char *path);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/remove.html
|
|
var ret = _unlink(path);
|
|
if (ret == -1) ret = _rmdir(path);
|
|
return ret;
|
|
}
|
|
|
|
function _Sys_FOpen(ospath, mode) {
|
|
return _fopen(ospath, mode);
|
|
}
|
|
|
|
|
|
function _close(fildes) {
|
|
// int close(int fildes);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
try {
|
|
FS.close(stream);
|
|
return 0;
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
function _fsync(fildes) {
|
|
// int fsync(int fildes);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html
|
|
var stream = FS.getStream(fildes);
|
|
if (stream) {
|
|
// We write directly to the file system, so there's nothing to do here.
|
|
return 0;
|
|
} else {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
}function _fclose(stream) {
|
|
// int fclose(FILE *stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html
|
|
var fd = _fileno(stream);
|
|
_fsync(fd);
|
|
return _close(fd);
|
|
}
|
|
|
|
function _Sys_Mkfifo(path) {
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
function _recv(fd, buf, len, flags) {
|
|
var sock = SOCKFS.getSocket(fd);
|
|
if (!sock) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
// TODO honor flags
|
|
return _read(fd, buf, len);
|
|
}
|
|
|
|
function _pread(fildes, buf, nbyte, offset) {
|
|
// ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
try {
|
|
var slab = HEAP8;
|
|
return FS.read(stream, slab, buf, nbyte, offset);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}function _read(fildes, buf, nbyte) {
|
|
// ssize_t read(int fildes, void *buf, size_t nbyte);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
|
|
try {
|
|
var slab = HEAP8;
|
|
return FS.read(stream, slab, buf, nbyte);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}function _fread(ptr, size, nitems, stream) {
|
|
// size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
|
|
var bytesToRead = nitems * size;
|
|
if (bytesToRead == 0) {
|
|
return 0;
|
|
}
|
|
var bytesRead = 0;
|
|
var streamObj = FS.getStreamFromPtr(stream);
|
|
if (!streamObj) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return 0;
|
|
}
|
|
while (streamObj.ungotten.length && bytesToRead > 0) {
|
|
HEAP8[((ptr++)|0)]=streamObj.ungotten.pop();
|
|
bytesToRead--;
|
|
bytesRead++;
|
|
}
|
|
var err = _read(streamObj.fd, ptr, bytesToRead);
|
|
if (err == -1) {
|
|
if (streamObj) streamObj.error = true;
|
|
return 0;
|
|
}
|
|
bytesRead += err;
|
|
if (bytesRead < bytesToRead) streamObj.eof = true;
|
|
return Math.floor(bytesRead / size);
|
|
}
|
|
|
|
function _fwrite(ptr, size, nitems, stream) {
|
|
// size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
|
|
var bytesToWrite = nitems * size;
|
|
if (bytesToWrite == 0) return 0;
|
|
var fd = _fileno(stream);
|
|
var bytesWritten = _write(fd, ptr, bytesToWrite);
|
|
if (bytesWritten == -1) {
|
|
var streamObj = FS.getStreamFromPtr(stream);
|
|
if (streamObj) streamObj.error = true;
|
|
return 0;
|
|
} else {
|
|
return Math.floor(bytesWritten / size);
|
|
}
|
|
}
|
|
|
|
|
|
function _Sys_ListFiles(directory, ext, filter, numfiles, dironly) {
|
|
directory = Pointer_stringify(directory);
|
|
ext = Pointer_stringify(ext);
|
|
if (ext === '/') {
|
|
ext = null;
|
|
dironly = true;
|
|
}
|
|
|
|
// TODO support filter
|
|
|
|
var contents;
|
|
try {
|
|
contents = FS.readdir(directory);
|
|
} catch (e) {
|
|
HEAP32[((numfiles)>>2)]=0;
|
|
return null;
|
|
}
|
|
|
|
var matches = [];
|
|
for (var i = 0; i < contents.length; i++) {
|
|
var name = contents[i];
|
|
var stat = FS.stat(PATH.join(directory, name));
|
|
|
|
if (dironly && !FS.isDir(stat.mode)) {
|
|
continue;
|
|
}
|
|
|
|
if ((!ext || name.lastIndexOf(ext) === (name.length - ext.length))) {
|
|
matches.push(name);
|
|
}
|
|
}
|
|
|
|
HEAP32[((numfiles)>>2)]=matches.length;
|
|
|
|
if (!matches.length) {
|
|
return null;
|
|
}
|
|
|
|
// return a copy of the match list
|
|
var list = _Z_Malloc((matches.length + 1) * 4);
|
|
|
|
var i;
|
|
for (i = 0; i < matches.length; i++) {
|
|
var filename = _S_Malloc(matches[i].length + 1);
|
|
|
|
writeStringToMemory(matches[i], filename);
|
|
|
|
// write the string's pointer back to the main array
|
|
HEAP32[(((list)+(i*4))>>2)]=filename;
|
|
}
|
|
|
|
// add a NULL terminator to the list
|
|
HEAP32[(((list)+(i*4))>>2)]=0;
|
|
|
|
return list;
|
|
}
|
|
|
|
function _Sys_FreeFileList(list) {
|
|
if (!list) {
|
|
return;
|
|
}
|
|
|
|
var ptr;
|
|
|
|
for (var i = 0; (ptr = HEAP32[(((list)+(i*4))>>2)]); i++) {
|
|
_Z_Free(ptr);
|
|
}
|
|
|
|
_Z_Free(list);
|
|
}
|
|
|
|
function _Sys_FS_Shutdown(context) {
|
|
var name = allocate(intArrayFromString('fs_homepath'), 'i8', ALLOC_STACK);
|
|
var fs_homepath = Pointer_stringify(_Cvar_VariableString(name));
|
|
|
|
SYSC.FS_Shutdown(Browser.safeCallback(function (err) {
|
|
if (err) {
|
|
// FIXME cb_free_context(context)
|
|
SYSC.Error('fatal', err);
|
|
return;
|
|
}
|
|
|
|
SYSC.ProxyCallback(context);
|
|
}));
|
|
}
|
|
|
|
function _Sys_DefaultHomePath() {
|
|
return 0;
|
|
}
|
|
|
|
function _Sys_FS_Startup(context) {
|
|
// mount a persistable fs into base if not already mounted
|
|
var name = allocate(intArrayFromString('fs_homepath'), 'i8', ALLOC_STACK);
|
|
var fs_homepath = Pointer_stringify(_Cvar_VariableString(name));
|
|
var localPath = PATH.join('.', fs_homepath);
|
|
|
|
// make sure the local path exists
|
|
var mkdirp = function (p) {
|
|
try {
|
|
fs.mkdirSync(p);
|
|
} catch (e) {
|
|
// make the subdirectory and then retry
|
|
if (e.code === 'ENOENT') {
|
|
mkdirp(PATH.dirname(p));
|
|
mkdirp(p);
|
|
return;
|
|
}
|
|
|
|
// if we got any other error, let's see if the directory already exists
|
|
var stat;
|
|
try {
|
|
stat = fs.statSync(p);
|
|
}
|
|
catch (e) {
|
|
SYSC.Error('fatal', e.message);
|
|
return;
|
|
}
|
|
|
|
if (!stat.isDirectory()) {
|
|
SYSC.Error('fatal', e.message);
|
|
}
|
|
}
|
|
};
|
|
mkdirp(localPath);
|
|
|
|
// mount up the local filesystem in emscripten
|
|
var dir;
|
|
try {
|
|
dir = FS.mkdir(fs_homepath, 0777);
|
|
} catch (e) {
|
|
if (!(e instanceof FS.ErrnoError) || e.errno !== ERRNO_CODES.EEXIST) {
|
|
SYSC.Error('fatal', e.message);
|
|
}
|
|
}
|
|
|
|
try {
|
|
FS.mount(NODEFS, { root: localPath }, fs_homepath);
|
|
} catch (e) {
|
|
if (!(e instanceof FS.ErrnoError) || e.errno !== ERRNO_CODES.EBUSY) {
|
|
SYSC.Error('fatal', e.message);
|
|
}
|
|
}
|
|
|
|
SYSC.FS_Startup(Browser.safeCallback(function (err) {
|
|
if (err) {
|
|
// FIXME cb_free_context(context)
|
|
SYSC.Error('fatal', err);
|
|
return;
|
|
}
|
|
|
|
SYSC.ProxyCallback(context);
|
|
}));
|
|
}
|
|
|
|
|
|
function _strerror_r(errnum, strerrbuf, buflen) {
|
|
if (errnum in ERRNO_MESSAGES) {
|
|
if (ERRNO_MESSAGES[errnum].length > buflen - 1) {
|
|
return ___setErrNo(ERRNO_CODES.ERANGE);
|
|
} else {
|
|
var msg = ERRNO_MESSAGES[errnum];
|
|
writeAsciiToMemory(msg, strerrbuf);
|
|
return 0;
|
|
}
|
|
} else {
|
|
return ___setErrNo(ERRNO_CODES.EINVAL);
|
|
}
|
|
}function _strerror(errnum) {
|
|
if (!_strerror.buffer) _strerror.buffer = _malloc(256);
|
|
_strerror_r(errnum, _strerror.buffer, 256);
|
|
return _strerror.buffer;
|
|
}
|
|
|
|
function ___errno_location() {
|
|
return ___errno_state;
|
|
}
|
|
|
|
|
|
function _htons(value) {
|
|
return ((value & 0xff) << 8) + ((value & 0xff00) >> 8);
|
|
}var _ntohs=_htons;
|
|
|
|
|
|
|
|
function __inet_pton4_raw(str) {
|
|
var b = str.split('.');
|
|
for (var i = 0; i < 4; i++) {
|
|
var tmp = Number(b[i]);
|
|
if (isNaN(tmp)) return null;
|
|
b[i] = tmp;
|
|
}
|
|
return (b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0;
|
|
}
|
|
|
|
function __inet_pton6_raw(str) {
|
|
var words;
|
|
var w, offset, z, i;
|
|
/* http://home.deds.nl/~aeron/regex/ */
|
|
var valid6regx = /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i
|
|
var parts = [];
|
|
if (!valid6regx.test(str)) {
|
|
return null;
|
|
}
|
|
if (str === "::") {
|
|
return [0, 0, 0, 0, 0, 0, 0, 0];
|
|
}
|
|
// Z placeholder to keep track of zeros when splitting the string on ":"
|
|
if (str.indexOf("::") === 0) {
|
|
str = str.replace("::", "Z:"); // leading zeros case
|
|
} else {
|
|
str = str.replace("::", ":Z:");
|
|
}
|
|
|
|
if (str.indexOf(".") > 0) {
|
|
// parse IPv4 embedded stress
|
|
str = str.replace(new RegExp('[.]', 'g'), ":");
|
|
words = str.split(":");
|
|
words[words.length-4] = parseInt(words[words.length-4]) + parseInt(words[words.length-3])*256;
|
|
words[words.length-3] = parseInt(words[words.length-2]) + parseInt(words[words.length-1])*256;
|
|
words = words.slice(0, words.length-2);
|
|
} else {
|
|
words = str.split(":");
|
|
}
|
|
|
|
offset = 0; z = 0;
|
|
for (w=0; w < words.length; w++) {
|
|
if (typeof words[w] === 'string') {
|
|
if (words[w] === 'Z') {
|
|
// compressed zeros - write appropriate number of zero words
|
|
for (z = 0; z < (8 - words.length+1); z++) {
|
|
parts[w+z] = 0;
|
|
}
|
|
offset = z-1;
|
|
} else {
|
|
// parse hex to field to 16-bit value and write it in network byte-order
|
|
parts[w+offset] = _htons(parseInt(words[w],16));
|
|
}
|
|
} else {
|
|
// parsed IPv4 words
|
|
parts[w+offset] = words[w];
|
|
}
|
|
}
|
|
return [
|
|
(parts[1] << 16) | parts[0],
|
|
(parts[3] << 16) | parts[2],
|
|
(parts[5] << 16) | parts[4],
|
|
(parts[7] << 16) | parts[6]
|
|
];
|
|
}var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name:function (name) {
|
|
// If the name is already a valid ipv4 / ipv6 address, don't generate a fake one.
|
|
var res = __inet_pton4_raw(name);
|
|
if (res) {
|
|
return name;
|
|
}
|
|
res = __inet_pton6_raw(name);
|
|
if (res) {
|
|
return name;
|
|
}
|
|
|
|
// See if this name is already mapped.
|
|
var addr;
|
|
|
|
if (DNS.address_map.addrs[name]) {
|
|
addr = DNS.address_map.addrs[name];
|
|
} else {
|
|
var id = DNS.address_map.id++;
|
|
assert(id < 65535, 'exceeded max address mappings of 65535');
|
|
|
|
addr = '172.29.' + (id & 0xff) + '.' + (id & 0xff00);
|
|
|
|
DNS.address_map.names[addr] = name;
|
|
DNS.address_map.addrs[name] = addr;
|
|
}
|
|
|
|
return addr;
|
|
},lookup_addr:function (addr) {
|
|
if (DNS.address_map.names[addr]) {
|
|
return DNS.address_map.names[addr];
|
|
}
|
|
|
|
return null;
|
|
}};
|
|
|
|
|
|
var Sockets={BUFFER_SIZE:10240,MAX_BUFFER_SIZE:10485760,nextFd:1,fds:{},nextport:1,maxport:65535,peer:null,connections:{},portmap:{},localAddr:4261412874,addrPool:[33554442,50331658,67108874,83886090,100663306,117440522,134217738,150994954,167772170,184549386,201326602,218103818,234881034]};function __write_sockaddr(sa, family, addr, port) {
|
|
switch (family) {
|
|
case 2:
|
|
addr = __inet_pton4_raw(addr);
|
|
HEAP16[((sa)>>1)]=family;
|
|
HEAP32[(((sa)+(4))>>2)]=addr;
|
|
HEAP16[(((sa)+(2))>>1)]=_htons(port);
|
|
break;
|
|
case 10:
|
|
addr = __inet_pton6_raw(addr);
|
|
HEAP32[((sa)>>2)]=family;
|
|
HEAP32[(((sa)+(8))>>2)]=addr[0];
|
|
HEAP32[(((sa)+(12))>>2)]=addr[1];
|
|
HEAP32[(((sa)+(16))>>2)]=addr[2];
|
|
HEAP32[(((sa)+(20))>>2)]=addr[3];
|
|
HEAP16[(((sa)+(2))>>1)]=_htons(port);
|
|
break;
|
|
default:
|
|
return { errno: ERRNO_CODES.EAFNOSUPPORT };
|
|
}
|
|
// kind of lame, but let's match _read_sockaddr's interface
|
|
return {};
|
|
}function _recvfrom(fd, buf, len, flags, addr, addrlen) {
|
|
var sock = SOCKFS.getSocket(fd);
|
|
if (!sock) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
// read from the socket
|
|
var msg;
|
|
try {
|
|
msg = sock.sock_ops.recvmsg(sock, len);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
|
|
if (!msg) {
|
|
// socket is closed
|
|
return 0;
|
|
}
|
|
|
|
// write the source address out
|
|
if (addr) {
|
|
var res = __write_sockaddr(addr, sock.family, DNS.lookup_name(msg.addr), msg.port);
|
|
assert(!res.errno);
|
|
}
|
|
// write the buffer out
|
|
HEAPU8.set(msg.buffer, buf);
|
|
|
|
return msg.buffer.byteLength;
|
|
}
|
|
|
|
|
|
|
|
function __inet_ntop4_raw(addr) {
|
|
return (addr & 0xff) + '.' + ((addr >> 8) & 0xff) + '.' + ((addr >> 16) & 0xff) + '.' + ((addr >> 24) & 0xff)
|
|
}
|
|
|
|
function __inet_ntop6_raw(ints) {
|
|
// ref: http://www.ietf.org/rfc/rfc2373.txt - section 2.5.4
|
|
// Format for IPv4 compatible and mapped 128-bit IPv6 Addresses
|
|
// 128-bits are split into eight 16-bit words
|
|
// stored in network byte order (big-endian)
|
|
// | 80 bits | 16 | 32 bits |
|
|
// +-----------------------------------------------------------------+
|
|
// | 10 bytes | 2 | 4 bytes |
|
|
// +--------------------------------------+--------------------------+
|
|
// + 5 words | 1 | 2 words |
|
|
// +--------------------------------------+--------------------------+
|
|
// |0000..............................0000|0000| IPv4 ADDRESS | (compatible)
|
|
// +--------------------------------------+----+---------------------+
|
|
// |0000..............................0000|FFFF| IPv4 ADDRESS | (mapped)
|
|
// +--------------------------------------+----+---------------------+
|
|
var str = "";
|
|
var word = 0;
|
|
var longest = 0;
|
|
var lastzero = 0;
|
|
var zstart = 0;
|
|
var len = 0;
|
|
var i = 0;
|
|
var parts = [
|
|
ints[0] & 0xffff,
|
|
(ints[0] >> 16),
|
|
ints[1] & 0xffff,
|
|
(ints[1] >> 16),
|
|
ints[2] & 0xffff,
|
|
(ints[2] >> 16),
|
|
ints[3] & 0xffff,
|
|
(ints[3] >> 16)
|
|
];
|
|
|
|
// Handle IPv4-compatible, IPv4-mapped, loopback and any/unspecified addresses
|
|
|
|
var hasipv4 = true;
|
|
var v4part = "";
|
|
// check if the 10 high-order bytes are all zeros (first 5 words)
|
|
for (i = 0; i < 5; i++) {
|
|
if (parts[i] !== 0) { hasipv4 = false; break; }
|
|
}
|
|
|
|
if (hasipv4) {
|
|
// low-order 32-bits store an IPv4 address (bytes 13 to 16) (last 2 words)
|
|
v4part = __inet_ntop4_raw(parts[6] | (parts[7] << 16));
|
|
// IPv4-mapped IPv6 address if 16-bit value (bytes 11 and 12) == 0xFFFF (6th word)
|
|
if (parts[5] === -1) {
|
|
str = "::ffff:";
|
|
str += v4part;
|
|
return str;
|
|
}
|
|
// IPv4-compatible IPv6 address if 16-bit value (bytes 11 and 12) == 0x0000 (6th word)
|
|
if (parts[5] === 0) {
|
|
str = "::";
|
|
//special case IPv6 addresses
|
|
if(v4part === "0.0.0.0") v4part = ""; // any/unspecified address
|
|
if(v4part === "0.0.0.1") v4part = "1";// loopback address
|
|
str += v4part;
|
|
return str;
|
|
}
|
|
}
|
|
|
|
// Handle all other IPv6 addresses
|
|
|
|
// first run to find the longest contiguous zero words
|
|
for (word = 0; word < 8; word++) {
|
|
if (parts[word] === 0) {
|
|
if (word - lastzero > 1) {
|
|
len = 0;
|
|
}
|
|
lastzero = word;
|
|
len++;
|
|
}
|
|
if (len > longest) {
|
|
longest = len;
|
|
zstart = word - longest + 1;
|
|
}
|
|
}
|
|
|
|
for (word = 0; word < 8; word++) {
|
|
if (longest > 1) {
|
|
// compress contiguous zeros - to produce "::"
|
|
if (parts[word] === 0 && word >= zstart && word < (zstart + longest) ) {
|
|
if (word === zstart) {
|
|
str += ":";
|
|
if (zstart === 0) str += ":"; //leading zeros case
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
// converts 16-bit words from big-endian to little-endian before converting to hex string
|
|
str += Number(_ntohs(parts[word] & 0xffff)).toString(16);
|
|
str += word < 7 ? ":" : "";
|
|
}
|
|
return str;
|
|
}function __read_sockaddr(sa, salen) {
|
|
// family / port offsets are common to both sockaddr_in and sockaddr_in6
|
|
var family = HEAP16[((sa)>>1)];
|
|
var port = _ntohs(HEAP16[(((sa)+(2))>>1)]);
|
|
var addr;
|
|
|
|
switch (family) {
|
|
case 2:
|
|
if (salen !== 16) {
|
|
return { errno: ERRNO_CODES.EINVAL };
|
|
}
|
|
addr = HEAP32[(((sa)+(4))>>2)];
|
|
addr = __inet_ntop4_raw(addr);
|
|
break;
|
|
case 10:
|
|
if (salen !== 28) {
|
|
return { errno: ERRNO_CODES.EINVAL };
|
|
}
|
|
addr = [
|
|
HEAP32[(((sa)+(8))>>2)],
|
|
HEAP32[(((sa)+(12))>>2)],
|
|
HEAP32[(((sa)+(16))>>2)],
|
|
HEAP32[(((sa)+(20))>>2)]
|
|
];
|
|
addr = __inet_ntop6_raw(addr);
|
|
break;
|
|
default:
|
|
return { errno: ERRNO_CODES.EAFNOSUPPORT };
|
|
}
|
|
|
|
return { family: family, addr: addr, port: port };
|
|
}function _sendto(fd, message, length, flags, dest_addr, dest_len) {
|
|
var sock = SOCKFS.getSocket(fd);
|
|
if (!sock) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
// read the address and port to send to
|
|
var info = __read_sockaddr(dest_addr, dest_len);
|
|
if (info.errno) {
|
|
___setErrNo(info.errno);
|
|
return -1;
|
|
}
|
|
var port = info.port;
|
|
var addr = DNS.lookup_addr(info.addr) || info.addr;
|
|
|
|
// send the message
|
|
try {
|
|
var slab = HEAP8;
|
|
return sock.sock_ops.sendmsg(sock, slab, message, length, addr, port);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
function _socket(family, type, protocol) {
|
|
var sock = SOCKFS.createSocket(family, type, protocol);
|
|
assert(sock.stream.fd < 64); // select() assumes socket fd values are in 0..63
|
|
return sock.stream.fd;
|
|
}
|
|
|
|
function _ioctl(fd, request, varargs) {
|
|
var stream = FS.getStream(fd);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
var arg = HEAP32[((varargs)>>2)];
|
|
|
|
try {
|
|
return FS.ioctl(stream, request, arg);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
function _setsockopt(fd, level, optname, optval, optlen) {
|
|
console.log('ignoring setsockopt command');
|
|
return 0;
|
|
}
|
|
|
|
|
|
function _bind(fd, addrp, addrlen) {
|
|
var sock = SOCKFS.getSocket(fd);
|
|
if (!sock) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
var info = __read_sockaddr(addrp, addrlen);
|
|
if (info.errno) {
|
|
___setErrNo(info.errno);
|
|
return -1;
|
|
}
|
|
var port = info.port;
|
|
var addr = DNS.lookup_addr(info.addr) || info.addr;
|
|
|
|
try {
|
|
sock.sock_ops.bind(sock, addr, port);
|
|
return 0;
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
function _if_nametoindex(a) {
|
|
return 0;
|
|
}
|
|
|
|
function _gethostbyname(name) {
|
|
name = Pointer_stringify(name);
|
|
|
|
// generate hostent
|
|
var ret = _malloc(20); // XXX possibly leaked, as are others here
|
|
var nameBuf = _malloc(name.length+1);
|
|
writeStringToMemory(name, nameBuf);
|
|
HEAP32[((ret)>>2)]=nameBuf;
|
|
var aliasesBuf = _malloc(4);
|
|
HEAP32[((aliasesBuf)>>2)]=0;
|
|
HEAP32[(((ret)+(4))>>2)]=aliasesBuf;
|
|
var afinet = 2;
|
|
HEAP32[(((ret)+(8))>>2)]=afinet;
|
|
HEAP32[(((ret)+(12))>>2)]=4;
|
|
var addrListBuf = _malloc(12);
|
|
HEAP32[((addrListBuf)>>2)]=addrListBuf+8;
|
|
HEAP32[(((addrListBuf)+(4))>>2)]=0;
|
|
HEAP32[(((addrListBuf)+(8))>>2)]=__inet_pton4_raw(DNS.lookup_name(name));
|
|
HEAP32[(((ret)+(16))>>2)]=addrListBuf;
|
|
return ret;
|
|
}
|
|
|
|
function _connect(fd, addrp, addrlen) {
|
|
var sock = SOCKFS.getSocket(fd);
|
|
if (!sock) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
var info = __read_sockaddr(addrp, addrlen);
|
|
if (info.errno) {
|
|
___setErrNo(info.errno);
|
|
return -1;
|
|
}
|
|
var port = info.port;
|
|
var addr = DNS.lookup_addr(info.addr) || info.addr;
|
|
|
|
try {
|
|
sock.sock_ops.connect(sock, addr, port);
|
|
return 0;
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
var ___DEFAULT_POLLMASK=5;function _select(nfds, readfds, writefds, exceptfds, timeout) {
|
|
// readfds are supported,
|
|
// writefds checks socket open status
|
|
// exceptfds not supported
|
|
// timeout is always 0 - fully async
|
|
assert(nfds <= 64, 'nfds must be less than or equal to 64'); // fd sets have 64 bits
|
|
assert(!exceptfds, 'exceptfds not supported');
|
|
|
|
var total = 0;
|
|
|
|
var srcReadLow = (readfds ? HEAP32[((readfds)>>2)] : 0),
|
|
srcReadHigh = (readfds ? HEAP32[(((readfds)+(4))>>2)] : 0);
|
|
var srcWriteLow = (writefds ? HEAP32[((writefds)>>2)] : 0),
|
|
srcWriteHigh = (writefds ? HEAP32[(((writefds)+(4))>>2)] : 0);
|
|
var srcExceptLow = (exceptfds ? HEAP32[((exceptfds)>>2)] : 0),
|
|
srcExceptHigh = (exceptfds ? HEAP32[(((exceptfds)+(4))>>2)] : 0);
|
|
|
|
var dstReadLow = 0,
|
|
dstReadHigh = 0;
|
|
var dstWriteLow = 0,
|
|
dstWriteHigh = 0;
|
|
var dstExceptLow = 0,
|
|
dstExceptHigh = 0;
|
|
|
|
var allLow = (readfds ? HEAP32[((readfds)>>2)] : 0) |
|
|
(writefds ? HEAP32[((writefds)>>2)] : 0) |
|
|
(exceptfds ? HEAP32[((exceptfds)>>2)] : 0);
|
|
var allHigh = (readfds ? HEAP32[(((readfds)+(4))>>2)] : 0) |
|
|
(writefds ? HEAP32[(((writefds)+(4))>>2)] : 0) |
|
|
(exceptfds ? HEAP32[(((exceptfds)+(4))>>2)] : 0);
|
|
|
|
function get(fd, low, high, val) {
|
|
return (fd < 32 ? (low & val) : (high & val));
|
|
}
|
|
|
|
for (var fd = 0; fd < nfds; fd++) {
|
|
var mask = 1 << (fd % 32);
|
|
if (!(get(fd, allLow, allHigh, mask))) {
|
|
continue; // index isn't in the set
|
|
}
|
|
|
|
var stream = FS.getStream(fd);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
|
|
var flags = ___DEFAULT_POLLMASK;
|
|
|
|
if (stream.stream_ops.poll) {
|
|
flags = stream.stream_ops.poll(stream);
|
|
}
|
|
|
|
if ((flags & 1) && get(fd, srcReadLow, srcReadHigh, mask)) {
|
|
fd < 32 ? (dstReadLow = dstReadLow | mask) : (dstReadHigh = dstReadHigh | mask);
|
|
total++;
|
|
}
|
|
if ((flags & 4) && get(fd, srcWriteLow, srcWriteHigh, mask)) {
|
|
fd < 32 ? (dstWriteLow = dstWriteLow | mask) : (dstWriteHigh = dstWriteHigh | mask);
|
|
total++;
|
|
}
|
|
if ((flags & 2) && get(fd, srcExceptLow, srcExceptHigh, mask)) {
|
|
fd < 32 ? (dstExceptLow = dstExceptLow | mask) : (dstExceptHigh = dstExceptHigh | mask);
|
|
total++;
|
|
}
|
|
}
|
|
|
|
if (readfds) {
|
|
HEAP32[((readfds)>>2)]=dstReadLow;
|
|
HEAP32[(((readfds)+(4))>>2)]=dstReadHigh;
|
|
}
|
|
if (writefds) {
|
|
HEAP32[((writefds)>>2)]=dstWriteLow;
|
|
HEAP32[(((writefds)+(4))>>2)]=dstWriteHigh;
|
|
}
|
|
if (exceptfds) {
|
|
HEAP32[((exceptfds)>>2)]=dstExceptLow;
|
|
HEAP32[(((exceptfds)+(4))>>2)]=dstExceptHigh;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
function _gethostname(name, namelen) {
|
|
// int gethostname(char *name, size_t namelen);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/gethostname.html
|
|
var host = 'emscripten';
|
|
if (typeof window !== 'undefined' && window.location.host) {
|
|
host = window.location.host;
|
|
}
|
|
var length = Math.min(namelen, host.length);
|
|
for (var i = 0; i < length; i++) {
|
|
HEAP8[(((name)+(i))|0)]=host.charCodeAt(i);
|
|
}
|
|
if (namelen > length) {
|
|
HEAP8[(((name)+(i))|0)]=0;
|
|
return 0;
|
|
} else {
|
|
___setErrNo(ERRNO_CODES.ENAMETOOLONG);
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
function _htonl(value) {
|
|
return ((value & 0xff) << 24) + ((value & 0xff00) << 8) +
|
|
((value & 0xff0000) >>> 8) + ((value & 0xff000000) >>> 24);
|
|
}function _getaddrinfo(node, service, hint, out) {
|
|
// Note getaddrinfo currently only returns a single addrinfo with ai_next defaulting to NULL. When NULL
|
|
// hints are specified or ai_family set to AF_UNSPEC or ai_socktype or ai_protocol set to 0 then we
|
|
// really should provide a linked list of suitable addrinfo values.
|
|
var addrs = [];
|
|
var canon = null;
|
|
var addr = 0;
|
|
var port = 0;
|
|
var flags = 0;
|
|
var family = 0;
|
|
var type = 0;
|
|
var proto = 0;
|
|
var ai, last;
|
|
|
|
function allocaddrinfo(family, type, proto, canon, addr, port) {
|
|
var sa, salen, ai;
|
|
var res;
|
|
|
|
salen = family === 10 ?
|
|
28 :
|
|
16;
|
|
addr = family === 10 ?
|
|
__inet_ntop6_raw(addr) :
|
|
__inet_ntop4_raw(addr);
|
|
sa = _malloc(salen);
|
|
res = __write_sockaddr(sa, family, addr, port);
|
|
assert(!res.errno);
|
|
|
|
ai = _malloc(32);
|
|
HEAP32[(((ai)+(4))>>2)]=family;
|
|
HEAP32[(((ai)+(8))>>2)]=type;
|
|
HEAP32[(((ai)+(12))>>2)]=proto;
|
|
if (canon) {
|
|
HEAP32[(((ai)+(24))>>2)]=canon;
|
|
}
|
|
HEAP32[(((ai)+(20))>>2)]=sa;
|
|
if (family === 10) {
|
|
HEAP32[(((ai)+(16))>>2)]=28;
|
|
} else {
|
|
HEAP32[(((ai)+(16))>>2)]=16;
|
|
}
|
|
HEAP32[(((ai)+(28))>>2)]=0;
|
|
|
|
return ai;
|
|
}
|
|
|
|
if (hint) {
|
|
flags = HEAP32[((hint)>>2)];
|
|
family = HEAP32[(((hint)+(4))>>2)];
|
|
type = HEAP32[(((hint)+(8))>>2)];
|
|
proto = HEAP32[(((hint)+(12))>>2)];
|
|
}
|
|
if (type && !proto) {
|
|
proto = type === 2 ? 17 : 6;
|
|
}
|
|
if (!type && proto) {
|
|
type = proto === 17 ? 2 : 1;
|
|
}
|
|
|
|
// If type or proto are set to zero in hints we should really be returning multiple addrinfo values, but for
|
|
// now default to a TCP STREAM socket so we can at least return a sensible addrinfo given NULL hints.
|
|
if (proto === 0) {
|
|
proto = 6;
|
|
}
|
|
if (type === 0) {
|
|
type = 1;
|
|
}
|
|
|
|
if (!node && !service) {
|
|
return -2;
|
|
}
|
|
if (flags & ~(1|2|4|
|
|
1024|8|16|32)) {
|
|
return -1;
|
|
}
|
|
if (hint !== 0 && (HEAP32[((hint)>>2)] & 2) && !node) {
|
|
return -1;
|
|
}
|
|
if (flags & 32) {
|
|
// TODO
|
|
return -2;
|
|
}
|
|
if (type !== 0 && type !== 1 && type !== 2) {
|
|
return -7;
|
|
}
|
|
if (family !== 0 && family !== 2 && family !== 10) {
|
|
return -6;
|
|
}
|
|
|
|
if (service) {
|
|
service = Pointer_stringify(service);
|
|
port = parseInt(service, 10);
|
|
|
|
if (isNaN(port)) {
|
|
if (flags & 1024) {
|
|
return -2;
|
|
}
|
|
// TODO support resolving well-known service names from:
|
|
// http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt
|
|
return -8;
|
|
}
|
|
}
|
|
|
|
if (!node) {
|
|
if (family === 0) {
|
|
family = 2;
|
|
}
|
|
if ((flags & 1) === 0) {
|
|
if (family === 2) {
|
|
addr = _htonl(2130706433);
|
|
} else {
|
|
addr = [0, 0, 0, 1];
|
|
}
|
|
}
|
|
ai = allocaddrinfo(family, type, proto, null, addr, port);
|
|
HEAP32[((out)>>2)]=ai;
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// try as a numeric address
|
|
//
|
|
node = Pointer_stringify(node);
|
|
addr = __inet_pton4_raw(node);
|
|
if (addr !== null) {
|
|
// incoming node is a valid ipv4 address
|
|
if (family === 0 || family === 2) {
|
|
family = 2;
|
|
}
|
|
else if (family === 10 && (flags & 8)) {
|
|
addr = [0, 0, _htonl(0xffff), addr];
|
|
family = 10;
|
|
} else {
|
|
return -2;
|
|
}
|
|
} else {
|
|
addr = __inet_pton6_raw(node);
|
|
if (addr !== null) {
|
|
// incoming node is a valid ipv6 address
|
|
if (family === 0 || family === 10) {
|
|
family = 10;
|
|
} else {
|
|
return -2;
|
|
}
|
|
}
|
|
}
|
|
if (addr != null) {
|
|
ai = allocaddrinfo(family, type, proto, node, addr, port);
|
|
HEAP32[((out)>>2)]=ai;
|
|
return 0;
|
|
}
|
|
if (flags & 4) {
|
|
return -2;
|
|
}
|
|
|
|
//
|
|
// try as a hostname
|
|
//
|
|
// resolve the hostname to a temporary fake address
|
|
node = DNS.lookup_name(node);
|
|
addr = __inet_pton4_raw(node);
|
|
if (family === 0) {
|
|
family = 2;
|
|
} else if (family === 10) {
|
|
addr = [0, 0, _htonl(0xffff), addr];
|
|
}
|
|
ai = allocaddrinfo(family, type, proto, null, addr, port);
|
|
HEAP32[((out)>>2)]=ai;
|
|
return 0;
|
|
}
|
|
|
|
function _freeaddrinfo(ai) {
|
|
var sa = HEAP32[(((ai)+(20))>>2)];
|
|
_free(sa);
|
|
_free(ai);
|
|
}
|
|
|
|
function _getnameinfo(sa, salen, node, nodelen, serv, servlen, flags) {
|
|
var info = __read_sockaddr(sa, salen);
|
|
if (info.errno) {
|
|
return -6;
|
|
}
|
|
var port = info.port;
|
|
var addr = info.addr;
|
|
|
|
if (node && nodelen) {
|
|
var lookup;
|
|
if ((flags & 1) || !(lookup = DNS.lookup_addr(addr))) {
|
|
if (flags & 8) {
|
|
return -2;
|
|
}
|
|
} else {
|
|
addr = lookup;
|
|
}
|
|
if (addr.length >= nodelen) {
|
|
return -12;
|
|
}
|
|
writeStringToMemory(addr, node);
|
|
}
|
|
|
|
if (serv && servlen) {
|
|
port = '' + port;
|
|
if (port.length > servlen) {
|
|
return -12;
|
|
}
|
|
writeStringToMemory(port, serv);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
var GAI_ERRNO_MESSAGES={};function _gai_strerror(val) {
|
|
var buflen = 256;
|
|
|
|
// On first call to gai_strerror we initialise the buffer and populate the error messages.
|
|
if (!_gai_strerror.buffer) {
|
|
_gai_strerror.buffer = _malloc(buflen);
|
|
|
|
GAI_ERRNO_MESSAGES['0'] = 'Success';
|
|
GAI_ERRNO_MESSAGES['' + -1] = 'Invalid value for \'ai_flags\' field';
|
|
GAI_ERRNO_MESSAGES['' + -2] = 'NAME or SERVICE is unknown';
|
|
GAI_ERRNO_MESSAGES['' + -3] = 'Temporary failure in name resolution';
|
|
GAI_ERRNO_MESSAGES['' + -4] = 'Non-recoverable failure in name res';
|
|
GAI_ERRNO_MESSAGES['' + -6] = '\'ai_family\' not supported';
|
|
GAI_ERRNO_MESSAGES['' + -7] = '\'ai_socktype\' not supported';
|
|
GAI_ERRNO_MESSAGES['' + -8] = 'SERVICE not supported for \'ai_socktype\'';
|
|
GAI_ERRNO_MESSAGES['' + -10] = 'Memory allocation failure';
|
|
GAI_ERRNO_MESSAGES['' + -11] = 'System error returned in \'errno\'';
|
|
GAI_ERRNO_MESSAGES['' + -12] = 'Argument buffer overflow';
|
|
}
|
|
|
|
var msg = 'Unknown error';
|
|
|
|
if (val in GAI_ERRNO_MESSAGES) {
|
|
if (GAI_ERRNO_MESSAGES[val].length > buflen - 1) {
|
|
msg = 'Message too long'; // EMSGSIZE message. This should never occur given the GAI_ERRNO_MESSAGES above.
|
|
} else {
|
|
msg = GAI_ERRNO_MESSAGES[val];
|
|
}
|
|
}
|
|
|
|
writeAsciiToMemory(msg, _gai_strerror.buffer);
|
|
return _gai_strerror.buffer;
|
|
}
|
|
|
|
function _isalnum(chr) {
|
|
return (chr >= 48 && chr <= 57) ||
|
|
(chr >= 97 && chr <= 122) ||
|
|
(chr >= 65 && chr <= 90);
|
|
}
|
|
|
|
function _llvm_bswap_i16(x) {
|
|
return ((x&0xff)<<8) | ((x>>8)&0xff);
|
|
}
|
|
|
|
function _llvm_bswap_i32(x) {
|
|
return ((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24);
|
|
}
|
|
|
|
|
|
function _open(path, oflag, varargs) {
|
|
// int open(const char *path, int oflag, ...);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html
|
|
var mode = HEAP32[((varargs)>>2)];
|
|
path = Pointer_stringify(path);
|
|
try {
|
|
var stream = FS.open(path, oflag, mode);
|
|
return stream.fd;
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
}function _fopen(filename, mode) {
|
|
// FILE *fopen(const char *restrict filename, const char *restrict mode);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
|
|
var flags;
|
|
mode = Pointer_stringify(mode);
|
|
if (mode[0] == 'r') {
|
|
if (mode.indexOf('+') != -1) {
|
|
flags = 2;
|
|
} else {
|
|
flags = 0;
|
|
}
|
|
} else if (mode[0] == 'w') {
|
|
if (mode.indexOf('+') != -1) {
|
|
flags = 2;
|
|
} else {
|
|
flags = 1;
|
|
}
|
|
flags |= 64;
|
|
flags |= 512;
|
|
} else if (mode[0] == 'a') {
|
|
if (mode.indexOf('+') != -1) {
|
|
flags = 2;
|
|
} else {
|
|
flags = 1;
|
|
}
|
|
flags |= 64;
|
|
flags |= 1024;
|
|
} else {
|
|
___setErrNo(ERRNO_CODES.EINVAL);
|
|
return 0;
|
|
}
|
|
var fd = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK)); // All creation permissions.
|
|
return fd === -1 ? 0 : FS.getPtrForStream(FS.getStream(fd));
|
|
}
|
|
|
|
function _ferror(stream) {
|
|
// int ferror(FILE *stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/ferror.html
|
|
stream = FS.getStreamFromPtr(stream);
|
|
return Number(stream && stream.error);
|
|
}
|
|
|
|
|
|
var VM={vmHeader_t:{__size__:36,vmMagic:0,instructionCount:4,codeOffset:8,codeLength:12,dataOffset:16,dataLength:20,litLength:24,bssLength:28,jtrgLength:32},vm_t:{__size__:156,programStack:0,systemCall:4,name:8,searchPath:72,dllHandle:76,entryPoint:80,destroy:84,currentlyInterpreting:88,compiled:92,codeBase:96,entryOfs:100,codeLength:104,instructionPointers:108,instructionCount:112,dataBase:116,dataMask:120,stackBottom:124,numSymbols:128,symbols:132,callLevel:136,breakFunction:140,breakCount:144,jumpTableTargets:148,numJumpTableTargets:152},vms:[],SUSPENDED:3735928559,MAX_VMMAIN_ARGS:13,ENTRY_FRAME_SIZE:60,OPSTACK_SIZE:1024,TYPE:{F4:1,I4:2,U4:3},Constant4:function (state) {
|
|
var v = (HEAP8[(((state.codeBase)+(state.pc))|0)] & 0xff) |
|
|
((HEAP8[(((state.codeBase)+(state.pc+1))|0)] & 0xff) << 8) |
|
|
((HEAP8[(((state.codeBase)+(state.pc+2))|0)] & 0xff) << 16) |
|
|
((HEAP8[(((state.codeBase)+(state.pc+3))|0)] & 0xff) << 24 );
|
|
state.pc += 4;
|
|
return v;
|
|
},Constant1:function (state) {
|
|
var v = HEAP8[(((state.codeBase)+(state.pc))|0)];
|
|
state.pc += 1;
|
|
return v;
|
|
},FindLabels:function (state) {
|
|
var labels = {};
|
|
|
|
var op, lastop;
|
|
for (state.instr = 0, state.pc = 0; state.instr < state.instructionCount; state.instr++) {
|
|
op = HEAP8[(((state.codeBase)+(state.pc))|0)];
|
|
|
|
state.pc++;
|
|
|
|
// create a label after each unconditional branching operator
|
|
// FIXME this is a bit excessive
|
|
if (lastop === 5 /* OP_CALL */ || lastop === 10 /* OP_JUMP */ || lastop === 7 /* OP_POP */ || lastop === 6 /* OP_PUSH */) {
|
|
labels[state.instr] = true;
|
|
}
|
|
|
|
switch (op) {
|
|
case 3 /* OP_ENTER */:
|
|
case 4 /* OP_LEAVE */:
|
|
case 9 /* OP_LOCAL */:
|
|
case 34 /* OP_BLOCK_COPY */:
|
|
VM.Constant4(state);
|
|
break;
|
|
|
|
case 8 /* OP_CONST */:
|
|
var value = VM.Constant4(state);
|
|
var nextop = HEAP8[(((state.codeBase)+(state.pc))|0)];
|
|
if (nextop === 10 /* OP_JUMP */) {
|
|
labels[value] = true;
|
|
}
|
|
break;
|
|
|
|
case 33 /* OP_ARG */:
|
|
VM.Constant1(state);
|
|
break;
|
|
|
|
case 11 /* OP_EQ */:
|
|
case 12 /* OP_NE */:
|
|
case 13 /* OP_LTI */:
|
|
case 14 /* OP_LEI */:
|
|
case 15 /* OP_GTI */:
|
|
case 16 /* OP_GEI */:
|
|
case 17 /* OP_LTU */:
|
|
case 18 /* OP_LEU */:
|
|
case 19 /* OP_GTU */:
|
|
case 20 /* OP_GEU */:
|
|
case 21 /* OP_EQF */:
|
|
case 22 /* OP_NEF */:
|
|
case 23 /* OP_LTF */:
|
|
case 24 /* OP_LEF */:
|
|
case 25 /* OP_GTF */:
|
|
case 26 /* OP_GEF */:
|
|
// create labels for any explicit branch destination
|
|
labels[VM.Constant4(state)] = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
lastop = op;
|
|
}
|
|
|
|
return labels;
|
|
},CompileModule:function (name, instructionCount, codeBase, dataBase) {
|
|
var fs_game = Pointer_stringify(_Cvar_VariableString(allocate(intArrayFromString('fs_game'), 'i8', ALLOC_STACK)));
|
|
|
|
var state = {
|
|
name: name,
|
|
instructionCount: instructionCount,
|
|
codeBase: codeBase,
|
|
dataBase: dataBase,
|
|
pc: 0,
|
|
instr: 0
|
|
};
|
|
|
|
var labels = VM.FindLabels(state);
|
|
var fninstr = 0;
|
|
var eof = false;
|
|
var ab = new ArrayBuffer(4);
|
|
var i32 = new Int32Array(ab);
|
|
var u32 = new Uint32Array(ab);
|
|
var f32 = new Float32Array(ab);
|
|
var callargs = [];
|
|
|
|
//
|
|
// expressions
|
|
//
|
|
var exprStack = [];
|
|
|
|
function PUSH_EXPR(expr) {
|
|
exprStack.push(expr);
|
|
}
|
|
|
|
function POP_EXPR(type) {
|
|
return exprStack.pop();
|
|
}
|
|
|
|
function CAST_STR(type, expr) {
|
|
switch (type) {
|
|
case VM.TYPE.F4:
|
|
return '+(' + expr + ')';
|
|
|
|
case VM.TYPE.I4:
|
|
return '(' + expr + ')|0';
|
|
|
|
case VM.TYPE.U4:
|
|
return '(' + expr + ')>>>0';
|
|
|
|
default:
|
|
throw new Error('unexpected data type');
|
|
}
|
|
}
|
|
|
|
function BITCAST_STR(type, expr) {
|
|
if (type === expr.type) {
|
|
return expr.toString();
|
|
}
|
|
|
|
if (expr.type === VM.TYPE.I4 && type === VM.TYPE.F4) {
|
|
if (expr instanceof CNST) {
|
|
i32[0] = expr.value;
|
|
return CAST_STR(type, f32[0]);
|
|
}
|
|
|
|
if (expr instanceof LOAD4) {
|
|
// by default, every pointer value is loaded from HEAP32
|
|
// don't use the scratch array if we can load directly from HEAPF32
|
|
return CAST_STR(type, 'HEAPF32[((' + OFFSET_STR(expr.addr) + ')>>2)]');
|
|
}
|
|
|
|
return CAST_STR(type, 'i32[0] = ' + expr + ', f32[0]');
|
|
} else if (expr.type === VM.TYPE.U4 && type === VM.TYPE.F4) {
|
|
return CAST_STR(type, 'u32[0] = ' + expr + ', f32[0]');
|
|
} else if (expr.type === VM.TYPE.F4 && type === VM.TYPE.I4) {
|
|
return CAST_STR(type, 'f32[0] = ' + expr + ', i32[0]');
|
|
} else if (expr.type === VM.TYPE.U4 && type === VM.TYPE.I4) {
|
|
return CAST_STR(type, expr.toString());
|
|
} else if (expr.type === VM.TYPE.F4 && type === VM.TYPE.U4) {
|
|
return CAST_STR(type, 'f32[0] = ' + expr + ', u32[0]');
|
|
} else if (expr.type === VM.TYPE.I4 && type === VM.TYPE.U4) {
|
|
return CAST_STR(type, expr.toString());
|
|
} else {
|
|
throw new Error('unsupported bitcast operands ' + expr.type + ' ' + type);
|
|
}
|
|
}
|
|
|
|
function OFFSET_STR(expr) {
|
|
if (expr instanceof CNST) {
|
|
return state.dataBase + expr.value;
|
|
} else if (expr instanceof LOCAL) {
|
|
return state.dataBase + expr.offset + '+STACKTOP';
|
|
}
|
|
return state.dataBase + '+' + expr;
|
|
}
|
|
|
|
function CNST(value) {
|
|
var ctor = CNST.ctor;
|
|
if (!ctor) {
|
|
ctor = CNST.ctor = function (value) {
|
|
this.type = VM.TYPE.I4;
|
|
this.value = value;
|
|
};
|
|
ctor.prototype = Object.create(CNST.prototype);
|
|
ctor.prototype.toString = function () {
|
|
return this.value.toString();
|
|
};
|
|
}
|
|
return new ctor(value);
|
|
}
|
|
|
|
function LOCAL(offset) {
|
|
var ctor = LOCAL.ctor;
|
|
if (!ctor) {
|
|
ctor = LOCAL.ctor = function (offset) {
|
|
this.type = VM.TYPE.I4;
|
|
this.offset = offset;
|
|
};
|
|
ctor.prototype = Object.create(LOCAL.prototype);
|
|
ctor.prototype.toString = function () {
|
|
return 'STACKTOP+' + this.offset.toString();
|
|
};
|
|
}
|
|
return new ctor(offset);
|
|
}
|
|
|
|
function LOAD4(addr) {
|
|
var ctor = LOAD4.ctor;
|
|
if (!ctor) {
|
|
ctor = LOAD4.ctor = function (addr) {
|
|
this.type = VM.TYPE.I4;
|
|
this.addr = addr;
|
|
};
|
|
ctor.prototype = Object.create(LOAD4.prototype);
|
|
ctor.prototype.toString = function () {
|
|
return 'HEAP32[((' + OFFSET_STR(this.addr) + ')>>2)]';
|
|
};
|
|
}
|
|
return new ctor(addr);
|
|
}
|
|
|
|
function LOAD2(addr) {
|
|
var ctor = LOAD2.ctor;
|
|
if (!ctor) {
|
|
ctor = LOAD2.ctor = function (addr) {
|
|
this.type = VM.TYPE.I4;
|
|
this.addr = addr;
|
|
};
|
|
ctor.prototype = Object.create(LOAD2.prototype);
|
|
ctor.prototype.toString = function () {
|
|
// TODO add makeGetValue u16
|
|
return 'HEAPU16[' + OFFSET_STR(this.addr) + ' >> 1]';
|
|
};
|
|
}
|
|
return new ctor(addr);
|
|
}
|
|
|
|
function LOAD1(addr) {
|
|
var ctor = LOAD1.ctor;
|
|
if (!ctor) {
|
|
ctor = LOAD1.ctor = function (addr) {
|
|
this.type = VM.TYPE.I4;
|
|
this.addr = addr;
|
|
};
|
|
ctor.prototype = Object.create(LOAD1.prototype);
|
|
ctor.prototype.toString = function () {
|
|
// TODO add makeGetValue u8
|
|
return 'HEAPU8[' + OFFSET_STR(this.addr) + ']';
|
|
};
|
|
}
|
|
return new ctor(addr);
|
|
}
|
|
|
|
function UNARY(type, op, expr) {
|
|
var ctor = UNARY.ctor;
|
|
if (!ctor) {
|
|
ctor = UNARY.ctor = function (type, op, expr) {
|
|
this.type = type;
|
|
this.op = op;
|
|
this.expr = expr;
|
|
};
|
|
ctor.prototype = Object.create(UNARY.prototype);
|
|
ctor.prototype.toString = function () {
|
|
var expr = BITCAST_STR(this.type, this.expr);
|
|
|
|
switch (this.op) {
|
|
case 35 /* OP_SEX8 */:
|
|
return '((' + expr + ')<<24)>>24';
|
|
|
|
case 36 /* OP_SEX16 */:
|
|
return '((' + expr + ')<<16)>>16';
|
|
|
|
case 37 /* OP_NEGI */:
|
|
return '-(' + expr + ')';
|
|
|
|
case 49 /* OP_BCOM */:
|
|
return '(' + expr + ')^-1';
|
|
|
|
case 53 /* OP_NEGF */:
|
|
return '(-.0)-(' + expr + ')';
|
|
|
|
default:
|
|
throw new Error('unknown op type for unary expression');
|
|
}
|
|
};
|
|
}
|
|
return new ctor(type, op, expr);
|
|
}
|
|
|
|
function BINARY(type, op, lhs, rhs) {
|
|
var ctor = BINARY.ctor;
|
|
if (!ctor) {
|
|
ctor = BINARY.ctor = function (type, op, lhs, rhs) {
|
|
this.type = type;
|
|
this.op = op;
|
|
this.lhs = lhs;
|
|
this.rhs = rhs;
|
|
};
|
|
ctor.prototype = Object.create(BINARY.prototype);
|
|
ctor.prototype.toString = function () {
|
|
var lhs = '(' + BITCAST_STR(this.type, this.lhs) + ')';
|
|
var rhs = '(' + BITCAST_STR(this.type, this.rhs) + ')';
|
|
|
|
switch (this.op) {
|
|
case 38 /* OP_ADD */:
|
|
case 54 /* OP_ADDF */:
|
|
return lhs + '+' + rhs;
|
|
|
|
case 39 /* OP_SUB */:
|
|
case 55 /* OP_SUBF */:
|
|
return lhs + '-' + rhs;
|
|
|
|
case 40 /* OP_DIVI */:
|
|
case 41 /* OP_DIVU */:
|
|
case 56 /* OP_DIVF */:
|
|
return lhs + '/' + rhs;
|
|
|
|
case 42 /* OP_MODI */:
|
|
case 43 /* OP_MODU */:
|
|
return lhs + '%' + rhs;
|
|
|
|
case 44 /* OP_MULI */:
|
|
case 45 /* OP_MULU */:
|
|
return 'Math.imul(' + lhs + ', ' + rhs +')';
|
|
|
|
case 57 /* OP_MULF */:
|
|
return lhs + '*' + rhs;
|
|
|
|
case 46 /* OP_BAND */:
|
|
return lhs + '&' + rhs;
|
|
|
|
case 47 /* OP_BOR */:
|
|
return lhs + '|' + rhs;
|
|
|
|
case 48 /* OP_BXOR */:
|
|
return lhs + '^' + rhs;
|
|
|
|
case 50 /* OP_LSH */:
|
|
return lhs + '<<' + rhs;
|
|
|
|
case 51 /* OP_RSHI */:
|
|
return lhs + '>>' + rhs;
|
|
|
|
case 52 /* OP_RSHU */:
|
|
return lhs + '>>>' + rhs;
|
|
|
|
default:
|
|
throw new Error('unknown op type for binary expression');
|
|
}
|
|
};
|
|
}
|
|
return new ctor(type, op, lhs, rhs);
|
|
}
|
|
|
|
function CONVERT(type, from_type, expr) {
|
|
var ctor = CONVERT.ctor;
|
|
if (!ctor) {
|
|
ctor = CONVERT.ctor = function (type, from_type, expr) {
|
|
this.type = type;
|
|
this.from_type = from_type;
|
|
this.expr = expr;
|
|
};
|
|
ctor.prototype = Object.create(CONVERT.prototype);
|
|
ctor.prototype.toString = function () {
|
|
return CAST_STR(this.type, BITCAST_STR(this.from_type, this.expr));
|
|
};
|
|
}
|
|
return new ctor(type, from_type, expr);
|
|
}
|
|
|
|
//
|
|
// statements
|
|
//
|
|
var moduleStr = '';
|
|
var indent = 0;
|
|
|
|
function EmitStatement(str) {
|
|
var prefix = '';
|
|
for (var i = 0; i < indent; i++) {
|
|
prefix += '\t';
|
|
}
|
|
moduleStr += prefix + str + '\n';
|
|
}
|
|
|
|
function EmitEnter(frameSize) {
|
|
EmitStatement('var fn' + fninstr + ' = FUNCTIONS[' + fninstr + '] = function fn' + fninstr + '(override) {');
|
|
indent++;
|
|
EmitStatement('var label = override || ' + fninstr + ';');
|
|
EmitStatement('while (1) switch (label) {');
|
|
indent++;
|
|
EmitStatement('case ' + fninstr + ':');
|
|
indent++;
|
|
EmitStatement('STACKTOP -= ' + frameSize + ';');
|
|
}
|
|
|
|
function EmitLeave(frameSize, ret) {
|
|
// leave the return value on the stack
|
|
EmitStatement('HEAP32[((' + OFFSET_STR(LOCAL(frameSize - 4)) + ')>>2)]=' + ret + ';');
|
|
EmitStatement('STACKTOP += ' + frameSize + ';');
|
|
EmitStatement('return;');
|
|
|
|
if (eof) {
|
|
indent--;
|
|
indent--;
|
|
EmitStatement('}');
|
|
indent--;
|
|
EmitStatement('};');
|
|
}
|
|
}
|
|
|
|
function EmitCall(addr) {
|
|
var translate = {
|
|
'cgame': {
|
|
'-101': 'memset',
|
|
'-102': 'memcpy',
|
|
'-103': 'strncpy',
|
|
'-104': 'sin',
|
|
'-105': 'cos',
|
|
'-106': 'atan2',
|
|
'-107': 'sqrt',
|
|
'-108': 'floor',
|
|
'-109': 'ceil',
|
|
'-112': 'acos'
|
|
},
|
|
'qagame': {
|
|
'-101': 'memset',
|
|
'-102': 'memcpy',
|
|
'-103': 'strncpy',
|
|
'-104': 'sin',
|
|
'-105': 'cos',
|
|
'-106': 'atan2',
|
|
'-107': 'sqrt',
|
|
'-111': 'floor',
|
|
'-112': 'ceil'
|
|
},
|
|
'ui': {
|
|
'-101': 'memset',
|
|
'-102': 'memcpy',
|
|
'-103': 'strncpy',
|
|
'-104': 'sin',
|
|
'-105': 'cos',
|
|
'-106': 'atan2',
|
|
'-107': 'sqrt',
|
|
'-108': 'floor',
|
|
'-109': 'ceil'
|
|
},
|
|
};
|
|
|
|
// emit return address info
|
|
EmitStore4(LOCAL(0), fninstr);
|
|
EmitStore4(LOCAL(4), state.instr + 1);
|
|
|
|
// emit args
|
|
while (callargs.length) {
|
|
var arg = callargs.shift();
|
|
EmitStore4(arg.addr, arg.value);
|
|
}
|
|
|
|
// go ahead and directly translate a few syscalls to speed things up
|
|
var table = translate[state.name];
|
|
var translation = table && table[addr];
|
|
|
|
if (translation) {
|
|
switch (translation) {
|
|
case 'memset':
|
|
EmitStatement('HEAP32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=_memset(' + state.dataBase + '+' + LOAD4(LOCAL(8)) + ', ' + LOAD4(LOCAL(12)) + ', ' + LOAD4(LOCAL(16)) + ');');
|
|
break;
|
|
|
|
case 'memcpy':
|
|
EmitStatement('HEAP32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=_memcpy(' + state.dataBase + '+' + LOAD4(LOCAL(8)) + ', ' + state.dataBase + '+' + LOAD4(LOCAL(12)) + ', ' + LOAD4(LOCAL(16)) + ');');
|
|
break;
|
|
|
|
case 'strncpy':
|
|
EmitStatement('HEAP32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=_strncpy(' + state.dataBase + '+' + LOAD4(LOCAL(8)) + ', ' + state.dataBase + '+' + LOAD4(LOCAL(12)) + ', ' + LOAD4(LOCAL(16)) + ');');
|
|
break;
|
|
|
|
case 'sin':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.sin(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ');');
|
|
break;
|
|
|
|
case 'cos':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.cos(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ');');
|
|
break;
|
|
|
|
case 'atan2':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.atan2(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ', ' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(12)))) + ');');
|
|
break;
|
|
|
|
case 'sqrt':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.sqrt(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ');');
|
|
break;
|
|
|
|
case 'floor':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.floor(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ');');
|
|
break;
|
|
|
|
case 'ceil':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.ceil(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ');');
|
|
break;
|
|
|
|
case 'acos':
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(LOCAL(-4)) + ')>>2)]=Math.acos(' + (BITCAST_STR(VM.TYPE.F4, LOAD4(LOCAL(8)))) + ');');
|
|
break;
|
|
}
|
|
} else {
|
|
var expr = 'call(' + addr + ')';
|
|
|
|
// remove the indirection if we can
|
|
if (addr instanceof CNST) {
|
|
if (addr.value >= 0) {
|
|
expr = 'fn' + addr.value + '()';
|
|
} else {
|
|
expr = 'syscall(' + addr.value + ')';
|
|
}
|
|
}
|
|
|
|
EmitStatement(expr + ';');
|
|
}
|
|
|
|
// push return value to stack
|
|
PUSH_EXPR(LOAD4(LOCAL(-4)));
|
|
}
|
|
|
|
function EmitJump(label) {
|
|
EmitStatement('label = ' + label + ';');
|
|
EmitStatement('break;');
|
|
}
|
|
|
|
function EmitConditionalJump(lhs, rhs, cond, label) {
|
|
var expr = '(' + lhs + ') ' + cond + ' (' + rhs + ')';
|
|
|
|
// MEGA HACK FOR CPMA 1.47
|
|
// ignore its built in pak-file checking since we repackage our own paks
|
|
if (fs_game === 'cpma' && name === 'qagame' && (state.instr === 1382 || state.instr === 1392)) {
|
|
// 1382 is checking if trap_FS_FOpenFile returned 0 for the pak, and if so, jumps to an error block
|
|
// 1392 is checking if trap_FS_FOpenFile's returned length matches the expected length and if so, jumps to a success block
|
|
expr = state.instr === 1382 ? '0' : '1';
|
|
}
|
|
|
|
EmitStatement('if (' + expr + ') {');
|
|
indent++;
|
|
EmitJump(label);
|
|
indent--;
|
|
EmitStatement('}');
|
|
}
|
|
|
|
function EmitStore4(addr, value) {
|
|
if (value.type === VM.TYPE.F4) {
|
|
EmitStatement('HEAPF32[((' + OFFSET_STR(addr) + ')>>2)]=' + value + ';');
|
|
} else {
|
|
EmitStatement('HEAP32[((' + OFFSET_STR(addr) + ')>>2)]=' + value + ';');
|
|
}
|
|
}
|
|
|
|
function EmitStore2(addr, value) {
|
|
EmitStatement('HEAP16[((' + OFFSET_STR(addr) + ')>>1)]=' + value + ';');
|
|
}
|
|
|
|
function EmitStore1(addr, value) {
|
|
EmitStatement('HEAP8[((' + OFFSET_STR(addr) + ')|0)]=' + value + ';');
|
|
}
|
|
|
|
function EmitBlockCopy(dest, src, bytes) {
|
|
EmitStatement('(_memcpy(' + OFFSET_STR(dest) + ', ' + OFFSET_STR(src) + ', ' + bytes + ')|0);');
|
|
}
|
|
|
|
EmitStatement('(function () {');
|
|
indent++;
|
|
|
|
EmitStatement('var FUNCTIONS = {};');
|
|
EmitStatement('var STACKTOP;');
|
|
|
|
EmitStatement('function syscall(callnum) {');
|
|
EmitStatement('\tcallnum = ~callnum;');
|
|
EmitStatement('\t// save the current vm');
|
|
EmitStatement('\tvar savedVM = _VM_GetCurrent();');
|
|
EmitStatement('\tvar stackOnEntry = STACKTOP;');
|
|
EmitStatement('\tvar image = HEAP32[(((savedVM)+(VM.vm_t.dataBase))>>2)];');
|
|
EmitStatement('\t// store the callnum in the return address space');
|
|
EmitStatement('\tvar returnAddr = HEAP32[(((image)+(stackOnEntry + 4))>>2)];');
|
|
EmitStatement('\tHEAP32[(((image)+(stackOnEntry + 4))>>2)]=callnum;');
|
|
// MEGA HACK FOR CPMA 1.47
|
|
// it uses the default model mynx which we don't have. if
|
|
// it fails to load the default model, the game will exit
|
|
if (fs_game === 'cpma' && name === 'cgame') {
|
|
EmitStatement('\tif (callnum === 10 /* trap_FS_FOpenFile */ || callnum === 34 /* trap_S_RegisterSound */ || callnum === 37 /* trap_R_RegisterModel */ || callnum === 38 /* trap_R_RegisterSkin */) {');
|
|
EmitStatement('\t\tvar modelName = Pointer_stringify(' + state.dataBase + ' + HEAP32[(((image)+(stackOnEntry + 8))>>2)]);');
|
|
EmitStatement('\t\tif (modelName.indexOf("/mynx") !== -1) {');
|
|
EmitStatement('\t\t\tmodelName = modelName.replace("/mynx", "/sarge");');
|
|
EmitStatement('\t\t\tSTACKTOP -= modelName.length+1;');
|
|
EmitStatement('\t\t\twriteStringToMemory(modelName, ' + state.dataBase + ' + STACKTOP);');
|
|
EmitStatement('\t\t\tHEAP32[(((image)+(stackOnEntry + 8))>>2)]=STACKTOP;');
|
|
EmitStatement('\t\t}');
|
|
EmitStatement('\t}');
|
|
}
|
|
EmitStatement('\t// modify VM stack pointer for recursive VM entry');
|
|
EmitStatement('\tSTACKTOP -= 4;')
|
|
EmitStatement('\tHEAP32[(((savedVM)+(VM.vm_t.programStack))>>2)]=STACKTOP;');
|
|
EmitStatement('\t// call into the client');
|
|
EmitStatement('\tvar systemCall = HEAP32[(((savedVM)+(VM.vm_t.systemCall))>>2)];');
|
|
EmitStatement('\tvar ret = Runtime.dynCall("ii", systemCall, [image + stackOnEntry + 4]);');
|
|
EmitStatement('\t// restore return address');
|
|
EmitStatement('\tHEAP32[(((image)+(stackOnEntry + 4))>>2)]=returnAddr;');
|
|
EmitStatement('\t// leave the return value on the stack');
|
|
EmitStatement('\tHEAP32[(((image)+(stackOnEntry - 4))>>2)]=ret;');
|
|
EmitStatement('\tSTACKTOP = stackOnEntry;');
|
|
EmitStatement('\tHEAP32[(((savedVM)+(VM.vm_t.programStack))>>2)]=STACKTOP;');
|
|
EmitStatement('\t_VM_SetCurrent(savedVM);');
|
|
// intercept trap_UpdateScreen calls coming from cgame and suspend the VM
|
|
if (name === 'cgame') {
|
|
EmitStatement('\tif (callnum === 17 /* trap_UpdateScreen */) {');
|
|
EmitStatement('\t\tthrow { suspend: true };');
|
|
EmitStatement('\t}');
|
|
}
|
|
EmitStatement('\treturn;');
|
|
EmitStatement('}');
|
|
|
|
EmitStatement('function call(addr) {');
|
|
EmitStatement('\tif (addr >= 0) {');
|
|
EmitStatement('\t\tvar fn = FUNCTIONS[addr];');
|
|
EmitStatement('\t\tfn();');
|
|
EmitStatement('\t\treturn;');
|
|
EmitStatement('\t}');
|
|
EmitStatement('\tsyscall(addr);');
|
|
EmitStatement('}');
|
|
|
|
EmitStatement('var ab = new ArrayBuffer(4);');
|
|
EmitStatement('var i32 = new Int32Array(ab);');
|
|
EmitStatement('var u32 = new Uint32Array(ab);');
|
|
EmitStatement('var f32 = new Float32Array(ab);');
|
|
|
|
var lastop1, lastop2;
|
|
for (state.instr = 0, state.pc = 0; state.instr < state.instructionCount; state.instr++) {
|
|
var op = HEAP8[(((state.codeBase)+(state.pc))|0)];
|
|
|
|
state.pc++;
|
|
|
|
if (labels[state.instr]) {
|
|
indent--;
|
|
EmitStatement('case ' + state.instr + ':');
|
|
indent++;
|
|
}
|
|
|
|
switch (op) {
|
|
//
|
|
// expressions
|
|
//
|
|
case 6 /* OP_PUSH */:
|
|
PUSH_EXPR(CNST(0));
|
|
eof = true;
|
|
break;
|
|
|
|
case 7 /* OP_POP */:
|
|
POP_EXPR();
|
|
break;
|
|
|
|
case 8 /* OP_CONST */:
|
|
PUSH_EXPR(CNST(VM.Constant4(state)));
|
|
break;
|
|
|
|
case 9 /* OP_LOCAL */:
|
|
PUSH_EXPR(LOCAL(VM.Constant4(state)));
|
|
break;
|
|
|
|
case 27 /* OP_LOAD1 */:
|
|
PUSH_EXPR(LOAD1(POP_EXPR()));
|
|
break;
|
|
|
|
case 28 /* OP_LOAD2 */:
|
|
PUSH_EXPR(LOAD2(POP_EXPR()));
|
|
break;
|
|
|
|
case 29 /* OP_LOAD4 */:
|
|
PUSH_EXPR(LOAD4(POP_EXPR()));
|
|
break;
|
|
|
|
case 35 /* OP_SEX8 */:
|
|
case 36 /* OP_SEX16 */:
|
|
case 37 /* OP_NEGI */:
|
|
case 49 /* OP_BCOM */:
|
|
PUSH_EXPR(UNARY(VM.TYPE.I4, op, POP_EXPR()));
|
|
break;
|
|
|
|
case 53 /* OP_NEGF */:
|
|
PUSH_EXPR(UNARY(VM.TYPE.F4, op, POP_EXPR()));
|
|
break;
|
|
|
|
case 38 /* OP_ADD */:
|
|
case 39 /* OP_SUB */:
|
|
case 40 /* OP_DIVI */:
|
|
case 42 /* OP_MODI */:
|
|
case 44 /* OP_MULI */:
|
|
case 46 /* OP_BAND */:
|
|
case 47 /* OP_BOR */:
|
|
case 48 /* OP_BXOR */:
|
|
case 50 /* OP_LSH */:
|
|
case 51 /* OP_RSHI */:
|
|
var rhs = POP_EXPR();
|
|
var lhs = POP_EXPR();
|
|
PUSH_EXPR(BINARY(VM.TYPE.I4, op, lhs, rhs));
|
|
break;
|
|
|
|
case 41 /* OP_DIVU */:
|
|
case 43 /* OP_MODU */:
|
|
case 45 /* OP_MULU */:
|
|
case 52 /* OP_RSHU */:
|
|
var rhs = POP_EXPR();
|
|
var lhs = POP_EXPR();
|
|
PUSH_EXPR(BINARY(VM.TYPE.U4, op, lhs, rhs));
|
|
break;
|
|
|
|
case 54 /* OP_ADDF */:
|
|
case 55 /* OP_SUBF */:
|
|
case 56 /* OP_DIVF */:
|
|
case 57 /* OP_MULF */:
|
|
var rhs = POP_EXPR();
|
|
var lhs = POP_EXPR();
|
|
PUSH_EXPR(BINARY(VM.TYPE.F4, op, lhs, rhs));
|
|
break;
|
|
|
|
case 58 /* OP_CVIF */:
|
|
PUSH_EXPR(CONVERT(VM.TYPE.F4, VM.TYPE.I4, POP_EXPR()));
|
|
break;
|
|
|
|
case 59 /* OP_CVFI */:
|
|
PUSH_EXPR(CONVERT(VM.TYPE.I4, VM.TYPE.F4, POP_EXPR()));
|
|
break;
|
|
|
|
//
|
|
// statements
|
|
//
|
|
case 0 /* OP_UNDEF */:
|
|
case 1 /* OP_IGNORE */:
|
|
break;
|
|
|
|
case 2 /* OP_BREAK */:
|
|
EmitStatement('debugger;');
|
|
break;
|
|
|
|
case 3 /* OP_ENTER */:
|
|
fninstr = state.instr;
|
|
eof = false;
|
|
EmitEnter(VM.Constant4(state));
|
|
break;
|
|
|
|
case 4 /* OP_LEAVE */:
|
|
EmitLeave(VM.Constant4(state), BITCAST_STR(VM.TYPE.I4, POP_EXPR()));
|
|
break;
|
|
|
|
case 5 /* OP_CALL */:
|
|
EmitCall(POP_EXPR());
|
|
break;
|
|
|
|
case 10 /* OP_JUMP */:
|
|
// OP_LEAVE ops have explicit jumps written out afterwards that we can ignore
|
|
// RETI4
|
|
// ADDRGP4 $1
|
|
// JUMPV
|
|
var expr = POP_EXPR();
|
|
if (!(lastop1 === 4 /* OP_LEAVE */ && lastop2 === 8 /* OP_CONST */)) {
|
|
var instr = BITCAST_STR(VM.TYPE.I4, expr);
|
|
EmitJump(instr);
|
|
}
|
|
break;
|
|
|
|
case 11 /* OP_EQ */:
|
|
var rhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '===', VM.Constant4(state));
|
|
break;
|
|
|
|
case 12 /* OP_NE */:
|
|
var rhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '!==', VM.Constant4(state));
|
|
break;
|
|
|
|
case 13 /* OP_LTI */:
|
|
var rhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '<', VM.Constant4(state));
|
|
break;
|
|
|
|
case 14 /* OP_LEI */:
|
|
var rhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '<=', VM.Constant4(state));
|
|
break;
|
|
|
|
case 15 /* OP_GTI */:
|
|
var rhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '>', VM.Constant4(state));
|
|
break;
|
|
|
|
case 16 /* OP_GEI */:
|
|
var rhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '>=', VM.Constant4(state));
|
|
break;
|
|
|
|
case 17 /* OP_LTU */:
|
|
var rhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '<', VM.Constant4(state));
|
|
break;
|
|
|
|
case 18 /* OP_LEU */:
|
|
var rhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '<=', VM.Constant4(state));
|
|
break;
|
|
|
|
case 19 /* OP_GTU */:
|
|
var rhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '>', VM.Constant4(state));
|
|
break;
|
|
|
|
case 20 /* OP_GEU */:
|
|
var rhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.U4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '>=', VM.Constant4(state));
|
|
break;
|
|
|
|
case 21 /* OP_EQF */:
|
|
var rhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '===', VM.Constant4(state));
|
|
break;
|
|
|
|
case 22 /* OP_NEF */:
|
|
var rhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '!==', VM.Constant4(state));
|
|
break;
|
|
|
|
case 23 /* OP_LTF */:
|
|
var rhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '<', VM.Constant4(state));
|
|
break;
|
|
|
|
case 24 /* OP_LEF */:
|
|
var rhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '<=', VM.Constant4(state));
|
|
break;
|
|
|
|
case 25 /* OP_GTF */:
|
|
var rhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '>', VM.Constant4(state));
|
|
break;
|
|
|
|
case 26 /* OP_GEF */:
|
|
var rhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
var lhs = BITCAST_STR(VM.TYPE.F4, POP_EXPR());
|
|
EmitConditionalJump(lhs, rhs, '>=', VM.Constant4(state));
|
|
break;
|
|
|
|
case 30 /* OP_STORE1 */:
|
|
var value = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var addr = POP_EXPR();
|
|
EmitStore1(addr, value);
|
|
break;
|
|
|
|
case 31 /* OP_STORE2 */:
|
|
var value = BITCAST_STR(VM.TYPE.I4, POP_EXPR());
|
|
var addr = POP_EXPR();
|
|
EmitStore2(addr, value);
|
|
break;
|
|
|
|
case 32 /* OP_STORE4 */:
|
|
var value = POP_EXPR();
|
|
var addr = POP_EXPR();
|
|
EmitStore4(addr, value);
|
|
break;
|
|
|
|
case 33 /* OP_ARG */:
|
|
var value = POP_EXPR();
|
|
var addr = LOCAL(VM.Constant1(state));
|
|
callargs.push({ addr: addr, value: value });
|
|
break;
|
|
|
|
case 34 /* OP_BLOCK_COPY */:
|
|
var src = POP_EXPR();
|
|
var dest = POP_EXPR();
|
|
var bytes = VM.Constant4(state);
|
|
EmitBlockCopy(dest, src, bytes);
|
|
break;
|
|
}
|
|
|
|
lastop1 = lastop2;
|
|
lastop2 = op;
|
|
}
|
|
|
|
EmitStatement('return Object.create(Object.prototype, {');
|
|
EmitStatement('\tFUNCTIONS: { value: FUNCTIONS },');
|
|
EmitStatement('\tSTACKTOP: { get: function () { return STACKTOP; }, set: function (val) { STACKTOP = val; } },');
|
|
EmitStatement('});');
|
|
indent--;
|
|
EmitStatement('})');
|
|
|
|
return moduleStr;
|
|
}};
|
|
|
|
function _VM_Destroy(vmp) {
|
|
var handle = HEAP32[(((vmp)+(VM.vm_t.entryOfs))>>2)];
|
|
|
|
delete VM.vms[handle];
|
|
}function _VM_Compile(vmp, headerp) {
|
|
var current = _VM_GetCurrent();
|
|
var name = Pointer_stringify(vmp + VM.vm_t.name);
|
|
var dataBase = HEAP32[(((vmp)+(VM.vm_t.dataBase))>>2)];
|
|
var codeOffset = HEAP32[(((headerp)+(VM.vmHeader_t.codeOffset))>>2)];
|
|
var instructionCount = HEAP32[(((headerp)+(VM.vmHeader_t.instructionCount))>>2)];
|
|
|
|
var vm;
|
|
try {
|
|
var start = Date.now();
|
|
|
|
var module = VM.CompileModule(name, instructionCount, headerp + codeOffset, dataBase);
|
|
vm = eval(module)();
|
|
|
|
SYSC.Print('VM file ' + name + ' compiled in ' + (Date.now() - start) + ' milliseconds');
|
|
} catch (e) {
|
|
if (e.longjmp || e === 'longjmp') {
|
|
throw e;
|
|
}
|
|
SYSC.Error('fatal', e);
|
|
}
|
|
|
|
var handle = VM.vms.length+1;
|
|
VM.vms[handle] = vm;
|
|
|
|
if (!VM.DestroyPtr) {
|
|
VM.DestroyPtr = Runtime.addFunction(_VM_Destroy);
|
|
}
|
|
|
|
HEAP32[(((vmp)+(VM.vm_t.entryOfs))>>2)]=handle;
|
|
HEAP32[(((vmp)+(VM.vm_t.destroy))>>2)]=VM.DestroyPtr;
|
|
}
|
|
|
|
|
|
function _VM_SuspendCompiled(vmp, stackOnEntry) {
|
|
var handle = HEAP32[(((vmp)+(VM.vm_t.entryOfs))>>2)];
|
|
var vm = VM.vms[handle];
|
|
|
|
if (!vm) {
|
|
SYSC.Error('drop', 'invalid vm handle');
|
|
return;
|
|
}
|
|
|
|
vm.suspended = true;
|
|
vm.stackOnEntry = stackOnEntry;
|
|
}function _VM_CallCompiled(vmp, args) {
|
|
var handle = HEAP32[(((vmp)+(VM.vm_t.entryOfs))>>2)];
|
|
var vm = VM.vms[handle];
|
|
|
|
// we can't re-enter the vm until it's been resumed
|
|
if (vm.suspended) {
|
|
SYSC.Error('drop', 'attempted to re-enter suspended vm');
|
|
}
|
|
|
|
// set the current vm
|
|
var savedVM = _VM_GetCurrent();
|
|
_VM_SetCurrent(vmp);
|
|
|
|
// save off the stack pointer
|
|
var image = HEAP32[(((vmp)+(VM.vm_t.dataBase))>>2)];
|
|
|
|
// set up the stack frame
|
|
var stackOnEntry = HEAP32[(((vmp)+(VM.vm_t.programStack))>>2)];
|
|
var stackTop = stackOnEntry - VM.ENTRY_FRAME_SIZE;
|
|
|
|
HEAP32[(((image)+(stackTop))>>2)]=-1;
|
|
HEAP32[(((image)+(stackTop + 4))>>2)]=0;
|
|
|
|
for (var i = 0; i < VM.MAX_VMMAIN_ARGS; i++) {
|
|
var arg = HEAP32[(((args)+(i * 4))>>2)];
|
|
HEAP32[(((image)+(stackTop + 8 + i * 4))>>2)]=arg;
|
|
}
|
|
|
|
// call into the entry point
|
|
var result;
|
|
|
|
try {
|
|
var entryPoint = vm.FUNCTIONS[0];
|
|
|
|
vm.STACKTOP = stackTop;
|
|
|
|
entryPoint();
|
|
|
|
if (vm.STACKTOP !== (stackOnEntry - VM.ENTRY_FRAME_SIZE)) {
|
|
SYSC.Error('fatal', 'program stack corrupted, is ' + vm.STACKTOP + ', expected ' + (stackOnEntry - VM.ENTRY_FRAME_SIZE));
|
|
}
|
|
|
|
result = HEAP32[(((image)+(vm.STACKTOP - 4))>>2)];
|
|
|
|
HEAP32[(((vmp)+(VM.vm_t.programStack))>>2)]=stackOnEntry;
|
|
} catch (e) {
|
|
if (e.longjmp || e === 'longjmp') {
|
|
throw e;
|
|
}
|
|
|
|
if (!e.suspend) {
|
|
SYSC.Error('fatal', e);
|
|
return;
|
|
}
|
|
|
|
_VM_SuspendCompiled(vmp, stackOnEntry);
|
|
|
|
result = VM.SUSPENDED;
|
|
}
|
|
|
|
// restore the current vm
|
|
_VM_SetCurrent(savedVM);
|
|
|
|
// return value is at the top of the stack still
|
|
return result;
|
|
}
|
|
|
|
function _fprintf(stream, format, varargs) {
|
|
// int fprintf(FILE *restrict stream, const char *restrict format, ...);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
|
|
var result = __formatString(format, varargs);
|
|
var stack = Runtime.stackSave();
|
|
var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
|
|
Runtime.stackRestore(stack);
|
|
return ret;
|
|
}
|
|
|
|
|
|
function _rint(x) {
|
|
if (Math.abs(x % 1) !== 0.5) return Math.round(x);
|
|
return x + x % 2 + ((x < 0) ? 1 : -1);
|
|
}var _lrintf=_rint;
|
|
|
|
|
|
|
|
function __getFloat(text) {
|
|
return /^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?/.exec(text);
|
|
}function __scanString(format, get, unget, varargs) {
|
|
if (!__scanString.whiteSpace) {
|
|
__scanString.whiteSpace = {};
|
|
__scanString.whiteSpace[32] = 1;
|
|
__scanString.whiteSpace[9] = 1;
|
|
__scanString.whiteSpace[10] = 1;
|
|
__scanString.whiteSpace[11] = 1;
|
|
__scanString.whiteSpace[12] = 1;
|
|
__scanString.whiteSpace[13] = 1;
|
|
}
|
|
// Supports %x, %4x, %d.%d, %lld, %s, %f, %lf.
|
|
// TODO: Support all format specifiers.
|
|
format = Pointer_stringify(format);
|
|
var soFar = 0;
|
|
if (format.indexOf('%n') >= 0) {
|
|
// need to track soFar
|
|
var _get = get;
|
|
get = function get() {
|
|
soFar++;
|
|
return _get();
|
|
}
|
|
var _unget = unget;
|
|
unget = function unget() {
|
|
soFar--;
|
|
return _unget();
|
|
}
|
|
}
|
|
var formatIndex = 0;
|
|
var argsi = 0;
|
|
var fields = 0;
|
|
var argIndex = 0;
|
|
var next;
|
|
|
|
mainLoop:
|
|
for (var formatIndex = 0; formatIndex < format.length;) {
|
|
if (format[formatIndex] === '%' && format[formatIndex+1] == 'n') {
|
|
var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
|
|
argIndex += Runtime.getAlignSize('void*', null, true);
|
|
HEAP32[((argPtr)>>2)]=soFar;
|
|
formatIndex += 2;
|
|
continue;
|
|
}
|
|
|
|
if (format[formatIndex] === '%') {
|
|
var nextC = format.indexOf('c', formatIndex+1);
|
|
if (nextC > 0) {
|
|
var maxx = 1;
|
|
if (nextC > formatIndex+1) {
|
|
var sub = format.substring(formatIndex+1, nextC);
|
|
maxx = parseInt(sub);
|
|
if (maxx != sub) maxx = 0;
|
|
}
|
|
if (maxx) {
|
|
var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
|
|
argIndex += Runtime.getAlignSize('void*', null, true);
|
|
fields++;
|
|
for (var i = 0; i < maxx; i++) {
|
|
next = get();
|
|
HEAP8[((argPtr++)|0)]=next;
|
|
if (next === 0) return i > 0 ? fields : fields-1; // we failed to read the full length of this field
|
|
}
|
|
formatIndex += nextC - formatIndex + 1;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
// handle %[...]
|
|
if (format[formatIndex] === '%' && format.indexOf('[', formatIndex+1) > 0) {
|
|
var match = /\%([0-9]*)\[(\^)?(\]?[^\]]*)\]/.exec(format.substring(formatIndex));
|
|
if (match) {
|
|
var maxNumCharacters = parseInt(match[1]) || Infinity;
|
|
var negateScanList = (match[2] === '^');
|
|
var scanList = match[3];
|
|
|
|
// expand "middle" dashs into character sets
|
|
var middleDashMatch;
|
|
while ((middleDashMatch = /([^\-])\-([^\-])/.exec(scanList))) {
|
|
var rangeStartCharCode = middleDashMatch[1].charCodeAt(0);
|
|
var rangeEndCharCode = middleDashMatch[2].charCodeAt(0);
|
|
for (var expanded = ''; rangeStartCharCode <= rangeEndCharCode; expanded += String.fromCharCode(rangeStartCharCode++));
|
|
scanList = scanList.replace(middleDashMatch[1] + '-' + middleDashMatch[2], expanded);
|
|
}
|
|
|
|
var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
|
|
argIndex += Runtime.getAlignSize('void*', null, true);
|
|
fields++;
|
|
|
|
for (var i = 0; i < maxNumCharacters; i++) {
|
|
next = get();
|
|
if (negateScanList) {
|
|
if (scanList.indexOf(String.fromCharCode(next)) < 0) {
|
|
HEAP8[((argPtr++)|0)]=next;
|
|
} else {
|
|
unget();
|
|
break;
|
|
}
|
|
} else {
|
|
if (scanList.indexOf(String.fromCharCode(next)) >= 0) {
|
|
HEAP8[((argPtr++)|0)]=next;
|
|
} else {
|
|
unget();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// write out null-terminating character
|
|
HEAP8[((argPtr++)|0)]=0;
|
|
formatIndex += match[0].length;
|
|
|
|
continue;
|
|
}
|
|
}
|
|
// remove whitespace
|
|
while (1) {
|
|
next = get();
|
|
if (next == 0) return fields;
|
|
if (!(next in __scanString.whiteSpace)) break;
|
|
}
|
|
unget();
|
|
|
|
if (format[formatIndex] === '%') {
|
|
formatIndex++;
|
|
var suppressAssignment = false;
|
|
if (format[formatIndex] == '*') {
|
|
suppressAssignment = true;
|
|
formatIndex++;
|
|
}
|
|
var maxSpecifierStart = formatIndex;
|
|
while (format[formatIndex].charCodeAt(0) >= 48 &&
|
|
format[formatIndex].charCodeAt(0) <= 57) {
|
|
formatIndex++;
|
|
}
|
|
var max_;
|
|
if (formatIndex != maxSpecifierStart) {
|
|
max_ = parseInt(format.slice(maxSpecifierStart, formatIndex), 10);
|
|
}
|
|
var long_ = false;
|
|
var half = false;
|
|
var longLong = false;
|
|
if (format[formatIndex] == 'l') {
|
|
long_ = true;
|
|
formatIndex++;
|
|
if (format[formatIndex] == 'l') {
|
|
longLong = true;
|
|
formatIndex++;
|
|
}
|
|
} else if (format[formatIndex] == 'h') {
|
|
half = true;
|
|
formatIndex++;
|
|
}
|
|
var type = format[formatIndex];
|
|
formatIndex++;
|
|
var curr = 0;
|
|
var buffer = [];
|
|
// 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
|
|
if (type == 'f' || type == 'e' || type == 'g' ||
|
|
type == 'F' || type == 'E' || type == 'G') {
|
|
next = get();
|
|
while (next > 0 && (!(next in __scanString.whiteSpace))) {
|
|
buffer.push(String.fromCharCode(next));
|
|
next = get();
|
|
}
|
|
var m = __getFloat(buffer.join(''));
|
|
var last = m ? m[0].length : 0;
|
|
for (var i = 0; i < buffer.length - last + 1; i++) {
|
|
unget();
|
|
}
|
|
buffer.length = last;
|
|
} else {
|
|
next = get();
|
|
var first = true;
|
|
|
|
// Strip the optional 0x prefix for %x.
|
|
if ((type == 'x' || type == 'X') && (next == 48)) {
|
|
var peek = get();
|
|
if (peek == 120 || peek == 88) {
|
|
next = get();
|
|
} else {
|
|
unget();
|
|
}
|
|
}
|
|
|
|
while ((curr < max_ || isNaN(max_)) && next > 0) {
|
|
if (!(next in __scanString.whiteSpace) && // stop on whitespace
|
|
(type == 's' ||
|
|
((type === 'd' || type == 'u' || type == 'i') && ((next >= 48 && next <= 57) ||
|
|
(first && next == 45))) ||
|
|
((type === 'x' || type === 'X') && (next >= 48 && next <= 57 ||
|
|
next >= 97 && next <= 102 ||
|
|
next >= 65 && next <= 70))) &&
|
|
(formatIndex >= format.length || next !== format[formatIndex].charCodeAt(0))) { // Stop when we read something that is coming up
|
|
buffer.push(String.fromCharCode(next));
|
|
next = get();
|
|
curr++;
|
|
first = false;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
unget();
|
|
}
|
|
if (buffer.length === 0) return 0; // Failure.
|
|
if (suppressAssignment) continue;
|
|
|
|
var text = buffer.join('');
|
|
var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
|
|
argIndex += Runtime.getAlignSize('void*', null, true);
|
|
switch (type) {
|
|
case 'd': case 'u': case 'i':
|
|
if (half) {
|
|
HEAP16[((argPtr)>>1)]=parseInt(text, 10);
|
|
} else if (longLong) {
|
|
(tempI64 = [parseInt(text, 10)>>>0,(tempDouble=parseInt(text, 10),(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((argPtr)>>2)]=tempI64[0],HEAP32[(((argPtr)+(4))>>2)]=tempI64[1]);
|
|
} else {
|
|
HEAP32[((argPtr)>>2)]=parseInt(text, 10);
|
|
}
|
|
break;
|
|
case 'X':
|
|
case 'x':
|
|
HEAP32[((argPtr)>>2)]=parseInt(text, 16);
|
|
break;
|
|
case 'F':
|
|
case 'f':
|
|
case 'E':
|
|
case 'e':
|
|
case 'G':
|
|
case 'g':
|
|
case 'E':
|
|
// fallthrough intended
|
|
if (long_) {
|
|
HEAPF64[((argPtr)>>3)]=parseFloat(text);
|
|
} else {
|
|
HEAPF32[((argPtr)>>2)]=parseFloat(text);
|
|
}
|
|
break;
|
|
case 's':
|
|
var array = intArrayFromString(text);
|
|
for (var j = 0; j < array.length; j++) {
|
|
HEAP8[(((argPtr)+(j))|0)]=array[j];
|
|
}
|
|
break;
|
|
}
|
|
fields++;
|
|
} else if (format[formatIndex].charCodeAt(0) in __scanString.whiteSpace) {
|
|
next = get();
|
|
while (next in __scanString.whiteSpace) {
|
|
if (next <= 0) break mainLoop; // End of input.
|
|
next = get();
|
|
}
|
|
unget(next);
|
|
formatIndex++;
|
|
} else {
|
|
// Not a specifier.
|
|
next = get();
|
|
if (format[formatIndex].charCodeAt(0) !== next) {
|
|
unget(next);
|
|
break mainLoop;
|
|
}
|
|
formatIndex++;
|
|
}
|
|
}
|
|
return fields;
|
|
}function _sscanf(s, format, varargs) {
|
|
// int sscanf(const char *restrict s, const char *restrict format, ... );
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html
|
|
var index = 0;
|
|
function get() { return HEAP8[(((s)+(index++))|0)]; };
|
|
function unget() { index--; };
|
|
return __scanString(format, get, unget, varargs);
|
|
}
|
|
|
|
var _sqrt=Math_sqrt;
|
|
|
|
function _sprintf(s, format, varargs) {
|
|
// int sprintf(char *restrict s, const char *restrict format, ...);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
|
|
return _snprintf(s, undefined, format, varargs);
|
|
}
|
|
|
|
function _clock() {
|
|
if (_clock.start === undefined) _clock.start = Date.now();
|
|
return Math.floor((Date.now() - _clock.start) * (1000000/1000));
|
|
}
|
|
|
|
function _vfprintf(s, f, va_arg) {
|
|
return _fprintf(s, f, HEAP32[((va_arg)>>2)]);
|
|
}
|
|
|
|
function _strncat(pdest, psrc, num) {
|
|
var len = _strlen(pdest);
|
|
var i = 0;
|
|
while(1) {
|
|
HEAP8[((pdest+len+i)|0)]=HEAP8[((psrc+i)|0)];
|
|
if (HEAP8[(((pdest)+(len+i))|0)] == 0) break;
|
|
i ++;
|
|
if (i == num) {
|
|
HEAP8[(((pdest)+(len+i))|0)]=0;
|
|
break;
|
|
}
|
|
}
|
|
return pdest;
|
|
}
|
|
|
|
function _ctime(timer) {
|
|
return _asctime(_localtime(timer));
|
|
}
|
|
|
|
function _Sys_Cwd() {
|
|
var cwd = allocate(intArrayFromString(FS.cwd()), 'i8', ALLOC_STACK);
|
|
return cwd;
|
|
}
|
|
|
|
function _Sys_PIDIsRunning(pid) {
|
|
return 1;
|
|
}
|
|
|
|
function _Sys_PID() {
|
|
return 0;
|
|
}
|
|
|
|
function _Sys_GetCurrentUser() {
|
|
var stack = Runtime.stackSave();
|
|
var ret = allocate(intArrayFromString('player'), 'i8', ALLOC_STACK);
|
|
Runtime.stackRestore(stack);
|
|
return ret;
|
|
}
|
|
|
|
function _fputs(s, stream) {
|
|
// int fputs(const char *restrict s, FILE *restrict stream);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
|
|
var fd = _fileno(stream);
|
|
return _write(fd, s, _strlen(s));
|
|
}
|
|
|
|
function _Sys_ErrorDialog(error) {
|
|
error = Pointer_stringify(error);
|
|
console.error(error);
|
|
process.exit();
|
|
}
|
|
|
|
|
|
var DLFCN={error:null,errorMsg:null,loadedLibs:{},loadedLibNames:{}};function _dlclose(handle) {
|
|
// int dlclose(void *handle);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/dlclose.html
|
|
if (!DLFCN.loadedLibs[handle]) {
|
|
DLFCN.errorMsg = 'Tried to dlclose() unopened handle: ' + handle;
|
|
return 1;
|
|
} else {
|
|
var lib_record = DLFCN.loadedLibs[handle];
|
|
if (--lib_record.refcount == 0) {
|
|
if (lib_record.module.cleanups) {
|
|
lib_record.module.cleanups.forEach(function(cleanup) { cleanup() });
|
|
}
|
|
delete DLFCN.loadedLibNames[lib_record.name];
|
|
delete DLFCN.loadedLibs[handle];
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
function _dlopen(filename, flag) {
|
|
// void *dlopen(const char *file, int mode);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/dlopen.html
|
|
filename = filename === 0 ? '__self__' : (ENV['LD_LIBRARY_PATH'] || '/') + Pointer_stringify(filename);
|
|
|
|
abort('need to build with DLOPEN_SUPPORT=1 to get dlopen support in asm.js');
|
|
|
|
if (DLFCN.loadedLibNames[filename]) {
|
|
// Already loaded; increment ref count and return.
|
|
var handle = DLFCN.loadedLibNames[filename];
|
|
DLFCN.loadedLibs[handle].refcount++;
|
|
return handle;
|
|
}
|
|
|
|
if (filename === '__self__') {
|
|
var handle = -1;
|
|
var lib_module = Module;
|
|
var cached_functions = SYMBOL_TABLE;
|
|
} else {
|
|
var target = FS.findObject(filename);
|
|
if (!target || target.isFolder || target.isDevice) {
|
|
DLFCN.errorMsg = 'Could not find dynamic lib: ' + filename;
|
|
return 0;
|
|
} else {
|
|
FS.forceLoadFile(target);
|
|
var lib_data = intArrayToString(target.contents);
|
|
}
|
|
|
|
try {
|
|
var lib_module = eval(lib_data)(
|
|
DLFCN.functionTable.length,
|
|
Module
|
|
);
|
|
} catch (e) {
|
|
DLFCN.errorMsg = 'Could not evaluate dynamic lib: ' + filename;
|
|
return 0;
|
|
}
|
|
|
|
// Not all browsers support Object.keys().
|
|
var handle = 1;
|
|
for (var key in DLFCN.loadedLibs) {
|
|
if (DLFCN.loadedLibs.hasOwnProperty(key)) handle++;
|
|
}
|
|
|
|
// We don't care about RTLD_NOW and RTLD_LAZY.
|
|
if (flag & 256) { // RTLD_GLOBAL
|
|
for (var ident in lib_module) {
|
|
if (lib_module.hasOwnProperty(ident)) {
|
|
Module[ident] = lib_module[ident];
|
|
}
|
|
}
|
|
}
|
|
|
|
var cached_functions = {};
|
|
}
|
|
DLFCN.loadedLibs[handle] = {
|
|
refcount: 1,
|
|
name: filename,
|
|
module: lib_module,
|
|
cached_functions: cached_functions
|
|
};
|
|
DLFCN.loadedLibNames[filename] = handle;
|
|
|
|
return handle;
|
|
}
|
|
|
|
function _dlerror() {
|
|
// char *dlerror(void);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/dlerror.html
|
|
if (DLFCN.errorMsg === null) {
|
|
return 0;
|
|
} else {
|
|
if (DLFCN.error) _free(DLFCN.error);
|
|
var msgArr = intArrayFromString(DLFCN.errorMsg);
|
|
DLFCN.error = allocate(msgArr, 'i8', ALLOC_NORMAL);
|
|
DLFCN.errorMsg = null;
|
|
return DLFCN.error;
|
|
}
|
|
}
|
|
|
|
function _dlsym(handle, symbol) {
|
|
// void *dlsym(void *restrict handle, const char *restrict name);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html
|
|
symbol = '_' + Pointer_stringify(symbol);
|
|
|
|
if (!DLFCN.loadedLibs[handle]) {
|
|
DLFCN.errorMsg = 'Tried to dlsym() from an unopened handle: ' + handle;
|
|
return 0;
|
|
} else {
|
|
var lib = DLFCN.loadedLibs[handle];
|
|
// self-dlopen means that lib.module is not a superset of
|
|
// cached_functions, so check the latter first
|
|
if (lib.cached_functions.hasOwnProperty(symbol)) {
|
|
return lib.cached_functions[symbol];
|
|
} else {
|
|
if (!lib.module.hasOwnProperty(symbol)) {
|
|
DLFCN.errorMsg = ('Tried to lookup unknown symbol "' + symbol +
|
|
'" in dynamic lib: ' + lib.name);
|
|
return 0;
|
|
} else {
|
|
var result = lib.module[symbol];
|
|
if (typeof result == 'function') {
|
|
result = lib.module.SYMBOL_TABLE[symbol];
|
|
assert(result);
|
|
lib.cached_functions = result;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function _Sys_PlatformInit() {
|
|
_CON_SetIsTTY(process.stdin.isTTY);
|
|
}
|
|
|
|
function _Sys_Dirname(path) {
|
|
path = Pointer_stringify(path);
|
|
path = PATH.dirname(path);
|
|
var dirname = allocate(intArrayFromString(path), 'i8', ALLOC_STACK);
|
|
return dirname;
|
|
}
|
|
|
|
function _emscripten_exit_with_live_runtime() {
|
|
Module['noExitRuntime'] = true;
|
|
throw 'SimulateInfiniteLoop';
|
|
}
|
|
|
|
function _signal(sig, func) {
|
|
// TODO
|
|
return 0;
|
|
}
|
|
|
|
function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop) {
|
|
Module['noExitRuntime'] = true;
|
|
|
|
Browser.mainLoop.runner = function Browser_mainLoop_runner() {
|
|
if (ABORT) return;
|
|
if (Browser.mainLoop.queue.length > 0) {
|
|
var start = Date.now();
|
|
var blocker = Browser.mainLoop.queue.shift();
|
|
blocker.func(blocker.arg);
|
|
if (Browser.mainLoop.remainingBlockers) {
|
|
var remaining = Browser.mainLoop.remainingBlockers;
|
|
var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);
|
|
if (blocker.counted) {
|
|
Browser.mainLoop.remainingBlockers = next;
|
|
} else {
|
|
// not counted, but move the progress along a tiny bit
|
|
next = next + 0.5; // do not steal all the next one's progress
|
|
Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;
|
|
}
|
|
}
|
|
console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);
|
|
Browser.mainLoop.updateStatus();
|
|
setTimeout(Browser.mainLoop.runner, 0);
|
|
return;
|
|
}
|
|
if (Browser.mainLoop.shouldPause) {
|
|
// catch pauses from non-main loop sources
|
|
Browser.mainLoop.paused = true;
|
|
Browser.mainLoop.shouldPause = false;
|
|
return;
|
|
}
|
|
|
|
// Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize
|
|
// VBO double-buffering and reduce GPU stalls.
|
|
GL.newRenderingFrameStarted();
|
|
|
|
if (Browser.mainLoop.method === 'timeout' && Module.ctx) {
|
|
Module.printErr('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');
|
|
Browser.mainLoop.method = ''; // just warn once per call to set main loop
|
|
}
|
|
|
|
if (Module['preMainLoop']) {
|
|
Module['preMainLoop']();
|
|
}
|
|
|
|
try {
|
|
Runtime.dynCall('v', func);
|
|
} catch (e) {
|
|
if (e instanceof ExitStatus) {
|
|
return;
|
|
} else {
|
|
if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
if (Module['postMainLoop']) {
|
|
Module['postMainLoop']();
|
|
}
|
|
|
|
if (Browser.mainLoop.shouldPause) {
|
|
// catch pauses from the main loop itself
|
|
Browser.mainLoop.paused = true;
|
|
Browser.mainLoop.shouldPause = false;
|
|
return;
|
|
}
|
|
Browser.mainLoop.scheduler();
|
|
}
|
|
if (fps && fps > 0) {
|
|
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
|
|
setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop
|
|
};
|
|
Browser.mainLoop.method = 'timeout';
|
|
} else {
|
|
Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() {
|
|
Browser.requestAnimationFrame(Browser.mainLoop.runner);
|
|
};
|
|
Browser.mainLoop.method = 'rAF';
|
|
}
|
|
Browser.mainLoop.scheduler();
|
|
|
|
if (simulateInfiniteLoop) {
|
|
throw 'SimulateInfiniteLoop';
|
|
}
|
|
}
|
|
|
|
function _Sys_PlatformExit() {
|
|
}
|
|
|
|
|
|
function __exit(status) {
|
|
// void _exit(int status);
|
|
// http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
|
|
Module['exit'](status);
|
|
}function _exit(status) {
|
|
__exit(status);
|
|
}
|
|
|
|
function _tcsetattr(fildes, optional_actions, termios_p) {
|
|
// http://pubs.opengroup.org/onlinepubs/7908799/xsh/tcsetattr.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
if (!stream.tty) {
|
|
___setErrNo(ERRNO_CODES.ENOTTY);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function _fcntl(fildes, cmd, varargs, dup2) {
|
|
// int fcntl(int fildes, int cmd, ...);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/fcntl.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
switch (cmd) {
|
|
case 0:
|
|
var arg = HEAP32[((varargs)>>2)];
|
|
if (arg < 0) {
|
|
___setErrNo(ERRNO_CODES.EINVAL);
|
|
return -1;
|
|
}
|
|
var newStream;
|
|
try {
|
|
newStream = FS.open(stream.path, stream.flags, 0, arg);
|
|
} catch (e) {
|
|
FS.handleFSError(e);
|
|
return -1;
|
|
}
|
|
return newStream.fd;
|
|
case 1:
|
|
case 2:
|
|
return 0; // FD_CLOEXEC makes no sense for a single process.
|
|
case 3:
|
|
return stream.flags;
|
|
case 4:
|
|
var arg = HEAP32[((varargs)>>2)];
|
|
stream.flags |= arg;
|
|
return 0;
|
|
case 12:
|
|
case 12:
|
|
var arg = HEAP32[((varargs)>>2)];
|
|
var offset = 0;
|
|
// We're always unlocked.
|
|
HEAP16[(((arg)+(offset))>>1)]=2;
|
|
return 0;
|
|
case 13:
|
|
case 14:
|
|
case 13:
|
|
case 14:
|
|
// Pretend that the locking is successful.
|
|
return 0;
|
|
case 8:
|
|
case 9:
|
|
// These are for sockets. We don't have them fully implemented yet.
|
|
___setErrNo(ERRNO_CODES.EINVAL);
|
|
return -1;
|
|
default:
|
|
___setErrNo(ERRNO_CODES.EINVAL);
|
|
return -1;
|
|
}
|
|
// Should never be reached. Only to silence strict warnings.
|
|
return -1;
|
|
}
|
|
|
|
function _tcgetattr(fildes, termios_p) {
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/tcgetattr.html
|
|
var stream = FS.getStream(fildes);
|
|
if (!stream) {
|
|
___setErrNo(ERRNO_CODES.EBADF);
|
|
return -1;
|
|
}
|
|
if (!stream.tty) {
|
|
___setErrNo(ERRNO_CODES.ENOTTY);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
function _abort() {
|
|
Module['abort']();
|
|
}
|
|
|
|
function _sbrk(bytes) {
|
|
// Implement a Linux-like 'memory area' for our 'process'.
|
|
// Changes the size of the memory area by |bytes|; returns the
|
|
// address of the previous top ('break') of the memory area
|
|
// We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
|
|
var self = _sbrk;
|
|
if (!self.called) {
|
|
DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
|
|
self.called = true;
|
|
assert(Runtime.dynamicAlloc);
|
|
self.alloc = Runtime.dynamicAlloc;
|
|
Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
|
|
}
|
|
var ret = DYNAMICTOP;
|
|
if (bytes != 0) self.alloc(bytes);
|
|
return ret; // Previous break location.
|
|
}
|
|
|
|
function _sysconf(name) {
|
|
// long sysconf(int name);
|
|
// http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
|
|
switch(name) {
|
|
case 30: return PAGE_SIZE;
|
|
case 132:
|
|
case 133:
|
|
case 12:
|
|
case 137:
|
|
case 138:
|
|
case 15:
|
|
case 235:
|
|
case 16:
|
|
case 17:
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 149:
|
|
case 13:
|
|
case 10:
|
|
case 236:
|
|
case 153:
|
|
case 9:
|
|
case 21:
|
|
case 22:
|
|
case 159:
|
|
case 154:
|
|
case 14:
|
|
case 77:
|
|
case 78:
|
|
case 139:
|
|
case 80:
|
|
case 81:
|
|
case 79:
|
|
case 82:
|
|
case 68:
|
|
case 67:
|
|
case 164:
|
|
case 11:
|
|
case 29:
|
|
case 47:
|
|
case 48:
|
|
case 95:
|
|
case 52:
|
|
case 51:
|
|
case 46:
|
|
return 200809;
|
|
case 27:
|
|
case 246:
|
|
case 127:
|
|
case 128:
|
|
case 23:
|
|
case 24:
|
|
case 160:
|
|
case 161:
|
|
case 181:
|
|
case 182:
|
|
case 242:
|
|
case 183:
|
|
case 184:
|
|
case 243:
|
|
case 244:
|
|
case 245:
|
|
case 165:
|
|
case 178:
|
|
case 179:
|
|
case 49:
|
|
case 50:
|
|
case 168:
|
|
case 169:
|
|
case 175:
|
|
case 170:
|
|
case 171:
|
|
case 172:
|
|
case 97:
|
|
case 76:
|
|
case 32:
|
|
case 173:
|
|
case 35:
|
|
return -1;
|
|
case 176:
|
|
case 177:
|
|
case 7:
|
|
case 155:
|
|
case 8:
|
|
case 157:
|
|
case 125:
|
|
case 126:
|
|
case 92:
|
|
case 93:
|
|
case 129:
|
|
case 130:
|
|
case 131:
|
|
case 94:
|
|
case 91:
|
|
return 1;
|
|
case 74:
|
|
case 60:
|
|
case 69:
|
|
case 70:
|
|
case 4:
|
|
return 1024;
|
|
case 31:
|
|
case 42:
|
|
case 72:
|
|
return 32;
|
|
case 87:
|
|
case 26:
|
|
case 33:
|
|
return 2147483647;
|
|
case 34:
|
|
case 1:
|
|
return 47839;
|
|
case 38:
|
|
case 36:
|
|
return 99;
|
|
case 43:
|
|
case 37:
|
|
return 2048;
|
|
case 0: return 2097152;
|
|
case 3: return 65536;
|
|
case 28: return 32768;
|
|
case 44: return 32767;
|
|
case 75: return 16384;
|
|
case 39: return 1000;
|
|
case 89: return 700;
|
|
case 71: return 256;
|
|
case 40: return 255;
|
|
case 2: return 100;
|
|
case 180: return 64;
|
|
case 25: return 20;
|
|
case 5: return 16;
|
|
case 6: return 6;
|
|
case 73: return 4;
|
|
case 84: return 1;
|
|
}
|
|
___setErrNo(ERRNO_CODES.EINVAL);
|
|
return -1;
|
|
}
|
|
|
|
|
|
|
|
function _copysign(a, b) {
|
|
return __reallyNegative(a) === __reallyNegative(b) ? a : -a;
|
|
}var _copysignl=_copysign;
|
|
|
|
|
|
function _fmod(x, y) {
|
|
return x % y;
|
|
}var _fmodl=_fmod;
|
|
|
|
var _fabs=Math_abs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var GL={counter:1,lastError:0,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],programInfos:{},stringCache:{},packAlignment:4,unpackAlignment:4,init:function () {
|
|
GL.createLog2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);
|
|
Browser.moduleContextCreatedCallbacks.push(GL.initExtensions);
|
|
},recordError:function recordError(errorCode) {
|
|
if (!GL.lastError) {
|
|
GL.lastError = errorCode;
|
|
}
|
|
},getNewId:function (table) {
|
|
var ret = GL.counter++;
|
|
for (var i = table.length; i < ret; i++) {
|
|
table[i] = null;
|
|
}
|
|
return ret;
|
|
},MINI_TEMP_BUFFER_SIZE:16,miniTempBuffer:null,miniTempBufferViews:[0],MAX_TEMP_BUFFER_SIZE:2097152,tempVertexBuffers1:[],tempVertexBufferCounters1:[],tempVertexBuffers2:[],tempVertexBufferCounters2:[],numTempVertexBuffersPerSize:64,tempIndexBuffers:[],tempQuadIndexBuffer:null,log2ceilLookup:null,createLog2ceilLookup:function (maxValue) {
|
|
GL.log2ceilLookup = new Uint8Array(maxValue+1);
|
|
var log2 = 0;
|
|
var pow2 = 1;
|
|
GL.log2ceilLookup[0] = 0;
|
|
for(var i = 1; i <= maxValue; ++i) {
|
|
if (i > pow2) {
|
|
pow2 <<= 1;
|
|
++log2;
|
|
}
|
|
GL.log2ceilLookup[i] = log2;
|
|
}
|
|
},generateTempBuffers:function (quads) {
|
|
var largestIndex = GL.log2ceilLookup[GL.MAX_TEMP_BUFFER_SIZE];
|
|
GL.tempVertexBufferCounters1.length = GL.tempVertexBufferCounters2.length = largestIndex+1;
|
|
GL.tempVertexBuffers1.length = GL.tempVertexBuffers2.length = largestIndex+1;
|
|
GL.tempIndexBuffers.length = largestIndex+1;
|
|
for(var i = 0; i <= largestIndex; ++i) {
|
|
GL.tempIndexBuffers[i] = null; // Created on-demand
|
|
GL.tempVertexBufferCounters1[i] = GL.tempVertexBufferCounters2[i] = 0;
|
|
var ringbufferLength = GL.numTempVertexBuffersPerSize;
|
|
GL.tempVertexBuffers1[i] = [];
|
|
GL.tempVertexBuffers2[i] = [];
|
|
var ringbuffer1 = GL.tempVertexBuffers1[i];
|
|
var ringbuffer2 = GL.tempVertexBuffers2[i];
|
|
ringbuffer1.length = ringbuffer2.length = ringbufferLength;
|
|
for(var j = 0; j < ringbufferLength; ++j) {
|
|
ringbuffer1[j] = ringbuffer2[j] = null; // Created on-demand
|
|
}
|
|
}
|
|
|
|
if (quads) {
|
|
// GL_QUAD indexes can be precalculated
|
|
GL.tempQuadIndexBuffer = GLctx.createBuffer();
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, GL.tempQuadIndexBuffer);
|
|
var numIndexes = GL.MAX_TEMP_BUFFER_SIZE >> 1;
|
|
var quadIndexes = new Uint16Array(numIndexes);
|
|
var i = 0, v = 0;
|
|
while (1) {
|
|
quadIndexes[i++] = v;
|
|
if (i >= numIndexes) break;
|
|
quadIndexes[i++] = v+1;
|
|
if (i >= numIndexes) break;
|
|
quadIndexes[i++] = v+2;
|
|
if (i >= numIndexes) break;
|
|
quadIndexes[i++] = v;
|
|
if (i >= numIndexes) break;
|
|
quadIndexes[i++] = v+2;
|
|
if (i >= numIndexes) break;
|
|
quadIndexes[i++] = v+3;
|
|
if (i >= numIndexes) break;
|
|
v += 4;
|
|
}
|
|
GLctx.bufferData(GLctx.ELEMENT_ARRAY_BUFFER, quadIndexes, GLctx.STATIC_DRAW);
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, null);
|
|
}
|
|
},getTempVertexBuffer:function getTempVertexBuffer(sizeBytes) {
|
|
var idx = GL.log2ceilLookup[sizeBytes];
|
|
var ringbuffer = GL.tempVertexBuffers1[idx];
|
|
var nextFreeBufferIndex = GL.tempVertexBufferCounters1[idx];
|
|
GL.tempVertexBufferCounters1[idx] = (GL.tempVertexBufferCounters1[idx]+1) & (GL.numTempVertexBuffersPerSize-1);
|
|
var vbo = ringbuffer[nextFreeBufferIndex];
|
|
if (vbo) {
|
|
return vbo;
|
|
}
|
|
var prevVBO = GLctx.getParameter(GLctx.ARRAY_BUFFER_BINDING);
|
|
ringbuffer[nextFreeBufferIndex] = GLctx.createBuffer();
|
|
GLctx.bindBuffer(GLctx.ARRAY_BUFFER, ringbuffer[nextFreeBufferIndex]);
|
|
GLctx.bufferData(GLctx.ARRAY_BUFFER, 1 << idx, GLctx.DYNAMIC_DRAW);
|
|
GLctx.bindBuffer(GLctx.ARRAY_BUFFER, prevVBO);
|
|
return ringbuffer[nextFreeBufferIndex];
|
|
},getTempIndexBuffer:function getTempIndexBuffer(sizeBytes) {
|
|
var idx = GL.log2ceilLookup[sizeBytes];
|
|
var ibo = GL.tempIndexBuffers[idx];
|
|
if (ibo) {
|
|
return ibo;
|
|
}
|
|
var prevIBO = GLctx.getParameter(GLctx.ELEMENT_ARRAY_BUFFER_BINDING);
|
|
GL.tempIndexBuffers[idx] = GLctx.createBuffer();
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, GL.tempIndexBuffers[idx]);
|
|
GLctx.bufferData(GLctx.ELEMENT_ARRAY_BUFFER, 1 << idx, GLctx.DYNAMIC_DRAW);
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, prevIBO);
|
|
return GL.tempIndexBuffers[idx];
|
|
},newRenderingFrameStarted:function newRenderingFrameStarted() {
|
|
var vb = GL.tempVertexBuffers1;
|
|
GL.tempVertexBuffers1 = GL.tempVertexBuffers2;
|
|
GL.tempVertexBuffers2 = vb;
|
|
vb = GL.tempVertexBufferCounters1;
|
|
GL.tempVertexBufferCounters1 = GL.tempVertexBufferCounters2;
|
|
GL.tempVertexBufferCounters2 = vb;
|
|
var largestIndex = GL.log2ceilLookup[GL.MAX_TEMP_BUFFER_SIZE];
|
|
for(var i = 0; i <= largestIndex; ++i) {
|
|
GL.tempVertexBufferCounters1[i] = 0;
|
|
}
|
|
},findToken:function (source, token) {
|
|
function isIdentChar(ch) {
|
|
if (ch >= 48 && ch <= 57) // 0-9
|
|
return true;
|
|
if (ch >= 65 && ch <= 90) // A-Z
|
|
return true;
|
|
if (ch >= 97 && ch <= 122) // a-z
|
|
return true;
|
|
return false;
|
|
}
|
|
var i = -1;
|
|
do {
|
|
i = source.indexOf(token, i + 1);
|
|
if (i < 0) {
|
|
break;
|
|
}
|
|
if (i > 0 && isIdentChar(source[i - 1])) {
|
|
continue;
|
|
}
|
|
i += token.length;
|
|
if (i < source.length - 1 && isIdentChar(source[i + 1])) {
|
|
continue;
|
|
}
|
|
return true;
|
|
} while (true);
|
|
return false;
|
|
},getSource:function (shader, count, string, length) {
|
|
var source = '';
|
|
for (var i = 0; i < count; ++i) {
|
|
var frag;
|
|
if (length) {
|
|
var len = HEAP32[(((length)+(i*4))>>2)];
|
|
if (len < 0) {
|
|
frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]);
|
|
} else {
|
|
frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)], len);
|
|
}
|
|
} else {
|
|
frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]);
|
|
}
|
|
source += frag;
|
|
}
|
|
// Let's see if we need to enable the standard derivatives extension
|
|
type = GLctx.getShaderParameter(GL.shaders[shader], 0x8B4F /* GL_SHADER_TYPE */);
|
|
if (type == 0x8B30 /* GL_FRAGMENT_SHADER */) {
|
|
if (GL.findToken(source, "dFdx") ||
|
|
GL.findToken(source, "dFdy") ||
|
|
GL.findToken(source, "fwidth")) {
|
|
source = "#extension GL_OES_standard_derivatives : enable\n" + source;
|
|
var extension = GLctx.getExtension("OES_standard_derivatives");
|
|
}
|
|
}
|
|
return source;
|
|
},computeImageSize:function (width, height, sizePerPixel, alignment) {
|
|
function roundedToNextMultipleOf(x, y) {
|
|
return Math.floor((x + y - 1) / y) * y
|
|
}
|
|
var plainRowSize = width * sizePerPixel;
|
|
var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment);
|
|
return (height <= 0) ? 0 :
|
|
((height - 1) * alignedRowSize + plainRowSize);
|
|
},get:function (name_, p, type) {
|
|
// Guard against user passing a null pointer.
|
|
// Note that GLES2 spec does not say anything about how passing a null pointer should be treated.
|
|
// Testing on desktop core GL 3, the application crashes on glGetIntegerv to a null pointer, but
|
|
// better to report an error instead of doing anything random.
|
|
if (!p) {
|
|
GL.recordError(0x0501 /* GL_INVALID_VALUE */);
|
|
return;
|
|
}
|
|
var ret = undefined;
|
|
switch(name_) { // Handle a few trivial GLES values
|
|
case 0x8DFA: // GL_SHADER_COMPILER
|
|
ret = 1;
|
|
break;
|
|
case 0x8DF8: // GL_SHADER_BINARY_FORMATS
|
|
if (type !== 'Integer') {
|
|
GL.recordError(0x0500); // GL_INVALID_ENUM
|
|
}
|
|
return; // Do not write anything to the out pointer, since no binary formats are supported.
|
|
case 0x8DF9: // GL_NUM_SHADER_BINARY_FORMATS
|
|
ret = 0;
|
|
break;
|
|
case 0x86A2: // GL_NUM_COMPRESSED_TEXTURE_FORMATS
|
|
// WebGL doesn't have GL_NUM_COMPRESSED_TEXTURE_FORMATS (it's obsolete since GL_COMPRESSED_TEXTURE_FORMATS returns a JS array that can be queried for length),
|
|
// so implement it ourselves to allow C++ GLES2 code get the length.
|
|
var formats = GLctx.getParameter(0x86A3 /*GL_COMPRESSED_TEXTURE_FORMATS*/);
|
|
ret = formats.length;
|
|
break;
|
|
case 0x8B9A: // GL_IMPLEMENTATION_COLOR_READ_TYPE
|
|
ret = 0x1401; // GL_UNSIGNED_BYTE
|
|
break;
|
|
case 0x8B9B: // GL_IMPLEMENTATION_COLOR_READ_FORMAT
|
|
ret = 0x1908; // GL_RGBA
|
|
break;
|
|
}
|
|
|
|
if (ret === undefined) {
|
|
var result = GLctx.getParameter(name_);
|
|
switch (typeof(result)) {
|
|
case "number":
|
|
ret = result;
|
|
break;
|
|
case "boolean":
|
|
ret = result ? 1 : 0;
|
|
break;
|
|
case "string":
|
|
GL.recordError(0x0500); // GL_INVALID_ENUM
|
|
return;
|
|
case "object":
|
|
if (result === null) {
|
|
// null is a valid result for some (e.g., which buffer is bound - perhaps nothing is bound), but otherwise
|
|
// can mean an invalid name_, which we need to report as an error
|
|
switch(name_) {
|
|
case 0x8894: // ARRAY_BUFFER_BINDING
|
|
case 0x8B8D: // CURRENT_PROGRAM
|
|
case 0x8895: // ELEMENT_ARRAY_BUFFER_BINDING
|
|
case 0x8CA6: // FRAMEBUFFER_BINDING
|
|
case 0x8CA7: // RENDERBUFFER_BINDING
|
|
case 0x8069: // TEXTURE_BINDING_2D
|
|
case 0x8514: { // TEXTURE_BINDING_CUBE_MAP
|
|
ret = 0;
|
|
break;
|
|
}
|
|
default: {
|
|
GL.recordError(0x0500); // GL_INVALID_ENUM
|
|
return;
|
|
}
|
|
}
|
|
} else if (result instanceof Float32Array ||
|
|
result instanceof Uint32Array ||
|
|
result instanceof Int32Array ||
|
|
result instanceof Array) {
|
|
for (var i = 0; i < result.length; ++i) {
|
|
switch (type) {
|
|
case 'Integer': HEAP32[(((p)+(i*4))>>2)]=result[i]; break;
|
|
case 'Float': HEAPF32[(((p)+(i*4))>>2)]=result[i]; break;
|
|
case 'Boolean': HEAP8[(((p)+(i))|0)]=result[i] ? 1 : 0; break;
|
|
default: throw 'internal glGet error, bad type: ' + type;
|
|
}
|
|
}
|
|
return;
|
|
} else if (result instanceof WebGLBuffer ||
|
|
result instanceof WebGLProgram ||
|
|
result instanceof WebGLFramebuffer ||
|
|
result instanceof WebGLRenderbuffer ||
|
|
result instanceof WebGLTexture) {
|
|
ret = result.name | 0;
|
|
} else {
|
|
GL.recordError(0x0500); // GL_INVALID_ENUM
|
|
return;
|
|
}
|
|
break;
|
|
default:
|
|
GL.recordError(0x0500); // GL_INVALID_ENUM
|
|
return;
|
|
}
|
|
}
|
|
|
|
switch (type) {
|
|
case 'Integer': HEAP32[((p)>>2)]=ret; break;
|
|
case 'Float': HEAPF32[((p)>>2)]=ret; break;
|
|
case 'Boolean': HEAP8[(p)]=ret ? 1 : 0; break;
|
|
default: throw 'internal glGet error, bad type: ' + type;
|
|
}
|
|
},getTexPixelData:function (type, format, width, height, pixels, internalFormat) {
|
|
var sizePerPixel;
|
|
switch (type) {
|
|
case 0x1401 /* GL_UNSIGNED_BYTE */:
|
|
switch (format) {
|
|
case 0x1906 /* GL_ALPHA */:
|
|
case 0x1909 /* GL_LUMINANCE */:
|
|
sizePerPixel = 1;
|
|
break;
|
|
case 0x1907 /* GL_RGB */:
|
|
sizePerPixel = 3;
|
|
break;
|
|
case 0x1908 /* GL_RGBA */:
|
|
sizePerPixel = 4;
|
|
break;
|
|
case 0x190A /* GL_LUMINANCE_ALPHA */:
|
|
sizePerPixel = 2;
|
|
break;
|
|
default:
|
|
throw 'Invalid format (' + format + ')';
|
|
}
|
|
break;
|
|
case 0x1403 /* GL_UNSIGNED_SHORT */:
|
|
if (format == 0x1902 /* GL_DEPTH_COMPONENT */) {
|
|
sizePerPixel = 2;
|
|
} else {
|
|
throw 'Invalid format (' + format + ')';
|
|
}
|
|
break;
|
|
case 0x1405 /* GL_UNSIGNED_INT */:
|
|
if (format == 0x1902 /* GL_DEPTH_COMPONENT */) {
|
|
sizePerPixel = 4;
|
|
} else {
|
|
throw 'Invalid format (' + format + ')';
|
|
}
|
|
break;
|
|
case 0x84FA /* UNSIGNED_INT_24_8_WEBGL */:
|
|
sizePerPixel = 4;
|
|
break;
|
|
case 0x8363 /* GL_UNSIGNED_SHORT_5_6_5 */:
|
|
case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4 */:
|
|
case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1 */:
|
|
sizePerPixel = 2;
|
|
break;
|
|
case 0x1406 /* GL_FLOAT */:
|
|
switch (format) {
|
|
case 0x1907 /* GL_RGB */:
|
|
sizePerPixel = 3*4;
|
|
break;
|
|
case 0x1908 /* GL_RGBA */:
|
|
sizePerPixel = 4*4;
|
|
break;
|
|
default:
|
|
throw 'Invalid format (' + format + ')';
|
|
}
|
|
internalFormat = GLctx.RGBA;
|
|
break;
|
|
default:
|
|
throw 'Invalid type (' + type + ')';
|
|
}
|
|
var bytes = GL.computeImageSize(width, height, sizePerPixel, GL.unpackAlignment);
|
|
if (type == 0x1401 /* GL_UNSIGNED_BYTE */) {
|
|
pixels = HEAPU8.subarray((pixels),(pixels+bytes));
|
|
} else if (type == 0x1406 /* GL_FLOAT */) {
|
|
pixels = HEAPF32.subarray((pixels)>>2,(pixels+bytes)>>2);
|
|
} else if (type == 0x1405 /* GL_UNSIGNED_INT */ || type == 0x84FA /* UNSIGNED_INT_24_8_WEBGL */) {
|
|
pixels = HEAPU32.subarray((pixels)>>2,(pixels+bytes)>>2);
|
|
} else {
|
|
pixels = HEAPU16.subarray((pixels)>>1,(pixels+bytes)>>1);
|
|
}
|
|
return {
|
|
pixels: pixels,
|
|
internalFormat: internalFormat
|
|
}
|
|
},initExtensions:function () {
|
|
if (GL.initExtensions.done) return;
|
|
GL.initExtensions.done = true;
|
|
|
|
if (!Module.useWebGL) return; // an app might link both gl and 2d backends
|
|
|
|
GL.miniTempBuffer = new Float32Array(GL.MINI_TEMP_BUFFER_SIZE);
|
|
for (var i = 0; i < GL.MINI_TEMP_BUFFER_SIZE; i++) {
|
|
GL.miniTempBufferViews[i] = GL.miniTempBuffer.subarray(0, i+1);
|
|
}
|
|
|
|
GL.maxVertexAttribs = GLctx.getParameter(GLctx.MAX_VERTEX_ATTRIBS);
|
|
|
|
// Detect the presence of a few extensions manually, this GL interop layer itself will need to know if they exist.
|
|
GL.compressionExt = GLctx.getExtension('WEBGL_compressed_texture_s3tc') ||
|
|
GLctx.getExtension('MOZ_WEBGL_compressed_texture_s3tc') ||
|
|
GLctx.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');
|
|
|
|
GL.anisotropicExt = GLctx.getExtension('EXT_texture_filter_anisotropic') ||
|
|
GLctx.getExtension('MOZ_EXT_texture_filter_anisotropic') ||
|
|
GLctx.getExtension('WEBKIT_EXT_texture_filter_anisotropic');
|
|
|
|
GL.floatExt = GLctx.getExtension('OES_texture_float');
|
|
|
|
// Extension available from Firefox 26 and Google Chrome 30
|
|
GL.instancedArraysExt = GLctx.getExtension('ANGLE_instanced_arrays');
|
|
|
|
// These are the 'safe' feature-enabling extensions that don't add any performance impact related to e.g. debugging, and
|
|
// should be enabled by default so that client GLES2/GL code will not need to go through extra hoops to get its stuff working.
|
|
// As new extensions are ratified at http://www.khronos.org/registry/webgl/extensions/ , feel free to add your new extensions
|
|
// here, as long as they don't produce a performance impact for users that might not be using those extensions.
|
|
// E.g. debugging-related extensions should probably be off by default.
|
|
var automaticallyEnabledExtensions = [ "OES_texture_float", "OES_texture_half_float", "OES_standard_derivatives",
|
|
"OES_vertex_array_object", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture",
|
|
"OES_element_index_uint", "EXT_texture_filter_anisotropic", "ANGLE_instanced_arrays",
|
|
"OES_texture_float_linear", "OES_texture_half_float_linear", "WEBGL_compressed_texture_atc",
|
|
"WEBGL_compressed_texture_pvrtc", "EXT_color_buffer_half_float", "WEBGL_color_buffer_float",
|
|
"EXT_frag_depth", "EXT_sRGB", "WEBGL_draw_buffers", "WEBGL_shared_resources" ];
|
|
|
|
function shouldEnableAutomatically(extension) {
|
|
for(var i in automaticallyEnabledExtensions) {
|
|
var include = automaticallyEnabledExtensions[i];
|
|
if (ext.indexOf(include) != -1) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
var extensions = GLctx.getSupportedExtensions();
|
|
for(var e in extensions) {
|
|
var ext = extensions[e].replace('MOZ_', '').replace('WEBKIT_', '');
|
|
if (automaticallyEnabledExtensions.indexOf(ext) != -1) {
|
|
GLctx.getExtension(ext); // Calling .getExtension enables that extension permanently, no need to store the return value to be enabled.
|
|
}
|
|
}
|
|
},populateUniformTable:function (program) {
|
|
var p = GL.programs[program];
|
|
GL.programInfos[program] = {
|
|
uniforms: {},
|
|
maxUniformLength: 0, // This is eagerly computed below, since we already enumerate all uniforms anyway.
|
|
maxAttributeLength: -1 // This is lazily computed and cached, computed when/if first asked, "-1" meaning not computed yet.
|
|
};
|
|
|
|
var ptable = GL.programInfos[program];
|
|
var utable = ptable.uniforms;
|
|
// A program's uniform table maps the string name of an uniform to an integer location of that uniform.
|
|
// The global GL.uniforms map maps integer locations to WebGLUniformLocations.
|
|
var numUniforms = GLctx.getProgramParameter(p, GLctx.ACTIVE_UNIFORMS);
|
|
for (var i = 0; i < numUniforms; ++i) {
|
|
var u = GLctx.getActiveUniform(p, i);
|
|
|
|
var name = u.name;
|
|
ptable.maxUniformLength = Math.max(ptable.maxUniformLength, name.length+1);
|
|
|
|
// Strip off any trailing array specifier we might have got, e.g. "[0]".
|
|
if (name.indexOf(']', name.length-1) !== -1) {
|
|
var ls = name.lastIndexOf('[');
|
|
name = name.slice(0, ls);
|
|
}
|
|
|
|
// Optimize memory usage slightly: If we have an array of uniforms, e.g. 'vec3 colors[3];', then
|
|
// only store the string 'colors' in utable, and 'colors[0]', 'colors[1]' and 'colors[2]' will be parsed as 'colors'+i.
|
|
// Note that for the GL.uniforms table, we still need to fetch the all WebGLUniformLocations for all the indices.
|
|
var loc = GLctx.getUniformLocation(p, name);
|
|
var id = GL.getNewId(GL.uniforms);
|
|
utable[name] = [u.size, id];
|
|
GL.uniforms[id] = loc;
|
|
|
|
for (var j = 1; j < u.size; ++j) {
|
|
var n = name + '['+j+']';
|
|
loc = GLctx.getUniformLocation(p, n);
|
|
id = GL.getNewId(GL.uniforms);
|
|
|
|
GL.uniforms[id] = loc;
|
|
}
|
|
}
|
|
}};var GLImmediate={MapTreeLib:null,spawnMapTreeLib:function () {
|
|
/* A naive implementation of a map backed by an array, and accessed by
|
|
* naive iteration along the array. (hashmap with only one bucket)
|
|
*/
|
|
function CNaiveListMap() {
|
|
var list = [];
|
|
|
|
this.insert = function CNaiveListMap_insert(key, val) {
|
|
if (this.contains(key|0)) return false;
|
|
list.push([key, val]);
|
|
return true;
|
|
};
|
|
|
|
var __contains_i;
|
|
this.contains = function CNaiveListMap_contains(key) {
|
|
for (__contains_i = 0; __contains_i < list.length; ++__contains_i) {
|
|
if (list[__contains_i][0] === key) return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
var __get_i;
|
|
this.get = function CNaiveListMap_get(key) {
|
|
for (__get_i = 0; __get_i < list.length; ++__get_i) {
|
|
if (list[__get_i][0] === key) return list[__get_i][1];
|
|
}
|
|
return undefined;
|
|
};
|
|
};
|
|
|
|
/* A tree of map nodes.
|
|
Uses `KeyView`s to allow descending the tree without garbage.
|
|
Example: {
|
|
// Create our map object.
|
|
var map = new ObjTreeMap();
|
|
|
|
// Grab the static keyView for the map.
|
|
var keyView = map.GetStaticKeyView();
|
|
|
|
// Let's make a map for:
|
|
// root: <undefined>
|
|
// 1: <undefined>
|
|
// 2: <undefined>
|
|
// 5: "Three, sir!"
|
|
// 3: "Three!"
|
|
|
|
// Note how we can chain together `Reset` and `Next` to
|
|
// easily descend based on multiple key fragments.
|
|
keyView.Reset().Next(1).Next(2).Next(5).Set("Three, sir!");
|
|
keyView.Reset().Next(1).Next(2).Next(3).Set("Three!");
|
|
}
|
|
*/
|
|
function CMapTree() {
|
|
function CNLNode() {
|
|
var map = new CNaiveListMap();
|
|
|
|
this.child = function CNLNode_child(keyFrag) {
|
|
if (!map.contains(keyFrag|0)) {
|
|
map.insert(keyFrag|0, new CNLNode());
|
|
}
|
|
return map.get(keyFrag|0);
|
|
};
|
|
|
|
this.value = undefined;
|
|
this.get = function CNLNode_get() {
|
|
return this.value;
|
|
};
|
|
|
|
this.set = function CNLNode_set(val) {
|
|
this.value = val;
|
|
};
|
|
}
|
|
|
|
function CKeyView(root) {
|
|
var cur;
|
|
|
|
this.reset = function CKeyView_reset() {
|
|
cur = root;
|
|
return this;
|
|
};
|
|
this.reset();
|
|
|
|
this.next = function CKeyView_next(keyFrag) {
|
|
cur = cur.child(keyFrag);
|
|
return this;
|
|
};
|
|
|
|
this.get = function CKeyView_get() {
|
|
return cur.get();
|
|
};
|
|
|
|
this.set = function CKeyView_set(val) {
|
|
cur.set(val);
|
|
};
|
|
};
|
|
|
|
var root;
|
|
var staticKeyView;
|
|
|
|
this.createKeyView = function CNLNode_createKeyView() {
|
|
return new CKeyView(root);
|
|
}
|
|
|
|
this.clear = function CNLNode_clear() {
|
|
root = new CNLNode();
|
|
staticKeyView = this.createKeyView();
|
|
};
|
|
this.clear();
|
|
|
|
this.getStaticKeyView = function CNLNode_getStaticKeyView() {
|
|
staticKeyView.reset();
|
|
return staticKeyView;
|
|
};
|
|
};
|
|
|
|
// Exports:
|
|
return {
|
|
create: function() {
|
|
return new CMapTree();
|
|
},
|
|
};
|
|
},TexEnvJIT:null,spawnTexEnvJIT:function () {
|
|
// GL defs:
|
|
var GL_TEXTURE0 = 0x84C0;
|
|
var GL_TEXTURE_1D = 0x0DE0;
|
|
var GL_TEXTURE_2D = 0x0DE1;
|
|
var GL_TEXTURE_3D = 0x806f;
|
|
var GL_TEXTURE_CUBE_MAP = 0x8513;
|
|
var GL_TEXTURE_ENV = 0x2300;
|
|
var GL_TEXTURE_ENV_MODE = 0x2200;
|
|
var GL_TEXTURE_ENV_COLOR = 0x2201;
|
|
var GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
|
|
var GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
|
|
var GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
|
|
var GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
|
|
var GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
|
|
var GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
|
|
|
|
var GL_SRC0_RGB = 0x8580;
|
|
var GL_SRC1_RGB = 0x8581;
|
|
var GL_SRC2_RGB = 0x8582;
|
|
|
|
var GL_SRC0_ALPHA = 0x8588;
|
|
var GL_SRC1_ALPHA = 0x8589;
|
|
var GL_SRC2_ALPHA = 0x858A;
|
|
|
|
var GL_OPERAND0_RGB = 0x8590;
|
|
var GL_OPERAND1_RGB = 0x8591;
|
|
var GL_OPERAND2_RGB = 0x8592;
|
|
|
|
var GL_OPERAND0_ALPHA = 0x8598;
|
|
var GL_OPERAND1_ALPHA = 0x8599;
|
|
var GL_OPERAND2_ALPHA = 0x859A;
|
|
|
|
var GL_COMBINE_RGB = 0x8571;
|
|
var GL_COMBINE_ALPHA = 0x8572;
|
|
|
|
var GL_RGB_SCALE = 0x8573;
|
|
var GL_ALPHA_SCALE = 0x0D1C;
|
|
|
|
// env.mode
|
|
var GL_ADD = 0x0104;
|
|
var GL_BLEND = 0x0BE2;
|
|
var GL_REPLACE = 0x1E01;
|
|
var GL_MODULATE = 0x2100;
|
|
var GL_DECAL = 0x2101;
|
|
var GL_COMBINE = 0x8570;
|
|
|
|
// env.color/alphaCombiner
|
|
//var GL_ADD = 0x0104;
|
|
//var GL_REPLACE = 0x1E01;
|
|
//var GL_MODULATE = 0x2100;
|
|
var GL_SUBTRACT = 0x84E7;
|
|
var GL_INTERPOLATE = 0x8575;
|
|
|
|
// env.color/alphaSrc
|
|
var GL_TEXTURE = 0x1702;
|
|
var GL_CONSTANT = 0x8576;
|
|
var GL_PRIMARY_COLOR = 0x8577;
|
|
var GL_PREVIOUS = 0x8578;
|
|
|
|
// env.color/alphaOp
|
|
var GL_SRC_COLOR = 0x0300;
|
|
var GL_ONE_MINUS_SRC_COLOR = 0x0301;
|
|
var GL_SRC_ALPHA = 0x0302;
|
|
var GL_ONE_MINUS_SRC_ALPHA = 0x0303;
|
|
|
|
var GL_RGB = 0x1907;
|
|
var GL_RGBA = 0x1908;
|
|
|
|
// Our defs:
|
|
var TEXENVJIT_NAMESPACE_PREFIX = "tej_";
|
|
// Not actually constant, as they can be changed between JIT passes:
|
|
var TEX_UNIT_UNIFORM_PREFIX = "uTexUnit";
|
|
var TEX_COORD_VARYING_PREFIX = "vTexCoord";
|
|
var PRIM_COLOR_VARYING = "vPrimColor";
|
|
var TEX_MATRIX_UNIFORM_PREFIX = "uTexMatrix";
|
|
|
|
// Static vars:
|
|
var s_texUnits = null; //[];
|
|
var s_activeTexture = 0;
|
|
|
|
var s_requiredTexUnitsForPass = [];
|
|
|
|
// Static funcs:
|
|
function abort(info) {
|
|
assert(false, "[TexEnvJIT] ABORT: " + info);
|
|
}
|
|
|
|
function abort_noSupport(info) {
|
|
abort("No support: " + info);
|
|
}
|
|
|
|
function abort_sanity(info) {
|
|
abort("Sanity failure: " + info);
|
|
}
|
|
|
|
function genTexUnitSampleExpr(texUnitID) {
|
|
var texUnit = s_texUnits[texUnitID];
|
|
var texType = texUnit.getTexType();
|
|
|
|
var func = null;
|
|
switch (texType) {
|
|
case GL_TEXTURE_1D:
|
|
func = "texture2D";
|
|
break;
|
|
case GL_TEXTURE_2D:
|
|
func = "texture2D";
|
|
break;
|
|
case GL_TEXTURE_3D:
|
|
return abort_noSupport("No support for 3D textures.");
|
|
case GL_TEXTURE_CUBE_MAP:
|
|
func = "textureCube";
|
|
break;
|
|
default:
|
|
return abort_sanity("Unknown texType: 0x" + texType.toString(16));
|
|
}
|
|
|
|
var texCoordExpr = TEX_COORD_VARYING_PREFIX + texUnitID;
|
|
if (TEX_MATRIX_UNIFORM_PREFIX != null) {
|
|
texCoordExpr = "(" + TEX_MATRIX_UNIFORM_PREFIX + texUnitID + " * " + texCoordExpr + ")";
|
|
}
|
|
return func + "(" + TEX_UNIT_UNIFORM_PREFIX + texUnitID + ", " + texCoordExpr + ".xy)";
|
|
}
|
|
|
|
function getTypeFromCombineOp(op) {
|
|
switch (op) {
|
|
case GL_SRC_COLOR:
|
|
case GL_ONE_MINUS_SRC_COLOR:
|
|
return "vec3";
|
|
case GL_SRC_ALPHA:
|
|
case GL_ONE_MINUS_SRC_ALPHA:
|
|
return "float";
|
|
}
|
|
|
|
return abort_noSupport("Unsupported combiner op: 0x" + op.toString(16));
|
|
}
|
|
|
|
function getCurTexUnit() {
|
|
return s_texUnits[s_activeTexture];
|
|
}
|
|
|
|
function genCombinerSourceExpr(texUnitID, constantExpr, previousVar,
|
|
src, op)
|
|
{
|
|
var srcExpr = null;
|
|
switch (src) {
|
|
case GL_TEXTURE:
|
|
srcExpr = genTexUnitSampleExpr(texUnitID);
|
|
break;
|
|
case GL_CONSTANT:
|
|
srcExpr = constantExpr;
|
|
break;
|
|
case GL_PRIMARY_COLOR:
|
|
srcExpr = PRIM_COLOR_VARYING;
|
|
break;
|
|
case GL_PREVIOUS:
|
|
srcExpr = previousVar;
|
|
break;
|
|
default:
|
|
return abort_noSupport("Unsupported combiner src: 0x" + src.toString(16));
|
|
}
|
|
|
|
var expr = null;
|
|
switch (op) {
|
|
case GL_SRC_COLOR:
|
|
expr = srcExpr + ".rgb";
|
|
break;
|
|
case GL_ONE_MINUS_SRC_COLOR:
|
|
expr = "(vec3(1.0) - " + srcExpr + ".rgb)";
|
|
break;
|
|
case GL_SRC_ALPHA:
|
|
expr = srcExpr + ".a";
|
|
break;
|
|
case GL_ONE_MINUS_SRC_ALPHA:
|
|
expr = "(1.0 - " + srcExpr + ".a)";
|
|
break;
|
|
default:
|
|
return abort_noSupport("Unsupported combiner op: 0x" + op.toString(16));
|
|
}
|
|
|
|
return expr;
|
|
}
|
|
|
|
function valToFloatLiteral(val) {
|
|
if (val == Math.round(val)) return val + '.0';
|
|
return val;
|
|
}
|
|
|
|
|
|
// Classes:
|
|
function CTexEnv() {
|
|
this.mode = GL_MODULATE;
|
|
this.colorCombiner = GL_MODULATE;
|
|
this.alphaCombiner = GL_MODULATE;
|
|
this.colorScale = 1;
|
|
this.alphaScale = 1;
|
|
this.envColor = [0, 0, 0, 0];
|
|
|
|
this.colorSrc = [
|
|
GL_TEXTURE,
|
|
GL_PREVIOUS,
|
|
GL_CONSTANT
|
|
];
|
|
this.alphaSrc = [
|
|
GL_TEXTURE,
|
|
GL_PREVIOUS,
|
|
GL_CONSTANT
|
|
];
|
|
this.colorOp = [
|
|
GL_SRC_COLOR,
|
|
GL_SRC_COLOR,
|
|
GL_SRC_ALPHA
|
|
];
|
|
this.alphaOp = [
|
|
GL_SRC_ALPHA,
|
|
GL_SRC_ALPHA,
|
|
GL_SRC_ALPHA
|
|
];
|
|
|
|
// Map GLenums to small values to efficiently pack the enums to bits for tighter access.
|
|
this.traverseKey = {
|
|
// mode
|
|
0x1E01 /* GL_REPLACE */: 0,
|
|
0x2100 /* GL_MODULATE */: 1,
|
|
0x0104 /* GL_ADD */: 2,
|
|
0x0BE2 /* GL_BLEND */: 3,
|
|
0x2101 /* GL_DECAL */: 4,
|
|
0x8570 /* GL_COMBINE */: 5,
|
|
|
|
// additional color and alpha combiners
|
|
0x84E7 /* GL_SUBTRACT */: 3,
|
|
0x8575 /* GL_INTERPOLATE */: 4,
|
|
|
|
// color and alpha src
|
|
0x1702 /* GL_TEXTURE */: 0,
|
|
0x8576 /* GL_CONSTANT */: 1,
|
|
0x8577 /* GL_PRIMARY_COLOR */: 2,
|
|
0x8578 /* GL_PREVIOUS */: 3,
|
|
|
|
// color and alpha op
|
|
0x0300 /* GL_SRC_COLOR */: 0,
|
|
0x0301 /* GL_ONE_MINUS_SRC_COLOR */: 1,
|
|
0x0302 /* GL_SRC_ALPHA */: 2,
|
|
0x0300 /* GL_ONE_MINUS_SRC_ALPHA */: 3
|
|
};
|
|
|
|
// The tuple (key0,key1,key2) uniquely identifies the state of the variables in CTexEnv.
|
|
// -1 on key0 denotes 'the whole cached key is dirty'
|
|
this.key0 = -1;
|
|
this.key1 = 0;
|
|
this.key2 = 0;
|
|
|
|
this.computeKey0 = function() {
|
|
var k = this.traverseKey;
|
|
var key = k[this.mode] * 1638400; // 6 distinct values.
|
|
key += k[this.colorCombiner] * 327680; // 5 distinct values.
|
|
key += k[this.alphaCombiner] * 65536; // 5 distinct values.
|
|
// The above three fields have 6*5*5=150 distinct values -> 8 bits.
|
|
key += (this.colorScale-1) * 16384; // 10 bits used.
|
|
key += (this.alphaScale-1) * 4096; // 12 bits used.
|
|
key += k[this.colorSrc[0]] * 1024; // 14
|
|
key += k[this.colorSrc[1]] * 256; // 16
|
|
key += k[this.colorSrc[2]] * 64; // 18
|
|
key += k[this.alphaSrc[0]] * 16; // 20
|
|
key += k[this.alphaSrc[1]] * 4; // 22
|
|
key += k[this.alphaSrc[2]]; // 24 bits used total.
|
|
return key;
|
|
}
|
|
this.computeKey1 = function() {
|
|
var k = this.traverseKey;
|
|
key = k[this.colorOp[0]] * 4096;
|
|
key += k[this.colorOp[1]] * 1024;
|
|
key += k[this.colorOp[2]] * 256;
|
|
key += k[this.alphaOp[0]] * 16;
|
|
key += k[this.alphaOp[1]] * 4;
|
|
key += k[this.alphaOp[2]];
|
|
return key;
|
|
}
|
|
// TODO: remove this. The color should not be part of the key!
|
|
this.computeKey2 = function() {
|
|
return this.envColor[0] * 16777216 + this.envColor[1] * 65536 + this.envColor[2] * 256 + 1 + this.envColor[3];
|
|
}
|
|
this.recomputeKey = function() {
|
|
this.key0 = this.computeKey0();
|
|
this.key1 = this.computeKey1();
|
|
this.key2 = this.computeKey2();
|
|
}
|
|
this.invalidateKey = function() {
|
|
this.key0 = -1; // The key of this texture unit must be recomputed when rendering the next time.
|
|
GLImmediate.currentRenderer = null; // The currently used renderer must be re-evaluated at next render.
|
|
}
|
|
}
|
|
|
|
function CTexUnit() {
|
|
this.env = new CTexEnv();
|
|
this.enabled_tex1D = false;
|
|
this.enabled_tex2D = false;
|
|
this.enabled_tex3D = false;
|
|
this.enabled_texCube = false;
|
|
this.texTypesEnabled = 0; // A bitfield combination of the four flags above, used for fast access to operations.
|
|
|
|
this.traverseState = function CTexUnit_traverseState(keyView) {
|
|
if (this.texTypesEnabled) {
|
|
if (this.env.key0 == -1) {
|
|
this.env.recomputeKey();
|
|
}
|
|
keyView.next(this.texTypesEnabled | (this.env.key0 << 4));
|
|
keyView.next(this.env.key1);
|
|
keyView.next(this.env.key2);
|
|
} else {
|
|
// For correctness, must traverse a zero value, theoretically a subsequent integer key could collide with this value otherwise.
|
|
keyView.next(0);
|
|
}
|
|
};
|
|
};
|
|
|
|
// Class impls:
|
|
CTexUnit.prototype.enabled = function CTexUnit_enabled() {
|
|
return this.texTypesEnabled;
|
|
}
|
|
|
|
CTexUnit.prototype.genPassLines = function CTexUnit_genPassLines(passOutputVar, passInputVar, texUnitID) {
|
|
if (!this.enabled()) {
|
|
return ["vec4 " + passOutputVar + " = " + passInputVar + ";"];
|
|
}
|
|
var lines = this.env.genPassLines(passOutputVar, passInputVar, texUnitID).join('\n');
|
|
|
|
var texLoadLines = '';
|
|
var texLoadRegex = /(texture.*?\(.*?\))/g;
|
|
var loadCounter = 0;
|
|
var load;
|
|
|
|
// As an optimization, merge duplicate identical texture loads to one var.
|
|
while(load = texLoadRegex.exec(lines)) {
|
|
var texLoadExpr = load[1];
|
|
var secondOccurrence = lines.slice(load.index+1).indexOf(texLoadExpr);
|
|
if (secondOccurrence != -1) { // And also has a second occurrence of same load expression..
|
|
// Create new var to store the common load.
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + texUnitID + "_";
|
|
var texLoadVar = prefix + 'texload' + loadCounter++;
|
|
var texLoadLine = 'vec4 ' + texLoadVar + ' = ' + texLoadExpr + ';\n';
|
|
texLoadLines += texLoadLine + '\n'; // Store the generated texture load statements in a temp string to not confuse regex search in progress.
|
|
lines = lines.split(texLoadExpr).join(texLoadVar);
|
|
// Reset regex search, since we modified the string.
|
|
texLoadRegex = /(texture.*\(.*\))/g;
|
|
}
|
|
}
|
|
return [texLoadLines + lines];
|
|
}
|
|
|
|
CTexUnit.prototype.getTexType = function CTexUnit_getTexType() {
|
|
if (this.enabled_texCube) {
|
|
return GL_TEXTURE_CUBE_MAP;
|
|
} else if (this.enabled_tex3D) {
|
|
return GL_TEXTURE_3D;
|
|
} else if (this.enabled_tex2D) {
|
|
return GL_TEXTURE_2D;
|
|
} else if (this.enabled_tex1D) {
|
|
return GL_TEXTURE_1D;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
CTexEnv.prototype.genPassLines = function CTexEnv_genPassLines(passOutputVar, passInputVar, texUnitID) {
|
|
switch (this.mode) {
|
|
case GL_REPLACE: {
|
|
/* RGB:
|
|
* Cv = Cs
|
|
* Av = Ap // Note how this is different, and that we'll
|
|
* need to track the bound texture internalFormat
|
|
* to get this right.
|
|
*
|
|
* RGBA:
|
|
* Cv = Cs
|
|
* Av = As
|
|
*/
|
|
return [
|
|
"vec4 " + passOutputVar + " = " + genTexUnitSampleExpr(texUnitID) + ";",
|
|
];
|
|
}
|
|
case GL_ADD: {
|
|
/* RGBA:
|
|
* Cv = Cp + Cs
|
|
* Av = ApAs
|
|
*/
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + texUnitID + "_";
|
|
var texVar = prefix + "tex";
|
|
var colorVar = prefix + "color";
|
|
var alphaVar = prefix + "alpha";
|
|
|
|
return [
|
|
"vec4 " + texVar + " = " + genTexUnitSampleExpr(texUnitID) + ";",
|
|
"vec3 " + colorVar + " = " + passInputVar + ".rgb + " + texVar + ".rgb;",
|
|
"float " + alphaVar + " = " + passInputVar + ".a * " + texVar + ".a;",
|
|
"vec4 " + passOutputVar + " = vec4(" + colorVar + ", " + alphaVar + ");",
|
|
];
|
|
}
|
|
case GL_MODULATE: {
|
|
/* RGBA:
|
|
* Cv = CpCs
|
|
* Av = ApAs
|
|
*/
|
|
var line = [
|
|
"vec4 " + passOutputVar,
|
|
" = ",
|
|
passInputVar,
|
|
" * ",
|
|
genTexUnitSampleExpr(texUnitID),
|
|
";",
|
|
];
|
|
return [line.join("")];
|
|
}
|
|
case GL_DECAL: {
|
|
/* RGBA:
|
|
* Cv = Cp(1 - As) + CsAs
|
|
* Av = Ap
|
|
*/
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + texUnitID + "_";
|
|
var texVar = prefix + "tex";
|
|
var colorVar = prefix + "color";
|
|
var alphaVar = prefix + "alpha";
|
|
|
|
return [
|
|
"vec4 " + texVar + " = " + genTexUnitSampleExpr(texUnitID) + ";",
|
|
[
|
|
"vec3 " + colorVar + " = ",
|
|
passInputVar + ".rgb * (1.0 - " + texVar + ".a)",
|
|
" + ",
|
|
texVar + ".rgb * " + texVar + ".a",
|
|
";"
|
|
].join(""),
|
|
"float " + alphaVar + " = " + passInputVar + ".a;",
|
|
"vec4 " + passOutputVar + " = vec4(" + colorVar + ", " + alphaVar + ");",
|
|
];
|
|
}
|
|
case GL_BLEND: {
|
|
/* RGBA:
|
|
* Cv = Cp(1 - Cs) + CcCs
|
|
* Av = As
|
|
*/
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + texUnitID + "_";
|
|
var texVar = prefix + "tex";
|
|
var colorVar = prefix + "color";
|
|
var alphaVar = prefix + "alpha";
|
|
|
|
return [
|
|
"vec4 " + texVar + " = " + genTexUnitSampleExpr(texUnitID) + ";",
|
|
[
|
|
"vec3 " + colorVar + " = ",
|
|
passInputVar + ".rgb * (1.0 - " + texVar + ".rgb)",
|
|
" + ",
|
|
PRIM_COLOR_VARYING + ".rgb * " + texVar + ".rgb",
|
|
";"
|
|
].join(""),
|
|
"float " + alphaVar + " = " + texVar + ".a;",
|
|
"vec4 " + passOutputVar + " = vec4(" + colorVar + ", " + alphaVar + ");",
|
|
];
|
|
}
|
|
case GL_COMBINE: {
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + texUnitID + "_";
|
|
var colorVar = prefix + "color";
|
|
var alphaVar = prefix + "alpha";
|
|
var colorLines = this.genCombinerLines(true, colorVar,
|
|
passInputVar, texUnitID,
|
|
this.colorCombiner, this.colorSrc, this.colorOp);
|
|
var alphaLines = this.genCombinerLines(false, alphaVar,
|
|
passInputVar, texUnitID,
|
|
this.alphaCombiner, this.alphaSrc, this.alphaOp);
|
|
|
|
// Generate scale, but avoid generating an identity op that multiplies by one.
|
|
var scaledColor = (this.colorScale == 1) ? colorVar : (colorVar + " * " + valToFloatLiteral(this.colorScale));
|
|
var scaledAlpha = (this.alphaScale == 1) ? alphaVar : (alphaVar + " * " + valToFloatLiteral(this.alphaScale));
|
|
|
|
var line = [
|
|
"vec4 " + passOutputVar,
|
|
" = ",
|
|
"vec4(",
|
|
scaledColor,
|
|
", ",
|
|
scaledAlpha,
|
|
")",
|
|
";",
|
|
].join("");
|
|
return [].concat(colorLines, alphaLines, [line]);
|
|
}
|
|
}
|
|
|
|
return abort_noSupport("Unsupported TexEnv mode: 0x" + this.mode.toString(16));
|
|
}
|
|
|
|
CTexEnv.prototype.genCombinerLines = function CTexEnv_getCombinerLines(isColor, outputVar,
|
|
passInputVar, texUnitID,
|
|
combiner, srcArr, opArr)
|
|
{
|
|
var argsNeeded = null;
|
|
switch (combiner) {
|
|
case GL_REPLACE:
|
|
argsNeeded = 1;
|
|
break;
|
|
|
|
case GL_MODULATE:
|
|
case GL_ADD:
|
|
case GL_SUBTRACT:
|
|
argsNeeded = 2;
|
|
break;
|
|
|
|
case GL_INTERPOLATE:
|
|
argsNeeded = 3;
|
|
break;
|
|
|
|
default:
|
|
return abort_noSupport("Unsupported combiner: 0x" + combiner.toString(16));
|
|
}
|
|
|
|
var constantExpr = [
|
|
"vec4(",
|
|
valToFloatLiteral(this.envColor[0]),
|
|
", ",
|
|
valToFloatLiteral(this.envColor[1]),
|
|
", ",
|
|
valToFloatLiteral(this.envColor[2]),
|
|
", ",
|
|
valToFloatLiteral(this.envColor[3]),
|
|
")",
|
|
].join("");
|
|
var src0Expr = (argsNeeded >= 1) ? genCombinerSourceExpr(texUnitID, constantExpr, passInputVar, srcArr[0], opArr[0])
|
|
: null;
|
|
var src1Expr = (argsNeeded >= 2) ? genCombinerSourceExpr(texUnitID, constantExpr, passInputVar, srcArr[1], opArr[1])
|
|
: null;
|
|
var src2Expr = (argsNeeded >= 3) ? genCombinerSourceExpr(texUnitID, constantExpr, passInputVar, srcArr[2], opArr[2])
|
|
: null;
|
|
|
|
var outputType = isColor ? "vec3" : "float";
|
|
var lines = null;
|
|
switch (combiner) {
|
|
case GL_REPLACE: {
|
|
var line = [
|
|
outputType + " " + outputVar,
|
|
" = ",
|
|
src0Expr,
|
|
";",
|
|
];
|
|
lines = [line.join("")];
|
|
break;
|
|
}
|
|
case GL_MODULATE: {
|
|
var line = [
|
|
outputType + " " + outputVar + " = ",
|
|
src0Expr + " * " + src1Expr,
|
|
";",
|
|
];
|
|
lines = [line.join("")];
|
|
break;
|
|
}
|
|
case GL_ADD: {
|
|
var line = [
|
|
outputType + " " + outputVar + " = ",
|
|
src0Expr + " + " + src1Expr,
|
|
";",
|
|
];
|
|
lines = [line.join("")];
|
|
break;
|
|
}
|
|
case GL_SUBTRACT: {
|
|
var line = [
|
|
outputType + " " + outputVar + " = ",
|
|
src0Expr + " - " + src1Expr,
|
|
";",
|
|
];
|
|
lines = [line.join("")];
|
|
break;
|
|
}
|
|
case GL_INTERPOLATE: {
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + texUnitID + "_";
|
|
var arg2Var = prefix + "colorSrc2";
|
|
var arg2Line = getTypeFromCombineOp(this.colorOp[2]) + " " + arg2Var + " = " + src2Expr + ";";
|
|
|
|
var line = [
|
|
outputType + " " + outputVar,
|
|
" = ",
|
|
src0Expr + " * " + arg2Var,
|
|
" + ",
|
|
src1Expr + " * (1.0 - " + arg2Var + ")",
|
|
";",
|
|
];
|
|
lines = [
|
|
arg2Line,
|
|
line.join(""),
|
|
];
|
|
break;
|
|
}
|
|
|
|
default:
|
|
return abort_sanity("Unmatched TexEnv.colorCombiner?");
|
|
}
|
|
|
|
return lines;
|
|
}
|
|
|
|
return {
|
|
// Exports:
|
|
init: function(gl, specifiedMaxTextureImageUnits) {
|
|
var maxTexUnits = 0;
|
|
if (specifiedMaxTextureImageUnits) {
|
|
maxTexUnits = specifiedMaxTextureImageUnits;
|
|
} else if (gl) {
|
|
maxTexUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
|
|
}
|
|
s_texUnits = [];
|
|
for (var i = 0; i < maxTexUnits; i++) {
|
|
s_texUnits.push(new CTexUnit());
|
|
}
|
|
},
|
|
|
|
setGLSLVars: function(uTexUnitPrefix, vTexCoordPrefix, vPrimColor, uTexMatrixPrefix) {
|
|
TEX_UNIT_UNIFORM_PREFIX = uTexUnitPrefix;
|
|
TEX_COORD_VARYING_PREFIX = vTexCoordPrefix;
|
|
PRIM_COLOR_VARYING = vPrimColor;
|
|
TEX_MATRIX_UNIFORM_PREFIX = uTexMatrixPrefix;
|
|
},
|
|
|
|
genAllPassLines: function(resultDest, indentSize) {
|
|
indentSize = indentSize || 0;
|
|
|
|
s_requiredTexUnitsForPass.length = 0; // Clear the list.
|
|
var lines = [];
|
|
var lastPassVar = PRIM_COLOR_VARYING;
|
|
for (var i = 0; i < s_texUnits.length; i++) {
|
|
if (!s_texUnits[i].enabled()) continue;
|
|
|
|
s_requiredTexUnitsForPass.push(i);
|
|
|
|
var prefix = TEXENVJIT_NAMESPACE_PREFIX + 'env' + i + "_";
|
|
var passOutputVar = prefix + "result";
|
|
|
|
var newLines = s_texUnits[i].genPassLines(passOutputVar, lastPassVar, i);
|
|
lines = lines.concat(newLines, [""]);
|
|
|
|
lastPassVar = passOutputVar;
|
|
}
|
|
lines.push(resultDest + " = " + lastPassVar + ";");
|
|
|
|
var indent = "";
|
|
for (var i = 0; i < indentSize; i++) indent += " ";
|
|
|
|
var output = indent + lines.join("\n" + indent);
|
|
|
|
return output;
|
|
},
|
|
|
|
getUsedTexUnitList: function() {
|
|
return s_requiredTexUnitsForPass;
|
|
},
|
|
|
|
traverseState: function(keyView) {
|
|
for (var i = 0; i < s_texUnits.length; i++) {
|
|
s_texUnits[i].traverseState(keyView);
|
|
}
|
|
},
|
|
|
|
getTexUnitType: function(texUnitID) {
|
|
return s_texUnits[texUnitID].getTexType();
|
|
},
|
|
|
|
// Hooks:
|
|
hook_activeTexture: function(texture) {
|
|
s_activeTexture = texture - GL_TEXTURE0;
|
|
},
|
|
|
|
hook_enable: function(cap) {
|
|
var cur = getCurTexUnit();
|
|
switch (cap) {
|
|
case GL_TEXTURE_1D:
|
|
if (!cur.enabled_tex1D) {
|
|
GLImmediate.currentRenderer = null; // Renderer state changed, and must be recreated or looked up again.
|
|
cur.enabled_tex1D = true;
|
|
cur.texTypesEnabled |= 1;
|
|
}
|
|
break;
|
|
case GL_TEXTURE_2D:
|
|
if (!cur.enabled_tex2D) {
|
|
GLImmediate.currentRenderer = null;
|
|
cur.enabled_tex2D = true;
|
|
cur.texTypesEnabled |= 2;
|
|
}
|
|
break;
|
|
case GL_TEXTURE_3D:
|
|
if (!cur.enabled_tex3D) {
|
|
GLImmediate.currentRenderer = null;
|
|
cur.enabled_tex3D = true;
|
|
cur.texTypesEnabled |= 4;
|
|
}
|
|
break;
|
|
case GL_TEXTURE_CUBE_MAP:
|
|
if (!cur.enabled_texCube) {
|
|
GLImmediate.currentRenderer = null;
|
|
cur.enabled_texCube = true;
|
|
cur.texTypesEnabled |= 8;
|
|
}
|
|
break;
|
|
}
|
|
},
|
|
|
|
hook_disable: function(cap) {
|
|
var cur = getCurTexUnit();
|
|
switch (cap) {
|
|
case GL_TEXTURE_1D:
|
|
if (cur.enabled_tex1D) {
|
|
GLImmediate.currentRenderer = null; // Renderer state changed, and must be recreated or looked up again.
|
|
cur.enabled_tex1D = false;
|
|
cur.texTypesEnabled &= ~1;
|
|
}
|
|
break;
|
|
case GL_TEXTURE_2D:
|
|
if (cur.enabled_tex2D) {
|
|
GLImmediate.currentRenderer = null;
|
|
cur.enabled_tex2D = false;
|
|
cur.texTypesEnabled &= ~2;
|
|
}
|
|
break;
|
|
case GL_TEXTURE_3D:
|
|
if (cur.enabled_tex3D) {
|
|
GLImmediate.currentRenderer = null;
|
|
cur.enabled_tex3D = false;
|
|
cur.texTypesEnabled &= ~4;
|
|
}
|
|
break;
|
|
case GL_TEXTURE_CUBE_MAP:
|
|
if (cur.enabled_texCube) {
|
|
GLImmediate.currentRenderer = null;
|
|
cur.enabled_texCube = false;
|
|
cur.texTypesEnabled &= ~8;
|
|
}
|
|
break;
|
|
}
|
|
},
|
|
|
|
hook_texEnvf: function(target, pname, param) {
|
|
if (target != GL_TEXTURE_ENV)
|
|
return;
|
|
|
|
var env = getCurTexUnit().env;
|
|
switch (pname) {
|
|
case GL_RGB_SCALE:
|
|
if (env.colorScale != param) {
|
|
env.invalidateKey(); // We changed FFP emulation renderer state.
|
|
env.colorScale = param;
|
|
}
|
|
break;
|
|
case GL_ALPHA_SCALE:
|
|
if (env.alphaScale != param) {
|
|
env.invalidateKey();
|
|
env.alphaScale = param;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
Module.printErr('WARNING: Unhandled `pname` in call to `glTexEnvf`.');
|
|
}
|
|
},
|
|
|
|
hook_texEnvi: function(target, pname, param) {
|
|
if (target != GL_TEXTURE_ENV)
|
|
return;
|
|
|
|
var env = getCurTexUnit().env;
|
|
switch (pname) {
|
|
case GL_TEXTURE_ENV_MODE:
|
|
if (env.mode != param) {
|
|
env.invalidateKey(); // We changed FFP emulation renderer state.
|
|
env.mode = param;
|
|
}
|
|
break;
|
|
|
|
case GL_COMBINE_RGB:
|
|
if (env.colorCombiner != param) {
|
|
env.invalidateKey();
|
|
env.colorCombiner = param;
|
|
}
|
|
break;
|
|
case GL_COMBINE_ALPHA:
|
|
if (env.alphaCombiner != param) {
|
|
env.invalidateKey();
|
|
env.alphaCombiner = param;
|
|
}
|
|
break;
|
|
|
|
case GL_SRC0_RGB:
|
|
if (env.colorSrc[0] != param) {
|
|
env.invalidateKey();
|
|
env.colorSrc[0] = param;
|
|
}
|
|
break;
|
|
case GL_SRC1_RGB:
|
|
if (env.colorSrc[1] != param) {
|
|
env.invalidateKey();
|
|
env.colorSrc[1] = param;
|
|
}
|
|
break;
|
|
case GL_SRC2_RGB:
|
|
if (env.colorSrc[2] != param) {
|
|
env.invalidateKey();
|
|
env.colorSrc[2] = param;
|
|
}
|
|
break;
|
|
|
|
case GL_SRC0_ALPHA:
|
|
if (env.alphaSrc[0] != param) {
|
|
env.invalidateKey();
|
|
env.alphaSrc[0] = param;
|
|
}
|
|
break;
|
|
case GL_SRC1_ALPHA:
|
|
if (env.alphaSrc[1] != param) {
|
|
env.invalidateKey();
|
|
env.alphaSrc[1] = param;
|
|
}
|
|
break;
|
|
case GL_SRC2_ALPHA:
|
|
if (env.alphaSrc[2] != param) {
|
|
env.invalidateKey();
|
|
env.alphaSrc[2] = param;
|
|
}
|
|
break;
|
|
|
|
case GL_OPERAND0_RGB:
|
|
if (env.colorOp[0] != param) {
|
|
env.invalidateKey();
|
|
env.colorOp[0] = param;
|
|
}
|
|
break;
|
|
case GL_OPERAND1_RGB:
|
|
if (env.colorOp[1] != param) {
|
|
env.invalidateKey();
|
|
env.colorOp[1] = param;
|
|
}
|
|
break;
|
|
case GL_OPERAND2_RGB:
|
|
if (env.colorOp[2] != param) {
|
|
env.invalidateKey();
|
|
env.colorOp[2] = param;
|
|
}
|
|
break;
|
|
|
|
case GL_OPERAND0_ALPHA:
|
|
if (env.alphaOp[0] != param) {
|
|
env.invalidateKey();
|
|
env.alphaOp[0] = param;
|
|
}
|
|
break;
|
|
case GL_OPERAND1_ALPHA:
|
|
if (env.alphaOp[1] != param) {
|
|
env.invalidateKey();
|
|
env.alphaOp[1] = param;
|
|
}
|
|
break;
|
|
case GL_OPERAND2_ALPHA:
|
|
if (env.alphaOp[2] != param) {
|
|
env.invalidateKey();
|
|
env.alphaOp[2] = param;
|
|
}
|
|
break;
|
|
|
|
case GL_RGB_SCALE:
|
|
if (env.colorScale != param) {
|
|
env.invalidateKey();
|
|
env.colorScale = param;
|
|
}
|
|
break;
|
|
case GL_ALPHA_SCALE:
|
|
if (env.alphaScale != param) {
|
|
env.invalidateKey();
|
|
env.alphaScale = param;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
Module.printErr('WARNING: Unhandled `pname` in call to `glTexEnvi`.');
|
|
}
|
|
},
|
|
|
|
hook_texEnvfv: function(target, pname, params) {
|
|
if (target != GL_TEXTURE_ENV) return;
|
|
|
|
var env = getCurTexUnit().env;
|
|
switch (pname) {
|
|
case GL_TEXTURE_ENV_COLOR: {
|
|
for (var i = 0; i < 4; i++) {
|
|
var param = HEAPF32[(((params)+(i*4))>>2)];
|
|
if (env.envColor[i] != param) {
|
|
env.invalidateKey(); // We changed FFP emulation renderer state.
|
|
env.envColor[i] = param;
|
|
}
|
|
}
|
|
break
|
|
}
|
|
default:
|
|
Module.printErr('WARNING: Unhandled `pname` in call to `glTexEnvfv`.');
|
|
}
|
|
},
|
|
|
|
hook_getTexEnviv: function(target, pname, param) {
|
|
if (target != GL_TEXTURE_ENV)
|
|
return;
|
|
|
|
var env = getCurTexUnit().env;
|
|
switch (pname) {
|
|
case GL_TEXTURE_ENV_MODE:
|
|
HEAP32[((param)>>2)]=env.mode;
|
|
return;
|
|
|
|
case GL_TEXTURE_ENV_COLOR:
|
|
HEAP32[((param)>>2)]=Math.max(Math.min(env.envColor[0]*255, 255, -255));
|
|
HEAP32[(((param)+(1))>>2)]=Math.max(Math.min(env.envColor[1]*255, 255, -255));
|
|
HEAP32[(((param)+(2))>>2)]=Math.max(Math.min(env.envColor[2]*255, 255, -255));
|
|
HEAP32[(((param)+(3))>>2)]=Math.max(Math.min(env.envColor[3]*255, 255, -255));
|
|
return;
|
|
|
|
case GL_COMBINE_RGB:
|
|
HEAP32[((param)>>2)]=env.colorCombiner;
|
|
return;
|
|
|
|
case GL_COMBINE_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaCombiner;
|
|
return;
|
|
|
|
case GL_SRC0_RGB:
|
|
HEAP32[((param)>>2)]=env.colorSrc[0];
|
|
return;
|
|
|
|
case GL_SRC1_RGB:
|
|
HEAP32[((param)>>2)]=env.colorSrc[1];
|
|
return;
|
|
|
|
case GL_SRC2_RGB:
|
|
HEAP32[((param)>>2)]=env.colorSrc[2];
|
|
return;
|
|
|
|
case GL_SRC0_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaSrc[0];
|
|
return;
|
|
|
|
case GL_SRC1_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaSrc[1];
|
|
return;
|
|
|
|
case GL_SRC2_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaSrc[2];
|
|
return;
|
|
|
|
case GL_OPERAND0_RGB:
|
|
HEAP32[((param)>>2)]=env.colorOp[0];
|
|
return;
|
|
|
|
case GL_OPERAND1_RGB:
|
|
HEAP32[((param)>>2)]=env.colorOp[1];
|
|
return;
|
|
|
|
case GL_OPERAND2_RGB:
|
|
HEAP32[((param)>>2)]=env.colorOp[2];
|
|
return;
|
|
|
|
case GL_OPERAND0_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaOp[0];
|
|
return;
|
|
|
|
case GL_OPERAND1_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaOp[1];
|
|
return;
|
|
|
|
case GL_OPERAND2_ALPHA:
|
|
HEAP32[((param)>>2)]=env.alphaOp[2];
|
|
return;
|
|
|
|
case GL_RGB_SCALE:
|
|
HEAP32[((param)>>2)]=env.colorScale;
|
|
return;
|
|
|
|
case GL_ALPHA_SCALE:
|
|
HEAP32[((param)>>2)]=env.alphaScale;
|
|
return;
|
|
|
|
default:
|
|
Module.printErr('WARNING: Unhandled `pname` in call to `glGetTexEnvi`.');
|
|
}
|
|
},
|
|
|
|
hook_getTexEnvfv: function(target, pname, param) {
|
|
if (target != GL_TEXTURE_ENV)
|
|
return;
|
|
|
|
var env = getCurTexUnit().env;
|
|
switch (pname) {
|
|
case GL_TEXTURE_ENV_COLOR:
|
|
HEAPF32[((param)>>2)]=env.envColor[0];
|
|
HEAPF32[(((param)+(4))>>2)]=env.envColor[1];
|
|
HEAPF32[(((param)+(8))>>2)]=env.envColor[2];
|
|
HEAPF32[(((param)+(12))>>2)]=env.envColor[3];
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
},vertexData:null,vertexDataU8:null,tempData:null,indexData:null,vertexCounter:0,mode:-1,rendererCache:null,rendererComponents:[],rendererComponentPointer:0,lastRenderer:null,lastArrayBuffer:null,lastProgram:null,lastStride:-1,matrix:[],matrixStack:[],currentMatrix:0,tempMatrix:null,matricesModified:false,useTextureMatrix:false,VERTEX:0,NORMAL:1,COLOR:2,TEXTURE0:3,NUM_ATTRIBUTES:-1,MAX_TEXTURES:-1,totalEnabledClientAttributes:0,enabledClientAttributes:[0,0],clientAttributes:[],liveClientAttributes:[],currentRenderer:null,modifiedClientAttributes:false,clientActiveTexture:0,clientColor:null,usedTexUnitList:[],fixedFunctionProgram:null,setClientAttribute:function setClientAttribute(name, size, type, stride, pointer) {
|
|
var attrib = GLImmediate.clientAttributes[name];
|
|
if (!attrib) {
|
|
for (var i = 0; i <= name; i++) { // keep flat
|
|
if (!GLImmediate.clientAttributes[i]) {
|
|
GLImmediate.clientAttributes[i] = {
|
|
name: name,
|
|
size: size,
|
|
type: type,
|
|
stride: stride,
|
|
pointer: pointer,
|
|
offset: 0
|
|
};
|
|
}
|
|
}
|
|
} else {
|
|
attrib.name = name;
|
|
attrib.size = size;
|
|
attrib.type = type;
|
|
attrib.stride = stride;
|
|
attrib.pointer = pointer;
|
|
attrib.offset = 0;
|
|
}
|
|
GLImmediate.modifiedClientAttributes = true;
|
|
},addRendererComponent:function addRendererComponent(name, size, type) {
|
|
if (!GLImmediate.rendererComponents[name]) {
|
|
GLImmediate.rendererComponents[name] = 1;
|
|
GLImmediate.enabledClientAttributes[name] = true;
|
|
GLImmediate.setClientAttribute(name, size, type, 0, GLImmediate.rendererComponentPointer);
|
|
GLImmediate.rendererComponentPointer += size * GL.byteSizeByType[type - GL.byteSizeByTypeRoot];
|
|
} else {
|
|
GLImmediate.rendererComponents[name]++;
|
|
}
|
|
},disableBeginEndClientAttributes:function disableBeginEndClientAttributes() {
|
|
for (var i = 0; i < GLImmediate.NUM_ATTRIBUTES; i++) {
|
|
if (GLImmediate.rendererComponents[i]) GLImmediate.enabledClientAttributes[i] = false;
|
|
}
|
|
},getRenderer:function getRenderer() {
|
|
// If no FFP state has changed that would have forced to re-evaluate which FFP emulation shader to use,
|
|
// we have the currently used renderer in cache, and can immediately return that.
|
|
if (GLImmediate.currentRenderer) {
|
|
return GLImmediate.currentRenderer;
|
|
}
|
|
// return a renderer object given the liveClientAttributes
|
|
// we maintain a cache of renderers, optimized to not generate garbage
|
|
var attributes = GLImmediate.liveClientAttributes;
|
|
var cacheMap = GLImmediate.rendererCache;
|
|
var keyView = cacheMap.getStaticKeyView().reset();
|
|
|
|
// By attrib state:
|
|
var enabledAttributesKey = 0;
|
|
for (var i = 0; i < attributes.length; i++) {
|
|
enabledAttributesKey |= 1 << attributes[i].name;
|
|
}
|
|
|
|
// By fog state:
|
|
var fogParam = 0;
|
|
if (GLEmulation.fogEnabled) {
|
|
switch (GLEmulation.fogMode) {
|
|
case 0x0801: // GL_EXP2
|
|
fogParam = 1;
|
|
break;
|
|
case 0x2601: // GL_LINEAR
|
|
fogParam = 2;
|
|
break;
|
|
default: // default to GL_EXP
|
|
fogParam = 3;
|
|
break;
|
|
}
|
|
}
|
|
keyView.next((enabledAttributesKey << 2) | fogParam);
|
|
|
|
// By cur program:
|
|
keyView.next(GL.currProgram);
|
|
if (!GL.currProgram) {
|
|
GLImmediate.TexEnvJIT.traverseState(keyView);
|
|
}
|
|
|
|
// If we don't already have it, create it.
|
|
var renderer = keyView.get();
|
|
if (!renderer) {
|
|
renderer = GLImmediate.createRenderer();
|
|
GLImmediate.currentRenderer = renderer;
|
|
keyView.set(renderer);
|
|
return renderer;
|
|
}
|
|
GLImmediate.currentRenderer = renderer; // Cache the currently used renderer, so later lookups without state changes can get this fast.
|
|
return renderer;
|
|
},createRenderer:function createRenderer(renderer) {
|
|
var useCurrProgram = !!GL.currProgram;
|
|
var hasTextures = false;
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
var texAttribName = GLImmediate.TEXTURE0 + i;
|
|
if (!GLImmediate.enabledClientAttributes[texAttribName])
|
|
continue;
|
|
|
|
|
|
hasTextures = true;
|
|
}
|
|
|
|
var ret = {
|
|
init: function init() {
|
|
// For fixed-function shader generation.
|
|
var uTexUnitPrefix = 'u_texUnit';
|
|
var aTexCoordPrefix = 'a_texCoord';
|
|
var vTexCoordPrefix = 'v_texCoord';
|
|
var vPrimColor = 'v_color';
|
|
var uTexMatrixPrefix = GLImmediate.useTextureMatrix ? 'u_textureMatrix' : null;
|
|
|
|
if (useCurrProgram) {
|
|
if (GL.shaderInfos[GL.programShaders[GL.currProgram][0]].type == GLctx.VERTEX_SHADER) {
|
|
this.vertexShader = GL.shaders[GL.programShaders[GL.currProgram][0]];
|
|
this.fragmentShader = GL.shaders[GL.programShaders[GL.currProgram][1]];
|
|
} else {
|
|
this.vertexShader = GL.shaders[GL.programShaders[GL.currProgram][1]];
|
|
this.fragmentShader = GL.shaders[GL.programShaders[GL.currProgram][0]];
|
|
}
|
|
this.program = GL.programs[GL.currProgram];
|
|
this.usedTexUnitList = [];
|
|
} else {
|
|
// IMPORTANT NOTE: If you parameterize the shader source based on any runtime values
|
|
// in order to create the least expensive shader possible based on the features being
|
|
// used, you should also update the code in the beginning of getRenderer to make sure
|
|
// that you cache the renderer based on the said parameters.
|
|
if (GLEmulation.fogEnabled) {
|
|
switch (GLEmulation.fogMode) {
|
|
case 0x0801: // GL_EXP2
|
|
// fog = exp(-(gl_Fog.density * gl_FogFragCoord)^2)
|
|
var fogFormula = ' float fog = exp(-u_fogDensity * u_fogDensity * ecDistance * ecDistance); \n';
|
|
break;
|
|
case 0x2601: // GL_LINEAR
|
|
// fog = (gl_Fog.end - gl_FogFragCoord) * gl_fog.scale
|
|
var fogFormula = ' float fog = (u_fogEnd - ecDistance) * u_fogScale; \n';
|
|
break;
|
|
default: // default to GL_EXP
|
|
// fog = exp(-gl_Fog.density * gl_FogFragCoord)
|
|
var fogFormula = ' float fog = exp(-u_fogDensity * ecDistance); \n';
|
|
break;
|
|
}
|
|
}
|
|
|
|
GLImmediate.TexEnvJIT.setGLSLVars(uTexUnitPrefix, vTexCoordPrefix, vPrimColor, uTexMatrixPrefix);
|
|
var fsTexEnvPass = GLImmediate.TexEnvJIT.genAllPassLines('gl_FragColor', 2);
|
|
|
|
var texUnitAttribList = '';
|
|
var texUnitVaryingList = '';
|
|
var texUnitUniformList = '';
|
|
var vsTexCoordInits = '';
|
|
this.usedTexUnitList = GLImmediate.TexEnvJIT.getUsedTexUnitList();
|
|
for (var i = 0; i < this.usedTexUnitList.length; i++) {
|
|
var texUnit = this.usedTexUnitList[i];
|
|
texUnitAttribList += 'attribute vec4 ' + aTexCoordPrefix + texUnit + ';\n';
|
|
texUnitVaryingList += 'varying vec4 ' + vTexCoordPrefix + texUnit + ';\n';
|
|
texUnitUniformList += 'uniform sampler2D ' + uTexUnitPrefix + texUnit + ';\n';
|
|
vsTexCoordInits += ' ' + vTexCoordPrefix + texUnit + ' = ' + aTexCoordPrefix + texUnit + ';\n';
|
|
|
|
if (GLImmediate.useTextureMatrix) {
|
|
texUnitUniformList += 'uniform mat4 ' + uTexMatrixPrefix + texUnit + ';\n';
|
|
}
|
|
}
|
|
|
|
var vsFogVaryingInit = null;
|
|
if (GLEmulation.fogEnabled) {
|
|
vsFogVaryingInit = ' v_fogFragCoord = abs(ecPosition.z);\n';
|
|
}
|
|
|
|
var vsSource = [
|
|
'attribute vec4 a_position;',
|
|
'attribute vec4 a_color;',
|
|
'varying vec4 v_color;',
|
|
texUnitAttribList,
|
|
texUnitVaryingList,
|
|
(GLEmulation.fogEnabled ? 'varying float v_fogFragCoord;' : null),
|
|
'uniform mat4 u_modelView;',
|
|
'uniform mat4 u_projection;',
|
|
'void main()',
|
|
'{',
|
|
' vec4 ecPosition = u_modelView * a_position;', // eye-coordinate position
|
|
' gl_Position = u_projection * ecPosition;',
|
|
' v_color = a_color;',
|
|
vsTexCoordInits,
|
|
vsFogVaryingInit,
|
|
'}',
|
|
''
|
|
].join('\n').replace(/\n\n+/g, '\n');
|
|
|
|
this.vertexShader = GLctx.createShader(GLctx.VERTEX_SHADER);
|
|
GLctx.shaderSource(this.vertexShader, vsSource);
|
|
GLctx.compileShader(this.vertexShader);
|
|
|
|
var fogHeaderIfNeeded = null;
|
|
if (GLEmulation.fogEnabled) {
|
|
fogHeaderIfNeeded = [
|
|
'',
|
|
'varying float v_fogFragCoord; ',
|
|
'uniform vec4 u_fogColor; ',
|
|
'uniform float u_fogEnd; ',
|
|
'uniform float u_fogScale; ',
|
|
'uniform float u_fogDensity; ',
|
|
'float ffog(in float ecDistance) { ',
|
|
fogFormula,
|
|
' fog = clamp(fog, 0.0, 1.0); ',
|
|
' return fog; ',
|
|
'}',
|
|
'',
|
|
].join("\n");
|
|
}
|
|
|
|
var fogPass = null;
|
|
if (GLEmulation.fogEnabled) {
|
|
fogPass = 'gl_FragColor = vec4(mix(u_fogColor.rgb, gl_FragColor.rgb, ffog(v_fogFragCoord)), gl_FragColor.a);\n';
|
|
}
|
|
|
|
var fsSource = [
|
|
'precision mediump float;',
|
|
texUnitVaryingList,
|
|
texUnitUniformList,
|
|
'varying vec4 v_color;',
|
|
fogHeaderIfNeeded,
|
|
'void main()',
|
|
'{',
|
|
fsTexEnvPass,
|
|
fogPass,
|
|
'}',
|
|
''
|
|
].join("\n").replace(/\n\n+/g, '\n');
|
|
|
|
this.fragmentShader = GLctx.createShader(GLctx.FRAGMENT_SHADER);
|
|
GLctx.shaderSource(this.fragmentShader, fsSource);
|
|
GLctx.compileShader(this.fragmentShader);
|
|
|
|
this.program = GLctx.createProgram();
|
|
GLctx.attachShader(this.program, this.vertexShader);
|
|
GLctx.attachShader(this.program, this.fragmentShader);
|
|
|
|
// As optimization, bind all attributes to prespecified locations, so that the FFP emulation
|
|
// code can submit attributes to any generated FFP shader without having to examine each shader in turn.
|
|
// These prespecified locations are only assumed if GL_FFP_ONLY is specified, since user could also create their
|
|
// own shaders that didn't have attributes in the same locations.
|
|
GLctx.bindAttribLocation(this.program, GLImmediate.VERTEX, 'a_position');
|
|
GLctx.bindAttribLocation(this.program, GLImmediate.COLOR, 'a_color');
|
|
GLctx.bindAttribLocation(this.program, GLImmediate.NORMAL, 'a_normal');
|
|
var maxVertexAttribs = GLctx.getParameter(GLctx.MAX_VERTEX_ATTRIBS);
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES && GLImmediate.TEXTURE0 + i < maxVertexAttribs; i++) {
|
|
GLctx.bindAttribLocation(this.program, GLImmediate.TEXTURE0 + i, 'a_texCoord'+i);
|
|
GLctx.bindAttribLocation(this.program, GLImmediate.TEXTURE0 + i, aTexCoordPrefix+i);
|
|
}
|
|
GLctx.linkProgram(this.program);
|
|
}
|
|
|
|
// Stores an array that remembers which matrix uniforms are up-to-date in this FFP renderer, so they don't need to be resubmitted
|
|
// each time we render with this program.
|
|
this.textureMatrixVersion = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];
|
|
|
|
this.positionLocation = GLctx.getAttribLocation(this.program, 'a_position');
|
|
|
|
this.texCoordLocations = [];
|
|
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
if (!GLImmediate.enabledClientAttributes[GLImmediate.TEXTURE0 + i]) {
|
|
this.texCoordLocations[i] = -1;
|
|
continue;
|
|
}
|
|
|
|
if (useCurrProgram) {
|
|
this.texCoordLocations[i] = GLctx.getAttribLocation(this.program, 'a_texCoord' + i);
|
|
} else {
|
|
this.texCoordLocations[i] = GLctx.getAttribLocation(this.program, aTexCoordPrefix + i);
|
|
}
|
|
}
|
|
this.colorLocation = GLctx.getAttribLocation(this.program, 'a_color');
|
|
if (!useCurrProgram) {
|
|
// Temporarily switch to the program so we can set our sampler uniforms early.
|
|
var prevBoundProg = GLctx.getParameter(GLctx.CURRENT_PROGRAM);
|
|
GLctx.useProgram(this.program);
|
|
{
|
|
for (var i = 0; i < this.usedTexUnitList.length; i++) {
|
|
var texUnitID = this.usedTexUnitList[i];
|
|
var texSamplerLoc = GLctx.getUniformLocation(this.program, uTexUnitPrefix + texUnitID);
|
|
GLctx.uniform1i(texSamplerLoc, texUnitID);
|
|
}
|
|
}
|
|
// The default color attribute value is not the same as the default for all other attribute streams (0,0,0,1) but (1,1,1,1),
|
|
// so explicitly set it right at start.
|
|
GLctx.vertexAttrib4fv(this.colorLocation, [1,1,1,1]);
|
|
GLctx.useProgram(prevBoundProg);
|
|
}
|
|
|
|
this.textureMatrixLocations = [];
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
this.textureMatrixLocations[i] = GLctx.getUniformLocation(this.program, 'u_textureMatrix' + i);
|
|
}
|
|
this.normalLocation = GLctx.getAttribLocation(this.program, 'a_normal');
|
|
|
|
this.modelViewLocation = GLctx.getUniformLocation(this.program, 'u_modelView');
|
|
this.projectionLocation = GLctx.getUniformLocation(this.program, 'u_projection');
|
|
|
|
this.hasTextures = hasTextures;
|
|
this.hasNormal = GLImmediate.enabledClientAttributes[GLImmediate.NORMAL] &&
|
|
GLImmediate.clientAttributes[GLImmediate.NORMAL].size > 0 &&
|
|
this.normalLocation >= 0;
|
|
this.hasColor = (this.colorLocation === 0) || this.colorLocation > 0;
|
|
|
|
this.floatType = GLctx.FLOAT; // minor optimization
|
|
|
|
this.fogColorLocation = GLctx.getUniformLocation(this.program, 'u_fogColor');
|
|
this.fogEndLocation = GLctx.getUniformLocation(this.program, 'u_fogEnd');
|
|
this.fogScaleLocation = GLctx.getUniformLocation(this.program, 'u_fogScale');
|
|
this.fogDensityLocation = GLctx.getUniformLocation(this.program, 'u_fogDensity');
|
|
this.hasFog = !!(this.fogColorLocation || this.fogEndLocation ||
|
|
this.fogScaleLocation || this.fogDensityLocation);
|
|
},
|
|
|
|
prepare: function prepare() {
|
|
// Calculate the array buffer
|
|
var arrayBuffer;
|
|
if (!GL.currArrayBuffer) {
|
|
var start = GLImmediate.firstVertex*GLImmediate.stride;
|
|
var end = GLImmediate.lastVertex*GLImmediate.stride;
|
|
arrayBuffer = GL.getTempVertexBuffer(end);
|
|
// TODO: consider using the last buffer we bound, if it was larger. downside is larger buffer, but we might avoid rebinding and preparing
|
|
} else {
|
|
arrayBuffer = GL.currArrayBuffer;
|
|
}
|
|
|
|
// If the array buffer is unchanged and the renderer as well, then we can avoid all the work here
|
|
// XXX We use some heuristics here, and this may not work in all cases. Try disabling GL_UNSAFE_OPTS if you
|
|
// have odd glitches
|
|
var lastRenderer = GLImmediate.lastRenderer;
|
|
var canSkip = this == lastRenderer &&
|
|
arrayBuffer == GLImmediate.lastArrayBuffer &&
|
|
(GL.currProgram || this.program) == GLImmediate.lastProgram &&
|
|
GLImmediate.stride == GLImmediate.lastStride &&
|
|
!GLImmediate.matricesModified;
|
|
if (!canSkip && lastRenderer) lastRenderer.cleanup();
|
|
if (!GL.currArrayBuffer) {
|
|
// Bind the array buffer and upload data after cleaning up the previous renderer
|
|
|
|
if (arrayBuffer != GLImmediate.lastArrayBuffer) {
|
|
GLctx.bindBuffer(GLctx.ARRAY_BUFFER, arrayBuffer);
|
|
GLImmediate.lastArrayBuffer = arrayBuffer;
|
|
}
|
|
|
|
GLctx.bufferSubData(GLctx.ARRAY_BUFFER, start, GLImmediate.vertexData.subarray(start >> 2, end >> 2));
|
|
}
|
|
if (canSkip) return;
|
|
GLImmediate.lastRenderer = this;
|
|
GLImmediate.lastProgram = GL.currProgram || this.program;
|
|
GLImmediate.lastStride == GLImmediate.stride;
|
|
GLImmediate.matricesModified = false;
|
|
|
|
if (!GL.currProgram) {
|
|
if (GLImmediate.fixedFunctionProgram != this.program) {
|
|
GLctx.useProgram(this.program);
|
|
GLImmediate.fixedFunctionProgram = this.program;
|
|
}
|
|
}
|
|
|
|
if (this.modelViewLocation && this.modelViewMatrixVersion != GLImmediate.matrixVersion[0/*m*/]) {
|
|
this.modelViewMatrixVersion = GLImmediate.matrixVersion[0/*m*/];
|
|
GLctx.uniformMatrix4fv(this.modelViewLocation, false, GLImmediate.matrix[0/*m*/]);
|
|
}
|
|
if (this.projectionLocation && this.projectionMatrixVersion != GLImmediate.matrixVersion[1/*p*/]) {
|
|
this.projectionMatrixVersion = GLImmediate.matrixVersion[1/*p*/];
|
|
GLctx.uniformMatrix4fv(this.projectionLocation, false, GLImmediate.matrix[1/*p*/]);
|
|
}
|
|
|
|
var clientAttributes = GLImmediate.clientAttributes;
|
|
var posAttr = clientAttributes[GLImmediate.VERTEX];
|
|
|
|
|
|
GLctx.vertexAttribPointer(this.positionLocation, posAttr.size, posAttr.type, false, GLImmediate.stride, posAttr.offset);
|
|
GLctx.enableVertexAttribArray(this.positionLocation);
|
|
if (this.hasNormal) {
|
|
var normalAttr = clientAttributes[GLImmediate.NORMAL];
|
|
GLctx.vertexAttribPointer(this.normalLocation, normalAttr.size, normalAttr.type, true, GLImmediate.stride, normalAttr.offset);
|
|
GLctx.enableVertexAttribArray(this.normalLocation);
|
|
}
|
|
if (this.hasTextures) {
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
var attribLoc = this.texCoordLocations[i];
|
|
if (attribLoc === undefined || attribLoc < 0) continue;
|
|
var texAttr = clientAttributes[GLImmediate.TEXTURE0+i];
|
|
|
|
if (texAttr.size) {
|
|
GLctx.vertexAttribPointer(attribLoc, texAttr.size, texAttr.type, false, GLImmediate.stride, texAttr.offset);
|
|
GLctx.enableVertexAttribArray(attribLoc);
|
|
} else {
|
|
// These two might be dangerous, but let's try them.
|
|
GLctx.vertexAttrib4f(attribLoc, 0, 0, 0, 1);
|
|
GLctx.disableVertexAttribArray(attribLoc);
|
|
}
|
|
var t = 2/*t*/+i;
|
|
if (this.textureMatrixLocations[i] && this.textureMatrixVersion[t] != GLImmediate.matrixVersion[t]) { // XXX might we need this even without the condition we are currently in?
|
|
this.textureMatrixVersion[t] = GLImmediate.matrixVersion[t];
|
|
GLctx.uniformMatrix4fv(this.textureMatrixLocations[i], false, GLImmediate.matrix[t]);
|
|
}
|
|
}
|
|
}
|
|
if (GLImmediate.enabledClientAttributes[GLImmediate.COLOR]) {
|
|
var colorAttr = clientAttributes[GLImmediate.COLOR];
|
|
GLctx.vertexAttribPointer(this.colorLocation, colorAttr.size, colorAttr.type, true, GLImmediate.stride, colorAttr.offset);
|
|
GLctx.enableVertexAttribArray(this.colorLocation);
|
|
}
|
|
else if (this.hasColor) {
|
|
GLctx.disableVertexAttribArray(this.colorLocation);
|
|
GLctx.vertexAttrib4fv(this.colorLocation, GLImmediate.clientColor);
|
|
}
|
|
if (this.hasFog) {
|
|
if (this.fogColorLocation) GLctx.uniform4fv(this.fogColorLocation, GLEmulation.fogColor);
|
|
if (this.fogEndLocation) GLctx.uniform1f(this.fogEndLocation, GLEmulation.fogEnd);
|
|
if (this.fogScaleLocation) GLctx.uniform1f(this.fogScaleLocation, 1/(GLEmulation.fogEnd - GLEmulation.fogStart));
|
|
if (this.fogDensityLocation) GLctx.uniform1f(this.fogDensityLocation, GLEmulation.fogDensity);
|
|
}
|
|
},
|
|
|
|
cleanup: function cleanup() {
|
|
GLctx.disableVertexAttribArray(this.positionLocation);
|
|
if (this.hasTextures) {
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
if (GLImmediate.enabledClientAttributes[GLImmediate.TEXTURE0+i] && this.texCoordLocations[i] >= 0) {
|
|
GLctx.disableVertexAttribArray(this.texCoordLocations[i]);
|
|
}
|
|
}
|
|
}
|
|
if (this.hasColor) {
|
|
GLctx.disableVertexAttribArray(this.colorLocation);
|
|
}
|
|
if (this.hasNormal) {
|
|
GLctx.disableVertexAttribArray(this.normalLocation);
|
|
}
|
|
if (!GL.currProgram) {
|
|
GLctx.useProgram(null);
|
|
GLImmediate.fixedFunctionProgram = 0;
|
|
}
|
|
if (!GL.currArrayBuffer) {
|
|
GLctx.bindBuffer(GLctx.ARRAY_BUFFER, null);
|
|
GLImmediate.lastArrayBuffer = null;
|
|
}
|
|
|
|
GLImmediate.lastRenderer = null;
|
|
GLImmediate.lastProgram = null;
|
|
GLImmediate.matricesModified = true;
|
|
}
|
|
};
|
|
ret.init();
|
|
return ret;
|
|
},setupFuncs:function () {
|
|
// Replace some functions with immediate-mode aware versions. If there are no client
|
|
// attributes enabled, and we use webgl-friendly modes (no GL_QUADS), then no need
|
|
// for emulation
|
|
_glDrawArrays = _emscripten_glDrawArrays = function _glDrawArrays(mode, first, count) {
|
|
if (GLImmediate.totalEnabledClientAttributes == 0 && mode <= 6) {
|
|
GLctx.drawArrays(mode, first, count);
|
|
return;
|
|
}
|
|
GLImmediate.prepareClientAttributes(count, false);
|
|
GLImmediate.mode = mode;
|
|
if (!GL.currArrayBuffer) {
|
|
GLImmediate.vertexData = HEAPF32.subarray((GLImmediate.vertexPointer)>>2,(GLImmediate.vertexPointer + (first+count)*GLImmediate.stride)>>2); // XXX assuming float
|
|
GLImmediate.firstVertex = first;
|
|
GLImmediate.lastVertex = first + count;
|
|
}
|
|
GLImmediate.flush(null, first);
|
|
GLImmediate.mode = -1;
|
|
};
|
|
|
|
_glDrawElements = _emscripten_glDrawElements = function _glDrawElements(mode, count, type, indices, start, end) { // start, end are given if we come from glDrawRangeElements
|
|
if (GLImmediate.totalEnabledClientAttributes == 0 && mode <= 6 && GL.currElementArrayBuffer) {
|
|
GLctx.drawElements(mode, count, type, indices);
|
|
return;
|
|
}
|
|
GLImmediate.prepareClientAttributes(count, false);
|
|
GLImmediate.mode = mode;
|
|
if (!GL.currArrayBuffer) {
|
|
GLImmediate.firstVertex = end ? start : TOTAL_MEMORY; // if we don't know the start, set an invalid value and we will calculate it later from the indices
|
|
GLImmediate.lastVertex = end ? end+1 : 0;
|
|
GLImmediate.vertexData = HEAPF32.subarray((GLImmediate.vertexPointer)>>2,((end ? GLImmediate.vertexPointer + (end+1)*GLImmediate.stride : TOTAL_MEMORY))>>2); // XXX assuming float
|
|
}
|
|
GLImmediate.flush(count, 0, indices);
|
|
GLImmediate.mode = -1;
|
|
};
|
|
|
|
// TexEnv stuff needs to be prepared early, so do it here.
|
|
// init() is too late for -O2, since it freezes the GL functions
|
|
// by that point.
|
|
GLImmediate.MapTreeLib = GLImmediate.spawnMapTreeLib();
|
|
GLImmediate.spawnMapTreeLib = null;
|
|
|
|
GLImmediate.TexEnvJIT = GLImmediate.spawnTexEnvJIT();
|
|
GLImmediate.spawnTexEnvJIT = null;
|
|
|
|
GLImmediate.setupHooks();
|
|
},setupHooks:function () {
|
|
if (!GLEmulation.hasRunInit) {
|
|
GLEmulation.init();
|
|
}
|
|
|
|
var glActiveTexture = _glActiveTexture;
|
|
_glActiveTexture = _emscripten_glActiveTexture = function _glActiveTexture(texture) {
|
|
GLImmediate.TexEnvJIT.hook_activeTexture(texture);
|
|
glActiveTexture(texture);
|
|
};
|
|
|
|
var glEnable = _glEnable;
|
|
_glEnable = _emscripten_glEnable = function _glEnable(cap) {
|
|
GLImmediate.TexEnvJIT.hook_enable(cap);
|
|
glEnable(cap);
|
|
};
|
|
var glDisable = _glDisable;
|
|
_glDisable = _emscripten_glDisable = function _glDisable(cap) {
|
|
GLImmediate.TexEnvJIT.hook_disable(cap);
|
|
glDisable(cap);
|
|
};
|
|
|
|
var glTexEnvf = (typeof(_glTexEnvf) != 'undefined') ? _glTexEnvf : function(){};
|
|
_glTexEnvf = _emscripten_glTexEnvf = function _glTexEnvf(target, pname, param) {
|
|
GLImmediate.TexEnvJIT.hook_texEnvf(target, pname, param);
|
|
// Don't call old func, since we are the implementor.
|
|
//glTexEnvf(target, pname, param);
|
|
};
|
|
var glTexEnvi = (typeof(_glTexEnvi) != 'undefined') ? _glTexEnvi : function(){};
|
|
_glTexEnvi = _emscripten_glTexEnvi = function _glTexEnvi(target, pname, param) {
|
|
GLImmediate.TexEnvJIT.hook_texEnvi(target, pname, param);
|
|
// Don't call old func, since we are the implementor.
|
|
//glTexEnvi(target, pname, param);
|
|
};
|
|
var glTexEnvfv = (typeof(_glTexEnvfv) != 'undefined') ? _glTexEnvfv : function(){};
|
|
_glTexEnvfv = _emscripten_glTexEnvfv = function _glTexEnvfv(target, pname, param) {
|
|
GLImmediate.TexEnvJIT.hook_texEnvfv(target, pname, param);
|
|
// Don't call old func, since we are the implementor.
|
|
//glTexEnvfv(target, pname, param);
|
|
};
|
|
|
|
_glGetTexEnviv = function _glGetTexEnviv(target, pname, param) {
|
|
GLImmediate.TexEnvJIT.hook_getTexEnviv(target, pname, param);
|
|
};
|
|
|
|
_glGetTexEnvfv = function _glGetTexEnvfv(target, pname, param) {
|
|
GLImmediate.TexEnvJIT.hook_getTexEnvfv(target, pname, param);
|
|
};
|
|
|
|
var glGetIntegerv = _glGetIntegerv;
|
|
_glGetIntegerv = _emscripten_glGetIntegerv = function _glGetIntegerv(pname, params) {
|
|
switch (pname) {
|
|
case 0x8B8D: { // GL_CURRENT_PROGRAM
|
|
// Just query directly so we're working with WebGL objects.
|
|
var cur = GLctx.getParameter(GLctx.CURRENT_PROGRAM);
|
|
if (cur == GLImmediate.fixedFunctionProgram) {
|
|
// Pretend we're not using a program.
|
|
HEAP32[((params)>>2)]=0;
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
glGetIntegerv(pname, params);
|
|
};
|
|
},initted:false,init:function () {
|
|
Module.printErr('WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supports');
|
|
GLImmediate.initted = true;
|
|
|
|
if (!Module.useWebGL) return; // a 2D canvas may be currently used TODO: make sure we are actually called in that case
|
|
|
|
// User can override the maximum number of texture units that we emulate. Using fewer texture units increases runtime performance
|
|
// slightly, so it is advantageous to choose as small value as needed.
|
|
GLImmediate.MAX_TEXTURES = Module['GL_MAX_TEXTURE_IMAGE_UNITS'] || GLctx.getParameter(GLctx.MAX_TEXTURE_IMAGE_UNITS);
|
|
|
|
GLImmediate.TexEnvJIT.init(GLctx, GLImmediate.MAX_TEXTURES);
|
|
|
|
GLImmediate.NUM_ATTRIBUTES = 3 /*pos+normal+color attributes*/ + GLImmediate.MAX_TEXTURES;
|
|
GLImmediate.clientAttributes = [];
|
|
GLEmulation.enabledClientAttribIndices = [];
|
|
for (var i = 0; i < GLImmediate.NUM_ATTRIBUTES; i++) {
|
|
GLImmediate.clientAttributes.push({});
|
|
GLEmulation.enabledClientAttribIndices.push(false);
|
|
}
|
|
|
|
// Initialize matrix library
|
|
// When user sets a matrix, increment a 'version number' on the new data, and when rendering, submit
|
|
// the matrices to the shader program only if they have an old version of the data.
|
|
GLImmediate.matrix = [];
|
|
GLImmediate.matrixStack = [];
|
|
GLImmediate.matrixVersion = [];
|
|
for (var i = 0; i < 2 + GLImmediate.MAX_TEXTURES; i++) { // Modelview, Projection, plus one matrix for each texture coordinate.
|
|
GLImmediate.matrixStack.push([]);
|
|
GLImmediate.matrixVersion.push(0);
|
|
GLImmediate.matrix.push(GLImmediate.matrixLib.mat4.create());
|
|
GLImmediate.matrixLib.mat4.identity(GLImmediate.matrix[i]);
|
|
}
|
|
|
|
// Renderer cache
|
|
GLImmediate.rendererCache = GLImmediate.MapTreeLib.create();
|
|
|
|
// Buffers for data
|
|
GLImmediate.tempData = new Float32Array(GL.MAX_TEMP_BUFFER_SIZE >> 2);
|
|
GLImmediate.indexData = new Uint16Array(GL.MAX_TEMP_BUFFER_SIZE >> 1);
|
|
|
|
GLImmediate.vertexDataU8 = new Uint8Array(GLImmediate.tempData.buffer);
|
|
|
|
GL.generateTempBuffers(true);
|
|
|
|
GLImmediate.clientColor = new Float32Array([1, 1, 1, 1]);
|
|
},prepareClientAttributes:function prepareClientAttributes(count, beginEnd) {
|
|
// If no client attributes were modified since we were last called, do nothing. Note that this
|
|
// does not work for glBegin/End, where we generate renderer components dynamically and then
|
|
// disable them ourselves, but it does help with glDrawElements/Arrays.
|
|
if (!GLImmediate.modifiedClientAttributes) {
|
|
GLImmediate.vertexCounter = (GLImmediate.stride * count) / 4; // XXX assuming float
|
|
return;
|
|
}
|
|
GLImmediate.modifiedClientAttributes = false;
|
|
|
|
// The role of prepareClientAttributes is to examine the set of client-side vertex attribute buffers
|
|
// that user code has submitted, and to prepare them to be uploaded to a VBO in GPU memory
|
|
// (since WebGL does not support client-side rendering, i.e. rendering from vertex data in CPU memory)
|
|
// User can submit vertex data generally in three different configurations:
|
|
// 1. Fully planar: all attributes are in their own separate tightly-packed arrays in CPU memory.
|
|
// 2. Fully interleaved: all attributes share a single array where data is interleaved something like (pos,uv,normal), (pos,uv,normal), ...
|
|
// 3. Complex hybrid: Multiple separate arrays that either are sparsely strided, and/or partially interleave vertex attributes.
|
|
|
|
// For simplicity, we support the case (2) as the fast case. For (1) and (3), we do a memory copy of the
|
|
// vertex data here to prepare a relayouted buffer that is of the structure in case (2). The reason
|
|
// for this is that it allows the emulation code to get away with using just one VBO buffer for rendering,
|
|
// and not have to maintain multiple ones. Therefore cases (1) and (3) will be very slow, and case (2) is fast.
|
|
|
|
// Detect which case we are in by using a quick heuristic by examining the strides of the buffers. If all the buffers have identical
|
|
// stride, we assume we have case (2), otherwise we have something more complex.
|
|
var clientStartPointer = 0x7FFFFFFF;
|
|
var bytes = 0; // Total number of bytes taken up by a single vertex.
|
|
var minStride = 0x7FFFFFFF;
|
|
var maxStride = 0;
|
|
var attributes = GLImmediate.liveClientAttributes;
|
|
attributes.length = 0;
|
|
for (var i = 0; i < 3+GLImmediate.MAX_TEXTURES; i++) {
|
|
if (GLImmediate.enabledClientAttributes[i]) {
|
|
var attr = GLImmediate.clientAttributes[i];
|
|
attributes.push(attr);
|
|
clientStartPointer = Math.min(clientStartPointer, attr.pointer);
|
|
attr.sizeBytes = attr.size * GL.byteSizeByType[attr.type - GL.byteSizeByTypeRoot];
|
|
bytes += attr.sizeBytes;
|
|
minStride = Math.min(minStride, attr.stride);
|
|
maxStride = Math.max(maxStride, attr.stride);
|
|
}
|
|
}
|
|
|
|
if ((minStride != maxStride || maxStride < bytes) && !beginEnd) {
|
|
// We are in cases (1) or (3): slow path, shuffle the data around into a single interleaved vertex buffer.
|
|
// The immediate-mode glBegin()/glEnd() vertex submission gets automatically generated in appropriate layout,
|
|
// so never need to come down this path if that was used.
|
|
if (!GLImmediate.restrideBuffer) GLImmediate.restrideBuffer = _malloc(GL.MAX_TEMP_BUFFER_SIZE);
|
|
var start = GLImmediate.restrideBuffer;
|
|
bytes = 0;
|
|
// calculate restrided offsets and total size
|
|
for (var i = 0; i < attributes.length; i++) {
|
|
var attr = attributes[i];
|
|
var size = attr.sizeBytes;
|
|
if (size % 4 != 0) size += 4 - (size % 4); // align everything
|
|
attr.offset = bytes;
|
|
bytes += size;
|
|
}
|
|
// copy out the data (we need to know the stride for that, and define attr.pointer)
|
|
for (var i = 0; i < attributes.length; i++) {
|
|
var attr = attributes[i];
|
|
var srcStride = Math.max(attr.sizeBytes, attr.stride);
|
|
if ((srcStride & 3) == 0 && (attr.sizeBytes & 3) == 0) {
|
|
var size4 = attr.sizeBytes>>2;
|
|
var srcStride4 = Math.max(attr.sizeBytes, attr.stride)>>2;
|
|
for (var j = 0; j < count; j++) {
|
|
for (var k = 0; k < size4; k++) { // copy in chunks of 4 bytes, our alignment makes this possible
|
|
HEAP32[((start + attr.offset + bytes*j)>>2) + k] = HEAP32[(attr.pointer>>2) + j*srcStride4 + k];
|
|
}
|
|
}
|
|
} else {
|
|
for (var j = 0; j < count; j++) {
|
|
for (var k = 0; k < attr.sizeBytes; k++) { // source data was not aligned to multiples of 4, must copy byte by byte.
|
|
HEAP8[start + attr.offset + bytes*j + k] = HEAP8[attr.pointer + j*srcStride + k];
|
|
}
|
|
}
|
|
}
|
|
attr.pointer = start + attr.offset;
|
|
}
|
|
GLImmediate.stride = bytes;
|
|
GLImmediate.vertexPointer = start;
|
|
} else {
|
|
// case (2): fast path, all data is interleaved to a single vertex array so we can get away with a single VBO upload.
|
|
if (GL.currArrayBuffer) {
|
|
GLImmediate.vertexPointer = 0;
|
|
} else {
|
|
GLImmediate.vertexPointer = clientStartPointer;
|
|
}
|
|
for (var i = 0; i < attributes.length; i++) {
|
|
var attr = attributes[i];
|
|
attr.offset = attr.pointer - GLImmediate.vertexPointer; // Compute what will be the offset of this attribute in the VBO after we upload.
|
|
}
|
|
GLImmediate.stride = Math.max(maxStride, bytes);
|
|
}
|
|
if (!beginEnd) {
|
|
GLImmediate.vertexCounter = (GLImmediate.stride * count) / 4; // XXX assuming float
|
|
}
|
|
},flush:function flush(numProvidedIndexes, startIndex, ptr) {
|
|
startIndex = startIndex || 0;
|
|
ptr = ptr || 0;
|
|
|
|
var renderer = GLImmediate.getRenderer();
|
|
|
|
// Generate index data in a format suitable for GLES 2.0/WebGL
|
|
var numVertexes = 4 * GLImmediate.vertexCounter / GLImmediate.stride;
|
|
var emulatedElementArrayBuffer = false;
|
|
var numIndexes = 0;
|
|
if (numProvidedIndexes) {
|
|
numIndexes = numProvidedIndexes;
|
|
if (!GL.currArrayBuffer && GLImmediate.firstVertex > GLImmediate.lastVertex) {
|
|
// Figure out the first and last vertex from the index data
|
|
for (var i = 0; i < numProvidedIndexes; i++) {
|
|
var currIndex = HEAPU16[(((ptr)+(i*2))>>1)];
|
|
GLImmediate.firstVertex = Math.min(GLImmediate.firstVertex, currIndex);
|
|
GLImmediate.lastVertex = Math.max(GLImmediate.lastVertex, currIndex+1);
|
|
}
|
|
}
|
|
if (!GL.currElementArrayBuffer) {
|
|
// If no element array buffer is bound, then indices is a literal pointer to clientside data
|
|
var indexBuffer = GL.getTempIndexBuffer(numProvidedIndexes << 1);
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
GLctx.bufferSubData(GLctx.ELEMENT_ARRAY_BUFFER, 0, HEAPU16.subarray((ptr)>>1,(ptr + (numProvidedIndexes << 1))>>1));
|
|
ptr = 0;
|
|
emulatedElementArrayBuffer = true;
|
|
}
|
|
} else if (GLImmediate.mode > 6) { // above GL_TRIANGLE_FAN are the non-GL ES modes
|
|
if (GLImmediate.mode != 7) throw 'unsupported immediate mode ' + GLImmediate.mode; // GL_QUADS
|
|
// GLImmediate.firstVertex is the first vertex we want. Quad indexes are in the pattern
|
|
// 0 1 2, 0 2 3, 4 5 6, 4 6 7, so we need to look at index firstVertex * 1.5 to see it.
|
|
// Then since indexes are 2 bytes each, that means 3
|
|
ptr = GLImmediate.firstVertex*3;
|
|
var numQuads = numVertexes / 4;
|
|
numIndexes = numQuads * 6; // 0 1 2, 0 2 3 pattern
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, GL.tempQuadIndexBuffer);
|
|
emulatedElementArrayBuffer = true;
|
|
}
|
|
|
|
renderer.prepare();
|
|
|
|
if (numIndexes) {
|
|
GLctx.drawElements(GLctx.TRIANGLES, numIndexes, GLctx.UNSIGNED_SHORT, ptr);
|
|
} else {
|
|
GLctx.drawArrays(GLImmediate.mode, startIndex, numVertexes);
|
|
}
|
|
|
|
if (emulatedElementArrayBuffer) {
|
|
GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER, GL.buffers[GL.currElementArrayBuffer] || null);
|
|
}
|
|
|
|
}};
|
|
GLImmediate.matrixLib = (function() {
|
|
|
|
/**
|
|
* @fileoverview gl-matrix - High performance matrix and vector operations for WebGL
|
|
* @author Brandon Jones
|
|
* @version 1.2.4
|
|
*/
|
|
|
|
// Modifed for emscripten: Global scoping etc.
|
|
|
|
/*
|
|
* Copyright (c) 2011 Brandon Jones
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any damages
|
|
* arising from the use of this software.
|
|
*
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
* including commercial applications, and to alter it and redistribute it
|
|
* freely, subject to the following restrictions:
|
|
*
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
* claim that you wrote the original software. If you use this software
|
|
* in a product, an acknowledgment in the product documentation would be
|
|
* appreciated but is not required.
|
|
*
|
|
* 2. Altered source versions must be plainly marked as such, and must not
|
|
* be misrepresented as being the original software.
|
|
*
|
|
* 3. This notice may not be removed or altered from any source
|
|
* distribution.
|
|
*/
|
|
|
|
|
|
/**
|
|
* @class 3 Dimensional Vector
|
|
* @name vec3
|
|
*/
|
|
var vec3 = {};
|
|
|
|
/**
|
|
* @class 3x3 Matrix
|
|
* @name mat3
|
|
*/
|
|
var mat3 = {};
|
|
|
|
/**
|
|
* @class 4x4 Matrix
|
|
* @name mat4
|
|
*/
|
|
var mat4 = {};
|
|
|
|
/**
|
|
* @class Quaternion
|
|
* @name quat4
|
|
*/
|
|
var quat4 = {};
|
|
|
|
var MatrixArray = Float32Array;
|
|
|
|
/*
|
|
* vec3
|
|
*/
|
|
|
|
/**
|
|
* Creates a new instance of a vec3 using the default array type
|
|
* Any javascript array-like objects containing at least 3 numeric elements can serve as a vec3
|
|
*
|
|
* @param {vec3} [vec] vec3 containing values to initialize with
|
|
*
|
|
* @returns {vec3} New vec3
|
|
*/
|
|
vec3.create = function (vec) {
|
|
var dest = new MatrixArray(3);
|
|
|
|
if (vec) {
|
|
dest[0] = vec[0];
|
|
dest[1] = vec[1];
|
|
dest[2] = vec[2];
|
|
} else {
|
|
dest[0] = dest[1] = dest[2] = 0;
|
|
}
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the values of one vec3 to another
|
|
*
|
|
* @param {vec3} vec vec3 containing values to copy
|
|
* @param {vec3} dest vec3 receiving copied values
|
|
*
|
|
* @returns {vec3} dest
|
|
*/
|
|
vec3.set = function (vec, dest) {
|
|
dest[0] = vec[0];
|
|
dest[1] = vec[1];
|
|
dest[2] = vec[2];
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a vector addition
|
|
*
|
|
* @param {vec3} vec First operand
|
|
* @param {vec3} vec2 Second operand
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.add = function (vec, vec2, dest) {
|
|
if (!dest || vec === dest) {
|
|
vec[0] += vec2[0];
|
|
vec[1] += vec2[1];
|
|
vec[2] += vec2[2];
|
|
return vec;
|
|
}
|
|
|
|
dest[0] = vec[0] + vec2[0];
|
|
dest[1] = vec[1] + vec2[1];
|
|
dest[2] = vec[2] + vec2[2];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a vector subtraction
|
|
*
|
|
* @param {vec3} vec First operand
|
|
* @param {vec3} vec2 Second operand
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.subtract = function (vec, vec2, dest) {
|
|
if (!dest || vec === dest) {
|
|
vec[0] -= vec2[0];
|
|
vec[1] -= vec2[1];
|
|
vec[2] -= vec2[2];
|
|
return vec;
|
|
}
|
|
|
|
dest[0] = vec[0] - vec2[0];
|
|
dest[1] = vec[1] - vec2[1];
|
|
dest[2] = vec[2] - vec2[2];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a vector multiplication
|
|
*
|
|
* @param {vec3} vec First operand
|
|
* @param {vec3} vec2 Second operand
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.multiply = function (vec, vec2, dest) {
|
|
if (!dest || vec === dest) {
|
|
vec[0] *= vec2[0];
|
|
vec[1] *= vec2[1];
|
|
vec[2] *= vec2[2];
|
|
return vec;
|
|
}
|
|
|
|
dest[0] = vec[0] * vec2[0];
|
|
dest[1] = vec[1] * vec2[1];
|
|
dest[2] = vec[2] * vec2[2];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Negates the components of a vec3
|
|
*
|
|
* @param {vec3} vec vec3 to negate
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.negate = function (vec, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
dest[0] = -vec[0];
|
|
dest[1] = -vec[1];
|
|
dest[2] = -vec[2];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Multiplies the components of a vec3 by a scalar value
|
|
*
|
|
* @param {vec3} vec vec3 to scale
|
|
* @param {number} val Value to scale by
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.scale = function (vec, val, dest) {
|
|
if (!dest || vec === dest) {
|
|
vec[0] *= val;
|
|
vec[1] *= val;
|
|
vec[2] *= val;
|
|
return vec;
|
|
}
|
|
|
|
dest[0] = vec[0] * val;
|
|
dest[1] = vec[1] * val;
|
|
dest[2] = vec[2] * val;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Generates a unit vector of the same direction as the provided vec3
|
|
* If vector length is 0, returns [0, 0, 0]
|
|
*
|
|
* @param {vec3} vec vec3 to normalize
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.normalize = function (vec, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var x = vec[0], y = vec[1], z = vec[2],
|
|
len = Math.sqrt(x * x + y * y + z * z);
|
|
|
|
if (!len) {
|
|
dest[0] = 0;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
return dest;
|
|
} else if (len === 1) {
|
|
dest[0] = x;
|
|
dest[1] = y;
|
|
dest[2] = z;
|
|
return dest;
|
|
}
|
|
|
|
len = 1 / len;
|
|
dest[0] = x * len;
|
|
dest[1] = y * len;
|
|
dest[2] = z * len;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Generates the cross product of two vec3s
|
|
*
|
|
* @param {vec3} vec First operand
|
|
* @param {vec3} vec2 Second operand
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.cross = function (vec, vec2, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var x = vec[0], y = vec[1], z = vec[2],
|
|
x2 = vec2[0], y2 = vec2[1], z2 = vec2[2];
|
|
|
|
dest[0] = y * z2 - z * y2;
|
|
dest[1] = z * x2 - x * z2;
|
|
dest[2] = x * y2 - y * x2;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Caclulates the length of a vec3
|
|
*
|
|
* @param {vec3} vec vec3 to calculate length of
|
|
*
|
|
* @returns {number} Length of vec
|
|
*/
|
|
vec3.length = function (vec) {
|
|
var x = vec[0], y = vec[1], z = vec[2];
|
|
return Math.sqrt(x * x + y * y + z * z);
|
|
};
|
|
|
|
/**
|
|
* Caclulates the dot product of two vec3s
|
|
*
|
|
* @param {vec3} vec First operand
|
|
* @param {vec3} vec2 Second operand
|
|
*
|
|
* @returns {number} Dot product of vec and vec2
|
|
*/
|
|
vec3.dot = function (vec, vec2) {
|
|
return vec[0] * vec2[0] + vec[1] * vec2[1] + vec[2] * vec2[2];
|
|
};
|
|
|
|
/**
|
|
* Generates a unit vector pointing from one vector to another
|
|
*
|
|
* @param {vec3} vec Origin vec3
|
|
* @param {vec3} vec2 vec3 to point to
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.direction = function (vec, vec2, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var x = vec[0] - vec2[0],
|
|
y = vec[1] - vec2[1],
|
|
z = vec[2] - vec2[2],
|
|
len = Math.sqrt(x * x + y * y + z * z);
|
|
|
|
if (!len) {
|
|
dest[0] = 0;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
return dest;
|
|
}
|
|
|
|
len = 1 / len;
|
|
dest[0] = x * len;
|
|
dest[1] = y * len;
|
|
dest[2] = z * len;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a linear interpolation between two vec3
|
|
*
|
|
* @param {vec3} vec First vector
|
|
* @param {vec3} vec2 Second vector
|
|
* @param {number} lerp Interpolation amount between the two inputs
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.lerp = function (vec, vec2, lerp, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
dest[0] = vec[0] + lerp * (vec2[0] - vec[0]);
|
|
dest[1] = vec[1] + lerp * (vec2[1] - vec[1]);
|
|
dest[2] = vec[2] + lerp * (vec2[2] - vec[2]);
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates the euclidian distance between two vec3
|
|
*
|
|
* Params:
|
|
* @param {vec3} vec First vector
|
|
* @param {vec3} vec2 Second vector
|
|
*
|
|
* @returns {number} Distance between vec and vec2
|
|
*/
|
|
vec3.dist = function (vec, vec2) {
|
|
var x = vec2[0] - vec[0],
|
|
y = vec2[1] - vec[1],
|
|
z = vec2[2] - vec[2];
|
|
|
|
return Math.sqrt(x*x + y*y + z*z);
|
|
};
|
|
|
|
/**
|
|
* Projects the specified vec3 from screen space into object space
|
|
* Based on the <a href="http://webcvs.freedesktop.org/mesa/Mesa/src/glu/mesa/project.c?revision=1.4&view=markup">Mesa gluUnProject implementation</a>
|
|
*
|
|
* @param {vec3} vec Screen-space vector to project
|
|
* @param {mat4} view View matrix
|
|
* @param {mat4} proj Projection matrix
|
|
* @param {vec4} viewport Viewport as given to gl.viewport [x, y, width, height]
|
|
* @param {vec3} [dest] vec3 receiving unprojected result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
vec3.unproject = function (vec, view, proj, viewport, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var m = mat4.create();
|
|
var v = new MatrixArray(4);
|
|
|
|
v[0] = (vec[0] - viewport[0]) * 2.0 / viewport[2] - 1.0;
|
|
v[1] = (vec[1] - viewport[1]) * 2.0 / viewport[3] - 1.0;
|
|
v[2] = 2.0 * vec[2] - 1.0;
|
|
v[3] = 1.0;
|
|
|
|
mat4.multiply(proj, view, m);
|
|
if(!mat4.inverse(m)) { return null; }
|
|
|
|
mat4.multiplyVec4(m, v);
|
|
if(v[3] === 0.0) { return null; }
|
|
|
|
dest[0] = v[0] / v[3];
|
|
dest[1] = v[1] / v[3];
|
|
dest[2] = v[2] / v[3];
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Returns a string representation of a vector
|
|
*
|
|
* @param {vec3} vec Vector to represent as a string
|
|
*
|
|
* @returns {string} String representation of vec
|
|
*/
|
|
vec3.str = function (vec) {
|
|
return '[' + vec[0] + ', ' + vec[1] + ', ' + vec[2] + ']';
|
|
};
|
|
|
|
/*
|
|
* mat3
|
|
*/
|
|
|
|
/**
|
|
* Creates a new instance of a mat3 using the default array type
|
|
* Any javascript array-like object containing at least 9 numeric elements can serve as a mat3
|
|
*
|
|
* @param {mat3} [mat] mat3 containing values to initialize with
|
|
*
|
|
* @returns {mat3} New mat3
|
|
*/
|
|
mat3.create = function (mat) {
|
|
var dest = new MatrixArray(9);
|
|
|
|
if (mat) {
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[3];
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[6];
|
|
dest[7] = mat[7];
|
|
dest[8] = mat[8];
|
|
}
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the values of one mat3 to another
|
|
*
|
|
* @param {mat3} mat mat3 containing values to copy
|
|
* @param {mat3} dest mat3 receiving copied values
|
|
*
|
|
* @returns {mat3} dest
|
|
*/
|
|
mat3.set = function (mat, dest) {
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[3];
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[6];
|
|
dest[7] = mat[7];
|
|
dest[8] = mat[8];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Sets a mat3 to an identity matrix
|
|
*
|
|
* @param {mat3} dest mat3 to set
|
|
*
|
|
* @returns dest if specified, otherwise a new mat3
|
|
*/
|
|
mat3.identity = function (dest) {
|
|
if (!dest) { dest = mat3.create(); }
|
|
dest[0] = 1;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
dest[3] = 0;
|
|
dest[4] = 1;
|
|
dest[5] = 0;
|
|
dest[6] = 0;
|
|
dest[7] = 0;
|
|
dest[8] = 1;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Transposes a mat3 (flips the values over the diagonal)
|
|
*
|
|
* Params:
|
|
* @param {mat3} mat mat3 to transpose
|
|
* @param {mat3} [dest] mat3 receiving transposed values. If not specified result is written to mat
|
|
*
|
|
* @returns {mat3} dest is specified, mat otherwise
|
|
*/
|
|
mat3.transpose = function (mat, dest) {
|
|
// If we are transposing ourselves we can skip a few steps but have to cache some values
|
|
if (!dest || mat === dest) {
|
|
var a01 = mat[1], a02 = mat[2],
|
|
a12 = mat[5];
|
|
|
|
mat[1] = mat[3];
|
|
mat[2] = mat[6];
|
|
mat[3] = a01;
|
|
mat[5] = mat[7];
|
|
mat[6] = a02;
|
|
mat[7] = a12;
|
|
return mat;
|
|
}
|
|
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[3];
|
|
dest[2] = mat[6];
|
|
dest[3] = mat[1];
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[7];
|
|
dest[6] = mat[2];
|
|
dest[7] = mat[5];
|
|
dest[8] = mat[8];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the elements of a mat3 into the upper 3x3 elements of a mat4
|
|
*
|
|
* @param {mat3} mat mat3 containing values to copy
|
|
* @param {mat4} [dest] mat4 receiving copied values
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
mat3.toMat4 = function (mat, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
|
|
dest[15] = 1;
|
|
dest[14] = 0;
|
|
dest[13] = 0;
|
|
dest[12] = 0;
|
|
|
|
dest[11] = 0;
|
|
dest[10] = mat[8];
|
|
dest[9] = mat[7];
|
|
dest[8] = mat[6];
|
|
|
|
dest[7] = 0;
|
|
dest[6] = mat[5];
|
|
dest[5] = mat[4];
|
|
dest[4] = mat[3];
|
|
|
|
dest[3] = 0;
|
|
dest[2] = mat[2];
|
|
dest[1] = mat[1];
|
|
dest[0] = mat[0];
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Returns a string representation of a mat3
|
|
*
|
|
* @param {mat3} mat mat3 to represent as a string
|
|
*
|
|
* @param {string} String representation of mat
|
|
*/
|
|
mat3.str = function (mat) {
|
|
return '[' + mat[0] + ', ' + mat[1] + ', ' + mat[2] +
|
|
', ' + mat[3] + ', ' + mat[4] + ', ' + mat[5] +
|
|
', ' + mat[6] + ', ' + mat[7] + ', ' + mat[8] + ']';
|
|
};
|
|
|
|
/*
|
|
* mat4
|
|
*/
|
|
|
|
/**
|
|
* Creates a new instance of a mat4 using the default array type
|
|
* Any javascript array-like object containing at least 16 numeric elements can serve as a mat4
|
|
*
|
|
* @param {mat4} [mat] mat4 containing values to initialize with
|
|
*
|
|
* @returns {mat4} New mat4
|
|
*/
|
|
mat4.create = function (mat) {
|
|
var dest = new MatrixArray(16);
|
|
|
|
if (mat) {
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[3];
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[6];
|
|
dest[7] = mat[7];
|
|
dest[8] = mat[8];
|
|
dest[9] = mat[9];
|
|
dest[10] = mat[10];
|
|
dest[11] = mat[11];
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
}
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the values of one mat4 to another
|
|
*
|
|
* @param {mat4} mat mat4 containing values to copy
|
|
* @param {mat4} dest mat4 receiving copied values
|
|
*
|
|
* @returns {mat4} dest
|
|
*/
|
|
mat4.set = function (mat, dest) {
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[3];
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[6];
|
|
dest[7] = mat[7];
|
|
dest[8] = mat[8];
|
|
dest[9] = mat[9];
|
|
dest[10] = mat[10];
|
|
dest[11] = mat[11];
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Sets a mat4 to an identity matrix
|
|
*
|
|
* @param {mat4} dest mat4 to set
|
|
*
|
|
* @returns {mat4} dest
|
|
*/
|
|
mat4.identity = function (dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
dest[0] = 1;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
dest[3] = 0;
|
|
dest[4] = 0;
|
|
dest[5] = 1;
|
|
dest[6] = 0;
|
|
dest[7] = 0;
|
|
dest[8] = 0;
|
|
dest[9] = 0;
|
|
dest[10] = 1;
|
|
dest[11] = 0;
|
|
dest[12] = 0;
|
|
dest[13] = 0;
|
|
dest[14] = 0;
|
|
dest[15] = 1;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Transposes a mat4 (flips the values over the diagonal)
|
|
*
|
|
* @param {mat4} mat mat4 to transpose
|
|
* @param {mat4} [dest] mat4 receiving transposed values. If not specified result is written to mat
|
|
*
|
|
* @param {mat4} dest is specified, mat otherwise
|
|
*/
|
|
mat4.transpose = function (mat, dest) {
|
|
// If we are transposing ourselves we can skip a few steps but have to cache some values
|
|
if (!dest || mat === dest) {
|
|
var a01 = mat[1], a02 = mat[2], a03 = mat[3],
|
|
a12 = mat[6], a13 = mat[7],
|
|
a23 = mat[11];
|
|
|
|
mat[1] = mat[4];
|
|
mat[2] = mat[8];
|
|
mat[3] = mat[12];
|
|
mat[4] = a01;
|
|
mat[6] = mat[9];
|
|
mat[7] = mat[13];
|
|
mat[8] = a02;
|
|
mat[9] = a12;
|
|
mat[11] = mat[14];
|
|
mat[12] = a03;
|
|
mat[13] = a13;
|
|
mat[14] = a23;
|
|
return mat;
|
|
}
|
|
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[4];
|
|
dest[2] = mat[8];
|
|
dest[3] = mat[12];
|
|
dest[4] = mat[1];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[9];
|
|
dest[7] = mat[13];
|
|
dest[8] = mat[2];
|
|
dest[9] = mat[6];
|
|
dest[10] = mat[10];
|
|
dest[11] = mat[14];
|
|
dest[12] = mat[3];
|
|
dest[13] = mat[7];
|
|
dest[14] = mat[11];
|
|
dest[15] = mat[15];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates the determinant of a mat4
|
|
*
|
|
* @param {mat4} mat mat4 to calculate determinant of
|
|
*
|
|
* @returns {number} determinant of mat
|
|
*/
|
|
mat4.determinant = function (mat) {
|
|
// Cache the matrix values (makes for huge speed increases!)
|
|
var a00 = mat[0], a01 = mat[1], a02 = mat[2], a03 = mat[3],
|
|
a10 = mat[4], a11 = mat[5], a12 = mat[6], a13 = mat[7],
|
|
a20 = mat[8], a21 = mat[9], a22 = mat[10], a23 = mat[11],
|
|
a30 = mat[12], a31 = mat[13], a32 = mat[14], a33 = mat[15];
|
|
|
|
return (a30 * a21 * a12 * a03 - a20 * a31 * a12 * a03 - a30 * a11 * a22 * a03 + a10 * a31 * a22 * a03 +
|
|
a20 * a11 * a32 * a03 - a10 * a21 * a32 * a03 - a30 * a21 * a02 * a13 + a20 * a31 * a02 * a13 +
|
|
a30 * a01 * a22 * a13 - a00 * a31 * a22 * a13 - a20 * a01 * a32 * a13 + a00 * a21 * a32 * a13 +
|
|
a30 * a11 * a02 * a23 - a10 * a31 * a02 * a23 - a30 * a01 * a12 * a23 + a00 * a31 * a12 * a23 +
|
|
a10 * a01 * a32 * a23 - a00 * a11 * a32 * a23 - a20 * a11 * a02 * a33 + a10 * a21 * a02 * a33 +
|
|
a20 * a01 * a12 * a33 - a00 * a21 * a12 * a33 - a10 * a01 * a22 * a33 + a00 * a11 * a22 * a33);
|
|
};
|
|
|
|
/**
|
|
* Calculates the inverse matrix of a mat4
|
|
*
|
|
* @param {mat4} mat mat4 to calculate inverse of
|
|
* @param {mat4} [dest] mat4 receiving inverse matrix. If not specified result is written to mat
|
|
*
|
|
* @param {mat4} dest is specified, mat otherwise, null if matrix cannot be inverted
|
|
*/
|
|
mat4.inverse = function (mat, dest) {
|
|
if (!dest) { dest = mat; }
|
|
|
|
// Cache the matrix values (makes for huge speed increases!)
|
|
var a00 = mat[0], a01 = mat[1], a02 = mat[2], a03 = mat[3],
|
|
a10 = mat[4], a11 = mat[5], a12 = mat[6], a13 = mat[7],
|
|
a20 = mat[8], a21 = mat[9], a22 = mat[10], a23 = mat[11],
|
|
a30 = mat[12], a31 = mat[13], a32 = mat[14], a33 = mat[15],
|
|
|
|
b00 = a00 * a11 - a01 * a10,
|
|
b01 = a00 * a12 - a02 * a10,
|
|
b02 = a00 * a13 - a03 * a10,
|
|
b03 = a01 * a12 - a02 * a11,
|
|
b04 = a01 * a13 - a03 * a11,
|
|
b05 = a02 * a13 - a03 * a12,
|
|
b06 = a20 * a31 - a21 * a30,
|
|
b07 = a20 * a32 - a22 * a30,
|
|
b08 = a20 * a33 - a23 * a30,
|
|
b09 = a21 * a32 - a22 * a31,
|
|
b10 = a21 * a33 - a23 * a31,
|
|
b11 = a22 * a33 - a23 * a32,
|
|
|
|
d = (b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06),
|
|
invDet;
|
|
|
|
// Calculate the determinant
|
|
if (!d) { return null; }
|
|
invDet = 1 / d;
|
|
|
|
dest[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;
|
|
dest[1] = (-a01 * b11 + a02 * b10 - a03 * b09) * invDet;
|
|
dest[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;
|
|
dest[3] = (-a21 * b05 + a22 * b04 - a23 * b03) * invDet;
|
|
dest[4] = (-a10 * b11 + a12 * b08 - a13 * b07) * invDet;
|
|
dest[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;
|
|
dest[6] = (-a30 * b05 + a32 * b02 - a33 * b01) * invDet;
|
|
dest[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;
|
|
dest[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;
|
|
dest[9] = (-a00 * b10 + a01 * b08 - a03 * b06) * invDet;
|
|
dest[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;
|
|
dest[11] = (-a20 * b04 + a21 * b02 - a23 * b00) * invDet;
|
|
dest[12] = (-a10 * b09 + a11 * b07 - a12 * b06) * invDet;
|
|
dest[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;
|
|
dest[14] = (-a30 * b03 + a31 * b01 - a32 * b00) * invDet;
|
|
dest[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the upper 3x3 elements of a mat4 into another mat4
|
|
*
|
|
* @param {mat4} mat mat4 containing values to copy
|
|
* @param {mat4} [dest] mat4 receiving copied values
|
|
*
|
|
* @returns {mat4} dest is specified, a new mat4 otherwise
|
|
*/
|
|
mat4.toRotationMat = function (mat, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[3];
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[6];
|
|
dest[7] = mat[7];
|
|
dest[8] = mat[8];
|
|
dest[9] = mat[9];
|
|
dest[10] = mat[10];
|
|
dest[11] = mat[11];
|
|
dest[12] = 0;
|
|
dest[13] = 0;
|
|
dest[14] = 0;
|
|
dest[15] = 1;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the upper 3x3 elements of a mat4 into a mat3
|
|
*
|
|
* @param {mat4} mat mat4 containing values to copy
|
|
* @param {mat3} [dest] mat3 receiving copied values
|
|
*
|
|
* @returns {mat3} dest is specified, a new mat3 otherwise
|
|
*/
|
|
mat4.toMat3 = function (mat, dest) {
|
|
if (!dest) { dest = mat3.create(); }
|
|
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[4];
|
|
dest[4] = mat[5];
|
|
dest[5] = mat[6];
|
|
dest[6] = mat[8];
|
|
dest[7] = mat[9];
|
|
dest[8] = mat[10];
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates the inverse of the upper 3x3 elements of a mat4 and copies the result into a mat3
|
|
* The resulting matrix is useful for calculating transformed normals
|
|
*
|
|
* Params:
|
|
* @param {mat4} mat mat4 containing values to invert and copy
|
|
* @param {mat3} [dest] mat3 receiving values
|
|
*
|
|
* @returns {mat3} dest is specified, a new mat3 otherwise, null if the matrix cannot be inverted
|
|
*/
|
|
mat4.toInverseMat3 = function (mat, dest) {
|
|
// Cache the matrix values (makes for huge speed increases!)
|
|
var a00 = mat[0], a01 = mat[1], a02 = mat[2],
|
|
a10 = mat[4], a11 = mat[5], a12 = mat[6],
|
|
a20 = mat[8], a21 = mat[9], a22 = mat[10],
|
|
|
|
b01 = a22 * a11 - a12 * a21,
|
|
b11 = -a22 * a10 + a12 * a20,
|
|
b21 = a21 * a10 - a11 * a20,
|
|
|
|
d = a00 * b01 + a01 * b11 + a02 * b21,
|
|
id;
|
|
|
|
if (!d) { return null; }
|
|
id = 1 / d;
|
|
|
|
if (!dest) { dest = mat3.create(); }
|
|
|
|
dest[0] = b01 * id;
|
|
dest[1] = (-a22 * a01 + a02 * a21) * id;
|
|
dest[2] = (a12 * a01 - a02 * a11) * id;
|
|
dest[3] = b11 * id;
|
|
dest[4] = (a22 * a00 - a02 * a20) * id;
|
|
dest[5] = (-a12 * a00 + a02 * a10) * id;
|
|
dest[6] = b21 * id;
|
|
dest[7] = (-a21 * a00 + a01 * a20) * id;
|
|
dest[8] = (a11 * a00 - a01 * a10) * id;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a matrix multiplication
|
|
*
|
|
* @param {mat4} mat First operand
|
|
* @param {mat4} mat2 Second operand
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @returns {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.multiply = function (mat, mat2, dest) {
|
|
if (!dest) { dest = mat; }
|
|
|
|
// Cache the matrix values (makes for huge speed increases!)
|
|
var a00 = mat[0], a01 = mat[1], a02 = mat[2], a03 = mat[3],
|
|
a10 = mat[4], a11 = mat[5], a12 = mat[6], a13 = mat[7],
|
|
a20 = mat[8], a21 = mat[9], a22 = mat[10], a23 = mat[11],
|
|
a30 = mat[12], a31 = mat[13], a32 = mat[14], a33 = mat[15],
|
|
|
|
b00 = mat2[0], b01 = mat2[1], b02 = mat2[2], b03 = mat2[3],
|
|
b10 = mat2[4], b11 = mat2[5], b12 = mat2[6], b13 = mat2[7],
|
|
b20 = mat2[8], b21 = mat2[9], b22 = mat2[10], b23 = mat2[11],
|
|
b30 = mat2[12], b31 = mat2[13], b32 = mat2[14], b33 = mat2[15];
|
|
|
|
dest[0] = b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30;
|
|
dest[1] = b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31;
|
|
dest[2] = b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32;
|
|
dest[3] = b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33;
|
|
dest[4] = b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30;
|
|
dest[5] = b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31;
|
|
dest[6] = b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32;
|
|
dest[7] = b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33;
|
|
dest[8] = b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30;
|
|
dest[9] = b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31;
|
|
dest[10] = b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32;
|
|
dest[11] = b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33;
|
|
dest[12] = b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30;
|
|
dest[13] = b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31;
|
|
dest[14] = b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32;
|
|
dest[15] = b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Transforms a vec3 with the given matrix
|
|
* 4th vector component is implicitly '1'
|
|
*
|
|
* @param {mat4} mat mat4 to transform the vector with
|
|
* @param {vec3} vec vec3 to transform
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec3} dest if specified, vec otherwise
|
|
*/
|
|
mat4.multiplyVec3 = function (mat, vec, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var x = vec[0], y = vec[1], z = vec[2];
|
|
|
|
dest[0] = mat[0] * x + mat[4] * y + mat[8] * z + mat[12];
|
|
dest[1] = mat[1] * x + mat[5] * y + mat[9] * z + mat[13];
|
|
dest[2] = mat[2] * x + mat[6] * y + mat[10] * z + mat[14];
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Transforms a vec4 with the given matrix
|
|
*
|
|
* @param {mat4} mat mat4 to transform the vector with
|
|
* @param {vec4} vec vec4 to transform
|
|
* @param {vec4} [dest] vec4 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns {vec4} dest if specified, vec otherwise
|
|
*/
|
|
mat4.multiplyVec4 = function (mat, vec, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var x = vec[0], y = vec[1], z = vec[2], w = vec[3];
|
|
|
|
dest[0] = mat[0] * x + mat[4] * y + mat[8] * z + mat[12] * w;
|
|
dest[1] = mat[1] * x + mat[5] * y + mat[9] * z + mat[13] * w;
|
|
dest[2] = mat[2] * x + mat[6] * y + mat[10] * z + mat[14] * w;
|
|
dest[3] = mat[3] * x + mat[7] * y + mat[11] * z + mat[15] * w;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Translates a matrix by the given vector
|
|
*
|
|
* @param {mat4} mat mat4 to translate
|
|
* @param {vec3} vec vec3 specifying the translation
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @returns {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.translate = function (mat, vec, dest) {
|
|
var x = vec[0], y = vec[1], z = vec[2],
|
|
a00, a01, a02, a03,
|
|
a10, a11, a12, a13,
|
|
a20, a21, a22, a23;
|
|
|
|
if (!dest || mat === dest) {
|
|
mat[12] = mat[0] * x + mat[4] * y + mat[8] * z + mat[12];
|
|
mat[13] = mat[1] * x + mat[5] * y + mat[9] * z + mat[13];
|
|
mat[14] = mat[2] * x + mat[6] * y + mat[10] * z + mat[14];
|
|
mat[15] = mat[3] * x + mat[7] * y + mat[11] * z + mat[15];
|
|
return mat;
|
|
}
|
|
|
|
a00 = mat[0]; a01 = mat[1]; a02 = mat[2]; a03 = mat[3];
|
|
a10 = mat[4]; a11 = mat[5]; a12 = mat[6]; a13 = mat[7];
|
|
a20 = mat[8]; a21 = mat[9]; a22 = mat[10]; a23 = mat[11];
|
|
|
|
dest[0] = a00; dest[1] = a01; dest[2] = a02; dest[3] = a03;
|
|
dest[4] = a10; dest[5] = a11; dest[6] = a12; dest[7] = a13;
|
|
dest[8] = a20; dest[9] = a21; dest[10] = a22; dest[11] = a23;
|
|
|
|
dest[12] = a00 * x + a10 * y + a20 * z + mat[12];
|
|
dest[13] = a01 * x + a11 * y + a21 * z + mat[13];
|
|
dest[14] = a02 * x + a12 * y + a22 * z + mat[14];
|
|
dest[15] = a03 * x + a13 * y + a23 * z + mat[15];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Scales a matrix by the given vector
|
|
*
|
|
* @param {mat4} mat mat4 to scale
|
|
* @param {vec3} vec vec3 specifying the scale for each axis
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @param {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.scale = function (mat, vec, dest) {
|
|
var x = vec[0], y = vec[1], z = vec[2];
|
|
|
|
if (!dest || mat === dest) {
|
|
mat[0] *= x;
|
|
mat[1] *= x;
|
|
mat[2] *= x;
|
|
mat[3] *= x;
|
|
mat[4] *= y;
|
|
mat[5] *= y;
|
|
mat[6] *= y;
|
|
mat[7] *= y;
|
|
mat[8] *= z;
|
|
mat[9] *= z;
|
|
mat[10] *= z;
|
|
mat[11] *= z;
|
|
return mat;
|
|
}
|
|
|
|
dest[0] = mat[0] * x;
|
|
dest[1] = mat[1] * x;
|
|
dest[2] = mat[2] * x;
|
|
dest[3] = mat[3] * x;
|
|
dest[4] = mat[4] * y;
|
|
dest[5] = mat[5] * y;
|
|
dest[6] = mat[6] * y;
|
|
dest[7] = mat[7] * y;
|
|
dest[8] = mat[8] * z;
|
|
dest[9] = mat[9] * z;
|
|
dest[10] = mat[10] * z;
|
|
dest[11] = mat[11] * z;
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Rotates a matrix by the given angle around the specified axis
|
|
* If rotating around a primary axis (X,Y,Z) one of the specialized rotation functions should be used instead for performance
|
|
*
|
|
* @param {mat4} mat mat4 to rotate
|
|
* @param {number} angle Angle (in radians) to rotate
|
|
* @param {vec3} axis vec3 representing the axis to rotate around
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @returns {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.rotate = function (mat, angle, axis, dest) {
|
|
var x = axis[0], y = axis[1], z = axis[2],
|
|
len = Math.sqrt(x * x + y * y + z * z),
|
|
s, c, t,
|
|
a00, a01, a02, a03,
|
|
a10, a11, a12, a13,
|
|
a20, a21, a22, a23,
|
|
b00, b01, b02,
|
|
b10, b11, b12,
|
|
b20, b21, b22;
|
|
|
|
if (!len) { return null; }
|
|
if (len !== 1) {
|
|
len = 1 / len;
|
|
x *= len;
|
|
y *= len;
|
|
z *= len;
|
|
}
|
|
|
|
s = Math.sin(angle);
|
|
c = Math.cos(angle);
|
|
t = 1 - c;
|
|
|
|
a00 = mat[0]; a01 = mat[1]; a02 = mat[2]; a03 = mat[3];
|
|
a10 = mat[4]; a11 = mat[5]; a12 = mat[6]; a13 = mat[7];
|
|
a20 = mat[8]; a21 = mat[9]; a22 = mat[10]; a23 = mat[11];
|
|
|
|
// Construct the elements of the rotation matrix
|
|
b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;
|
|
b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;
|
|
b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;
|
|
|
|
if (!dest) {
|
|
dest = mat;
|
|
} else if (mat !== dest) { // If the source and destination differ, copy the unchanged last row
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
}
|
|
|
|
// Perform rotation-specific matrix multiplication
|
|
dest[0] = a00 * b00 + a10 * b01 + a20 * b02;
|
|
dest[1] = a01 * b00 + a11 * b01 + a21 * b02;
|
|
dest[2] = a02 * b00 + a12 * b01 + a22 * b02;
|
|
dest[3] = a03 * b00 + a13 * b01 + a23 * b02;
|
|
|
|
dest[4] = a00 * b10 + a10 * b11 + a20 * b12;
|
|
dest[5] = a01 * b10 + a11 * b11 + a21 * b12;
|
|
dest[6] = a02 * b10 + a12 * b11 + a22 * b12;
|
|
dest[7] = a03 * b10 + a13 * b11 + a23 * b12;
|
|
|
|
dest[8] = a00 * b20 + a10 * b21 + a20 * b22;
|
|
dest[9] = a01 * b20 + a11 * b21 + a21 * b22;
|
|
dest[10] = a02 * b20 + a12 * b21 + a22 * b22;
|
|
dest[11] = a03 * b20 + a13 * b21 + a23 * b22;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Rotates a matrix by the given angle around the X axis
|
|
*
|
|
* @param {mat4} mat mat4 to rotate
|
|
* @param {number} angle Angle (in radians) to rotate
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @returns {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.rotateX = function (mat, angle, dest) {
|
|
var s = Math.sin(angle),
|
|
c = Math.cos(angle),
|
|
a10 = mat[4],
|
|
a11 = mat[5],
|
|
a12 = mat[6],
|
|
a13 = mat[7],
|
|
a20 = mat[8],
|
|
a21 = mat[9],
|
|
a22 = mat[10],
|
|
a23 = mat[11];
|
|
|
|
if (!dest) {
|
|
dest = mat;
|
|
} else if (mat !== dest) { // If the source and destination differ, copy the unchanged rows
|
|
dest[0] = mat[0];
|
|
dest[1] = mat[1];
|
|
dest[2] = mat[2];
|
|
dest[3] = mat[3];
|
|
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
}
|
|
|
|
// Perform axis-specific matrix multiplication
|
|
dest[4] = a10 * c + a20 * s;
|
|
dest[5] = a11 * c + a21 * s;
|
|
dest[6] = a12 * c + a22 * s;
|
|
dest[7] = a13 * c + a23 * s;
|
|
|
|
dest[8] = a10 * -s + a20 * c;
|
|
dest[9] = a11 * -s + a21 * c;
|
|
dest[10] = a12 * -s + a22 * c;
|
|
dest[11] = a13 * -s + a23 * c;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Rotates a matrix by the given angle around the Y axis
|
|
*
|
|
* @param {mat4} mat mat4 to rotate
|
|
* @param {number} angle Angle (in radians) to rotate
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @returns {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.rotateY = function (mat, angle, dest) {
|
|
var s = Math.sin(angle),
|
|
c = Math.cos(angle),
|
|
a00 = mat[0],
|
|
a01 = mat[1],
|
|
a02 = mat[2],
|
|
a03 = mat[3],
|
|
a20 = mat[8],
|
|
a21 = mat[9],
|
|
a22 = mat[10],
|
|
a23 = mat[11];
|
|
|
|
if (!dest) {
|
|
dest = mat;
|
|
} else if (mat !== dest) { // If the source and destination differ, copy the unchanged rows
|
|
dest[4] = mat[4];
|
|
dest[5] = mat[5];
|
|
dest[6] = mat[6];
|
|
dest[7] = mat[7];
|
|
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
}
|
|
|
|
// Perform axis-specific matrix multiplication
|
|
dest[0] = a00 * c + a20 * -s;
|
|
dest[1] = a01 * c + a21 * -s;
|
|
dest[2] = a02 * c + a22 * -s;
|
|
dest[3] = a03 * c + a23 * -s;
|
|
|
|
dest[8] = a00 * s + a20 * c;
|
|
dest[9] = a01 * s + a21 * c;
|
|
dest[10] = a02 * s + a22 * c;
|
|
dest[11] = a03 * s + a23 * c;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Rotates a matrix by the given angle around the Z axis
|
|
*
|
|
* @param {mat4} mat mat4 to rotate
|
|
* @param {number} angle Angle (in radians) to rotate
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
|
|
*
|
|
* @returns {mat4} dest if specified, mat otherwise
|
|
*/
|
|
mat4.rotateZ = function (mat, angle, dest) {
|
|
var s = Math.sin(angle),
|
|
c = Math.cos(angle),
|
|
a00 = mat[0],
|
|
a01 = mat[1],
|
|
a02 = mat[2],
|
|
a03 = mat[3],
|
|
a10 = mat[4],
|
|
a11 = mat[5],
|
|
a12 = mat[6],
|
|
a13 = mat[7];
|
|
|
|
if (!dest) {
|
|
dest = mat;
|
|
} else if (mat !== dest) { // If the source and destination differ, copy the unchanged last row
|
|
dest[8] = mat[8];
|
|
dest[9] = mat[9];
|
|
dest[10] = mat[10];
|
|
dest[11] = mat[11];
|
|
|
|
dest[12] = mat[12];
|
|
dest[13] = mat[13];
|
|
dest[14] = mat[14];
|
|
dest[15] = mat[15];
|
|
}
|
|
|
|
// Perform axis-specific matrix multiplication
|
|
dest[0] = a00 * c + a10 * s;
|
|
dest[1] = a01 * c + a11 * s;
|
|
dest[2] = a02 * c + a12 * s;
|
|
dest[3] = a03 * c + a13 * s;
|
|
|
|
dest[4] = a00 * -s + a10 * c;
|
|
dest[5] = a01 * -s + a11 * c;
|
|
dest[6] = a02 * -s + a12 * c;
|
|
dest[7] = a03 * -s + a13 * c;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Generates a frustum matrix with the given bounds
|
|
*
|
|
* @param {number} left Left bound of the frustum
|
|
* @param {number} right Right bound of the frustum
|
|
* @param {number} bottom Bottom bound of the frustum
|
|
* @param {number} top Top bound of the frustum
|
|
* @param {number} near Near bound of the frustum
|
|
* @param {number} far Far bound of the frustum
|
|
* @param {mat4} [dest] mat4 frustum matrix will be written into
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
mat4.frustum = function (left, right, bottom, top, near, far, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
var rl = (right - left),
|
|
tb = (top - bottom),
|
|
fn = (far - near);
|
|
dest[0] = (near * 2) / rl;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
dest[3] = 0;
|
|
dest[4] = 0;
|
|
dest[5] = (near * 2) / tb;
|
|
dest[6] = 0;
|
|
dest[7] = 0;
|
|
dest[8] = (right + left) / rl;
|
|
dest[9] = (top + bottom) / tb;
|
|
dest[10] = -(far + near) / fn;
|
|
dest[11] = -1;
|
|
dest[12] = 0;
|
|
dest[13] = 0;
|
|
dest[14] = -(far * near * 2) / fn;
|
|
dest[15] = 0;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Generates a perspective projection matrix with the given bounds
|
|
*
|
|
* @param {number} fovy Vertical field of view
|
|
* @param {number} aspect Aspect ratio. typically viewport width/height
|
|
* @param {number} near Near bound of the frustum
|
|
* @param {number} far Far bound of the frustum
|
|
* @param {mat4} [dest] mat4 frustum matrix will be written into
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
mat4.perspective = function (fovy, aspect, near, far, dest) {
|
|
var top = near * Math.tan(fovy * Math.PI / 360.0),
|
|
right = top * aspect;
|
|
return mat4.frustum(-right, right, -top, top, near, far, dest);
|
|
};
|
|
|
|
/**
|
|
* Generates a orthogonal projection matrix with the given bounds
|
|
*
|
|
* @param {number} left Left bound of the frustum
|
|
* @param {number} right Right bound of the frustum
|
|
* @param {number} bottom Bottom bound of the frustum
|
|
* @param {number} top Top bound of the frustum
|
|
* @param {number} near Near bound of the frustum
|
|
* @param {number} far Far bound of the frustum
|
|
* @param {mat4} [dest] mat4 frustum matrix will be written into
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
mat4.ortho = function (left, right, bottom, top, near, far, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
var rl = (right - left),
|
|
tb = (top - bottom),
|
|
fn = (far - near);
|
|
dest[0] = 2 / rl;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
dest[3] = 0;
|
|
dest[4] = 0;
|
|
dest[5] = 2 / tb;
|
|
dest[6] = 0;
|
|
dest[7] = 0;
|
|
dest[8] = 0;
|
|
dest[9] = 0;
|
|
dest[10] = -2 / fn;
|
|
dest[11] = 0;
|
|
dest[12] = -(left + right) / rl;
|
|
dest[13] = -(top + bottom) / tb;
|
|
dest[14] = -(far + near) / fn;
|
|
dest[15] = 1;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Generates a look-at matrix with the given eye position, focal point, and up axis
|
|
*
|
|
* @param {vec3} eye Position of the viewer
|
|
* @param {vec3} center Point the viewer is looking at
|
|
* @param {vec3} up vec3 pointing "up"
|
|
* @param {mat4} [dest] mat4 frustum matrix will be written into
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
mat4.lookAt = function (eye, center, up, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
|
|
var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,
|
|
eyex = eye[0],
|
|
eyey = eye[1],
|
|
eyez = eye[2],
|
|
upx = up[0],
|
|
upy = up[1],
|
|
upz = up[2],
|
|
centerx = center[0],
|
|
centery = center[1],
|
|
centerz = center[2];
|
|
|
|
if (eyex === centerx && eyey === centery && eyez === centerz) {
|
|
return mat4.identity(dest);
|
|
}
|
|
|
|
//vec3.direction(eye, center, z);
|
|
z0 = eyex - centerx;
|
|
z1 = eyey - centery;
|
|
z2 = eyez - centerz;
|
|
|
|
// normalize (no check needed for 0 because of early return)
|
|
len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
|
|
z0 *= len;
|
|
z1 *= len;
|
|
z2 *= len;
|
|
|
|
//vec3.normalize(vec3.cross(up, z, x));
|
|
x0 = upy * z2 - upz * z1;
|
|
x1 = upz * z0 - upx * z2;
|
|
x2 = upx * z1 - upy * z0;
|
|
len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
|
|
if (!len) {
|
|
x0 = 0;
|
|
x1 = 0;
|
|
x2 = 0;
|
|
} else {
|
|
len = 1 / len;
|
|
x0 *= len;
|
|
x1 *= len;
|
|
x2 *= len;
|
|
}
|
|
|
|
//vec3.normalize(vec3.cross(z, x, y));
|
|
y0 = z1 * x2 - z2 * x1;
|
|
y1 = z2 * x0 - z0 * x2;
|
|
y2 = z0 * x1 - z1 * x0;
|
|
|
|
len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
|
|
if (!len) {
|
|
y0 = 0;
|
|
y1 = 0;
|
|
y2 = 0;
|
|
} else {
|
|
len = 1 / len;
|
|
y0 *= len;
|
|
y1 *= len;
|
|
y2 *= len;
|
|
}
|
|
|
|
dest[0] = x0;
|
|
dest[1] = y0;
|
|
dest[2] = z0;
|
|
dest[3] = 0;
|
|
dest[4] = x1;
|
|
dest[5] = y1;
|
|
dest[6] = z1;
|
|
dest[7] = 0;
|
|
dest[8] = x2;
|
|
dest[9] = y2;
|
|
dest[10] = z2;
|
|
dest[11] = 0;
|
|
dest[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
|
|
dest[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
|
|
dest[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
|
|
dest[15] = 1;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Creates a matrix from a quaternion rotation and vector translation
|
|
* This is equivalent to (but much faster than):
|
|
*
|
|
* mat4.identity(dest);
|
|
* mat4.translate(dest, vec);
|
|
* var quatMat = mat4.create();
|
|
* quat4.toMat4(quat, quatMat);
|
|
* mat4.multiply(dest, quatMat);
|
|
*
|
|
* @param {quat4} quat Rotation quaternion
|
|
* @param {vec3} vec Translation vector
|
|
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to a new mat4
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
mat4.fromRotationTranslation = function (quat, vec, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
|
|
// Quaternion math
|
|
var x = quat[0], y = quat[1], z = quat[2], w = quat[3],
|
|
x2 = x + x,
|
|
y2 = y + y,
|
|
z2 = z + z,
|
|
|
|
xx = x * x2,
|
|
xy = x * y2,
|
|
xz = x * z2,
|
|
yy = y * y2,
|
|
yz = y * z2,
|
|
zz = z * z2,
|
|
wx = w * x2,
|
|
wy = w * y2,
|
|
wz = w * z2;
|
|
|
|
dest[0] = 1 - (yy + zz);
|
|
dest[1] = xy + wz;
|
|
dest[2] = xz - wy;
|
|
dest[3] = 0;
|
|
dest[4] = xy - wz;
|
|
dest[5] = 1 - (xx + zz);
|
|
dest[6] = yz + wx;
|
|
dest[7] = 0;
|
|
dest[8] = xz + wy;
|
|
dest[9] = yz - wx;
|
|
dest[10] = 1 - (xx + yy);
|
|
dest[11] = 0;
|
|
dest[12] = vec[0];
|
|
dest[13] = vec[1];
|
|
dest[14] = vec[2];
|
|
dest[15] = 1;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Returns a string representation of a mat4
|
|
*
|
|
* @param {mat4} mat mat4 to represent as a string
|
|
*
|
|
* @returns {string} String representation of mat
|
|
*/
|
|
mat4.str = function (mat) {
|
|
return '[' + mat[0] + ', ' + mat[1] + ', ' + mat[2] + ', ' + mat[3] +
|
|
', ' + mat[4] + ', ' + mat[5] + ', ' + mat[6] + ', ' + mat[7] +
|
|
', ' + mat[8] + ', ' + mat[9] + ', ' + mat[10] + ', ' + mat[11] +
|
|
', ' + mat[12] + ', ' + mat[13] + ', ' + mat[14] + ', ' + mat[15] + ']';
|
|
};
|
|
|
|
/*
|
|
* quat4
|
|
*/
|
|
|
|
/**
|
|
* Creates a new instance of a quat4 using the default array type
|
|
* Any javascript array containing at least 4 numeric elements can serve as a quat4
|
|
*
|
|
* @param {quat4} [quat] quat4 containing values to initialize with
|
|
*
|
|
* @returns {quat4} New quat4
|
|
*/
|
|
quat4.create = function (quat) {
|
|
var dest = new MatrixArray(4);
|
|
|
|
if (quat) {
|
|
dest[0] = quat[0];
|
|
dest[1] = quat[1];
|
|
dest[2] = quat[2];
|
|
dest[3] = quat[3];
|
|
}
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Copies the values of one quat4 to another
|
|
*
|
|
* @param {quat4} quat quat4 containing values to copy
|
|
* @param {quat4} dest quat4 receiving copied values
|
|
*
|
|
* @returns {quat4} dest
|
|
*/
|
|
quat4.set = function (quat, dest) {
|
|
dest[0] = quat[0];
|
|
dest[1] = quat[1];
|
|
dest[2] = quat[2];
|
|
dest[3] = quat[3];
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates the W component of a quat4 from the X, Y, and Z components.
|
|
* Assumes that quaternion is 1 unit in length.
|
|
* Any existing W component will be ignored.
|
|
*
|
|
* @param {quat4} quat quat4 to calculate W component of
|
|
* @param {quat4} [dest] quat4 receiving calculated values. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.calculateW = function (quat, dest) {
|
|
var x = quat[0], y = quat[1], z = quat[2];
|
|
|
|
if (!dest || quat === dest) {
|
|
quat[3] = -Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));
|
|
return quat;
|
|
}
|
|
dest[0] = x;
|
|
dest[1] = y;
|
|
dest[2] = z;
|
|
dest[3] = -Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates the dot product of two quaternions
|
|
*
|
|
* @param {quat4} quat First operand
|
|
* @param {quat4} quat2 Second operand
|
|
*
|
|
* @return {number} Dot product of quat and quat2
|
|
*/
|
|
quat4.dot = function(quat, quat2){
|
|
return quat[0]*quat2[0] + quat[1]*quat2[1] + quat[2]*quat2[2] + quat[3]*quat2[3];
|
|
};
|
|
|
|
/**
|
|
* Calculates the inverse of a quat4
|
|
*
|
|
* @param {quat4} quat quat4 to calculate inverse of
|
|
* @param {quat4} [dest] quat4 receiving inverse values. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.inverse = function(quat, dest) {
|
|
var q0 = quat[0], q1 = quat[1], q2 = quat[2], q3 = quat[3],
|
|
dot = q0*q0 + q1*q1 + q2*q2 + q3*q3,
|
|
invDot = dot ? 1.0/dot : 0;
|
|
|
|
// TODO: Would be faster to return [0,0,0,0] immediately if dot == 0
|
|
|
|
if(!dest || quat === dest) {
|
|
quat[0] *= -invDot;
|
|
quat[1] *= -invDot;
|
|
quat[2] *= -invDot;
|
|
quat[3] *= invDot;
|
|
return quat;
|
|
}
|
|
dest[0] = -quat[0]*invDot;
|
|
dest[1] = -quat[1]*invDot;
|
|
dest[2] = -quat[2]*invDot;
|
|
dest[3] = quat[3]*invDot;
|
|
return dest;
|
|
};
|
|
|
|
|
|
/**
|
|
* Calculates the conjugate of a quat4
|
|
* If the quaternion is normalized, this function is faster than quat4.inverse and produces the same result.
|
|
*
|
|
* @param {quat4} quat quat4 to calculate conjugate of
|
|
* @param {quat4} [dest] quat4 receiving conjugate values. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.conjugate = function (quat, dest) {
|
|
if (!dest || quat === dest) {
|
|
quat[0] *= -1;
|
|
quat[1] *= -1;
|
|
quat[2] *= -1;
|
|
return quat;
|
|
}
|
|
dest[0] = -quat[0];
|
|
dest[1] = -quat[1];
|
|
dest[2] = -quat[2];
|
|
dest[3] = quat[3];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates the length of a quat4
|
|
*
|
|
* Params:
|
|
* @param {quat4} quat quat4 to calculate length of
|
|
*
|
|
* @returns Length of quat
|
|
*/
|
|
quat4.length = function (quat) {
|
|
var x = quat[0], y = quat[1], z = quat[2], w = quat[3];
|
|
return Math.sqrt(x * x + y * y + z * z + w * w);
|
|
};
|
|
|
|
/**
|
|
* Generates a unit quaternion of the same direction as the provided quat4
|
|
* If quaternion length is 0, returns [0, 0, 0, 0]
|
|
*
|
|
* @param {quat4} quat quat4 to normalize
|
|
* @param {quat4} [dest] quat4 receiving operation result. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.normalize = function (quat, dest) {
|
|
if (!dest) { dest = quat; }
|
|
|
|
var x = quat[0], y = quat[1], z = quat[2], w = quat[3],
|
|
len = Math.sqrt(x * x + y * y + z * z + w * w);
|
|
if (len === 0) {
|
|
dest[0] = 0;
|
|
dest[1] = 0;
|
|
dest[2] = 0;
|
|
dest[3] = 0;
|
|
return dest;
|
|
}
|
|
len = 1 / len;
|
|
dest[0] = x * len;
|
|
dest[1] = y * len;
|
|
dest[2] = z * len;
|
|
dest[3] = w * len;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs quaternion addition
|
|
*
|
|
* @param {quat4} quat First operand
|
|
* @param {quat4} quat2 Second operand
|
|
* @param {quat4} [dest] quat4 receiving operation result. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.add = function (quat, quat2, dest) {
|
|
if(!dest || quat === dest) {
|
|
quat[0] += quat2[0];
|
|
quat[1] += quat2[1];
|
|
quat[2] += quat2[2];
|
|
quat[3] += quat2[3];
|
|
return quat;
|
|
}
|
|
dest[0] = quat[0]+quat2[0];
|
|
dest[1] = quat[1]+quat2[1];
|
|
dest[2] = quat[2]+quat2[2];
|
|
dest[3] = quat[3]+quat2[3];
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a quaternion multiplication
|
|
*
|
|
* @param {quat4} quat First operand
|
|
* @param {quat4} quat2 Second operand
|
|
* @param {quat4} [dest] quat4 receiving operation result. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.multiply = function (quat, quat2, dest) {
|
|
if (!dest) { dest = quat; }
|
|
|
|
var qax = quat[0], qay = quat[1], qaz = quat[2], qaw = quat[3],
|
|
qbx = quat2[0], qby = quat2[1], qbz = quat2[2], qbw = quat2[3];
|
|
|
|
dest[0] = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;
|
|
dest[1] = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;
|
|
dest[2] = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;
|
|
dest[3] = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Transforms a vec3 with the given quaternion
|
|
*
|
|
* @param {quat4} quat quat4 to transform the vector with
|
|
* @param {vec3} vec vec3 to transform
|
|
* @param {vec3} [dest] vec3 receiving operation result. If not specified result is written to vec
|
|
*
|
|
* @returns dest if specified, vec otherwise
|
|
*/
|
|
quat4.multiplyVec3 = function (quat, vec, dest) {
|
|
if (!dest) { dest = vec; }
|
|
|
|
var x = vec[0], y = vec[1], z = vec[2],
|
|
qx = quat[0], qy = quat[1], qz = quat[2], qw = quat[3],
|
|
|
|
// calculate quat * vec
|
|
ix = qw * x + qy * z - qz * y,
|
|
iy = qw * y + qz * x - qx * z,
|
|
iz = qw * z + qx * y - qy * x,
|
|
iw = -qx * x - qy * y - qz * z;
|
|
|
|
// calculate result * inverse quat
|
|
dest[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;
|
|
dest[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;
|
|
dest[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Multiplies the components of a quaternion by a scalar value
|
|
*
|
|
* @param {quat4} quat to scale
|
|
* @param {number} val Value to scale by
|
|
* @param {quat4} [dest] quat4 receiving operation result. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.scale = function (quat, val, dest) {
|
|
if(!dest || quat === dest) {
|
|
quat[0] *= val;
|
|
quat[1] *= val;
|
|
quat[2] *= val;
|
|
quat[3] *= val;
|
|
return quat;
|
|
}
|
|
dest[0] = quat[0]*val;
|
|
dest[1] = quat[1]*val;
|
|
dest[2] = quat[2]*val;
|
|
dest[3] = quat[3]*val;
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates a 3x3 matrix from the given quat4
|
|
*
|
|
* @param {quat4} quat quat4 to create matrix from
|
|
* @param {mat3} [dest] mat3 receiving operation result
|
|
*
|
|
* @returns {mat3} dest if specified, a new mat3 otherwise
|
|
*/
|
|
quat4.toMat3 = function (quat, dest) {
|
|
if (!dest) { dest = mat3.create(); }
|
|
|
|
var x = quat[0], y = quat[1], z = quat[2], w = quat[3],
|
|
x2 = x + x,
|
|
y2 = y + y,
|
|
z2 = z + z,
|
|
|
|
xx = x * x2,
|
|
xy = x * y2,
|
|
xz = x * z2,
|
|
yy = y * y2,
|
|
yz = y * z2,
|
|
zz = z * z2,
|
|
wx = w * x2,
|
|
wy = w * y2,
|
|
wz = w * z2;
|
|
|
|
dest[0] = 1 - (yy + zz);
|
|
dest[1] = xy + wz;
|
|
dest[2] = xz - wy;
|
|
|
|
dest[3] = xy - wz;
|
|
dest[4] = 1 - (xx + zz);
|
|
dest[5] = yz + wx;
|
|
|
|
dest[6] = xz + wy;
|
|
dest[7] = yz - wx;
|
|
dest[8] = 1 - (xx + yy);
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Calculates a 4x4 matrix from the given quat4
|
|
*
|
|
* @param {quat4} quat quat4 to create matrix from
|
|
* @param {mat4} [dest] mat4 receiving operation result
|
|
*
|
|
* @returns {mat4} dest if specified, a new mat4 otherwise
|
|
*/
|
|
quat4.toMat4 = function (quat, dest) {
|
|
if (!dest) { dest = mat4.create(); }
|
|
|
|
var x = quat[0], y = quat[1], z = quat[2], w = quat[3],
|
|
x2 = x + x,
|
|
y2 = y + y,
|
|
z2 = z + z,
|
|
|
|
xx = x * x2,
|
|
xy = x * y2,
|
|
xz = x * z2,
|
|
yy = y * y2,
|
|
yz = y * z2,
|
|
zz = z * z2,
|
|
wx = w * x2,
|
|
wy = w * y2,
|
|
wz = w * z2;
|
|
|
|
dest[0] = 1 - (yy + zz);
|
|
dest[1] = xy + wz;
|
|
dest[2] = xz - wy;
|
|
dest[3] = 0;
|
|
|
|
dest[4] = xy - wz;
|
|
dest[5] = 1 - (xx + zz);
|
|
dest[6] = yz + wx;
|
|
dest[7] = 0;
|
|
|
|
dest[8] = xz + wy;
|
|
dest[9] = yz - wx;
|
|
dest[10] = 1 - (xx + yy);
|
|
dest[11] = 0;
|
|
|
|
dest[12] = 0;
|
|
dest[13] = 0;
|
|
dest[14] = 0;
|
|
dest[15] = 1;
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Performs a spherical linear interpolation between two quat4
|
|
*
|
|
* @param {quat4} quat First quaternion
|
|
* @param {quat4} quat2 Second quaternion
|
|
* @param {number} slerp Interpolation amount between the two inputs
|
|
* @param {quat4} [dest] quat4 receiving operation result. If not specified result is written to quat
|
|
*
|
|
* @returns {quat4} dest if specified, quat otherwise
|
|
*/
|
|
quat4.slerp = function (quat, quat2, slerp, dest) {
|
|
if (!dest) { dest = quat; }
|
|
|
|
var cosHalfTheta = quat[0] * quat2[0] + quat[1] * quat2[1] + quat[2] * quat2[2] + quat[3] * quat2[3],
|
|
halfTheta,
|
|
sinHalfTheta,
|
|
ratioA,
|
|
ratioB;
|
|
|
|
if (Math.abs(cosHalfTheta) >= 1.0) {
|
|
if (dest !== quat) {
|
|
dest[0] = quat[0];
|
|
dest[1] = quat[1];
|
|
dest[2] = quat[2];
|
|
dest[3] = quat[3];
|
|
}
|
|
return dest;
|
|
}
|
|
|
|
halfTheta = Math.acos(cosHalfTheta);
|
|
sinHalfTheta = Math.sqrt(1.0 - cosHalfTheta * cosHalfTheta);
|
|
|
|
if (Math.abs(sinHalfTheta) < 0.001) {
|
|
dest[0] = (quat[0] * 0.5 + quat2[0] * 0.5);
|
|
dest[1] = (quat[1] * 0.5 + quat2[1] * 0.5);
|
|
dest[2] = (quat[2] * 0.5 + quat2[2] * 0.5);
|
|
dest[3] = (quat[3] * 0.5 + quat2[3] * 0.5);
|
|
return dest;
|
|
}
|
|
|
|
ratioA = Math.sin((1 - slerp) * halfTheta) / sinHalfTheta;
|
|
ratioB = Math.sin(slerp * halfTheta) / sinHalfTheta;
|
|
|
|
dest[0] = (quat[0] * ratioA + quat2[0] * ratioB);
|
|
dest[1] = (quat[1] * ratioA + quat2[1] * ratioB);
|
|
dest[2] = (quat[2] * ratioA + quat2[2] * ratioB);
|
|
dest[3] = (quat[3] * ratioA + quat2[3] * ratioB);
|
|
|
|
return dest;
|
|
};
|
|
|
|
/**
|
|
* Returns a string representation of a quaternion
|
|
*
|
|
* @param {quat4} quat quat4 to represent as a string
|
|
*
|
|
* @returns {string} String representation of quat
|
|
*/
|
|
quat4.str = function (quat) {
|
|
return '[' + quat[0] + ', ' + quat[1] + ', ' + quat[2] + ', ' + quat[3] + ']';
|
|
};
|
|
|
|
|
|
return {
|
|
vec3: vec3,
|
|
mat3: mat3,
|
|
mat4: mat4,
|
|
quat4: quat4
|
|
};
|
|
|
|
})();
|
|
|
|
;
|
|
var GLImmediateSetup={};
|
|
|
|
function _glEnable(x0) { GLctx.enable(x0) }
|
|
|
|
function _glDisable(x0) { GLctx.disable(x0) }
|
|
|
|
function _glIsEnabled(x0) { return GLctx.isEnabled(x0) }
|
|
|
|
function _glGetBooleanv(name_, p) {
|
|
return GL.get(name_, p, 'Boolean');
|
|
}
|
|
|
|
function _glGetIntegerv(name_, p) {
|
|
return GL.get(name_, p, 'Integer');
|
|
}
|
|
|
|
function _glGetString(name_) {
|
|
if (GL.stringCache[name_]) return GL.stringCache[name_];
|
|
var ret;
|
|
switch(name_) {
|
|
case 0x1F00 /* GL_VENDOR */:
|
|
case 0x1F01 /* GL_RENDERER */:
|
|
case 0x1F02 /* GL_VERSION */:
|
|
ret = allocate(intArrayFromString(GLctx.getParameter(name_)), 'i8', ALLOC_NORMAL);
|
|
break;
|
|
case 0x1F03 /* GL_EXTENSIONS */:
|
|
var exts = GLctx.getSupportedExtensions();
|
|
var gl_exts = [];
|
|
for (i in exts) {
|
|
gl_exts.push(exts[i]);
|
|
gl_exts.push("GL_" + exts[i]);
|
|
}
|
|
ret = allocate(intArrayFromString(gl_exts.join(' ')), 'i8', ALLOC_NORMAL);
|
|
break;
|
|
case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION */:
|
|
ret = allocate(intArrayFromString('OpenGL ES GLSL 1.00 (WebGL)'), 'i8', ALLOC_NORMAL);
|
|
break;
|
|
default:
|
|
GL.recordError(0x0500/*GL_INVALID_ENUM*/);
|
|
return 0;
|
|
}
|
|
GL.stringCache[name_] = ret;
|
|
return ret;
|
|
}
|
|
|
|
function _glCreateShader(shaderType) {
|
|
var id = GL.getNewId(GL.shaders);
|
|
GL.shaders[id] = GLctx.createShader(shaderType);
|
|
return id;
|
|
}
|
|
|
|
function _glShaderSource(shader, count, string, length) {
|
|
var source = GL.getSource(shader, count, string, length);
|
|
GLctx.shaderSource(GL.shaders[shader], source);
|
|
}
|
|
|
|
function _glCompileShader(shader) {
|
|
GLctx.compileShader(GL.shaders[shader]);
|
|
}
|
|
|
|
function _glAttachShader(program, shader) {
|
|
GLctx.attachShader(GL.programs[program],
|
|
GL.shaders[shader]);
|
|
}
|
|
|
|
function _glDetachShader(program, shader) {
|
|
GLctx.detachShader(GL.programs[program],
|
|
GL.shaders[shader]);
|
|
}
|
|
|
|
function _glUseProgram(program) {
|
|
GLctx.useProgram(program ? GL.programs[program] : null);
|
|
}
|
|
|
|
function _glDeleteProgram(program) {
|
|
var program = GL.programs[program];
|
|
GLctx.deleteProgram(program);
|
|
program.name = 0;
|
|
GL.programs[program] = null;
|
|
GL.programInfos[program] = null;
|
|
}
|
|
|
|
function _glBindAttribLocation(program, index, name) {
|
|
name = Pointer_stringify(name);
|
|
GLctx.bindAttribLocation(GL.programs[program], index, name);
|
|
}
|
|
|
|
function _glLinkProgram(program) {
|
|
GLctx.linkProgram(GL.programs[program]);
|
|
GL.programInfos[program] = null; // uniforms no longer keep the same names after linking
|
|
GL.populateUniformTable(program);
|
|
}
|
|
|
|
function _glBindBuffer(target, buffer) {
|
|
var bufferObj = buffer ? GL.buffers[buffer] : null;
|
|
|
|
if (target == GLctx.ARRAY_BUFFER) {
|
|
GLImmediate.lastArrayBuffer = GL.currArrayBuffer = buffer;
|
|
} else if (target == GLctx.ELEMENT_ARRAY_BUFFER) {
|
|
GL.currElementArrayBuffer = buffer;
|
|
}
|
|
|
|
GLctx.bindBuffer(target, bufferObj);
|
|
}
|
|
|
|
function _glGetFloatv(name_, p) {
|
|
return GL.get(name_, p, 'Float');
|
|
}
|
|
|
|
function _glHint(x0, x1) { GLctx.hint(x0, x1) }
|
|
|
|
function _glEnableVertexAttribArray(index) {
|
|
GLctx.enableVertexAttribArray(index);
|
|
}
|
|
|
|
function _glDisableVertexAttribArray(index) {
|
|
GLctx.disableVertexAttribArray(index);
|
|
}
|
|
|
|
function _glVertexAttribPointer(index, size, type, normalized, stride, ptr) {
|
|
GLctx.vertexAttribPointer(index, size, type, normalized, stride, ptr);
|
|
}
|
|
|
|
function _glActiveTexture(x0) { GLctx.activeTexture(x0) }var GLEmulation={fogStart:0,fogEnd:1,fogDensity:1,fogColor:null,fogMode:2048,fogEnabled:false,vaos:[],currentVao:null,enabledVertexAttribArrays:{},hasRunInit:false,init:function () {
|
|
// Do not activate immediate/emulation code (e.g. replace glDrawElements) when in FULL_ES2 mode.
|
|
// We do not need full emulation, we instead emulate client-side arrays etc. in FULL_ES2 code in
|
|
// a straightforward manner, and avoid not having a bound buffer be ambiguous between es2 emulation
|
|
// code and legacy gl emulation code.
|
|
|
|
if (GLEmulation.hasRunInit) {
|
|
return;
|
|
}
|
|
GLEmulation.hasRunInit = true;
|
|
|
|
GLEmulation.fogColor = new Float32Array(4);
|
|
|
|
// Add some emulation workarounds
|
|
Module.printErr('WARNING: using emscripten GL emulation. This is a collection of limited workarounds, do not expect it to work.');
|
|
Module.printErr('WARNING: using emscripten GL emulation unsafe opts. If weirdness happens, try -s GL_UNSAFE_OPTS=0');
|
|
|
|
// XXX some of the capabilities we don't support may lead to incorrect rendering, if we do not emulate them in shaders
|
|
var validCapabilities = {
|
|
0x0B44: 1, // GL_CULL_FACE
|
|
0x0BE2: 1, // GL_BLEND
|
|
0x0BD0: 1, // GL_DITHER,
|
|
0x0B90: 1, // GL_STENCIL_TEST
|
|
0x0B71: 1, // GL_DEPTH_TEST
|
|
0x0C11: 1, // GL_SCISSOR_TEST
|
|
0x8037: 1, // GL_POLYGON_OFFSET_FILL
|
|
0x809E: 1, // GL_SAMPLE_ALPHA_TO_COVERAGE
|
|
0x80A0: 1 // GL_SAMPLE_COVERAGE
|
|
};
|
|
|
|
var glEnable = _glEnable;
|
|
_glEnable = _emscripten_glEnable = function _glEnable(cap) {
|
|
// Clean up the renderer on any change to the rendering state. The optimization of
|
|
// skipping renderer setup is aimed at the case of multiple glDraw* right after each other
|
|
if (GLImmediate.lastRenderer) GLImmediate.lastRenderer.cleanup();
|
|
if (cap == 0x0B60 /* GL_FOG */) {
|
|
if (GLEmulation.fogEnabled != true) {
|
|
GLImmediate.currentRenderer = null; // Fog parameter is part of the FFP shader state, we must re-lookup the renderer to use.
|
|
GLEmulation.fogEnabled = true;
|
|
}
|
|
return;
|
|
} else if (cap == 0x0de1 /* GL_TEXTURE_2D */) {
|
|
// XXX not according to spec, and not in desktop GL, but works in some GLES1.x apparently, so support
|
|
// it by forwarding to glEnableClientState
|
|
/* Actually, let's not, for now. (This sounds exceedingly broken)
|
|
* This is in gl_ps_workaround2.c.
|
|
_glEnableClientState(cap);
|
|
*/
|
|
return;
|
|
} else if (!(cap in validCapabilities)) {
|
|
return;
|
|
}
|
|
glEnable(cap);
|
|
};
|
|
|
|
var glDisable = _glDisable;
|
|
_glDisable = _emscripten_glDisable = function _glDisable(cap) {
|
|
if (GLImmediate.lastRenderer) GLImmediate.lastRenderer.cleanup();
|
|
if (cap == 0x0B60 /* GL_FOG */) {
|
|
if (GLEmulation.fogEnabled != false) {
|
|
GLImmediate.currentRenderer = null; // Fog parameter is part of the FFP shader state, we must re-lookup the renderer to use.
|
|
GLEmulation.fogEnabled = false;
|
|
}
|
|
return;
|
|
} else if (cap == 0x0de1 /* GL_TEXTURE_2D */) {
|
|
// XXX not according to spec, and not in desktop GL, but works in some GLES1.x apparently, so support
|
|
// it by forwarding to glDisableClientState
|
|
/* Actually, let's not, for now. (This sounds exceedingly broken)
|
|
* This is in gl_ps_workaround2.c.
|
|
_glDisableClientState(cap);
|
|
*/
|
|
return;
|
|
} else if (!(cap in validCapabilities)) {
|
|
return;
|
|
}
|
|
glDisable(cap);
|
|
};
|
|
_glIsEnabled = _emscripten_glIsEnabled = function _glIsEnabled(cap) {
|
|
if (cap == 0x0B60 /* GL_FOG */) {
|
|
return GLEmulation.fogEnabled ? 1 : 0;
|
|
} else if (!(cap in validCapabilities)) {
|
|
return 0;
|
|
}
|
|
return GLctx.isEnabled(cap);
|
|
};
|
|
|
|
var glGetBooleanv = _glGetBooleanv;
|
|
_glGetBooleanv = _emscripten_glGetBooleanv = function _glGetBooleanv(pname, p) {
|
|
var attrib = GLEmulation.getAttributeFromCapability(pname);
|
|
if (attrib !== null) {
|
|
var result = GLImmediate.enabledClientAttributes[attrib];
|
|
HEAP8[(p)]=result === true ? 1 : 0;
|
|
return;
|
|
}
|
|
glGetBooleanv(pname, p);
|
|
};
|
|
|
|
var glGetIntegerv = _glGetIntegerv;
|
|
_glGetIntegerv = _emscripten_glGetIntegerv = function _glGetIntegerv(pname, params) {
|
|
switch (pname) {
|
|
case 0x84E2: pname = GLctx.MAX_TEXTURE_IMAGE_UNITS /* fake it */; break; // GL_MAX_TEXTURE_UNITS
|
|
case 0x8B4A: { // GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB
|
|
var result = GLctx.getParameter(GLctx.MAX_VERTEX_UNIFORM_VECTORS);
|
|
HEAP32[((params)>>2)]=result*4; // GLES gives num of 4-element vectors, GL wants individual components, so multiply
|
|
return;
|
|
}
|
|
case 0x8B49: { // GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB
|
|
var result = GLctx.getParameter(GLctx.MAX_FRAGMENT_UNIFORM_VECTORS);
|
|
HEAP32[((params)>>2)]=result*4; // GLES gives num of 4-element vectors, GL wants individual components, so multiply
|
|
return;
|
|
}
|
|
case 0x8B4B: { // GL_MAX_VARYING_FLOATS_ARB
|
|
var result = GLctx.getParameter(GLctx.MAX_VARYING_VECTORS);
|
|
HEAP32[((params)>>2)]=result*4; // GLES gives num of 4-element vectors, GL wants individual components, so multiply
|
|
return;
|
|
}
|
|
case 0x8871: pname = GLctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS /* close enough */; break; // GL_MAX_TEXTURE_COORDS
|
|
case 0x807A: { // GL_VERTEX_ARRAY_SIZE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.VERTEX];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.size : 0;
|
|
return;
|
|
}
|
|
case 0x807B: { // GL_VERTEX_ARRAY_TYPE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.VERTEX];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.type : 0;
|
|
return;
|
|
}
|
|
case 0x807C: { // GL_VERTEX_ARRAY_STRIDE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.VERTEX];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.stride : 0;
|
|
return;
|
|
}
|
|
case 0x8081: { // GL_COLOR_ARRAY_SIZE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.COLOR];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.size : 0;
|
|
return;
|
|
}
|
|
case 0x8082: { // GL_COLOR_ARRAY_TYPE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.COLOR];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.type : 0;
|
|
return;
|
|
}
|
|
case 0x8083: { // GL_COLOR_ARRAY_STRIDE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.COLOR];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.stride : 0;
|
|
return;
|
|
}
|
|
case 0x8088: { // GL_TEXTURE_COORD_ARRAY_SIZE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.TEXTURE0 + GLImmediate.clientActiveTexture];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.size : 0;
|
|
return;
|
|
}
|
|
case 0x8089: { // GL_TEXTURE_COORD_ARRAY_TYPE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.TEXTURE0 + GLImmediate.clientActiveTexture];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.type : 0;
|
|
return;
|
|
}
|
|
case 0x808A: { // GL_TEXTURE_COORD_ARRAY_STRIDE
|
|
var attribute = GLImmediate.clientAttributes[GLImmediate.TEXTURE0 + GLImmediate.clientActiveTexture];
|
|
HEAP32[((params)>>2)]=attribute ? attribute.stride : 0;
|
|
return;
|
|
}
|
|
}
|
|
glGetIntegerv(pname, params);
|
|
};
|
|
|
|
var glGetString = _glGetString;
|
|
_glGetString = _emscripten_glGetString = function _glGetString(name_) {
|
|
if (GL.stringCache[name_]) return GL.stringCache[name_];
|
|
switch(name_) {
|
|
case 0x1F03 /* GL_EXTENSIONS */: // Add various extensions that we can support
|
|
var ret = allocate(intArrayFromString(GLctx.getSupportedExtensions().join(' ') +
|
|
' GL_EXT_texture_env_combine GL_ARB_texture_env_crossbar GL_ATI_texture_env_combine3 GL_NV_texture_env_combine4 GL_EXT_texture_env_dot3 GL_ARB_multitexture GL_ARB_vertex_buffer_object GL_EXT_framebuffer_object GL_ARB_vertex_program GL_ARB_fragment_program GL_ARB_shading_language_100 GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_texture_cube_map GL_EXT_draw_range_elements' +
|
|
(GL.compressionExt ? ' GL_ARB_texture_compression GL_EXT_texture_compression_s3tc' : '') +
|
|
(GL.anisotropicExt ? ' GL_EXT_texture_filter_anisotropic' : '')
|
|
), 'i8', ALLOC_NORMAL);
|
|
GL.stringCache[name_] = ret;
|
|
return ret;
|
|
}
|
|
return glGetString(name_);
|
|
};
|
|
|
|
// Do some automatic rewriting to work around GLSL differences. Note that this must be done in
|
|
// tandem with the rest of the program, by itself it cannot suffice.
|
|
// Note that we need to remember shader types for this rewriting, saving sources makes it easier to debug.
|
|
GL.shaderInfos = {};
|
|
var glCreateShader = _glCreateShader;
|
|
_glCreateShader = _emscripten_glCreateShader = function _glCreateShader(shaderType) {
|
|
var id = glCreateShader(shaderType);
|
|
GL.shaderInfos[id] = {
|
|
type: shaderType,
|
|
ftransform: false
|
|
};
|
|
return id;
|
|
};
|
|
|
|
function ensurePrecision(source) {
|
|
if (!/precision +(low|medium|high)p +float *;/.test(source)) {
|
|
source = 'precision mediump float;\n' + source;
|
|
}
|
|
return source;
|
|
}
|
|
|
|
var glShaderSource = _glShaderSource;
|
|
_glShaderSource = _emscripten_glShaderSource = function _glShaderSource(shader, count, string, length) {
|
|
var source = GL.getSource(shader, count, string, length);
|
|
// XXX We add attributes and uniforms to shaders. The program can ask for the # of them, and see the
|
|
// ones we generated, potentially confusing it? Perhaps we should hide them.
|
|
if (GL.shaderInfos[shader].type == GLctx.VERTEX_SHADER) {
|
|
// Replace ftransform() with explicit project/modelview transforms, and add position and matrix info.
|
|
var has_pm = source.search(/u_projection/) >= 0;
|
|
var has_mm = source.search(/u_modelView/) >= 0;
|
|
var has_pv = source.search(/a_position/) >= 0;
|
|
var need_pm = 0, need_mm = 0, need_pv = 0;
|
|
var old = source;
|
|
source = source.replace(/ftransform\(\)/g, '(u_projection * u_modelView * a_position)');
|
|
if (old != source) need_pm = need_mm = need_pv = 1;
|
|
old = source;
|
|
source = source.replace(/gl_ProjectionMatrix/g, 'u_projection');
|
|
if (old != source) need_pm = 1;
|
|
old = source;
|
|
source = source.replace(/gl_ModelViewMatrixTranspose\[2\]/g, 'vec4(u_modelView[0][2], u_modelView[1][2], u_modelView[2][2], u_modelView[3][2])'); // XXX extremely inefficient
|
|
if (old != source) need_mm = 1;
|
|
old = source;
|
|
source = source.replace(/gl_ModelViewMatrix/g, 'u_modelView');
|
|
if (old != source) need_mm = 1;
|
|
old = source;
|
|
source = source.replace(/gl_Vertex/g, 'a_position');
|
|
if (old != source) need_pv = 1;
|
|
old = source;
|
|
source = source.replace(/gl_ModelViewProjectionMatrix/g, '(u_projection * u_modelView)');
|
|
if (old != source) need_pm = need_mm = 1;
|
|
if (need_pv && !has_pv) source = 'attribute vec4 a_position; \n' + source;
|
|
if (need_mm && !has_mm) source = 'uniform mat4 u_modelView; \n' + source;
|
|
if (need_pm && !has_pm) source = 'uniform mat4 u_projection; \n' + source;
|
|
GL.shaderInfos[shader].ftransform = need_pm || need_mm || need_pv; // we will need to provide the fixed function stuff as attributes and uniforms
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
// XXX To handle both regular texture mapping and cube mapping, we use vec4 for tex coordinates.
|
|
var old = source;
|
|
var need_vtc = source.search('v_texCoord' + i) == -1;
|
|
source = source.replace(new RegExp('gl_TexCoord\\[' + i + '\\]', 'g'), 'v_texCoord' + i)
|
|
.replace(new RegExp('gl_MultiTexCoord' + i, 'g'), 'a_texCoord' + i);
|
|
if (source != old) {
|
|
source = 'attribute vec4 a_texCoord' + i + '; \n' + source;
|
|
if (need_vtc) {
|
|
source = 'varying vec4 v_texCoord' + i + '; \n' + source;
|
|
}
|
|
}
|
|
|
|
old = source;
|
|
source = source.replace(new RegExp('gl_TextureMatrix\\[' + i + '\\]', 'g'), 'u_textureMatrix' + i);
|
|
if (source != old) {
|
|
source = 'uniform mat4 u_textureMatrix' + i + '; \n' + source;
|
|
}
|
|
}
|
|
if (source.indexOf('gl_FrontColor') >= 0) {
|
|
source = 'varying vec4 v_color; \n' +
|
|
source.replace(/gl_FrontColor/g, 'v_color');
|
|
}
|
|
if (source.indexOf('gl_Color') >= 0) {
|
|
source = 'attribute vec4 a_color; \n' +
|
|
source.replace(/gl_Color/g, 'a_color');
|
|
}
|
|
if (source.indexOf('gl_Normal') >= 0) {
|
|
source = 'attribute vec3 a_normal; \n' +
|
|
source.replace(/gl_Normal/g, 'a_normal');
|
|
}
|
|
// fog
|
|
if (source.indexOf('gl_FogFragCoord') >= 0) {
|
|
source = 'varying float v_fogFragCoord; \n' +
|
|
source.replace(/gl_FogFragCoord/g, 'v_fogFragCoord');
|
|
}
|
|
source = ensurePrecision(source);
|
|
} else { // Fragment shader
|
|
for (var i = 0; i < GLImmediate.MAX_TEXTURES; i++) {
|
|
var old = source;
|
|
source = source.replace(new RegExp('gl_TexCoord\\[' + i + '\\]', 'g'), 'v_texCoord' + i);
|
|
if (source != old) {
|
|
source = 'varying vec4 v_texCoord' + i + '; \n' + source;
|
|
}
|
|
}
|
|
if (source.indexOf('gl_Color') >= 0) {
|
|
source = 'varying vec4 v_color; \n' + source.replace(/gl_Color/g, 'v_color');
|
|
}
|
|
if (source.indexOf('gl_Fog.color') >= 0) {
|
|
source = 'uniform vec4 u_fogColor; \n' +
|
|
source.replace(/gl_Fog.color/g, 'u_fogColor');
|
|
}
|
|
if (source.indexOf('gl_Fog.end') >= 0) {
|
|
source = 'uniform float u_fogEnd; \n' +
|
|
source.replace(/gl_Fog.end/g, 'u_fogEnd');
|
|
}
|
|
if (source.indexOf('gl_Fog.scale') >= 0) {
|
|
source = 'uniform float u_fogScale; \n' +
|
|
source.replace(/gl_Fog.scale/g, 'u_fogScale');
|
|
}
|
|
if (source.indexOf('gl_Fog.density') >= 0) {
|
|
source = 'uniform float u_fogDensity; \n' +
|
|
source.replace(/gl_Fog.density/g, 'u_fogDensity');
|
|
}
|
|
if (source.indexOf('gl_FogFragCoord') >= 0) {
|
|
source = 'varying float v_fogFragCoord; \n' +
|
|
source.replace(/gl_FogFragCoord/g, 'v_fogFragCoord');
|
|
}
|
|
source = ensurePrecision(source);
|
|
}
|
|
GLctx.shaderSource(GL.shaders[shader], source);
|
|
};
|
|
|
|
var glCompileShader = _glCompileShader;
|
|
_glCompileShader = _emscripten_glCompileShader = function _glCompileShader(shader) {
|
|
GLctx.compileShader(GL.shaders[shader]);
|
|
};
|
|
|
|
GL.programShaders = {};
|
|
var glAttachShader = _glAttachShader;
|
|
_glAttachShader = _emscripten_glAttachShader = function _glAttachShader(program, shader) {
|
|
if (!GL.programShaders[program]) GL.programShaders[program] = [];
|
|
GL.programShaders[program].push(shader);
|
|
glAttachShader(program, shader);
|
|
};
|
|
|
|
var glDetachShader = _glDetachShader;
|
|
_glDetachShader = _emscripten_glDetachShader = function _glDetachShader(program, shader) {
|
|
var programShader = GL.programShaders[program];
|
|
if (!programShader) {
|
|
Module.printErr('WARNING: _glDetachShader received invalid program: ' + program);
|
|
return;
|
|
}
|
|
var index = programShader.indexOf(shader);
|
|
programShader.splice(index, 1);
|
|
glDetachShader(program, shader);
|
|
};
|
|
|
|
var glUseProgram = _glUseProgram;
|
|
_glUseProgram = _emscripten_glUseProgram = function _glUseProgram(program) {
|
|
if (GL.currProgram != program) {
|
|
GLImmediate.currentRenderer = null; // This changes the FFP emulation shader program, need to recompute that.
|
|
GL.currProgram = program;
|
|
GLImmediate.fixedFunctionProgram = 0;
|
|
glUseProgram(program);
|
|
}
|
|
}
|
|
|
|
var glDeleteProgram = _glDeleteProgram;
|
|
_glDeleteProgram = _emscripten_glDeleteProgram = function _glDeleteProgram(program) {
|
|
glDeleteProgram(program);
|
|
if (program == GL.currProgram) {
|
|
GLImmediate.currentRenderer = null; // This changes the FFP emulation shader program, need to recompute that.
|
|
GL.currProgram = 0;
|
|
}
|
|
};
|
|
|
|
// If attribute 0 was not bound, bind it to 0 for WebGL performance reasons. Track if 0 is free for that.
|
|
var zeroUsedPrograms = {};
|
|
var glBindAttribLocation = _glBindAttribLocation;
|
|
_glBindAttribLocation = _emscripten_glBindAttribLocation = function _glBindAttribLocation(program, index, name) {
|
|
if (index == 0) zeroUsedPrograms[program] = true;
|
|
glBindAttribLocation(program, index, name);
|
|
};
|
|
var glLinkProgram = _glLinkProgram;
|
|
_glLinkProgram = _emscripten_glLinkProgram = function _glLinkProgram(program) {
|
|
if (!(program in zeroUsedPrograms)) {
|
|
GLctx.bindAttribLocation(GL.programs[program], 0, 'a_position');
|
|
}
|
|
glLinkProgram(program);
|
|
};
|
|
|
|
var glBindBuffer = _glBindBuffer;
|
|
_glBindBuffer = _emscripten_glBindBuffer = function _glBindBuffer(target, buffer) {
|
|
glBindBuffer(target, buffer);
|
|
if (target == GLctx.ARRAY_BUFFER) {
|
|
if (GLEmulation.currentVao) {
|
|
GLEmulation.currentVao.arrayBuffer = buffer;
|
|
}
|
|
} else if (target == GLctx.ELEMENT_ARRAY_BUFFER) {
|
|
if (GLEmulation.currentVao) GLEmulation.currentVao.elementArrayBuffer = buffer;
|
|
}
|
|
};
|
|
|
|
var glGetFloatv = _glGetFloatv;
|
|
_glGetFloatv = _emscripten_glGetFloatv = function _glGetFloatv(pname, params) {
|
|
if (pname == 0x0BA6) { // GL_MODELVIEW_MATRIX
|
|
HEAPF32.set(GLImmediate.matrix[0/*m*/], params >> 2);
|
|
} else if (pname == 0x0BA7) { // GL_PROJECTION_MATRIX
|
|
HEAPF32.set(GLImmediate.matrix[1/*p*/], params >> 2);
|
|
} else if (pname == 0x0BA8) { // GL_TEXTURE_MATRIX
|
|
HEAPF32.set(GLImmediate.matrix[2/*t*/ + GLImmediate.clientActiveTexture], params >> 2);
|
|
} else if (pname == 0x0B66) { // GL_FOG_COLOR
|
|
HEAPF32.set(GLEmulation.fogColor, params >> 2);
|
|
} else if (pname == 0x0B63) { // GL_FOG_START
|
|
HEAPF32[((params)>>2)]=GLEmulation.fogStart;
|
|
} else if (pname == 0x0B64) { // GL_FOG_END
|
|
HEAPF32[((params)>>2)]=GLEmulation.fogEnd;
|
|
} else if (pname == 0x0B62) { // GL_FOG_DENSITY
|
|
HEAPF32[((params)>>2)]=GLEmulation.fogDensity;
|
|
} else if (pname == 0x0B65) { // GL_FOG_MODE
|
|
HEAPF32[((params)>>2)]=GLEmulation.fogMode;
|
|
} else {
|
|
glGetFloatv(pname, params);
|
|
}
|
|
};
|
|
|
|
var glHint = _glHint;
|
|
_glHint = _emscripten_glHint = function _glHint(target, mode) {
|
|
if (target == 0x84EF) { // GL_TEXTURE_COMPRESSION_HINT
|
|
return;
|
|
}
|
|
glHint(target, mode);
|
|
};
|
|
|
|
var glEnableVertexAttribArray = _glEnableVertexAttribArray;
|
|
_glEnableVertexAttribArray = _emscripten_glEnableVertexAttribArray = function _glEnableVertexAttribArray(index) {
|
|
glEnableVertexAttribArray(index);
|
|
GLEmulation.enabledVertexAttribArrays[index] = 1;
|
|
if (GLEmulation.currentVao) GLEmulation.currentVao.enabledVertexAttribArrays[index] = 1;
|
|
};
|
|
|
|
var glDisableVertexAttribArray = _glDisableVertexAttribArray;
|
|
_glDisableVertexAttribArray = _emscripten_glDisableVertexAttribArray = function _glDisableVertexAttribArray(index) {
|
|
glDisableVertexAttribArray(index);
|
|
delete GLEmulation.enabledVertexAttribArrays[index];
|
|
if (GLEmulation.currentVao) delete GLEmulation.currentVao.enabledVertexAttribArrays[index];
|
|
};
|
|
|
|
var glVertexAttribPointer = _glVertexAttribPointer;
|
|
_glVertexAttribPointer = _emscripten_glVertexAttribPointer = function _glVertexAttribPointer(index, size, type, normalized, stride, pointer) {
|
|
glVertexAttribPointer(index, size, type, normalized, stride, pointer);
|
|
if (GLEmulation.currentVao) { // TODO: avoid object creation here? likely not hot though
|
|
GLEmulation.currentVao.vertexAttribPointers[index] = [index, size, type, normalized, stride, pointer];
|
|
}
|
|
};
|
|
},getAttributeFromCapability:function (cap) {
|
|
var attrib = null;
|
|
switch (cap) {
|
|
case 0x0de1: // GL_TEXTURE_2D - XXX not according to spec, and not in desktop GL, but works in some GLES1.x apparently, so support it
|
|
// Fall through:
|
|
case 0x8078: // GL_TEXTURE_COORD_ARRAY
|
|
attrib = GLImmediate.TEXTURE0 + GLImmediate.clientActiveTexture; break;
|
|
case 0x8074: // GL_VERTEX_ARRAY
|
|
attrib = GLImmediate.VERTEX; break;
|
|
case 0x8075: // GL_NORMAL_ARRAY
|
|
attrib = GLImmediate.NORMAL; break;
|
|
case 0x8076: // GL_COLOR_ARRAY
|
|
attrib = GLImmediate.COLOR; break;
|
|
}
|
|
return attrib;
|
|
}};
|
|
___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
|
|
Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
|
|
Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
|
|
Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
|
|
Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };
|
|
Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };
|
|
Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
|
|
FS.staticInit();__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;
|
|
__ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
|
|
if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
|
|
(function() {'use strict';function n(e){throw e;}var p=void 0,aa=this;function r(e,c){var d=e.split("."),b=aa;!(d[0]in b)&&b.execScript&&b.execScript("var "+d[0]);for(var a;d.length&&(a=d.shift());)!d.length&&c!==p?b[a]=c:b=b[a]?b[a]:b[a]={}};var u="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;new (u?Uint8Array:Array)(256);var v;for(v=0;256>v;++v)for(var w=v,ba=7,w=w>>>1;w;w>>>=1)--ba;function x(e,c,d){var b,a="number"===typeof c?c:c=0,f="number"===typeof d?d:e.length;b=-1;for(a=f&7;a--;++c)b=b>>>8^y[(b^e[c])&255];for(a=f>>3;a--;c+=8)b=b>>>8^y[(b^e[c])&255],b=b>>>8^y[(b^e[c+1])&255],b=b>>>8^y[(b^e[c+2])&255],b=b>>>8^y[(b^e[c+3])&255],b=b>>>8^y[(b^e[c+4])&255],b=b>>>8^y[(b^e[c+5])&255],b=b>>>8^y[(b^e[c+6])&255],b=b>>>8^y[(b^e[c+7])&255];return(b^4294967295)>>>0}var z=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],y=u?new Uint32Array(z):z;function A(){}A.prototype.getName=function(){return this.name};A.prototype.getData=function(){return this.data};A.prototype.G=function(){return this.H};r("Zlib.GunzipMember",A);r("Zlib.GunzipMember.prototype.getName",A.prototype.getName);r("Zlib.GunzipMember.prototype.getData",A.prototype.getData);r("Zlib.GunzipMember.prototype.getMtime",A.prototype.G);function C(e){var c=e.length,d=0,b=Number.POSITIVE_INFINITY,a,f,g,k,m,q,t,h,l;for(h=0;h<c;++h)e[h]>d&&(d=e[h]),e[h]<b&&(b=e[h]);a=1<<d;f=new (u?Uint32Array:Array)(a);g=1;k=0;for(m=2;g<=d;){for(h=0;h<c;++h)if(e[h]===g){q=0;t=k;for(l=0;l<g;++l)q=q<<1|t&1,t>>=1;for(l=q;l<a;l+=m)f[l]=g<<16|h;++k}++g;k<<=1;m<<=1}return[f,d,b]};var D=[],E;for(E=0;288>E;E++)switch(!0){case 143>=E:D.push([E+48,8]);break;case 255>=E:D.push([E-144+400,9]);break;case 279>=E:D.push([E-256+0,7]);break;case 287>=E:D.push([E-280+192,8]);break;default:n("invalid literal: "+E)}var ca=function(){function e(a){switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:n("invalid length: "+a)}}var c=[],d,b;for(d=3;258>=d;d++)b=e(d),c[d]=b[2]<<24|b[1]<<16|b[0];return c}();u&&new Uint32Array(ca);function G(e,c){this.i=[];this.j=32768;this.d=this.f=this.c=this.n=0;this.input=u?new Uint8Array(e):e;this.o=!1;this.k=H;this.w=!1;if(c||!(c={}))c.index&&(this.c=c.index),c.bufferSize&&(this.j=c.bufferSize),c.bufferType&&(this.k=c.bufferType),c.resize&&(this.w=c.resize);switch(this.k){case I:this.a=32768;this.b=new (u?Uint8Array:Array)(32768+this.j+258);break;case H:this.a=0;this.b=new (u?Uint8Array:Array)(this.j);this.e=this.D;this.q=this.A;this.l=this.C;break;default:n(Error("invalid inflate mode"))}}var I=0,H=1;G.prototype.g=function(){for(;!this.o;){var e=J(this,3);e&1&&(this.o=!0);e>>>=1;switch(e){case 0:var c=this.input,d=this.c,b=this.b,a=this.a,f=p,g=p,k=p,m=b.length,q=p;this.d=this.f=0;f=c[d++];f===p&&n(Error("invalid uncompressed block header: LEN (first byte)"));g=f;f=c[d++];f===p&&n(Error("invalid uncompressed block header: LEN (second byte)"));g|=f<<8;f=c[d++];f===p&&n(Error("invalid uncompressed block header: NLEN (first byte)"));k=f;f=c[d++];f===p&&n(Error("invalid uncompressed block header: NLEN (second byte)"));k|=f<<8;g===~k&&n(Error("invalid uncompressed block header: length verify"));d+g>c.length&&n(Error("input buffer is broken"));switch(this.k){case I:for(;a+g>b.length;){q=m-a;g-=q;if(u)b.set(c.subarray(d,d+q),a),a+=q,d+=q;else for(;q--;)b[a++]=c[d++];this.a=a;b=this.e();a=this.a}break;case H:for(;a+g>b.length;)b=this.e({t:2});break;default:n(Error("invalid inflate mode"))}if(u)b.set(c.subarray(d,d+g),a),a+=g,d+=g;else for(;g--;)b[a++]=c[d++];this.c=d;this.a=a;this.b=b;break;case 1:this.l(da,ea);break;case 2:fa(this);break;default:n(Error("unknown BTYPE: "+e))}}return this.q()};var K=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],L=u?new Uint16Array(K):K,N=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],O=u?new Uint16Array(N):N,P=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],Q=u?new Uint8Array(P):P,T=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],ga=u?new Uint16Array(T):T,ha=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],U=u?new Uint8Array(ha):ha,V=new (u?Uint8Array:Array)(288),W,ia;W=0;for(ia=V.length;W<ia;++W)V[W]=143>=W?8:255>=W?9:279>=W?7:8;var da=C(V),X=new (u?Uint8Array:Array)(30),Y,ja;Y=0;for(ja=X.length;Y<ja;++Y)X[Y]=5;var ea=C(X);function J(e,c){for(var d=e.f,b=e.d,a=e.input,f=e.c,g;b<c;)g=a[f++],g===p&&n(Error("input buffer is broken")),d|=g<<b,b+=8;g=d&(1<<c)-1;e.f=d>>>c;e.d=b-c;e.c=f;return g}function Z(e,c){for(var d=e.f,b=e.d,a=e.input,f=e.c,g=c[0],k=c[1],m,q,t;b<k;){m=a[f++];if(m===p)break;d|=m<<b;b+=8}q=g[d&(1<<k)-1];t=q>>>16;e.f=d>>t;e.d=b-t;e.c=f;return q&65535}function fa(e){function c(a,c,b){var d,e,f,g;for(g=0;g<a;)switch(d=Z(this,c),d){case 16:for(f=3+J(this,2);f--;)b[g++]=e;break;case 17:for(f=3+J(this,3);f--;)b[g++]=0;e=0;break;case 18:for(f=11+J(this,7);f--;)b[g++]=0;e=0;break;default:e=b[g++]=d}return b}var d=J(e,5)+257,b=J(e,5)+1,a=J(e,4)+4,f=new (u?Uint8Array:Array)(L.length),g,k,m,q;for(q=0;q<a;++q)f[L[q]]=J(e,3);g=C(f);k=new (u?Uint8Array:Array)(d);m=new (u?Uint8Array:Array)(b);e.l(C(c.call(e,d,g,k)),C(c.call(e,b,g,m)))}G.prototype.l=function(e,c){var d=this.b,b=this.a;this.r=e;for(var a=d.length-258,f,g,k,m;256!==(f=Z(this,e));)if(256>f)b>=a&&(this.a=b,d=this.e(),b=this.a),d[b++]=f;else{g=f-257;m=O[g];0<Q[g]&&(m+=J(this,Q[g]));f=Z(this,c);k=ga[f];0<U[f]&&(k+=J(this,U[f]));b>=a&&(this.a=b,d=this.e(),b=this.a);for(;m--;)d[b]=d[b++-k]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b};G.prototype.C=function(e,c){var d=this.b,b=this.a;this.r=e;for(var a=d.length,f,g,k,m;256!==(f=Z(this,e));)if(256>f)b>=a&&(d=this.e(),a=d.length),d[b++]=f;else{g=f-257;m=O[g];0<Q[g]&&(m+=J(this,Q[g]));f=Z(this,c);k=ga[f];0<U[f]&&(k+=J(this,U[f]));b+m>a&&(d=this.e(),a=d.length);for(;m--;)d[b]=d[b++-k]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b};G.prototype.e=function(){var e=new (u?Uint8Array:Array)(this.a-32768),c=this.a-32768,d,b,a=this.b;if(u)e.set(a.subarray(32768,e.length));else{d=0;for(b=e.length;d<b;++d)e[d]=a[d+32768]}this.i.push(e);this.n+=e.length;if(u)a.set(a.subarray(c,c+32768));else for(d=0;32768>d;++d)a[d]=a[c+d];this.a=32768;return a};G.prototype.D=function(e){var c,d=this.input.length/this.c+1|0,b,a,f,g=this.input,k=this.b;e&&("number"===typeof e.t&&(d=e.t),"number"===typeof e.z&&(d+=e.z));2>d?(b=(g.length-this.c)/this.r[2],f=258*(b/2)|0,a=f<k.length?k.length+f:k.length<<1):a=k.length*d;u?(c=new Uint8Array(a),c.set(k)):c=k;return this.b=c};G.prototype.q=function(){var e=0,c=this.b,d=this.i,b,a=new (u?Uint8Array:Array)(this.n+(this.a-32768)),f,g,k,m;if(0===d.length)return u?this.b.subarray(32768,this.a):this.b.slice(32768,this.a);f=0;for(g=d.length;f<g;++f){b=d[f];k=0;for(m=b.length;k<m;++k)a[e++]=b[k]}f=32768;for(g=this.a;f<g;++f)a[e++]=c[f];this.i=[];return this.buffer=a};G.prototype.A=function(){var e,c=this.a;u?this.w?(e=new Uint8Array(c),e.set(this.b.subarray(0,c))):e=this.b.subarray(0,c):(this.b.length>c&&(this.b.length=c),e=this.b);return this.buffer=e};function $(e){this.input=e;this.c=0;this.m=[];this.s=!1}$.prototype.F=function(){this.s||this.g();return this.m.slice()};$.prototype.g=function(){for(var e=this.input.length;this.c<e;){var c=new A,d=p,b=p,a=p,f=p,g=p,k=p,m=p,q=p,t=p,h=this.input,l=this.c;c.u=h[l++];c.v=h[l++];(31!==c.u||139!==c.v)&&n(Error("invalid file signature:"+c.u+","+c.v));c.p=h[l++];switch(c.p){case 8:break;default:n(Error("unknown compression method: "+c.p))}c.h=h[l++];q=h[l++]|h[l++]<<8|h[l++]<<16|h[l++]<<24;c.H=new Date(1E3*q);c.N=h[l++];c.M=h[l++];0<(c.h&4)&&(c.I=h[l++]|h[l++]<<8,l+=c.I);if(0<(c.h&8)){m=[];for(k=0;0<(g=h[l++]);)m[k++]=String.fromCharCode(g);c.name=m.join("")}if(0<(c.h&16)){m=[];for(k=0;0<(g=h[l++]);)m[k++]=String.fromCharCode(g);c.J=m.join("")}0<(c.h&2)&&(c.B=x(h,0,l)&65535,c.B!==(h[l++]|h[l++]<<8)&&n(Error("invalid header crc16")));d=h[h.length-4]|h[h.length-3]<<8|h[h.length-2]<<16|h[h.length-1]<<24;h.length-l-4-4<512*d&&(f=d);b=new G(h,{index:l,bufferSize:f});c.data=a=b.g();l=b.c;c.K=t=(h[l++]|h[l++]<<8|h[l++]<<16|h[l++]<<24)>>>0;x(a,p,p)!==t&&n(Error("invalid CRC-32 checksum: 0x"+x(a,p,p).toString(16)+" / 0x"+t.toString(16)));c.L=d=(h[l++]|h[l++]<<8|h[l++]<<16|h[l++]<<24)>>>0;(a.length&4294967295)!==d&&n(Error("invalid input size: "+(a.length&4294967295)+" / "+d));this.m.push(c);this.c=l}this.s=!0;var F=this.m,s,M,R=0,S=0,B;s=0;for(M=F.length;s<M;++s)S+=F[s].data.length;if(u){B=new Uint8Array(S);for(s=0;s<M;++s)B.set(F[s].data,R),R+=F[s].data.length}else{B=[];for(s=0;s<M;++s)B[s]=F[s].data;B=Array.prototype.concat.apply([],B)}return B};r("Zlib.Gunzip",$);r("Zlib.Gunzip.prototype.decompress",$.prototype.g);r("Zlib.Gunzip.prototype.getMembers",$.prototype.F);}).call(typeof window !== "undefined" ? window : global);
|
|
(function(e){function n(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(r===0){break}t.push(r)}return String.fromCharCode.apply(null,t)}function r(e){var t=n(e);t=parseInt(t,8);return isNaN(t)?null:t}var t=512;var i=function(e){var n=e instanceof ArrayBuffer||typeof Buffer!=="undefined"&&e instanceof Buffer;var r=e instanceof Int8Array||e instanceof Uint8Array;if(!n&&!r){throw new Error("Must specify a valid ArrayBuffer, Buffer, INT8Array or Int8Array.")}this.INT8=r?e:new Int8Array(e);this.headers={};this.pos=0;var i=0;while(i<2){var s=this.pos;var o=this._readHeader();if(!o.name){i++;continue}this.headers[o.name]=o;this.pos+=Math.ceil(o.size/t)*t}};i.prototype._readHeader=function(){var e={name:n(this.INT8.subarray(this.pos,this.pos+=100)),mode:r(this.INT8.subarray(this.pos,this.pos+=8)),uid:r(this.INT8.subarray(this.pos,this.pos+=8)),gid:r(this.INT8.subarray(this.pos,this.pos+=8)),size:r(this.INT8.subarray(this.pos,this.pos+=12)),mtime:r(this.INT8.subarray(this.pos,this.pos+=12)),chksum:r(this.INT8.subarray(this.pos,this.pos+=8)),typeflag:n(this.INT8.subarray(this.pos,this.pos+=1)),linkname:n(this.INT8.subarray(this.pos,this.pos+=100)),magic:n(this.INT8.subarray(this.pos,this.pos+=6)),version:n(this.INT8.subarray(this.pos,this.pos+=2)),uname:n(this.INT8.subarray(this.pos,this.pos+=32)),gname:n(this.INT8.subarray(this.pos,this.pos+=32)),devmajor:r(this.INT8.subarray(this.pos,this.pos+=8)),devminor:r(this.INT8.subarray(this.pos,this.pos+=8)),prefix:n(this.INT8.subarray(this.pos,this.pos+=155))};this.pos+=12;e.offset=this.pos;return e};i.prototype.getMembers=function(){return this.headers};i.prototype.getContent=function(e){var t=this.headers[e];if(!t){return null}return this.INT8.subarray(t.offset,t.offset+t.size)};e.Tar=i;if(typeof define!=="undefined"&&define.amd){define(function(){return i})}else if(typeof module!=="undefined"&&module.exports){module.exports=i}})(typeof window !== "undefined" ? window : global);
|
|
_fputc.ret = allocate([0], "i8", ALLOC_STATIC);
|
|
__ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
|
|
___buildEnvironment(ENV);
|
|
GLEmulation.init();
|
|
GLImmediate.setupFuncs(); Browser.moduleContextCreatedCallbacks.push(function() { GLImmediate.init() });
|
|
var GLctx; GL.init()
|
|
STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
|
|
|
|
staticSealed = true; // seal the static portion of memory
|
|
|
|
STACK_MAX = STACK_BASE + 5242880;
|
|
|
|
DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
|
|
|
|
assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
|
|
|
|
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);
|
|
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);
|
|
|
|
var Math_min = Math.min;
|
|
function invoke_viiiii(index,a1,a2,a3,a4,a5) {
|
|
try {
|
|
Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiiif(index,a1,a2,a3,a4,a5,a6) {
|
|
try {
|
|
return Module["dynCall_iiiiiif"](index,a1,a2,a3,a4,a5,a6);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_vif(index,a1,a2) {
|
|
try {
|
|
Module["dynCall_vif"](index,a1,a2);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiifi(index,a1,a2,a3,a4,a5) {
|
|
try {
|
|
return Module["dynCall_iiiifi"](index,a1,a2,a3,a4,a5);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiiiiiiifiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) {
|
|
try {
|
|
return Module["dynCall_iiiiiiiiiifiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_vii(index,a1,a2) {
|
|
try {
|
|
Module["dynCall_vii"](index,a1,a2);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_ii(index,a1) {
|
|
try {
|
|
return Module["dynCall_ii"](index,a1);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_viiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) {
|
|
try {
|
|
Module["dynCall_viiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_viifi(index,a1,a2,a3,a4) {
|
|
try {
|
|
Module["dynCall_viifi"](index,a1,a2,a3,a4);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) {
|
|
try {
|
|
return Module["dynCall_iiiiiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiifi(index,a1,a2,a3,a4) {
|
|
try {
|
|
return Module["dynCall_iiifi"](index,a1,a2,a3,a4);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_if(index,a1) {
|
|
try {
|
|
return Module["dynCall_if"](index,a1);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiii(index,a1,a2,a3) {
|
|
try {
|
|
return Module["dynCall_iiii"](index,a1,a2,a3);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) {
|
|
try {
|
|
return Module["dynCall_iiiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_vi(index,a1) {
|
|
try {
|
|
Module["dynCall_vi"](index,a1);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_vifi(index,a1,a2,a3) {
|
|
try {
|
|
Module["dynCall_vifi"](index,a1,a2,a3);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_fii(index,a1,a2) {
|
|
try {
|
|
return Module["dynCall_fii"](index,a1,a2);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) {
|
|
try {
|
|
return Module["dynCall_iiiiiiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iif(index,a1,a2) {
|
|
try {
|
|
return Module["dynCall_iif"](index,a1,a2);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {
|
|
try {
|
|
Module["dynCall_viiiiiii"](index,a1,a2,a3,a4,a5,a6,a7);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_fiiff(index,a1,a2,a3,a4) {
|
|
try {
|
|
return Module["dynCall_fiiff"](index,a1,a2,a3,a4);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iii(index,a1,a2) {
|
|
try {
|
|
return Module["dynCall_iii"](index,a1,a2);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_f(index) {
|
|
try {
|
|
return Module["dynCall_f"](index);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_i(index) {
|
|
try {
|
|
return Module["dynCall_i"](index);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiii(index,a1,a2,a3,a4,a5) {
|
|
try {
|
|
return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_viii(index,a1,a2,a3) {
|
|
try {
|
|
Module["dynCall_viii"](index,a1,a2,a3);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_v(index) {
|
|
try {
|
|
Module["dynCall_v"](index);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8) {
|
|
try {
|
|
return Module["dynCall_iiiiiiiii"](index,a1,a2,a3,a4,a5,a6,a7,a8);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_iiiii(index,a1,a2,a3,a4) {
|
|
try {
|
|
return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_viif(index,a1,a2,a3) {
|
|
try {
|
|
Module["dynCall_viif"](index,a1,a2,a3);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function invoke_viiii(index,a1,a2,a3,a4) {
|
|
try {
|
|
Module["dynCall_viiii"](index,a1,a2,a3,a4);
|
|
} catch(e) {
|
|
if (typeof e !== 'number' && e !== 'longjmp') throw e;
|
|
asm["setThrew"](1, 0);
|
|
}
|
|
}
|
|
|
|
function asmPrintInt(x, y) {
|
|
Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
|
|
}
|
|
function asmPrintFloat(x, y) {
|
|
Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
|
|
}
|
|
// EMSCRIPTEN_START_ASM
|
|
var 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.___rand_seed|0;var p=env._stdout|0;var q=env._stderr|0;var r=env._in6addr_any|0;var s=+env.NaN;var t=+env.Infinity;var u=0;var v=0;var w=0;var x=0;var y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0.0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=0;var O=0;var P=0;var Q=0;var R=global.Math.floor;var S=global.Math.abs;var T=global.Math.sqrt;var U=global.Math.pow;var V=global.Math.cos;var W=global.Math.sin;var X=global.Math.tan;var Y=global.Math.acos;var Z=global.Math.asin;var _=global.Math.atan;var $=global.Math.atan2;var aa=global.Math.exp;var ba=global.Math.log;var ca=global.Math.ceil;var da=global.Math.imul;var ea=env.abort;var fa=env.assert;var ga=env.asmPrintInt;var ha=env.asmPrintFloat;var ia=env.min;var ja=env.jsCall;var ka=env.invoke_viiiii;var la=env.invoke_iiiiiif;var ma=env.invoke_vif;var na=env.invoke_iiiifi;var oa=env.invoke_iiiiiiiiiifiii;var pa=env.invoke_vii;var qa=env.invoke_ii;var ra=env.invoke_viiiiiiiiiii;var sa=env.invoke_viifi;var ta=env.invoke_iiiiiiiiiiiiii;var ua=env.invoke_iiifi;var va=env.invoke_if;var wa=env.invoke_iiii;var xa=env.invoke_iiiiiiiiiiii;var ya=env.invoke_vi;var za=env.invoke_vifi;var Aa=env.invoke_fii;var Ba=env.invoke_iiiiiiiiiiiii;var Ca=env.invoke_iif;var Da=env.invoke_viiiiiii;var Ea=env.invoke_fiiff;var Fa=env.invoke_iii;var Ga=env.invoke_f;var Ha=env.invoke_i;var Ia=env.invoke_iiiiii;var Ja=env.invoke_viii;var Ka=env.invoke_v;var La=env.invoke_iiiiiiiii;var Ma=env.invoke_iiiii;var Na=env.invoke_viif;var Oa=env.invoke_viiii;var Pa=env._llvm_lifetime_end;var Qa=env._lseek;var Ra=env._getaddrinfo;var Sa=env.__scanString;var Ta=env._fclose;var Ua=env._glLinkProgram;var Va=env._glHint;var Wa=env._fflush;var Xa=env._strtol;var Ya=env._fputc;var Za=env._glGetString;var _a=env._fwrite;var $a=env._send;var ab=env._mktime;var bb=env.__inet_pton6_raw;var cb=env._dlerror;var db=env._rint;var eb=env._glCompileShader;var fb=env._isspace;var gb=env._localtime;var hb=env._read;var ib=env.__inet_ntop6_raw;var jb=env._sprintf;var kb=env._Sys_ErrorDialog;var lb=env._dlclose;var mb=env._fileno;var nb=env._strstr;var ob=env._ctime;var pb=env._fsync;var qb=env._signal;var rb=env._remove;var sb=env._recvfrom;var tb=env._fmod;var ub=env._sendto;var vb=env._sscanf;var wb=env._glCreateShader;var xb=env._round;var yb=env._llvm_va_end;var zb=env._snprintf;var Ab=env._VM_Compile;var Bb=env._Sys_Mkdir;var Cb=env._glVertexAttribPointer;var Db=env.__getFloat;var Eb=env._freeaddrinfo;var Fb=env._connect;var Gb=env._close;var Hb=env._tcsetattr;var Ib=env._strchr;var Jb=env._tcgetattr;var Kb=env._VM_SuspendCompiled;var Lb=env._clock;var Mb=env.___setErrNo;var Nb=env._emscripten_exit_with_live_runtime;var Ob=env._Sys_PID;var Pb=env._Sys_Cwd;var Qb=env._ftell;var Rb=env._glDeleteProgram;var Sb=env._exit;var Tb=env._select;var Ub=env._asctime;var Vb=env._strrchr;var Wb=env._glAttachShader;var Xb=env._fcntl;var Yb=env._ferror;var Zb=env._copysign;var _b=env._localtime_r;var $b=env._glBindAttribLocation;var ac=env._asctime_r;var bc=env._emscripten_memcpy_big;var cc=env._getnameinfo;var dc=env._recv;var ec=env._dlopen;var fc=env._setsockopt;var gc=env._cos;var hc=env._putchar;var ic=env._socket;var jc=env._glActiveTexture;var kc=env._VM_Destroy;var lc=env._mkport;var mc=env._glDetachShader;var nc=env.__exit;var oc=env._Sys_SetEnv;var pc=env._Sys_FreeFileList;var qc=env._tzset;var rc=env._fabsf;var sc=env._floorf;var tc=env.__inet_pton4_raw;var uc=env._glDisableVertexAttribArray;var vc=env._gethostbyname;var wc=env._toupper;var xc=env._glShaderSource;var yc=env._pread;var zc=env._fopen;var Ac=env._open;var Bc=env._sqrtf;var Cc=env._gethostname;var Dc=env._glDisable;var Ec=env._isalnum;var Fc=env._fputs;var Gc=env._qsort;var Hc=env._Sys_PlatformInit;var Ic=env._Sys_Sleep;var Jc=env._Sys_DefaultHomePath;var Kc=env._Sys_PlatformExit;var Lc=env._glEnableVertexAttribArray;var Mc=env._rmdir;var Nc=env._glBindBuffer;var Oc=env._glIsEnabled;var Pc=env._Sys_PIDIsRunning;var Qc=env._srand;var Rc=env._VM_CallCompiled;var Sc=env._gai_strerror;var Tc=env.__formatString;var Uc=env._getenv;var Vc=env._atoi;var Wc=env._vfprintf;var Xc=env._glGetFloatv;var Yc=env._sbrk;var Zc=env._Sys_FS_Shutdown;var _c=env.___errno_location;var $c=env._strerror;var ad=env._glGetIntegerv;var bd=env._llvm_lifetime_start;var cd=env._llvm_bswap_i32;var dd=env.__parseInt;var ed=env._Sys_RandomBytes;var fd=env._vsnprintf;var gd=env._glUseProgram;var hd=env._htonl;var id=env._sysconf;var jd=env._dlsym;var kd=env._fread;var ld=env._abort;var md=env._fprintf;var nd=env.__read_sockaddr;var od=env.___buildEnvironment;var pd=env.__reallyNegative;var qd=env.__write_sockaddr;var rd=env._strncat;var sd=env._htons;var td=env._glEnable;var ud=env._Sys_ListFiles;var vd=env._fseek;var wd=env._sqrt;var xd=env._write;var yd=env._sin;var zd=env._Sys_GetCurrentUser;var Ad=env._ceilf;var Bd=env._longjmp;var Cd=env._emscripten_set_main_loop;var Dd=env._time;var Ed=env._Sys_Dirname;var Fd=env._if_nametoindex;var Gd=env._strpbrk;var Hd=env._ioctl;var Id=env._unlink;var Jd=env._Sys_Milliseconds;var Kd=env.__inet_ntop4_raw;var Ld=env._pwrite;var Md=env._fabs;var Nd=env._strerror_r;var Od=env._bind;var Pd=env._atan2;var Qd=env._glGetBooleanv;var Rd=env._setvbuf;var Sd=env._llvm_bswap_i16;var Td=env._Sys_FS_Startup;var Ud=env._Sys_FOpen;var Vd=env._Sys_Mkfifo;var Wd=0.0;
|
|
// EMSCRIPTEN_START_FUNCS
|
|
function Mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=i;i=i+8|0;f=1;g=0;j=i;i=i+168|0;c[j>>2]=0;while(1)switch(f|0){case 1:k=e|0;pa(50,59672,(l=i,i=i+24|0,c[l>>2]=59560,c[l+8>>2]=59496,c[l+16>>2]=59408,l)|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;i=l;m=cy(2550656,f,j)|0;f=24;break;case 24:if((m|0)==(-2|0)){f=23;break}else if((m|0)==0){f=3;break}else{f=2;break};case 2:pa(22,59328,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;i=l;case 3:Zx(1497840,0,6144)|0;n=Fa(54,k|0,4)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;if((n|0)==0){f=5;break}else{f=4;break};case 4:ya(40,c[k>>2]|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;f=6;break;case 5:n=qa(58,0)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;ya(40,n|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;f=6;break;case 6:Zx(1693648,0,24576)|0;c[423410]=0;c[423408]=0;a[768]=1;o=Fa(50,524288,1)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[143848]=o;if((o|0)==0){f=7;break}else{f=8;break};case 7:Ja(8,0,25304,(l=i,i=i+8|0,h[l>>3]=.5,l)|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;i=l;case 8:n=o+32|0;p=n;q=o+8|0;c[o+20>>2]=p;c[o+16>>2]=p;c[o+12>>2]=1;c[o+24>>2]=0;c[q>>2]=0;c[o+28>>2]=p;c[o>>2]=524288;c[o+4>>2]=0;p=q;c[o+40>>2]=p;c[o+44>>2]=p;c[o+36>>2]=0;c[o+48>>2]=1919505;c[n>>2]=524256;Ka(4);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;Ja(6,1722632,b|0,1024);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[430626]=1722632;c[429560]=1;r=0;s=1722632;f=9;break;case 9:t=(r|0)==0;if(t){w=s;f=10;break}else{x=s;f=13;break};case 10:switch(a[w]|0){case 43:case 10:case 13:{f=11;break};case 34:{y=w;f=14;break};case 0:{f=18;break};default:{z=r;A=w;f=15;break}}break;case 11:B=c[429560]|0;if((B|0)==32){f=18;break}else{f=12;break};case 12:n=w+1|0;c[1722504+(B<<2)>>2]=n;c[429560]=B+1;a[w]=0;w=n;f=10;break;case 13:n=a[x]|0;if((n<<24>>24|0)==34){y=x;f=14;break}else if((n<<24>>24|0)==10|(n<<24>>24|0)==13){f=16;break}else if((n<<24>>24|0)==0){f=18;break}else{z=r;A=x;f=15;break};case 14:z=t&1;A=y;f=15;break;case 15:r=z;s=A+1|0;f=9;break;case 16:C=c[429560]|0;if((C|0)==32){f=18;break}else{f=17;break};case 17:n=x+1|0;c[1722504+(C<<2)>>2]=n;c[429560]=C+1;a[x]=0;x=n;f=13;break;case 18:Ka(56);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;ya(36,0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;n=wa(6,24864,24520,33)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;p=c[n+32>>2]|0;D=(p|0)<24?25165824:p<<20;c[154354]=D;E=Fa(50,D|0,1)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[179598]=E;if((E|0)==0){f=19;break}else{f=20;break};case 19:Ja(8,0,24216,(l=i,i=i+8|0,c[l>>2]=(D|0)/1048576|0,l)|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;i=l;case 20:p=E+32|0;n=p;q=E+8|0;c[E+20>>2]=n;c[E+16>>2]=n;c[E+12>>2]=1;c[E+24>>2]=0;c[q>>2]=0;c[E+28>>2]=n;c[E>>2]=D;c[E+4>>2]=0;n=q;c[E+40>>2]=n;c[E+44>>2]=n;c[E+36>>2]=0;c[E+48>>2]=1919505;c[p>>2]=D-32;Ka(26);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;p=wa(6,59296,18544,256)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[430622]=p;Ka(18);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;p=wa(6,58840,18544,64)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[423402]=p;p=wa(6,58528,58440,16)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[430924]=p;p=wa(6,58376,2551544,16)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[429582]=p;if((a[c[(c[430924]|0)+4>>2]|0]|0)==0){f=21;break}else{f=22;break};case 21:ya(38,58528);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;f=22;break;case 22:p=Fa(50,1,8)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;n=p;c[p+4>>2]=52;q=Fa(50,4,1)|0;if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;c[p>>2]=q;c[469154]=(c[469154]|0)+1;c[q>>2]=d;ya(30,n|0);if((u|0)!=0&(v|0)!=0){g=dy(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return}u=v=0;f=23;break;case 23:i=e;return;case-1:if((g|0)==1){m=v;f=24}u=v=0;break}}function Nj(b,d){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;d=i;i=i+8|0;e=d|0;f=c[b>>2]|0;g=c[f>>2]|0;if((f|0)!=0){Gx(f)}Gx(b);c[469154]=(c[469154]|0)-1;Bj();Pi(55304,50);b=c[430622]|0;do{if((b|0)!=0){if((c[b+32>>2]|0)==0){break}Pi(55160,22);Pi(55128,62);Pi(55080,124)}}while(0);Pi(55032,92);Pi(55016,16);Pi(54696,70);Qi(54696,26);Pi(54488,8);Ij();fj(0);b=jk(56712,54480,16)|0;c[430624]=b;Fk(b,1.0,2.0,1);sj();c[378060]=c[378060]&-2;c[430928]=jk(55328,54480,1)|0;c[429568]=jk(54464,54432,1)|0;c[430922]=jk(54336,54480,1)|0;c[429570]=jk(38208,18544,256)|0;c[423396]=jk(54296,54480,520)|0;c[429594]=jk(54128,18544,512)|0;c[423406]=jk(54080,18544,512)|0;c[423404]=jk(54064,18544,0)|0;c[423398]=jk(53672,18544,512)|0;c[430916]=jk(53472,18544,512)|0;c[469150]=jk(53424,18544,64)|0;c[64860]=jk(53408,18544,64)|0;c[469152]=jk(53336,18544,512)|0;c[64864]=jk(53208,18544,512)|0;c[423400]=jk(53152,18544,64)|0;c[430914]=jk(53048,18544,64)|0;c[430920]=jk(52968,18544,0)|0;c[430926]=jk(52888,18544,1)|0;c[423136]=jk(52600,18544,64)|0;c[429564]=jk(52400,18544,1)|0;c[429562]=jk(52336,18544,64)|0;c[429566]=jk(52312,18544,1)|0;c[430930]=jk(52216,18544,64)|0;c[430918]=jk(52184,18544,1)|0;jk(18520,2551544,1088)|0;c[429580]=jk(52136,18544,1)|0;b=Hn(52024,(f=i,i=i+24|0,c[f>>2]=59560,c[f+8>>2]=59496,c[f+16>>2]=59408,f)|0)|0;i=f;c[423134]=jk(51936,b,68)|0;c[429584]=jk(51920,51640,20)|0;b=Hn(21192,(f=i,i=i+8|0,c[f>>2]=71,f)|0)|0;i=f;h=jk(51368,b,20)|0;c[429556]=h;jk(51304,c[h+4>>2]|0,64)|0;fx();bx()|0;h=e;if((ed(h|0,4)|0)==0){_i(56176,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;a[h]=(Yx()|0)%255|0;a[h+1|0]=(Yx()|0)%255|0;a[h+2|0]=(Yx()|0)%255|0;a[h+3|0]=(Yx()|0)%255|0}pm(c[e>>2]&65535);oo();Gg();c[(c[430624]|0)+20>>2]=0;c[429590]=Gj()|0;if((c[429560]|0)>0){e=0;h=0;while(1){b=1722504+(e<<2)|0;j=c[b>>2]|0;do{if((j|0)==0){k=h}else{if((a[j]|0)==0){k=h;break}if((Cn(j,47736,3)|0)==0){k=h;break}Ai(c[b>>2]|0);Ai(46552);k=1}}while(0);b=e+1|0;if((b|0)<(c[429560]|0)){e=b;h=k}else{break}}if((k|0)==0){l=15}}else{l=15}do{if((l|0)==15){if((c[(c[430624]|0)+32>>2]|0)!=0){break}Ai(51272);k=c[429580]|0;if((c[k+32>>2]|0)!=0){break}nk(c[k>>2]|0,54480);nk(51256,51128)}}while(0);nk(51096,54480);Vw(0);nk(51064,18544);c[429588]=1;do{if((c[(c[430928]|0)+32>>2]|0)!=0){if(a[61288]|0){m=c[659022]|0}else{l=(ex()|0)&128;c[659022]=l;a[61288]=1;m=l}if((m|0)!=0){break}nk(55328,18544)}}while(0);m=jk(51024,2551544,33)|0;c[429558]=m;l=c[m+4>>2]|0;if((a[l]|0)==0){_i(50984,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;n=g+4|0;o=c[n>>2]|0;ae[o&127](g,0);i=d;return}c[164648]=Xk(l)|0;_i(50984,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;n=g+4|0;o=c[n>>2]|0;ae[o&127](g,0);i=d;return}function Oj(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=c[164648]|0;if((b|0)==0){return}d=c[659012]|0;e=bl(2635024+d|0,1023-d|0,b)|0;if((e|0)>0){f=e}else{return}do{e=c[659012]|0;b=e+f|0;do{if((f|0)>0){d=e;g=0;while(1){h=2635024+d|0;i=a[h]|0;if((i<<24>>24|0)==10|(i<<24>>24|0)==13){j=8}else if((i<<24>>24|0)==0){a[h]=10;j=8}else{k=g;l=d+1|0}if((j|0)==8){j=0;h=d+1|0;k=2635024+h|0;l=h}if((l|0)<(b|0)){d=l;g=k}else{break}}a[2635024+b|0]=0;c[659012]=b;if((k|0)==0){j=12;break}g=a[k]|0;a[k]=0;Bi(2,2635024);a[k]=g;g=(c[659012]|0)+(2635024-k)|0;c[659012]=g;_x(2635024,k|0,g+1|0)|0;m=g}else{a[2635024+b|0]=0;c[659012]=b;j=12}}while(0);do{if((j|0)==12){j=0;if(!(b>>>0>1022>>>0)){m=b;break}Bi(2,2635024);c[659012]=0;m=0}}while(0);f=bl(2635024+m|0,1023-m|0,c[164648]|0)|0;}while((f|0)>0);return}function Pj(){var a=0,b=0,d=0;a=i;if((c[429588]|0)==0){i=a;return}b=c[378060]|0;if((b&1|0)==0){i=a;return}c[378060]=b&-2;b=Vk(57840)|0;if((b|0)==0){_i(58280,(d=i,i=i+8|0,c[d>>2]=57840,d)|0);i=d;i=a;return}else{dl(b,58056,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;Hw(b);xk(b);Uk(b);i=a;return}}function Qj(){var a=0,b=0,d=0,e=0,f=0,g=0;a=i;i=i+64|0;b=a|0;if((xi()|0)!=2){_i(57736,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;e=64;f=0;i=a;return}rn(b,yi(1)|0,64);un(b,64,57576);_i(57512,(d=i,i=i+8|0,c[d>>2]=b,d)|0);i=d;g=Vk(b)|0;if((g|0)==0){_i(58280,(d=i,i=i+8|0,c[d>>2]=b,d)|0);i=d;e=64;f=0;i=a;return}else{dl(g,58056,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;Hw(g);xk(g);Uk(g);e=64;f=0;i=a;return}}function Rj(){var b=0,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,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;b=i;d=1;e=0;f=i;i=i+168|0;c[f>>2]=0;while(1)switch(d|0){case 1:h=c[469154]|0;j=cy(2550656,d,f)|0;d=58;break;case 58:if((j|0)==0){d=2;break}else{d=57;break};case 2:Ka(46);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;if((c[(c[423404]|0)+32>>2]|0)==0){k=0;d=4;break}else{d=3;break};case 3:l=Ha(12)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;k=l;d=4;break;case 4:if((c[(c[423398]|0)+32>>2]|0)==0){d=5;break}else{m=1;d=16;break};case 5:if((c[(c[430624]|0)+32>>2]|0)==0){d=7;break}else{d=6;break};case 6:l=Ha(4)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;m=l;d=16;break;case 7:if((c[(c[429562]|0)+32>>2]|0)==0){d=10;break}else{d=8;break};case 8:n=c[(c[429566]|0)+32>>2]|0;if((n|0)>0){d=9;break}else{d=10;break};case 9:o=1e3/(n|0)|0;d=15;break;case 10:if((c[(c[423136]|0)+32>>2]|0)==0){d=13;break}else{d=11;break};case 11:p=c[(c[429564]|0)+32>>2]|0;if((p|0)>0){d=12;break}else{d=13;break};case 12:o=1e3/(p|0)|0;d=15;break;case 13:q=c[(c[429568]|0)+32>>2]|0;if((q|0)>0){d=14;break}else{o=1;d=15;break};case 14:o=1e3/(q|0)|0;d=15;break;case 15:l=(c[429590]|0)-o-(c[659014]|0)+(c[659016]|0)|0;r=(l|0)>(o|0)?o:l;c[659016]=r;m=o-r|0;d=16;break;case 16:d=17;break;case 17:if((c[(c[423400]|0)+32>>2]|0)==0){d=19;break}else{d=18;break};case 18:r=Ha(16)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;l=Ha(12)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;s=l-(c[429590]|0)|0;l=(s|0)<(m|0)?m-s|0:0;t=(r|0)<(l|0)?r:l;d=20;break;case 19:l=Ha(12)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;r=l-(c[429590]|0)|0;t=(r|0)<(m|0)?m-r|0:0;d=20;break;case 20:if((c[(c[430918]|0)+32>>2]|0)!=0|(t|0)<1){d=21;break}else{d=22;break};case 21:ya(100,0);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;d=23;break;case 22:ya(100,t-1|0);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;d=23;break;case 23:r=Ha(12)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;w=c[429590]|0;if((r-w|0)<(m|0)){d=17;break}else{d=24;break};case 24:c[659014]=w;r=Ha(18)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;c[429590]=r;x=r-(c[659014]|0)|0;Ka(116);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;if((c[469154]|0)==(h|0)){d=25;break}else{d=57;break};case 25:y=c[430928]|0;if((c[y+20>>2]|0)==0){d=33;break}else{d=26;break};case 26:if((c[y+32>>2]|0)==0){d=32;break}else{d=27;break};case 27:if(a[61288]|0){d=29;break}else{d=28;break};case 28:r=Ha(6)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;l=r&128;c[659022]=l;a[61288]=1;z=l;d=30;break;case 29:z=c[659022]|0;d=30;break;case 30:if((z|0)==0){d=31;break}else{d=32;break};case 31:pa(70,55328,18544);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;d=32;break;case 32:c[(c[430928]|0)+20>>2]=0;d=33;break;case 33:l=c[(c[429594]|0)+32>>2]|0;if((l|0)==0){d=34;break}else{A=l;d=38;break};case 34:B=+g[(c[423396]|0)+28>>2];if(B!=0.0){d=35;break}else{d=36;break};case 35:A=~~(+(x|0)*B);d=38;break;case 36:if((c[(c[430916]|0)+32>>2]|0)==0){A=x;d=38;break}else{d=37;break};case 37:A=~~(+(x|0)*B);d=38;break;case 38:if((A|0)<1){d=39;break}else{C=A;d=41;break};case 39:if(+g[(c[423396]|0)+28>>2]!=0.0){d=40;break}else{C=A;d=41;break};case 40:C=1;d=41;break;case 41:D=(c[(c[423400]|0)+32>>2]|0)!=0;if((c[(c[430624]|0)+32>>2]|0)==0){d=44;break}else{d=42;break};case 42:if(D&(C|0)>500){d=43;break}else{E=5e3;d=45;break};case 43:pa(50,57056,(F=i,i=i+8|0,c[F>>2]=C,F)|0);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;i=F;E=5e3;d=45;break;case 44:E=D?200:5e3;d=45;break;case 45:G=(C|0)>(E|0)?E:C;if((c[(c[423404]|0)+32>>2]|0)==0){H=0;d=47;break}else{d=46;break};case 46:l=Ha(12)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;H=l;d=47;break;case 47:ya(92,G|0);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;if((c[(c[430624]|0)+20>>2]|0)==0){d=50;break}else{d=48;break};case 48:wa(6,56712,18544,0)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;c[(c[430624]|0)+20>>2]=0;if((c[(c[430624]|0)+32>>2]|0)==0){d=49;break}else{d=50;break};case 49:ya(66,56536);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;Ka(76);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;d=50;break;case 50:if((c[(c[423404]|0)+32>>2]|0)==0){I=0;d=52;break}else{d=51;break};case 51:l=Ha(12)|0;if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;I=l;d=52;break;case 52:Ka(24);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;if((c[(c[423404]|0)+32>>2]|0)==0){d=54;break}else{d=53;break};case 53:l=I-H|0;r=c[33770]|0;s=c[33772]|0;J=c[33774]|0;pa(50,56416,(F=i,i=i+64|0,c[F>>2]=c[429592],c[F+8>>2]=l,c[F+16>>2]=l-r,c[F+24>>2]=H-k,c[F+32>>2]=-(s+J|0),c[F+40>>2]=r,c[F+48>>2]=s,c[F+56>>2]=J,F)|0);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;i=F;d=54;break;case 54:if((c[(c[423406]|0)+32>>2]|0)==0){d=56;break}else{d=55;break};case 55:J=c[469174]|0;s=c[469172]|0;r=c[469168]|0;pa(50,56312,(F=i,i=i+32|0,c[F>>2]=c[469164],c[F+8>>2]=J,c[F+16>>2]=s,c[F+24>>2]=r,F)|0);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;i=F;c[469164]=0;c[469174]=0;c[469172]=0;c[469168]=0;d=56;break;case 56:Ka(86);if((u|0)!=0&(v|0)!=0){e=dy(c[u>>2]|0,f)|0;if((e|0)>0){d=-1;break}else return}u=v=0;c[429592]=(c[429592]|0)+1;d=57;break;case 57:i=b;return;case-1:if((e|0)==1){j=v;d=58}u=v=0;break}}function Sj(a){a=a|0;Zx(a+12|0,0,256)|0;c[a>>2]=0;c[a+4>>2]=0;return}function Tj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;c[179594]=0;a[575416]=0;Ll(b,d,e,28,f);if((Vj()|0)!=0){return}Ll(b,d,e,68,f);return}function Uj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[423130]|0;if((Cn(b,d,Wx(d|0)|0)|0)!=0){return}d=c[179594]|0;c[179594]=d+1;if((d|0)==0){rn(575416,b,1024);return}d=a[575416]|0;if(d<<24>>24==0){return}else{e=0;f=575416;g=d}while(1){if(!(e>>>0<(Wx(b|0)|0)>>>0)){break}d=ey(g<<24>>24|0)|0;if((d|0)!=(ey(a[b+e|0]|0)|0)){a[f]=0}d=e+1|0;h=575416+d|0;i=a[h]|0;if(i<<24>>24==0){j=10;break}else{e=d;f=h;g=i}}if((j|0)==10){return}a[f]=0;return}function Vj(){var a=0,b=0,d=0,e=0,f=0;a=i;if((c[179594]|0)==0){b=1;i=a;return b|0}d=c[423132]|0;e=Wx(d+12|0)|0;f=e-(Wx(c[423130]|0)|0)|0;rn(d+12+f|0,575416,256-f|0);f=c[423132]|0;d=f+12|0;c[f>>2]=Wx(d|0)|0;if((c[179594]|0)==1){vn(d,256,55400);f=c[423132]|0;c[f>>2]=(c[f>>2]|0)+1;b=1;i=a;return b|0}else{_i(55344,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;b=0;i=a;return b|0}return 0}function Wj(a){a=a|0;var b=0,d=0;b=i;if((Cn(a,575416,Wx(575416)|0)|0)!=0){i=b;return}_i(55696,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}function Xj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=e;e=d;d=b;a:while(1){g=On(d,56272)|0;Oi(g);b=xi()|0;if((a[g+((Wx(g|0)|0)-1)|0]|0)==32){c[423130]=2551544;h=b+1|0;i=2551544}else{j=yi(b-1|0)|0;c[423130]=j;h=b;i=j}if((h|0)<=1){break}k=yi(0)|0;j=a[g]|0;if((j<<24>>24|0)==59){l=0}else if((j<<24>>24|0)==0){m=12;break}else{j=Wx(g|0)|0;b=1;while(1){if(!(b>>>0<j>>>0)){m=12;break a}if((a[g+b|0]|0)==59){l=b;break}else{b=b+1|0}}}if((g+l|0)==0){m=12;break}f=1;e=1;d=g+(l+1)|0}if((m|0)==12){Ti(k,g,h);return}h=a[i]|0;if((h<<24>>24|0)==92|(h<<24>>24|0)==47){h=i+1|0;c[423130]=h;n=h}else{n=i}c[179594]=0;a[575416]=0;if((a[n]|0)==0){return}n=(e|0)!=0;if(n){Si(28)}e=(f|0)!=0;if(e){ik(28)}if((Vj()|0)!=0){return}if(n){Si(68)}if(!e){return}ik(110);return}function Yj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;i=i+64|0;d=b|0;if((Cn(a,575416,Wx(575416)|0)|0)!=0){e=64;f=0;i=b;return}In(d,fk(a)|0);_i(56e3,(g=i,i=i+16|0,c[g>>2]=a,c[g+8>>2]=d,g)|0);i=g;e=64;f=0;i=b;return}function Zj(a){a=a|0;c[423132]=a;Xj(a+12|0,1,1);return}function _j(){return fk(56088)|0}function $j(){return fk(56016)|0}function ak(){var a=0;if((xi()|0)>1){aj(1,50456,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a}else{aj(0,50392,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a}}function bk(){ea(0);return}function ck(){var a=0,b=0,d=0.0,e=0.0;a=i;if((xi()|0)!=2){_i(50704,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}d=+Qx(yi(1)|0);b=Gj()|0;e=d;do{}while(!(+((Gj()|0)-b|0)*.001>e));i=a;return}function dk(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=a[b]|0;if(d<<24>>24==0){e=0}else{f=0;h=0;i=d;do{f=(da((ey(i<<24>>24|0)|0)<<24>>24,h+119|0)|0)+f|0;h=h+1|0;i=a[b+h|0]|0;}while(!(i<<24>>24==0));e=f&255}f=c[785992+(e<<2)>>2]|0;if((f|0)==0){j=0.0;return+j}else{k=f}while(1){if((tn(b,c[k>>2]|0)|0)==0){break}f=c[k+60>>2]|0;if((f|0)==0){j=0.0;l=8;break}else{k=f}}if((l|0)==8){return+j}j=+g[k+28>>2];return+j}function ek(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a[b]|0;if(d<<24>>24==0){e=0}else{f=0;g=0;h=d;do{f=(da((ey(h<<24>>24|0)|0)<<24>>24,g+119|0)|0)+f|0;g=g+1|0;h=a[b+g|0]|0;}while(!(h<<24>>24==0));e=f&255}f=c[785992+(e<<2)>>2]|0;if((f|0)==0){i=0;return i|0}else{j=f}while(1){if((tn(b,c[j>>2]|0)|0)==0){break}f=c[j+60>>2]|0;if((f|0)==0){i=0;k=8;break}else{j=f}}if((k|0)==8){return i|0}i=c[j+32>>2]|0;return i|0}function fk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a[b]|0;if(d<<24>>24==0){e=0}else{f=0;g=0;h=d;do{f=(da((ey(h<<24>>24|0)|0)<<24>>24,g+119|0)|0)+f|0;g=g+1|0;h=a[b+g|0]|0;}while(!(h<<24>>24==0));e=f&255}f=c[785992+(e<<2)>>2]|0;if((f|0)==0){i=2551464;return i|0}else{j=f}while(1){if((tn(b,c[j>>2]|0)|0)==0){break}f=c[j+60>>2]|0;if((f|0)==0){i=2551464;k=8;break}else{j=f}}if((k|0)==8){return i|0}i=c[j+4>>2]|0;return i|0}function gk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a[b]|0;if(f<<24>>24==0){g=0}else{h=0;i=0;j=f;do{h=(da((ey(j<<24>>24|0)|0)<<24>>24,i+119|0)|0)+h|0;i=i+1|0;j=a[b+i|0]|0;}while(!(j<<24>>24==0));g=h&255}h=c[785992+(g<<2)>>2]|0;a:do{if((h|0)!=0){g=h;while(1){if((tn(b,c[g>>2]|0)|0)==0){break}j=c[g+60>>2]|0;if((j|0)==0){break a}else{g=j}}rn(d,c[g+4>>2]|0,e);return}}while(0);a[d]=0;return}function hk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=a[b]|0;if(d<<24>>24==0){e=0}else{f=0;g=0;h=d;do{f=(da((ey(h<<24>>24|0)|0)<<24>>24,g+119|0)|0)+f|0;g=g+1|0;h=a[b+g|0]|0;}while(!(h<<24>>24==0));e=f&255}f=c[785992+(e<<2)>>2]|0;if((f|0)==0){return-2147483648|0}else{i=f}while(1){if((tn(b,c[i>>2]|0)|0)==0){j=7;break}f=c[i+60>>2]|0;if((f|0)==0){j=8;break}else{i=f}}if((j|0)==7){b=c[i+16>>2]|0;return((c[i+20>>2]|0)==0?b:b|1073741824)|0}else if((j|0)==8){return-2147483648|0}return 0}function ik(a){a=a|0;var b=0,d=0;b=c[378056]|0;if((b|0)==0){return}else{d=b}do{b=c[d>>2]|0;if((b|0)!=0){je[a&127](b)}d=c[d+52>>2]|0;}while((d|0)!=0);return}function jk(b,d,e){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;f=i;if((b|0)==0|(d|0)==0){aj(0,50288,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;return 0}do{if((Ib(b|0,92)|0)==0){if((Ib(b|0,34)|0)!=0){j=6;break}if((Ib(b|0,59)|0)==0){k=b}else{j=6}}else{j=6}}while(0);if((j|0)==6){_i(42520,(h=i,i=i+8|0,c[h>>2]=b,h)|0);i=h;k=37544}b=a[k]|0;if(b<<24>>24==0){l=0}else{m=0;n=0;o=b;do{m=(da((ey(o<<24>>24|0)|0)<<24>>24,n+119|0)|0)+m|0;n=n+1|0;o=a[k+n|0]|0;}while(!(o<<24>>24==0));l=m&255}m=c[785992+(l<<2)>>2]|0;a:do{if((m|0)==0){p=0}else{l=m;while(1){if((tn(k,c[l>>2]|0)|0)==0){break}o=c[l+60>>2]|0;if((o|0)==0){p=0;break a}else{l=o}}o=kk(l,d,0)|0;n=l+16|0;b=c[n>>2]|0;do{if((b&4096|0)==0){if((b&128|0)!=0){q=e;r=b;break}q=(e&4096|0)==0?e:e&-4097;r=b}else{if((e&4096|0)!=0){q=e;r=b;break}s=b&-4097;c[n>>2]=s;q=e;r=s}}while(0);do{if((r&128|0)!=0){c[n>>2]=r&-129;b=l+8|0;mj(c[b>>2]|0);c[b>>2]=qj(o)|0;if((q&64|0)==0){break}b=l+12|0;s=c[b>>2]|0;if((s|0)!=0){mj(s)}c[b>>2]=qj(o)|0}}while(0);b=c[n>>2]|0;s=(q&2048|0)!=0;do{if((b&2048|0)==0){t=s?q&-2049:q;u=b}else{if(s){t=q;u=b;break}v=b&-2049;c[n>>2]=v;t=q;u=v}}while(0);c[n>>2]=u|t;b=l+8|0;s=c[b>>2]|0;do{if((a[s]|0)==0){mj(s);c[b>>2]=qj(o)|0}else{if((a[o]|0)==0){break}if((Tx(s,o)|0)==0){break}$i(32168,(h=i,i=i+24|0,c[h>>2]=k,c[h+8>>2]=s,c[h+16>>2]=o,h)|0);i=h}}while(0);o=l+12|0;s=c[o>>2]|0;if((s|0)!=0){c[o>>2]=0;lk(k,s,1)|0;mj(s)}c[378060]=c[378060]|t;w=l;i=f;return w|0}}while(0);while(1){x=p+1|0;if((c[1512248+(p*72|0)>>2]|0)==0){j=37;break}if((x|0)<2048){p=x}else{break}}do{if((j|0)==37){if((p|0)>2047){break}t=1512248+(p*72|0)|0;if((p|0)>=(c[378058]|0)){c[378058]=x}c[t>>2]=qj(k)|0;u=qj(d)|0;c[1512252+(p*72|0)>>2]=u;c[1512268+(p*72|0)>>2]=1;c[1512272+(p*72|0)>>2]=1;g[1512276+(p*72|0)>>2]=+Qx(u);c[1512280+(p*72|0)>>2]=Vc(u|0)|0;c[1512256+(p*72|0)>>2]=qj(d)|0;c[1512284+(p*72|0)>>2]=0;u=c[378056]|0;c[1512300+(p*72|0)>>2]=u;if((u|0)!=0){c[u+56>>2]=t}c[1512304+(p*72|0)>>2]=0;c[378056]=t;c[1512264+(p*72|0)>>2]=e;c[378060]=c[378060]|e;u=a[k]|0;if(u<<24>>24==0){y=0}else{q=0;r=0;m=u;do{q=(da((ey(m<<24>>24|0)|0)<<24>>24,r+119|0)|0)+q|0;r=r+1|0;m=a[k+r|0]|0;}while(!(m<<24>>24==0));y=q&255}c[1512316+(p*72|0)>>2]=y;m=785992+(y<<2)|0;r=c[m>>2]|0;c[1512308+(p*72|0)>>2]=r;if((r|0)!=0){c[r+64>>2]=t}c[1512312+(p*72|0)>>2]=0;c[m>>2]=t;w=t;i=f;return w|0}}while(0);if((c[430620]|0)==0){aj(0,28008,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;return 0}else{w=0;i=f;return w|0}return 0}function kk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0;e=i;if((c[a+36>>2]|0)==0|(b|0)==0){f=b;i=e;return f|0}do{if((An(b)|0)==0){if((d|0)!=0){_i(27120,(j=i,i=i+8|0,c[j>>2]=c[a>>2],j)|0);i=j}k=1;l=+Qx(c[a+8>>2]|0)}else{m=+Qx(b);if((c[a+40>>2]|0)==0){k=0;l=m;break}if((Bn(m)|0)!=0){k=0;l=m;break}if((d|0)!=0){_i(27568,(j=i,i=i+8|0,c[j>>2]=c[a>>2],j)|0);i=j}k=1;l=+(~~m|0)}}while(0);n=a+44|0;do{if(l<+g[n>>2]){do{if((d|0)!=0){if((k|0)==0){_i(25720,(j=i,i=i+8|0,c[j>>2]=c[a>>2],j)|0);i=j}else{_i(26376,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}o=(Bn(+g[n>>2])|0)==0;m=+g[n>>2];if(o){_i(25248,(j=i,i=i+8|0,h[j>>3]=m,j)|0);i=j;break}else{_i(25464,(j=i,i=i+8|0,c[j>>2]=~~m,j)|0);i=j;break}}}while(0);p=+g[n>>2]}else{o=a+48|0;if(!(l>+g[o>>2])){if((k|0)==0){f=b}else{p=l;break}i=e;return f|0}do{if((d|0)!=0){if((k|0)==0){_i(25720,(j=i,i=i+8|0,c[j>>2]=c[a>>2],j)|0);i=j}else{_i(26376,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}q=(Bn(+g[o>>2])|0)==0;m=+g[o>>2];if(q){_i(24496,(j=i,i=i+8|0,h[j>>3]=m,j)|0);i=j;break}else{_i(24840,(j=i,i=i+8|0,c[j>>2]=~~m,j)|0);i=j;break}}}while(0);p=+g[o>>2]}}while(0);if((Bn(p)|0)==0){l=p;xn(2625552,256,50224,(j=i,i=i+8|0,h[j>>3]=l,j)|0)|0;i=j;if((d|0)==0){f=2625552;i=e;return f|0}_i(23912,(j=i,i=i+8|0,h[j>>3]=l,j)|0);i=j;f=2625552;i=e;return f|0}else{a=~~p;xn(2625552,256,46416,(j=i,i=i+8|0,c[j>>2]=a,j)|0)|0;i=j;if((d|0)==0){f=2625552;i=e;return f|0}_i(24192,(j=i,i=i+8|0,c[j>>2]=a,j)|0);i=j;f=2625552;i=e;return f|0}return 0}function lk(b,d,e){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;f=i;do{if((b|0)==0){h=5}else{if((Ib(b|0,92)|0)!=0){h=5;break}if((Ib(b|0,34)|0)!=0){h=5;break}if((Ib(b|0,59)|0)==0){j=b}else{h=5}}}while(0);if((h|0)==5){_i(42520,(k=i,i=i+8|0,c[k>>2]=b,k)|0);i=k;j=37544}b=a[j]|0;if(b<<24>>24==0){l=0}else{m=0;n=0;o=b;do{m=(da((ey(o<<24>>24|0)|0)<<24>>24,n+119|0)|0)+m|0;n=n+1|0;o=a[j+n|0]|0;}while(!(o<<24>>24==0));l=m&255}m=c[785992+(l<<2)>>2]|0;a:do{if((m|0)!=0){l=m;while(1){if((tn(j,c[l>>2]|0)|0)==0){break}o=c[l+60>>2]|0;if((o|0)==0){break a}else{l=o}}if((d|0)==0){p=c[l+8>>2]|0}else{p=d}o=kk(l,p,1)|0;n=l+16|0;b=c[n>>2]|0;do{if((b&32|0)==0){h=23}else{q=l+12|0;r=c[q>>2]|0;if((r|0)==0){h=23;break}s=c[l+4>>2]|0;if((Tx(o,s)|0)==0){mj(r);c[q>>2]=0;t=l;i=f;return t|0}else{if((Tx(o,r)|0)==0){t=l}else{u=s;break}i=f;return t|0}}}while(0);do{if((h|0)==23){s=c[l+4>>2]|0;if((Tx(o,s)|0)==0){t=l}else{u=s;break}i=f;return t|0}}while(0);c[378060]=c[378060]|b;do{if((e|0)==0){s=c[n>>2]|0;if((s&64|0)!=0){_i(57768,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;t=l;i=f;return t|0}if((s&16|0)!=0){_i(56096,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;t=l;i=f;return t|0}if((s&32|0)==0){if((s&512|0)==0){v=u;break}if((c[(c[414926]|0)+32>>2]|0)!=0){v=u;break}_i(54224,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;t=l;i=f;return t|0}s=l+12|0;r=c[s>>2]|0;do{if((r|0)==0){if((Tx(o,u)|0)==0){t=l}else{break}i=f;return t|0}else{if((Tx(o,r)|0)==0){t=l;i=f;return t|0}else{mj(r);break}}}while(0);_i(55088,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;c[s>>2]=qj(o)|0;c[l+20>>2]=1;r=l+24|0;c[r>>2]=(c[r>>2]|0)+1;t=l;i=f;return t|0}else{r=l+12|0;q=c[r>>2]|0;if((q|0)==0){v=u;break}mj(q);c[r>>2]=0;v=c[l+4>>2]|0}}while(0);n=l+4|0;if((Tx(o,v)|0)==0){t=l;i=f;return t|0}c[l+20>>2]=1;b=l+24|0;c[b>>2]=(c[b>>2]|0)+1;mj(c[n>>2]|0);b=qj(o)|0;c[n>>2]=b;g[l+28>>2]=+Qx(b);c[l+32>>2]=Vc(b|0)|0;t=l;i=f;return t|0}}while(0);if((d|0)==0){t=0;i=f;return t|0}if((e|0)==0){t=jk(j,d,128)|0;i=f;return t|0}else{t=jk(j,d,0)|0;i=f;return t|0}return 0}function mk(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=a+4|0;e=c[d>>2]|0;_i(23952,(f=i,i=i+16|0,c[f>>2]=c[a>>2],c[f+8>>2]=e,f)|0);i=f;do{if((c[a+16>>2]&64|0)==0){e=a+8|0;if((tn(c[d>>2]|0,c[e>>2]|0)|0)==0){_i(20848,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;break}else{_i(18280,(f=i,i=i+8|0,c[f>>2]=c[e>>2],f)|0);i=f;break}}}while(0);_i(16632,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;d=c[a+12>>2]|0;if((d|0)==0){i=b;return}_i(59424,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;i=b;return}function nk(a,b){a=a|0;b=b|0;lk(a,b,1)|0;return}function ok(b,d){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;e=i;f=a[b]|0;if(f<<24>>24==0){g=0}else{h=0;j=0;k=f;do{h=(da((ey(k<<24>>24|0)|0)<<24>>24,j+119|0)|0)+h|0;j=j+1|0;k=a[b+j|0]|0;}while(!(k<<24>>24==0));g=h&255}h=c[785992+(g<<2)>>2]|0;if((h|0)==0){l=lk(b,d,1)|0;i=e;return}else{m=h}while(1){if((tn(b,c[m>>2]|0)|0)==0){break}h=c[m+60>>2]|0;if((h|0)==0){n=11;break}else{m=h}}if((n|0)==11){l=lk(b,d,1)|0;i=e;return}n=c[m+16>>2]|0;h=(c[m+20>>2]|0)==0?n:n|1073741824;if((h|0)==-2147483648|(h&8192|0)==0){l=lk(b,d,1)|0;i=e;return}if((d|0)==0){aj(1,52064,(o=i,i=i+8|0,c[o>>2]=b,o)|0);i=o}else{aj(1,53064,(o=i,i=i+16|0,c[o>>2]=b,c[o+8>>2]=d,o)|0);i=o}}function pk(a,b){a=a|0;b=b|0;lk(a,b,0)|0;return}function qk(a,b){a=a|0;b=+b;var d=0,e=0,f=0,g=0,j=0;d=i;i=i+32|0;e=~~b;f=d|0;if(+(e|0)==b){xn(f,32,51088,(g=i,i=i+8|0,c[g>>2]=e,g)|0)|0;i=g;j=lk(a,f,1)|0;i=d;return}else{xn(f,32,50224,(g=i,i=i+8|0,h[g>>3]=b,g)|0)|0;i=g;j=lk(a,f,1)|0;i=d;return}}function rk(a){a=a|0;lk(a,0,1)|0;return}function sk(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=yi(0)|0;d=a[b]|0;if(d<<24>>24==0){e=0}else{f=0;g=0;h=d;do{f=(da((ey(h<<24>>24|0)|0)<<24>>24,g+119|0)|0)+f|0;g=g+1|0;h=a[b+g|0]|0;}while(!(h<<24>>24==0));e=f&255}f=c[785992+(e<<2)>>2]|0;if((f|0)==0){i=0;return i|0}else{j=f}while(1){k=j|0;if((tn(b,c[k>>2]|0)|0)==0){break}f=c[j+60>>2]|0;if((f|0)==0){i=0;l=10;break}else{j=f}}if((l|0)==10){return i|0}if((xi()|0)==1){mk(j);i=1;return i|0}else{j=c[k>>2]|0;lk(j,Hi()|0,0)|0;i=1;return i|0}return 0}function tk(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;if((xi()|0)!=2){_i(49464,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=b;return}e=yi(1)|0;f=a[e]|0;if(f<<24>>24==0){g=0}else{h=0;j=0;k=f;do{h=(da((ey(k<<24>>24|0)|0)<<24>>24,j+119|0)|0)+h|0;j=j+1|0;k=a[e+j|0]|0;}while(!(k<<24>>24==0));g=h&255}h=c[785992+(g<<2)>>2]|0;a:do{if((h|0)!=0){g=h;while(1){if((tn(e,c[g>>2]|0)|0)==0){break}k=c[g+60>>2]|0;if((k|0)==0){break a}else{g=k}}mk(g);i=b;return}}while(0);_i(48744,(d=i,i=i+8|0,c[d>>2]=e,d)|0);i=d;i=b;return}function uk(){var b=0,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;b=i;d=xi()|0;if((d|0)<2){_i(47560,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;i=b;return}if((d|0)==2){f=yi(1)|0;h=yi(1)|0;j=a[h]|0;if(j<<24>>24==0){k=0}else{l=0;m=0;n=j;do{l=(da((ey(n<<24>>24|0)|0)<<24>>24,m+119|0)|0)+l|0;m=m+1|0;n=a[h+m|0]|0;}while(!(n<<24>>24==0));k=l&255}l=c[785992+(k<<2)>>2]|0;a:do{if((l|0)==0){o=1}else{k=l;while(1){if((tn(h,c[k>>2]|0)|0)==0){break}n=c[k+60>>2]|0;if((n|0)==0){o=1;break a}else{k=n}}o=+g[k+28>>2]==0.0|0}}while(0);h=Hn(46416,(e=i,i=i+8|0,c[e>>2]=o,e)|0)|0;i=e;lk(f,h,0)|0;i=b;return}else if((d|0)==3){_i(45832,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;i=b;return}else{e=yi(1)|0;h=a[e]|0;if(h<<24>>24==0){p=0}else{f=0;o=0;l=h;do{f=(da((ey(l<<24>>24|0)|0)<<24>>24,o+119|0)|0)+f|0;o=o+1|0;l=a[e+o|0]|0;}while(!(l<<24>>24==0));p=f&255}f=c[785992+(p<<2)>>2]|0;b:do{if((f|0)==0){q=2551464}else{p=f;while(1){if((tn(e,c[p>>2]|0)|0)==0){break}l=c[p+60>>2]|0;if((l|0)==0){q=2551464;break b}else{p=l}}q=c[p+4>>2]|0}}while(0);e=2;while(1){r=e+1|0;if((r|0)>=(d|0)){s=24;break}if((Tx(q,yi(e)|0)|0)==0){s=23;break}else{e=r}}if((s|0)==23){e=yi(1)|0;lk(e,yi(r)|0,0)|0;i=b;return}else if((s|0)==24){s=yi(1)|0;lk(s,yi(2)|0,0)|0;i=b;return}}}function vk(){var b=0,d=0,e=0,f=0,g=0;b=i;d=xi()|0;e=yi(0)|0;if((d|0)<2){_i(45056,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;i=b;return}if((d|0)==2){tk();i=b;return}d=yi(1)|0;f=lk(d,Ji(2)|0,0)|0;if((f|0)==0){i=b;return}d=a[e+3|0]|0;if((d|0)==97){e=f+16|0;g=c[e>>2]|0;if((g&1|0)!=0){i=b;return}c[e>>2]=g|1;c[378060]=c[378060]|1;i=b;return}else if((d|0)==117){g=f+16|0;e=c[g>>2]|0;if((e&2|0)!=0){i=b;return}c[g>>2]=e|2;c[378060]=c[378060]|2;i=b;return}else if((d|0)==115){d=f+16|0;f=c[d>>2]|0;if((f&4|0)!=0){i=b;return}c[d>>2]=f|4;c[378060]=c[378060]|4;i=b;return}else{i=b;return}}function wk(){var a=0,b=0;a=i;if((xi()|0)==2){lk(yi(1)|0,0,0)|0;i=a;return}else{_i(44304,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}}function xk(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;b=i;i=i+1024|0;d=b|0;e=c[378056]|0;if((e|0)==0){f=1024;g=0;i=b;return}else{h=e}do{e=h|0;j=c[e>>2]|0;a:do{if((j|0)!=0){if((tn(j,43672)|0)==0){break}if((c[h+16>>2]&1|0)==0){break}k=c[h+12>>2]|0;l=c[e>>2]|0;m=Wx(l|0)|0;do{if((k|0)==0){n=c[h+4>>2]|0;if((m+10+(Wx(n|0)|0)|0)>>>0>1024>>>0){_i(42984,(o=i,i=i+8|0,c[o>>2]=l,o)|0);i=o;break a}else{xn(d,1024,42416,(o=i,i=i+16|0,c[o>>2]=l,c[o+8>>2]=n,o)|0)|0;i=o;break}}else{if((m+10+(Wx(k|0)|0)|0)>>>0>1024>>>0){_i(42984,(o=i,i=i+8|0,c[o>>2]=l,o)|0);i=o;break a}else{xn(d,1024,42416,(o=i,i=i+16|0,c[o>>2]=l,c[o+8>>2]=k,o)|0)|0;i=o;break}}}while(0);cl(d,Wx(d|0)|0,a)|0}}while(0);h=c[h+52>>2]|0;}while((h|0)!=0);f=1024;g=0;i=b;return}function yk(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;a=i;if((xi()|0)>1){b=yi(1)|0}else{b=0}d=c[378056]|0;if((d|0)==0){e=0;_i(36680,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;g=c[378058]|0;_i(35984,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;i=a;return}h=(b|0)==0;j=0;k=d;while(1){d=k|0;l=c[d>>2]|0;do{if((l|0)!=0){if(!h){if((ij(b,l,0)|0)==0){break}}m=k+16|0;if((c[m>>2]&4|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(41944,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&8|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(40808,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&2|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(40008,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&64|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(39592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&16|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(39192,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&1|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(38656,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&32|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(38216,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&512|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(37872,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}if((c[m>>2]&128|0)==0){_i(41472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{_i(37528,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}m=c[k+4>>2]|0;_i(37144,(f=i,i=i+16|0,c[f>>2]=c[d>>2],c[f+8>>2]=m,f)|0);i=f}}while(0);d=j+1|0;l=c[k+52>>2]|0;if((l|0)==0){e=d;break}else{j=d;k=l}}_i(36680,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;g=c[378058]|0;_i(35984,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;i=a;return}function zk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+52|0;d=c[b>>2]|0;e=c[a>>2]|0;if((e|0)!=0){mj(e)}e=c[a+4>>2]|0;if((e|0)!=0){mj(e)}e=c[a+12>>2]|0;if((e|0)!=0){mj(e)}e=c[a+8>>2]|0;if((e|0)!=0){mj(e)}e=a+56|0;f=c[e>>2]|0;g=c[b>>2]|0;if((f|0)==0){c[378056]=g}else{c[f+52>>2]=g}g=c[b>>2]|0;if((g|0)!=0){c[g+56>>2]=c[e>>2]}e=a+64|0;g=c[e>>2]|0;b=a+60|0;f=c[b>>2]|0;if((g|0)==0){c[785992+(c[a+68>>2]<<2)>>2]=f}else{c[g+60>>2]=f}f=c[b>>2]|0;if((f|0)==0){h=a;Zx(h|0,0,72)|0;return d|0}c[f+64>>2]=c[e>>2];h=a;Zx(h|0,0,72)|0;return d|0}function Ak(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;b=i;if((xi()|0)!=2){d=yi(0)|0;_i(35176,(e=i,i=i+8|0,c[e>>2]=d,e)|0);i=e;i=b;return}d=yi(1)|0;f=a[d]|0;if(f<<24>>24==0){g=0}else{h=0;j=0;k=f;do{h=(da((ey(k<<24>>24|0)|0)<<24>>24,j+119|0)|0)+h|0;j=j+1|0;k=a[d+j|0]|0;}while(!(k<<24>>24==0));g=h&255}h=c[785992+(g<<2)>>2]|0;if((h|0)==0){i=b;return}else{l=h}while(1){m=l|0;if((tn(d,c[m>>2]|0)|0)==0){break}h=c[l+60>>2]|0;if((h|0)==0){n=12;break}else{l=h}}if((n|0)==12){i=b;return}if((c[l+16>>2]&128|0)==0){n=yi(0)|0;d=c[m>>2]|0;_i(34744,(e=i,i=i+16|0,c[e>>2]=n,c[e+8>>2]=d,e)|0);i=e;i=b;return}else{zk(l)|0;i=b;return}}function Bk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[378056]|0;if((b|0)==0){return}if((a|0)==0){a=b;while(1){d=c[a+16>>2]|0;if((d&128|0)==0){if((d&1104|0)==0){lk(c[a>>2]|0,c[a+8>>2]|0,0)|0}e=c[a+52>>2]|0}else{e=zk(a)|0}if((e|0)==0){break}else{a=e}}return}else{e=b;while(1){b=c[e+16>>2]|0;if((b&4224|0)==0){if((b&1104|0)==0){lk(c[e>>2]|0,c[e+8>>2]|0,0)|0}f=c[e+52>>2]|0}else{f=zk(e)|0}if((f|0)==0){break}else{e=f}}return}}function Ck(){var a=0,b=0,d=0;a=c[378056]|0;if((a|0)==0){return}else{b=a}while(1){a=c[b+16>>2]|0;if((a&128|0)==0){if((a&1104|0)==0){lk(c[b>>2]|0,c[b+8>>2]|0,0)|0}d=c[b+52>>2]|0}else{d=zk(b)|0}if((d|0)==0){break}else{b=d}}return}function Dk(b){b=b|0;var d=0,e=0;a[2625808]=0;d=c[378056]|0;if((d|0)==0){return 2625808}else{e=d}do{d=c[e>>2]|0;do{if((d|0)!=0){if((c[e+16>>2]&b|0)==0){break}Mn(2625808,d,c[e+4>>2]|0)}}while(0);e=c[e+52>>2]|0;}while((e|0)!=0);return 2625808}function Ek(b){b=b|0;var d=0,e=0;a[2626832]=0;d=c[378056]|0;if((d|0)==0){return 2626832}else{e=d}do{d=c[e>>2]|0;do{if((d|0)!=0){if((c[e+16>>2]&b|0)==0){break}Nn(2626832,d,c[e+4>>2]|0)}}while(0);e=c[e+52>>2]|0;}while((e|0)!=0);return 2626832}function Fk(a,b,d,e){a=a|0;b=+b;d=+d;e=e|0;c[a+36>>2]=1;g[a+44>>2]=b;g[a+48>>2]=d;c[a+40>>2]=e;lk(c[a>>2]|0,c[a+4>>2]|0,1)|0;return}function Gk(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;if((e&65|0)==65){$i(34312,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;h=e&-65}else{h=e}e=jk(b,d,h|4096)|0;if((a|0)==0){i=f;return}c[a>>2]=(e-1512248|0)/72|0;c[a+4>>2]=-1;Hk(a);i=f;return}function Hk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0;b=i;d=c[a>>2]|0;if(!(d>>>0<(c[378058]|0)>>>0)){aj(1,33760,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}f=c[1512272+(d*72|0)>>2]|0;h=a+4|0;if((f|0)==(c[h>>2]|0)){i=b;return}j=c[1512252+(d*72|0)>>2]|0;if((j|0)==0){i=b;return}c[h>>2]=f;f=Wx(j|0)|0;if((f+1|0)>>>0>256>>>0){aj(1,33168,(e=i,i=i+16|0,c[e>>2]=j,c[e+8>>2]=f,e)|0);i=e}rn(a+16|0,j,256);g[a+8>>2]=+g[1512276+(d*72|0)>>2];c[a+12>>2]=c[1512280+(d*72|0)>>2];i=b;return}function Ik(a,b){a=a|0;b=b|0;if((b|0)!=2){return}b=Pn(a,1,41472)|0;if(!(b>>>0>a>>>0)){return}Xj(b,0,1);return}function Jk(){Zx(1512248|0,0|0,147456|0)|0;Zx(785992|0,0|0,1024|0)|0;c[414926]=jk(32696,32144,72)|0;Pi(31744,128);Pi(31408,60);Qi(31408,12);Pi(30672,36);Qi(30672,12);Pi(30072,36);Qi(30072,12);Pi(29768,36);Qi(29768,12);Pi(29448,36);Qi(29448,12);Pi(29016,64);Qi(29016,12);Pi(28728,20);Qi(28728,12);Pi(28360,98);Pi(27960,58);return}function Kk(){return(c[209560]|0)!=0|0}function Lk(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;d=i;i=i+8192|0;e=d+4096|0;xn(e,4096,16720,(f=i,i=i+16|0,c[f>>2]=b+12288,c[f+8>>2]=b+8192,f)|0)|0;i=f;b=d|0;g=0;a:while(1){xn(b,4096,19016,(f=i,i=i+16|0,c[f>>2]=49536,c[f+8>>2]=g,f)|0)|0;i=f;h=b;j=e;while(1){k=a[j]|0;l=k<<24>>24;m=a[h]|0;n=m<<24>>24;o=(k-97&255)>>>0<26>>>0?l-32|0:l;l=(m-97&255)>>>0<26>>>0?n-32|0:n;if((o|0)==92|(o|0)==58){p=47}else{p=o}if((l|0)==92|(l|0)==58){q=47}else{q=l}if((p|0)!=(q|0)){break}if((p|0)==0){r=10;break a}else{h=h+1|0;j=j+1|0}}j=g+1|0;if((j|0)<9){g=j}else{break}}do{if((r|0)==10){if((g|0)<9){s=1}else{break}t=4096;u=0;i=d;return s|0}}while(0);vn(e,4096,41952);s=(nb($j()|0,e|0)|0)!=0|0;t=4096;u=0;i=d;return s|0}function Mk(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,s=0,t=0;f=i;i=i+4096|0;g=f|0;h=0;a:while(1){xn(g,4096,19016,(j=i,i=i+16|0,c[j>>2]=d,c[j+8>>2]=h,j)|0)|0;i=j;j=g;k=b;while(1){l=a[k]|0;m=l<<24>>24;n=a[j]|0;o=n<<24>>24;p=(l-97&255)>>>0<26>>>0?m-32|0:m;m=(n-97&255)>>>0<26>>>0?o-32|0:o;if((p|0)==92|(p|0)==58){q=47}else{q=p}if((m|0)==92|(m|0)==58){r=47}else{r=m}if((q|0)!=(r|0)){break}if((q|0)==0){s=h;t=10;break a}else{j=j+1|0;k=k+1|0}}k=h+1|0;if((k|0)<9){h=k}else{s=k;t=10;break}}if((t|0)==10){i=f;return(s|0)<(e|0)|0}return 0}function Nk(){return c[209570]|0}function Ok(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>62>>>0){aj(1,56984,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}if((c[787064+(a*288|0)>>2]|0)==1){aj(1,56664,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}e=c[787040+(a*288|0)>>2]|0;if((e|0)==0){aj(1,56504,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}else{Rd(e|0,0,2,0)|0;i=b;return}}function Pk(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>62>>>0){aj(1,56984,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;return 0}if((c[787064+(a*288|0)>>2]|0)==1){aj(1,56664,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;return 0}e=c[787040+(a*288|0)>>2]|0;if((e|0)==0){aj(1,56504,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;return 0}else{d=Qb(e|0)|0;vd(e|0,0,2)|0;a=Qb(e|0)|0;vd(e|0,d|0,0)|0;i=b;return a|0}return 0}function Qk(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;d=i;i=i+4096|0;e=d|0;do{if((nb(b|0,27608)|0)==0){if((nb(b|0,23704)|0)!=0){break}rn(e,b,4096);f=0;g=e;a:while(1){h=a[g]|0;do{if((h<<24>>24|0)==47|(h<<24>>24|0)==92){if((f|0)==0){a[g]=47;j=1;break}else{_x(g|0,g+1|0,Wx(g|0)|0)|0;j=f;break}}else if((h<<24>>24|0)==0){break a}else{j=0}}while(0);f=j;g=g+1|0}g=Ib(e|0,47)|0;while(1){f=g+1|0;h=a[f]|0;if((h<<24>>24|0)==0){k=0;l=15;break}else if((h<<24>>24|0)!=47){g=f;continue}a[f]=0;if((Bb(e|0)|0)==0){l=13;break}a[f]=47;g=f}if((l|0)==13){aj(0,18120,(m=i,i=i+8|0,c[m>>2]=e,m)|0);i=m;return 0}else if((l|0)==15){n=4096;o=0;i=d;return k|0}}}while(0);_i(20568,(m=i,i=i+8|0,c[m>>2]=b,m)|0);i=m;k=1;n=4096;o=0;i=d;return k|0}function Rk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;i=i+4096|0;e=d|0;do{if((sn(b,57728)|0)==0){if((sn(b,57568)|0)!=0){break}if((sn(b,41952)|0)!=0){break}f=c[(c[209574]|0)+4>>2]|0;g=e|0;c[654338]=c[654338]^1;xn(g,4096,37168,(h=i,i=i+16|0,c[h>>2]=838312,c[h+8>>2]=b,h)|0)|0;i=h;j=0;k=g;a:while(1){l=a[k]|0;do{if((l<<24>>24|0)==47|(l<<24>>24|0)==92){if((j|0)==0){a[k]=47;m=1;break}else{_x(k|0,k+1|0,Wx(k|0)|0)|0;m=j;break}}else if((l<<24>>24|0)==0){break a}else{m=0}}while(0);j=m;k=k+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(h=i,i=i+16|0,c[h>>2]=f,c[h+8>>2]=g,h)|0)|0;i=h;rb(2617360+(c[654338]<<12)|0)|0;i=d;return}}while(0);d=pn(b)|0;aj(0,57448,(h=i,i=i+24|0,c[h>>2]=61136,c[h+8>>2]=b,c[h+16>>2]=d,h)|0);i=h}function Sk(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;d=i;i=i+4096|0;if((c[209560]|0)==0){aj(0,57592,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;return 0}f=c[(c[209574]|0)+4>>2]|0;g=d|0;c[654338]=c[654338]^1;if((b|0)==0){h=5}else{if((a[b]|0)==0){h=5}else{j=b}}if((h|0)==5){j=838312}xn(g,4096,37168,(e=i,i=i+16|0,c[e>>2]=j,c[e+8>>2]=2551536,e)|0)|0;i=e;j=0;k=g;a:while(1){l=a[k]|0;do{if((l<<24>>24|0)==47|(l<<24>>24|0)==92){if((j|0)==0){a[k]=47;m=1;break}else{_x(k|0,k+1|0,Wx(k|0)|0)|0;m=j;break}}else if((l<<24>>24|0)==0){break a}else{m=0}}while(0);j=m;k=k+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(e=i,i=i+16|0,c[e>>2]=f,c[e+8>>2]=g,e)|0)|0;i=e;g=c[654338]|0;f=2617360+(g<<12)|0;a[(Wx(f|0)|0)-1+(2617360+(g<<12))|0]=0;g=1;while(1){n=787040+(g*288|0)|0;k=g+1|0;if((c[n>>2]|0)==0){break}if((k|0)<64){g=k}else{h=15;break}}if((h|0)==15){aj(1,57808,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;return 0}c[787064+(g*288|0)>>2]=0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(56056,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e}if((sn(f,57728)|0)!=0){o=pn(f)|0;aj(0,57448,(e=i,i=i+24|0,c[e>>2]=61112,c[e+8>>2]=f,c[e+16>>2]=o,e)|0);i=e;return 0}if((sn(f,57568)|0)!=0){o=pn(f)|0;aj(0,57448,(e=i,i=i+24|0,c[e>>2]=61112,c[e+8>>2]=f,c[e+16>>2]=o,e)|0);i=e;return 0}if((sn(f,41952)|0)!=0){o=pn(f)|0;aj(0,57448,(e=i,i=i+24|0,c[e>>2]=61112,c[e+8>>2]=f,c[e+16>>2]=o,e)|0);i=e;return 0}if((Qk(f)|0)!=0){p=0;i=d;return p|0}$i(55064,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e;c[n>>2]=Ud(f|0,54120)|0;rn(787072+(g*288|0)|0,b,256);c[787048+(g*288|0)>>2]=0;p=(c[n>>2]|0)==0?0:g;i=d;return p|0}function Tk(b,d){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,v=0;e=i;i=i+4096|0;f=e|0;if((c[209560]|0)==0){aj(0,57592,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}else{h=1}while(1){j=787040+(h*288|0)|0;k=h+1|0;if((c[j>>2]|0)==0){break}if((k|0)<64){h=k}else{l=5;break}}if((l|0)==5){aj(1,57808,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}c[787064+(h*288|0)>>2]=0;rn(787072+(h*288|0)|0,b,256);Yw();k=c[(c[209574]|0)+4>>2]|0;m=f|0;c[654338]=c[654338]^1;f=(b|0)==0;if(f){l=8}else{if((a[b]|0)==0){l=8}else{n=b}}if((l|0)==8){n=838312}xn(m,4096,37168,(g=i,i=i+16|0,c[g>>2]=n,c[g+8>>2]=2551536,g)|0)|0;i=g;n=0;o=m;a:while(1){p=a[o]|0;do{if((p<<24>>24|0)==47|(p<<24>>24|0)==92){if((n|0)==0){a[o]=47;q=1;break}else{_x(o|0,o+1|0,Wx(o|0)|0)|0;q=n;break}}else if((p<<24>>24|0)==0){break a}else{q=0}}while(0);n=q;o=o+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(g=i,i=i+16|0,c[g>>2]=k,c[g+8>>2]=m,g)|0)|0;i=g;k=c[654338]|0;o=2617360+(k<<12)|0;a[(Wx(o|0)|0)-1+(2617360+(k<<12))|0]=0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(53e3,(g=i,i=i+8|0,c[g>>2]=o,g)|0);i=g}k=Ud(o|0,16456)|0;c[j>>2]=k;o=787048+(h*288|0)|0;c[o>>2]=0;if((k|0)==0){if((tn(c[(c[209574]|0)+4>>2]|0,c[(c[210610]|0)+4>>2]|0)|0)==0){r=c[j>>2]|0}else{k=c[(c[210610]|0)+4>>2]|0;c[654338]=c[654338]^1;if(f){l=22}else{if((a[b]|0)==0){l=22}else{s=b}}if((l|0)==22){s=838312}xn(m,4096,37168,(g=i,i=i+16|0,c[g>>2]=s,c[g+8>>2]=2551536,g)|0)|0;i=g;s=0;l=m;b:while(1){b=a[l]|0;do{if((b<<24>>24|0)==0){break b}else if((b<<24>>24|0)==47|(b<<24>>24|0)==92){if((s|0)==0){a[l]=47;t=1;break}else{_x(l|0,l+1|0,Wx(l|0)|0)|0;t=s;break}}else{t=0}}while(0);s=t;l=l+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(g=i,i=i+16|0,c[g>>2]=k,c[g+8>>2]=m,g)|0)|0;i=g;m=c[654338]|0;k=2617360+(m<<12)|0;a[(Wx(k|0)|0)-1+(2617360+(m<<12))|0]=0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(51960,(g=i,i=i+8|0,c[g>>2]=k,g)|0);i=g}g=Ud(k|0,16456)|0;c[j>>2]=g;c[o>>2]=0;r=g}u=(r|0)==0?0:h}else{u=h}c[d>>2]=u;if((u|0)==0){v=-1;i=e;return v|0}v=Pk(u)|0;i=e;return v|0}function Uk(a){a=a|0;var b=0,d=0,e=0;b=i;if((c[209560]|0)==0){aj(0,57592,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}d=787040+(a*288|0)|0;if((c[787064+(a*288|0)>>2]|0)==1){e=d;Vn(c[e>>2]|0)|0;if((c[787044+(a*288|0)>>2]|0)!=0){Un(c[e>>2]|0)|0}Zx(d|0,0,288)|0;i=b;return}else{e=c[d>>2]|0;if((e|0)!=0){Ta(e|0)|0}Zx(d|0,0,288)|0;i=b;return}}function Vk(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;d=i;i=i+4096|0;e=d|0;if((c[209560]|0)==0){aj(0,57592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}else{g=1}while(1){h=787040+(g*288|0)|0;j=g+1|0;if((c[h>>2]|0)==0){break}if((j|0)<64){g=j}else{k=5;break}}if((k|0)==5){aj(1,57808,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}c[787064+(g*288|0)>>2]=0;k=c[(c[209574]|0)+4>>2]|0;j=e|0;c[654338]=c[654338]^1;xn(j,4096,37168,(f=i,i=i+16|0,c[f>>2]=838312,c[f+8>>2]=b,f)|0)|0;i=f;e=0;l=j;a:while(1){m=a[l]|0;do{if((m<<24>>24|0)==0){break a}else if((m<<24>>24|0)==47|(m<<24>>24|0)==92){if((e|0)==0){a[l]=47;n=1;break}else{_x(l|0,l+1|0,Wx(l|0)|0)|0;n=e;break}}else{n=0}}while(0);e=n;l=l+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(f=i,i=i+16|0,c[f>>2]=k,c[f+8>>2]=j,f)|0)|0;i=f;j=2617360+(c[654338]<<12)|0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(49440,(f=i,i=i+8|0,c[f>>2]=j,f)|0);i=f}do{if((sn(j,57728)|0)==0){if((sn(j,57568)|0)!=0){break}if((sn(j,41952)|0)!=0){break}if((Qk(j)|0)!=0){o=0;i=d;return o|0}c[h>>2]=Ud(j|0,54120)|0;rn(787072+(g*288|0)|0,b,256);c[787048+(g*288|0)>>2]=0;o=(c[h>>2]|0)==0?0:g;i=d;return o|0}}while(0);o=pn(j)|0;aj(0,57448,(f=i,i=i+24|0,c[f>>2]=61152,c[f+8>>2]=j,c[f+16>>2]=o,f)|0);i=f;return 0}function Wk(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;d=i;i=i+4096|0;e=d|0;if((c[209560]|0)==0){aj(0,57592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}else{g=1}while(1){h=787040+(g*288|0)|0;j=g+1|0;if((c[h>>2]|0)==0){break}if((j|0)<64){g=j}else{k=5;break}}if((k|0)==5){aj(1,57808,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}c[787064+(g*288|0)>>2]=0;rn(787072+(g*288|0)|0,b,256);Yw();k=c[(c[209574]|0)+4>>2]|0;j=e|0;c[654338]=c[654338]^1;xn(j,4096,37168,(f=i,i=i+16|0,c[f>>2]=838312,c[f+8>>2]=b,f)|0)|0;i=f;b=0;e=j;a:while(1){l=a[e]|0;do{if((l<<24>>24|0)==0){break a}else if((l<<24>>24|0)==47|(l<<24>>24|0)==92){if((b|0)==0){a[e]=47;m=1;break}else{_x(e|0,e+1|0,Wx(e|0)|0)|0;m=b;break}}else{m=0}}while(0);b=m;e=e+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(f=i,i=i+16|0,c[f>>2]=k,c[f+8>>2]=j,f)|0)|0;i=f;j=2617360+(c[654338]<<12)|0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(48720,(f=i,i=i+8|0,c[f>>2]=j,f)|0);i=f}do{if((sn(j,57728)|0)==0){if((sn(j,57568)|0)!=0){break}if((sn(j,41952)|0)!=0){break}if((Qk(j)|0)!=0){n=0;i=d;return n|0}k=Ud(j|0,48672)|0;c[h>>2]=k;c[787048+(g*288|0)>>2]=0;n=(k|0)==0?0:g;i=d;return n|0}}while(0);n=pn(j)|0;aj(0,57448,(f=i,i=i+24|0,c[f>>2]=61176,c[f+8>>2]=j,c[f+16>>2]=n,f)|0);i=f;return 0}function Xk(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;d=i;i=i+4096|0;e=d|0;if((c[209560]|0)==0){aj(0,57592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}else{g=1}while(1){h=787040+(g*288|0)|0;j=g+1|0;if((c[h>>2]|0)==0){break}if((j|0)<64){g=j}else{k=5;break}}if((k|0)==5){aj(1,57808,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}c[787064+(g*288|0)>>2]=0;rn(787072+(g*288|0)|0,b,256);Yw();k=c[(c[209574]|0)+4>>2]|0;j=e|0;c[654338]=c[654338]^1;xn(j,4096,37168,(f=i,i=i+16|0,c[f>>2]=838312,c[f+8>>2]=b,f)|0)|0;i=f;b=0;e=j;a:while(1){l=a[e]|0;do{if((l<<24>>24|0)==0){break a}else if((l<<24>>24|0)==47|(l<<24>>24|0)==92){if((b|0)==0){a[e]=47;m=1;break}else{_x(e|0,e+1|0,Wx(e|0)|0)|0;m=b;break}}else{m=0}}while(0);b=m;e=e+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(f=i,i=i+16|0,c[f>>2]=k,c[f+8>>2]=j,f)|0)|0;i=f;j=2617360+(c[654338]<<12)|0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(47392,(f=i,i=i+8|0,c[f>>2]=j,f)|0);i=f}if((sn(j,57728)|0)!=0){n=pn(j)|0;aj(0,57448,(f=i,i=i+24|0,c[f>>2]=61200,c[f+8>>2]=j,c[f+16>>2]=n,f)|0);i=f;return 0}if((sn(j,57568)|0)!=0){n=pn(j)|0;aj(0,57448,(f=i,i=i+24|0,c[f>>2]=61200,c[f+8>>2]=j,c[f+16>>2]=n,f)|0);i=f;return 0}if((sn(j,41952)|0)!=0){n=pn(j)|0;aj(0,57448,(f=i,i=i+24|0,c[f>>2]=61200,c[f+8>>2]=j,c[f+16>>2]=n,f)|0);i=f;return 0}n=Vd(j|0)|0;if((n|0)==0){_i(46312,(f=i,i=i+8|0,c[f>>2]=j,f)|0);i=f;o=0;i=d;return o|0}else{c[h>>2]=n;c[787048+(g*288|0)>>2]=0;o=g;i=d;return o|0}return 0}function Yk(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c;c=b;while(1){b=a[c]|0;e=b<<24>>24;f=a[d]|0;g=f<<24>>24;h=(b-97&255)>>>0<26>>>0?e-32|0:e;e=(f-97&255)>>>0<26>>>0?g-32|0:g;if((h|0)==92|(h|0)==58){i=47}else{i=h}if((e|0)==92|(e|0)==58){j=47}else{j=e}if((i|0)!=(j|0)){k=1;l=8;break}if((i|0)==0){k=0;l=8;break}else{d=d+1|0;c=c+1|0}}if((l|0)==8){return k|0}return 0}function Zk(b,d,e,f,g){b=b|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,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;h=i;i=i+4096|0;j=h|0;if((b|0)==0){aj(0,44872,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}l=a[b]|0;if((l<<24>>24|0)==47|(l<<24>>24|0)==92){m=b+1|0}else{m=b}do{if((nb(m|0,27608)|0)==0){if((nb(m|0,23704)|0)!=0){break}do{if((c[429588]|0)!=0){if((nb(m|0,44216)|0)==0){break}if((e|0)==0){n=0;i=h;return n|0}c[e>>2]=0;n=-1;i=h;return n|0}}while(0);if((e|0)==0){b=d+4|0;l=c[b>>2]|0;if((l|0)==0){o=c[d+8>>2]|0;if((o|0)==0){n=0;i=h;return n|0}p=o+8192|0;q=j|0;c[654338]=c[654338]^1;xn(q,4096,37168,(k=i,i=i+16|0,c[k>>2]=(a[p]|0)==0?838312:p,c[k+8>>2]=m,k)|0)|0;i=k;p=0;r=q;a:while(1){s=a[r]|0;do{if((s<<24>>24|0)==47|(s<<24>>24|0)==92){if((p|0)==0){a[r]=47;t=1;break}else{_x(r|0,r+1|0,Wx(r|0)|0)|0;t=p;break}}else if((s<<24>>24|0)==0){break a}else{t=0}}while(0);p=t;r=r+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(k=i,i=i+16|0,c[k>>2]=o,c[k+8>>2]=q,k)|0)|0;i=k;r=Ud(2617360+(c[654338]<<12)|0,16456)|0;if((r|0)==0){n=0;i=h;return n|0}p=Qb(r|0)|0;vd(r|0,0,2)|0;s=Qb(r|0)|0;vd(r|0,p|0,0)|0;Ta(r|0)|0;n=(s|0)==0?1:s;i=h;return n|0}s=c[l+16404>>2]|0;r=a[m]|0;if(r<<24>>24==0){u=0;v=l}else{p=0;w=0;x=r;while(1){r=(ey(x<<24>>24|0)|0)&255;if((r<<24>>24|0)==92){y=47}else if((r<<24>>24|0)==46){z=w;break}else{y=r}r=(da(y<<24>>24,p+119|0)|0)+w|0;A=p+1|0;B=a[m+A|0]|0;if(B<<24>>24==0){z=r;break}else{p=A;w=r;x=B}}u=z;v=c[b>>2]|0}x=c[(c[v+16408>>2]|0)+(((u>>10^u^u>>20)&s-1)<<2)>>2]|0;if((x|0)==0){n=0;i=h;return n|0}else{C=x}b:while(1){x=m;w=c[C>>2]|0;while(1){p=a[w]|0;l=p<<24>>24;q=a[x]|0;o=q<<24>>24;B=(p-97&255)>>>0<26>>>0?l-32|0:l;l=(q-97&255)>>>0<26>>>0?o-32|0:o;if((B|0)==92|(B|0)==58){D=47}else{D=B}if((l|0)==92|(l|0)==58){E=47}else{E=l}if((D|0)!=(E|0)){break}if((D|0)==0){break b}else{x=x+1|0;w=w+1|0}}w=c[C+12>>2]|0;if((w|0)==0){n=0;F=121;break}else{C=w}}if((F|0)==121){i=h;return n|0}s=c[C+8>>2]|0;n=(s|0)==0?1:s;i=h;return n|0}else{G=1}while(1){s=G+1|0;if((c[787040+(G*288|0)>>2]|0)==0){break}if((s|0)<64){G=s}else{F=41;break}}if((F|0)==41){aj(1,57808,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}c[e>>2]=G;c[787044+(G*288|0)>>2]=f;s=d+4|0;b=c[s>>2]|0;if((b|0)==0){w=d+8|0;if((c[w>>2]|0)==0){n=-1;i=h;return n|0}x=Wx(m|0)|0;c:do{if((g|0)==0&(c[209566]|0)!=0){l=(x|0)<4;do{if(!l){if((tn(m+(x-4)|0,42392)|0)==0){break c}if((x|0)>=5){if((tn(m+(x-5)|0,39984)|0)==0){break c}if((tn(m+(x-5)|0,37096)|0)==0){break c}}if(l){break}if((tn(m+(x-4)|0,36616)|0)==0){break c}}}while(0);l=Vb(m|0,46)|0;do{if((l|0)!=0){if((Cn(l+1|0,45800,3)|0)!=0){break}B=Vc(l+4|0)|0;if((B|0)==(c[(c[429556]|0)+32>>2]|0)){break c}o=c[1736]|0;if((o|0)==0){break}else{H=0;I=o}do{H=H+1|0;if((I|0)==(B|0)){break c}I=c[6944+(H<<2)>>2]|0;}while((I|0)!=0)}}while(0);c[e>>2]=0;n=-1;i=h;return n|0}}while(0);x=c[w>>2]|0;l=x+8192|0;B=j|0;c[654338]=c[654338]^1;xn(B,4096,37168,(k=i,i=i+16|0,c[k>>2]=(a[l]|0)==0?838312:l,c[k+8>>2]=m,k)|0)|0;i=k;o=0;q=B;d:while(1){p=a[q]|0;do{if((p<<24>>24|0)==47|(p<<24>>24|0)==92){if((o|0)==0){a[q]=47;J=1;break}else{_x(q|0,q+1|0,Wx(q|0)|0)|0;J=o;break}}else if((p<<24>>24|0)==0){break d}else{J=0}}while(0);o=J;q=q+1|0}q=x|0;xn(2617360+(c[654338]<<12)|0,4096,31752,(k=i,i=i+16|0,c[k>>2]=q,c[k+8>>2]=B,k)|0)|0;i=k;o=Ud(2617360+(c[654338]<<12)|0,16456)|0;if((o|0)==0){c[e>>2]=0;n=-1;i=h;return n|0}rn(787072+((c[e>>2]|0)*288|0)|0,m,256);c[787064+((c[e>>2]|0)*288|0)>>2]=0;if((c[(c[210602]|0)+32>>2]|0)!=0){_i(35760,(k=i,i=i+32|0,c[k>>2]=m,c[k+8>>2]=q,c[k+16>>2]=47,c[k+24>>2]=l,k)|0);i=k}c[787040+((c[e>>2]|0)*288|0)>>2]=o;q=Qb(o|0)|0;vd(o|0,0,2)|0;w=Qb(o|0)|0;vd(o|0,q|0,0)|0;n=w;i=h;return n|0}w=c[b+16404>>2]|0;q=a[m]|0;if(q<<24>>24==0){K=0;L=b}else{o=0;p=0;r=q;while(1){q=(ey(r<<24>>24|0)|0)&255;if((q<<24>>24|0)==46){M=p;break}else if((q<<24>>24|0)==92){N=47}else{N=q}q=(da(N<<24>>24,o+119|0)|0)+p|0;A=o+1|0;O=a[m+A|0]|0;if(O<<24>>24==0){M=q;break}else{o=A;p=q;r=O}}K=M;L=c[s>>2]|0}r=(K>>10^K^K>>20)&w-1;if((c[(c[L+16408>>2]|0)+(r<<2)>>2]|0)==0){n=-1;i=h;return n|0}e:do{if((g|0)==0){p=c[209566]|0;if((p|0)==0){break}if((p|0)>0){o=c[L+16388>>2]|0;b=0;while(1){l=b+1|0;if((o|0)==(c[805472+(b<<2)>>2]|0)){break e}if((l|0)<(p|0)){b=l}else{break}}}c[e>>2]=0;n=-1;i=h;return n|0}}while(0);if((Lk(L)|0)==0){c[e>>2]=0;n=-1;i=h;return n|0}w=c[s>>2]|0;b=c[(c[w+16408>>2]|0)+(r<<2)>>2]|0;f:while(1){p=m;o=c[b>>2]|0;while(1){l=a[o]|0;B=l<<24>>24;x=a[p]|0;O=x<<24>>24;q=(l-97&255)>>>0<26>>>0?B-32|0:B;B=(x-97&255)>>>0<26>>>0?O-32|0:O;if((q|0)==92|(q|0)==58){P=47}else{P=q}if((B|0)==92|(B|0)==58){Q=47}else{Q=B}if((P|0)!=(Q|0)){break}if((P|0)==0){break f}else{p=p+1|0;o=o+1|0}}o=c[b+12>>2]|0;if((o|0)==0){n=-1;F=121;break}else{b=o}}if((F|0)==121){i=h;return n|0}r=Wx(m|0)|0;s=w+16400|0;g:do{if((c[s>>2]&1|0)==0){o=(r|0)<7;if(!o){if((tn(m+(r-7)|0,43576)|0)==0){break}}p=(r|0)<4;if(!p){if((tn(m+(r-4)|0,42960)|0)==0){break}if((tn(m+(r-4)|0,42392)|0)==0){break}}if(!o){if((tn(m+(r-7)|0,41896)|0)==0){break}}do{if(!p){if((tn(m+(r-4)|0,41440)|0)==0){break g}if((r|0)>=6){if((tn(m+(r-6)|0,40640)|0)==0){break g}}if((r|0)<5){break}if((tn(m+(r-5)|0,39984)|0)==0){break g}}}while(0);if((tn(m,39552)|0)==0){break}if((nb(m|0,39088)|0)!=0){break}c[s>>2]=c[s>>2]|1}}while(0);if((nb(m|0,38592)|0)!=0){c[s>>2]=c[s>>2]|4}if((nb(m|0,38192)|0)!=0){c[s>>2]=c[s>>2]|2}do{if((f|0)==0){r=c[e>>2]|0;c[787040+(r*288|0)>>2]=c[w+16384>>2];R=r}else{r=w+4096|0;p=Tn(r)|0;o=c[e>>2]|0;c[787040+(o*288|0)>>2]=p;if((p|0)!=0){R=o;break}aj(0,37824,(k=i,i=i+8|0,c[k>>2]=r,k)|0);i=k;return 0}}while(0);rn(787072+(R*288|0)|0,m,256);c[787064+((c[e>>2]|0)*288|0)>>2]=1;s=b+4|0;eo(c[787040+((c[e>>2]|0)*288|0)>>2]|0,c[s>>2]|0)|0;$n(c[787040+((c[e>>2]|0)*288|0)>>2]|0)|0;c[787056+((c[e>>2]|0)*288|0)>>2]=c[s>>2];s=b+8|0;r=c[s>>2]|0;c[787060+((c[e>>2]|0)*288|0)>>2]=r;if((c[(c[210602]|0)+32>>2]|0)==0){n=r;i=h;return n|0}_i(37480,(k=i,i=i+16|0,c[k>>2]=m,c[k+8>>2]=w+4096,k)|0);i=k;n=c[s>>2]|0;i=h;return n|0}}while(0);if((e|0)==0){n=0;i=h;return n|0}c[e>>2]=0;n=-1;i=h;return n|0}function _k(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=c[209560]|0;if((f|0)==0){aj(0,57592,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}a:do{if((b|0)==0){g=f;while(1){h=Zk(a,g,0,d,0)|0;if((h|0)>0){j=h;break}g=c[g>>2]|0;if((g|0)==0){break a}}i=e;return j|0}else{g=f;while(1){h=Zk(a,g,b,d,0)|0;if((h|0)>-1){if((c[b>>2]|0)!=0){j=h;break}}g=c[g>>2]|0;if((g|0)==0){break a}}i=e;return j|0}}while(0);if((b|0)==0){j=0;i=e;return j|0}c[b>>2]=0;j=-1;i=e;return j|0}function $k(b,d,e,f,g){b=b|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,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;h=i;i=i+12288|0;j=h+4096|0;k=h+8192|0;if((c[209560]|0)==0){aj(0,57592,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}m=(g|0)!=0;if(m){xn(j,4096,35152,(l=i,i=i+8|0,c[l>>2]=f,l)|0)|0;i=l}xn(k,4096,34656,(l=i,i=i+8|0,c[l>>2]=f,l)|0)|0;i=l;f=c[b>>2]|0;g=(f|0)==0;if(g){n=838240}else{n=f}o=c[n>>2]|0;if((o|0)==0){p=-1;q=4096;r=0;s=4096;t=0;i=h;return p|0}n=f+4|0;f=h|0;u=o;a:while(1){o=c[u+8>>2]|0;b:do{if((o|0)==0|(c[209566]|0)!=0){v=c[u+4>>2]|0;if((v|0)==0){break}c:do{if(!g){w=c[n>>2]|0;if((w|0)==0){break}x=v|0;y=w|0;while(1){w=a[y]|0;z=w<<24>>24;A=a[x]|0;B=A<<24>>24;C=(w-97&255)>>>0<26>>>0?z-32|0:z;z=(A-97&255)>>>0<26>>>0?B-32|0:B;if((C|0)==92|(C|0)==58){D=47}else{D=C}if((z|0)==92|(z|0)==58){E=47}else{E=z}if((D|0)!=(E|0)){break c}if((D|0)==0){break b}else{x=x+1|0;y=y+1|0}}}}while(0);if((Zk(k,u,0,0,0)|0)>0){F=33;break a}}else{if(m){v=o+8192|0;c[654338]=c[654338]^1;xn(f,4096,37168,(l=i,i=i+16|0,c[l>>2]=(a[v]|0)==0?838312:v,c[l+8>>2]=j,l)|0)|0;i=l;v=0;y=f;d:while(1){x=a[y]|0;do{if((x<<24>>24|0)==0){break d}else if((x<<24>>24|0)==47|(x<<24>>24|0)==92){if((v|0)==0){a[y]=47;G=1;break}else{_x(y|0,y+1|0,Wx(y|0)|0)|0;G=v;break}}else{G=0}}while(0);v=G;y=y+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(l=i,i=i+16|0,c[l>>2]=o,c[l+8>>2]=f,l)|0)|0;i=l;H=2617360+(c[654338]<<12)|0;I=Ud(H|0,16456)|0;if((I|0)!=0){F=18;break a}}if((Zk(k,u,0,0,0)|0)>0){F=20;break a}}}while(0);o=c[u>>2]|0;if((o|0)==0){p=-1;F=34;break}else{u=o}}if((F|0)==18){Ta(I|0)|0;rn(d,H,e);c[b>>2]=u;p=0;q=4096;r=0;s=4096;t=0;i=h;return p|0}else if((F|0)==20){c[b>>2]=u;p=2;q=4096;r=0;s=4096;t=0;i=h;return p|0}else if((F|0)==33){c[b>>2]=u;p=2;q=4096;r=0;s=4096;t=0;i=h;return p|0}else if((F|0)==34){q=4096;r=0;s=4096;t=0;i=h;return p|0}return 0}function al(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;if((c[209560]|0)==0){aj(0,57592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}if((d|0)==0){g=0;i=e;return g|0}f=787068+(d*288|0)|0;if((c[f>>2]|0)==0){g=bl(a,b,d)|0;i=e;return g|0}else{c[f>>2]=0;h=bl(a,b,d)|0;c[f>>2]=1;g=h;i=e;return g|0}return 0}function bl(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((c[209560]|0)==0){aj(0,57592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}if((d|0)==0){g=0;i=e;return g|0}c[209562]=(c[209562]|0)+b;h=787040+(d*288|0)|0;if((c[787064+(d*288|0)>>2]|0)!=0){g=ao(c[h>>2]|0,a,b)|0;i=e;return g|0}if((b|0)==0){g=0;i=e;return g|0}d=h|0;h=b;j=a;a=0;while(1){k=kd(j|0,1,h|0,c[d>>2]|0)|0;if((k|0)==0){if((a|0)==0){l=1}else{m=9;break}}else if((k|0)==(-1|0)){m=10;break}else{l=a}if((h|0)==(k|0)){g=b;m=13;break}else{h=h-k|0;j=j+k|0;a=l}}if((m|0)==9){g=b-h|0;i=e;return g|0}else if((m|0)==10){aj(0,34232,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}else if((m|0)==13){i=e;return g|0}return 0}function cl(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;e=i;if((c[209560]|0)==0){aj(0,57592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}if((d|0)==0){g=0;i=e;return g|0}if((d-1|0)>>>0>62>>>0){aj(1,56984,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}if((c[787064+(d*288|0)>>2]|0)==1){aj(1,56664,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}h=c[787040+(d*288|0)>>2]|0;if((h|0)==0){aj(1,56504,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}a:do{if((b|0)!=0){j=b;k=a;l=0;while(1){m=_a(k|0,1,j|0,h|0)|0;if((m|0)==0){if((l|0)==0){n=1}else{o=13;break}}else if((m|0)==(-1|0)){o=14;break}else{n=l}if((j|0)==(m|0)){break a}else{j=j-m|0;k=k+m|0;l=n}}if((o|0)==13){_i(33664,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;i=e;return g|0}else if((o|0)==14){_i(32936,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;i=e;return g|0}}}while(0);if((c[787048+(d*288|0)>>2]|0)==0){g=b;i=e;return g|0}Wa(h|0)|0;g=b;i=e;return g|0}function dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+4112|0;f=e|0;g=e+16|0;h=f;c[h>>2]=d;c[h+4>>2]=0;fd(g|0,4096,b|0,f|0)|0;cl(g,Wx(g|0)|0,a)|0;i=e;return}function el(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+65536|0;f=e|0;if((c[209560]|0)==0){aj(0,57592,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}h=787040+(a*288|0)|0;j=787068+(a*288|0)|0;if((c[j>>2]|0)!=0){c[j>>2]=0;k=el(a,b,d)|0;c[j>>2]=1;l=k;i=e;return l|0}if((c[787064+(a*288|0)>>2]|0)!=1){if((a-1|0)>>>0>62>>>0){aj(1,56984,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}k=c[787040+(a*288|0)>>2]|0;if((k|0)==0){aj(1,56504,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}if((d|0)==2){m=0}else if((d|0)==0){m=1}else if((d|0)==1){m=2}else{aj(0,32432,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}l=vd(k|0,b|0,m|0)|0;i=e;return l|0}m=f|0;f=bo(c[787040+(a*288|0)>>2]|0)|0;do{if((b|0)<0){if((d|0)==0){n=f+b|0}else if((d|0)==1){n=(c[787060+(a*288|0)>>2]|0)+b|0}else{n=0}o=(n|0)<0?0:n;p=13}else{if((d|0)==1){q=b-f+(c[787060+(a*288|0)>>2]|0)|0;break}else if((d|0)==2){o=b;p=13;break}else if((d|0)==0){q=b;break}else{aj(0,32432,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}}}while(0);do{if((p|0)==13){if((o|0)==(f|0)){l=b;i=e;return l|0}else{g=h;eo(c[g>>2]|0,c[787056+(a*288|0)>>2]|0)|0;$n(c[g>>2]|0)|0;q=o;break}}}while(0);if((q|0)>65536){o=q-65537&-65536;h=q;do{bl(m,65536,a)|0;h=h-65536|0;}while((h|0)>65536);r=q-65536-o|0}else{r=q}bl(m,r,a)|0;l=b;i=e;return l|0}function fl(b,d){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,v=0,w=0,x=0,y=0,z=0,A=0;e=i;f=c[209560]|0;if((f|0)==0){aj(0,57592,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}if((b|0)==0){aj(0,44872,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;return 0}g=a[b]|0;if((g<<24>>24|0)==47|(g<<24>>24|0)==92){h=b+1|0}else{h=b}if((nb(h|0,27608)|0)!=0){j=-1;i=e;return j|0}if((nb(h|0,23704)|0)==0){k=f}else{j=-1;i=e;return j|0}a:while(1){f=k+4|0;b=c[f>>2]|0;b:do{if((b|0)!=0){g=c[b+16404>>2]|0;l=a[h]|0;if(l<<24>>24==0){m=0;n=b}else{o=0;p=0;q=l;while(1){l=(ey(q<<24>>24|0)|0)&255;if((l<<24>>24|0)==46){r=p;break}else if((l<<24>>24|0)==92){s=47}else{s=l}l=(da(s<<24>>24,o+119|0)|0)+p|0;t=o+1|0;u=a[h+t|0]|0;if(u<<24>>24==0){r=l;break}else{o=t;p=l;q=u}}m=r;n=c[f>>2]|0}q=(m>>10^m^m>>20)&g-1;if((n|0)==0){break}if((c[(c[n+16408>>2]|0)+(q<<2)>>2]|0)==0){break}p=c[209566]|0;c:do{if((p|0)!=0){if((p|0)<=0){break b}o=c[n+16388>>2]|0;u=0;while(1){l=u+1|0;if((o|0)==(c[805472+(u<<2)>>2]|0)){break c}if((l|0)<(p|0)){u=l}else{break b}}}}while(0);if((Lk(n)|0)==0){break}v=c[f>>2]|0;p=c[(c[v+16408>>2]|0)+(q<<2)>>2]|0;do{g=h;u=c[p>>2]|0;while(1){o=a[u]|0;l=o<<24>>24;t=a[g]|0;w=t<<24>>24;x=(o-97&255)>>>0<26>>>0?l-32|0:l;l=(t-97&255)>>>0<26>>>0?w-32|0:w;if((x|0)==92|(x|0)==58){y=47}else{y=x}if((l|0)==92|(l|0)==58){z=47}else{z=l}if((y|0)!=(z|0)){break}if((y|0)==0){break a}else{g=g+1|0;u=u+1|0}}p=c[p+12>>2]|0;}while((p|0)!=0)}}while(0);f=c[k>>2]|0;if((f|0)==0){j=-1;A=35;break}else{k=f}}if((A|0)==35){i=e;return j|0}if((d|0)==0){j=1;i=e;return j|0}c[d>>2]=c[v+16392>>2];j=1;i=e;return j|0}function gl(b,d,e,f){b=b|0;d=d|0;e=e|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;g=i;i=i+16|0;h=g|0;j=g+8|0;k=c[209560]|0;if((k|0)==0){aj(0,57592,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}if((b|0)==0){aj(0,32e3,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}if((a[b]|0)==0){aj(0,32e3,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}do{if((nb(b|0,42392)|0)==0){m=0}else{n=c[429578]|0;if((n|0)==0){m=1;break}if((c[n+32>>2]|0)!=2){m=1;break}$i(31664,(l=i,i=i+8|0,c[l>>2]=b,l)|0);i=l;if((bl(j,4,c[429576]|0)|0)!=4){if((f|0)==0){o=-1;i=g;return o|0}c[f>>2]=0;o=-1;i=g;return o|0}n=c[j>>2]|0;p=(f|0)==0;if((n|0)==0){if(p){o=1;i=g;return o|0}c[f>>2]=0;o=-1;i=g;return o|0}if(p){o=n;i=g;return o|0}p=yj(n+1|0)|0;c[f>>2]=p;n=bl(p,c[j>>2]|0,c[429576]|0)|0;if((n|0)!=(c[j>>2]|0)){aj(0,31312,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}c[209572]=(c[209572]|0)+1;c[209570]=(c[209570]|0)+1;a[p+n|0]=0;o=c[j>>2]|0;i=g;return o|0}}while(0);do{if((d|0)==0){n=k;while(1){q=Zk(b,n,h,0,0)|0;r=c[h>>2]|0;if(!((q|0)<0|(r|0)==0)){s=21;break}p=c[n>>2]|0;if((p|0)==0){s=23;break}else{n=p}}if((s|0)==21){c[j>>2]=q;if((f|0)==0){t=r;s=31;break}else{u=q;s=44;break}}else if((s|0)==23){c[h>>2]=0;c[j>>2]=-1;if((f|0)==0){break}else{s=26;break}}}else{n=Zk(b,d,h,0,e)|0;p=c[h>>2]|0;c[j>>2]=n;v=(f|0)!=0;if((p|0)==0){if(v){s=26;break}else{break}}else{if(v){u=n;s=44;break}else{t=p;s=31;break}}}}while(0);if((s|0)==26){c[f>>2]=0}else if((s|0)==31){e=c[429578]|0;do{if((m|0)!=0&(e|0)!=0){if((c[e+32>>2]|0)!=1){w=t;break}$i(30024,(l=i,i=i+8|0,c[l>>2]=b,l)|0);i=l;cl(j,4,c[429576]|0)|0;Wa(c[787040+((c[429576]|0)*288|0)>>2]|0)|0;w=c[h>>2]|0}else{w=t}}while(0);if((c[209560]|0)==0){aj(0,57592,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}t=787040+(w*288|0)|0;if((c[787064+(w*288|0)>>2]|0)==1){e=t;Vn(c[e>>2]|0)|0;if((c[787044+(w*288|0)>>2]|0)!=0){Un(c[e>>2]|0)|0}Zx(t|0,0,288)|0}else{e=c[t>>2]|0;if((e|0)!=0){Ta(e|0)|0}Zx(t|0,0,288)|0}o=c[j>>2]|0;i=g;return o|0}else if((s|0)==44){c[209572]=(c[209572]|0)+1;c[209570]=(c[209570]|0)+1;s=yj(u+1|0)|0;c[f>>2]=s;bl(s,c[j>>2]|0,c[h>>2]|0)|0;a[s+(c[j>>2]|0)|0]=0;f=c[h>>2]|0;if((c[209560]|0)==0){aj(0,57592,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}h=787040+(f*288|0)|0;if((c[787064+(f*288|0)>>2]|0)==1){u=h;Vn(c[u>>2]|0)|0;if((c[787044+(f*288|0)>>2]|0)!=0){Un(c[u>>2]|0)|0}Zx(h|0,0,288)|0}else{u=c[h>>2]|0;if((u|0)!=0){Ta(u|0)|0}Zx(h|0,0,288)|0}h=c[429578]|0;do{if((m|0)!=0&(h|0)!=0){if((c[h+32>>2]|0)!=1){break}$i(29720,(l=i,i=i+8|0,c[l>>2]=b,l)|0);i=l;cl(j,4,c[429576]|0)|0;cl(s,c[j>>2]|0,c[429576]|0)|0;Wa(c[787040+((c[429576]|0)*288|0)>>2]|0)|0}}while(0);o=c[j>>2]|0;i=g;return o|0}s=c[429578]|0;if(!((m|0)!=0&(s|0)!=0)){o=-1;i=g;return o|0}if((c[s+32>>2]|0)!=1){o=-1;i=g;return o|0}$i(30576,(l=i,i=i+8|0,c[l>>2]=b,l)|0);i=l;c[j>>2]=0;cl(j,4,c[429576]|0)|0;Wa(c[787040+((c[429576]|0)*288|0)>>2]|0)|0;o=-1;i=g;return o|0}function hl(a,b){a=a|0;b=b|0;return gl(a,0,0,b)|0}function il(a){a=a|0;var b=0,d=0;b=i;if((c[209560]|0)==0){aj(0,57592,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}if((a|0)==0){aj(0,29416,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}c[209570]=(c[209570]|0)-1;zj(a);if((c[209570]|0)!=0){i=b;return}Aj();i=b;return}function jl(b,d){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,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;e=i;i=i+344|0;f=e|0;g=e+8|0;h=e+264|0;j=g|0;k=Tn(b)|0;if((Wn(k,f)|0)!=0){l=0;m=80;n=0;o=256;p=0;i=e;return l|0}Sn(k)|0;q=f|0;a:do{if((c[q>>2]|0)==0){r=0;s=0}else{f=0;t=0;while(1){if((Xn(k,h,j,256,0,0,0,0)|0)!=0){break}u=t+1+(Wx(j|0)|0)|0;Zn(k)|0;v=f+1|0;w=c[q>>2]|0;if(v>>>0<w>>>0){f=v;t=u}else{r=u;s=w;break a}}r=t;s=c[q>>2]|0}}while(0);f=oj((s<<4)+r|0)|0;r=f;s=c[q>>2]|0;w=f+(s<<4)|0;f=oj((s<<2)+4|0)|0;s=f;c[s>>2]=c[210606];u=c[q>>2]|0;v=1;while(1){x=v<<1;if(v>>>0>u>>>0){y=v;break}if((x|0)<1025){v=x}else{y=x;break}}v=oj((y<<2)+16416|0)|0;u=v;x=v+16404|0;c[x>>2]=y;z=v+16416|0;A=v+16408|0;c[A>>2]=z;b:do{if((y|0)>0){B=0;C=z;while(1){c[C+(B<<2)>>2]=0;D=B+1|0;if((D|0)>=(y|0)){break b}B=D;C=c[A>>2]|0}}}while(0);rn(v+4096|0,b,4096);b=v+8192|0;rn(b,d,4096);d=Wx(b|0)|0;do{if(d>>>0>4>>>0){if((tn(v+(d+8188)|0,41952)|0)!=0){break}a[v+((Wx(b|0)|0)+8188)|0]=0}}while(0);c[v+16384>>2]=k;c[v+16396>>2]=c[q>>2];Sn(k)|0;c:do{if((c[q>>2]|0)==0){E=1}else{b=h+28|0;d=h+20|0;y=0;z=1;C=w;while(1){if((Xn(k,h,j,256,0,0,0,0)|0)!=0){E=z;break c}if((c[b>>2]|0)==0){F=z}else{c[s+(z<<2)>>2]=c[d>>2];F=z+1|0}En(j)|0;B=c[x>>2]|0;t=a[j]|0;d:do{if(t<<24>>24==0){G=0}else{D=0;H=0;I=t;while(1){J=(ey(I<<24>>24|0)|0)&255;if((J<<24>>24|0)==92){K=47}else if((J<<24>>24|0)==46){G=H;break d}else{K=J}J=(da(K<<24>>24,D+119|0)|0)+H|0;L=D+1|0;M=a[g+L|0]|0;if(M<<24>>24==0){G=J;break}else{D=L;H=J;I=M}}}}while(0);t=(G>>10^G^G>>20)&B-1;I=r+(y<<4)|0;c[I>>2]=C;by(C|0,j|0)|0;H=C+((Wx(j|0)|0)+1)|0;c[r+(y<<4)+4>>2]=co(k)|0;c[r+(y<<4)+8>>2]=c[b>>2];c[r+(y<<4)+12>>2]=c[(c[A>>2]|0)+(t<<2)>>2];c[(c[A>>2]|0)+(t<<2)>>2]=I;Zn(k)|0;I=y+1|0;if(I>>>0<(c[q>>2]|0)>>>0){y=I;z=F;C=H}else{E=F;break}}}}while(0);F=E<<2;c[v+16388>>2]=Ql(f+4|0,F-4|0)|0;c[v+16392>>2]=Ql(f,F)|0;mj(f);c[v+16412>>2]=r;l=u;m=80;n=0;o=256;p=0;i=e;return l|0}function kl(b,d,e,f,g){b=b|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,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;h=i;i=i+20480|0;j=h|0;k=h+4096|0;l=k;m=i;i=i+256|0;n=i;i=i+4|0;i=i+7&-8;o=m|0;if((c[209560]|0)==0){aj(0,57592,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;return 0}if((b|0)==0){c[f>>2]=0;q=0;r=256;s=0;t=16384;u=0;i=h;return q|0}v=(d|0)==0?2551536:d;d=Wx(b|0)|0;w=d-1|0;x=a[b+w|0]|0;if((x<<24>>24|0)==92|(x<<24>>24|0)==47){y=w}else{y=d}d=Wx(v|0)|0;a[o]=0;w=0;x=0;z=0;while(1){A=a[b+x|0]|0;if((A<<24>>24|0)==0){break}else if((A<<24>>24|0)==47|(A<<24>>24|0)==92){B=w+1|0;C=x}else{B=w;C=z}w=B;x=x+1|0;z=C}by(o|0,b|0)|0;a[m+z|0]=0;z=c[209560]|0;if((z|0)==0){c[f>>2]=0;q=0;r=256;s=0;t=16384;u=0;i=h;return q|0}C=(g|0)==0;g=j|0;j=(e|0)==0;x=(y|0)==0?0:y+1|0;B=0;A=z;while(1){z=A+4|0;D=c[z>>2]|0;a:do{if((D|0)==0){E=c[A+8>>2]|0;if((E|0)==0){F=B;break}if((c[209566]|0)!=0&C){F=B;break}G=E+8192|0;c[654338]=c[654338]^1;xn(g,4096,37168,(p=i,i=i+16|0,c[p>>2]=(a[G]|0)==0?838312:G,c[p+8>>2]=b,p)|0)|0;i=p;G=0;H=g;b:while(1){I=a[H]|0;do{if((I<<24>>24|0)==47|(I<<24>>24|0)==92){if((G|0)==0){a[H]=47;J=1;break}else{_x(H|0,H+1|0,Wx(H|0)|0)|0;J=G;break}}else if((I<<24>>24|0)==0){break b}else{J=0}}while(0);G=J;H=H+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(p=i,i=i+16|0,c[p>>2]=E,c[p+8>>2]=g,p)|0)|0;i=p;H=ud(2617360+(c[654338]<<12)|0,v|0,e|0,n|0,0)|0;if((c[n>>2]|0)>0){G=0;I=B;while(1){K=c[H+(G<<2)>>2]|0;c:do{if((I|0)==4095){L=4095}else{if((I|0)>0){M=0;while(1){N=M+1|0;if((tn(K,c[k+(M<<2)>>2]|0)|0)==0){L=I;break c}if((N|0)<(I|0)){M=N}else{break}}}c[k+(I<<2)>>2]=qj(K)|0;L=I+1|0}}while(0);K=G+1|0;if((K|0)<(c[n>>2]|0)){G=K;I=L}else{O=L;break}}}else{O=B}pc(H|0);F=O}else{I=c[209566]|0;d:do{if((I|0)!=0){if((I|0)<=0){F=B;break a}G=c[D+16388>>2]|0;E=0;while(1){K=E+1|0;if((G|0)==(c[805472+(E<<2)>>2]|0)){break d}if((K|0)<(I|0)){E=K}else{F=B;break a}}}}while(0);if((Lk(D)|0)==0){F=B;break}I=c[z>>2]|0;H=c[I+16412>>2]|0;E=I+16396|0;if((c[E>>2]|0)>0){P=0;Q=B}else{F=B;break}while(1){I=c[H+(P<<4)>>2]|0;e:do{if(j){a[o]=0;G=0;K=0;M=0;while(1){N=a[I+K|0]|0;if((N<<24>>24|0)==0){break}else if((N<<24>>24|0)==47|(N<<24>>24|0)==92){R=G+1|0;S=K}else{R=G;S=M}G=R;K=K+1|0;M=S}by(o|0,I|0)|0;a[m+M|0]=0;if((G-w|0)>2|(y|0)>(M|0)){T=Q;break}if((Cn(I,b,y)|0)!=0){T=Q;break}K=Wx(I|0)|0;if((K|0)<(d|0)){T=Q;break}if((tn(I+(K-d)|0,v)|0)!=0){T=Q;break}K=I+x|0;if((Q|0)==4095){T=4095;break}if((Q|0)>0){N=0;while(1){U=N+1|0;if((tn(K,c[k+(N<<2)>>2]|0)|0)==0){T=Q;break e}if((U|0)<(Q|0)){N=U}else{break}}}c[k+(Q<<2)>>2]=qj(K)|0;T=Q+1|0}else{if((jj(e,I,0)|0)==0){T=Q;break}if((Q|0)==4095){T=4095;break}if((Q|0)>0){N=0;while(1){M=N+1|0;if((tn(I,c[k+(N<<2)>>2]|0)|0)==0){T=Q;break e}if((M|0)<(Q|0)){N=M}else{break}}}c[k+(Q<<2)>>2]=qj(I)|0;T=Q+1|0}}while(0);I=P+1|0;if((I|0)<(c[E>>2]|0)){P=I;Q=T}else{F=T;break}}}}while(0);z=c[A>>2]|0;if((z|0)==0){break}else{B=F;A=z}}c[f>>2]=F;if((F|0)==0){q=0;r=256;s=0;t=16384;u=0;i=h;return q|0}f=F<<2;A=oj(f+4|0)|0;B=A;if((F|0)>0){Vx(A|0,l|0,f)|0;V=F}else{V=0}c[B+(V<<2)>>2]=0;q=B;r=256;s=0;t=16384;u=0;i=h;return q|0}function ll(b,d,e,f){b=b|0;d=d|0;e=e|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;g=i;i=i+8|0;h=g|0;a[e]=0;c[h>>2]=0;if((tn(b,28312)|0)==0){j=ml(e,f)|0;i=g;return j|0}k=kl(b,d,0,h,0)|0;d=c[h>>2]|0;a:do{if((d|0)>0){b=e;l=0;m=0;while(1){n=c[k+(l<<2)>>2]|0;o=(Wx(n|0)|0)+1|0;p=o+m|0;if((p+1|0)>=(f|0)){break}by(b|0,n|0)|0;n=l+1|0;if((n|0)<(d|0)){b=b+o|0;l=n;m=p}else{q=d;break a}}c[h>>2]=l;q=l}else{q=d}}while(0);if((c[209560]|0)==0){aj(0,57592,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;return 0}if((k|0)==0){j=q;i=g;return j|0}d=c[k>>2]|0;if((d|0)!=0){h=0;f=d;do{mj(f);h=h+1|0;f=c[k+(h<<2)>>2]|0;}while((f|0)!=0)}mj(k);j=q;i=g;return j|0}function ml(b,d){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,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;e=i;i=i+8216|0;f=e|0;g=e+4096|0;h=e+4104|0;j=e+8200|0;k=e+8208|0;l=h|0;a[b]=0;m=ud(c[(c[209574]|0)+4>>2]|0,0,0,k|0,1)|0;n=ud(c[(c[210610]|0)+4>>2]|0,0,0,k|0,1)|0;do{if((m|0)==0){o=0}else{if((c[m>>2]|0)==0){o=0;break}else{p=m;q=0}while(1){k=p+4|0;r=q+1|0;if((c[k>>2]|0)==0){o=r;break}else{p=k;q=r}}}}while(0);do{if((n|0)==0){s=0}else{if((c[n>>2]|0)==0){s=0;break}else{t=n;u=0}while(1){q=t+4|0;p=u+1|0;if((c[q>>2]|0)==0){s=p;break}else{t=q;u=p}}}}while(0);u=oj((s+o<<2)+4|0)|0;o=u;s=(m|0)!=0;do{if(s){t=c[m>>2]|0;if((t|0)==0){v=o;break}else{w=o;x=m;y=t}while(1){c[w>>2]=y;t=x+4|0;p=w+4|0;q=c[t>>2]|0;if((q|0)==0){v=p;break}else{w=p;x=t;y=q}}}else{v=o}}while(0);y=(n|0)!=0;do{if(y){x=c[n>>2]|0;if((x|0)==0){z=v;break}else{A=v;B=n;C=x}while(1){c[A>>2]=C;x=B+4|0;w=A+4|0;q=c[x>>2]|0;if((q|0)==0){z=w;break}else{A=w;B=x;C=q}}}else{z=v}}while(0);c[z>>2]=0;if(s){mj(m)}if(y){mj(n)}if((u|0)==0){D=0;pc(o|0);E=4096;F=0;i=e;return D|0}if((c[o>>2]|0)==0){D=0;pc(o|0);E=4096;F=0;i=e;return D|0}else{G=o;H=0}while(1){u=G+4|0;I=H+1|0;if((c[u>>2]|0)==0){break}else{G=u;H=I}}if(!((H|0)>-1)){D=0;pc(o|0);E=4096;F=0;i=e;return D|0}H=f|0;f=0;G=0;u=0;n=0;y=b;a:while(1){b=c[o+(G<<2)>>2]|0;b:do{if((G|0)==0){if((u|0)==0){J=27}else{K=y;L=n;M=f;N=u}}else{if((G|0)>0){O=0}else{J=27;break}while(1){m=O+1|0;if((tn(c[o+(O<<2)>>2]|0,b)|0)==0){K=y;L=n;M=f;N=1;break b}if((m|0)<(G|0)){O=m}else{J=27;break}}}}while(0);do{if((J|0)==27){J=0;if((tn(b,c[(c[430924]|0)+4>>2]|0)|0)==0){K=y;L=n;M=f;N=0;break}if((Cn(b,27944,1)|0)==0){K=y;L=n;M=f;N=0;break}m=c[(c[210610]|0)+4>>2]|0;c[654338]=c[654338]^1;s=(b|0)==0;if(s){J=31}else{if((a[b]|0)==0){J=31}else{P=b}}if((J|0)==31){J=0;P=838312}xn(H,4096,37168,(Q=i,i=i+16|0,c[Q>>2]=P,c[Q+8>>2]=2551536,Q)|0)|0;i=Q;z=0;v=H;c:while(1){C=a[v]|0;do{if((C<<24>>24|0)==47|(C<<24>>24|0)==92){if((z|0)==0){a[v]=47;R=1;break}else{_x(v|0,v+1|0,Wx(v|0)|0)|0;R=z;break}}else if((C<<24>>24|0)==0){break c}else{R=0}}while(0);z=R;v=v+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(Q=i,i=i+16|0,c[Q>>2]=m,c[Q+8>>2]=H,Q)|0)|0;i=Q;v=2617360+(c[654338]<<12)|0;c[g>>2]=0;pc(ud(v|0,41952,0,g|0,0)|0);if((c[g>>2]|0)<1){v=c[(c[209574]|0)+4>>2]|0;c[654338]=c[654338]^1;if(s){J=41}else{if((a[b]|0)==0){J=41}else{S=b}}if((J|0)==41){J=0;S=838312}xn(H,4096,37168,(Q=i,i=i+16|0,c[Q>>2]=S,c[Q+8>>2]=2551536,Q)|0)|0;i=Q;z=0;C=H;d:while(1){B=a[C]|0;do{if((B<<24>>24|0)==47|(B<<24>>24|0)==92){if((z|0)==0){a[C]=47;T=1;break}else{_x(C|0,C+1|0,Wx(C|0)|0)|0;T=z;break}}else if((B<<24>>24|0)==0){break d}else{T=0}}while(0);z=T;C=C+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(Q=i,i=i+16|0,c[Q>>2]=v,c[Q+8>>2]=H,Q)|0)|0;i=Q;C=2617360+(c[654338]<<12)|0;c[g>>2]=0;pc(ud(C|0,41952,0,g|0,0)|0);if((c[g>>2]|0)<=0){K=y;L=n;M=f;N=0;break}}C=(Wx(b|0)|0)+1|0;a[l]=0;by(l|0,b|0)|0;Vx(h+(Wx(l|0)|0)|0,27480,17)|0;do{if((Tk(l,j)|0)>0){z=c[j>>2]|0;if((z|0)==0){J=68;break}if((z-1|0)>>>0>62>>>0){J=52;break a}s=787064+(z*288|0)|0;if((c[s>>2]|0)==1){J=54;break a}m=c[787040+(z*288|0)>>2]|0;if((m|0)==0){J=56;break a}Zx(l|0,0,4096)|0;B=kd(l|0,1,48,m|0)|0;if((B|0)>-1){a[h+B|0]=0}if((c[209560]|0)==0){J=60;break a}B=787040+(z*288|0)|0;if((c[s>>2]|0)==1){s=B;Vn(c[s>>2]|0)|0;if((c[787044+(z*288|0)>>2]|0)!=0){Un(c[s>>2]|0)|0}Zx(B|0,0,288)|0;break}else{s=c[B>>2]|0;if((s|0)!=0){Ta(s|0)|0}Zx(B|0,0,288)|0;break}}else{J=68}}while(0);if((J|0)==68){J=0;by(l|0,b|0)|0}v=(Wx(l|0)|0)+1|0;if((f+2+C+v|0)>=(d|0)){D=n;J=72;break a}by(y|0,b|0)|0;by(y+C|0,l|0)|0;K=y+(v+C)|0;L=n+1|0;M=C+f+v|0;N=0}}while(0);b=G+1|0;if((b|0)<(I|0)){f=M;G=b;u=N;n=L;y=K}else{D=L;J=72;break}}if((J|0)==52){aj(1,56984,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;return 0}else if((J|0)==54){aj(1,56664,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;return 0}else if((J|0)==56){aj(1,56504,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;return 0}else if((J|0)==60){aj(0,57592,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;return 0}else if((J|0)==72){pc(o|0);E=4096;F=0;i=e;return D|0}return 0}function nl(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;i=i+8|0;b=a|0;do{if((xi()|0)>=2){if((xi()|0)>3){break}d=(xi()|0)==2;e=yi(1)|0;if(d){f=2551536}else{f=yi(2)|0}_i(26224,(g=i,i=i+16|0,c[g>>2]=e,c[g+8>>2]=f,g)|0);i=g;_i(25624,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;d=kl(e,f,0,b,0)|0;e=c[b>>2]|0;if((e|0)>0){h=0;do{_i(25440,(g=i,i=i+8|0,c[g>>2]=c[d+(h<<2)>>2],g)|0);i=g;h=h+1|0;}while((h|0)<(e|0))}if((c[209560]|0)==0){aj(0,57592,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}if((d|0)==0){i=a;return}e=c[d>>2]|0;if((e|0)!=0){h=0;j=e;do{mj(j);h=h+1|0;j=c[d+(h<<2)>>2]|0;}while((j|0)!=0)}mj(d);i=a;return}}while(0);_i(27032,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;i=a;return}function ol(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;e=d<<2;f=oj(e+4|0)|0;g=f;c[g>>2]=0;if((d|0)>0){h=0}else{i=b;Vx(i|0,f|0,e)|0;mj(f);return}do{a:do{if((h|0)>0){j=c[b+(h<<2)>>2]|0;k=0;while(1){l=c[g+(k<<2)>>2]|0;m=j;while(1){n=a[m]|0;o=n<<24>>24;p=a[l]|0;q=p<<24>>24;r=(n-97&255)>>>0<26>>>0?o-32|0:o;o=(p-97&255)>>>0<26>>>0?q-32|0:q;if((r|0)==92|(r|0)==58){s=47}else{s=r}if((o|0)==92|(o|0)==58){t=47}else{t=o}if((s|0)<(t|0)){u=k;break a}if((s|0)>(t|0)|(s|0)==0){break}else{l=l+1|0;m=m+1|0}}m=k+1|0;if((m|0)<(h|0)){k=m}else{u=m;break}}}else{u=0}}while(0);if((h|0)>(u|0)){k=h;while(1){j=k-1|0;c[g+(k<<2)>>2]=c[g+(j<<2)>>2];if((j|0)>(u|0)){k=j}else{break}}}c[g+(u<<2)>>2]=c[b+(h<<2)>>2];h=h+1|0;}while((h|0)<(d|0));i=b;Vx(i|0,f|0,e)|0;mj(f);return}function pl(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;i=i+8|0;d=b|0;if((xi()|0)<2){_i(25192,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;_i(24760,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;i=b;return}f=yi(1)|0;_i(25624,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;g=kl(2551536,2551536,f,d,0)|0;f=c[d>>2]|0;ol(g,f);if((f|0)>0){h=0;while(1){j=g+(h<<2)|0;k=c[j>>2]|0;while(1){l=a[k]|0;if((l<<24>>24|0)==0){break}else if((l<<24>>24|0)==92|(l<<24>>24|0)==58){a[k]=47}k=k+1|0}_i(25440,(e=i,i=i+8|0,c[e>>2]=c[j>>2],e)|0);i=e;k=h+1|0;l=c[d>>2]|0;if((k|0)<(l|0)){h=k}else{m=l;break}}}else{m=f}_i(24424,(e=i,i=i+8|0,c[e>>2]=m,e)|0);i=e;if((c[209560]|0)==0){aj(0,57592,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}if((g|0)==0){i=b;return}e=c[g>>2]|0;if((e|0)!=0){m=0;f=e;do{mj(f);m=m+1|0;f=c[g+(m<<2)>>2]|0;}while((f|0)!=0)}mj(g);i=b;return}function ql(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;a=i;_i(24136,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;d=c[209560]|0;if((d|0)!=0){e=d;do{d=e+4|0;f=c[d>>2]|0;do{if((f|0)==0){g=c[e+8>>2]|0;_i(22072,(b=i,i=i+24|0,c[b>>2]=g,c[b+8>>2]=47,c[b+16>>2]=g+8192,b)|0);i=b}else{g=c[f+16396>>2]|0;_i(23856,(b=i,i=i+16|0,c[b>>2]=f+4096,c[b+8>>2]=g,b)|0);i=b;g=c[209566]|0;a:do{if((g|0)!=0){b:do{if((g|0)>0){h=c[(c[d>>2]|0)+16388>>2]|0;j=0;while(1){k=j+1|0;if((h|0)==(c[805472+(j<<2)>>2]|0)){break}if((k|0)<(g|0)){j=k}else{break b}}_i(23408,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;break a}}while(0);_i(23592,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b}}while(0);if((Lk(c[d>>2]|0)|0)==0){_i(22264,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;break}else{_i(22784,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;break}}}while(0);e=c[e>>2]|0;}while((e|0)!=0)}_i(21832,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;e=1;do{if((c[787040+(e*288|0)>>2]|0)!=0){_i(21424,(b=i,i=i+16|0,c[b>>2]=e,c[b+8>>2]=787072+(e*288|0),b)|0);i=b}e=e+1|0;}while((e|0)<64);i=a;return}function rl(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;i=i+8|0;b=a|0;if((xi()|0)!=2){_i(21144,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=a;return}e=yi(1)|0;f=c[209560]|0;if((f|0)==0){aj(0,57592,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}else{g=f}while(1){if((Zk(e,g,b,0,0)|0)>-1){h=c[b>>2]|0;if((h|0)!=0){break}}f=c[g>>2]|0;if((f|0)==0){j=8;break}else{g=f}}if((j|0)==8){c[b>>2]=0;i=a;return}if((c[209560]|0)==0){aj(0,57592,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}d=787040+(h*288|0)|0;if((c[787064+(h*288|0)>>2]|0)==1){b=d;Vn(c[b>>2]|0)|0;if((c[787044+(h*288|0)>>2]|0)!=0){Un(c[b>>2]|0)|0}Zx(d|0,0,288)|0;i=a;return}else{b=c[d>>2]|0;if((b|0)!=0){Ta(b|0)|0}Zx(d|0,0,288)|0;i=a;return}}function sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;if((Zk(a,b,0,0,0)|0)<=0){e=0;i=d;return e|0}f=c[b+4>>2]|0;if((f|0)!=0){_i(20952,(g=i,i=i+16|0,c[g>>2]=a,c[g+8>>2]=f+4096,g)|0);i=g;e=1;i=d;return e|0}f=c[b+8>>2]|0;if((f|0)==0){e=0;i=d;return e|0}_i(20800,(g=i,i=i+16|0,c[g>>2]=a,c[g+8>>2]=f+4096,g)|0);i=g;e=1;i=d;return e|0}function tl(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;d=yi(1)|0;e=a[d]|0;if((e<<24>>24|0)==0){_i(20496,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=b;return}else if((e<<24>>24|0)==47|(e<<24>>24|0)==92){g=d+1|0}else{g=d}d=c[209560]|0;a:do{if((d|0)!=0){e=d;while(1){if((Zk(g,e,0,0,0)|0)>0){h=c[e+4>>2]|0;if((h|0)!=0){j=7;break}k=c[e+8>>2]|0;if((k|0)!=0){j=9;break}}e=c[e>>2]|0;if((e|0)==0){break a}}if((j|0)==7){_i(20952,(f=i,i=i+16|0,c[f>>2]=g,c[f+8>>2]=h+4096,f)|0);i=f;i=b;return}else if((j|0)==9){_i(20800,(f=i,i=i+16|0,c[f>>2]=g,c[f+8>>2]=k+4096,f)|0);i=f;i=b;return}}}while(0);_i(20272,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;i=b;return}function ul(b,d){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,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;e=i;i=i+8216|0;f=e|0;g=e+4096|0;h=e+8200|0;j=e+8208|0;k=g|0;l=c[209560]|0;a:do{if((l|0)!=0){m=l;b:while(1){n=m+8|0;o=c[n>>2]|0;do{if((o|0)!=0){if((tn(o|0,b)|0)!=0){break}if((tn((c[n>>2]|0)+8192|0,d)|0)==0){break b}}}while(0);m=c[m>>2]|0;if((m|0)==0){break a}}p=4097;q=0;i=e;return}}while(0);rn(838312,d,4096);l=f|0;c[654338]=c[654338]^1;f=(d|0)==0;if(f){r=8}else{if((a[d]|0)==0){r=8}else{s=d}}if((r|0)==8){s=838312}xn(l,4096,37168,(m=i,i=i+16|0,c[m>>2]=s,c[m+8>>2]=2551536,m)|0)|0;i=m;s=0;n=l;c:while(1){o=a[n]|0;do{if((o<<24>>24|0)==47|(o<<24>>24|0)==92){if((s|0)==0){a[n]=47;t=1;break}else{_x(n|0,n+1|0,Wx(n|0)|0)|0;t=s;break}}else if((o<<24>>24|0)==0){break c}else{t=0}}while(0);s=t;n=n+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(m=i,i=i+16|0,c[m>>2]=b,c[m+8>>2]=l,m)|0)|0;i=m;rn(k,2617360+(c[654338]<<12)|0,4097);a[g+((Wx(k|0)|0)-1)|0]=0;g=ud(k|0,41952,0,h|0,0)|0;Gc(g|0,c[h>>2]|0,4,32);if((c[209566]|0)==0){n=ud(k|0,19720,0,j|0,0)|0;Gc(n|0,c[j>>2]|0,4,32);u=n}else{c[j>>2]=0;u=0}n=0;t=0;d:while(1){s=g+(t<<2)|0;o=n;e:while(1){v=(o|0)<(c[j>>2]|0);if((t|0)<(c[h>>2]|0)){if(!v){r=31;break}w=c[s>>2]|0;x=c[u+(o<<2)>>2]|0;y=x;z=w;while(1){A=a[z]|0;B=A<<24>>24;C=a[y]|0;D=C<<24>>24;E=(A-97&255)>>>0<26>>>0?B-32|0:B;B=(C-97&255)>>>0<26>>>0?D-32|0:D;if((E|0)==92|(E|0)==58){F=47}else{F=E}if((B|0)==92|(B|0)==58){G=47}else{G=B}if((F|0)<(G|0)){H=w;break e}if((F|0)>(G|0)|(F|0)==0){I=x;break}else{y=y+1|0;z=z+1|0}}}else{if(!v){break d}I=c[u+(o<<2)>>2]|0}z=u+(o<<2)|0;y=Wx(I|0)|0;do{if((y|0)>=7){if((tn(I+(y-7)|0,19264)|0)!=0){break}x=c[z>>2]|0;c[654338]=c[654338]^1;if(f){r=49}else{if((a[d]|0)==0){r=49}else{J=d}}if((r|0)==49){r=0;J=838312}xn(l,4096,37168,(m=i,i=i+16|0,c[m>>2]=J,c[m+8>>2]=x,m)|0)|0;i=m;x=0;w=l;f:while(1){B=a[w]|0;do{if((B<<24>>24|0)==47|(B<<24>>24|0)==92){if((x|0)==0){a[w]=47;K=1;break}else{_x(w|0,w+1|0,Wx(w|0)|0)|0;K=x;break}}else if((B<<24>>24|0)==0){break f}else{K=0}}while(0);x=K;w=w+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(m=i,i=i+16|0,c[m>>2]=b,c[m+8>>2]=l,m)|0)|0;i=m;w=2617360+(c[654338]<<12)|0;x=oj(12)|0;B=oj(12288)|0;E=x+8|0;c[E>>2]=B;rn(B,k,4096);rn((c[E>>2]|0)+4096|0,w,4096);rn((c[E>>2]|0)+8192|0,c[z>>2]|0,4096);c[x>>2]=c[209560];c[209560]=x}}while(0);o=o+1|0}if((r|0)==31){r=0;H=c[s>>2]|0}c[654338]=c[654338]^1;if(f){r=34}else{if((a[d]|0)==0){r=34}else{L=d}}if((r|0)==34){r=0;L=838312}xn(l,4096,37168,(m=i,i=i+16|0,c[m>>2]=L,c[m+8>>2]=H,m)|0)|0;i=m;z=0;y=l;g:while(1){v=a[y]|0;do{if((v<<24>>24|0)==47|(v<<24>>24|0)==92){if((z|0)==0){a[y]=47;M=1;break}else{_x(y|0,y+1|0,Wx(y|0)|0)|0;M=z;break}}else if((v<<24>>24|0)==0){break g}else{M=0}}while(0);z=M;y=y+1|0}xn(2617360+(c[654338]<<12)|0,4096,31752,(m=i,i=i+16|0,c[m>>2]=b,c[m+8>>2]=l,m)|0)|0;i=m;y=jl(2617360+(c[654338]<<12)|0,c[s>>2]|0)|0;if((y|0)!=0){rn(y|0,k,4096);rn(y+12288|0,d,4096);c[209564]=(c[209564]|0)+(c[y+16396>>2]|0);z=oj(12)|0;c[z+4>>2]=y;c[z>>2]=c[209560];c[209560]=z}n=o;t=t+1|0}pc(g|0);pc(u|0);u=oj(12)|0;g=oj(12288)|0;t=u+8|0;c[t>>2]=g;rn(g,b,4096);rn((c[t>>2]|0)+4096|0,k,4096);rn((c[t>>2]|0)+8192|0,d,4096);c[u>>2]=c[209560];c[209560]=u;p=4097;q=0;i=e;return}function vl(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;e=c[d>>2]|0;d=c[b>>2]|0;while(1){b=a[d]|0;f=b<<24>>24;g=a[e]|0;h=g<<24>>24;i=(b-97&255)>>>0<26>>>0?f-32|0:f;f=(g-97&255)>>>0<26>>>0?h-32|0:h;if((i|0)==92|(i|0)==58){j=47}else{j=i}if((f|0)==92|(f|0)==58){k=47}else{k=f}if((j|0)<(k|0)){l=-1;m=9;break}if((j|0)>(k|0)){l=1;m=9;break}if((j|0)==0){l=0;m=9;break}else{e=e+1|0;d=d+1|0}}if((m|0)==9){return l|0}return 0}function wl(a,b){a=a|0;b=b|0;var d=0;b=c[a>>2]|0;d=c[b>>2]|0;if((b|0)!=0){Gx(b)}Gx(a);c[469154]=(c[469154]|0)-1;ae[c[d+4>>2]&127](d,0);return}function xl(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;a=i;d=0;a:do{do{if((c[787052+(d*288|0)>>2]|0)!=0){if((c[209560]|0)==0){e=4;break a}f=787040+(d*288|0)|0;if((c[787064+(d*288|0)>>2]|0)==1){g=f;Vn(c[g>>2]|0)|0;if((c[787044+(d*288|0)>>2]|0)!=0){Un(c[g>>2]|0)|0}Zx(f|0,0,288)|0;break}else{g=c[f>>2]|0;if((g|0)!=0){Ta(g|0)|0}Zx(f|0,0,288)|0;break}}}while(0);d=d+1|0;}while((d|0)<64);if((e|0)==4){aj(0,57592,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}e=c[209560]|0;if((e|0)==0){c[209560]=0;Ri(17592);Ri(17304);Ri(17200);Ri(17112);Ri(16952);h=Xi(32,4)|0;j=h|0;k=c[j>>2]|0;l=k;c[l>>2]=b;Zc(h|0);i=a;return}else{m=e}while(1){e=c[m>>2]|0;d=c[m+4>>2]|0;if((d|0)!=0){Un(c[d+16384>>2]|0)|0;mj(c[d+16412>>2]|0);mj(d|0)}d=c[m+8>>2]|0;if((d|0)!=0){mj(d|0)}mj(m);if((e|0)==0){break}else{m=e}}c[209560]=0;Ri(17592);Ri(17304);Ri(17200);Ri(17112);Ri(16952);h=Xi(32,4)|0;j=h|0;k=c[j>>2]|0;l=k;c[l>>2]=b;Zc(h|0);i=a;return}function yl(){var b=0,d=0,e=0,f=0,g=0;b=i;a[2609160]=0;d=c[209560]|0;if((d|0)==0){i=b;return 2609160}else{e=d}do{d=c[e+4>>2]|0;if((d|0)!=0){f=Hn(16792,(g=i,i=i+8|0,c[g>>2]=c[d+16388>>2],g)|0)|0;i=g;vn(2609160,8192,f)}e=c[e>>2]|0;}while((e|0)!=0);i=b;return 2609160}function zl(){var b=0,d=0,e=0,f=0;a[2600968]=0;b=c[209560]|0;if((b|0)==0){return 2600968}else{d=b}do{b=d+4|0;e=c[b>>2]|0;if((e|0)!=0){if((a[2600968]|0)==0){f=e}else{vn(2600968,8192,16680);f=c[b>>2]|0}vn(2600968,8192,f+8192|0)}d=c[d>>2]|0;}while((d|0)!=0);return 2600968}function Al(){var b=0,d=0,e=0,f=0,g=0;b=i;a[2592776]=0;d=c[209560]|0;if((d|0)==0){i=b;return 2592776}else{e=d}do{d=c[e+4>>2]|0;if((d|0)!=0){f=Hn(16792,(g=i,i=i+8|0,c[g>>2]=c[d+16392>>2],g)|0)|0;i=g;vn(2592776,8192,f)}e=c[e>>2]|0;}while((e|0)!=0);i=b;return 2592776}function Bl(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;a[2584584]=0;d=c[209560]|0;if((d|0)==0){i=b;return 2584584}else{e=d}do{d=e+4|0;f=c[d>>2]|0;do{if((f|0)!=0){if((c[f+16400>>2]|0)==0){g=c[(c[430924]|0)+4>>2]|0;if((Cn(f+12288|0,g,Wx(g|0)|0)|0)==0){break}h=c[d>>2]|0}else{h=f}g=Hn(16792,(j=i,i=i+8|0,c[j>>2]=c[h+16388>>2],j)|0)|0;i=j;vn(2584584,8192,g)}}while(0);e=c[e>>2]|0;}while((e|0)!=0);i=b;return 2584584}function Cl(){var b=0,d=0,e=0,f=0;a[2576392]=0;b=c[209560]|0;if((b|0)==0){return 2576392}else{d=b}do{b=d+4|0;e=c[b>>2]|0;do{if((e|0)!=0){if((c[e+16400>>2]|0)==0){f=c[(c[430924]|0)+4>>2]|0;if((Cn(e+12288|0,f,Wx(f|0)|0)|0)==0){break}}if((a[2576392]|0)!=0){vn(2576392,8192,16680)}vn(2576392,8192,(c[b>>2]|0)+12288|0);vn(2576392,8192,19720);vn(2576392,8192,(c[b>>2]|0)+8192|0)}}while(0);d=c[d>>2]|0;}while((d|0)!=0);return 2576392}function Dl(a){a=a|0;var b=0,d=0,e=0;b=c[209560]|0;if((b|0)==0){return}d=(a|0)!=0?~a:0;a=b;do{b=c[a+4>>2]|0;if((b|0)!=0){e=b+16400|0;c[e>>2]=c[e>>2]&d}a=c[a>>2]|0;}while((a|0)!=0);return}function El(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;Mi(b);b=xi()|0;f=(b|0)>4096?4096:b;c[209566]=f;b=(f|0)>0;if(b){g=0;do{c[805472+(g<<2)>>2]=Vc(yi(g)|0)|0;g=g+1|0;}while((g|0)<(f|0));h=c[209566]|0}else{h=f}if((h|0)!=0){$i(16544,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if(b){b=0;do{h=821856+(b<<2)|0;g=c[h>>2]|0;if((g|0)!=0){mj(g)}c[h>>2]=0;b=b+1|0;}while((b|0)<(f|0))}if((d|0)==0){i=e;return}if((a[d]|0)==0){i=e;return}Mi(d);d=xi()|0;f=(d|0)>4096?4096:d;if((f|0)>0){j=0}else{i=e;return}do{c[821856+(j<<2)>>2]=qj(yi(j)|0)|0;j=j+1|0;}while((j|0)<(f|0));i=e;return}function Fl(a,b){a=a|0;b=b|0;var d=0,e=0;b=i;d=c[a>>2]|0;e=c[d>>2]|0;if((d|0)!=0){Gx(d)}Gx(a);c[469154]=(c[469154]|0)-1;if((gl(60936,0,0,0)|0)<1){aj(0,60816,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a}else{rn(777472,c[(c[210610]|0)+4>>2]|0,4096);rn(773376,c[(c[209576]|0)+4>>2]|0,4096);ae[c[e+4>>2]&127](e,0);i=b;return}}function Gl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;fj(60336);fj(59992);fj(59872);d=fk(59872)|0;e=c[(c[430924]|0)+4>>2]|0;f=d;while(1){d=a[f]|0;g=d<<24>>24;h=a[e]|0;i=h<<24>>24;j=(d-97&255)>>>0<26>>>0?g-32|0:g;g=(h-97&255)>>>0<26>>>0?i-32|0:i;if((j|0)==92|(j|0)==58){k=47}else{k=j}if((g|0)==92|(g|0)==58){l=47}else{l=g}if((k|0)!=(l|0)){break}if((k|0)==0){m=8;break}else{e=e+1|0;f=f+1|0}}if((m|0)==8){nk(59872,2551536)}m=Xi(44,4)|0;c[c[m>>2]>>2]=b;Hl(c[(c[430924]|0)+4>>2]|0,m);return}function Hl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;_i(59472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;c[209564]=0;c[210602]=jk(59392,59312,0)|0;c[210608]=jk(59272,58776,20)|0;c[209568]=jk(58512,2551536,68)|0;c[210604]=jk(58416,2551536,64)|0;c[210610]=jk(60336,_w()|0,8208)|0;c[210612]=jk(58360,2551536,16)|0;f=Jc()|0;if((f|0)==0){g=3}else{if((a[f]|0)==0){g=3}else{h=f}}if((g|0)==3){h=c[(c[210610]|0)+4>>2]|0}c[209574]=jk(59992,h,8208)|0;c[209576]=jk(59872,2551536,24)|0;h=Xi(28,4100)|0;g=c[h>>2]|0;rn(g,b,4096);c[g+4096>>2]=d;Td(h|0);i=e;return}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=Xi(16,8)|0;e=c[d>>2]|0;c[e>>2]=a;c[e+4>>2]=b;xl(0,d);return}function Jl(a,b){a=a|0;b=b|0;var d=0;c[210606]=c[c[a>>2]>>2];b=c[209560]|0;if((b|0)!=0){d=b;do{b=c[d+4>>2]|0;if((b|0)!=0){c[b+16400>>2]=0}d=c[d>>2]|0;}while((d|0)!=0)}c[a+4>>2]=54;Hl(c[(c[430924]|0)+4>>2]|0,a);return}function Kl(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,v=0,w=0,x=0,y=0;e=i;a:do{if((d|0)==1){f=Vk(a)|0;c[b>>2]=f;g=((f|0)==0)<<31>>31;h=0;j=f;k=18}else if((d|0)==2){l=0;k=14}else if((d|0)==3){l=1;k=14}else if((d|0)==0){f=c[209560]|0;if((f|0)==0){aj(0,57592,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}n=(b|0)==0;if(n){o=f;do{p=Zk(a,o,0,1,0)|0;if((p|0)>0){q=0;r=p;k=16;break a}o=c[o>>2]|0;}while((o|0)!=0)}else{o=f;do{p=Zk(a,o,b,1,0)|0;if((p|0)>-1){s=c[b>>2]|0;if((s|0)!=0){t=s;u=0;v=p;k=19;break a}}o=c[o>>2]|0;}while((o|0)!=0)}if(n){w=0;i=e;return w|0}else{c[b>>2]=0;x=0;y=-1;break}}else{aj(0,59800,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}}while(0);if((k|0)==14){m=Wk(a)|0;c[b>>2]=m;q=l;r=((m|0)==0)<<31>>31;k=16}do{if((k|0)==16){if((b|0)==0){w=r;i=e;return w|0}else{g=r;h=q;j=c[b>>2]|0;k=18;break}}}while(0);if((k|0)==18){if((j|0)==0){x=h;y=g}else{t=j;u=h;v=g;k=19}}do{if((k|0)==19){c[787052+(t*288|0)>>2]=v;c[787068+((c[b>>2]|0)*288|0)>>2]=0;if((d|0)!=0){x=u;y=v;break}c[787068+((c[b>>2]|0)*288|0)>>2]=1;x=u;y=v}}while(0);c[787048+((c[b>>2]|0)*288|0)>>2]=x;w=y;i=e;return w|0}function Ll(b,d,e,f,g){b=b|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;h=i;i=i+1032|0;j=h|0;k=h+8|0;l=kl(b,d,0,j,g)|0;g=c[j>>2]|0;ol(l,g);if((g|0)>0){if((e|0)==0){e=0;do{g=l+(e<<2)|0;d=c[g>>2]|0;while(1){b=a[d]|0;if((b<<24>>24|0)==92|(b<<24>>24|0)==58){a[d]=47}else if((b<<24>>24|0)==0){break}d=d+1|0}rn(k,c[g>>2]|0,1024);je[f&127](k);e=e+1|0;}while((e|0)<(c[j>>2]|0))}else{e=0;do{d=l+(e<<2)|0;b=c[d>>2]|0;while(1){m=a[b]|0;if((m<<24>>24|0)==0){break}else if((m<<24>>24|0)==92|(m<<24>>24|0)==58){a[b]=47}b=b+1|0}rn(k,c[d>>2]|0,1024);qn(k,k,1024);je[f&127](k);e=e+1|0;}while((e|0)<(c[j>>2]|0))}}if((c[209560]|0)==0){aj(0,57592,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}if((l|0)==0){n=1024;o=0;i=h;return}j=c[l>>2]|0;if((j|0)!=0){e=0;k=j;do{mj(k);e=e+1|0;k=c[l+(e<<2)>>2]|0;}while((k|0)!=0)}mj(l);n=1024;o=0;i=h;return}function Ml(){var b=0,d=0;b=c[(c[209576]|0)+4>>2]|0;if((a[b]|0)!=0){d=b;return d|0}d=c[(c[430924]|0)+4>>2]|0;return d|0}function Nl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;d=i;e=c[b>>2]|0;f=c[e+4>>2]|0;if((e|0)!=0){Gx(e)}Gx(b);c[469154]=(c[469154]|0)-1;if((gl(60936,0,0,0)|0)<1){if((a[777472]|0)==0){aj(0,60816,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}El(2551536,2551536);nk(60336,777472);nk(59872,773376);a[777472]=0;a[773376]=0;c[b+4>>2]=60;e=c[210606]|0;g=Xi(16,8)|0;h=c[g>>2]|0;c[h>>2]=e;c[h+4>>2]=b;xl(0,g);i=d;return}do{if((tn(c[(c[209576]|0)+4>>2]|0,773376)|0)!=0){if((ej()|0)!=0){break}Ai(59640)}}while(0);rn(777472,c[(c[210610]|0)+4>>2]|0,4096);rn(773376,c[(c[209576]|0)+4>>2]|0,4096);ae[c[f+4>>2]&127](f,0);i=d;return}function Ol(a,b){a=a|0;b=b|0;b=c[a>>2]|0;if((b|0)!=0){Gx(b)}Gx(a);c[469154]=(c[469154]|0)-1;aj(1,59536,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a}function Pl(b,d){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,v=0,w=0,x=0;d=i;i=i+4096|0;e=d|0;f=b|0;g=c[f>>2]|0;rn(e,g,4096);h=c[g+4096>>2]|0;g=c[f>>2]|0;if((g|0)!=0){Gx(g)}Gx(b);c[469154]=(c[469154]|0)-1;b=c[(c[210610]|0)+4>>2]|0;if((a[b]|0)!=0){ul(b,e)}b=c[(c[209574]|0)+4>>2]|0;do{if((a[b]|0)!=0){if((tn(b,c[(c[210610]|0)+4>>2]|0)|0)==0){break}Qk(c[(c[209574]|0)+4>>2]|0)|0;ul(c[(c[209574]|0)+4>>2]|0,e)}}while(0);b=c[(c[210612]|0)+4>>2]|0;do{if((a[b]|0)!=0){if((tn(b,e)|0)==0){break}g=c[(c[210610]|0)+4>>2]|0;if((a[g]|0)!=0){ul(g,c[(c[210612]|0)+4>>2]|0)}g=c[(c[209574]|0)+4>>2]|0;if((a[g]|0)==0){break}if((tn(g,c[(c[210610]|0)+4>>2]|0)|0)==0){break}ul(c[(c[209574]|0)+4>>2]|0,c[(c[210612]|0)+4>>2]|0)}}while(0);b=c[(c[209576]|0)+4>>2]|0;do{if((a[b]|0)!=0){if((tn(b,e)|0)==0){break}g=c[(c[210610]|0)+4>>2]|0;if((a[g]|0)!=0){ul(g,c[(c[209576]|0)+4>>2]|0)}g=c[(c[209574]|0)+4>>2]|0;if((a[g]|0)==0){break}if((tn(g,c[(c[210610]|0)+4>>2]|0)|0)==0){break}ul(c[(c[209574]|0)+4>>2]|0,c[(c[209576]|0)+4>>2]|0)}}while(0);Pi(17592,110);Pi(17304,102);Pi(17200,38);Pi(17112,10);Pi(16952,94);a[3792]=0;e=c[209566]|0;if((e|0)>0){j=0;k=838240}else{ql();l=c[209576]|0;m=l+20|0;c[m>>2]=0;_i(58248,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;o=c[209564]|0;_i(58032,(n=i,i=i+8|0,c[n>>2]=o,n)|0);i=n;p=h+4|0;q=c[p>>2]|0;r=q;ae[r&127](h,0);s=4096;t=0;i=d;return}while(1){b=c[k>>2]|0;a:do{if((b|0)==0){u=k}else{g=805472+(j<<2)|0;f=k;v=b;while(1){w=c[v+4>>2]|0;if((w|0)!=0){if((c[g>>2]|0)==(c[w+16388>>2]|0)){break}}w=v|0;x=c[w>>2]|0;if((x|0)==0){u=k;break a}else{f=w;v=x}}a[3792]=1;g=v|0;c[f>>2]=c[g>>2];c[g>>2]=c[k>>2];c[k>>2]=v;u=g}}while(0);b=j+1|0;if((b|0)<(e|0)){j=b;k=u}else{break}}ql();l=c[209576]|0;m=l+20|0;c[m>>2]=0;_i(58248,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;o=c[209564]|0;_i(58032,(n=i,i=i+8|0,c[n>>2]=o,n)|0);i=n;p=h+4|0;q=c[p>>2]|0;r=q;ae[r&127](h,0);s=4096;t=0;i=d;return}function Ql(a,b){a=a|0;b=b|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;e=i;i=i+88|0;f=e|0;g=e+64|0;h=g|0;c[h>>2]=1732584193;j=g+4|0;c[j>>2]=-271733879;k=g+8|0;c[k>>2]=-1732584194;l=g+12|0;c[l>>2]=271733878;c[g+16>>2]=0;c[179600]=g;do{if((b|0)==0){Rl(a,0);m=a;n=0}else{if((b|0)<=63){m=a;n=b;break}o=f|0;p=b-64|0;q=a;r=b;while(1){s=0;do{t=s<<2;c[f+(s<<2)>>2]=(d[q+(t|2)|0]|0)<<16|(d[q+(t|3)|0]|0)<<24|(d[q+(t|1)|0]|0)<<8|(d[q+t|0]|0);s=s+1|0;}while((s|0)<16);Sl(o);s=r-64|0;t=(c[179600]|0)+16|0;c[t>>2]=(c[t>>2]|0)+64;if((s|0)>63){q=q+64|0;r=s}else{break}}r=p&-64;m=a+(r+64)|0;n=p-r|0}}while(0);Rl(m,n);c[179600]=g;i=e;return c[j>>2]^c[h>>2]^c[k>>2]^c[l>>2]|0}function Rl(b,e){b=b|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;f=i;i=i+192|0;g=f|0;h=f+128|0;j=g|0;k=(c[179600]|0)+16|0;l=(c[k>>2]|0)+e|0;c[k>>2]=l;k=l<<3;Zx(j|0,0,128)|0;do{if((e|0)==0){a[j]=-128}else{Vx(j|0,b|0,e)|0;a[g+e|0]=-128;if((e|0)<56){break}a[g+120|0]=k;a[g+121|0]=l>>>5;a[g+122|0]=l>>>13;a[g+123|0]=l>>>21;m=0;do{n=m<<2;c[h+(m<<2)>>2]=(d[g+(n|2)|0]|0)<<16|(d[g+(n|3)|0]|0)<<24|(d[g+(n|1)|0]|0)<<8|(d[g+n|0]|0);m=m+1|0;}while((m|0)<16);m=h|0;Sl(m);n=0;do{o=n<<2;c[h+(n<<2)>>2]=(d[g+((o|2)+64)|0]|0)<<16|(d[g+((o|3)+64)|0]|0)<<24|(d[g+((o|1)+64)|0]|0)<<8|(d[g+(o+64)|0]|0);n=n+1|0;}while((n|0)<16);Sl(m);p=64;q=0;r=128;s=0;i=f;return}}while(0);a[g+56|0]=k;a[g+57|0]=l>>>5;a[g+58|0]=l>>>13;a[g+59|0]=l>>>21;l=0;do{k=l<<2;c[h+(l<<2)>>2]=(d[g+(k|2)|0]|0)<<16|(d[g+(k|3)|0]|0)<<24|(d[g+(k|1)|0]|0)<<8|(d[g+k|0]|0);l=l+1|0;}while((l|0)<16);Sl(h|0);p=64;q=0;r=128;s=0;i=f;return}function Sl(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,x=0,y=0,z=0,A=0,B=0,C=0,D=0;b=i;d=i;i=i+64|0;Vx(d|0,a|0,64)|0;a=c[179600]|0;e=c[a>>2]|0;f=c[a+4>>2]|0;g=c[a+8>>2]|0;h=c[a+12>>2]|0;a=c[d>>2]|0;j=a+e+(h&~f|g&f)|0;k=j<<3|j>>>29;j=c[d+4>>2]|0;l=j+h+(k&f|g&~k)|0;m=l<<7|l>>>25;l=c[d+8>>2]|0;n=l+g+(m&k|f&~m)|0;o=n<<11|n>>>21;n=c[d+12>>2]|0;p=n+f+(o&m|k&~o)|0;q=p<<19|p>>>13;p=c[d+16>>2]|0;r=p+k+(q&o|m&~q)|0;k=r<<3|r>>>29;r=c[d+20>>2]|0;s=m+r+(k&q|o&~k)|0;m=s<<7|s>>>25;s=c[d+24>>2]|0;t=o+s+(m&k|q&~m)|0;o=t<<11|t>>>21;t=c[d+28>>2]|0;u=q+t+(o&m|k&~o)|0;q=u<<19|u>>>13;u=c[d+32>>2]|0;v=k+u+(q&o|m&~q)|0;k=v<<3|v>>>29;v=c[d+36>>2]|0;w=m+v+(k&q|o&~k)|0;m=w<<7|w>>>25;w=c[d+40>>2]|0;x=o+w+(m&k|q&~m)|0;o=x<<11|x>>>21;x=c[d+44>>2]|0;y=q+x+(o&m|k&~o)|0;q=y<<19|y>>>13;y=c[d+48>>2]|0;z=k+y+(q&o|m&~q)|0;k=z<<3|z>>>29;z=c[d+52>>2]|0;A=m+z+(k&q|o&~k)|0;m=A<<7|A>>>25;A=c[d+56>>2]|0;B=o+A+(m&k|q&~m)|0;o=B<<11|B>>>21;B=o&m;C=c[d+60>>2]|0;d=q+C+(B|k&~o)|0;q=d<<19|d>>>13;d=q&o;D=a+1518500249+k+(q&m|B|d)|0;B=D<<3|D>>>29;D=B&q;k=p+1518500249+m+(B&o|d|D)|0;d=k<<5|k>>>27;k=d&B;m=u+1518500249+o+(d&q|D|k)|0;D=m<<9|m>>>23;m=D&d;o=y+1518500249+q+(D&B|k|m)|0;k=o<<13|o>>>19;o=k&D;q=j+1518500249+B+(k&d|m|o)|0;m=q<<3|q>>>29;q=m&k;B=r+1518500249+d+(m&D|o|q)|0;o=B<<5|B>>>27;B=o&m;d=v+1518500249+D+(o&k|q|B)|0;q=d<<9|d>>>23;d=q&o;D=z+1518500249+k+(q&m|B|d)|0;B=D<<13|D>>>19;D=B&q;k=l+1518500249+m+(B&o|d|D)|0;d=k<<3|k>>>29;k=d&B;m=s+1518500249+o+(d&q|D|k)|0;D=m<<5|m>>>27;m=D&d;o=w+1518500249+q+(D&B|k|m)|0;k=o<<9|o>>>23;o=k&D;q=A+1518500249+B+(k&d|m|o)|0;m=q<<13|q>>>19;q=m&k;B=n+1518500249+d+(m&D|o|q)|0;o=B<<3|B>>>29;B=o&m;d=t+1518500249+D+(o&k|q|B)|0;q=d<<5|d>>>27;d=q&o;D=x+1518500249+k+(q&m|B|d)|0;B=D<<9|D>>>23;D=C+1518500249+m+(B&(q|o)|d)|0;d=D<<13|D>>>19;D=a+1859775393+o+(B^q^d)|0;o=D<<3|D>>>29;D=u+1859775393+q+(d^B^o)|0;q=D<<9|D>>>23;D=p+1859775393+B+(o^d^q)|0;B=D<<11|D>>>21;D=y+1859775393+d+(q^o^B)|0;d=D<<15|D>>>17;D=l+1859775393+o+(B^q^d)|0;o=D<<3|D>>>29;D=w+1859775393+q+(d^B^o)|0;q=D<<9|D>>>23;D=s+1859775393+B+(o^d^q)|0;B=D<<11|D>>>21;D=A+1859775393+d+(q^o^B)|0;d=D<<15|D>>>17;D=j+1859775393+o+(B^q^d)|0;o=D<<3|D>>>29;D=v+1859775393+q+(d^B^o)|0;q=D<<9|D>>>23;D=r+1859775393+B+(o^d^q)|0;B=D<<11|D>>>21;D=z+1859775393+d+(q^o^B)|0;d=D<<15|D>>>17;D=n+1859775393+o+(B^q^d)|0;o=D<<3|D>>>29;D=x+1859775393+q+(d^B^o)|0;q=D<<9|D>>>23;D=t+1859775393+B+(o^d^q)|0;B=D<<11|D>>>21;D=C+1859775393+d+(q^o^B)|0;d=c[179600]|0;c[d>>2]=o+e;c[d+4>>2]=(D<<15|D>>>17)+f;c[d+8>>2]=B+g;c[d+12>>2]=q+h;i=b;return}function Tl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(!(a[3072]|0)){a[3072]=1;cn(659904);f=0;do{g=2048+(f<<2)|0;if((c[g>>2]|0)>0){h=f&255;i=0;do{Ym(659904,h);Ym(688604,h);i=i+1|0;}while((i|0)<(c[g>>2]|0))}f=f+1|0;}while((f|0)<256)}Zx(b|0,0,32)|0;c[b+12>>2]=d;c[b+16>>2]=e;return}function Ul(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(!(a[3072]|0)){a[3072]=1;cn(659904);f=0;do{g=2048+(f<<2)|0;if((c[g>>2]|0)>0){h=f&255;i=0;do{Ym(659904,h);Ym(688604,h);i=i+1|0;}while((i|0)<(c[g>>2]|0))}f=f+1|0;}while((f|0)<256)}Zx(b|0,0,32)|0;c[b+12>>2]=d;c[b+16>>2]=e;c[b+8>>2]=1;return}function Vl(a){a=a|0;c[a+20>>2]=0;c[a+4>>2]=0;c[a+28>>2]=0;return}function Wl(a){a=a|0;c[a+8>>2]=0;return}function Xl(a){a=a|0;c[a+24>>2]=0;c[a+28>>2]=0;c[a+8>>2]=1;return}function Yl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=e+20|0;if((c[g>>2]|0)>(d|0)){aj(1,57872,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}else{Vx(a|0,e|0,32)|0;c[a+12>>2]=b;Vx(b|0,c[e+12>>2]|0,c[g>>2]|0)|0;i=f;return}}function Zl(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;f=i;c[164920]=(c[164920]|0)+e;g=b+20|0;if(((c[b+16>>2]|0)-(c[g>>2]|0)|0)<4){c[b+4>>2]=1;i=f;return}if((e|0)==0|(e|0)<-31|(e|0)>32){aj(1,59e3,(h=i,i=i+8|0,c[h>>2]=e,h)|0);i=h}do{if((e|0)!=32){if((e|0)>0){if(!((1<<e|0)<=(d|0)|(d|0)<0)){break}c[164908]=(c[164908]|0)+1;break}else{j=1<<e-1;if(!((j|0)<=(d|0)|(d|0)<(-j|0))){break}c[164908]=(c[164908]|0)+1;break}}}while(0);j=(e|0)<0?-e|0:e;if((c[b+8>>2]|0)!=0){if((j|0)==8){a[(c[b+12>>2]|0)+(c[g>>2]|0)|0]=d;c[g>>2]=(c[g>>2]|0)+1;e=b+28|0;c[e>>2]=(c[e>>2]|0)+8;i=f;return}else if((j|0)==32){e=(c[b+12>>2]|0)+(c[g>>2]|0)|0;z=d;a[e]=z;z=z>>8;a[e+1|0]=z;z=z>>8;a[e+2|0]=z;z=z>>8;a[e+3|0]=z;c[g>>2]=(c[g>>2]|0)+4;e=b+28|0;c[e>>2]=(c[e>>2]|0)+32;i=f;return}else if((j|0)==16){e=(c[b+12>>2]|0)+(c[g>>2]|0)|0;z=d&65535;a[e]=z;z=z>>8;a[e+1|0]=z;c[g>>2]=(c[g>>2]|0)+2;e=b+28|0;c[e>>2]=(c[e>>2]|0)+16;i=f;return}else{aj(1,48440,(h=i,i=i+8|0,c[h>>2]=j,h)|0);i=h}}h=-1>>>((32-j|0)>>>0)&d;d=j&7;if((d|0)==0){k=h;l=j}else{e=b+12|0;m=b+28|0;n=0;o=h;do{Wm(o&1,c[e>>2]|0,m);o=o>>1;n=n+1|0;}while((n|0)<(d|0));k=o;l=j-d|0}if((l|0)>0){d=b+12|0;j=b+28|0;o=0;n=k;while(1){an(659904,n&255,c[d>>2]|0,j);k=o+8|0;if((k|0)<(l|0)){o=k;n=n>>8}else{break}}}c[g>>2]=(c[b+28>>2]>>3)+1;i=f;return}function _l(a,b){a=a|0;b=b|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;e=i;i=i+8|0;f=e|0;g=(b|0)<0?-b|0:b;do{if((c[a+8>>2]|0)==0){h=g&7;if((h|0)==0){j=g;k=0;l=0}else{m=a+12|0;n=a+28|0;o=0;p=0;do{o=(Xm(c[m>>2]|0,n)|0)<<p|o;p=p+1|0;}while((p|0)<(h|0));j=g-h|0;k=h;l=o}if((j|0)>0){p=a+12|0;n=a+28|0;m=l;q=0;while(1){_m(c[172153]|0,f,c[p>>2]|0,n);r=c[f>>2]<<(q|k)|m;s=q+8|0;if((s|0)<(j|0)){m=r;q=s}else{t=r;break}}}else{t=l}c[a+24>>2]=(c[a+28>>2]>>3)+1;u=j;v=t}else{if((g|0)==8){q=a+24|0;m=c[q>>2]|0;n=d[(c[a+12>>2]|0)+m|0]|0;c[q>>2]=m+1;m=a+28|0;c[m>>2]=(c[m>>2]|0)+8;u=8;v=n;break}else if((g|0)==16){n=a+24|0;m=c[n>>2]|0;q=(c[a+12>>2]|0)+m|0;p=(d[q]|d[q+1|0]<<8)<<16>>16<<16>>16;c[n>>2]=m+2;m=a+28|0;c[m>>2]=(c[m>>2]|0)+16;u=16;v=p;break}else if((g|0)==32){p=a+24|0;m=c[p>>2]|0;n=(c[a+12>>2]|0)+m|0;q=d[n]|d[n+1|0]<<8|d[n+2|0]<<16|d[n+3|0]<<24|0;c[p>>2]=m+4;m=a+28|0;c[m>>2]=(c[m>>2]|0)+32;u=32;v=q;break}else{aj(1,41312,(q=i,i=i+8|0,c[q>>2]=g,q)|0);i=q;return 0}}}while(0);if((b|0)>-1){w=v;i=e;return w|0}if((1<<u-1&v|0)==0){w=v;i=e;return w|0}w=-1<<u|v;i=e;return w|0}function $l(a,b){a=a|0;b=b|0;Zl(a,b,8);return}function am(a,b,c){a=a|0;b=b|0;c=c|0;var e=0;if((c|0)>0){e=0}else{return}do{Zl(a,d[b+e|0]|0,8);e=e+1|0;}while((e|0)<(c|0));return}function bm(a,b){a=a|0;b=b|0;Zl(a,b,16);return}function cm(a,b){a=a|0;b=b|0;Zl(a,b,32);return}function dm(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+1024|0;g=f|0;if((e|0)==0){Zl(b,0,8);i=f;return}h=Wx(e|0)|0;if((h|0)>1023){_i(31224,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;Zl(b,0,8);i=f;return}rn(g|0,e,1024);if((h|0)>0){e=0;do{j=g+e|0;k=a[j]|0;if(k<<24>>24<0|k<<24>>24==37){a[j]=46}e=e+1|0;}while((e|0)<(h|0))}if((h|0)>-1){l=0}else{i=f;return}while(1){Zl(b,d[g+l|0]|0,8);if((l|0)<(h|0)){l=l+1|0}else{break}}i=f;return}function em(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+8192|0;g=f|0;if((e|0)==0){Zl(b,0,8);i=f;return}h=Wx(e|0)|0;if((h|0)>8191){_i(26944,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;Zl(b,0,8);i=f;return}rn(g|0,e,8192);if((h|0)>0){e=0;do{j=g+e|0;k=a[j]|0;if(k<<24>>24<0|k<<24>>24==37){a[j]=46}e=e+1|0;}while((e|0)<(h|0))}if((h|0)>-1){l=0}else{i=f;return}while(1){Zl(b,d[g+l|0]|0,8);if((l|0)<(h|0)){l=l+1|0}else{break}}i=f;return}function fm(a){a=a|0;var b=0;b=(_l(a,8)|0)&255;return((c[a+24>>2]|0)>(c[a+20>>2]|0)?-1:b)|0}function gm(a){a=a|0;var b=0;b=(_l(a,16)|0)<<16>>16;return((c[a+24>>2]|0)>(c[a+20>>2]|0)?-1:b)|0}function hm(a){a=a|0;var b=0;b=_l(a,32)|0;return((c[a+24>>2]|0)>(c[a+20>>2]|0)?-1:b)|0}function im(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=b+24|0;e=b+20|0;f=0;while(1){g=(_l(b,8)|0)&255;h=(c[d>>2]|0)>(c[e>>2]|0)?-1:g;if((h|0)==(-1|0)|(h|0)==0){i=f;j=5;break}else if((h|0)==37){k=46}else{k=h}a[2557952+f|0]=(k|0)>127?46:k&255;h=f+1|0;if(h>>>0<1023>>>0){f=h}else{i=h;j=5;break}}if((j|0)==5){a[2557952+i|0]=0;return 2557952}return 0}function jm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=b+24|0;e=b+20|0;f=0;while(1){g=(_l(b,8)|0)&255;h=(c[d>>2]|0)>(c[e>>2]|0)?-1:g;if((h|0)==37){i=46}else if((h|0)==(-1|0)|(h|0)==10|(h|0)==0){j=f;k=5;break}else{i=h}a[2558976+f|0]=(i|0)>127?46:i&255;h=f+1|0;if(h>>>0<1023>>>0){f=h}else{j=h;k=5;break}}if((k|0)==5){a[2558976+j|0]=0;return 2558976}return 0}function km(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;a:do{if((c|0)>0){d=0;e=0;while(1){f=a[b+e|0]|0;g=f<<24>>24;if(f<<24>>24==0){h=d;break a}if((g&128|0)!=0|f<<24>>24==37){i=(e*46|0)+5474|0}else{i=da(g,e+119|0)|0}g=i+d|0;f=e+1|0;if((f|0)<(c|0)){d=g;e=f}else{h=g;break}}}else{h=0}}while(0);return h>>10^h^h>>20|0}function lm(b,d,e,f){b=b|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;if((_l(b,1)|0)==0){c[f>>2]=_l(b,32)|0}else{g=c[e>>2]|0;c[f>>2]=(_l(b,8)|0)+g}if((_l(b,1)|0)==0){c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];a[f+21|0]=a[e+21|0]|0;a[f+22|0]=a[e+22|0]|0;a[f+23|0]=a[e+23|0]|0;c[f+16>>2]=c[e+16>>2];a[f+20|0]=a[e+20|0]|0;return}g=c[f>>2]^d;d=c[e+4>>2]|0;if((_l(b,1)|0)==0){h=d}else{d=_l(b,16)|0;h=c[785]&g^d}c[f+4>>2]=h;h=c[e+8>>2]|0;if((_l(b,1)|0)==0){i=h}else{h=_l(b,16)|0;i=c[785]&g^h}c[f+8>>2]=i;i=c[e+12>>2]|0;if((_l(b,1)|0)==0){j=i}else{i=_l(b,16)|0;j=c[785]&g^i}c[f+12>>2]=j;j=a[e+21|0]|0;if((_l(b,1)|0)==0){k=j}else{j=_l(b,8)|0;k=(c[777]&g^j)&255}a[f+21|0]=k<<24>>24==-128?-127:k;k=a[e+22|0]|0;if((_l(b,1)|0)==0){l=k}else{k=_l(b,8)|0;l=(c[777]&g^k)&255}a[f+22|0]=l<<24>>24==-128?-127:l;l=a[e+23|0]|0;if((_l(b,1)|0)==0){m=l}else{l=_l(b,8)|0;m=(c[777]&g^l)&255}a[f+23|0]=m<<24>>24==-128?-127:m;m=c[e+16>>2]|0;if((_l(b,1)|0)==0){n=m}else{m=_l(b,16)|0;n=c[785]&g^m}c[f+16>>2]=n;n=a[e+20|0]|0;if((_l(b,1)|0)==0){o=n}else{n=_l(b,8)|0;o=(c[777]&g^n)&255}a[f+20|0]=o;return}function mm(){var a=0,b=0,d=0,e=0;a=i;b=0;do{d=c[658600+(b<<2)>>2]|0;if((d|0)!=0){_i(23344,(e=i,i=i+16|0,c[e>>2]=b,c[e+8>>2]=d,e)|0);i=e}b=b+1|0;}while((b|0)<256);i=a;return}function nm(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.0;f=i;if((d|0)==0){if((b|0)==0){i=f;return}Zl(a,c[b>>2]|0,10);Zl(a,1,1);i=f;return}h=c[d>>2]|0;if(h>>>0>1023>>>0){aj(0,27896,(j=i,i=i+8|0,c[j>>2]=h,j)|0);i=j}j=b;b=d;d=5984;k=0;l=0;while(1){m=c[d+4>>2]|0;n=l+1|0;o=(c[j+m>>2]|0)==(c[b+m>>2]|0)?k:n;if((n|0)<51){d=d+12|0;k=o;l=n}else{break}}if((o|0)==0){if((e|0)==0){i=f;return}Zl(a,h,10);Zl(a,0,1);Zl(a,0,1);i=f;return}Zl(a,h,10);Zl(a,0,1);Zl(a,1,1);Zl(a,o,8);c[164920]=(c[164920]|0)+51;if((o|0)>0){p=5984;q=0}else{i=f;return}while(1){h=c[p+4>>2]|0;e=b+h|0;l=e;a:do{if((c[j+h>>2]|0)==(c[l>>2]|0)){Zl(a,0,1)}else{Zl(a,1,1);k=p+8|0;if((c[k>>2]|0)!=0){if((c[l>>2]|0)==0){Zl(a,0,1);break}else{Zl(a,1,1);Zl(a,c[l>>2]|0,c[k>>2]|0);break}}r=+g[e>>2];k=~~r;if(r==0.0){Zl(a,0,1);c[164920]=(c[164920]|0)+13;break}Zl(a,1,1);do{if(+(k|0)==r){d=k+4096|0;if(!(d>>>0<8192>>>0)){break}Zl(a,0,1);Zl(a,d,13);break a}}while(0);Zl(a,1,1);Zl(a,c[l>>2]|0,32)}}while(0);l=q+1|0;if((l|0)<(o|0)){p=p+12|0;q=l}else{break}}i=f;return}function om(a,b,d){a=a|0;b=b|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.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;e=i;i=i+472|0;f=e|0;if((b|0)==0){Zx(f|0,0,468)|0;h=f}else{h=b}b=h;f=d;j=1208;k=0;l=0;while(1){m=c[j+4>>2]|0;n=k+1|0;o=(c[b+m>>2]|0)==(c[f+m>>2]|0)?l:n;if((n|0)<48){j=j+12|0;k=n;l=o}else{break}}Zl(a,o,8);c[164920]=48-o+(c[164920]|0);if((o|0)>0){l=1208;k=0;while(1){j=c[l+4>>2]|0;n=f+j|0;m=n;a:do{if((c[b+j>>2]|0)==(c[m>>2]|0)){Zl(a,0,1)}else{Zl(a,1,1);p=c[l+8>>2]|0;if((p|0)!=0){Zl(a,c[m>>2]|0,p);break}q=+g[n>>2];p=~~q;do{if(+(p|0)==q){r=p+4096|0;if(!(r>>>0<8192>>>0)){break}Zl(a,0,1);Zl(a,r,13);break a}}while(0);Zl(a,1,1);Zl(a,c[m>>2]|0,32)}}while(0);m=k+1|0;if((m|0)<(o|0)){l=l+12|0;k=m}else{s=0;t=0;break}}}else{s=0;t=0}while(1){if((c[d+184+(t<<2)>>2]|0)==(c[h+184+(t<<2)>>2]|0)){u=s}else{u=1<<t|s}k=t+1|0;if((k|0)<16){s=u;t=k}else{v=0;w=0;break}}while(1){if((c[d+248+(w<<2)>>2]|0)==(c[h+248+(w<<2)>>2]|0)){x=v}else{x=1<<w|v}t=w+1|0;if((t|0)<16){v=x;w=t}else{y=0;z=0;break}}while(1){if((c[d+376+(z<<2)>>2]|0)==(c[h+376+(z<<2)>>2]|0)){A=y}else{A=1<<z|y}w=z+1|0;if((w|0)<16){y=A;z=w}else{B=0;C=0;break}}while(1){if((c[d+312+(C<<2)>>2]|0)==(c[h+312+(C<<2)>>2]|0)){D=B}else{D=1<<C|B}z=C+1|0;if((z|0)<16){B=D;C=z}else{break}}C=(u|0)!=0;B=(x|0)==0;h=(A|0)==0;z=(D|0)==0;if(B&(C^1)&h&z){Zl(a,0,1);c[164920]=(c[164920]|0)+4;E=468;F=0;i=e;return}Zl(a,1,1);if(C){Zl(a,1,1);Zl(a,u,16);C=0;do{if((1<<C&u|0)!=0){Zl(a,c[d+184+(C<<2)>>2]|0,16)}C=C+1|0;}while((C|0)<16)}else{Zl(a,0,1)}if(B){Zl(a,0,1)}else{Zl(a,1,1);Zl(a,x,16);B=0;do{if((1<<B&x|0)!=0){Zl(a,c[d+248+(B<<2)>>2]|0,16)}B=B+1|0;}while((B|0)<16)}if(h){Zl(a,0,1)}else{Zl(a,1,1);Zl(a,A,16);h=0;do{if((1<<h&A|0)!=0){Zl(a,c[d+376+(h<<2)>>2]|0,16)}h=h+1|0;}while((h|0)<16)}if(z){Zl(a,0,1);E=468;F=0;i=e;return}Zl(a,1,1);Zl(a,D,16);z=0;do{if((1<<z&D|0)!=0){Zl(a,c[d+312+(z<<2)>>2]|0,32)}z=z+1|0;}while((z|0)<16);E=468;F=0;i=e;return}function pm(a){a=a|0;var b=0,d=0,e=0;b=i;c[143850]=jk(55384,58488,256)|0;c[143852]=jk(48040,58488,256)|0;d=Hn(36360,(e=i,i=i+8|0,c[e>>2]=a&65535,e)|0)|0;i=e;c[154406]=jk(41144,d,16)|0;i=b;return}function qm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;g=i;h=d;d=i;i=i+32|0;Vx(d,h,32)|0;Zx(b|0,0,32852)|0;c[b>>2]=a;Vx(b+8|0,d|0,32)|0;c[b+40>>2]=e;c[b+44>>2]=0;c[b+48>>2]=1;c[b+32840>>2]=f;i=g;return}function rm(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;b=i;i=i+1432|0;d=b|0;Ul(d,b+32|0,1400);e=a+48|0;cm(d,c[e>>2]|-2147483648);f=a|0;if((c[f>>2]|0)==0){bm(d,c[(c[154406]|0)+32>>2]|0)}g=c[a+32840>>2]|0;cm(d,(da(c[e>>2]|0,g)|0)^g);g=a+16448|0;h=c[g>>2]|0;j=a+16452|0;k=c[j>>2]|0;l=(h+1300|0)>(k|0)?k-h|0:1300;bm(d,h);bm(d,l);am(d,(c[g>>2]|0)+(a+16456)|0,l);h=d+20|0;sm(c[f>>2]|0,c[h>>2]|0,c[d+12>>2]|0,a+8|0);c[a+32844>>2]=Jd()|0;d=c[h>>2]|0;c[a+32848>>2]=d;if((c[(c[143850]|0)+32>>2]|0)!=0){h=c[e>>2]|0;k=c[g>>2]|0;_i(31056,(m=i,i=i+40|0,c[m>>2]=c[2032+(c[f>>2]<<2)>>2],c[m+8>>2]=d,c[m+16>>2]=h,c[m+24>>2]=k,c[m+32>>2]=l,m)|0);i=m}m=(c[g>>2]|0)+l|0;c[g>>2]=m;if((m|0)!=(c[j>>2]|0)|(l|0)==1300){n=1400;o=0;i=b;return}c[e>>2]=(c[e>>2]|0)+1;c[a+16444>>2]=0;n=1400;o=0;i=b;return}function sm(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;f=i;i=i+64|0;h=e;e=i;i=i+32|0;Vx(e,h,32)|0;h=f|0;j=f+32|0;do{if((c[(c[143850]|0)+32>>2]|0)!=0){if(!((c[d>>2]|0)==-1)){break}_i(54008,(k=i,i=i+8|0,c[k>>2]=b,k)|0);i=k}}while(0);k=c[e>>2]|0;if((k|0)==2){l=a^1;m=740876+(l*22472|0)|0;n=c[m>>2]|0;o=n&15;c[m>>2]=n+1;Vx(718408+(l*22472|0)+(o*1404|0)|0,d|0,b)|0;c[718408+(l*22472|0)+(o*1404|0)+1400>>2]=b;i=f;return}else if((k|0)==1|(k|0)==0){i=f;return}else{do{if((a|0)==0){k=c[(c[469152]|0)+32>>2]|0;if((k|0)<=0){break}o=h;Vx(o|0,e|0,32)|0;l=c[164906]|0;n=pj(48)|0;m=n;p=pj(b)|0;c[n+8>>2]=p;Vx(p|0,d|0,b)|0;c[n+4>>2]=b;Vx(n+12|0,o|0,32)|0;o=Jd()|0;c[n+44>>2]=~~(((k|0)>999?999.0:+(k|0))/+g[(c[423396]|0)+28>>2])+o;c[n>>2]=0;if((c[164906]|0)==0){c[164906]=m;i=f;return}else{q=l}do{if((q|0)==0){r=20;break}s=q|0;q=c[s>>2]|0;}while((q|0)!=0);if((r|0)==20){i=f;return}c[s>>2]=m;i=f;return}else if((a|0)==1){l=c[(c[64864]|0)+32>>2]|0;if((l|0)<=0){break}n=j;Vx(n|0,e|0,32)|0;o=c[164906]|0;k=pj(48)|0;p=k;t=pj(b)|0;c[k+8>>2]=t;Vx(t|0,d|0,b)|0;c[k+4>>2]=b;Vx(k+12|0,n|0,32)|0;n=Jd()|0;c[k+44>>2]=~~(((l|0)>999?999.0:+(l|0))/+g[(c[423396]|0)+28>>2])+n;c[k>>2]=0;if((c[164906]|0)==0){c[164906]=p;i=f;return}else{u=o}do{if((u|0)==0){r=20;break}v=u|0;u=c[v>>2]|0;}while((u|0)!=0);if((r|0)==20){i=f;return}c[v>>2]=p;i=f;return}}while(0);Im(b,d,e);i=f;return}}function tm(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+1432|0;f=e|0;if((b|0)>16384){aj(1,26688,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g}c[a+16448>>2]=0;if((b|0)>1299){c[a+16444>>2]=1;c[a+16452>>2]=b;Vx(a+16456|0,d|0,b)|0;rm(a);h=1400;j=0;i=e;return}Ul(f,e+32|0,1400);k=a+48|0;cm(f,c[k>>2]|0);l=a|0;if((c[l>>2]|0)==0){bm(f,c[(c[154406]|0)+32>>2]|0)}m=c[a+32840>>2]|0;cm(f,(da(c[k>>2]|0,m)|0)^m);c[k>>2]=(c[k>>2]|0)+1;am(f,d,b);b=f+20|0;sm(c[l>>2]|0,c[b>>2]|0,c[f+12>>2]|0,a+8|0);c[a+32844>>2]=Jd()|0;f=c[b>>2]|0;c[a+32848>>2]=f;if((c[(c[143850]|0)+32>>2]|0)==0){h=1400;j=0;i=e;return}b=(c[k>>2]|0)-1|0;k=c[a+44>>2]|0;_i(23272,(g=i,i=i+32|0,c[g>>2]=c[2032+(c[l>>2]<<2)>>2],c[g+8>>2]=f,c[g+16>>2]=b,c[g+24>>2]=k,g)|0);i=g;h=1400;j=0;i=e;return}function um(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;d=i;Xl(b);e=hm(b)|0;f=(e|0)<0;g=f?e&2147483647:e;e=a|0;if((c[e>>2]|0)==1){gm(b)|0}h=hm(b)|0;j=c[a+32840>>2]|0;if(((da(j,g)|0)^j|0)!=(h|0)){k=0;i=d;return k|0}if(f){h=gm(b)|0;l=gm(b)|0;m=h}else{l=0;m=0}do{if((c[(c[143850]|0)+32>>2]|0)!=0){h=c[2032+(c[e>>2]<<2)>>2]|0;j=c[b+20>>2]|0;if(f){_i(20064,(n=i,i=i+40|0,c[n>>2]=h,c[n+8>>2]=j,c[n+16>>2]=g,c[n+24>>2]=m,c[n+32>>2]=l,n)|0);i=n;break}else{_i(17904,(n=i,i=i+24|0,c[n>>2]=h,c[n+8>>2]=j,c[n+16>>2]=g,n)|0);i=n;break}}}while(0);e=a+44|0;j=c[e>>2]|0;if((g|0)<=(j|0)){do{if((c[(c[143852]|0)+32>>2]|0)==0){if((c[(c[143850]|0)+32>>2]|0)==0){k=0}else{break}i=d;return k|0}}while(0);h=Dm(a+8|0)|0;o=c[e>>2]|0;_i(60696,(n=i,i=i+24|0,c[n>>2]=h,c[n+8>>2]=g,c[n+16>>2]=o,n)|0);i=n;k=0;i=d;return k|0}o=g-1-j|0;j=a+4|0;c[j>>2]=o;do{if((o|0)>0){if((c[(c[143852]|0)+32>>2]|0)==0){if((c[(c[143850]|0)+32>>2]|0)==0){break}}h=Dm(a+8|0)|0;p=c[j>>2]|0;_i(59216,(n=i,i=i+24|0,c[n>>2]=h,c[n+8>>2]=p,c[n+16>>2]=g,n)|0);i=n}}while(0);if(!f){c[e>>2]=g;k=1;i=d;return k|0}f=a+52|0;if((g|0)==(c[f>>2]|0)){q=c[a+56>>2]|0}else{c[f>>2]=g;c[a+56>>2]=0;q=0}f=a+56|0;if((m|0)!=(q|0)){do{if((c[(c[143852]|0)+32>>2]|0)==0){if((c[(c[143850]|0)+32>>2]|0)==0){k=0}else{break}i=d;return k|0}}while(0);q=Dm(a+8|0)|0;_i(57328,(n=i,i=i+8|0,c[n>>2]=q,n)|0);i=n;k=0;i=d;return k|0}do{if((l|0)>=0){q=b+24|0;j=c[q>>2]|0;o=b+20|0;if((j+l|0)>(c[o>>2]|0)){break}if((m+l|0)>>>0>16384>>>0){break}p=b+12|0;Vx(a+60+m|0,(c[p>>2]|0)+j|0,l)|0;j=(c[f>>2]|0)+l|0;c[f>>2]=j;if((l|0)==1300){k=0;i=d;return k|0}if((j|0)>(c[b+16>>2]|0)){j=Dm(a+8|0)|0;h=c[f>>2]|0;_i(54952,(n=i,i=i+16|0,c[n>>2]=j,c[n+8>>2]=h,n)|0);i=n;k=0;i=d;return k|0}else{h=c[p>>2]|0;c[h>>2]=g;Vx(h+4|0,a+60|0,c[f>>2]|0)|0;c[o>>2]=(c[f>>2]|0)+4;c[f>>2]=0;c[q>>2]=4;c[b+28>>2]=32;c[e>>2]=g;k=1;i=d;return k|0}}}while(0);do{if((c[(c[143852]|0)+32>>2]|0)==0){if((c[(c[143850]|0)+32>>2]|0)==0){k=0}else{break}i=d;return k|0}}while(0);g=Dm(a+8|0)|0;_i(55944,(n=i,i=i+8|0,c[n>>2]=g,n)|0);i=n;k=0;i=d;return k|0}function vm(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=c[740876+(a*22472|0)>>2]|0;f=740872+(a*22472|0)|0;g=c[f>>2]|0;do{if((e-g|0)>16){h=e-16|0;c[f>>2]=h;i=h}else{if((g|0)<(e|0)){i=g;break}else{j=0}return j|0}}while(0);g=i&15;c[f>>2]=i+1;i=718408+(a*22472|0)+(g*1404|0)+1400|0;Vx(c[d+12>>2]|0,718408+(a*22472|0)+(g*1404|0)|0,c[i>>2]|0)|0;c[d+20>>2]=c[i>>2];Zx(b|0,0,32)|0;c[b>>2]=2;j=1;return j|0}function wm(){var a=0,b=0,d=0;if((c[164906]|0)==0){return}while(1){a=Jd()|0;b=c[164906]|0;if((c[b+44>>2]|0)>=(a|0)){d=4;break}Im(c[b+4>>2]|0,c[b+8>>2]|0,b+12|0);b=c[164906]|0;c[164906]=c[b>>2];mj(c[b+8>>2]|0);mj(b);if((c[164906]|0)==0){d=4;break}}if((d|0)==4){return}}function xm(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+16400|0;g=b;b=i;i=i+32|0;Vx(b,g,32)|0;g=f|0;h=f+16|0;j=h|0;k=g;c[h>>2]=-1;c[k>>2]=e;c[k+4>>2]=0;fd(h+4|0,16380,d|0,g|0)|0;sm(a,Wx(j|0)|0,j,b);i=f;return}function ym(d,e,f){d=d|0;e=e|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;g=i;i=i+1024|0;h=g|0;j=h|0;if((Tx(d,52840)|0)==0){Zx(e|0,0,32)|0;c[e>>2]=2;k=1;l=1024;m=0;i=g;return k|0}rn(j,d,1024);do{if((a[j]|0)==91){n=5}else{if((Gn(j,58)|0)>1){n=5;break}d=Ib(j|0,58)|0;if((d|0)==0){o=0;p=j;break}a[d]=0;o=d+1|0;p=j}}while(0);if((n|0)==5){n=Ib(j|0,93)|0;if((n|0)==0){q=0}else{a[n]=0;q=(a[n+1|0]|0)==58?n+2|0:0}o=q;p=(a[j]|0)==91?h+1|0:j}if((zm(p,e,f)|0)==0){c[e>>2]=0;k=0;l=1024;m=0;i=g;return k|0}if((o|0)==0){b[e+24>>1]=wn(27960)|0;k=2;l=1024;m=0;i=g;return k|0}else{b[e+24>>1]=wn((Vc(o|0)|0)&65535)|0;k=1;l=1024;m=0;i=g;return k|0}return 0}function zm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+128|0;g=f|0;if((e|0)==5){h=10}else if((e|0)==4){h=2}else{h=0}e=g;do{if((Am(a,e,128,h)|0)==0){j=0}else{k=b[g>>1]|0;if((k<<16>>16|0)==2){c[d>>2]=4;c[d+4>>2]=c[g+4>>2];b[d+24>>1]=b[e+2>>1]|0;j=1;break}else if((k<<16>>16|0)==10){c[d>>2]=5;Vx(d+8|0,g+8|0,16)|0;b[d+24>>1]=b[e+2>>1]|0;c[d+28>>2]=c[g+24>>2];j=1;break}else{j=1;break}}}while(0);i=f;return j|0}function Am(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,x=0;f=i;i=i+40|0;g=f|0;h=f+32|0;c[h>>2]=0;j=b;Zx(j|0,0,16)|0;Zx(g|0,0,32)|0;b=e&65535;c[g+4>>2]=b;c[g+8>>2]=2;k=Ra(a|0,0,g|0,h|0)|0;do{if((k|0)==0){a:do{if(e<<16>>16==0){g=c[(c[164972]|0)+32>>2]|0;if((g&4|0)==0){do{if((g&1|0)!=0){l=c[h>>2]|0;if((l|0)==0){break}else{m=l}do{if((c[m+4>>2]|0)==2){n=m;o=l;break a}m=c[m+28>>2]|0;}while((m|0)!=0)}}while(0);if((g&2|0)==0){p=26;break}l=c[h>>2]|0;if((l|0)==0){p=26;break}else{q=l}while(1){if((c[q+4>>2]|0)==10){n=q;o=l;break a}r=c[q+28>>2]|0;if((r|0)==0){p=26;break}else{q=r}}}else{do{if((g&2|0)!=0){l=c[h>>2]|0;if((l|0)==0){break}else{s=l}do{if((c[s+4>>2]|0)==10){n=s;o=l;break a}s=c[s+28>>2]|0;}while((s|0)!=0)}}while(0);if((g&1|0)==0){p=26;break}l=c[h>>2]|0;if((l|0)==0){p=26;break}else{t=l}while(1){if((c[t+4>>2]|0)==2){n=t;o=l;break a}r=c[t+28>>2]|0;if((r|0)==0){p=26;break}else{t=r}}}}else{l=c[h>>2]|0;if((l|0)==0){p=26;break}else{u=l}while(1){if((c[u+4>>2]|0)==(b|0)){n=u;o=l;break a}g=c[u+28>>2]|0;if((g|0)==0){p=26;break}else{u=g}}}}while(0);if((p|0)==26){_i(25112,(v=i,i=i+8|0,c[v>>2]=a,v)|0);i=v;break}l=n+16|0;g=c[l>>2]|0;if(g>>>0>d>>>0){c[l>>2]=d;w=d}else{w=g}Vx(j|0,c[n+20>>2]|0,w)|0;Eb(o|0);x=1;i=f;return x|0}else{g=Sc(k|0)|0;_i(24712,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=g,v)|0);i=v}}while(0);v=c[h>>2]|0;if((v|0)==0){x=0;i=f;return x|0}Eb(v|0);x=0;i=f;return x|0}function Bm(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;f=i;g=b;b=i;i=i+32|0;Vx(b,g,32)|0;g=d;d=i;i=i+32|0;Vx(d,g,32)|0;g=c[b>>2]|0;if((g|0)!=(c[d>>2]|0)){h=0;i=f;return h|0}if((g|0)==2){h=1;i=f;return h|0}else if((g|0)==4){j=d+4|0;k=b+4|0;l=e>>>0>32>>>0?32:e}else if((g|0)==5){j=d+8|0;k=b+8|0;l=e>>>0>128>>>0?128:e}else{_i(55168,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;h=0;i=f;return h|0}e=l>>3;do{if((e|0)!=0){if((Sx(k,j,e)|0)==0){break}else{h=0}i=f;return h|0}}while(0);b=l&7;if((b|0)==0){h=1;i=f;return h|0}h=(((1<<b)+255&255)<<8-b&((a[j+e|0]^a[k+e|0])&255)|0)==0|0;i=f;return h|0}function Cm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+64|0;e=a;a=i;i=i+32|0;Vx(a,e,32)|0;e=b;b=i;i=i+32|0;Vx(b,e,32)|0;e=d|0;f=d+32|0;Vx(f|0,a|0,32)|0;Vx(e|0,b|0,32)|0;b=c[f>>2]|0;if((b|0)!=(c[e>>2]|0)){g=0;i=d;return g|0}if((b|0)==4){h=e+4|0;j=f+4|0;k=4}else if((b|0)==2){g=1;i=d;return g|0}else if((b|0)==5){h=e+8|0;j=f+8|0;k=16}else{_i(55168,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;i=d;return g|0}g=(Sx(j,h,k)|0)==0|0;i=d;return g|0}function Dm(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+128|0;f=d;d=i;i=i+32|0;Vx(d,f,32)|0;f=e|0;g=c[d>>2]|0;if((g|0)==2){xn(2557904,48,58448,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;i=e;return 2557904}else if((g|0)==1){xn(2557904,48,47976,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;i=e;return 2557904}else if((g|0)==4|(g|0)==5){Zx(f|0,0,128)|0;h=f;if((g|0)==5){b[f>>1]=10;j=f+8|0;k=d+8|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];b[h+2>>1]=b[d+24>>1]|0;c[f+24>>2]=c[d+28>>2];l=28}else if((g|0)==4){b[f>>1]=2;c[f+4>>2]=c[d+4>>2];b[h+2>>1]=b[d+24>>1]|0;l=16}else{l=16}if((cc(h|0,l|0,2557904,48,0,0,1)|0)==0){i=e;return 2557904}a[2557904]=0;i=e;return 2557904}else{i=e;return 2557904}return 0}function Em(e){e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;i=i+256|0;g=e;e=i;i=i+32|0;Vx(e,g,32)|0;g=f|0;h=f+128|0;j=c[e>>2]|0;if((j|0)==1){xn(2557856,48,47976,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;i=f;return 2557856}else if((j|0)==4){l=e+4|0;m=d[l]|d[l+1|0]<<8|d[l+2|0]<<16|d[l+3|0]<<24|0;l=e+24|0;n=(d[l]|d[l+1|0]<<8)<<16>>16;Zx(h|0,0,128)|0;l=h;b[h>>1]=2;c[h+4>>2]=m;b[l+2>>1]=n;if((cc(l|0,16,2557904,48,0,0,1)|0)!=0){a[2557904]=0}l=(sd(n|0)|0)&65535;xn(2557856,48,41120,(k=i,i=i+16|0,c[k>>2]=2557904,c[k+8>>2]=l,k)|0)|0;i=k;i=f;return 2557856}else if((j|0)==5){l=e+24|0;n=(d[l]|d[l+1|0]<<8)<<16>>16;l=e+28|0;m=d[l]|d[l+1|0]<<8|d[l+2|0]<<16|d[l+3|0]<<24|0;Zx(g|0,0,128)|0;l=g;b[g>>1]=10;Vx(g+8|0,e+8|0,16)|0;b[l+2>>1]=n;c[g+24>>2]=m;if((cc(l|0,28,2557904,48,0,0,1)|0)!=0){a[2557904]=0}l=(sd(n|0)|0)&65535;xn(2557856,48,36344,(k=i,i=i+16|0,c[k>>2]=2557904,c[k+8>>2]=l,k)|0)|0;i=k;i=f;return 2557856}else if((j|0)==2){xn(2557856,48,58448,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;i=f;return 2557856}else{i=f;return 2557856}return 0}function Fm(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;e=i;i=i+64|0;f=a;a=i;i=i+32|0;Vx(a,f,32)|0;f=d;d=i;i=i+32|0;Vx(d,f,32)|0;f=e|0;g=e+32|0;Vx(g|0,a|0,32)|0;Vx(f|0,d|0,32)|0;h=c[g>>2]|0;if((h|0)!=(c[f>>2]|0)){j=0;i=e;return j|0}if((h|0)==5){k=f+8|0;l=g+8|0;m=16;n=6}else if((h|0)==4){k=f+4|0;l=g+4|0;m=4;n=6}else if((h|0)!=2){_i(55168,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=0;i=e;return j|0}do{if((n|0)==6){if((Sx(l,k,m)|0)==0){break}else{j=0}i=e;return j|0}}while(0);if(!(((c[a>>2]|0)-4|0)>>>0<2>>>0)){j=1;i=e;return j|0}j=(b[a+24>>1]|0)==(b[d+24>>1]|0)|0;i=e;return j|0}function Gm(a){a=a|0;var b=0,d=0;b=i;d=a;a=i;i=i+32|0;Vx(a,d,32)|0;i=b;return(c[a>>2]|0)==2|0}function Hm(e,f,g){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,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;h=i;i=i+568|0;j=h|0;k=h+128|0;l=h+144|0;m=h+272|0;n=h+288|0;o=h+416|0;p=h+432|0;q=h+560|0;r=p;s=c[868]|0;do{if(!((s|0)==-1)){if((c[g+(s>>>5<<2)>>2]&1<<(s&31)|0)==0){break}c[q>>2]=128;t=f+12|0;u=f+16|0;v=p;w=sb(s|0,c[t>>2]|0,c[u>>2]|0,0,v|0,q|0)|0;if((w|0)==-1){x=c[(_c()|0)>>2]|0;if((x|0)==104|(x|0)==11){break}y=$c(x|0)|0;_i(31032,(z=i,i=i+8|0,c[z>>2]=y,z)|0);i=z;break}y=p+8|0;c[y>>2]=0;c[y+4>>2]=0;do{if(a[664]|0){if((Sx(r,571280,c[q>>2]|0)|0)!=0){A=14;break}if((w|0)<10){B=0;C=128;D=0;i=h;return B|0}y=c[t>>2]|0;if((a[y]|0)!=0){B=0;C=128;D=0;i=h;return B|0}if((a[y+1|0]|0)!=0){B=0;C=128;D=0;i=h;return B|0}if((a[y+2|0]|0)!=0){B=0;C=128;D=0;i=h;return B|0}if((a[y+3|0]|0)==1){c[e>>2]=4;a[e+4|0]=a[(c[t>>2]|0)+4|0]|0;a[e+5|0]=a[(c[t>>2]|0)+5|0]|0;a[e+6|0]=a[(c[t>>2]|0)+6|0]|0;a[e+7|0]=a[(c[t>>2]|0)+7|0]|0;b[e+24>>1]=b[(c[t>>2]|0)+8>>1]|0;c[f+24>>2]=10;break}else{B=0;C=128;D=0;i=h;return B|0}}else{A=14}}while(0);if((A|0)==14){t=b[p>>1]|0;if((t<<16>>16|0)==2){c[e>>2]=4;c[e+4>>2]=c[p+4>>2];b[e+24>>1]=b[v+2>>1]|0}else if((t<<16>>16|0)==10){c[e>>2]=5;Vx(e+8|0,p+8|0,16)|0;b[e+24>>1]=b[v+2>>1]|0;c[e+28>>2]=c[p+24>>2]}c[f+24>>2]=0}if((w|0)<(c[u>>2]|0)){c[f+20>>2]=w;B=1;C=128;D=0;i=h;return B|0}t=e|0;y=d[t]|d[t+1|0]<<8|d[t+2|0]<<16|d[t+3|0]<<24|0;t=e+4|0;x=d[t]|d[t+1|0]<<8|d[t+2|0]<<16|d[t+3|0]<<24|0;t=o|0;Vx(t|0,e+8|0,16)|0;E=e+24|0;F=(d[E]|d[E+1|0]<<8)<<16>>16;E=e+28|0;G=d[E]|d[E+1|0]<<8|d[E+2|0]<<16|d[E+3|0]<<24|0;do{if((y|0)==4|(y|0)==5){Zx(n|0,0,128)|0;E=n;if((y|0)==4){b[n>>1]=2;c[n+4>>2]=x;b[E+2>>1]=F;H=16}else if((y|0)==5){b[n>>1]=10;I=n+8|0;c[I>>2]=c[t>>2];c[I+4>>2]=c[t+4>>2];c[I+8>>2]=c[t+8>>2];c[I+12>>2]=c[t+12>>2];b[E+2>>1]=F;c[n+24>>2]=G;H=28}else{H=16}if((cc(E|0,H|0,2557904,48,0,0,1)|0)==0){break}a[2557904]=0}else if((y|0)==2){xn(2557904,48,58448,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z}else if((y|0)==1){xn(2557904,48,47976,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z}}while(0);_i(26656,(z=i,i=i+8|0,c[z>>2]=2557904,z)|0);i=z;B=0;C=128;D=0;i=h;return B|0}}while(0);H=c[870]|0;do{if(!((H|0)==-1)){if((c[g+(H>>>5<<2)>>2]&1<<(H&31)|0)==0){break}c[q>>2]=128;n=f+16|0;o=p;A=sb(H|0,c[f+12>>2]|0,c[n>>2]|0,0,o|0,q|0)|0;if((A|0)==-1){r=c[(_c()|0)>>2]|0;if((r|0)==104|(r|0)==11){break}s=$c(r|0)|0;_i(31032,(z=i,i=i+8|0,c[z>>2]=s,z)|0);i=z;break}s=b[p>>1]|0;if((s<<16>>16|0)==2){c[e>>2]=4;c[e+4>>2]=c[p+4>>2];b[e+24>>1]=b[o+2>>1]|0}else if((s<<16>>16|0)==10){c[e>>2]=5;Vx(e+8|0,p+8|0,16)|0;b[e+24>>1]=b[o+2>>1]|0;c[e+28>>2]=c[p+24>>2]}c[f+24>>2]=0;if((A|0)<(c[n>>2]|0)){c[f+20>>2]=A;B=1;C=128;D=0;i=h;return B|0}A=e|0;n=d[A]|d[A+1|0]<<8|d[A+2|0]<<16|d[A+3|0]<<24|0;A=e+4|0;o=d[A]|d[A+1|0]<<8|d[A+2|0]<<16|d[A+3|0]<<24|0;A=m|0;Vx(A|0,e+8|0,16)|0;s=e+24|0;r=(d[s]|d[s+1|0]<<8)<<16>>16;s=e+28|0;y=d[s]|d[s+1|0]<<8|d[s+2|0]<<16|d[s+3|0]<<24|0;do{if((n|0)==2){xn(2557904,48,58448,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z}else if((n|0)==1){xn(2557904,48,47976,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z}else if((n|0)==4|(n|0)==5){Zx(l|0,0,128)|0;s=l;if((n|0)==4){b[l>>1]=2;c[l+4>>2]=o;b[s+2>>1]=r;J=16}else if((n|0)==5){b[l>>1]=10;G=l+8|0;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];b[s+2>>1]=r;c[l+24>>2]=y;J=28}else{J=16}if((cc(s|0,J|0,2557904,48,0,0,1)|0)==0){break}a[2557904]=0}}while(0);_i(26656,(z=i,i=i+8|0,c[z>>2]=2557904,z)|0);i=z;B=0;C=128;D=0;i=h;return B|0}}while(0);J=c[510]|0;if((J|0)==-1|(J|0)==(c[870]|0)){B=0;C=128;D=0;i=h;return B|0}if((c[g+(J>>>5<<2)>>2]&1<<(J&31)|0)==0){B=0;C=128;D=0;i=h;return B|0}c[q>>2]=128;g=f+16|0;l=p;m=sb(J|0,c[f+12>>2]|0,c[g>>2]|0,0,l|0,q|0)|0;if((m|0)==-1){q=c[(_c()|0)>>2]|0;if((q|0)==104|(q|0)==11){B=0;C=128;D=0;i=h;return B|0}J=$c(q|0)|0;_i(31032,(z=i,i=i+8|0,c[z>>2]=J,z)|0);i=z;B=0;C=128;D=0;i=h;return B|0}J=b[p>>1]|0;if((J<<16>>16|0)==2){c[e>>2]=4;c[e+4>>2]=c[p+4>>2];b[e+24>>1]=b[l+2>>1]|0}else if((J<<16>>16|0)==10){c[e>>2]=5;Vx(e+8|0,p+8|0,16)|0;b[e+24>>1]=b[l+2>>1]|0;c[e+28>>2]=c[p+24>>2]}c[f+24>>2]=0;if((m|0)<(c[g>>2]|0)){c[f+20>>2]=m;B=1;C=128;D=0;i=h;return B|0}m=e|0;f=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24|0;m=e+4|0;g=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24|0;m=k|0;Vx(m|0,e+8|0,16)|0;k=e+24|0;p=(d[k]|d[k+1|0]<<8)<<16>>16;k=e+28|0;e=d[k]|d[k+1|0]<<8|d[k+2|0]<<16|d[k+3|0]<<24|0;do{if((f|0)==2){xn(2557904,48,58448,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z}else if((f|0)==1){xn(2557904,48,47976,(z=i,i=i+1|0,i=i+7&-8,c[z>>2]=0,z)|0)|0;i=z}else if((f|0)==4|(f|0)==5){Zx(j|0,0,128)|0;k=j;if((f|0)==4){b[j>>1]=2;c[j+4>>2]=g;b[k+2>>1]=p;K=16}else if((f|0)==5){b[j>>1]=10;l=j+8|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];b[k+2>>1]=p;c[j+24>>2]=e;K=28}else{K=16}if((cc(k|0,K|0,2557904,48,0,0,1)|0)==0){break}a[2557904]=0}}while(0);_i(26656,(z=i,i=i+8|0,c[z>>2]=2557904,z)|0);i=z;B=0;C=128;D=0;i=h;return B|0}
|
|
|
|
|
|
|
|
function Mt(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,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0.0,xa=0.0,ya=0.0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0.0,Qa=0;f=i;i=i+2328|0;h=f|0;j=f+56|0;k=f+112|0;l=f+168|0;m=f+224|0;n=f+280|0;o=f+336|0;p=f+392|0;q=f+408|0;r=f+424|0;s=f+440|0;t=f+528|0;u=f+576|0;v=f+584|0;w=f+632|0;x=f+680|0;y=f+736|0;z=f+792|0;A=f+848|0;B=f+904|0;C=f+960|0;D=f+1016|0;E=f+1072|0;F=f+1128|0;G=f+1184|0;H=f+1240|0;I=f+1296|0;J=f+1352|0;K=f+1408|0;L=f+1464|0;M=f+1520|0;N=f+1576|0;O=f+1640|0;P=f+1656|0;Q=f+1712|0;R=f+1768|0;S=f+1824|0;T=f+1880|0;U=f+1936|0;V=f+1992|0;W=f+2048|0;X=f+2104|0;Y=f+2160|0;Z=f+2216|0;_=f+2272|0;$=v;aa=a|0;ba=a+4|0;ca=a+8|0;da=a+12|0;ea=a+16|0;fa=a+20|0;Zx(a|0,0,24)|0;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(ga=i,i=i+8|0,c[ga>>2]=b,ga)|0);i=ga;ha=44;ia=0;ja=44;ka=0;i=f;return}la=c[2544736+(b<<2)>>2]|0;if((la|0)==0){ue[c[636260]&31](4,57128,(ga=i,i=i+8|0,c[ga>>2]=b,ga)|0);i=ga;ha=44;ia=0;ja=44;ka=0;i=f;return}b=la+76|0;Wq(c[b>>2]|0,t);do{if((c[t+36>>2]&16777215|0)!=14){ma=la+96|0;na=c[ma>>2]|0;if((na&128|0)==0){if(!(+g[la+104>>2]!=0.0)){break}}if(+g[(c[164922]|0)+16>>2]!=0.0){su(c[la+40>>2]|0,c[(c[466014]|0)+4>>2]|0);oa=c[ma>>2]|0}else{oa=na}c[ma>>2]=oa&-129;g[la+104>>2]=0.0}}while(0);if((d|0)==0){c[aa>>2]=1;ha=44;ia=0;ja=44;ka=0;i=f;return}oa=la+96|0;c[oa>>2]=c[oa>>2]&-13;t=la|0;ma=la+48|0;na=la+36|0;pa=(Gp(t,c[ma>>2]|0,c[na>>2]|0)|0)==0;qa=c[oa>>2]|0;if(pa){ra=qa}else{pa=qa|2;c[oa>>2]=pa;ra=pa}do{if((ra&2|0)!=0){pa=p|0;qa=q|0;br(c[ma>>2]|0,pa,qa);sa=r|0;g[sa>>2]=+g[t>>2];g[r+4>>2]=+g[la+4>>2];g[r+8>>2]=+g[la+8>>2]+-3.0;Jo(s,t,pa,qa,sa,c[na>>2]|0,65537);sa=c[s+80>>2]|0;qa=(c[s+4>>2]|0)!=0|(sa|0)==1022|(sa|0)==1023?-1:sa;if((qa|0)==-1){break}sa=hp(qa)|0;if(!(sa>>>0<256>>>0)){break}pa=c[717328+(sa<<2)>>2]|0;if((pa|0)==1){Wq(c[b>>2]|0,v);ta=v+36|0;if((c[ta>>2]&16777215|0)==11){if((c[v+4>>2]&65535|0)!=(sa|0)){ua=21}}else{ua=21}if((ua|0)==21){va=Yq(0,sa)|0;if((va|0)==0){if((c[636484]|0)!=0){ue[c[636260]&31](1,56912,(ga=i,i=i+8|0,c[ga>>2]=c[la+40>>2],ga)|0);i=ga}c[ca>>2]=1;c[da>>2]=qa;c[fa>>2]=c[fa>>2]|32;ha=44;ia=0;ja=44;ka=0;i=f;return}Wq(va,v);c[b>>2]=va;wa=+yp();va=c[ta>>2]|0;switch(va&16777215|0){case 6:{xa=6.0;break};case 11:{xa=10.0;break};case 14:{xa=8.0;break};case 12:{xa=6.0;break};case 13:{xa=6.0;break};case 18:{xa=10.0;break};case 19:{xa=10.0;break};case 2:case 3:case 4:case 7:case 5:case 8:case 9:case 10:{xa=5.0;break};default:{ue[c[636260]&31](3,58728,(ga=i,i=i+8|0,c[ga>>2]=va,ga)|0);i=ga;xa=8.0}}g[la+112>>2]=wa+xa}c[fa>>2]=c[fa>>2]|128;break}else if((pa|0)==2){Wq(c[b>>2]|0,v);va=v+36|0;if((c[va>>2]&16777215|0)==19){if((c[v+4>>2]&65535|0)!=(sa|0)){ua=38}}else{ua=38}if((ua|0)==38){ta=Yq(0,sa)|0;if((ta|0)==0){if((c[636484]|0)!=0){ue[c[636260]&31](1,55608,(ga=i,i=i+8|0,c[ga>>2]=c[la+40>>2],ga)|0);i=ga}c[ca>>2]=1;c[da>>2]=qa;c[fa>>2]=c[fa>>2]|32;ha=44;ia=0;ja=44;ka=0;i=f;return}Wq(ta,v);c[b>>2]=ta;wa=+yp();ta=c[va>>2]|0;switch(ta&16777215|0){case 6:{ya=6.0;break};case 11:{ya=10.0;break};case 14:{ya=8.0;break};case 12:{ya=6.0;break};case 13:{ya=6.0;break};case 18:{ya=10.0;break};case 19:{ya=10.0;break};case 2:case 3:case 4:case 7:case 5:case 8:case 9:case 10:{ya=5.0;break};default:{ue[c[636260]&31](3,58728,(ga=i,i=i+8|0,c[ga>>2]=ta,ga)|0);i=ga;ya=8.0}}g[la+112>>2]=wa+ya}c[fa>>2]=c[fa>>2]|64;break}else{if(!((pa-3|0)>>>0<2>>>0)){c[ca>>2]=1;c[da>>2]=qa;c[fa>>2]=c[fa>>2]|32;ha=44;ia=0;ja=44;ka=0;i=f;return}pa=bt(t)|0;c[la+64>>2]=pa;if((Yp(pa)|0)!=0){break}c[ca>>2]=1;c[da>>2]=qa;c[fa>>2]=c[fa>>2]|32;ha=44;ia=0;ja=44;ka=0;i=f;return}}}while(0);if((Hp(t)|0)!=0){c[oa>>2]=c[oa>>2]|4}s=(Fp(t)|0)==0;na=c[oa>>2]|0;if(s){za=na}else{s=na|8;c[oa>>2]=s;za=s}a:do{if((za&14|0)==0){s=la+44|0;na=O|0;g[na>>2]=+g[t>>2]+ +g[la+12>>2]*+g[s>>2]*-2.0;ma=la+4|0;g[O+4>>2]=+g[ma>>2]+ +g[la+16>>2]*+g[s>>2]*-2.0;ra=la+8|0;qa=la+20|0;g[O+8>>2]=+g[ra>>2]+ +g[qa>>2]*+g[s>>2]*-2.0;s=la+72|0;pa=la+68|0;ta=la+116|0;va=la+120|0;sa=la+124|0;Aa=la+128|0;Ba=la+768|0;Ca=v+36|0;Da=mr(t,na,N|0,0,16)|0;Ea=0;b:while(1){Fa=Da;while(1){Ga=Fa-1|0;if((Fa|0)<=0){Ha=Ea;break b}Ia=N+(Ga<<2)|0;if(($p(c[Ia>>2]|0)|0)==0){Fa=Ga}else{break}}Ja=it(na,c[Ia>>2]|0,c[s>>2]|0,c[pa>>2]|0,ta,va,sa,d,262144,Aa,c[Ba>>2]|0,0)|0;if((Ja|0)!=0){ua=121;break}Fa=Xq(c[Ia>>2]|0,0)|0;if((Fa|0)==0){Da=Ga;Ea=1;continue}else{Ka=Fa}while(1){Wq(Ka,v);if((c[Ca>>2]&16777215|0)==18){c[b>>2]=Ka;c[pa>>2]=c[Ia>>2]}Fa=Xq(c[Ia>>2]|0,Ka)|0;if((Fa|0)==0){Da=Ga;Ea=1;continue b}else{Ka=Fa}}}if((ua|0)==121){c[b>>2]=Ja;c[pa>>2]=c[Ia>>2];Ha=1}do{if((c[636484]|0)==0|(Ha|0)==0){ua=129}else{Ea=c[b>>2]|0;if((Ea|0)!=0){La=Ea;break}ue[c[636260]&31](1,54600,(ga=i,i=i+8|0,c[ga>>2]=c[la+40>>2],ga)|0);i=ga;ua=129}}while(0);if((ua|0)==129){pa=c[b>>2]|0;if((pa|0)==0){break}else{La=pa}}Wq(La,v);pa=c[Ca>>2]|0;c[ea>>2]=pa;Ea=pa&16777215;switch(Ea|0){case 2:{rt(P,la,v);Vx(a|0,P|0,52)|0;break};case 4:{pa=k;Zx(pa|0,0,52)|0;if(+g[qa>>2]<250.0){Da=p|0;g[Da>>2]=+g[v+24>>2]- +g[t>>2];Ba=p+4|0;g[Ba>>2]=+g[v+28>>2]- +g[ma>>2];Aa=p+8|0;g[Aa>>2]=0.0;qt(la,Da,1,k);Ju(c[la+40>>2]|0,Da,400.0);g[k+28>>2]=+g[Da>>2];g[k+32>>2]=+g[Ba>>2];g[k+36>>2]=+g[Aa>>2]}Aa=Q;Vx(Aa|0,pa|0,52)|0;Vx(a|0,Aa|0,52)|0;break};case 6:{Zx(r|0,0,12)|0;Aa=j;Zx(Aa|0,0,52)|0;pa=p|0;g[pa>>2]=+g[v+24>>2]- +g[t>>2];Ba=p+4|0;g[Ba>>2]=+g[v+28>>2]- +g[ma>>2];Da=p+8|0;g[Da>>2]=+g[v+32>>2]- +g[ra>>2];+dn(pa);sa=q|0;g[sa>>2]=+g[pa>>2];g[q+4>>2]=+g[Ba>>2];g[q+8>>2]=+g[Da>>2]*3.0;gn(sa,j+40|0);sa=la+40|0;Ju(c[sa>>2]|0,r|0,0.0);Fu(c[sa>>2]|0);sa=j+20|0;c[sa>>2]=c[sa>>2]|1;g[j+28>>2]=+g[pa>>2];g[j+32>>2]=+g[Ba>>2];g[j+36>>2]=+g[Da>>2];Da=R;Vx(Da|0,Aa|0,52)|0;Vx(a|0,Da|0,52)|0;break};case 7:{xt(S,la,v);Vx(a|0,S|0,52)|0;break};case 5:{zt(T,la,v);Vx(a|0,T|0,52)|0;break};case 8:{Da=h;Zx(Da|0,0,52)|0;Aa=p|0;g[Aa>>2]=+g[v+12>>2]- +g[t>>2];Ba=p+4|0;g[Ba>>2]=+g[v+16>>2]- +g[ma>>2];pa=p+8|0;g[pa>>2]=+g[v+20>>2]- +g[ra>>2];+dn(Aa);qt(la,Aa,1,h);Ju(c[la+40>>2]|0,Aa,400.0);g[h+28>>2]=+g[Aa>>2];g[h+32>>2]=+g[Ba>>2];g[h+36>>2]=+g[pa>>2];gn(Aa,h+40|0);Aa=h+20|0;c[Aa>>2]=c[Aa>>2]|2;Aa=U;Vx(Aa|0,Da|0,52)|0;Vx(a|0,Aa|0,52)|0;break};case 9:{ut(V,la,v);Vx(a|0,V|0,52)|0;break};case 11:{Ct(W,la,v);Vx(a|0,W|0,52)|0;break};case 14:{Gt(X,la,v);Vx(a|0,X|0,52)|0;break};case 12:case 13:{Jt(Y,la,v);Vx(a|0,Y|0,52)|0;break};case 18:{Kt(Z,la,v);Vx(a|0,Z|0,52)|0;break};case 19:{Ft(_,la,v);Vx(a|0,_|0,52)|0;break};case 3:case 10:{break};default:{ue[c[636260]&31](4,53560,(ga=i,i=i+8|0,c[ga>>2]=Ea,ga)|0);i=ga}}c[ea>>2]=c[Ca>>2]}else{Wq(c[b>>2]|0,w);Ea=bt(t)|0;Aa=la+64|0;c[Aa>>2]=Ea;if((Ea|0)==0){c[aa>>2]=1;c[ca>>2]=1;c[da>>2]=0;c[ba>>2]=8;ha=44;ia=0;ja=44;ka=0;i=f;return}Da=d+12|0;if((Ea|0)==(c[Da>>2]|0)){Lt(x,la,d);Vx(a|0,x|0,52)|0;ha=44;ia=0;ja=44;ka=0;i=f;return}Ea=c[b>>2]|0;do{if((Ea|0)==0){ua=79}else{Wq(Ea,v);pa=v+36|0;if(((xq(c[pa>>2]|0)|0)&e|0)==0){ua=79;break}Ba=c[pa>>2]&16777215;if((Ba|0)==14){ya=+g[la+112>>2];if(ya<+yp()){ua=79;break}if((c[oa>>2]&256|0)!=0){ua=79;break}}else if((Ba|0)==11|(Ba|0)==19){if((c[fa>>2]&192|0)!=0){g[la+112>>2]=+yp()+5.0}if((c[Aa>>2]|0)==(c[v>>2]|0)){ua=79;break}ya=+g[la+112>>2];if(ya<+yp()){ua=79;break}}else{if((c[la+72>>2]|0)!=(c[Da>>2]|0)){ua=79;break}ya=+g[la+112>>2];if(ya<+yp()){ua=79;break}if((c[la+68>>2]|0)!=(c[Aa>>2]|0)){ua=79;break}}c[u>>2]=0;Ma=Ea;Na=la+72|0;Oa=la+68|0;ua=96}}while(0);do{if((ua|0)==79){c[u>>2]=0;Yp(c[Aa>>2]|0)|0;Ea=la+72|0;Ca=la+68|0;ra=la+116|0;ma=la+120|0;qa=la+124|0;Ba=it(t,c[Aa>>2]|0,c[Ea>>2]|0,c[Ca>>2]|0,ra,ma,qa,d,e,la+128|0,c[la+768>>2]|0,u)|0;c[la+92>>2]=c[Aa>>2];c[la+100>>2]=0;c[oa>>2]=c[oa>>2]&-257;if((Ba|0)==0){c[b>>2]=0;c[Ea>>2]=c[Da>>2];c[Ca>>2]=c[Aa>>2];break}Wq(Ba,v);ya=+yp();pa=c[v+36>>2]|0;switch(pa&16777215|0){case 6:{Pa=6.0;break};case 11:{Pa=10.0;break};case 14:{Pa=8.0;break};case 12:{Pa=6.0;break};case 13:{Pa=6.0;break};case 18:{Pa=10.0;break};case 19:{Pa=10.0;break};case 2:case 3:case 4:case 7:case 5:case 8:case 9:case 10:{Pa=5.0;break};default:{ue[c[636260]&31](3,58728,(ga=i,i=i+8|0,c[ga>>2]=pa,ga)|0);i=ga;Pa=8.0}}g[la+112>>2]=ya+Pa;pa=(c[ra>>2]|0)==(Ba|0);ya=+g[ma>>2];xa=+yp();if(!pa){if(!(ya<xa)){Ma=Ba;Na=Ea;Oa=Ca;ua=96;break}c[ra>>2]=Ba;g[ma>>2]=+yp()+6.0;c[qa>>2]=1;Ma=Ba;Na=Ea;Oa=Ca;ua=96;break}if(ya>xa){Qa=(c[qa>>2]|0)+1|0}else{Qa=1}c[qa>>2]=Qa;g[ma>>2]=+yp()+6.0;Ma=Ba;Na=Ea;Oa=Ca;ua=96}}while(0);do{if((ua|0)==96){c[b>>2]=Ma;c[Na>>2]=c[Da>>2];c[Oa>>2]=c[Aa>>2];if((Ma|0)==0){break}Wq(Ma,v);Ca=v+36|0;Ea=c[Ca>>2]|0;c[ea>>2]=Ea;Ba=Ea&16777215;switch(Ba|0){case 2:{rt(y,la,v);Vx(a|0,y|0,52)|0;break};case 3:{Ea=o;Zx(Ea|0,0,52)|0;ma=p|0;g[ma>>2]=+g[v+24>>2]- +g[t>>2];qa=p+4|0;g[qa>>2]=+g[v+28>>2]- +g[la+4>>2];ra=p+8|0;g[ra>>2]=0.0;+dn(ma);qt(la,ma,1,o);pa=la+40|0;Au(c[pa>>2]|0);Ju(c[pa>>2]|0,ma,400.0);g[o+28>>2]=+g[ma>>2];g[o+32>>2]=+g[qa>>2];g[o+36>>2]=+g[ra>>2];ra=z;Vx(ra|0,Ea|0,52)|0;Vx(a|0,ra|0,52)|0;break};case 4:{st(A,la,v);Vx(a|0,A|0,52)|0;break};case 6:{Zx(r|0,0,12)|0;ra=n;Zx(ra|0,0,52)|0;Ea=p|0;g[Ea>>2]=+g[v+24>>2]- +g[t>>2];qa=p+4|0;g[qa>>2]=+g[v+28>>2]- +g[la+4>>2];ma=p+8|0;g[ma>>2]=+g[v+32>>2]- +g[la+8>>2];+dn(Ea);pa=q|0;g[pa>>2]=+g[Ea>>2];g[q+4>>2]=+g[qa>>2];g[q+8>>2]=+g[ma>>2]*3.0;gn(pa,n+40|0);pa=la+40|0;Ju(c[pa>>2]|0,r|0,0.0);Fu(c[pa>>2]|0);pa=n+20|0;c[pa>>2]=c[pa>>2]|1;g[n+28>>2]=+g[Ea>>2];g[n+32>>2]=+g[qa>>2];g[n+36>>2]=+g[ma>>2];ma=B;Vx(ma|0,ra|0,52)|0;Vx(a|0,ma|0,52)|0;break};case 7:{vt(C,la,v);Vx(a|0,C|0,52)|0;break};case 5:{yt(D,la,v);Vx(a|0,D|0,52)|0;break};case 8:{ma=m;Zx(ma|0,0,52)|0;ra=p|0;g[ra>>2]=+g[v+12>>2]- +g[t>>2];qa=p+4|0;g[qa>>2]=+g[v+16>>2]- +g[la+4>>2];Ea=p+8|0;g[Ea>>2]=+g[v+20>>2]- +g[la+8>>2];+dn(ra);qt(la,ra,1,m);Ju(c[la+40>>2]|0,ra,400.0);g[m+28>>2]=+g[ra>>2];g[m+32>>2]=+g[qa>>2];g[m+36>>2]=+g[Ea>>2];gn(ra,m+40|0);ra=m+20|0;c[ra>>2]=c[ra>>2]|2;ra=E;Vx(ra|0,ma|0,52)|0;Vx(a|0,ra|0,52)|0;break};case 9:{tt(F,la,v);Vx(a|0,F|0,52)|0;break};case 10:{At(G,la,v);Vx(a|0,G|0,52)|0;break};case 11:{Bt(H,la,v);Vx(a|0,H|0,52)|0;break};case 14:{Gt(I,la,v);Vx(a|0,I|0,52)|0;break};case 12:{Ht(J,la,v);Vx(a|0,J|0,52)|0;break};case 13:{It(K,la,v);Vx(a|0,K|0,52)|0;break};case 18:{ra=l;Zx(ra|0,0,52)|0;ma=p|0;g[ma>>2]=+g[v+12>>2]- +g[t>>2];Ea=p+4|0;g[Ea>>2]=+g[v+16>>2]- +g[la+4>>2];qa=p+8|0;g[qa>>2]=0.0;qt(la,ma,1,l);Ju(c[la+40>>2]|0,ma,400.0);g[l+28>>2]=+g[ma>>2];g[l+32>>2]=+g[Ea>>2];g[l+36>>2]=+g[qa>>2];qa=L;Vx(qa|0,ra|0,52)|0;Vx(a|0,qa|0,52)|0;break};case 19:{Et(M,la,v);Vx(a|0,M|0,52)|0;break};default:{ue[c[636260]&31](4,58728,(ga=i,i=i+8|0,c[ga>>2]=Ba,ga)|0);i=ga}}c[ea>>2]=c[Ca>>2];c[fa>>2]=c[fa>>2]|c[u>>2];break a}}while(0);c[aa>>2]=1;c[fa>>2]=c[fa>>2]|c[u>>2];Zx($|0,0,44)|0}}while(0);if((c[ca>>2]|0)!=0){ca=la+112|0;g[ca>>2]=+g[ca>>2]- +g[la+44>>2]*10.0}g[la+80>>2]=+g[t>>2];g[la+84>>2]=+g[la+4>>2];g[la+88>>2]=+g[la+8>>2];ha=44;ia=0;ja=44;ka=0;i=f;return}function Nt(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2544736+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,57128,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}else{c[e+116>>2]=0;c[e+120>>2]=0;c[e+124>>2]=0;i=b;return}}function Ot(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2544736+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,57128,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}d=e+120|0;f=+g[d>>2];if(!(f>0.0&f!=0.0)){i=b;return}g[d>>2]=0.0;d=e+124|0;e=c[d>>2]|0;if((e|0)<=0){i=b;return}c[d>>2]=e-1;i=b;return}function Pt(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2544736+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,57128,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}else{Zx(e|0,0,772)|0;i=b;return}}function Qt(){et();c[64872]=cv(52504,51552)|0;c[64876]=cv(50608,49856)|0;c[64898]=cv(49136,48288)|0;c[15490]=cv(47024,46048)|0;c[15494]=cv(45424,44568)|0;c[15492]=cv(43952,43312)|0;c[375998]=cv(42736,42152)|0;c[164922]=cv(41632,41224)|0;c[466012]=cv(40344,39712)|0;c[466014]=cv(39376,38824)|0;return 0}function Rt(){var a=0,b=0,d=0;a=1;do{b=2544736+(a<<2)|0;d=c[b>>2]|0;if((d|0)!=0){nv(d);c[b>>2]=0}a=a+1|0;}while((a|0)<65);return}function St(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,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;d=i;i=i+1680|0;e=d|0;f=d+1128|0;g=e|0;h=d+1064|0;j=f;k=~~+ev(40312,35488);if((k|0)<0){ue[c[636260]&31](3,30328,(l=i,i=i+8|0,c[l>>2]=k,l)|0);i=l;fv(40312,35488);m=32}else{m=k}k=~~+ev(26048,35488);if((k|0)<0){ue[c[636260]&31](3,22664,(l=i,i=i+8|0,c[l>>2]=k,l)|0);i=l;fv(26048,35488);n=32}else{n=k}ay(h|0,b|0,64)|0;hw(19536);b=bw(h)|0;if((b|0)==0){ue[c[636260]&31](3,17496,(l=i,i=i+8|0,c[l>>2]=h,l)|0);i=l;o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}k=(m*552|0)+16|0;v=mv((n*208|0)+k|0)|0;w=v;x=v+12|0;c[x>>2]=v+16;y=v+8|0;c[y>>2]=v+k;k=v;c[k>>2]=m;z=v+4|0;c[z>>2]=0;a:do{if((Yv(b,e)|0)!=0){A=f+4|0;while(1){if((Tx(g,60232)|0)==0){Zx(j|0,0,552)|0;if((Dw(b,8,j)|0)==0){B=11;break}C=c[A>>2]|0;if(!((C|0)>-1&(C|0)<(m|0))){B=13;break}Vx((c[x>>2]|0)+(C*552|0)|0,j|0,552)|0;c[(c[x>>2]|0)+((c[A>>2]|0)*552|0)>>2]=1}else{if((Tx(g,56896)|0)!=0){B=22;break}D=c[z>>2]|0;if((D|0)>=(n|0)){B=17;break}Zx((c[y>>2]|0)+(D*208|0)|0,0,208)|0;if((Dw(b,776,(c[y>>2]|0)+((c[z>>2]|0)*208|0)|0)|0)==0){B=19;break}c[z>>2]=(c[z>>2]|0)+1}if((Yv(b,e)|0)==0){break a}}if((B|0)==11){nv(v);cw(b);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}else if((B|0)==13){ue[c[636260]&31](3,58680,(l=i,i=i+16|0,c[l>>2]=C,c[l+8>>2]=h,l)|0);i=l;nv(v);cw(b);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}else if((B|0)==17){ue[c[636260]&31](3,55568,(l=i,i=i+16|0,c[l>>2]=n,c[l+8>>2]=h,l)|0);i=l;nv(v);cw(b);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}else if((B|0)==19){nv(v);cw(b);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}else if((B|0)==22){ue[c[636260]&31](3,54568,(l=i,i=i+16|0,c[l>>2]=g,c[l+8>>2]=h,l)|0);i=l;nv(v);cw(b);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}}}while(0);cw(b);b=c[k>>2]|0;b:do{if((b|0)>0){g=0;n=b;while(1){C=c[x>>2]|0;if((c[C+(g*552|0)>>2]|0)==0){E=n}else{F=C+(g*552|0)+8|0;if((a[F]|0)==0){B=26;break}e=C+(g*552|0)+180|0;if((a[e]|0)==0){B=30;break}j=c[z>>2]|0;c:do{if((j|0)>0){m=c[y>>2]|0;f=0;while(1){G=m+(f*208|0)|0;A=f+1|0;if((Tx(G,e)|0)==0){break}if((A|0)<(j|0)){f=A}else{H=A;I=j;break c}}Vx(C+(g*552|0)+344|0,G|0,208)|0;H=f;I=c[z>>2]|0}else{H=0;I=j}}while(0);if((H|0)==(I|0)){B=36;break}E=c[k>>2]|0}j=g+1|0;if((j|0)<(E|0)){g=j;n=E}else{J=E;break b}}if((B|0)==26){ue[c[636260]&31](3,53528,(l=i,i=i+16|0,c[l>>2]=g,c[l+8>>2]=h,l)|0);i=l;nv(v);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}else if((B|0)==30){ue[c[636260]&31](3,52464,(l=i,i=i+16|0,c[l>>2]=F,c[l+8>>2]=h,l)|0);i=l;nv(v);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}else if((B|0)==36){ue[c[636260]&31](3,51504,(l=i,i=i+16|0,c[l>>2]=(c[x>>2]|0)+(g*552|0)+8,c[l+8>>2]=h,l)|0);i=l;nv(v);o=0;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}}else{J=b}}while(0);if((J|0)==0){ue[c[636260]&31](2,50584,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l}ue[c[636260]&31](1,49840,(l=i,i=i+8|0,c[l>>2]=h,l)|0);i=l;o=w;p=552;q=0;r=64;s=0;t=1060;u=0;i=d;return o|0}function Tt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,56824,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=11;i=d;return f|0}g=c[2544472+(a<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,46976,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=11;i=d;return f|0}a=g|0;h=c[a>>2]|0;if((h|0)!=0){cu(h)}h=c[g+4>>2]|0;if((h|0)!=0){nv(h)}h=eu(b)|0;c[a>>2]=h;if((h|0)==0){ue[c[636260]&31](4,49104,(e=i,i=i+8|0,c[e>>2]=b,e)|0);i=e;f=11;i=d;return f|0}e=c[15488]|0;if((e|0)==0){f=12;i=d;return f|0}b=e|0;a=kv(c[b>>2]<<2)|0;if((c[b>>2]|0)>0){j=e+12|0;e=0;do{c[a+(e<<2)>>2]=fu(h,(c[j>>2]|0)+(e*552|0)+8|0)|0;e=e+1|0;}while((e|0)<(c[b>>2]|0))}c[g+4>>2]=a;f=0;i=d;return f|0}function Ut(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;do{if((b|0)>=1){f=c[15488]|0;if((c[f>>2]|0)<(b|0)){break}if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,56824,(g=i,i=i+8|0,c[g>>2]=a,g)|0);i=g;i=e;return}if((c[2544472+(a<<2)>>2]|0)==0){ue[c[636260]&31](4,46976,(g=i,i=i+8|0,c[g>>2]=a,g)|0);i=g;i=e;return}if((f|0)==0){i=e;return}Vx(d|0,(c[f+12>>2]|0)+(b*552|0)|0,552)|0;i=e;return}}while(0);ue[c[636260]&31](3,46896,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;i=e;return}function Vt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0.0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,56824,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}g=c[2544472+(a<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,46976,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}e=c[15488]|0;if((e|0)==0){f=0;i=d;return f|0}a=g|0;if((c[a>>2]|0)==0){f=0;i=d;return f|0}h=e|0;if((c[h>>2]|0)<=0){f=0;i=d;return f|0}j=e+12|0;e=g+4|0;g=0;k=0.0;l=0;while(1){do{if((c[(c[j>>2]|0)+(l*552|0)>>2]|0)==0){m=k;n=g}else{o=c[(c[e>>2]|0)+(l<<2)>>2]|0;if((o|0)<0){m=k;n=g;break}p=+iu(b,c[a>>2]|0,o);if(!(p>k)){m=k;n=g;break}m=p;n=l}}while(0);o=l+1|0;if((o|0)<(c[h>>2]|0)){g=n;k=m;l=o}else{f=n;break}}i=d;return f|0}function Wt(a){a=a|0;return}function Xt(){var a=0,b=0,d=0,e=0,f=0;a=1;while(1){b=2544472+(a<<2)|0;d=a+1|0;if((c[b>>2]|0)==0){break}if((d|0)<65){a=d}else{e=0;f=5;break}}if((f|0)==5){return e|0}c[b>>2]=kv(8)|0;e=a;return e|0}function Yt(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,56824,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=2544472+(a<<2)|0;f=c[e>>2]|0;if((f|0)==0){ue[c[636260]&31](4,46976,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}d=c[f>>2]|0;if((d|0)!=0){cu(d)}d=c[f+4>>2]|0;if((d|0)!=0){nv(d)}nv(c[e>>2]|0);c[e>>2]=0;i=b;return}function Zt(){var a=0,b=0,d=0;a=i;b=St(dv(48272,47008)|0)|0;c[15488]=b;if((b|0)!=0){d=0;i=a;return d|0}ue[c[636260]&31](4,46008,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;d=12;i=a;return d|0}function _t(){var a=0,b=0,d=0,e=0;a=c[15488]|0;if((a|0)!=0){nv(a)}c[15488]=0;a=1;do{b=2544472+(a<<2)|0;d=c[b>>2]|0;if((d|0)!=0){e=c[d>>2]|0;if((e|0)!=0){cu(e)}e=c[d+4>>2]|0;if((e|0)!=0){nv(e)}nv(c[b>>2]|0);c[b>>2]=0}a=a+1|0;}while((a|0)<65);return}function $t(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0;d=i;i=i+1064|0;e=d|0;f=e|0;a:do{if(($v(a,e)|0)==0){h=0}else{do{if((Tx(f,46472)|0)==0){sv(a,56728,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;if(($v(a,e)|0)!=0){break}rv(a,46816,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;h=0;break a}}while(0);if((c[e+1024>>2]|0)==3){g[b>>2]=+g[e+1036>>2];h=1;break}else{rv(a,40232,(j=i,i=i+8|0,c[j>>2]=f,j)|0);i=j;h=0;break}}}while(0);i=d;return h|0}function au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0;d=b+8|0;do{if((Av(a,35424)|0)==0){c[d>>2]=0;e=b+12|0;if(($t(a,e)|0)==0){f=0;return f|0}else{h=+g[e>>2];g[b+16>>2]=h;g[b+20>>2]=h;break}}else{c[d>>2]=1;if((Zv(a,30272)|0)==0){f=0;return f|0}if(($t(a,b+12|0)|0)==0){f=0;return f|0}if((Zv(a,25952)|0)==0){f=0;return f|0}if(($t(a,b+16|0)|0)==0){f=0;return f|0}if((Zv(a,25952)|0)==0){f=0;return f|0}if(($t(a,b+20|0)|0)==0){f=0;return f|0}if((Zv(a,22576)|0)==0){f=0}else{break}return f|0}}while(0);f=(Zv(a,19488)|0)!=0|0;return f|0}function bu(a){a=a|0;var b=0;if((a|0)==0){return}b=c[a+24>>2]|0;if((b|0)!=0){bu(b)}b=c[a+28>>2]|0;if((b|0)!=0){bu(b)}nv(a);return}function cu(a){a=a|0;var b=0,d=0,e=0;if(!(+bv(17448)!=0.0)){return}b=a|0;if((c[b>>2]|0)>0){d=0;do{bu(c[a+4+(d<<3)+4>>2]|0);e=c[a+4+(d<<3)>>2]|0;if((e|0)!=0){nv(e)}d=d+1|0;}while((d|0)<(c[b>>2]|0))}nv(a);return}function du(a){a=a|0;var b=0,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;b=i;i=i+1064|0;d=b|0;e=d|0;do{if((Zv(a,30272)|0)==0){f=0}else{if((_v(a,3,4096,d)|0)==0){f=0;break}h=d+1032|0;j=c[h>>2]|0;if((Zv(a,22576)|0)==0){f=0;break}if((Zv(a,60200)|0)==0){f=0;break}if(($v(a,d)|0)==0){f=0;break}else{k=0;l=0;m=0}while(1){n=(Tx(e,58656)|0)==0;if(!n){if((Tx(e,56816)|0)!=0){o=33;break}}p=kv(32)|0;q=p;c[p>>2]=j;if((l|0)==0){r=q}else{c[l+28>>2]=q;r=k}if(n){if((m|0)!=0){o=12;break}c[p+4>>2]=999999;s=1}else{if((_v(a,3,4096,d)|0)==0){o=15;break}c[p+4>>2]=c[h>>2];s=m}if((Zv(a,54552)|0)==0){o=19;break}if(($v(a,d)|0)==0){o=19;break}if((Tx(e,60200)|0)==0){if(($v(a,d)|0)==0){o=22;break}else{t=1}}else{t=0}if((Tx(e,53520)|0)==0){if((au(a,q)|0)==0){o=25;break}}else{if((Tx(e,52456)|0)!=0){o=29;break}n=du(a)|0;c[p+24>>2]=n;if((n|0)==0){o=28;break}}if((t|0)!=0){if((Zv(a,50576)|0)==0){o=32;break}}if(($v(a,d)|0)==0){o=35;break}if((Tx(e,50576)|0)==0){o=37;break}else{k=r;l=q;m=s}}if((o|0)==12){rv(a,55520,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;bu(r);f=0;break}else if((o|0)==15){bu(r);f=0;break}else if((o|0)==19){bu(r);f=0;break}else if((o|0)==22){bu(r);f=0;break}else if((o|0)==25){bu(r);f=0;break}else if((o|0)==28){bu(r);f=0;break}else if((o|0)==29){rv(a,51456,(u=i,i=i+8|0,c[u>>2]=e,u)|0);i=u;f=0;break}else if((o|0)==32){bu(r);f=0;break}else if((o|0)==33){bu(k);rv(a,51456,(u=i,i=i+8|0,c[u>>2]=e,u)|0);i=u;f=0;break}else if((o|0)==35){bu(r);f=0;break}else if((o|0)==37){if((s|0)!=0){f=r;break}sv(a,49816,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;h=kv(32)|0;q=h;c[h>>2]=j;c[h+4>>2]=999999;g[h+12>>2]=0.0;c[h+28>>2]=0;c[h+24>>2]=0;if((p|0)==0){f=q;break}c[p+28>>2]=q;f=r;break}}}while(0);i=b;return f|0}function eu(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;b=i;i=i+1064|0;d=b|0;e=d|0;do{if(+bv(17448)!=0.0){f=0}else{g=-1;h=0;while(1){j=c[61440+(h<<2)>>2]|0;if((j|0)==0){k=(g|0)==-1?h:g}else{if((Tx(a,j+1028|0)|0)==0){l=j;m=86;break}else{k=g}}j=h+1|0;if((j|0)<128){g=k;h=j}else{break}}if((m|0)==86){n=1060;o=0;i=b;return l|0}if(!((k|0)==-1)){f=k;break}ue[c[636260]&31](3,49056,(p=i,i=i+8|0,c[p>>2]=a,p)|0);i=p;l=0;n=1060;o=0;i=b;return l|0}}while(0);hw(48256);k=bw(a)|0;if((k|0)==0){ue[c[636260]&31](3,46952,(p=i,i=i+8|0,c[p>>2]=a,p)|0);i=p;l=0;n=1060;o=0;i=b;return l|0}h=kv(1092)|0;g=h;j=h;c[j>>2]=0;rn(h+1028|0,a,64);a:do{if((Yv(k,d)|0)!=0){q=h+4|0;while(1){if((Tx(e,46e3)|0)!=0){m=77;break}if((c[j>>2]|0)>127){m=14;break}if((_v(k,1,0,d)|0)==0){m=16;break}sw(e);r=kv((Wx(e|0)|0)+1|0)|0;c[q+(c[j>>2]<<3)>>2]=r;by(r|0,e|0)|0;if(($v(k,d)|0)==0){m=24;break}if((Tx(e,60200)|0)==0){if(($v(k,d)|0)==0){m=33;break}else{s=1}}else{s=0}if((Tx(e,52456)|0)==0){r=du(k)|0;if((r|0)==0){m=42;break}c[q+(c[j>>2]<<3)+4>>2]=r}else{if((Tx(e,53520)|0)!=0){m=60;break}t=kv(32)|0;r=t;c[t>>2]=0;c[t+4>>2]=999999;c[t+28>>2]=0;c[t+24>>2]=0;if((au(k,r)|0)==0){m=52;break}c[q+(c[j>>2]<<3)+4>>2]=r}if((s|0)!=0){if((Zv(k,50576)|0)==0){m=69;break}}c[j>>2]=(c[j>>2]|0)+1;if((Yv(k,d)|0)==0){break a}}if((m|0)==14){sv(k,45392,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;break}else if((m|0)==16){if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==24){if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==33){if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==42){if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==52){nv(t);if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==60){rv(k,51456,(p=i,i=i+8|0,c[p>>2]=e,p)|0);i=p;if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==69){if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}else if((m|0)==77){rv(k,51456,(p=i,i=i+8|0,c[p>>2]=e,p)|0);i=p;if(+bv(17448)!=0.0){if((c[j>>2]|0)>0){q=0;do{bu(c[g+4+(q<<3)+4>>2]|0);r=c[g+4+(q<<3)>>2]|0;if((r|0)!=0){nv(r)}q=q+1|0;}while((q|0)<(c[j>>2]|0))}nv(h)}cw(k);l=0;n=1060;o=0;i=b;return l|0}}}while(0);cw(k);ue[c[636260]&31](1,44544,(p=i,i=i+8|0,c[p>>2]=a,p)|0);i=p;if(+bv(17448)!=0.0){l=g;n=1060;o=0;i=b;return l|0}c[61440+(f<<2)>>2]=g;l=g;n=1060;o=0;i=b;return l|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a>>2]|0;if((d|0)>0){e=0}else{f=-1;return f|0}while(1){g=e+1|0;if((Tx(c[a+4+(e<<3)>>2]|0,b)|0)==0){f=e;h=4;break}if((g|0)<(d|0)){e=g}else{f=-1;h=4;break}}if((h|0)==4){return f|0}return 0}function gu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0;d=b;while(1){e=c[a+(c[d>>2]<<2)>>2]|0;f=c[d+4>>2]|0;if((e|0)<(f|0)){b=c[d+24>>2]|0;if((b|0)==0){h=4;break}else{d=b;continue}}i=c[d+28>>2]|0;if((i|0)==0){h=15;break}j=c[i+4>>2]|0;if((e|0)<(j|0)){h=7;break}else{d=i}}if((h|0)==4){k=+g[d+12>>2];return+k}else if((h|0)==7){b=c[d+24>>2]|0;if((b|0)==0){l=+g[d+12>>2]}else{l=+gu(a,b)}b=c[i+24>>2]|0;if((b|0)==0){m=+g[i+12>>2]}else{m=+gu(a,b)}if((j|0)==999999){k=m;return+k}n=+(e-f|0)/+(j-f|0);k=m*n+l*(1.0-n);return+k}else if((h|0)==15){k=+g[d+12>>2];return+k}return 0.0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0;d=b;while(1){e=d|0;b=c[a+(c[e>>2]<<2)>>2]|0;f=d+4|0;if((b|0)<(c[f>>2]|0)){h=c[d+24>>2]|0;if((h|0)==0){i=4;break}else{d=h;continue}}j=d+28|0;h=c[j>>2]|0;if((h|0)==0){i=15;break}if((b|0)<(c[h+4>>2]|0)){i=7;break}else{d=h}}if((i|0)==4){h=d+16|0;k=+g[h>>2];l=+((Yx()|0)&32767|0)/32767.0;m=k+l*(+g[d+20>>2]- +g[h>>2]);return+m}else if((i|0)==7){h=c[d+24>>2]|0;if((h|0)==0){b=d+16|0;l=+g[b>>2];k=+((Yx()|0)&32767|0)/32767.0;n=l+k*(+g[d+20>>2]- +g[b>>2])}else{n=+hu(a,h)}h=c[j>>2]|0;b=c[h+24>>2]|0;if((b|0)==0){k=+g[h+16>>2];l=+((Yx()|0)&32767|0)/32767.0;o=c[j>>2]|0;p=k+l*(+g[o+20>>2]- +g[o+16>>2]);q=o}else{p=+gu(a,b);q=h}h=c[q+4>>2]|0;if((h|0)==999999){m=p;return+m}q=c[f>>2]|0;l=+((c[a+(c[e>>2]<<2)>>2]|0)-q|0)/+(h-q|0);m=p*l+n*(1.0-l);return+m}else if((i|0)==15){m=+g[d+12>>2];return+m}return 0.0}function iu(a,b,d){a=a|0;b=b|0;d=d|0;return+(+gu(a,c[b+4+(d<<3)+4>>2]|0))}function ju(a,b,d){a=a|0;b=b|0;d=d|0;return+(+hu(a,c[b+4+(d<<3)+4>>2]|0))}function ku(a){a=a|0;var b=0,d=0,e=0.0,f=0,h=0.0,i=0,j=0.0,k=0.0,l=0.0;b=a;do{a=c[b+24>>2]|0;do{if((a|0)==0){if((c[b+8>>2]|0)!=1){break}d=+((Yx()|0)&32767|0)/32767.0<.01;e=(+((Yx()|0)&32767|0)/32767.0+-.5)*2.0;f=b+20|0;h=+g[f>>2];i=b+16|0;j=+g[i>>2];k=e*(h-j);if(d){d=b+12|0;e=k+ +g[d>>2];g[d>>2]=e;l=e}else{d=b+12|0;e=k*.5+ +g[d>>2];g[d>>2]=e;l=e}if(l<j){g[i>>2]=l;break}if(!(l>h)){break}g[f>>2]=l}else{ku(a)}}while(0);b=c[b+28>>2]|0;}while((b|0)!=0);return}function lu(a){a=a|0;var b=0,d=0;b=a|0;if((c[b>>2]|0)>0){d=0}else{return}do{ku(c[a+4+(d<<3)+4>>2]|0);d=d+1|0;}while((d|0)<(c[b>>2]|0));return}function mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,j=0,k=0,l=0;e=i;a:do{if((c[a+24>>2]|0)==0){if((c[a+8>>2]|0)!=1){break}do{if((c[b+8>>2]|0)==1){if((c[d+8>>2]|0)!=1){break}f=(+g[a+12>>2]+ +g[b+12>>2])*.5;g[d+12>>2]=f;h=d+20|0;if(f>+g[h>>2]){g[h>>2]=f}h=d+16|0;if(!(f>+g[h>>2])){break a}g[h>>2]=f;break a}}while(0);ue[c[636260]&31](3,43248,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=0;i=e;return k|0}else{h=c[b+24>>2]|0;do{if((h|0)!=0){l=c[d+24>>2]|0;if((l|0)==0){break}if((mu(h,h,l)|0)==0){k=0}else{break a}i=e;return k|0}}while(0);ue[c[636260]&31](3,43888,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=0;i=e;return k|0}}while(0);h=c[a+28>>2]|0;b:do{if((h|0)!=0){a=c[b+28>>2]|0;do{if((a|0)!=0){l=c[d+28>>2]|0;if((l|0)==0){break}if((mu(h,a,l)|0)==0){k=0}else{break b}i=e;return k|0}}while(0);ue[c[636260]&31](3,42680,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=0;i=e;return k|0}}while(0);k=1;i=e;return k|0}function nu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;f=a|0;g=c[f>>2]|0;do{if((g|0)==(c[b>>2]|0)){if((g|0)!=(c[d>>2]|0)){break}if((g|0)>0){h=0}else{i=e;return}do{mu(c[a+4+(h<<3)+4>>2]|0,c[b+4+(h<<3)+4>>2]|0,c[d+4+(h<<3)+4>>2]|0)|0;h=h+1|0;}while((h|0)<(c[f>>2]|0));i=e;return}}while(0);ue[c[636260]&31](3,42088,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=e;return}function ou(){var a=0,b=0,d=0,e=0,f=0,g=0;a=0;do{b=61440+(a<<2)|0;d=c[b>>2]|0;if((d|0)!=0){e=d|0;if((c[e>>2]|0)>0){f=0;do{bu(c[d+4+(f<<3)+4>>2]|0);g=c[d+4+(f<<3)>>2]|0;if((g|0)!=0){nv(g)}f=f+1|0;}while((f|0)<(c[e>>2]|0))}nv(d);c[b>>2]=0}a=a+1|0;}while((a|0)<128);return}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;e=c[636267]|0;f=Hn(45944,(g=i,i=i+8|0,c[g>>2]=b,g)|0)|0;i=g;ae[e&127](a,f);i=d;return}function qu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;e=c[636267]|0;f=Hn(56632,(g=i,i=i+8|0,c[g>>2]=b,g)|0)|0;i=g;ae[e&127](a,f);i=d;return}function ru(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|131072;return}function su(a,b){a=a|0;b=b|0;ae[c[636267]&127](a,b);return}function tu(a,b){a=a|0;b=b|0;c[(c[636258]|0)+(a*40|0)+36>>2]=b;return}function uu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|1;return}function vu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|65536;return}function wu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|2;return}function xu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|8;return}function yu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;a=c[b>>2]|0;c[b>>2]=(a&268435456|0)==0?a|16:a&-17;return}function zu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;a=c[b>>2]|0;c[b>>2]=(a&268435456|0)==0?a|32768:a&-32769;return}function Au(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|128;return}function Bu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|524288;return}function Cu(a,b){a=a|0;b=b|0;var d=0;d=(c[636258]|0)+(a*40|0)+32|0;c[d>>2]=c[d>>2]|b;return}function Du(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|32;return}function Eu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|256;return}function Fu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|512;return}function Gu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|2048;return}function Hu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|4096;return}function Iu(a){a=a|0;var b=0;b=(c[636258]|0)+(a*40|0)+32|0;c[b>>2]=c[b>>2]|8192;return}function Ju(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0;e=c[636258]|0;g[e+(a*40|0)+4>>2]=+g[b>>2];g[e+(a*40|0)+8>>2]=+g[b+4>>2];g[e+(a*40|0)+12>>2]=+g[b+8>>2];do{if(d>400.0){f=400.0}else{if(!(d<-400.0)){f=d;break}f=-400.0}}while(0);g[e+(a*40|0)+16>>2]=f;return}function Ku(a,b){a=a|0;b=b|0;var d=0;d=c[636258]|0;g[d+(a*40|0)+20>>2]=+g[b>>2];g[d+(a*40|0)+24>>2]=+g[b+4>>2];g[d+(a*40|0)+28>>2]=+g[b+8>>2];return}function Lu(a,b){a=a|0;b=+b;return}function Mu(a,b,d){a=a|0;b=+b;d=d|0;var e=0;e=(c[636258]|0)+(a*40|0)|0;g[e>>2]=b;Vx(d|0,e|0,40)|0;return}function Nu(a){a=a|0;var b=0,d=0;b=c[636258]|0;d=b+(a*40|0)+32|0;Zx(b+(a*40|0)|0,0,20)|0;c[d>>2]=c[d>>2]<<24&268435456;return}function Ou(){c[636258]=mv((c[636254]|0)*40|0)|0;return 0}function Pu(){nv(c[636258]|0);c[636258]=0;return}function Qu(){return((Lb()|0)*1e3|0|0)/1e6|0|0}function Ru(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;i=i+4096|0;d=~~+bv(40216);c[636484]=d;Zx(2545008,0,16)|0;if((d|0)!=0){d=b|0;e=av(35416)|0;f=av(30264)|0;g=av(25936)|0;do{if((a[e]|0)==0){xn(d,4096,17432,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h}else{if((a[f]|0)!=0){xn(d,4096,22552,(h=i,i=i+32|0,c[h>>2]=e,c[h+8>>2]=47,c[h+16>>2]=f,c[h+24>>2]=47,h)|0)|0;i=h;break}if((a[g]|0)==0){xn(d,4096,19464,(h=i,i=i+24|0,c[h>>2]=e,c[h+8>>2]=47,c[h+16>>2]=47,h)|0)|0;i=h;break}else{xn(d,4096,22552,(h=i,i=i+32|0,c[h>>2]=e,c[h+8>>2]=47,c[h+16>>2]=g,c[h+24>>2]=47,h)|0)|0;i=h;break}}}while(0);gv(d);}ue[c[636260]&31](1,60160,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;c[636254]=~~+ev(58640,56808);c[636253]=~~+ev(55504,54544);h=Bp()|0;if((h|0)!=0){j=h;i=b;return j|0}h=Ou()|0;if((h|0)!=0){j=h;i=b;return j|0}h=Zt()|0;if((h|0)!=0){j=h;i=b;return j|0}h=Ys()|0;if((h|0)!=0){j=h;i=b;return j|0}h=qs()|0;if((h|0)!=0){j=h;i=b;return j|0}h=Qt()|0;if((h|0)!=0){j=h;i=b;return j|0}c[636250]=1;c[636252]=1;j=0;i=b;return j|0}function Su(){var a=0,b=0,d=0;a=i;if((c[636252]|0)==0){ue[c[636260]&31](3,46752,(b=i,i=i+8|0,c[b>>2]=53496,b)|0);i=b;d=1;i=a;return d|0}else{rs();Rt();Zs();_t();ou();Gr();Cp();Pu();$u();Dv();hv();c[636250]=0;c[636252]=0;iw();d=0;i=a;return d|0}return 0}function Tu(a,b){a=a|0;b=b|0;fv(a,b);return 0}function Uu(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;e=d-1|0;ay(c|0,av(b)|0,e|0)|0;a[c+e|0]=0;return 0}function Vu(a){a=+a;var b=0,d=0,e=0;b=i;if((c[636252]|0)==0){ue[c[636260]&31](3,46752,(d=i,i=i+8|0,c[d>>2]=52432,d)|0);i=d;e=1;i=b;return e|0}else{e=xp(a)|0;i=b;return e|0}return 0}function Wu(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=c[636260]|0;if((c[636252]|0)==0){ue[d&31](3,46752,(e=i,i=i+8|0,c[e>>2]=51424,e)|0);i=e;f=1;i=b;return f|0}ue[d&31](1,50528,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;d=Ap(a)|0;if((d|0)!=0){f=d;i=b;return f|0}ys();et();ue[c[636260]&31](1,49760,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=0;i=b;return f|0}function Xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;if((c[636252]|0)==0){ue[c[636260]&31](3,46752,(e=i,i=i+8|0,c[e>>2]=49024,e)|0);i=e;f=1;i=d;return f|0}g=c[636253]|0;if((a|0)<0|(g|0)<(a|0)){ue[c[636260]&31](3,56560,(e=i,i=i+24|0,c[e>>2]=49024,c[e+8>>2]=a,c[e+16>>2]=g,e)|0);i=e;f=2;i=d;return f|0}else{f=fp(a,b)|0;i=d;return f|0}return 0}function Yu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;Vx(2545040,b|0,88)|0;Zx(2550048,0,536)|0;if((a|0)==2){c[637512]=72;c[637513]=8;c[637514]=22;c[637515]=4;c[637516]=10;c[637517]=4;c[637518]=4;c[637519]=22;c[637520]=20;c[637521]=16;c[637522]=62;c[637523]=16;c[637524]=8;c[637525]=26;c[637526]=30;c[637527]=6;c[637528]=12;c[637529]=42;c[637530]=4;c[637531]=4;c[637532]=36;c[637533]=4;c[637534]=8;c[637535]=14;c[637536]=40;c[637537]=42;c[637538]=6;c[637539]=80;c[637540]=16;c[637541]=76;c[637542]=74;c[637549]=94;c[637543]=34;c[637544]=70;c[637545]=26;c[637546]=56;c[637547]=42;c[637548]=58;c[637550]=62;c[637551]=116;c[637552]=106;c[637553]=4;c[637554]=18;c[637556]=4;c[637555]=4;c[637557]=82;c[637558]=4;c[637559]=60;c[637560]=4;c[637561]=4;c[637562]=8;c[637563]=6;c[637564]=4;c[637565]=14;c[637566]=98;c[637567]=18;c[637568]=4;c[637569]=48;c[637570]=26;c[637571]=4;c[637572]=18;c[637573]=4;c[637574]=24;c[637575]=14;c[637576]=4;c[637577]=22;c[637578]=16;c[637579]=8;c[637580]=112;c[637581]=46;c[637582]=10;c[637583]=10;c[637584]=24;c[637585]=46;c[637586]=48;c[637587]=36;c[637588]=38;c[637589]=84;c[637590]=44;c[637591]=64;c[637592]=24;c[637593]=16;c[637594]=40;c[637595]=38;c[637596]=14;c[637597]=4;c[637598]=26;c[637599]=8;c[637600]=36;c[637601]=44;c[637602]=16;c[637603]=6;c[637604]=6;c[637605]=106;c[637606]=14;c[637607]=24;c[637608]=20;c[637609]=20;c[637610]=68;c[637611]=6;c[637612]=52;c[637613]=86;c[637614]=96;c[637615]=6;c[637616]=4;c[637617]=4;c[637618]=102;c[637619]=22;c[637620]=4;c[637621]=8;c[637622]=24;c[637623]=32;c[637624]=56;c[637625]=4;c[637626]=4;c[637627]=10;c[637628]=52;c[637629]=26;c[637630]=10;c[637631]=14;c[637632]=6;c[637633]=28;c[637634]=22;c[637635]=28;c[637636]=18;c[637637]=34;c[637638]=50;c[637639]=22;c[637640]=6;c[637641]=4;c[637642]=4;c[637643]=40;c[637644]=10;c[637645]=20;e=2550048;i=d;return e|0}else{ue[c[636260]&31](3,48184,(b=i,i=i+16|0,c[b>>2]=2,c[b+8>>2]=a,b)|0);i=b;e=0;i=d;return e|0}return 0}function _u(a,c){a=a|0;c=c|0;var e=0,f=0,g=0,h=0,i=0;if((c|0)>0){e=-1;f=0}else{g=-1;return g|0}while(1){h=b[7744+(((d[a+f|0]|0)^(e&65535)>>>8)<<1)>>1]^e<<8;i=f+1|0;if((i|0)<(c|0)){e=h;f=i}else{g=h;break}}return g|0}function $u(){var a=0,b=0;a=c[193338]|0;if((a|0)==0){c[193338]=0;return}else{b=a}do{c[193338]=c[b+20>>2];a=c[b+4>>2]|0;if((a|0)!=0){nv(a)}nv(c[b>>2]|0);nv(b);b=c[193338]|0;}while((b|0)!=0);c[193338]=0;return}function av(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[193338]|0;if((b|0)==0){d=2551504;return d|0}else{e=b}while(1){if((tn(c[e>>2]|0,a)|0)==0){break}b=c[e+20>>2]|0;if((b|0)==0){d=2551504;f=5;break}else{e=b}}if((f|0)==5){return d|0}d=c[e+4>>2]|0;return d|0}function bv(a){a=a|0;var b=0,d=0.0,e=0,f=0;b=c[193338]|0;if((b|0)==0){d=0.0;return+d}else{e=b}while(1){if((tn(c[e>>2]|0,a)|0)==0){break}b=c[e+20>>2]|0;if((b|0)==0){d=0.0;f=5;break}else{e=b}}if((f|0)==5){return+d}d=+g[e+16>>2];return+d}function cv(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;e=c[193338]|0;a:do{if((e|0)!=0){f=e;while(1){if((tn(c[f>>2]|0,b)|0)==0){h=f;break}f=c[f+20>>2]|0;if((f|0)==0){break a}}return h|0}}while(0);e=jv(24)|0;f=e;Zx(e|0,0,24)|0;i=jv((Wx(b|0)|0)+1|0)|0;c[e>>2]=i;by(i|0,b|0)|0;c[e+20>>2]=c[193338];c[193338]=f;b=jv((Wx(d|0)|0)+1|0)|0;i=e+4|0;c[i>>2]=b;by(b|0,d|0)|0;d=c[i>>2]|0;i=a[d]|0;b:do{if(i<<24>>24==0){j=0.0}else{b=d;k=0;l=0.0;m=i;while(1){n=(k|0)==0;do{if((m-48&255)>>>0>9>>>0){if(!(n&m<<24>>24==46)){j=0.0;break b}o=b+1|0;p=o;q=10;r=a[o]|0;s=9}else{if(!n){p=b;q=k;r=m;s=9;break}t=l*10.0+ +((m<<24>>24)-48|0);u=0;v=b}}while(0);if((s|0)==9){s=0;t=l+ +((r<<24>>24)-48|0)/+(q|0);u=q*10|0;v=p}n=v+1|0;o=a[n]|0;if(o<<24>>24==0){j=t;break}else{b=n;k=u;l=t;m=o}}}}while(0);g[e+16>>2]=j;c[e+12>>2]=1;h=f;return h|0}function dv(a,b){a=a|0;b=b|0;return c[(cv(a,b)|0)+4>>2]|0}function ev(a,b){a=a|0;b=b|0;return+(+g[(cv(a,b)|0)+16>>2])}function fv(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0;e=c[193338]|0;a:do{if((e|0)==0){f=5}else{h=e;while(1){if((tn(c[h>>2]|0,b)|0)==0){break}i=c[h+20>>2]|0;if((i|0)==0){f=5;break a}else{h=i}}nv(c[h+4>>2]|0);j=h}}while(0);if((f|0)==5){e=jv(24)|0;i=e;Zx(e|0,0,24)|0;k=jv((Wx(b|0)|0)+1|0)|0;c[e>>2]=k;by(k|0,b|0)|0;c[e+20>>2]=c[193338];c[193338]=i;j=i}i=jv((Wx(d|0)|0)+1|0)|0;e=j+4|0;c[e>>2]=i;by(i|0,d|0)|0;d=c[e>>2]|0;e=a[d]|0;if(e<<24>>24==0){l=0.0;m=j+16|0;g[m>>2]=l;n=j+12|0;c[n>>2]=1;return}else{o=d;p=0;q=0.0;r=e}b:while(1){e=(p|0)==0;do{if((r-48&255)>>>0>9>>>0){if(!(e&r<<24>>24==46)){l=0.0;f=14;break b}d=o+1|0;s=d;t=10;u=a[d]|0;f=11}else{if(!e){s=o;t=p;u=r;f=11;break}v=q*10.0+ +((r<<24>>24)-48|0);w=0;x=o}}while(0);if((f|0)==11){f=0;v=q+ +((u<<24>>24)-48|0)/+(t|0);w=t*10|0;x=s}e=x+1|0;h=a[e]|0;if(h<<24>>24==0){l=v;f=14;break}else{o=e;p=w;q=v;r=h}}if((f|0)==14){m=j+16|0;g[m>>2]=l;n=j+12|0;c[n>>2]=1;return}}function gv(b){b=b|0;var d=0,e=0,f=0;d=i;if(!(+ev(45808,56528)!=0.0)){i=d;return}do{if((b|0)!=0){if((a[b]|0)==0){break}if((c[191094]|0)!=0){ue[c[636260]&31](3,40176,(e=i,i=i+8|0,c[e>>2]=763352,e)|0);i=e;i=d;return}f=zc(b|0,35392)|0;c[191094]=f;if((f|0)==0){ue[c[636260]&31](3,30216,(e=i,i=i+8|0,c[e>>2]=b,e)|0);i=e;i=d;return}else{ay(763352,b|0,1024)|0;ue[c[636260]&31](1,25920,(e=i,i=i+8|0,c[e>>2]=763352,e)|0);i=e;i=d;return}}}while(0);ue[c[636260]&31](1,46728,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;i=d;return}function hv(){var a=0,b=0,d=0;a=i;b=c[191094]|0;if((b|0)==0){i=a;return}if((Ta(b|0)|0)==0){c[191094]=0;ue[c[636260]&31](1,19448,(d=i,i=i+8|0,c[d>>2]=763352,d)|0);i=d;i=a;return}else{ue[c[636260]&31](3,22520,(d=i,i=i+8|0,c[d>>2]=763352,d)|0);i=d;i=a;return}}function iv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;if((c[191094]|0)==0){i=d;return}f=e;c[f>>2]=b;c[f+4>>2]=0;Wc(c[191094]|0,a|0,e|0)|0;Wa(c[191094]|0)|0;i=d;return}function jv(a){a=a|0;var b=0,d=0;b=be[c[636268]&127](a+4|0)|0;if((b|0)==0){d=0;return d|0}c[b>>2]=305419896;d=b+4|0;return d|0}function kv(a){a=a|0;var b=0,d=0;b=be[c[636268]&127](a+4|0)|0;if((b|0)==0){d=0}else{c[b>>2]=305419896;d=b+4|0}Zx(d|0,0,a|0)|0;return d|0}function lv(a){a=a|0;var b=0,d=0;b=be[c[636271]&127](a+4|0)|0;if((b|0)==0){d=0;return d|0}c[b>>2]=-2023406815;d=b+4|0;return d|0}function mv(a){a=a|0;var b=0,d=0;b=be[c[636271]&127](a+4|0)|0;if((b|0)==0){d=0}else{c[b>>2]=-2023406815;d=b+4|0}Zx(d|0,0,a|0)|0;return d|0}function nv(a){a=a|0;var b=0;b=a-4|0;if((c[b>>2]|0)!=305419896){return}je[c[636269]&127](b);return}function ov(){return se[c[636270]&31]()|0}function pv(){return}function qv(){return}function rv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+1040|0;f=e+1024|0;g=e|0;h=f;c[h>>2]=d;c[h+4>>2]=0;fd(g|0,1024,b|0,f|0)|0;f=c[a+2052>>2]|0;a=c[f+1052>>2]|0;ue[c[636260]&31](3,45272,(b=i,i=i+24|0,c[b>>2]=f,c[b+8>>2]=a,c[b+16>>2]=g,b)|0);i=b;i=e;return}function sv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+1040|0;f=e+1024|0;g=e|0;h=f;c[h>>2]=d;c[h+4>>2]=0;fd(g|0,1024,b|0,f|0)|0;f=c[a+2052>>2]|0;a=c[f+1052>>2]|0;ue[c[636260]&31](2,45272,(b=i,i=i+24|0,c[b>>2]=f,c[b+8>>2]=a,c[b+16>>2]=g,b)|0);i=b;i=e;return}function tv(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;d=i;e=a+2056|0;f=c[e>>2]|0;a:do{if((f|0)==0){g=a+2052|0;h=a+2068|0;j=a+2072|0;while(1){if((qw(c[g>>2]|0,b)|0)!=0){k=1;l=13;break}b:do{if((vw(c[g>>2]|0)|0)!=0){m=c[h>>2]|0;if((m|0)==0){break}else{n=m}while(1){if((c[n+8>>2]|0)!=(c[g>>2]|0)){break b}sv(a,40160,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;m=c[h>>2]|0;if((m|0)==0){break b}if((c[m+8>>2]|0)!=(c[g>>2]|0)){n=m;continue}c[h>>2]=c[m+12>>2];c[j>>2]=(c[j>>2]|0)-(c[m+4>>2]|0);nv(m);n=c[h>>2]|0;if((n|0)==0){break}}}}while(0);m=c[g>>2]|0;o=c[m+2136>>2]|0;if((o|0)==0){k=0;l=13;break}c[g>>2]=o;yw(m);m=c[e>>2]|0;if((m|0)!=0){p=m;break a}}if((l|0)==13){i=d;return k|0}}else{p=f}}while(0);Vx(b|0,p|0,1060)|0;p=c[e>>2]|0;c[e>>2]=c[p+1056>>2];nv(p|0);c[164924]=(c[164924]|0)-1;k=1;i=d;return k|0}function uv(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,x=0,y=0,z=0;f=i;g=i;i=i+1060|0;i=i+7&-8;h=g|0;if((tv(a,g)|0)==0){rv(a,35368,(j=i,i=i+8|0,c[j>>2]=c[b>>2],j)|0);i=j;k=0;l=1060;m=0;i=f;return k|0}n=b+12|0;o=c[n>>2]|0;if((o|0)>(e|0)){rv(a,30176,(j=i,i=i+8|0,c[j>>2]=e,j)|0);i=j;k=0;l=1060;m=0;i=f;return k|0}if((o|0)>0){Zx(d|0,0,((o|0)>1?o<<2:4)|0)|0}if((Tx(h,25904)|0)==0){p=0;q=0}else{o=jv(1060)|0;if((o|0)==0){aj(0,46704,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;return 0}Vx(o|0,h|0,1056)|0;r=o+1056|0;c[r>>2]=0;c[164924]=(c[164924]|0)+1;s=a+2056|0;c[r>>2]=c[s>>2];c[s>>2]=o;rv(a,35368,(j=i,i=i+8|0,c[j>>2]=c[b>>2],j)|0);i=j;k=0;l=1060;m=0;i=f;return k|0}a:while(1){if((p|0)>=(e|0)){t=12;break}if((p|0)>=(c[n>>2]|0)){t=14;break}o=d+(p<<2)|0;c[o>>2]=0;s=0;r=1;u=q;b:while(1){v=r;w=u;while(1){if((tv(a,g)|0)==0){t=24;break a}if((Tx(h,60152)|0)==0&(w|0)<1){break b}if((Tx(h,25904)|0)==0){v=0;w=w+1|0;continue}if((Tx(h,56800)|0)==0){if((w|0)<2){t=27;break a}else{x=w-1|0}}else{x=w}if((p|0)<(c[n>>2]|0)){break}else{v=0;w=x}}y=jv(1060)|0;if((y|0)==0){t=30;break a}z=y;Vx(y|0,h|0,1056)|0;c[164924]=(c[164924]|0)+1;c[y+1056>>2]=0;if((s|0)==0){c[o>>2]=z;s=z;r=0;u=x;continue}else{c[s+1056>>2]=z;s=z;r=0;u=x;continue}}if((v|0)!=0){sv(a,58616,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}p=p+1|0;q=w}if((t|0)==12){rv(a,22464,(j=i,i=i+8|0,c[j>>2]=c[b>>2],j)|0);i=j;k=0;l=1060;m=0;i=f;return k|0}else if((t|0)==14){sv(a,19416,(j=i,i=i+8|0,c[j>>2]=c[b>>2],j)|0);i=j;k=0;l=1060;m=0;i=f;return k|0}else if((t|0)==24){rv(a,17408,(j=i,i=i+8|0,c[j>>2]=c[b>>2],j)|0);i=j;k=0;l=1060;m=0;i=f;return k|0}else if((t|0)==27){if((c[d+((c[n>>2]|0)-1<<2)>>2]|0)!=0){k=1;l=1060;m=0;i=f;return k|0}sv(a,55480,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=1;l=1060;m=0;i=f;return k|0}else if((t|0)==30){aj(0,46704,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;return 0}return 0}function vv(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0;j=i;i=i+8|0;k=j|0;l=jv(1060)|0;if((l|0)==0){aj(0,46704,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}n=l;Vx(l|0,d|0,1056)|0;c[l+1056>>2]=0;c[164924]=(c[164924]|0)+1;o=c[e+8>>2]|0;if((o|0)==1){e=d+1048|0;jb(l|0,46936,(m=i,i=i+8|0,c[m>>2]=c[e>>2],m)|0)|0;i=m;m=c[e>>2]|0;c[l+1032>>2]=m;g[l+1036>>2]=+(m|0);c[l+1024>>2]=3;c[l+1028>>2]=4104;c[f>>2]=n;c[h>>2]=n;i=j;return 1}else if((o|0)==4){c[k>>2]=Dd(0)|0;m=ob(k|0)|0;e=l;z=34;a[e]=z;z=z>>8;a[e+1|0]=z;rd(l|0,m+11|0,8)|0;e=n+(Wx(l|0)|0)|0;z=34;a[e]=z;z=z>>8;a[e+1|0]=z;Gx(m);c[l+1024>>2]=4;c[l+1028>>2]=Wx(l|0)|0;c[f>>2]=n;c[h>>2]=n;i=j;return 1}else if((o|0)==3){c[k>>2]=Dd(0)|0;m=ob(k|0)|0;k=l;z=34;a[k]=z;z=z>>8;a[k+1|0]=z;rd(l|0,m+4|0,7)|0;rd(l+7|0,m+20|0,4)|0;k=n+(Wx(l|0)|0)|0;z=34;a[k]=z;z=z>>8;a[k+1|0]=z;Gx(m);c[l+1024>>2]=4;c[l+1028>>2]=Wx(l|0)|0;c[f>>2]=n;c[h>>2]=n;i=j;return 1}else if((o|0)==2){by(l|0,c[b+2052>>2]|0)|0;c[l+1024>>2]=4;c[l+1028>>2]=Wx(l|0)|0;c[f>>2]=n;c[h>>2]=n;i=j;return 1}else{c[f>>2]=0;c[h>>2]=0;i=j;return 1}return 0}function wv(b,d,e,f,g){b=b|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,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=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,ba=0;h=i;i=i+1576|0;j=h|0;k=h+512|0;Zx(j|0,0,512)|0;l=k|0;if((c[e+8>>2]|0)!=0){vv(b,d,e,f,g)|0;m=1;n=1060;o=0;p=512;q=0;i=h;return m|0}d=e+12|0;do{if((c[d>>2]|0)!=0){if((uv(b,e,j|0,128)|0)==0){m=0}else{break}n=1060;o=0;p=512;q=0;i=h;return m|0}}while(0);r=c[e+20>>2]|0;a:do{if((r|0)==0){s=0;t=0}else{u=e+16|0;v=k+1024|0;w=k+1040|0;x=k+1044|0;y=0;A=0;B=r;b:while(1){C=B|0;c:do{if((c[B+1024>>2]|0)==4){D=c[u>>2]|0;if((D|0)==0){E=19;break}else{F=0;G=D}while(1){if((Tx(G|0,C)|0)==0){break}D=c[G+1056>>2]|0;if((D|0)==0){E=19;break c}else{F=F+1|0;G=D}}if(!((F|0)>-1)){E=19;break}D=c[j+(F<<2)>>2]|0;if((D|0)==0){H=A;I=y;J=B;break}else{K=y;L=A;M=D}while(1){D=jv(1060)|0;if((D|0)==0){E=15;break b}N=D;Vx(D|0,M|0,1056)|0;c[164924]=(c[164924]|0)+1;c[D+1056>>2]=0;if((L|0)==0){O=N}else{c[L+1056>>2]=N;O=K}D=c[M+1056>>2]|0;if((D|0)==0){H=N;I=O;J=B;break}else{K=O;L=N;M=D}}}else{E=19}}while(0);d:do{if((E|0)==19){E=0;e:do{if((a[C]|0)==35){if((a[B+1|0]|0)!=0){E=32;break}D=c[B+1056>>2]|0;f:do{if((D|0)!=0){N=D|0;P=c[u>>2]|0;if((P|0)==0){break}else{Q=0;R=P}while(1){if((Tx(R|0,N)|0)==0){break}P=c[R+1056>>2]|0;if((P|0)==0){break f}else{Q=Q+1|0;R=P}}if(!((Q|0)>-1)){break}N=c[j+(Q<<2)>>2]|0;c[v>>2]=1;c[w>>2]=0;c[x>>2]=0;a[l]=0;P=k+(Wx(l|0)|0)|0;z=34;a[P]=z;z=z>>8;a[P+1|0]=z;if((N|0)!=0){P=N;do{rd(l|0,P|0,1023-(Wx(l|0)|0)|0)|0;P=c[P+1056>>2]|0;}while((P|0)!=0)}rd(l|0,54536,1023-(Wx(l|0)|0)|0)|0;P=jv(1060)|0;if((P|0)==0){E=29;break b}Vx(P|0,l|0,1056)|0;c[P+1056>>2]=0;S=D;T=P;break e}}while(0);sv(b,45328,(U=i,i=i+1|0,i=i+7&-8,c[U>>2]=0,U)|0);i=U;H=A;I=y;J=B;break d}else{E=32}}while(0);if((E|0)==32){E=0;D=jv(1060)|0;if((D|0)==0){E=33;break b}Vx(D|0,C|0,1056)|0;c[D+1056>>2]=0;S=B;T=D}D=T;c[164924]=(c[164924]|0)+1;c[T+1056>>2]=0;if((A|0)==0){H=D;I=D;J=S;break}c[A+1056>>2]=D;H=D;I=y;J=S}}while(0);C=c[J+1056>>2]|0;if((C|0)==0){E=7;break}else{y=I;A=H;B=C}}if((E|0)==7){if((I|0)==0){s=H;t=0;break}else{V=I;W=H}g:while(1){B=V+1056|0;A=V+1024|0;X=V|0;y=W;while(1){Y=c[B>>2]|0;if((Y|0)==0){s=y;t=I;break a}if((a[Y|0]|0)!=35){V=Y;W=y;continue g}if((a[Y+1|0]|0)!=35){break}Z=c[Y+1056>>2]|0;if((Z|0)==0){V=Y;W=y;continue g}x=c[A>>2]|0;if((x|0)==4){if(!(((c[Z+1024>>2]|0)-3|0)>>>0<2>>>0)){break g}w=Z|0;$x(X|0,w|0)|0;_=w}else if((x|0)==1){if((c[Z+1024>>2]|0)!=1){break g}a[V+((Wx(X|0)|0)-1)|0]=0;$x(X|0,Z+1|0)|0;_=Z|0}else{break g}nv(c[B>>2]|0);c[164924]=(c[164924]|0)-1;c[B>>2]=c[Z+1056>>2];nv(_);c[164924]=(c[164924]|0)-1;y=(Z|0)==(y|0)?V:y}if((Y|0)==0){s=y;t=I;break a}else{V=Y;W=y}}rv(b,44512,(U=i,i=i+16|0,c[U>>2]=X,c[U+8>>2]=Z,U)|0);i=U;m=0;n=1060;o=0;p=512;q=0;i=h;return m|0}else if((E|0)==15){aj(0,46704,(U=i,i=i+1|0,i=i+7&-8,c[U>>2]=0,U)|0);i=U;return 0}else if((E|0)==29){aj(0,46704,(U=i,i=i+1|0,i=i+7&-8,c[U>>2]=0,U)|0);i=U;return 0}else if((E|0)==33){aj(0,46704,(U=i,i=i+1|0,i=i+7&-8,c[U>>2]=0,U)|0);i=U;return 0}}}while(0);c[f>>2]=t;c[g>>2]=s;s=c[d>>2]|0;if((s|0)>0){$=0;aa=s}else{m=1;n=1060;o=0;p=512;q=0;i=h;return m|0}while(1){s=c[j+($<<2)>>2]|0;if((s|0)==0){ba=aa}else{g=s;while(1){s=c[g+1056>>2]|0;nv(g|0);c[164924]=(c[164924]|0)-1;if((s|0)==0){break}else{g=s}}ba=c[d>>2]|0}g=$+1|0;if((g|0)<(ba|0)){$=g;aa=ba}else{m=1;break}}n=1060;o=0;p=512;q=0;i=h;return m|0}function xv(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+1128|0;e=d|0;f=e|0;g=d+1064|0;if((c[b+2072>>2]|0)>0){h=1;j=64;k=0;l=1060;m=0;i=d;return h|0}if((tv(b,e)|0)==0){rv(b,43840,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;h=0;j=64;k=0;l=1060;m=0;i=d;return h|0}o=e+1052|0;if((c[o>>2]|0)>0){rv(b,43840,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;h=0;j=64;k=0;l=1060;m=0;i=d;return h|0}p=e+1024|0;q=c[p>>2]|0;do{if((q|0)==1){sw(f);r=f;a:while(1){s=r+1|0;while(1){t=a[r]|0;if((t<<24>>24|0)==0){u=f;break a}else if(!((t<<24>>24|0)==92|(t<<24>>24|0)==47)){r=s;continue a}t=a[s]|0;if(!((t<<24>>24|0)==92|(t<<24>>24|0)==47)){r=s;continue a}_x(r|0,s|0,Wx(r|0)|0)|0}}while(1){r=a[u]|0;if((r<<24>>24|0)==47|(r<<24>>24|0)==92){a[u]=47}else if((r<<24>>24|0)==0){break}u=u+1|0}r=ww(f)|0;if((r|0)!=0){v=r;break}by(g|0,b+1024|0)|0;$x(g|0,f|0)|0;w=ww(g)|0;x=39}else if((q|0)==5){if((a[f]|0)!=60){x=38;break}by(g|0,b+1024|0)|0;b:do{if((tv(b,e)|0)==0){x=26}else{while(1){if((c[o>>2]|0)>0){break}if((c[p>>2]|0)==5){if((a[f]|0)==62){break b}}rd(g|0,f|0,63)|0;if((tv(b,e)|0)==0){x=26;break b}}r=jv(1060)|0;if((r|0)==0){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}else{Vx(r|0,f|0,1056)|0;s=r+1056|0;c[s>>2]=0;c[164924]=(c[164924]|0)+1;t=b+2056|0;c[s>>2]=c[t>>2];c[t>>2]=r;x=26;break}}}while(0);do{if((x|0)==26){if((a[f]|0)==62){break}sv(b,43208,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n}}while(0);if((a[g]|0)==0){rv(b,42624,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;h=0;j=64;k=0;l=1060;m=0;i=d;return h|0}else{y=g}c:while(1){r=y+1|0;while(1){t=a[y]|0;if((t<<24>>24|0)==0){z=g;break c}else if(!((t<<24>>24|0)==92|(t<<24>>24|0)==47)){y=r;continue c}t=a[r]|0;if(!((t<<24>>24|0)==92|(t<<24>>24|0)==47)){y=r;continue c}_x(y|0,r|0,Wx(y|0)|0)|0}}while(1){r=a[z]|0;if((r<<24>>24|0)==0){break}else if((r<<24>>24|0)==47|(r<<24>>24|0)==92){a[z]=47}z=z+1|0}w=ww(g)|0;x=39}else{x=38}}while(0);if((x|0)==38){rv(b,43840,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;h=0;j=64;k=0;l=1060;m=0;i=d;return h|0}do{if((x|0)==39){if((w|0)!=0){v=w;break}rv(b,42048,(n=i,i=i+8|0,c[n>>2]=g,n)|0);i=n;h=0;j=64;k=0;l=1060;m=0;i=d;return h|0}}while(0);g=b+2052|0;w=c[g>>2]|0;do{if((w|0)==0){A=0}else{z=v|0;y=w;while(1){if((tn(y|0,z)|0)==0){break}f=c[y+2136>>2]|0;if((f|0)==0){x=46;break}else{y=f}}if((x|0)==46){A=c[g>>2]|0;break}rv(b,56480,(n=i,i=i+8|0,c[n>>2]=z,n)|0);i=n;h=1;j=64;k=0;l=1060;m=0;i=d;return h|0}}while(0);c[v+2136>>2]=A;c[g>>2]=v;h=1;j=64;k=0;l=1060;m=0;i=d;return h|0}function yv(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;d=i;i=i+1064|0;e=d|0;f=e|0;if((c[b+2072>>2]|0)>0){g=1;h=1060;j=0;i=d;return g|0}k=e+1052|0;l=0;while(1){if((tv(b,e)|0)==0){break}if((c[k>>2]|0)>(l|0)){m=5;break}if((Tx(f,41592)|0)==0){l=1}else{m=10;break}}do{if((m|0)==5){l=jv(1060)|0;if((l|0)==0){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}else{Vx(l|0,f|0,1056)|0;k=l+1056|0;c[k>>2]=0;c[164924]=(c[164924]|0)+1;o=b+2056|0;c[k>>2]=c[o>>2];c[o>>2]=l;break}}else if((m|0)==10){if((c[e+1024>>2]|0)!=4){l=jv(1060)|0;if((l|0)==0){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}Vx(l|0,f|0,1056)|0;o=l+1056|0;c[o>>2]=0;c[164924]=(c[164924]|0)+1;k=b+2056|0;c[o>>2]=c[k>>2];c[k>>2]=l;rv(b,40272,(n=i,i=i+8|0,c[n>>2]=f,n)|0);i=n;g=0;h=1060;j=0;i=d;return g|0}l=a[f]|0;if(l<<24>>24==0){p=0}else{k=0;o=0;q=l;while(1){l=(da(o+119|0,q<<24>>24)|0)+k|0;r=o+1|0;s=a[e+r|0]|0;if(s<<24>>24==0){p=l;break}else{k=l;o=r;q=s}}}q=(c[b+2064>>2]|0)+(((p>>>10^p^p>>>20)&1023)<<2)|0;o=c[q>>2]|0;if((o|0)==0){g=1;h=1060;j=0;i=d;return g|0}else{t=0;u=o}while(1){v=u|0;if((Tx(c[v>>2]|0,f)|0)==0){break}o=c[u+28>>2]|0;if((o|0)==0){g=1;m=29;break}else{t=u;u=o}}if((m|0)==29){h=1060;j=0;i=d;return g|0}if((c[u+4>>2]&1|0)!=0){sv(b,39688,(n=i,i=i+8|0,c[n>>2]=f,n)|0);i=n;g=1;h=1060;j=0;i=d;return g|0}o=c[u+28>>2]|0;if((t|0)==0){c[q>>2]=o}else{c[t+28>>2]=o}o=c[u+16>>2]|0;if((o|0)!=0){k=o;while(1){o=c[k+1056>>2]|0;nv(k|0);c[164924]=(c[164924]|0)-1;if((o|0)==0){break}else{k=o}}}k=c[u+20>>2]|0;if((k|0)!=0){q=k;while(1){k=c[q+1056>>2]|0;nv(q|0);c[164924]=(c[164924]|0)-1;if((k|0)==0){break}else{q=k}}}nv(c[v>>2]|0);nv(u);g=1;h=1060;j=0;i=d;return g|0}}while(0);rv(b,41176,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;g=0;h=1060;j=0;i=d;return g|0}function zv(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,B=0,C=0,D=0,E=0,F=0;d=i;i=i+2128|0;e=d|0;f=d+1064|0;g=f|0;if((c[b+2072>>2]|0)>0){h=1;j=1060;k=0;i=d;return h|0}l=f+1052|0;m=0;while(1){if((tv(b,f)|0)==0){break}if((c[l>>2]|0)>(m|0)){n=5;break}if((Tx(g,41592)|0)==0){m=1}else{n=10;break}}do{if((n|0)==5){m=jv(1060)|0;if((m|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}else{Vx(m|0,g|0,1056)|0;p=m+1056|0;c[p>>2]=0;c[164924]=(c[164924]|0)+1;q=b+2056|0;c[p>>2]=c[q>>2];c[q>>2]=m;break}}else if((n|0)==10){m=f+1024|0;if((c[m>>2]|0)!=4){q=jv(1060)|0;if((q|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}Vx(q|0,g|0,1056)|0;p=q+1056|0;c[p>>2]=0;c[164924]=(c[164924]|0)+1;r=b+2056|0;c[p>>2]=c[r>>2];c[r>>2]=q;rv(b,38776,(o=i,i=i+8|0,c[o>>2]=g,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}q=b+2064|0;r=c[q>>2]|0;p=a[g]|0;if(p<<24>>24==0){s=0}else{t=0;u=0;v=p;while(1){p=(da(u+119|0,v<<24>>24)|0)+t|0;w=u+1|0;x=a[f+w|0]|0;if(x<<24>>24==0){s=p;break}else{t=p;u=w;v=x}}}v=c[r+(((s>>>10^s^s>>>20)&1023)<<2)>>2]|0;a:do{if((v|0)!=0){u=v;while(1){if((Tx(c[u>>2]|0,g)|0)==0){break}t=c[u+28>>2]|0;if((t|0)==0){break a}else{u=t}}if((c[u+4>>2]&1|0)!=0){rv(b,38344,(o=i,i=i+8|0,c[o>>2]=g,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}sv(b,37960,(o=i,i=i+8|0,c[o>>2]=g,o)|0);i=o;t=jv(1060)|0;if((t|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}Vx(t|0,g|0,1056)|0;x=t+1056|0;c[x>>2]=0;c[164924]=(c[164924]|0)+1;w=b+2056|0;c[x>>2]=c[w>>2];c[w>>2]=t;if((yv(b)|0)==0){h=0}else{break}j=1060;k=0;i=d;return h|0}}while(0);v=jv(32)|0;r=v;Zx(v|0,0,32)|0;t=jv((Wx(g|0)|0)+1|0)|0;w=v;c[w>>2]=t;by(t|0,g|0)|0;t=c[q>>2]|0;x=c[w>>2]|0;p=a[x]|0;if(p<<24>>24==0){y=0}else{z=0;A=0;B=p;while(1){p=(da(A+119|0,B<<24>>24)|0)+z|0;C=A+1|0;D=a[x+C|0]|0;if(D<<24>>24==0){y=p;break}else{z=p;A=C;B=D}}}B=t+(((y>>>10^y^y>>>20)&1023)<<2)|0;c[v+28>>2]=c[B>>2];c[B>>2]=r;B=0;while(1){if((tv(b,f)|0)==0){h=1;n=99;break}if((c[l>>2]|0)>(B|0)){n=29;break}if((Tx(g,41592)|0)==0){B=1}else{n=33;break}}if((n|0)==29){B=jv(1060)|0;if((B|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}Vx(B|0,g|0,1056)|0;r=B+1056|0;c[r>>2]=0;c[164924]=(c[164924]|0)+1;t=b+2056|0;c[r>>2]=c[t>>2];c[t>>2]=B;h=1;j=1060;k=0;i=d;return h|0}else if((n|0)==33){b:do{if(((c[f+1044>>2]|0)-(c[f+1040>>2]|0)|0)<=0){if((Tx(g,25904)|0)!=0){break}B=e|0;do{if((Yv(b,e)|0)==0){n=40}else{if((Tx(B,56800)|0)==0){E=0;break}t=jv(1060)|0;if((t|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}else{Vx(t|0,B|0,1056)|0;r=t+1056|0;c[r>>2]=0;c[164924]=(c[164924]|0)+1;A=b+2056|0;c[r>>2]=c[A>>2];c[A>>2]=t;n=40;break}}}while(0);c:do{if((n|0)==40){B=v+16|0;u=v+12|0;t=0;d:while(1){A=0;while(1){if((tv(b,f)|0)==0){n=48;break d}if((c[l>>2]|0)>(A|0)){n=44;break d}if((Tx(g,41592)|0)==0){A=1}else{break}}if((c[m>>2]|0)!=4){n=50;break}A=c[B>>2]|0;e:do{if((A|0)!=0){r=0;z=A;while(1){if((Tx(z|0,g)|0)==0){break}x=c[z+1056>>2]|0;if((x|0)==0){break e}else{r=r+1|0;z=x}}if((r|0)>-1){n=55;break d}}}while(0);A=jv(1060)|0;if((A|0)==0){n=57;break}z=A;Vx(A|0,g|0,1056)|0;c[164924]=(c[164924]|0)+1;c[A+1040>>2]=0;c[A+1044>>2]=0;c[A+1052>>2]=0;c[A+1056>>2]=0;if((t|0)==0){c[B>>2]=z}else{c[t+1056>>2]=z}c[u>>2]=(c[u>>2]|0)+1;A=0;while(1){if((tv(b,f)|0)==0){n=68;break d}if((c[l>>2]|0)>(A|0)){n=64;break d}if((Tx(g,41592)|0)==0){A=1}else{break}}if((Tx(g,56800)|0)==0){E=0;break c}if((Tx(g,60152)|0)==0){t=z}else{n=71;break}}do{if((n|0)==44){t=jv(1060)|0;if((t|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}else{Vx(t|0,g|0,1056)|0;u=t+1056|0;c[u>>2]=0;c[164924]=(c[164924]|0)+1;B=b+2056|0;c[u>>2]=c[B>>2];c[B>>2]=t;n=48;break}}else if((n|0)==50){rv(b,37208,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}else if((n|0)==55){rv(b,36784,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}else if((n|0)==57){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}else if((n|0)==64){t=jv(1060)|0;if((t|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}else{Vx(t|0,g|0,1056)|0;B=t+1056|0;c[B>>2]=0;c[164924]=(c[164924]|0)+1;u=b+2056|0;c[B>>2]=c[u>>2];c[u>>2]=t;n=68;break}}else if((n|0)==71){rv(b,35464,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}}while(0);if((n|0)==48){rv(b,37576,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}else if((n|0)==68){rv(b,36400,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}}}while(0);while(1){if((tv(b,f)|0)==0){h=1;n=99;break}if((c[l>>2]|0)>(E|0)){break}if((Tx(g,41592)|0)==0){E=1}else{break b}}if((n|0)==99){j=1060;k=0;i=d;return h|0}t=jv(1060)|0;if((t|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}Vx(t|0,g|0,1056)|0;u=t+1056|0;c[u>>2]=0;c[164924]=(c[164924]|0)+1;B=b+2056|0;c[u>>2]=c[B>>2];c[B>>2]=t;h=1;j=1060;k=0;i=d;return h|0}}while(0);m=jv(1060)|0;if((m|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}t=v+20|0;B=0;u=m;f:while(1){m=u;Vx(u|0,g|0,1056)|0;A=u+1056|0;c[A>>2]=0;c[164924]=(c[164924]|0)+1;do{if((c[u+1024>>2]|0)==4){if((Tx(u,c[w>>2]|0)|0)!=0){n=85;break}rv(b,34880,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;F=B}else{n=85}}while(0);do{if((n|0)==85){n=0;c[u+1040>>2]=0;c[u+1044>>2]=0;c[u+1052>>2]=0;c[A>>2]=0;if((B|0)==0){c[t>>2]=m;F=m;break}else{c[B+1056>>2]=m;F=m;break}}}while(0);m=0;while(1){if((tv(b,f)|0)==0){break f}if((c[l>>2]|0)>(m|0)){n=91;break f}if((Tx(g,41592)|0)==0){m=1}else{break}}m=jv(1060)|0;if((m|0)==0){n=81;break}else{B=F;u=m}}if((n|0)==81){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}do{if((n|0)==91){u=jv(1060)|0;if((u|0)==0){aj(0,46704,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;return 0}else{Vx(u|0,g|0,1056)|0;B=u+1056|0;c[B>>2]=0;c[164924]=(c[164924]|0)+1;w=b+2056|0;c[B>>2]=c[w>>2];c[w>>2]=u;break}}}while(0);if((F|0)==0){h=1;j=1060;k=0;i=d;return h|0}do{if((Tx(c[t>>2]|0,34520)|0)!=0){if((Tx(F|0,34520)|0)==0){break}else{h=1}j=1060;k=0;i=d;return h|0}}while(0);rv(b,33960,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}else if((n|0)==99){j=1060;k=0;i=d;return h|0}}}while(0);rv(b,39336,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;h=0;j=1060;k=0;i=d;return h|0}function Av(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+1064|0;e=d|0;f=e|0;if((Yv(a,e)|0)==0){g=0;h=1060;j=0;i=d;return g|0}if((Tx(f,b)|0)==0){g=1;h=1060;j=0;i=d;return g|0}b=jv(1060)|0;if((b|0)==0){aj(0,46704,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;return 0}Vx(b|0,f|0,1056)|0;f=b+1056|0;c[f>>2]=0;c[164924]=(c[164924]|0)+1;e=a+2056|0;c[f>>2]=c[e>>2];c[e>>2]=b;g=0;h=1060;j=0;i=d;return g|0}function Bv(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;b=i;i=i+3136|0;d=b|0;e=d|0;f=xw(a,Wx(a|0)|0,33408)|0;Zx(e|0,0,3136)|0;ay(e|0,33408,64)|0;c[d+2052>>2]=f;e=d+2064|0;c[e>>2]=kv(4096)|0;a=zv(d)|0;g=d+2056|0;h=c[g>>2]|0;if((h|0)!=0){j=h;do{c[g>>2]=c[j+1056>>2];nv(j|0);c[164924]=(c[164924]|0)-1;j=c[g>>2]|0;}while((j|0)!=0)}j=c[e>>2]|0;e=0;while(1){g=c[j+(e<<2)>>2]|0;h=e+1|0;if((g|0)!=0){k=g;break}if((h|0)<1024){e=h}else{k=0;break}}nv(j);yw(f);if((a|0)>0){l=k;m=3136;n=0;i=b;return l|0}if((c[d+2060>>2]|0)==0){l=0;m=3136;n=0;i=b;return l|0}d=c[k+16>>2]|0;if((d|0)!=0){a=d;while(1){d=c[a+1056>>2]|0;nv(a|0);c[164924]=(c[164924]|0)-1;if((d|0)==0){break}else{a=d}}}a=c[k+20>>2]|0;if((a|0)!=0){d=a;while(1){a=c[d+1056>>2]|0;nv(d|0);c[164924]=(c[164924]|0)-1;if((a|0)==0){break}else{d=a}}}nv(c[k>>2]|0);nv(k);l=0;m=3136;n=0;i=b;return l|0}function Cv(a){a=a|0;var b=0,d=0;b=Bv(a)|0;if((b|0)==0){d=0;return d|0}c[b+24>>2]=c[196756];c[196756]=b;d=1;return d|0}function Dv(){var a=0,b=0,d=0;a=c[196756]|0;if((a|0)==0){return}else{b=a}do{c[196756]=c[b+24>>2];a=c[b+16>>2]|0;if((a|0)!=0){d=a;while(1){a=c[d+1056>>2]|0;nv(d|0);c[164924]=(c[164924]|0)-1;if((a|0)==0){break}else{d=a}}}d=c[b+20>>2]|0;if((d|0)!=0){a=d;while(1){d=c[a+1056>>2]|0;nv(a|0);c[164924]=(c[164924]|0)-1;if((d|0)==0){break}else{a=d}}}nv(c[b>>2]|0);nv(b);b=c[196756]|0;}while((b|0)!=0);return}function Ev(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;a=i;d=jv(32)|0;e=d;f=b|0;g=jv((Wx(c[f>>2]|0)|0)+1|0)|0;c[d>>2]=g;by(g|0,c[f>>2]|0)|0;c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+24>>2]=0;c[d+28>>2]=0;f=d+20|0;c[f>>2]=0;g=c[b+20>>2]|0;a:do{if((g|0)!=0){h=0;j=g;while(1){k=jv(1060)|0;if((k|0)==0){break}l=k;Vx(k|0,j|0,1056)|0;c[164924]=(c[164924]|0)+1;c[k+1056>>2]=0;if((h|0)==0){c[f>>2]=l}else{c[h+1056>>2]=l}k=c[j+1056>>2]|0;if((k|0)==0){break a}else{h=l;j=k}}aj(0,46704,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}}while(0);f=d+16|0;c[f>>2]=0;d=c[b+16>>2]|0;if((d|0)==0){i=a;return e|0}else{n=0;o=d}while(1){d=jv(1060)|0;if((d|0)==0){p=10;break}b=d;Vx(d|0,o|0,1056)|0;c[164924]=(c[164924]|0)+1;c[d+1056>>2]=0;if((n|0)==0){c[f>>2]=b}else{c[n+1056>>2]=b}d=c[o+1056>>2]|0;if((d|0)==0){p=15;break}else{n=b;o=d}}if((p|0)==10){aj(0,46704,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}else if((p|0)==15){i=a;return e|0}return 0}function Fv(b,d){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,v=0;e=i;i=i+1064|0;f=e|0;g=f|0;h=f+1052|0;j=0;while(1){if((tv(b,f)|0)==0){break}if((c[h>>2]|0)>(j|0)){k=4;break}if((Tx(g,41592)|0)==0){j=1}else{k=9;break}}do{if((k|0)==4){j=jv(1060)|0;if((j|0)==0){aj(0,46704,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}else{Vx(j|0,g|0,1056)|0;h=j+1056|0;c[h>>2]=0;c[164924]=(c[164924]|0)+1;m=b+2056|0;c[h>>2]=c[m>>2];c[m>>2]=j;break}}else if((k|0)==9){if((c[f+1024>>2]|0)!=4){j=jv(1060)|0;if((j|0)==0){aj(0,46704,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}Vx(j|0,g|0,1056)|0;m=j+1056|0;c[m>>2]=0;c[164924]=(c[164924]|0)+1;h=b+2056|0;c[m>>2]=c[h>>2];c[h>>2]=j;rv(b,32288,(l=i,i=i+8|0,c[l>>2]=g,l)|0);i=l;n=0;o=1060;p=0;i=e;return n|0}j=c[b+2064>>2]|0;h=a[g]|0;if(h<<24>>24==0){q=0}else{m=0;r=0;s=h;while(1){h=(da(r+119|0,s<<24>>24)|0)+m|0;t=r+1|0;u=a[f+t|0]|0;if(u<<24>>24==0){q=h;break}else{m=h;r=t;s=u}}}s=c[j+(((q>>>10^q^q>>>20)&1023)<<2)>>2]|0;a:do{if((s|0)==0){v=0}else{r=s;while(1){if((Tx(c[r>>2]|0,g)|0)==0){v=r;break a}m=c[r+28>>2]|0;if((m|0)==0){v=0;break}else{r=m}}}}while(0);s=jv(16)|0;c[s>>2]=d;c[s+8>>2]=c[b+2052>>2];j=((d|0)==8^(v|0)==0)&1^1;c[s+4>>2]=j;r=b+2072|0;c[r>>2]=j+(c[r>>2]|0);r=b+2068|0;c[s+12>>2]=c[r>>2];c[r>>2]=s;n=1;o=1060;p=0;i=e;return n|0}}while(0);rv(b,32792,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;n=0;o=1060;p=0;i=e;return n|0}function Gv(a){a=a|0;return Fv(a,8)|0}function Hv(a){a=a|0;return Fv(a,16)|0}function Iv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;d=a+2068|0;e=c[d>>2]|0;do{if((e|0)!=0){f=a+2052|0;if((c[e+8>>2]|0)!=(c[f>>2]|0)){break}g=c[e>>2]|0;h=c[e+4>>2]|0;c[d>>2]=c[e+12>>2];j=a+2072|0;c[j>>2]=(c[j>>2]|0)-h;nv(e);if((g|0)==0){break}else if((g|0)==2){rv(a,31520,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=0;i=b;return l|0}else{g=jv(16)|0;c[g>>2]=2;c[g+8>>2]=c[f>>2];f=(h|0)==0|0;c[g+4>>2]=f;c[j>>2]=(c[j>>2]|0)+f;c[g+12>>2]=c[d>>2];c[d>>2]=g;l=1;i=b;return l|0}}}while(0);rv(a,31832,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=0;i=b;return l|0}function Jv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=a+2068|0;e=c[d>>2]|0;do{if((e|0)!=0){if((c[e+8>>2]|0)!=(c[a+2052>>2]|0)){break}f=c[e>>2]|0;c[d>>2]=c[e+12>>2];g=a+2072|0;c[g>>2]=(c[g>>2]|0)-(c[e+4>>2]|0);nv(e);if((f|0)==0){break}else{h=1}i=b;return h|0}}while(0);rv(a,31120,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;h=0;i=b;return h|0}function Kv(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|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,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,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0.0,oa=0,pa=0,qa=0.0,ra=0,sa=0.0,ta=0,ua=0.0,va=0,wa=0,xa=0.0,ya=0,za=0,Aa=0.0,Ba=0,Ca=0,Da=0,Ea=0.0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0;j=i;i=i+2560|0;k=j|0;l=j+1280|0;m=(e|0)!=0;if(m){c[e>>2]=0}n=(f|0)!=0;if(n){g[f>>2]=0.0}a:do{if((d|0)==0){o=0;p=0;q=86}else{r=b+2064|0;s=(h|0)==0;t=0;u=0;v=0;w=0;x=d;y=0;z=0;A=0;B=0;C=0;b:while(1){D=c[x+1024>>2]|0;do{if((D|0)==5){if((A|0)!=0){q=42;break b}E=x+1028|0;F=c[E>>2]|0;if((F|0)==44){G=C;H=B;I=0;J=z;K=y+1|0;L=x;M=w;N=v;O=u;P=t;break}else if((F|0)==45){if((y|0)<1){q=46;break b}else{G=C;H=B;I=0;J=z;K=y-1|0;L=x;M=w;N=v;O=u;P=t;break}}else{if(s){switch(F|0){case 35:case 28:case 21:case 22:case 32:case 33:case 34:{q=49;break b;break};case 36:{q=51;break};case 16:case 17:{q=53;break};case 30:{q=54;break};case 26:case 27:case 29:case 5:case 6:case 7:case 8:case 9:case 10:case 37:case 38:case 42:case 43:{q=55;break};default:{q=57;break b}}}else{switch(F|0){case 36:case 35:{q=51;break};case 16:case 17:{q=53;break};case 30:{q=54;break};case 26:case 27:case 28:case 29:case 5:case 6:case 7:case 8:case 9:case 10:case 37:case 38:case 21:case 22:case 32:case 33:case 34:case 42:case 43:{q=55;break};default:{q=57;break b}}}if((q|0)==51){q=0;if((z|0)!=0){q=52;break b}}else if((q|0)==53){q=0;rv(b,26016,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q}else if((q|0)==54){q=0;if((z|0)==0){G=C;H=B;I=1;J=0;K=y;L=x;M=w;N=v;O=u;P=t;break}}else if((q|0)==55){q=0;if((z|0)==0){q=56;break b}}if((B|0)>63){q=59;break b}F=B+1|0;R=k+(B*20|0)|0;c[R>>2]=c[E>>2];switch(c[E>>2]|0){case 10:{S=11;break};case 36:{S=16;break};case 37:{S=12;break};case 38:{S=12;break};case 21:{S=13;break};case 22:{S=13;break};case 32:{S=10;break};case 33:{S=8;break};case 34:{S=9;break};case 35:{S=16;break};case 42:{S=5;break};case 43:{S=5;break};case 29:{S=14;break};case 30:{S=14;break};case 5:{S=7;break};case 6:{S=6;break};case 7:{S=12;break};case 8:{S=12;break};case 9:{S=11;break};case 26:case 27:case 28:{S=15;break};default:{S=0}}c[k+(B*20|0)+4>>2]=S;c[k+(B*20|0)+8>>2]=y;c[k+(B*20|0)+16>>2]=0;c[k+(B*20|0)+12>>2]=u;if((u|0)==0){G=C;H=F;I=0;J=0;K=y;L=x;M=w;N=v;O=R;P=R;break}c[u+16>>2]=R;G=C;H=F;I=0;J=0;K=y;L=x;M=w;N=v;O=R;P=t;break}}else if((D|0)==3){if((z|0)!=0){q=33;break b}if((C|0)>63){q=35;break b}R=C+1|0;F=l+(C*20|0)|0;E=c[x+1032>>2]|0;if((A|0)==0){c[F>>2]=E;g[l+(C*20|0)+4>>2]=+g[x+1036>>2]}else{c[F>>2]=-E;g[l+(C*20|0)+4>>2]=-0.0- +g[x+1036>>2]}c[l+(C*20|0)+8>>2]=y;c[l+(C*20|0)+16>>2]=0;c[l+(C*20|0)+12>>2]=w;if((w|0)==0){G=R;H=B;I=0;J=1;K=y;L=x;M=F;N=F;O=u;P=t;break}c[w+16>>2]=F;G=R;H=B;I=0;J=1;K=y;L=x;M=F;N=v;O=u;P=t}else if((D|0)==4){if((A|z|0)!=0){q=9;break b}T=x|0;if((Tx(T,29872)|0)!=0){q=11;break b}F=c[x+1056>>2]|0;if((Tx(F|0,25904)|0)==0){U=1;V=c[F+1056>>2]|0}else{U=0;V=F}if((V|0)==0){q=16;break b}if((c[V+1024>>2]|0)!=4){q=16;break b}if((C|0)>63){q=18;break b}F=C+1|0;R=l+(C*20|0)|0;E=c[r>>2]|0;W=V|0;X=a[W]|0;if(X<<24>>24==0){Y=0}else{Z=0;_=0;$=X;while(1){X=(da(_+119|0,$<<24>>24)|0)+Z|0;aa=_+1|0;ba=a[V+aa|0]|0;if(ba<<24>>24==0){Y=X;break}else{Z=X;_=aa;$=ba}}}$=c[E+(((Y>>>10^Y^Y>>>20)&1023)<<2)>>2]|0;c:do{if(($|0)==0){q=25}else{_=$;while(1){if((Tx(c[_>>2]|0,W)|0)==0){break}Z=c[_+28>>2]|0;if((Z|0)==0){q=25;break c}else{_=Z}}c[R>>2]=1;g[l+(C*20|0)+4>>2]=1.0}}while(0);if((q|0)==25){q=0;c[R>>2]=0;g[l+(C*20|0)+4>>2]=0.0}c[l+(C*20|0)+8>>2]=y;c[l+(C*20|0)+16>>2]=0;c[l+(C*20|0)+12>>2]=w;if((w|0)==0){ca=R}else{c[w+16>>2]=R;ca=v}if((U|0)==0){G=F;H=B;I=A;J=1;K=y;L=V;M=R;N=ca;O=u;P=t;break}W=c[V+1056>>2]|0;if((W|0)==0){q=31;break b}if((Tx(W|0,56800)|0)==0){G=F;H=B;I=A;J=1;K=y;L=W;M=R;N=ca;O=u;P=t}else{q=31;break b}}else{q=83;break b}}while(0);D=c[L+1056>>2]|0;if((D|0)==0){q=85;break}else{t=P;u=O;v=N;w=M;x=D;y=K;z=J;A=I;B=H;C=G}}if((q|0)==9){rv(b,30296,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==11){rv(b,29584,(Q=i,i=i+8|0,c[Q>>2]=T,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==16){rv(b,29248,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==18){rv(b,28832,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==31){rv(b,28456,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=ca;break}else if((q|0)==33){rv(b,30296,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==35){rv(b,28832,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==42){rv(b,28112,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==46){rv(b,27712,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==49){rv(b,27312,(Q=i,i=i+8|0,c[Q>>2]=x,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==52){rv(b,26784,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==56){rv(b,25536,(Q=i,i=i+8|0,c[Q>>2]=x,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==57){rv(b,25376,(Q=i,i=i+8|0,c[Q>>2]=x,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==59){rv(b,25040,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==83){rv(b,24656,(Q=i,i=i+8|0,c[Q>>2]=x,Q)|0);i=Q;ea=1;fa=t;ga=v;break}else if((q|0)==85){if((J|0)==0){o=N;p=P;q=86;break}if((K|0)!=0){rv(b,24080,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=P;ga=N;break}if((P|0)==0){ea=0;fa=P;ga=N;break}C=(h|0)==0;B=P;A=N;z=0;ha=0.0;y=0;d:while(1){w=B+16|0;u=c[w>>2]|0;e:do{if((u|0)==0){ia=A;ja=B;ka=w}else{r=A;s=B;D=w;W=u;$=c[B+8>>2]|0;while(1){E=c[W+8>>2]|0;if(($|0)>(E|0)){ia=r;ja=s;ka=D;break e}if(($|0)==(E|0)){if((c[s+4>>2]|0)>=(c[W+4>>2]|0)){ia=r;ja=s;ka=D;break e}}if(((c[s>>2]|0)-35|0)>>>0<2>>>0){la=r}else{la=c[r+16>>2]|0}if((la|0)==0){q=99;break d}_=W+16|0;Z=c[_>>2]|0;if((Z|0)==0){ia=la;ja=W;ka=_;break}else{r=la;s=W;D=_;W=Z;$=E}}}}while(0);u=c[ia+16>>2]|0;w=c[ja>>2]|0;f:do{switch(w|0){case 32:{$=ia|0;c[$>>2]=c[$>>2]&c[u>>2];ma=y;na=ha;oa=z;q=146;break};case 33:{$=ia|0;c[$>>2]=c[$>>2]|c[u>>2];ma=y;na=ha;oa=z;q=146;break};case 34:{$=ia|0;c[$>>2]=c[$>>2]^c[u>>2];ma=y;na=ha;oa=z;q=146;break};case 42:{if((y|0)==0){q=136;break d}if(C){if(ha!=0.0){pa=z;qa=ha;ra=0;q=145;break f}g[ia+4>>2]=+g[u+4>>2];pa=z;qa=ha;ra=0;q=145;break f}else{if((z|0)!=0){pa=z;qa=ha;ra=0;q=145;break f}c[ia>>2]=c[u>>2];pa=0;qa=ha;ra=0;q=145;break f}break};case 43:{if((y|0)!=0){q=143;break d}pa=c[ia>>2]|0;qa=+g[ia+4>>2];ra=1;q=145;break};case 28:{$=c[u>>2]|0;if(($|0)==0){q=110;break d}W=ia|0;c[W>>2]=(c[W>>2]|0)%($|0)|0;pa=z;qa=ha;ra=y;q=145;break};case 10:{$=ia|0;c[$>>2]=(c[$>>2]|0)!=(c[u>>2]|0);$=ia+4|0;g[$>>2]=+(+g[$>>2]!=+g[u+4>>2]|0);ma=y;na=ha;oa=z;q=146;break};case 37:{$=ia|0;c[$>>2]=(c[$>>2]|0)>(c[u>>2]|0);$=ia+4|0;g[$>>2]=+(+g[$>>2]>+g[u+4>>2]|0);ma=y;na=ha;oa=z;q=146;break};case 27:{$=c[u>>2]|0;if(($|0)==0){q=107;break d}sa=+g[u+4>>2];if(!(sa!=0.0)){q=107;break d}W=ia|0;c[W>>2]=(c[W>>2]|0)/($|0)|0;$=ia+4|0;g[$>>2]=+g[$>>2]/sa;pa=z;qa=ha;ra=y;q=145;break};case 29:{$=ia|0;c[$>>2]=(c[$>>2]|0)+(c[u>>2]|0);$=ia+4|0;g[$>>2]=+g[u+4>>2]+ +g[$>>2];ma=y;na=ha;oa=z;q=146;break};case 30:{$=ia|0;c[$>>2]=(c[$>>2]|0)-(c[u>>2]|0);$=ia+4|0;g[$>>2]=+g[$>>2]- +g[u+4>>2];ma=y;na=ha;oa=z;q=146;break};case 5:{$=ia|0;if((c[$>>2]|0)==0){ta=0}else{ta=(c[u>>2]|0)!=0|0}c[$>>2]=ta;$=ia+4|0;if(+g[$>>2]!=0.0){ua=+(+g[u+4>>2]!=0.0|0)}else{ua=0.0}g[$>>2]=ua;pa=z;qa=ha;ra=y;q=145;break};case 36:{$=ia|0;c[$>>2]=(c[$>>2]|0)==0;$=ia+4|0;g[$>>2]=+(+g[$>>2]==0.0|0);va=A;wa=y;xa=ha;ya=z;break};case 35:{$=ia|0;c[$>>2]=~c[$>>2];va=A;wa=y;xa=ha;ya=z;break};case 26:{$=ia|0;c[$>>2]=da(c[$>>2]|0,c[u>>2]|0)|0;$=ia+4|0;g[$>>2]=+g[u+4>>2]*+g[$>>2];ma=y;na=ha;oa=z;q=146;break};case 7:{$=ia|0;c[$>>2]=(c[$>>2]|0)>=(c[u>>2]|0);$=ia+4|0;g[$>>2]=+(+g[$>>2]>=+g[u+4>>2]|0);ma=y;na=ha;oa=z;q=146;break};case 8:{$=ia|0;c[$>>2]=(c[$>>2]|0)<=(c[u>>2]|0);$=ia+4|0;g[$>>2]=+(+g[$>>2]<=+g[u+4>>2]|0);ma=y;na=ha;oa=z;q=146;break};case 9:{$=ia|0;c[$>>2]=(c[$>>2]|0)==(c[u>>2]|0);$=ia+4|0;g[$>>2]=+(+g[$>>2]==+g[u+4>>2]|0);ma=y;na=ha;oa=z;q=146;break};case 38:{$=ia|0;c[$>>2]=(c[$>>2]|0)<(c[u>>2]|0);$=ia+4|0;g[$>>2]=+(+g[$>>2]<+g[u+4>>2]|0);ma=y;na=ha;oa=z;q=146;break};case 21:{$=ia|0;c[$>>2]=c[$>>2]>>c[u>>2];ma=y;na=ha;oa=z;q=146;break};case 22:{$=ia|0;c[$>>2]=c[$>>2]<<c[u>>2];ma=y;na=ha;oa=z;q=146;break};case 6:{$=ia|0;if((c[$>>2]|0)==0){za=(c[u>>2]|0)!=0|0}else{za=1}c[$>>2]=za;$=ia+4|0;if(+g[$>>2]!=0.0){Aa=1.0}else{Aa=+(+g[u+4>>2]!=0.0|0)}g[$>>2]=Aa;pa=z;qa=ha;ra=y;q=145;break};default:{pa=z;qa=ha;ra=y;q=145}}}while(0);if((q|0)==145){q=0;if((w|0)==43){Ba=ia;Ca=u;Da=ra;Ea=qa;Fa=pa;q=147}else if((w|0)==36|(w|0)==35){va=A;wa=ra;xa=qa;ya=pa}else{ma=ra;na=qa;oa=pa;q=146}}if((q|0)==146){q=0;Ba=u;Ca=c[u+16>>2]|0;Da=ma;Ea=na;Fa=oa;q=147}do{if((q|0)==147){q=0;$=Ba+12|0;W=c[$>>2]|0;if((W|0)==0){Ga=Ca;Ha=Ca}else{c[W+16>>2]=Ca;Ga=A;Ha=c[Ba+16>>2]|0}if((Ha|0)==0){va=Ga;wa=Da;xa=Ea;ya=Fa;break}c[Ha+12>>2]=c[$>>2];va=Ga;wa=Da;xa=Ea;ya=Fa}}while(0);u=ja+12|0;w=c[u>>2]|0;$=c[ka>>2]|0;if((w|0)==0){Ia=$;Ja=$}else{c[w+16>>2]=$;Ia=B;Ja=c[ka>>2]|0}if((Ja|0)!=0){c[Ja+12>>2]=c[u>>2]}if((Ia|0)==0){ea=0;fa=0;ga=va;break a}else{B=Ia;A=va;z=ya;ha=xa;y=wa}}if((q|0)==99){rv(b,23800,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=B;ga=A;break}else if((q|0)==107){rv(b,23536,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=B;ga=A;break}else if((q|0)==110){rv(b,23536,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=B;ga=A;break}else if((q|0)==136){rv(b,23312,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=B;ga=A;break}else if((q|0)==143){rv(b,22640,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=B;ga=A;break}}}}while(0);if((q|0)==86){rv(b,24368,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ea=1;fa=p;ga=o}o=(ga|0)==0;do{if(!o){if(m){c[e>>2]=c[ga>>2]}if(!n){break}g[f>>2]=+g[ga+4>>2]}}while(0);if((fa|0)!=0){p=fa;do{p=c[p+16>>2]|0;}while((p|0)!=0)}if(!o){o=ga;do{o=c[o+16>>2]|0;}while((o|0)!=0)}if((ea|0)==0){Ka=1;La=1280;Ma=0;Na=1280;Oa=0;i=j;return Ka|0}if(m){c[e>>2]=0}if(!n){Ka=0;La=1280;Ma=0;Na=1280;Oa=0;i=j;return Ka|0}g[f>>2]=0.0;Ka=0;La=1280;Ma=0;Na=1280;Oa=0;i=j;return Ka|0}function Lv(b,d,e,f){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,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;h=i;i=i+1080|0;j=h|0;k=h+8|0;l=h+16|0;m=l|0;if((d|0)!=0){c[d>>2]=0}if((e|0)!=0){g[e>>2]=0.0}n=l+1052|0;o=0;while(1){if((tv(b,l)|0)==0){break}if((c[n>>2]|0)>(o|0)){p=8;break}if((Tx(m,41592)|0)==0){o=1}else{p=12;break}}do{if((p|0)==8){o=jv(1060)|0;if((o|0)==0){aj(0,46704,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;return 0}else{Vx(o|0,m|0,1056)|0;r=o+1056|0;c[r>>2]=0;c[164924]=(c[164924]|0)+1;s=b+2056|0;c[r>>2]=c[s>>2];c[s>>2]=o;break}}else if((p|0)==12){o=l+1024|0;s=b+2064|0;r=b+2056|0;t=0;u=0;v=0;a:while(1){w=c[o>>2]|0;do{if((w|0)==4){if((t|0)!=0){x=jv(1060)|0;if((x|0)==0){p=17;break a}y=x;Vx(x|0,m|0,1056)|0;c[164924]=(c[164924]|0)+1;c[x+1056>>2]=0;if((v|0)==0){z=0;A=y;B=y;break}c[v+1056>>2]=y;z=0;A=u;B=y;break}if((Tx(m,29872)|0)==0){y=jv(1060)|0;if((y|0)==0){p=22;break a}x=y;Vx(y|0,m|0,1056)|0;c[164924]=(c[164924]|0)+1;c[y+1056>>2]=0;if((v|0)==0){z=1;A=x;B=x;break}c[v+1056>>2]=x;z=1;A=u;B=x;break}x=c[s>>2]|0;y=a[m]|0;if(y<<24>>24==0){C=0}else{D=0;E=0;F=y;while(1){y=(da(E+119|0,F<<24>>24)|0)+D|0;G=E+1|0;H=a[l+G|0]|0;if(H<<24>>24==0){C=y;break}else{D=y;E=G;F=H}}}F=c[x+(((C>>>10^C^C>>>20)&1023)<<2)>>2]|0;if((F|0)==0){p=30;break a}else{I=F}while(1){if((Tx(c[I>>2]|0,m)|0)==0){break}F=c[I+28>>2]|0;if((F|0)==0){p=30;break a}else{I=F}}x=(wv(b,l,I,j,k)|0)==0;F=c[j>>2]|0;if(x|(F|0)==0){J=0;p=49;break a}x=c[k>>2]|0;if((x|0)==0){J=0;p=49;break a}c[x+1056>>2]=c[r>>2];c[r>>2]=F;z=0;A=u;B=v}else if((w|0)==3|(w|0)==5){F=jv(1060)|0;if((F|0)==0){p=35;break a}x=F;Vx(F|0,m|0,1056)|0;c[164924]=(c[164924]|0)+1;c[F+1056>>2]=0;if((v|0)==0){z=t;A=x;B=x;break}c[v+1056>>2]=x;z=t;A=u;B=x}else{p=38;break a}}while(0);w=0;while(1){if((tv(b,l)|0)==0){break a}if((c[n>>2]|0)>(w|0)){p=42;break a}if((Tx(m,41592)|0)==0){w=1}else{t=z;u=A;v=B;continue a}}}do{if((p|0)==17){aj(0,46704,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;return 0}else if((p|0)==22){aj(0,46704,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;return 0}else if((p|0)==30){rv(b,21984,(q=i,i=i+8|0,c[q>>2]=m,q)|0);i=q;J=0;K=1060;L=0;i=h;return J|0}else if((p|0)==35){aj(0,46704,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;return 0}else if((p|0)==38){rv(b,21672,(q=i,i=i+8|0,c[q>>2]=m,q)|0);i=q;J=0;K=1060;L=0;i=h;return J|0}else if((p|0)==42){v=jv(1060)|0;if((v|0)==0){aj(0,46704,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;return 0}else{Vx(v|0,m|0,1056)|0;u=v+1056|0;c[u>>2]=0;c[164924]=(c[164924]|0)+1;c[u>>2]=c[r>>2];c[r>>2]=v;break}}else if((p|0)==49){K=1060;L=0;i=h;return J|0}}while(0);if((Kv(b,A,d,e,f)|0)==0){J=0;K=1060;L=0;i=h;return J|0}if((A|0)==0){J=1;K=1060;L=0;i=h;return J|0}else{M=A}while(1){r=c[M+1056>>2]|0;nv(M|0);c[164924]=(c[164924]|0)-1;if((r|0)==0){J=1;break}else{M=r}}K=1060;L=0;i=h;return J|0}}while(0);rv(b,22192,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;J=0;K=1060;L=0;i=h;return J|0}function Mv(b,d,e,f){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,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;h=i;i=i+1080|0;j=h|0;k=h+8|0;l=h+16|0;m=l|0;if((d|0)!=0){c[d>>2]=0}if((e|0)!=0){g[e>>2]=0.0}if((tv(b,l)|0)==0){rv(b,21312,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;o=0;p=1060;q=0;i=h;return o|0}if((tv(b,l)|0)==0){rv(b,21064,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;o=0;p=1060;q=0;i=h;return o|0}r=l+1024|0;s=b+2064|0;t=b+2056|0;u=1;v=0;w=0;x=0;a:while(1){y=c[r>>2]|0;do{if((y|0)==3|(y|0)==5){z=a[m]|0;if((z<<24>>24|0)==41){A=u-1|0}else if((z<<24>>24|0)==40){A=u+1|0}else{A=u}if((A|0)<1){B=w;C=40;break a}z=jv(1060)|0;if((z|0)==0){C=35;break a}D=z;Vx(z|0,m|0,1056)|0;c[164924]=(c[164924]|0)+1;c[z+1056>>2]=0;if((v|0)==0){E=A;F=D;G=D;H=x;break}c[v+1056>>2]=D;E=A;F=D;G=w;H=x}else if((y|0)==4){if((x|0)!=0){D=jv(1060)|0;if((D|0)==0){C=13;break a}z=D;Vx(D|0,m|0,1056)|0;c[164924]=(c[164924]|0)+1;c[D+1056>>2]=0;if((v|0)==0){E=u;F=z;G=z;H=0;break}c[v+1056>>2]=z;E=u;F=z;G=w;H=0;break}if((Tx(m,29872)|0)==0){z=jv(1060)|0;if((z|0)==0){C=18;break a}D=z;Vx(z|0,m|0,1056)|0;c[164924]=(c[164924]|0)+1;c[z+1056>>2]=0;if((v|0)==0){E=u;F=D;G=D;H=1;break}c[v+1056>>2]=D;E=u;F=D;G=w;H=1;break}D=c[s>>2]|0;z=a[m]|0;if(z<<24>>24==0){I=0}else{J=0;K=0;L=z;while(1){z=(da(K+119|0,L<<24>>24)|0)+J|0;M=K+1|0;N=a[l+M|0]|0;if(N<<24>>24==0){I=z;break}else{J=z;K=M;L=N}}}L=c[D+(((I>>>10^I^I>>>20)&1023)<<2)>>2]|0;if((L|0)==0){C=26;break a}else{O=L}while(1){if((Tx(c[O>>2]|0,m)|0)==0){break}L=c[O+28>>2]|0;if((L|0)==0){C=26;break a}else{O=L}}D=(wv(b,l,O,j,k)|0)==0;L=c[j>>2]|0;if(D|(L|0)==0){o=0;C=43;break a}D=c[k>>2]|0;if((D|0)==0){o=0;C=43;break a}c[D+1056>>2]=c[t>>2];c[t>>2]=L;E=u;F=v;G=w;H=0}else{C=38;break a}}while(0);if((tv(b,l)|0)==0){B=G;C=40;break}else{u=E;v=F;w=G;x=H}}if((C|0)==13){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}else if((C|0)==18){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}else if((C|0)==26){rv(b,21984,(n=i,i=i+8|0,c[n>>2]=m,n)|0);i=n;o=0;p=1060;q=0;i=h;return o|0}else if((C|0)==35){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}else if((C|0)==38){rv(b,21672,(n=i,i=i+8|0,c[n>>2]=m,n)|0);i=n;o=0;p=1060;q=0;i=h;return o|0}else if((C|0)==40){if((Kv(b,B,d,e,f)|0)==0){o=0;p=1060;q=0;i=h;return o|0}if((B|0)==0){o=1;p=1060;q=0;i=h;return o|0}else{P=B}while(1){B=c[P+1056>>2]|0;nv(P|0);c[164924]=(c[164924]|0)-1;if((B|0)==0){o=1;break}else{P=B}}p=1060;q=0;i=h;return o|0}else if((C|0)==43){p=1060;q=0;i=h;return o|0}return 0}function Nv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+8|0;d=b|0;e=a+2068|0;f=c[e>>2]|0;do{if((f|0)!=0){g=a+2052|0;if((c[f+8>>2]|0)!=(c[g>>2]|0)){break}h=c[f>>2]|0;c[e>>2]=c[f+12>>2];j=a+2072|0;c[j>>2]=(c[j>>2]|0)-(c[f+4>>2]|0);nv(f);if((h&-3|0)==0){break}if((Lv(a,d,0,1)|0)==0){k=0;i=b;return k|0}h=(c[d>>2]|0)==0;l=jv(16)|0;c[l>>2]=4;c[l+8>>2]=c[g>>2];g=h&1;c[l+4>>2]=g;c[j>>2]=(c[j>>2]|0)+g;c[l+12>>2]=c[e>>2];c[e>>2]=l;k=1;i=b;return k|0}}while(0);rv(a,20880,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;k=0;i=b;return k|0}function Ov(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;i=i+8|0;d=b|0;if((Lv(a,d,0,1)|0)==0){e=0;i=b;return e|0}f=(c[d>>2]|0)==0;d=jv(16)|0;c[d>>2]=1;c[d+8>>2]=c[a+2052>>2];g=f&1;c[d+4>>2]=g;f=a+2072|0;c[f>>2]=(c[f>>2]|0)+g;g=a+2068|0;c[d+12>>2]=c[g>>2];c[g>>2]=d;e=1;i=b;return e|0}function Pv(a){a=a|0;var b=0;b=i;rv(a,20664,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;i=b;return 0}function Qv(b){b=b|0;var d=0,e=0,f=0;d=i;i=i+1064|0;e=d|0;f=e|0;a[f]=0;tv(b,e)|0;rv(b,20136,(b=i,i=i+8|0,c[b>>2]=f,b)|0);i=b;i=d;return 0}function Rv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+1064|0;d=b|0;e=d|0;sv(a,19504,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=d+1052|0;a:while(1){h=0;while(1){if((tv(a,d)|0)==0){j=9;break a}if((c[g>>2]|0)>(h|0)){break a}if((Tx(e,41592)|0)==0){h=1}else{continue a}}}if((j|0)==9){k=1060;l=0;i=b;return 1}j=jv(1060)|0;if((j|0)==0){aj(0,46704,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}Vx(j|0,e|0,1056)|0;e=j+1056|0;c[e>>2]=0;c[164924]=(c[164924]|0)+1;f=a+2056|0;c[e>>2]=c[f>>2];c[f>>2]=j;k=1060;l=0;i=b;return 1}function Sv(a){a=a|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+2096|0;e=d+1024|0;f=d+1032|0;g=f|0;if((Lv(a,e,0,1)|0)==0){h=0;j=1060;k=0;i=d;return h|0}l=a+2052|0;m=c[l>>2]|0;c[f+1048>>2]=c[m+1052>>2];n=c[m+1028>>2]|0;c[f+1040>>2]=n;c[f+1044>>2]=n;c[f+1052>>2]=0;n=c[e>>2]|0;jb(g|0,46936,(m=i,i=i+8|0,c[m>>2]=(n|0)>-1?n:-n|0,m)|0)|0;i=m;c[f+1024>>2]=3;c[f+1028>>2]=12296;f=jv(1060)|0;if((f|0)==0){aj(0,46704,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}Vx(f|0,g|0,1056)|0;g=f+1056|0;c[g>>2]=0;c[164924]=(c[164924]|0)+1;n=a+2056|0;c[g>>2]=c[n>>2];c[n>>2]=f;if((c[e>>2]|0)>=0){h=1;j=1060;k=0;i=d;return h|0}e=c[l>>2]|0;l=c[e+1052>>2]|0;f=c[e+1028>>2]|0;e=jv(1060)|0;if((e|0)==0){aj(0,46704,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;return 0}b[e>>1]=45;Vx(e+2|0,d|0,1022)|0;c[e+1024>>2]=5;c[e+1028>>2]=30;c[e+1040>>2]=f;c[e+1044>>2]=f;c[e+1048>>2]=l;c[e+1052>>2]=0;l=e+1056|0;c[l>>2]=0;c[164924]=(c[164924]|0)+1;c[l>>2]=c[n>>2];c[n>>2]=e;h=1;j=1060;k=0;i=d;return h|0}function Tv(a){a=a|0;var d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;d=i;i=i+2096|0;e=d+1024|0;f=d+1032|0;j=f|0;if((Lv(a,0,e,0)|0)==0){k=0;l=1060;m=0;i=d;return k|0}n=a+2052|0;o=c[n>>2]|0;c[f+1048>>2]=c[o+1052>>2];p=c[o+1028>>2]|0;c[f+1040>>2]=p;c[f+1044>>2]=p;c[f+1052>>2]=0;q=+S(+(+g[e>>2]));jb(j|0,18872,(p=i,i=i+8|0,h[p>>3]=q,p)|0)|0;i=p;c[f+1024>>2]=3;c[f+1028>>2]=10248;f=jv(1060)|0;if((f|0)==0){aj(0,46704,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;return 0}Vx(f|0,j|0,1056)|0;j=f+1056|0;c[j>>2]=0;c[164924]=(c[164924]|0)+1;o=a+2056|0;c[j>>2]=c[o>>2];c[o>>2]=f;if(!(+g[e>>2]<0.0)){k=1;l=1060;m=0;i=d;return k|0}e=c[n>>2]|0;n=c[e+1052>>2]|0;f=c[e+1028>>2]|0;e=jv(1060)|0;if((e|0)==0){aj(0,46704,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;return 0}b[e>>1]=45;Vx(e+2|0,d|0,1022)|0;c[e+1024>>2]=5;c[e+1028>>2]=30;c[e+1040>>2]=f;c[e+1044>>2]=f;c[e+1048>>2]=n;c[e+1052>>2]=0;n=e+1056|0;c[n>>2]=0;c[164924]=(c[164924]|0)+1;c[n>>2]=c[o>>2];c[o>>2]=e;k=1;l=1060;m=0;i=d;return k|0}function Uv(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;b=i;i=i+1064|0;d=b|0;e=d|0;if((tv(a,d)|0)==0){rv(a,16472,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;h=1060;j=0;i=b;return g|0}if((c[d+1052>>2]|0)>0){k=jv(1060)|0;if((k|0)==0){aj(0,46704,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}Vx(k|0,e|0,1056)|0;l=k+1056|0;c[l>>2]=0;c[164924]=(c[164924]|0)+1;m=a+2056|0;c[l>>2]=c[m>>2];c[m>>2]=k;rv(a,60888,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;h=1060;j=0;i=b;return g|0}a:do{if((c[d+1024>>2]|0)==4){k=c[1696]|0;if((k|0)==0){break}else{n=0;o=k}while(1){k=n+1|0;if((Tx(o,e)|0)==0){break}m=c[6784+(k<<3)>>2]|0;if((m|0)==0){break a}else{n=k;o=m}}g=be[c[6788+(n<<3)>>2]&127](a)|0;h=1060;j=0;i=b;return g|0}}while(0);rv(a,60736,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;g=0;h=1060;j=0;i=b;return g|0}function Vv(a){a=a|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;i=i+2096|0;e=d+1024|0;f=d+1032|0;h=f|0;if((Mv(a,e,0,1)|0)==0){j=0;k=1060;l=0;i=d;return j|0}m=a+2052|0;n=c[m>>2]|0;c[f+1048>>2]=c[n+1052>>2];o=c[n+1028>>2]|0;c[f+1040>>2]=o;c[f+1044>>2]=o;c[f+1052>>2]=0;o=c[e>>2]|0;jb(h|0,46936,(n=i,i=i+8|0,c[n>>2]=(o|0)>-1?o:-o|0,n)|0)|0;i=n;c[f+1024>>2]=3;c[f+1028>>2]=12296;o=c[e>>2]|0;p=(o|0)>-1?o:-o|0;c[f+1032>>2]=p;g[f+1036>>2]=+(p>>>0>>>0);p=jv(1060)|0;if((p|0)==0){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}Vx(p|0,h|0,1056)|0;h=p+1056|0;c[h>>2]=0;c[164924]=(c[164924]|0)+1;f=a+2056|0;c[h>>2]=c[f>>2];c[f>>2]=p;if((c[e>>2]|0)>=0){j=1;k=1060;l=0;i=d;return j|0}e=c[m>>2]|0;m=c[e+1052>>2]|0;p=c[e+1028>>2]|0;e=jv(1060)|0;if((e|0)==0){aj(0,46704,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;return 0}b[e>>1]=45;Vx(e+2|0,d|0,1022)|0;c[e+1024>>2]=5;c[e+1028>>2]=30;c[e+1040>>2]=p;c[e+1044>>2]=p;c[e+1048>>2]=m;c[e+1052>>2]=0;m=e+1056|0;c[m>>2]=0;c[164924]=(c[164924]|0)+1;c[m>>2]=c[f>>2];c[f>>2]=e;j=1;k=1060;l=0;i=d;return j|0}function Wv(a){a=a|0;var d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;d=i;i=i+2096|0;e=d+1024|0;f=d+1032|0;j=f|0;if((Mv(a,0,e,0)|0)==0){k=0;l=1060;m=0;i=d;return k|0}n=a+2052|0;o=c[n>>2]|0;c[f+1048>>2]=c[o+1052>>2];p=c[o+1028>>2]|0;c[f+1040>>2]=p;c[f+1044>>2]=p;c[f+1052>>2]=0;q=+S(+(+g[e>>2]));jb(j|0,18872,(p=i,i=i+8|0,h[p>>3]=q,p)|0)|0;i=p;c[f+1024>>2]=3;c[f+1028>>2]=10248;q=+S(+(+g[e>>2]));g[f+1036>>2]=q;c[f+1032>>2]=~~q;f=jv(1060)|0;if((f|0)==0){aj(0,46704,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;return 0}Vx(f|0,j|0,1056)|0;j=f+1056|0;c[j>>2]=0;c[164924]=(c[164924]|0)+1;o=a+2056|0;c[j>>2]=c[o>>2];c[o>>2]=f;if(!(+g[e>>2]<0.0)){k=1;l=1060;m=0;i=d;return k|0}e=c[n>>2]|0;n=c[e+1052>>2]|0;f=c[e+1028>>2]|0;e=jv(1060)|0;if((e|0)==0){aj(0,46704,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;return 0}b[e>>1]=45;Vx(e+2|0,d|0,1022)|0;c[e+1024>>2]=5;c[e+1028>>2]=30;c[e+1040>>2]=f;c[e+1044>>2]=f;c[e+1048>>2]=n;c[e+1052>>2]=0;n=e+1056|0;c[n>>2]=0;c[164924]=(c[164924]|0)+1;c[n>>2]=c[o>>2];c[o>>2]=e;k=1;l=1060;m=0;i=d;return k|0}function Xv(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;b=i;i=i+1064|0;d=b|0;e=d|0;if((tv(a,d)|0)==0){rv(a,59936,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;h=1060;j=0;i=b;return g|0}if((c[d+1052>>2]|0)>0){k=jv(1060)|0;if((k|0)==0){aj(0,46704,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}Vx(k|0,e|0,1056)|0;l=k+1056|0;c[l>>2]=0;c[164924]=(c[164924]|0)+1;m=a+2056|0;c[l>>2]=c[m>>2];c[m>>2]=k;rv(a,59840,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=0;h=1060;j=0;i=b;return g|0}a:do{if((c[d+1024>>2]|0)==4){k=c[1656]|0;if((k|0)==0){break}else{n=0;o=k}while(1){k=n+1|0;if((Tx(o,e)|0)==0){break}m=c[6624+(k<<3)>>2]|0;if((m|0)==0){break a}else{n=k;o=m}}g=be[c[6628+(n<<3)>>2]&127](a)|0;h=1060;j=0;i=b;return g|0}}while(0);n=jv(1060)|0;if((n|0)==0){aj(0,46704,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}Vx(n|0,e|0,1056)|0;o=n+1056|0;c[o>>2]=0;c[164924]=(c[164924]|0)+1;d=a+2056|0;c[o>>2]=c[d>>2];c[d>>2]=n;rv(a,60736,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;g=0;h=1060;j=0;i=b;return g|0}function Yv(b,d){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=i;i=i+1080|0;f=e|0;g=e+8|0;h=e+16|0;if((tv(b,d)|0)==0){j=0;i=e;return j|0}k=d+1024|0;l=d|0;m=h|0;n=h+1024|0;o=h+1|0;p=b+2056|0;q=b+2072|0;r=b+2064|0;a:while(1){s=c[k>>2]|0;do{if((s|0)==1){t=8}else if((s|0)==5){u=a[l]|0;if((u<<24>>24|0)==35){if((Uv(b)|0)==0){j=0;t=28;break a}else{break}}else if((u<<24>>24|0)==36){if((Xv(b)|0)==0){j=0;t=28;break a}else{break}}else{if((s|0)==1){t=8;break}else{t=16;break}}}else{t=16}}while(0);do{if((t|0)==8){t=0;if((Yv(b,h)|0)==0){t=16;break}if((c[n>>2]|0)==1){a[d+((Wx(l|0)|0)-1)|0]=0;s=Wx(l|0)|0;if((s+1+(Wx(o|0)|0)|0)>>>0>1023>>>0){t=11;break a}$x(l|0,o|0)|0;t=16;break}else{s=jv(1060)|0;if((s|0)==0){t=14;break a}Vx(s|0,m|0,1056)|0;u=s+1056|0;c[u>>2]=0;c[164924]=(c[164924]|0)+1;c[u>>2]=c[p>>2];c[p>>2]=s;t=16;break}}}while(0);do{if((t|0)==16){t=0;if((c[q>>2]|0)!=0){break}if((c[k>>2]|0)!=4){t=27;break a}s=c[r>>2]|0;u=a[l]|0;if(u<<24>>24==0){v=0}else{w=0;x=0;y=u;while(1){u=(da(x+119|0,y<<24>>24)|0)+w|0;z=x+1|0;A=a[d+z|0]|0;if(A<<24>>24==0){v=u;break}else{w=u;x=z;y=A}}}y=c[s+(((v>>>10^v^v>>>20)&1023)<<2)>>2]|0;if((y|0)==0){t=27;break a}else{B=y}while(1){if((Tx(c[B>>2]|0,l)|0)==0){break}y=c[B+28>>2]|0;if((y|0)==0){t=27;break a}else{B=y}}s=(wv(b,d,B,f,g)|0)==0;y=c[f>>2]|0;if(s|(y|0)==0){j=0;t=28;break a}s=c[g>>2]|0;if((s|0)==0){j=0;t=28;break a}c[s+1056>>2]=c[p>>2];c[p>>2]=y;}}while(0);if((tv(b,d)|0)==0){j=0;t=28;break}}if((t|0)==11){rv(b,59768,(C=i,i=i+8|0,c[C>>2]=1024,C)|0);i=C;j=0;i=e;return j|0}else if((t|0)==14){aj(0,46704,(C=i,i=i+1|0,i=i+7&-8,c[C>>2]=0,C)|0);i=C;return 0}else if((t|0)==27){Vx(b+2076|0,l|0,1060)|0;j=1;i=e;return j|0}else if((t|0)==28){i=e;return j|0}return 0}function Zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+1064|0;e=d|0;f=e|0;do{if((Yv(a,e)|0)==0){rv(a,59608,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;h=0}else{if((Tx(f,b)|0)==0){h=1;break}rv(a,59512,(g=i,i=i+16|0,c[g>>2]=b,c[g+8>>2]=f,g)|0);i=g;h=0}}while(0);i=d;return h|0}function _v(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;g=i;i=i+1024|0;h=g|0;j=h|0;if((Yv(b,f)|0)==0){rv(b,59440,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}if((c[f+1024>>2]|0)!=(d|0)){a[j]=0;switch(d|0){case 4:{a[j]=a[58672]|0;a[j+1|0]=a[58673]|0;a[j+2|0]=a[58674]|0;a[j+3|0]=a[58675]|0;a[j+4|0]=a[58676]|0;break};case 1:{a[j]=a[59384]|0;a[j+1|0]=a[59385]|0;a[j+2|0]=a[59386]|0;a[j+3|0]=a[59387]|0;a[j+4|0]=a[59388]|0;a[j+5|0]=a[59389]|0;a[j+6|0]=a[59390]|0;break};case 5:{Vx(j|0,58496,12)|0;break};case 3:{a[j]=a[59248]|0;a[j+1|0]=a[59249]|0;a[j+2|0]=a[59250]|0;a[j+3|0]=a[59251]|0;a[j+4|0]=a[59252]|0;a[j+5|0]=a[59253]|0;a[j+6|0]=a[59254]|0;break};case 2:{o=h;c[o>>2]=1702127980;c[o+4>>2]=7102834;break};default:{}}rv(b,58392,(k=i,i=i+16|0,c[k>>2]=j,c[k+8>>2]=f,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}if((d|0)==3){if((c[f+1028>>2]&e|0)==(e|0)){l=1;m=1024;n=0;i=g;return l|0}if((e&8|0)!=0){o=h;c[o>>2]=1768121700;c[o+4>>2]=7102829}if((e&256|0)!=0){c[h>>2]=7890280}if((e&512|0)!=0){a[j]=a[57976]|0;a[j+1|0]=a[57977]|0;a[j+2|0]=a[57978]|0;a[j+3|0]=a[57979]|0;a[j+4|0]=a[57980]|0;a[j+5|0]=a[57981]|0}if((e&1024|0)!=0){a[j]=a[57800]|0;a[j+1|0]=a[57801]|0;a[j+2|0]=a[57802]|0;a[j+3|0]=a[57803]|0;a[j+4|0]=a[57804]|0;a[j+5|0]=a[57805]|0;a[j+6|0]=a[57806]|0}if((e&8192|0)!=0){o=h+(Wx(j|0)|0)|0;a[o]=a[57688]|0;a[o+1|0]=a[57689]|0;a[o+2|0]=a[57690]|0;a[o+3|0]=a[57691]|0;a[o+4|0]=a[57692]|0;a[o+5|0]=a[57693]|0}if((e&16384|0)!=0){Vx(h+(Wx(j|0)|0)|0,57528,10)|0}if((e&2048|0)!=0){o=h+(Wx(j|0)|0)|0;a[o]=a[57424]|0;a[o+1|0]=a[57425]|0;a[o+2|0]=a[57426]|0;a[o+3|0]=a[57427]|0;a[o+4|0]=a[57428]|0;a[o+5|0]=a[57429]|0;a[o+6|0]=a[57430]|0}if((e&4096|0)!=0){Vx(h+(Wx(j|0)|0)|0,56880,9)|0}rv(b,59512,(k=i,i=i+16|0,c[k>>2]=j,c[k+8>>2]=f,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}else if((d|0)==5){if((c[f+1028>>2]|0)==(e|0)){l=1;m=1024;n=0;i=g;return l|0}rv(b,56648,(k=i,i=i+8|0,c[k>>2]=f,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}else{l=1;m=1024;n=0;i=g;return l|0}return 0}function $v(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((Yv(a,b)|0)!=0){e=1;i=d;return e|0}rv(a,59440,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;e=0;i=d;return e|0}function aw(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=jv(1060)|0;if((d|0)==0){aj(0,46704,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}else{Vx(d|0,a+2076|0,1056)|0;e=d+1056|0;c[e>>2]=0;c[164924]=(c[164924]|0)+1;f=a+2056|0;c[e>>2]=c[f>>2];c[f>>2]=d;i=b;return}}function bw(b){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;d=ww(b)|0;if((d|0)==0){e=0;return e|0}c[d+2136>>2]=0;f=jv(3136)|0;g=f;Zx(f|0,0,3136)|0;ay(f|0,b|0,64)|0;c[f+2052>>2]=d;c[f+2056>>2]=0;c[f+2060>>2]=0;c[f+2068>>2]=0;c[f+2072>>2]=0;d=f+2064|0;c[d>>2]=kv(4096)|0;f=c[196756]|0;if((f|0)==0){e=g;return e|0}else{h=f}while(1){f=Ev(0,h)|0;b=c[d>>2]|0;i=c[f>>2]|0;j=a[i]|0;if(j<<24>>24==0){k=0}else{l=0;m=0;n=j;while(1){j=(da(m+119|0,n<<24>>24)|0)+l|0;o=m+1|0;p=a[i+o|0]|0;if(p<<24>>24==0){k=j;break}else{l=j;m=o;n=p}}}n=b+(((k>>>10^k^k>>>20)&1023)<<2)|0;c[f+28>>2]=c[n>>2];c[n>>2]=f;n=c[h+24>>2]|0;if((n|0)==0){e=g;break}else{h=n}}return e|0}function cw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=a+2052|0;d=c[b>>2]|0;if((d|0)!=0){e=d;do{c[b>>2]=c[e+2136>>2];yw(e);e=c[b>>2]|0;}while((e|0)!=0)}e=a+2056|0;b=c[e>>2]|0;if((b|0)!=0){d=b;do{c[e>>2]=c[d+1056>>2];nv(d|0);c[164924]=(c[164924]|0)-1;d=c[e>>2]|0;}while((d|0)!=0)}d=a+2064|0;e=0;b=c[d>>2]|0;while(1){f=b+(e<<2)|0;g=c[f>>2]|0;if((g|0)==0){h=b}else{i=f;f=g;while(1){c[i>>2]=c[f+28>>2];g=c[f+16>>2]|0;if((g|0)!=0){j=g;while(1){g=c[j+1056>>2]|0;nv(j|0);c[164924]=(c[164924]|0)-1;if((g|0)==0){break}else{j=g}}}j=c[f+20>>2]|0;if((j|0)!=0){g=j;while(1){j=c[g+1056>>2]|0;nv(g|0);c[164924]=(c[164924]|0)-1;if((j|0)==0){break}else{g=j}}}nv(c[f>>2]|0);nv(f);g=c[d>>2]|0;j=g+(e<<2)|0;k=c[j>>2]|0;if((k|0)==0){h=g;break}else{i=j;f=k}}}f=e+1|0;if((f|0)<1024){e=f;b=h}else{break}}b=a+2068|0;e=c[b>>2]|0;if((e|0)==0){l=h}else{h=e;do{c[b>>2]=c[h+12>>2];nv(h);h=c[b>>2]|0;}while((h|0)!=0);l=c[d>>2]|0}if((l|0)==0){m=a|0;nv(m);return}nv(l);m=a|0;nv(m);return}function dw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=1;while(1){d=571024+(b<<2)|0;e=b+1|0;if((c[d>>2]|0)==0){f=4;break}if((e|0)<64){b=e}else{g=0;break}}do{if((f|0)==4){if((b|0)>63){g=0;break}zw(2551472);e=bw(a)|0;if((e|0)==0){g=0;break}c[d>>2]=e;g=b}}while(0);return g|0}function ew(a){a=a|0;var b=0,d=0,e=0;do{if((a-1|0)>>>0>62>>>0){b=0}else{d=571024+(a<<2)|0;e=c[d>>2]|0;if((e|0)==0){b=0;break}cw(e);c[d>>2]=0;b=1}}while(0);return b|0}function fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0;d=i;i=i+1064|0;e=d|0;f=e|0;do{if((a-1|0)>>>0>62>>>0){h=0}else{j=c[571024+(a<<2)>>2]|0;if((j|0)==0){h=0;break}k=Yv(j,e)|0;j=b+16|0;by(j|0,f|0)|0;l=c[e+1024>>2]|0;c[b>>2]=l;c[b+4>>2]=c[e+1028>>2];c[b+8>>2]=c[e+1032>>2];g[b+12>>2]=+g[e+1036>>2];if((l|0)!=1){h=k;break}sw(j);h=k}}while(0);i=d;return h|0}function gw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a-1|0)>>>0>62>>>0){e=0;return e|0}f=571024+(a<<2)|0;a=c[f>>2]|0;if((a|0)==0){e=0;return e|0}by(b|0,a|0)|0;a=c[(c[f>>2]|0)+2052>>2]|0;if((a|0)==0){g=0}else{g=c[a+1052>>2]|0}c[d>>2]=g;e=1;return e|0}function hw(a){a=a|0;zw(a);return}function iw(){var a=0,b=0,d=0,e=0;a=i;b=1;do{d=c[571024+(b<<2)>>2]|0;if((d|0)!=0){ue[c[636260]&31](3,56376,(e=i,i=i+8|0,c[e>>2]=c[d+2052>>2],e)|0);i=e}b=b+1|0;}while((b|0)<64);i=a;return}function jw(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;e=b+1072|0;b=c[e>>2]|0;if((b|0)==0){f=jv(1024)|0;c[e>>2]=f;g=f}else{g=b}Zx(g|0,0,1024)|0;g=d|0;b=c[g>>2]|0;if((b|0)==0){return}else{h=0;i=g;j=b}do{b=i;g=c[(c[e>>2]|0)+(a[j]<<2)>>2]|0;do{if((g|0)==0){c[d+(h*12|0)+8>>2]=0;k=14}else{f=Wx(j|0)|0;l=0;m=g;while(1){if((Wx(c[m>>2]|0)|0)>>>0<f>>>0){break}n=c[m+8>>2]|0;if((n|0)==0){k=12;break}else{l=m;m=n}}if((k|0)==12){k=0;c[d+(h*12|0)+8>>2]=0;if((m|0)==0){k=14;break}c[m+8>>2]=b;break}c[d+(h*12|0)+8>>2]=m;if((l|0)==0){c[(c[e>>2]|0)+(a[c[i>>2]|0]<<2)>>2]=b;break}else{c[l+8>>2]=b;break}}}while(0);if((k|0)==14){k=0;c[(c[e>>2]|0)+(a[c[i>>2]|0]<<2)>>2]=b}h=h+1|0;i=d+(h*12|0)|0;j=c[i>>2]|0;}while((j|0)!=0);return}function kw(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;e=i;i=i+1040|0;f=e+1024|0;g=e|0;if((c[a+1064>>2]&1|0)!=0){h=1024;j=0;i=e;return}k=f;c[k>>2]=d;c[k+4>>2]=0;fd(g|0,1024,b|0,f|0)|0;f=c[a+1052>>2]|0;ue[c[636260]&31](3,29832,(b=i,i=i+24|0,c[b>>2]=a,c[b+8>>2]=f,c[b+16>>2]=g,b)|0);i=b;h=1024;j=0;i=e;return}function lw(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;e=i;i=i+1040|0;f=e+1024|0;g=e|0;if((c[a+1064>>2]&2|0)!=0){h=1024;j=0;i=e;return}k=f;c[k>>2]=d;c[k+4>>2]=0;fd(g|0,1024,b|0,f|0)|0;f=c[a+1052>>2]|0;ue[c[636260]&31](2,29832,(b=i,i=i+24|0,c[b>>2]=a,c[b+8>>2]=f,c[b+16>>2]=g,b)|0);i=b;h=1024;j=0;i=e;return}function mw(b,d){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,v=0,w=0;e=i;f=b+1028|0;g=c[f>>2]|0;h=g+1|0;c[f>>2]=h;j=a[h]|0;a:do{switch(j<<24>>24|0){case 34:{k=34;break};case 116:{k=9;break};case 39:{k=39;break};case 98:{k=8;break};case 97:{k=7;break};case 110:{k=10;break};case 114:{k=13;break};case 102:{k=12;break};case 92:{k=92;break};case 63:{k=63;break};case 120:{l=0;m=g+2|0;b:while(1){c[f>>2]=m;n=a[m]|0;o=n<<24>>24;do{if((n-48&255)>>>0<10>>>0){p=o-48|0}else{if((n-65&255)>>>0<26>>>0){p=o-55|0;break}if(!((n-97&255)>>>0<26>>>0)){break b}p=o-87|0}}while(0);l=p+(l<<4)|0;m=m+1|0}c[f>>2]=m-1;if((l|0)<=255){k=l&255;break a}lw(b,29544,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;k=-1;break};case 118:{k=11;break};default:{if((j-48&255)>>>0>9>>>0){kw(b,29224,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;o=c[f>>2]|0;r=o;s=a[o]|0}else{r=h;s=j}if((s-48&255)>>>0<10>>>0){t=0;u=r;v=s}else{c[f>>2]=r-1;k=0;break a}while(1){w=(t*10|0)-48+(v<<24>>24)|0;o=u+1|0;c[f>>2]=o;n=a[o]|0;if((n-48&255)>>>0<10>>>0){t=w;u=o;v=n}else{break}}c[f>>2]=u;if((w|0)<=255){k=w&255;break a}lw(b,29544,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;k=-1}}}while(0);c[f>>2]=(c[f>>2]|0)+1;a[d]=k;i=e;return 1}function nw(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,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;f=i;c[d+1024>>2]=(e|0)==34?1:2;g=b+1028|0;h=c[g>>2]|0;c[g>>2]=h+1;j=d|0;a[j]=a[h]|0;h=b+1064|0;k=b+1052|0;l=1;a:while(1){m=c[g>>2]|0;while(1){n=a[m]|0;if(n<<24>>24==92){if((c[h>>2]&8|0)==0){o=6;break}}if((n<<24>>24|0)!=(e|0)){o=30;break}p=m+1|0;c[g>>2]=p;if((c[h>>2]&4|0)!=0){break a}q=c[k>>2]|0;r=p;s=q;while(1){t=a[r]|0;if(t<<24>>24<33){if((t<<24>>24|0)==0){o=26;break a}else if((t<<24>>24|0)==10){u=s+1|0;c[k>>2]=u;v=u}else{v=s}u=r+1|0;c[g>>2]=u;r=u;s=v;continue}if(!(t<<24>>24==47)){break}u=r+1|0;w=a[u]|0;if((w<<24>>24|0)==47){c[g>>2]=u;x=u;while(1){y=x+1|0;c[g>>2]=y;z=a[y]|0;if((z<<24>>24|0)==10){break}else if((z<<24>>24|0)==0){o=26;break a}else{x=y}}y=s+1|0;c[k>>2]=y;z=x+2|0;c[g>>2]=z;if((a[z]|0)==0){o=26;break a}else{r=z;s=y;continue}}else if((w<<24>>24|0)!=42){break}c[g>>2]=u;y=u;z=s;while(1){A=y+1|0;c[g>>2]=A;B=a[A]|0;if((B<<24>>24|0)==10){C=z+1|0;c[k>>2]=C;D=a[A]|0;E=C}else if((B<<24>>24|0)==0){o=26;break a}else{D=B;E=z}if(!(D<<24>>24==42)){y=A;z=E;continue}F=y+2|0;if((a[F]|0)==47){break}else{y=A;z=E}}c[g>>2]=F;if((a[F]|0)==0){o=26;break a}z=y+3|0;c[g>>2]=z;if((a[z]|0)==0){o=26;break a}else{r=z;s=E}}if((t<<24>>24|0)!=(e|0)){o=28;break a}s=r+1|0;c[g>>2]=s;m=s}if((o|0)==6){o=0;mw(b,d+l|0)|0}else if((o|0)==30){o=0;if((n<<24>>24|0)==0){o=31;break}else if((n<<24>>24|0)==10){o=32;break}c[g>>2]=m+1;a[d+l|0]=a[m]|0}if((l|0)>1020){o=3;break}else{l=l+1|0}}if((o|0)==3){kw(b,28792,(G=i,i=i+8|0,c[G>>2]=1024,G)|0);i=G;H=0;i=f;return H|0}else if((o|0)==26){c[g>>2]=p;c[k>>2]=q}else if((o|0)==28){c[g>>2]=p;c[k>>2]=q}else if((o|0)==31){a[d+l|0]=0;kw(b,28432,(G=i,i=i+1|0,i=i+7&-8,c[G>>2]=0,G)|0);i=G;H=0;i=f;return H|0}else if((o|0)==32){a[d+l|0]=0;kw(b,28080,(G=i,i=i+8|0,c[G>>2]=j,G)|0);i=G;H=0;i=f;return H|0}G=l+1|0;a[d+l|0]=e;a[d+G|0]=0;c[d+1028>>2]=G;H=1;i=f;return H|0}function ow(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0.0;c[e>>2]=0;g[f>>2]=0.0;if((d&2048|0)!=0){h=0;i=b;j=0.0;a:while(1){k=a[i]|0;do{if((k<<24>>24|0)==0){break a}else if((k<<24>>24|0)==46){if((h|0)!=0){l=34;break a}m=i+1|0;n=10;l=6}else{if((h|0)!=0){m=i;n=h;l=6;break}o=j*10.0+ +((k<<24>>24)-48|0);g[f>>2]=o;p=0;q=i;r=o}}while(0);if((l|0)==6){l=0;o=j+ +((a[m]|0)-48|0)/+(n>>>0>>>0);g[f>>2]=o;p=n*10|0;q=m;r=o}h=p;i=q+1|0;j=r}if((l|0)==34){return}c[e>>2]=~~j;return}if((d&8|0)!=0){l=a[b]|0;if(l<<24>>24==0){s=0.0}else{q=b;i=l;l=0;do{q=q+1|0;l=(i<<24>>24)-48+(l*10|0)|0;c[e>>2]=l;i=a[q]|0;}while(!(i<<24>>24==0));s=+(l>>>0>>>0)}g[f>>2]=s;return}if((d&256|0)!=0){l=b+2|0;if((a[l]|0)==0){t=0}else{i=l;l=0;while(1){q=l<<4;c[e>>2]=q;p=a[i]|0;h=p<<24>>24;do{if((p-97&255)>>>0<6>>>0){m=q-87+h|0;c[e>>2]=m;u=m}else{if((p-65&255)>>>0<6>>>0){m=q-55+h|0;c[e>>2]=m;u=m;break}else{m=q-48+h|0;c[e>>2]=m;u=m;break}}}while(0);h=i+1|0;if((a[h]|0)==0){t=u;break}else{i=h;l=u}}}g[f>>2]=+(t>>>0>>>0);return}if((d&512|0)!=0){t=b+1|0;u=a[t]|0;if(u<<24>>24==0){v=0.0}else{l=t;t=u;u=0;do{u=(t<<24>>24)-48+(u<<3)|0;c[e>>2]=u;l=l+1|0;t=a[l]|0;}while(!(t<<24>>24==0));v=+(u>>>0>>>0)}g[f>>2]=v;return}if((d&1024|0)==0){return}d=b+2|0;b=a[d]|0;if(b<<24>>24==0){w=0.0}else{u=d;d=b;b=0;do{u=u+1|0;b=(d<<24>>24)-48+(b<<1)|0;c[e>>2]=b;d=a[u]|0;}while(!(d<<24>>24==0));w=+(b>>>0>>>0)}g[f>>2]=w;return}function pw(b,d){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=i;c[d+1024>>2]=3;f=b+1028|0;g=c[f>>2]|0;h=a[g]|0;j=h<<24>>24==48;do{if(j){k=g+1|0;l=a[k]|0;if((l<<24>>24|0)==120|(l<<24>>24|0)==88){c[f>>2]=k;a[d|0]=a[g]|0;k=c[f>>2]|0;c[f>>2]=k+1;a[d+1|0]=a[k]|0;k=c[f>>2]|0;l=a[k]|0;a:do{if((l-48&255)>>>0<10>>>0|(l-97&255)>>>0<6>>>0|l<<24>>24==65){m=2;n=k;while(1){c[f>>2]=n+1;a[d+m|0]=a[n]|0;o=m+1|0;if((m|0)>1022){break}p=c[f>>2]|0;q=a[p]|0;if((q-48&255)>>>0<10>>>0|(q-97&255)>>>0<6>>>0|q<<24>>24==65){m=o;n=p}else{r=o;s=p;break a}}kw(b,27264,(t=i,i=i+8|0,c[t>>2]=1024,t)|0);i=t;u=0;i=e;return u|0}else{r=2;s=k}}while(0);k=d+1028|0;l=c[k>>2]|256;c[k>>2]=l;v=r;w=l;x=s;break}l=g+1|0;k=a[l]|0;if(!((k<<24>>24|0)==98|(k<<24>>24|0)==66)){y=14;break}c[f>>2]=l;a[d|0]=a[g]|0;l=c[f>>2]|0;c[f>>2]=l+1;a[d+1|0]=a[l]|0;l=c[f>>2]|0;b:do{if(((a[l]|0)-48&255)>>>0<2>>>0){k=2;n=l;while(1){c[f>>2]=n+1;a[d+k|0]=a[n]|0;m=k+1|0;if((k|0)>1022){break}p=c[f>>2]|0;if(((a[p]|0)-48&255)>>>0<2>>>0){k=m;n=p}else{z=m;A=p;break b}}kw(b,26736,(t=i,i=i+8|0,c[t>>2]=1024,t)|0);i=t;u=0;i=e;return u|0}else{z=2;A=l}}while(0);l=d+1028|0;n=c[l>>2]|1024;c[l>>2]=n;v=z;w=n;x=A}else{y=14}}while(0);do{if((y|0)==14){A=0;z=j&1;s=0;r=g;n=h;while(1){if((n<<24>>24|0)==56|(n<<24>>24|0)==57){B=A;C=0}else if((n<<24>>24|0)==46){B=1;C=z}else{if((n-48&255)>>>0>9>>>0){y=21;break}else{B=A;C=z}}c[f>>2]=r+1;a[d+s|0]=a[r]|0;if((s|0)>1021){y=20;break}l=c[f>>2]|0;A=B;z=C;s=s+1|0;r=l;n=a[l]|0}if((y|0)==20){kw(b,25976,(t=i,i=i+8|0,c[t>>2]=1024,t)|0);i=t;u=0;i=e;return u|0}else if((y|0)==21){n=d+1028|0;l=c[n>>2]|((z|0)==0?8:512);c[n>>2]=l;if((A|0)==0){v=s;w=l;x=r;break}k=l|2048;c[n>>2]=k;v=s;w=k;x=r;break}}}while(0);t=d+1028|0;b=a[x]|0;do{if((b<<24>>24|0)==117|(b<<24>>24|0)==85){y=27}else if((b<<24>>24|0)==108|(b<<24>>24|0)==76){if((w&8192|0)==0){C=x+1|0;c[f>>2]=C;B=w|8192;c[t>>2]=B;D=B;E=C;break}else{if(b<<24>>24==85){y=27;break}else{D=w;E=x;break}}}else{D=w;E=x}}while(0);do{if((y|0)==27){if((w&18432|0)!=0){D=w;E=x;break}b=x+1|0;c[f>>2]=b;C=w|16384;c[t>>2]=C;D=C;E=b}}while(0);w=a[E]|0;do{if((w<<24>>24|0)==108|(w<<24>>24|0)==76){if((D&8192|0)==0){c[f>>2]=E+1;c[t>>2]=D|8192;break}else{if(w<<24>>24==85){y=34;break}else{break}}}else if((w<<24>>24|0)==117|(w<<24>>24|0)==85){y=34}}while(0);do{if((y|0)==34){if((D&18432|0)!=0){break}c[f>>2]=E+1;c[t>>2]=D|16384}}while(0);a[d+v|0]=0;ow(d|0,c[t>>2]|0,d+1032|0,d+1036|0);d=c[t>>2]|0;if((d&2048|0)!=0){u=1;i=e;return u|0}c[t>>2]=d|4096;u=1;i=e;return u|0}function qw(b,d){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,v=0,w=0,x=0,y=0;e=i;f=b+1060|0;if((c[f>>2]|0)!=0){c[f>>2]=0;Vx(d|0,b+1076|0,1060)|0;g=1;i=e;return g|0}f=b+1028|0;c[b+1036>>2]=c[f>>2];h=b+1052|0;j=b+1056|0;c[j>>2]=c[h>>2];k=d|0;Zx(k|0,0,1060)|0;l=c[f>>2]|0;c[b+1040>>2]=l;c[d+1040>>2]=l;l=c[f>>2]|0;a:while(1){m=a[l]|0;if(m<<24>>24<33){if((m<<24>>24|0)==10){c[h>>2]=(c[h>>2]|0)+1}else if((m<<24>>24|0)==0){g=0;n=49;break}o=l+1|0;c[f>>2]=o;l=o;continue}if(!(m<<24>>24==47)){n=20;break}m=l+1|0;o=a[m]|0;if((o<<24>>24|0)==47){c[f>>2]=m;p=m;while(1){q=p+1|0;c[f>>2]=q;r=a[q]|0;if((r<<24>>24|0)==0){g=0;n=49;break a}else if((r<<24>>24|0)==10){break}else{p=q}}c[h>>2]=(c[h>>2]|0)+1;q=p+2|0;c[f>>2]=q;if((a[q]|0)==0){g=0;n=49;break}else{l=q;continue}}else if((o<<24>>24|0)!=42){n=20;break}c[f>>2]=m;q=m;while(1){r=q+1|0;c[f>>2]=r;s=a[r]|0;if((s<<24>>24|0)==10){c[h>>2]=(c[h>>2]|0)+1;t=a[r]|0}else if((s<<24>>24|0)==0){g=0;n=49;break a}else{t=s}if(!(t<<24>>24==42)){q=r;continue}u=q+2|0;if((a[u]|0)==47){break}else{q=r}}c[f>>2]=u;if((a[u]|0)==0){g=0;n=49;break}m=q+3|0;c[f>>2]=m;if((a[m]|0)==0){g=0;n=49;break}else{l=m}}if((n|0)==20){c[b+1044>>2]=l;c[d+1044>>2]=l;c[d+1048>>2]=c[h>>2];c[d+1052>>2]=(c[h>>2]|0)-(c[j>>2]|0);j=c[f>>2]|0;h=a[j]|0;b:do{if((h<<24>>24|0)==39){if((nw(b,d,39)|0)==0){g=0}else{break}i=e;return g|0}else if((h<<24>>24|0)==34){if((nw(b,d,34)|0)==0){g=0}else{break}i=e;return g|0}else{do{if(!((h-48&255)>>>0<10>>>0)){if(h<<24>>24==46){if(((a[j+1|0]|0)-48&255)>>>0<10>>>0){break}}if((c[b+1064>>2]&16|0)!=0){c:do{if(h<<24>>24>32&h<<24>>24!=59){l=0;u=j;while(1){if((l|0)>1023){break}c[f>>2]=u+1;t=l+1|0;a[d+l|0]=a[u]|0;m=c[f>>2]|0;o=a[m]|0;if(o<<24>>24>32&o<<24>>24!=59){l=t;u=m}else{v=t;break c}}kw(b,24992,(w=i,i=i+8|0,c[w>>2]=1024,w)|0);i=w;g=0;i=e;return g|0}else{v=0}}while(0);a[d+v|0]=0;Vx(b+1076|0,k|0,1060)|0;g=1;i=e;return g|0}do{if(!((h-97&255)>>>0<26>>>0)){if((h-65&255)>>>0<26>>>0|h<<24>>24==95){break}u=c[(c[b+1072>>2]|0)+(h<<24>>24<<2)>>2]|0;d:do{if((u|0)!=0){l=c[b+1032>>2]|0;t=u;while(1){x=c[t>>2]|0;y=Wx(x|0)|0;if(!((j+y|0)>>>0>l>>>0)){if((Ux(j,x,y)|0)==0){break}}m=c[t+8>>2]|0;if((m|0)==0){break d}else{t=m}}ay(k|0,x|0,1024)|0;c[f>>2]=(c[f>>2]|0)+y;c[d+1024>>2]=5;c[d+1028>>2]=c[t+4>>2];break b}}while(0);kw(b,24632,(w=i,i=i+1|0,i=i+7&-8,c[w>>2]=0,w)|0);i=w;g=0;i=e;return g|0}}while(0);c[d+1024>>2]=4;c[f>>2]=j+1;a[k]=a[j]|0;u=1;while(1){l=c[f>>2]|0;m=a[l]|0;if(!((m-97&255)>>>0<26>>>0|(m-65&255)>>>0<26>>>0)){if(!((m-48&255)>>>0<10>>>0|m<<24>>24==95)){n=40;break}}c[f>>2]=l+1;a[d+u|0]=a[l]|0;if((u|0)>1022){break}else{u=u+1|0}}if((n|0)==40){a[d+u|0]=0;c[d+1028>>2]=u;break b}kw(b,27680,(w=i,i=i+8|0,c[w>>2]=1024,w)|0);i=w;g=0;i=e;return g|0}}while(0);if((pw(b,d)|0)==0){g=0}else{break}i=e;return g|0}}while(0);Vx(b+1076|0,k|0,1060)|0;g=1;i=e;return g|0}else if((n|0)==49){i=e;return g|0}return 0}function rw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;g=i;i=i+1024|0;h=g|0;j=h|0;if((qw(b,f)|0)==0){kw(b,23768,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}if((c[f+1024>>2]|0)!=(d|0)){switch(d|0){case 4:{a[j]=a[22184]|0;a[j+1|0]=a[22185]|0;a[j+2|0]=a[22186]|0;a[j+3|0]=a[22187]|0;a[j+4|0]=a[22188]|0;break};case 1:{a[j]=a[23528]|0;a[j+1|0]=a[23529]|0;a[j+2|0]=a[23530]|0;a[j+3|0]=a[23531]|0;a[j+4|0]=a[23532]|0;a[j+5|0]=a[23533]|0;a[j+6|0]=a[23534]|0;break};case 5:{Vx(j|0,21968,12)|0;break};case 2:{o=h;c[o>>2]=1702127980;c[o+4>>2]=7102834;break};case 3:{a[j]=a[22632]|0;a[j+1|0]=a[22633]|0;a[j+2|0]=a[22634]|0;a[j+3|0]=a[22635]|0;a[j+4|0]=a[22636]|0;a[j+5|0]=a[22637]|0;a[j+6|0]=a[22638]|0;break};default:{}}kw(b,21648,(k=i,i=i+16|0,c[k>>2]=j,c[k+8>>2]=f,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}if((d|0)==5){if((e|0)<0){kw(b,18840,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}if((c[f+1028>>2]|0)==(e|0)){l=1;m=1024;n=0;i=g;return l|0}kw(b,24056,(k=i,i=i+16|0,c[k>>2]=c[(c[b+1068>>2]|0)+(e*12|0)>>2],c[k+8>>2]=f,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}else if((d|0)==3){if((c[f+1028>>2]&e|0)==(e|0)){l=1;m=1024;n=0;i=g;return l|0}if((e&8|0)!=0){d=h;c[d>>2]=1768121700;c[d+4>>2]=7102829}if((e&256|0)!=0){c[h>>2]=7890280}if((e&512|0)!=0){a[j]=a[20872]|0;a[j+1|0]=a[20873]|0;a[j+2|0]=a[20874]|0;a[j+3|0]=a[20875]|0;a[j+4|0]=a[20876]|0;a[j+5|0]=a[20877]|0}if((e&1024|0)!=0){a[j]=a[20656]|0;a[j+1|0]=a[20657]|0;a[j+2|0]=a[20658]|0;a[j+3|0]=a[20659]|0;a[j+4|0]=a[20660]|0;a[j+5|0]=a[20661]|0;a[j+6|0]=a[20662]|0}if((e&8192|0)!=0){d=h+(Wx(j|0)|0)|0;a[d]=a[20416]|0;a[d+1|0]=a[20417]|0;a[d+2|0]=a[20418]|0;a[d+3|0]=a[20419]|0;a[d+4|0]=a[20420]|0;a[d+5|0]=a[20421]|0}if((e&16384|0)!=0){Vx(h+(Wx(j|0)|0)|0,20120,10)|0}if((e&2048|0)!=0){d=h+(Wx(j|0)|0)|0;a[d]=a[19496]|0;a[d+1|0]=a[19497]|0;a[d+2|0]=a[19498]|0;a[d+3|0]=a[19499]|0;a[d+4|0]=a[19500]|0;a[d+5|0]=a[19501]|0;a[d+6|0]=a[19502]|0}if((e&4096|0)!=0){Vx(h+(Wx(j|0)|0)|0,19104,9)|0}kw(b,24056,(k=i,i=i+16|0,c[k>>2]=j,c[k+8>>2]=f,k)|0);i=k;l=0;m=1024;n=0;i=g;return l|0}else{l=1;m=1024;n=0;i=g;return l|0}return 0}function sw(b){b=b|0;var c=0;if((a[b]|0)==34){_x(b|0,b+1|0,Wx(b|0)|0)|0}c=b+((Wx(b|0)|0)-1)|0;if((a[c]|0)!=34){return}a[c]=0;return}function tw(b){b=b|0;var c=0;if((a[b]|0)==39){_x(b|0,b+1|0,Wx(b|0)|0)|0}c=b+((Wx(b|0)|0)-1)|0;if((a[c]|0)!=39){return}a[c]=0;return}function uw(a,b){a=a|0;b=b|0;c[a+1064>>2]=b;return}function vw(a){a=a|0;return(c[a+1028>>2]|0)>>>0>=(c[a+1032>>2]|0)>>>0|0}function ww(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;i=i+72|0;e=d|0;f=d+8|0;if((a[2550584]|0)==0){xn(f,64,18040,(g=i,i=i+8|0,c[g>>2]=b,g)|0)|0;i=g}else{xn(f,64,18184,(g=i,i=i+16|0,c[g>>2]=2550584,c[g+8>>2]=b,g)|0)|0;i=g}g=he[c[636272]&63](f,e,0)|0;if((c[e>>2]|0)==0){h=0;j=64;k=0;i=d;return h|0}f=kv(g+2141|0)|0;l=f;Zx(f|0,0,2140)|0;by(f|0,b|0)|0;b=f+1024|0;c[b>>2]=f+2140;a[f+(g+2140)|0]=0;c[f+1048>>2]=g;m=c[b>>2]|0;c[f+1028>>2]=m;c[f+1036>>2]=m;c[f+1032>>2]=m+g;c[f+1060>>2]=0;c[f+1052>>2]=1;c[f+1056>>2]=1;jw(l,6960);c[f+1068>>2]=6960;he[c[636273]&63](c[b>>2]|0,g,c[e>>2]|0)|0;je[c[636275]&127](c[e>>2]|0);h=l;j=64;k=0;i=d;return h|0}function xw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=kv(d+2141|0)|0;g=f;Zx(f|0,0,2140)|0;by(f|0,e|0)|0;e=f+1024|0;c[e>>2]=f+2140;a[f+(d+2140)|0]=0;c[f+1048>>2]=d;h=c[e>>2]|0;c[f+1028>>2]=h;c[f+1036>>2]=h;c[f+1032>>2]=h+d;c[f+1060>>2]=0;c[f+1052>>2]=1;c[f+1056>>2]=1;jw(g,6960);c[f+1068>>2]=6960;Vx(c[e>>2]|0,b|0,d)|0;return g|0}function yw(a){a=a|0;var b=0;b=c[a+1072>>2]|0;if((b|0)!=0){nv(b)}nv(a|0);return}function zw(a){a=a|0;var b=0,d=0;b=i;xn(2550584,64,18040,(d=i,i=i+8|0,c[d>>2]=a,d)|0)|0;i=d;i=b;return}function Aw(b,d,e){b=b|0;d=d|0;e=e|0;var f=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,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0.0;f=i;i=i+1064|0;j=f|0;k=j|0;a:do{if(($v(b,j)|0)==0){l=0}else{m=j+1024|0;n=c[m>>2]|0;if((n|0)==5){if((c[d+8>>2]&1024|0)!=0){rv(b,43584,(o=i,i=i+8|0,c[o>>2]=k,o)|0);i=o;l=0;break}if((Tx(k,56240)|0)!=0){rv(b,46560,(o=i,i=i+8|0,c[o>>2]=k,o)|0);i=o;l=0;break}if(($v(b,j)|0)==0){l=0;break}p=1;q=c[m>>2]|0}else{p=0;q=n}if((q|0)!=3){rv(b,40120,(o=i,i=i+8|0,c[o>>2]=k,o)|0);i=o;l=0;break}if((c[j+1028>>2]&2048|0)!=0){n=c[d+8>>2]|0;if((n&255|0)!=3){rv(b,35336,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;l=0;break}r=+g[j+1036>>2];if((p|0)==0){s=r}else{s=-0.0-r}do{if((n&512|0)!=0){r=+g[d+16>>2];t=+g[d+20>>2];if(!(s<r)){if(!(s>t)){break}}rv(b,30136,(o=i,i=i+16|0,h[o>>3]=r,h[o+8>>3]=t,o)|0);i=o;l=0;break a}}while(0);g[e>>2]=s;l=1;break}n=c[j+1032>>2]|0;m=(p|0)==0?n:-n|0;n=c[d+8>>2]|0;u=n&255;do{if((u|0)==1){v=n&1024;w=(v|0)==0?-128:0;x=v>>>3|127;y=24}else if((u|0)==2){v=n&1024;w=(v|0)==0?-32768:0;x=v<<5|32767;y=24}else if((u|0)==3){if((n&512|0)==0){break}t=+(m|0);r=+g[d+16>>2];z=+g[d+20>>2];if(!(t<r|t>z)){y=31;break}rv(b,22424,(o=i,i=i+24|0,c[o>>2]=m,h[o+8>>3]=r,h[o+16>>3]=z,o)|0);i=o;l=0;break a}else{l=1;break a}}while(0);do{if((y|0)==24){if((n&512|0)==0){A=x;B=w}else{z=+(w|0);r=+g[d+16>>2];t=+(x|0);C=+g[d+20>>2];A=~~(t<C?t:C);B=~~(z>r?z:r)}if(!((m|0)<(B|0)|(m|0)>(A|0))){y=31;break}rv(b,25856,(o=i,i=i+24|0,c[o>>2]=m,c[o+8>>2]=B,c[o+16>>2]=A,o)|0);i=o;l=0;break a}}while(0);do{if((y|0)==31){if((u|0)==1){a[e]=m;l=1;break a}else if((u|0)==2){c[e>>2]=m;l=1;break a}else if((u|0)==3){break}else{l=1;break a}}}while(0);g[e>>2]=+(m|0);l=1}}while(0);i=f;return l|0}function Bw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+1064|0;g=f|0;h=g|0;do{if(($v(b,g)|0)==0){j=0}else{if((c[g+1024>>2]|0)==2){tw(h);a[e]=a[h]|0}else{aw(b);if((Aw(b,d,e)|0)==0){j=0;break}}j=1}}while(0);i=f;return j|0}function Cw(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;c=i;i=i+1064|0;e=c|0;f=e|0;if((_v(b,1,0,e)|0)==0){g=0}else{sw(f);ay(d|0,f|0,80)|0;a[d+79|0]=0;g=1}i=c;return g|0}function Dw(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,v=0,w=0,x=0;e=i;i=i+1064|0;f=e|0;g=f|0;a:do{if((Zv(a,19400)|0)==0){h=0}else{if(($v(a,f)|0)==0){h=0;break}j=b+4|0;b:while(1){if((Tx(g,17392)|0)==0){h=1;break a}k=c[j>>2]|0;l=c[k>>2]|0;if((l|0)==0){m=10;break}else{n=0;o=k;p=l}while(1){l=n+1|0;if((Tx(p,g)|0)==0){break}q=k+(l*28|0)|0;r=c[q>>2]|0;if((r|0)==0){m=10;break b}else{n=l;o=q;p=r}}if((o|0)==0){m=10;break}k=o+8|0;if((c[k>>2]&256|0)==0){s=1;m=14}else{r=c[o+12>>2]|0;if((Zv(a,19400)|0)==0){h=0;break a}if((r|0)>0){s=r;m=14}}c:do{if((m|0)==14){m=0;r=o+24|0;q=d+(c[o+4>>2]|0)|0;l=s;while(1){t=l-1|0;u=c[k>>2]|0;if((u&256|0)==0){v=u}else{if((Av(a,17392)|0)!=0){break c}v=c[k>>2]|0}switch(v&255|0){case 3:{if((Aw(a,o,q)|0)==0){h=0;break a}w=q+4|0;break};case 1:{if((Bw(a,o,q)|0)==0){h=0;break a}w=q+1|0;break};case 2:{if((Aw(a,o,q)|0)==0){h=0;break a}w=q+4|0;break};case 4:{if((Cw(a,0,q)|0)==0){h=0;break a}w=q+80|0;break};case 6:{u=c[r>>2]|0;if((u|0)==0){m=28;break b}Dw(a,u,q)|0;w=q+(c[c[r>>2]>>2]|0)|0;break};default:{w=q}}if((c[k>>2]&256|0)!=0){if(($v(a,f)|0)==0){h=0;break a}if((Tx(g,17392)|0)==0){break c}if((Tx(g,56784)|0)!=0){m=35;break b}}if((t|0)>0){q=w;l=t}else{break c}}}}while(0);if(($v(a,f)|0)==0){h=0;break a}}if((m|0)==10){rv(a,60112,(x=i,i=i+8|0,c[x>>2]=g,x)|0);i=x;h=0;break}else if((m|0)==28){rv(a,58576,(x=i,i=i+1|0,i=i+7&-8,c[x>>2]=0,x)|0);i=x;h=0;break}else if((m|0)==35){rv(a,55440,(x=i,i=i+8|0,c[x>>2]=g,x)|0);i=x;h=0;break}}}while(0);i=e;return h|0}function Ew(a,b,c){a=a|0;b=b|0;c=c|0;return}function Fw(){c[469148]=jk(43128,56232,256)|0;return}function Gw(a,b,c){a=a|0;b=b|0;c=c|0;return}function Hw(a){a=a|0;return}function Iw(a,b){a=a|0;b=b|0;var c=0;b=i;c=a;a=i;i=i+32|0;Vx(a,c,32)|0;i=b;return}function Jw(a){a=a|0;return}function Kw(a){a=a|0;return}function Lw(){return}function Mw(){return 0}function Nw(a,b,c){a=a|0;b=b|0;c=c|0;return}function Ow(){return 0}function Pw(a){a=a|0;return}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return}function Rw(){return}function Sw(){return}function Tw(){return}function Uw(a){a=a|0;return}function Vw(a){a=a|0;return}function Ww(){return}function Xw(){return}function Yw(){return}function Zw(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=Wx(b|0)|0;e=c[154364]|0;f=c[15358]|0;g=f+32768|0;h=e>>>0>f>>>0?g:f;if((e+32767-h|0)>>>0>=d>>>0|(h|0)==(e|0)){i=e}else{h=e;while(1){if((a[1659752+h|0]|0)==10){e=h+1&32767;c[154364]=e;j=e}else{e=h+1&32767;c[154364]=e;if(((h>>>0>f>>>0?g:f)-h|0)>>>0>1>>>0){h=e;continue}else{j=e}}e=j>>>0>f>>>0?g:f;if((j+32767-e|0)>>>0>=d>>>0|(e|0)==(j|0)){i=j;break}else{h=j}}}if((i+32767-(i>>>0>f>>>0?g:f)|0)>>>0<d>>>0){k=0;return k|0}g=f+d|0;if(g>>>0>32768>>>0){i=32768-f|0;l=d-i|0;m=i}else{l=0;m=d}Vx(1659752+f|0,b|0,m)|0;Vx(1659752,b+m|0,l)|0;c[15358]=g&32767;k=d;return k|0}function _w(){var b=0;if((a[781584]|0)==0){b=Pb()|0}else{b=781584}return b|0}function $w(){Xw();return}function ax(){return Dx()|0}function bx(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;i=i+64|0;d=Jc()|0;if((a[d]|0)==0){e=0;i=b;return e|0}f=Hn(40256,(g=i,i=i+16|0,c[g>>2]=d,c[g+8>>2]=39648,g)|0)|0;i=g;if((f|0)==0){e=0;i=b;return e|0}d=zc(f|0,43072)|0;do{if((d|0)==0){h=0}else{j=b|0;Zx(j|0,0,64)|0;k=kd(j|0,1,63,d|0)|0;Ta(d|0)|0;if((k|0)<=0){h=1;break}h=(Pc(Vc(j|0)|0)|0)==0|0}}while(0);d=zc(f|0,56224)|0;if((d|0)==0){_i(40088,(g=i,i=i+8|0,c[g>>2]=f,g)|0);i=g;e=h;i=b;return e|0}else{f=Ob()|0;md(d|0,46544,(g=i,i=i+8|0,c[g>>2]=f,g)|0)|0;i=g;Ta(d|0)|0;e=h;i=b;return e|0}return 0}function cx(){dx(0)}function dx(b){b=b|0;var d=0,e=0,f=0;Ax();if((b|0)>=2){Sb(b|0)}d=Jc()|0;if((a[d]|0)==0){Sb(b|0)}e=Hn(40256,(f=i,i=i+16|0,c[f>>2]=d,c[f+8>>2]=39648,f)|0)|0;i=f;if((e|0)==0){Sb(b|0)}rb(e|0)|0;Sb(b|0)}function ex(){return 0}function fx(){Pi(35280,40);nk(30112,25800);nk(22344,zd()|0);return}function gx(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,r=0;d=i;e=a[b]|0;if(e<<24>>24==0){i=d;return}f=c[q>>2]|0;g=b;b=0;h=e;a:while(1){do{if((g|0)!=0&h<<24>>24==94){e=a[g+1|0]|0;if(e<<24>>24==0){j=94;k=14;break}if((Ec(e<<24>>24|0)|0)!=0){k=8;break}l=a[g]|0;k=7}else{l=h;k=7}}while(0);if((k|0)==7){k=0;if(l<<24>>24==10){k=8}else{j=l;k=14}}do{if((k|0)==8){k=0;if((b|0)>0){a[2552368+b|0]=0;Fc(2552368,f|0)|0;m=0}else{m=b}if((a[g]|0)==10){_a(19352,5,1,f|0)|0;n=m;o=g+1|0;break}else{xn(2552368,4096,17384,(e=i,i=i+8|0,c[e>>2]=c[61232+((a[g+1|0]&7)<<2)>>2],e)|0)|0;i=e;Fc(2552368,f|0)|0;n=m;o=g+2|0;break}}else if((k|0)==14){k=0;if((b|0)>4094){p=b;r=f;break a}a[2552368+b|0]=j;n=b+1|0;o=g+1|0}}while(0);e=a[o]|0;if(e<<24>>24==0){k=16;break}else{g=o;b=n;h=e}}do{if((k|0)==16){if((n|0)>0){p=n;r=c[q>>2]|0;break}else{i=d;return}}}while(0);a[2552368+p|0]=0;Fc(2552368,r|0)|0;i=d;return}function hx(a){a=a|0;Zw(a)|0;Ex(a);return}function ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+1040|0;e=d|0;f=d+16|0;d=e;c[d>>2]=b;c[d+4>>2]=0;fd(f|0,1024,a|0,e|0)|0;kb(f|0);dx(3)}function jx(a){a=a|0;var b=0,d=0;b=i;if((a|0)==0){_i(60088,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=b;return}else{lb(a|0)|0;i=b;return}}function kx(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;e=i;_i(51392,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;g=ec(a|0,2)|0;if((g|0)==0){h=cb()|0;_i(50480,(f=i,i=i+16|0,c[f>>2]=a,c[f+8>>2]=h,f)|0);i=f;j=0;i=e;return j|0}h=jd(g|0,49736)|0;k=jd(g|0,48968)|0;c[b>>2]=k;if((k|0)==0|(h|0)==0){b=cb()|0;_i(48064,(f=i,i=i+16|0,c[f>>2]=a,c[f+8>>2]=b,f)|0);i=f;lb(g|0)|0;j=0;i=e;return j|0}else{_i(46840,(f=i,i=i+16|0,c[f>>2]=a,c[f+8>>2]=k,f)|0);i=f;je[h&127](d);j=g;i=e;return j|0}return 0}function lx(b){b=b|0;var d=0,e=0;if(a[61224]|0){md(c[q>>2]|0,43144,(d=i,i=i+8|0,c[d>>2]=b,d)|0)|0;i=d}else{a[61224]=1;yo();e=Hn(42592,(d=i,i=i+8|0,c[d>>2]=b,d)|0)|0;i=d;Ig(e);zo()}if((b|0)==15|(b|0)==2){dx(1)}else{dx(2)}}function mx(){if((c[469154]|0)!=0){return}Ww();Rj();return}function nx(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+1024|0;e=d|0;Zx(e|0,0,1024)|0;Hc();Jd()|0;do{if((a|0)==2){f=c[b+4>>2]|0;if((Tx(f,45952)|0)==0){g=c[p>>2]|0;h=md(g|0,43776,(j=i,i=i+8|0,c[j>>2]=44488,j)|0)|0;i=j;dx(0);return 0}if((Tx(f,45312)|0)!=0){break}g=c[p>>2]|0;h=md(g|0,43776,(j=i,i=i+8|0,c[j>>2]=44488,j)|0)|0;i=j;dx(0);return 0}}while(0);rn(2545952,Ed(c[b>>2]|0)|0,4096);rn(781584,42032,4096);if((a|0)>1){k=1}else{l=Xi(66,0)|0;Mj(e,l);Nb();m=1024;n=0;i=d;return 0}do{j=b+(k<<2)|0;g=c[j>>2]|0;if((Ib(g|0,32)|0)==0){vn(e,1024,g)}else{vn(e,1024,41576);vn(e,1024,c[j>>2]|0);vn(e,1024,41576)}vn(e,1024,41160);k=k+1|0;}while((k|0)<(a|0));l=Xi(66,0)|0;Mj(e,l);Nb();m=1024;n=0;i=d;return 0}function ox(a,b){a=a|0;b=b|0;b=c[a>>2]|0;if((b|0)!=0){Gx(b)}Gx(a);c[469154]=(c[469154]|0)-1;Sm();Cx();qb(4,88)|0;qb(8,88)|0;qb(11,88)|0;qb(15,88)|0;qb(2,88)|0;Cd(12,30,0);return}function px(a,b,c){a=a|0;b=b|0;c=c|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,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;e=a>>>16;f=a&65535;if((c|0)==1){a=(d[b]|0)+f|0;g=a>>>0>65520>>>0?a-65521|0:a;a=g+e|0;h=(a>>>0>65520>>>0?a+15|0:a)<<16|g;return h|0}if((b|0)==0){h=1;return h|0}if(c>>>0<16>>>0){if((c|0)==0){i=f;j=e}else{g=f;a=b;k=c;l=e;while(1){m=k-1|0;n=(d[a]|0)+g|0;o=n+l|0;if((m|0)==0){i=n;j=o;break}else{g=n;a=a+1|0;k=m;l=o}}}h=((j>>>0)%65521|0)<<16|(i>>>0>65520>>>0?i-65521|0:i);return h|0}do{if(c>>>0>5551>>>0){i=f;j=b;l=c;k=e;do{l=l-5552|0;a=347;g=k;o=j;m=i;while(1){n=(d[o]|0)+m|0;p=n+(d[o+1|0]|0)|0;q=p+(d[o+2|0]|0)|0;r=q+(d[o+3|0]|0)|0;s=r+(d[o+4|0]|0)|0;t=s+(d[o+5|0]|0)|0;u=t+(d[o+6|0]|0)|0;v=u+(d[o+7|0]|0)|0;w=v+(d[o+8|0]|0)|0;x=w+(d[o+9|0]|0)|0;y=x+(d[o+10|0]|0)|0;z=y+(d[o+11|0]|0)|0;A=z+(d[o+12|0]|0)|0;B=A+(d[o+13|0]|0)|0;C=B+(d[o+14|0]|0)|0;D=C+(d[o+15|0]|0)|0;E=n+g+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D|0;C=a-1|0;if((C|0)==0){break}else{a=C;g=E;o=o+16|0;m=D}}j=j+5552|0;i=(D>>>0)%65521|0;k=(E>>>0)%65521|0;}while(l>>>0>5551>>>0);if((l|0)==0){F=k;G=i;break}if(l>>>0>15>>>0){H=i;I=j;J=l;K=k;L=15}else{M=i;N=j;O=l;P=k;L=16}}else{H=f;I=b;J=c;K=e;L=15}}while(0);if((L|0)==15){while(1){L=0;Q=J-16|0;e=(d[I]|0)+H|0;c=e+(d[I+1|0]|0)|0;b=c+(d[I+2|0]|0)|0;f=b+(d[I+3|0]|0)|0;E=f+(d[I+4|0]|0)|0;D=E+(d[I+5|0]|0)|0;m=D+(d[I+6|0]|0)|0;o=m+(d[I+7|0]|0)|0;g=o+(d[I+8|0]|0)|0;a=g+(d[I+9|0]|0)|0;C=a+(d[I+10|0]|0)|0;B=C+(d[I+11|0]|0)|0;A=B+(d[I+12|0]|0)|0;z=A+(d[I+13|0]|0)|0;y=z+(d[I+14|0]|0)|0;R=y+(d[I+15|0]|0)|0;S=e+K+c+b+f+E+D+m+o+g+a+C+B+A+z+y+R|0;T=I+16|0;if(Q>>>0>15>>>0){H=R;I=T;J=Q;K=S;L=15}else{break}}if((Q|0)==0){U=R;V=S;L=17}else{M=R;N=T;O=Q;P=S;L=16}}if((L|0)==16){while(1){L=0;S=O-1|0;Q=(d[N]|0)+M|0;T=Q+P|0;if((S|0)==0){U=Q;V=T;L=17;break}else{M=Q;N=N+1|0;O=S;P=T;L=16}}}if((L|0)==17){F=(V>>>0)%65521|0;G=(U>>>0)%65521|0}h=F<<16|G;return h|0}
|
|
|
|
|
|
|
|
function Im(d,e,f){d=d|0;e=e|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;g=i;i=i+128|0;h=f;f=i;i=i+32|0;Vx(f,h,32)|0;h=g|0;j=h;k=c[f>>2]|0;if(!((k-3|0)>>>0<4>>>0)){aj(0,23232,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l}m=c[868]|0;do{if((m|0)==-1){if(!((k-3|0)>>>0<2>>>0)){break}n=128;o=0;i=g;return}}while(0);p=c[870]|0;do{if((p|0)==-1){if(!((k-5|0)>>>0<2>>>0)){q=10;break}n=128;o=0;i=g;return}else{if((k|0)!=6){q=10;break}if((c[(c[164972]|0)+32>>2]&8|0)==0){Zx(j|0,0,128)|0;r=h;b[h>>1]=10;s=h+8|0;c[s>>2]=c[414930];c[s+4>>2]=c[414931];c[s+8>>2]=c[414932];c[s+12>>2]=c[414933];s=b[f+24>>1]|0;b[r+2>>1]=s;t=0;u=s;v=10;w=6;x=r;break}else{n=128;o=0;i=g;return}}}while(0);do{if((q|0)==10){Zx(j|0,0,128)|0;r=h;if((k|0)==5){b[h>>1]=10;s=h+8|0;y=f+8|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];y=b[f+24>>1]|0;b[r+2>>1]=y;c[h+24>>2]=c[f+28>>2];t=0;u=y;v=10;w=5;x=r;break}else if((k|0)==3){b[h>>1]=2;y=b[f+24>>1]|0;b[r+2>>1]=y;c[h+4>>2]=-1;t=-1;u=y;v=2;w=3;x=r;break}else if((k|0)==4){b[h>>1]=2;y=c[f+4>>2]|0;c[h+4>>2]=y;s=b[f+24>>1]|0;b[r+2>>1]=s;t=y;u=s;v=2;w=4;x=r;break}else{t=0;u=0;v=0;w=k;x=r;break}}}while(0);do{if(a[664]&(w|0)==4){a[571296]=0;a[571297]=0;a[571298]=0;a[571299]=1;c[142825]=t;b[285652]=u;Vx(571306,e|0,d)|0;z=ub(m|0,571296,d+10|0,0,571280,16)|0;q=19}else{if((v<<16>>16|0)==10){z=ub(p|0,e|0,d|0,0,x|0,28)|0;q=19;break}else if((v<<16>>16|0)==2){z=ub(m|0,e|0,d|0,0,x|0,16)|0;q=19;break}else{break}}}while(0);do{if((q|0)==19){if((z|0)==-1){break}n=128;o=0;i=g;return}}while(0);z=c[(_c()|0)>>2]|0;if((z|0)==99){q=21}else if((z|0)==11){n=128;o=0;i=g;return}do{if((q|0)==21){if((w|0)!=3){break}n=128;o=0;i=g;return}}while(0);w=$c(z|0)|0;_i(20040,(l=i,i=i+8|0,c[l>>2]=w,l)|0);i=l;n=128;o=0;i=g;return}function Jm(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;d=i;e=b;b=i;i=i+32|0;Vx(b,e,32)|0;e=c[b>>2]|0;do{if((e|0)==2){f=1}else if((e|0)==5){g=a[b+8|0]|0;if(g<<24>>24==-2){if((a[b+9|0]&-64)<<24>>24==-128){f=1;break}else{h=8;break}}else{if((g&-2)<<24>>24==-4){f=1;break}else{h=8;break}}}else if((e|0)==4){g=a[b+4|0]|0;if((g<<24>>24|0)==(-84|0)){if((a[b+5|0]&-16)<<24>>24==16){f=1;break}else{h=8;break}}else if((g<<24>>24|0)==10|(g<<24>>24|0)==127){f=1;break}else if((g<<24>>24|0)==(-64|0)){if((a[b+5|0]|0)==-88){f=1;break}else{h=8;break}}else{h=8;break}}else{h=8}}while(0);a:do{if((h|0)==8){g=c[164942]|0;if((g|0)<=0){f=0;break}if((e|0)==4){j=0;while(1){b:do{if((c[764408+(j*280|0)>>2]|0)==4){k=764420+(j*280|0)|0;l=764548+(j*280|0)|0;m=0;while(1){n=m+1|0;if(!(((a[b+4+m|0]^a[k+m|0])&a[l+m|0])<<24>>24==0)){break b}if((n|0)<4){m=n}else{f=1;break a}}}}while(0);m=j+1|0;if((m|0)<(g|0)){j=m}else{f=0;break}}}else{j=0;while(1){c:do{if((c[764408+(j*280|0)>>2]|0)==(e|0)){m=0;while(1){l=m+1|0;if(!(((a[b+8+m|0]^a[764424+(j*280|0)+m|0])&a[764552+(j*280|0)+m|0])<<24>>24==0)){break c}if((l|0)<16){m=l}else{f=1;break a}}}}while(0);m=j+1|0;if((m|0)<(g|0)){j=m}else{f=0;break}}}}}while(0);i=d;return f|0}function Km(d,e,f){d=d|0;e=e|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;g=i;i=i+32|0;h=g|0;j=g+16|0;k=g+24|0;c[j>>2]=1;c[k>>2]=1;c[f>>2]=0;l=(d|0)!=0;if(l){_i(59184,(m=i,i=i+16|0,c[m>>2]=d,c[m+8>>2]=e,m)|0);i=m}else{_i(57296,(m=i,i=i+8|0,c[m>>2]=e,m)|0);i=m}n=ic(2,2,17)|0;if((n|0)==-1){o=_c()|0;c[f>>2]=c[o>>2];p=$c(c[o>>2]|0)|0;_i(55904,(m=i,i=i+8|0,c[m>>2]=p,m)|0);i=m;q=-1;i=g;return q|0}p=Hd(n|0,21537,(m=i,i=i+8|0,c[m>>2]=j,m)|0)|0;i=m;if((p|0)==-1){p=_c()|0;j=$c(c[p>>2]|0)|0;_i(54904,(m=i,i=i+8|0,c[m>>2]=j,m)|0);i=m;c[f>>2]=c[p>>2];Gb(n|0)|0;q=-1;i=g;return q|0}if((fc(n|0,1,6,k|0,4)|0)==-1){k=$c(c[(_c()|0)>>2]|0)|0;_i(53952,(m=i,i=i+8|0,c[m>>2]=k,m)|0);i=m}do{if(l){if((a[d]|0)==0){r=12;break}if((Am(d,h,16,2)|0)!=0){break}Gb(n|0)|0;q=-1;i=g;return q|0}else{r=12}}while(0);if((r|0)==12){b[h>>1]=2;c[h+4>>2]=0}if((e|0)==-1){b[h+2>>1]=0}else{b[h+2>>1]=sd(e&65535|0)|0}if(!((Od(n|0,h|0,16)|0)==-1)){q=n;i=g;return q|0}h=_c()|0;e=$c(c[h>>2]|0)|0;_i(52800,(m=i,i=i+8|0,c[m>>2]=e,m)|0);i=m;c[f>>2]=c[h>>2];Gb(n|0)|0;q=-1;i=g;return q|0}function Lm(d,e,f,g){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,s=0,t=0;h=i;i=i+48|0;j=h|0;k=h+32|0;l=h+40|0;c[k>>2]=1;c[g>>2]=0;m=(d|0)!=0;do{if(m){if((Gn(d,58)|0)==0){_i(50920,(n=i,i=i+16|0,c[n>>2]=d,c[n+8>>2]=e,n)|0);i=n;break}else{_i(51864,(n=i,i=i+16|0,c[n>>2]=d,c[n+8>>2]=e,n)|0);i=n;break}}else{_i(50128,(n=i,i=i+8|0,c[n>>2]=e,n)|0);i=n}}while(0);o=ic(10,2,17)|0;if((o|0)==-1){p=_c()|0;c[g>>2]=c[p>>2];q=$c(c[p>>2]|0)|0;_i(49352,(n=i,i=i+8|0,c[n>>2]=q,n)|0);i=n;s=-1;i=h;return s|0}q=Hd(o|0,21537,(n=i,i=i+8|0,c[n>>2]=k,n)|0)|0;i=n;if((q|0)==-1){q=_c()|0;k=$c(c[q>>2]|0)|0;_i(48600,(n=i,i=i+8|0,c[n>>2]=k,n)|0);i=n;c[g>>2]=c[q>>2];Gb(o|0)|0;s=-1;i=h;return s|0}c[l>>2]=1;if((fc(o|0,41,26,l|0,4)|0)==-1){l=$c(c[(_c()|0)>>2]|0)|0;$i(47288,(n=i,i=i+8|0,c[n>>2]=l,n)|0);i=n}do{if(m){if((a[d]|0)==0){t=14;break}if((Am(d,j,28,10)|0)!=0){break}Gb(o|0)|0;s=-1;i=h;return s|0}else{t=14}}while(0);if((t|0)==14){b[j>>1]=10;t=j+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2]}if((e|0)==-1){b[j+2>>1]=0}else{b[j+2>>1]=sd(e&65535|0)|0}e=j;if((Od(o|0,j|0,28)|0)==-1){j=_c()|0;t=$c(c[j>>2]|0)|0;_i(46248,(n=i,i=i+8|0,c[n>>2]=t,n)|0);i=n;c[g>>2]=c[j>>2];Gb(o|0)|0;s=-1;i=h;return s|0}if((f|0)==0){s=o;i=h;return s|0}j=f;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];c[j+16>>2]=c[e+16>>2];c[j+20>>2]=c[e+20>>2];c[j+24>>2]=c[e+24>>2];s=o;i=h;return s|0}function Mm(){var b=0,d=0,e=0,f=0,g=0,h=0;b=i;i=i+32|0;d=b|0;e=c[164966]|0;f=c[e+4>>2]|0;do{if((a[f]|0)==0){g=e}else{if((Am(f,d,28,10)|0)==0){g=c[164966]|0;break}h=d+8|0;c[414930]=c[h>>2];c[414931]=c[h+4>>2];c[414932]=c[h+8>>2];c[414933]=c[h+12>>2];h=c[(c[164964]|0)+4>>2]|0;if((a[h]|0)==0){c[414934]=0;i=b;return}else{c[414934]=Fd(h|0)|0;i=b;return}}}while(0);_i(45664,(d=i,i=i+8|0,c[d>>2]=c[g>>2],d)|0);i=d;d=c[164972]|0;qk(c[d>>2]|0,+(c[d+32>>2]|8|0));i=b;return}function Nm(){var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;i=i+8|0;e=d|0;f=c[870]|0;if((f|0)==-1|(c[510]|0)!=-1){i=d;return}if((c[(c[164972]|0)+32>>2]&8|0)!=0){i=d;return}do{if((a[2544448]|0)==-1){g=5}else{if((c[636113]|c[636112]|c[636114]|c[636115]|0)==0){g=5;break}h=c[(c[164966]|0)+4>>2]|0;j=Lm(h,(sd(b[1272221]|0)|0)&65535,0,e)|0;c[510]=j;if(!((j|0)==-1)){k=j;break}j=c[870]|0;c[510]=j;k=j}}while(0);if((g|0)==5){c[510]=f;k=f}do{if((c[414934]|0)==0){l=k}else{if((fc(k|0,41,17,1659736,4)|0)>=0){l=c[510]|0;break}f=$c(c[(_c()|0)>>2]|0)|0;_i(44784,(m=i,i=i+8|0,c[m>>2]=f,m)|0);i=m;f=c[510]|0;if((f|0)==(c[870]|0)){l=f;break}Gb(f|0)|0;c[510]=-1;i=d;return}}while(0);if((fc(l|0,41,20,1659720,20)|0)==0){i=d;return}l=$c(c[(_c()|0)>>2]|0)|0;_i(44120,(m=i,i=i+8|0,c[m>>2]=l,m)|0);i=m;m=c[510]|0;if((m|0)==(c[870]|0)){i=d;return}Gb(m|0)|0;c[510]=-1;i=d;return}function Om(){var a=0;a=c[510]|0;if((a|0)==-1){return}if((a|0)==(c[870]|0)){fc(a|0,41,21,1659720,20)|0}else{Gb(a|0)|0}c[510]=-1;return}function Pm(d){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+80|0;f=e|0;g=e+16|0;h=g|0;a[664]=0;_i(43480,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=ic(2,1,6)|0;c[190]=k;if((k|0)==-1){k=$c(c[(_c()|0)>>2]|0)|0;_i(42896,(j=i,i=i+8|0,c[j>>2]=k,j)|0);i=j;l=64;m=0;i=e;return}k=vc(c[(c[164952]|0)+4>>2]|0)|0;if((k|0)==0){n=$c(c[(_c()|0)>>2]|0)|0;_i(42312,(j=i,i=i+8|0,c[j>>2]=n,j)|0);i=j;l=64;m=0;i=e;return}if((c[k+8>>2]|0)!=2){_i(41776,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;l=64;m=0;i=e;return}b[f>>1]=2;c[f+4>>2]=c[c[c[k+16>>2]>>2]>>2];b[f+2>>1]=sd(c[(c[164954]|0)+32>>2]&65535|0)|0;if((Fb(c[190]|0,f|0,16)|0)==-1){f=$c(c[(_c()|0)>>2]|0)|0;_i(41360,(j=i,i=i+8|0,c[j>>2]=f,j)|0);i=j;l=64;m=0;i=e;return}if((a[c[(c[164950]|0)+4>>2]|0]|0)==0){o=(a[c[(c[164956]|0)+4>>2]|0]|0)!=0}else{o=1}a[h]=5;f=g+1|0;a[f]=o?2:1;k=g+2|0;a[k]=o?2:0;if(($a(c[190]|0,h|0,(o?4:3)|0,0)|0)==-1){o=$c(c[(_c()|0)>>2]|0)|0;_i(40560,(j=i,i=i+8|0,c[j>>2]=o,j)|0);i=j;l=64;m=0;i=e;return}o=dc(c[190]|0,h|0,64,0)|0;if((o|0)==2){p=15}else if((o|0)==(-1|0)){o=$c(c[(_c()|0)>>2]|0)|0;_i(39920,(j=i,i=i+8|0,c[j>>2]=o,j)|0);i=j;l=64;m=0;i=e;return}do{if((p|0)==15){if((a[h]|0)!=5){break}o=a[f]|0;n=o&255;if(!((n|0)==0|(n|0)==2)){_i(39008,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;l=64;m=0;i=e;return}a:do{if(o<<24>>24==2){n=(c[164950]|0)+4|0;q=Wx(c[n>>2]|0)|0;r=(c[164956]|0)+4|0;s=Wx(c[r>>2]|0)|0;a[h]=1;a[f]=q;if((q|0)!=0){Vx(k|0,c[n>>2]|0,q)|0}a[g+(q+2)|0]=s;n=q+3|0;if((s|0)!=0){Vx(g+n|0,c[r>>2]|0,s)|0}if(($a(c[190]|0,h|0,n+s|0,0)|0)==-1){s=$c(c[(_c()|0)>>2]|0)|0;_i(40560,(j=i,i=i+8|0,c[j>>2]=s,j)|0);i=j;l=64;m=0;i=e;return}s=dc(c[190]|0,h|0,64,0)|0;if((s|0)==(-1|0)){n=$c(c[(_c()|0)>>2]|0)|0;_i(39920,(j=i,i=i+8|0,c[j>>2]=n,j)|0);i=j;l=64;m=0;i=e;return}else if((s|0)==2){p=28}do{if((p|0)==28){if((a[h]|0)!=1){break}if((a[f]|0)==0){break a}_i(38488,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;l=64;m=0;i=e;return}}while(0);_i(39496,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;l=64;m=0;i=e;return}}while(0);a[h]=5;a[f]=3;a[k]=0;o=g+3|0;a[o]=1;s=g+4|0;c[s>>2]=0;n=g+8|0;b[n>>1]=sd(d&65535|0)|0;if(($a(c[190]|0,h|0,10,0)|0)==-1){r=$c(c[(_c()|0)>>2]|0)|0;_i(40560,(j=i,i=i+8|0,c[j>>2]=r,j)|0);i=j;l=64;m=0;i=e;return}r=dc(c[190]|0,h|0,64,0)|0;if((r|0)==-1){q=$c(c[(_c()|0)>>2]|0)|0;_i(39920,(j=i,i=i+8|0,c[j>>2]=q,j)|0);i=j;l=64;m=0;i=e;return}if(!((r|0)>1&(a[h]|0)==5)){_i(39496,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;l=64;m=0;i=e;return}r=a[f]|0;if(!(r<<24>>24==0)){_i(38080,(j=i,i=i+8|0,c[j>>2]=r&255,j)|0);i=j;l=64;m=0;i=e;return}r=a[o]|0;if(r<<24>>24==1){b[285640]=2;c[142821]=c[s>>2];b[285641]=b[n>>1]|0;n=571288;s=n|0;z=0;b[s>>1]=z;b[s+2>>1]=z>>16;s=n+4|0;z=0;b[s>>1]=z;b[s+2>>1]=z>>16;a[664]=1;l=64;m=0;i=e;return}else{_i(37720,(j=i,i=i+8|0,c[j>>2]=r&255,j)|0);i=j;l=64;m=0;i=e;return}}}while(0);_i(39496,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;l=64;m=0;i=e;return}function Qm(){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,C=0;d=i;i=i+400|0;e=d|0;f=d+304|0;g=d+336|0;h=d+344|0;j=d+360|0;k=d+392|0;l=c[(c[164962]|0)+32>>2]|0;m=c[(c[164960]|0)+32>>2]|0;n=h;o=j;p=d+48|0;c[g>>2]=0;c[164942]=0;do{if(!((Cc(p|0,256)|0)==-1)){_i(25424,(q=i,i=i+8|0,c[q>>2]=p,q)|0);i=q;Zx(f|0,0,32)|0;c[f+8>>2]=2;do{if((Ra(p|0,0,f|0,g|0)|0)==0){Zx(n|0,0,16)|0;Zx(o|0,0,28)|0;b[h>>1]=2;c[h+4>>2]=-1;b[j>>1]=10;Zx(j+8|0,-1|0,16)|0;r=c[g>>2]|0;if((r|0)!=0){s=r;do{r=c[s+4>>2]|0;do{if((r|0)==2){t=c[s+20>>2]|0;if((t|0)==0){break}u=b[t>>1]|0;v=c[164942]|0;if((v|0)>=32){break}if((u<<16>>16|0)==10){c[764408+(v*280|0)>>2]=5;w=28}else if((u<<16>>16|0)==2){c[764408+(v*280|0)>>2]=4;w=16}else{break}rn(764392+(v*280|0)|0,2551480,16);v=c[164942]|0;b[764412+(v*280|0)>>1]=u;Vx(764416+(v*280|0)|0,t|0,w)|0;Vx(764544+(v*280|0)|0,n|0,w)|0;c[164942]=v+1}else if((r|0)==10){v=c[s+20>>2]|0;if((v|0)==0){break}t=b[v>>1]|0;u=c[164942]|0;if((u|0)>=32){break}if((t<<16>>16|0)==10){c[764408+(u*280|0)>>2]=5;x=28}else if((t<<16>>16|0)==2){c[764408+(u*280|0)>>2]=4;x=16}else{break}rn(764392+(u*280|0)|0,2551480,16);u=c[164942]|0;b[764412+(u*280|0)>>1]=t;Vx(764416+(u*280|0)|0,v|0,x)|0;Vx(764544+(u*280|0)|0,o|0,x)|0;c[164942]=u+1}}while(0);s=c[s+28>>2]|0;}while((s|0)!=0)}s=e|0;if((c[164942]|0)>0){y=0}else{break}do{r=764416+(y*280|0)|0;if((cc(r|0,((b[r>>1]|0)==10?28:16)|0,s|0,48,0,0,1)|0)!=0){a[s]=0}r=c[764408+(y*280|0)>>2]|0;if((r|0)==4){_i(17896,(q=i,i=i+8|0,c[q>>2]=s,q)|0);i=q}else if((r|0)==5){_i(60680,(q=i,i=i+8|0,c[q>>2]=s,q)|0);i=q}y=y+1|0;}while((y|0)<(c[164942]|0))}}while(0);s=c[g>>2]|0;if((s|0)==0){break}Eb(s|0)}}while(0);do{if((c[(c[164972]|0)+32>>2]&2|0)!=0){g=0;do{z=g+m|0;y=Lm(c[(c[164968]|0)+4>>2]|0,z,2544440,k)|0;c[870]=y;if(!((y|0)==-1)){A=30;break}g=g+1|0;}while((c[k>>2]|0)!=97&(g|0)<10);if((A|0)==30){qk(37384,+(z|0));if(!((c[870]|0)==-1)){break}}_i(36992,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q}}while(0);if((c[(c[164972]|0)+32>>2]&1|0)==0){i=d;return}else{B=0}do{C=B+l|0;z=Km(c[(c[164970]|0)+4>>2]|0,C,k)|0;c[868]=z;if(!((z|0)==-1)){A=34;break}B=B+1|0;}while((c[k>>2]|0)!=97&(B|0)<10);do{if((A|0)==34){qk(36568,+(C|0));if((c[(c[164958]|0)+32>>2]|0)==0){break}Pm(C)}}while(0);if(!((c[868]|0)==-1)){i=d;return}_i(35688,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;i=d;return}function Rm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=jk(34200,33648,33)|0;c[164972]=d;e=d+20|0;d=c[e>>2]|0;c[e>>2]=0;e=jk(32912,32408,32)|0;c[164970]=e;f=e+20|0;e=(c[f>>2]|0)+d|0;c[f>>2]=0;f=jk(31976,31640,32)|0;c[164968]=f;d=f+20|0;f=e+(c[d>>2]|0)|0;c[d>>2]=0;d=Hn(31288,(e=i,i=i+8|0,c[e>>2]=27960,e)|0)|0;i=e;g=jk(36568,d,32)|0;c[164962]=g;d=g+20|0;g=f+(c[d>>2]|0)|0;c[d>>2]=0;d=Hn(31288,(e=i,i=i+8|0,c[e>>2]=27960,e)|0)|0;i=e;e=jk(37384,d,32)|0;c[164960]=e;d=e+20|0;e=g+(c[d>>2]|0)|0;c[d>>2]=0;d=jk(30528,29984,33)|0;c[164966]=d;g=d+20|0;d=e+(c[g>>2]|0)|0;c[g>>2]=0;g=jk(29688,2551480,33)|0;c[164964]=g;e=g+20|0;g=d+(c[e>>2]|0)|0;c[e>>2]=0;e=jk(28944,28640,33)|0;c[164958]=e;d=e+20|0;e=g+(c[d>>2]|0)|0;c[d>>2]=0;d=jk(28288,2551480,33)|0;c[164952]=d;g=d+20|0;d=e+(c[g>>2]|0)|0;c[g>>2]=0;g=jk(27880,27472,33)|0;c[164954]=g;e=g+20|0;g=d+(c[e>>2]|0)|0;c[e>>2]=0;e=jk(27008,2551480,33)|0;c[164950]=e;d=e+20|0;e=g+(c[d>>2]|0)|0;c[d>>2]=0;d=jk(26192,2551480,33)|0;c[164956]=d;g=d+20|0;d=c[g>>2]|0;c[g>>2]=0;c[164974]=jk(25608,2551480,256)|0;g=(c[(c[164972]|0)+32>>2]|0)==0?0:a;a=(g|0)==(c[164948]|0);if(a&(e|0)==(-d|0)){i=b;return}d=(g|0)!=0;e=d&1;if(a){h=e}else{c[164948]=g;h=e^1}do{if((h|0)!=0){e=c[868]|0;if(!((e|0)==-1)){Gb(e|0)|0;c[868]=-1}e=c[510]|0;if(!((e|0)==-1)){if((e|0)!=(c[870]|0)){Gb(e|0)|0}c[510]=-1}e=c[870]|0;if(!((e|0)==-1)){Gb(e|0)|0;c[870]=-1}e=c[190]|0;if((e|0)==-1){break}Gb(e|0)|0;c[190]=-1}}while(0);if(!d){i=b;return}if((c[(c[164972]|0)+32>>2]|0)==0){i=b;return}Qm();Mm();i=b;return}function Sm(){Rm(1);Pi(35120,112);return}function Tm(){Rm(1);return}function Um(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0.0,l=0,m=0;b=i;i=i+16456|0;d=b+16392|0;e=b+16424|0;f=b|0;Tl(e,f,16385);if((Hm(d,e,a)|0)==0){h=16385;j=0;i=b;return}do{k=+g[(c[164974]|0)+28>>2];if(k<=0.0|k>100.0){l=5}else{m=Yx()|0;if((m|0)>=(~~(+g[(c[164974]|0)+28>>2]*21474836.47)|0)){l=5}}do{if((l|0)==5){l=0;if((c[(c[423400]|0)+32>>2]|0)==0){Iw(d,e);break}else{Ej(d,e);break}}}while(0);Tl(e,f,16385);}while((Hm(d,e,a)|0)!=0);h=16385;j=0;i=b;return}function Vm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+136|0;d=b|0;e=b+8|0;Zx(e|0,0,128)|0;f=(a|0)<0?0:a;a=c[868]|0;if((a|0)==-1){g=-1}else{h=e+(a>>>5<<2)|0;c[h>>2]=c[h>>2]|1<<(a&31);g=a}a=c[870]|0;if((a|0)==-1){j=g}else{h=e+(a>>>5<<2)|0;c[h>>2]=c[h>>2]|1<<(a&31);j=(g|0)==-1|(a|0)>(g|0)?a:g}c[d>>2]=(f|0)/1e3|0;c[d+4>>2]=((f|0)%1e3|0)*1e3|0;f=Tb(j+1|0,e|0,0,0,d|0)|0;if((f|0)==-1){d=$c(c[(_c()|0)>>2]|0)|0;_i(34600,(j=i,i=i+8|0,c[j>>2]=d,j)|0);i=j;k=128;l=0;i=b;return}if((f|0)<=0){k=128;l=0;i=b;return}Um(e);k=128;l=0;i=b;return}function Wm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;g=c[f>>2]|0;c[636486]=g;if((g&7|0)==0){a[e+(g>>3)|0]=0;h=c[636486]|0}else{h=g}g=e+(h>>3)|0;a[g]=d[g]|0|b<<(h&7);h=(c[636486]|0)+1|0;c[636486]=h;c[f>>2]=h;return}function Xm(a,b){a=a|0;b=b|0;var e=0,f=0;e=c[b>>2]|0;c[636486]=e;f=(d[a+(e>>3)|0]|0)>>>((e&7)>>>0)&1;a=e+1|0;c[636486]=a;c[b>>2]=a;return f|0}function Ym(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;d=b&255;b=a+20+(d<<2)|0;e=c[b>>2]|0;if((e|0)!=0){Zm(a,e);return}e=a|0;f=c[e>>2]|0;g=f+1|0;h=a+1052+(f<<5)|0;c[e>>2]=f+2;e=a+1052+(g<<5)|0;c[a+1052+(g<<5)+28>>2]=257;c[a+1052+(g<<5)+24>>2]=1;i=a+12|0;j=(c[i>>2]|0)+12|0;c[a+1052+(g<<5)+12>>2]=c[j>>2];k=c[j>>2]|0;do{if((k|0)==0){j=a+1048|0;l=c[j>>2]|0;if((l|0)==0){m=a+4|0;n=c[m>>2]|0;c[m>>2]=n+1;o=a+25628+(n<<2)|0}else{c[j>>2]=c[l>>2];o=l}c[a+1052+(g<<5)+20>>2]=o;c[o>>2]=e}else{c[k+16>>2]=e;l=c[(c[i>>2]|0)+12>>2]|0;if((c[l+24>>2]|0)==1){c[a+1052+(g<<5)+20>>2]=c[l+20>>2];break}l=a+1048|0;j=c[l>>2]|0;if((j|0)==0){n=a+4|0;m=c[n>>2]|0;c[n>>2]=m+1;p=a+25628+(m<<2)|0}else{c[l>>2]=c[j>>2];p=j}c[a+1052+(g<<5)+20>>2]=p;c[p>>2]=e}}while(0);c[(c[i>>2]|0)+12>>2]=e;c[a+1052+(g<<5)+16>>2]=c[i>>2];c[a+1052+(f<<5)+28>>2]=d;c[a+1052+(f<<5)+24>>2]=1;d=(c[i>>2]|0)+12|0;c[a+1052+(f<<5)+12>>2]=c[d>>2];p=c[d>>2]|0;do{if((p|0)==0){d=a+1048|0;k=c[d>>2]|0;if((k|0)==0){o=a+4|0;j=c[o>>2]|0;c[o>>2]=j+1;q=a+25628+(j<<2)|0}else{c[d>>2]=c[k>>2];q=k}c[a+1052+(f<<5)+20>>2]=q;c[q>>2]=h}else{c[p+16>>2]=h;k=c[(c[i>>2]|0)+12>>2]|0;if((c[k+24>>2]|0)==1){c[a+1052+(f<<5)+20>>2]=c[k+20>>2];break}k=a+1048|0;d=c[k>>2]|0;if((d|0)==0){j=a+4|0;o=c[j>>2]|0;c[j>>2]=o+1;r=a+25628+(o<<2)|0}else{c[k>>2]=c[d>>2];r=d}c[a+1052+(f<<5)+20>>2]=r;c[r>>2]=e}}while(0);c[(c[i>>2]|0)+12>>2]=h;c[a+1052+(f<<5)+16>>2]=c[i>>2];c[a+1052+(f<<5)+4>>2]=0;c[h>>2]=0;r=c[i>>2]|0;p=c[r+8>>2]|0;do{if((p|0)==0){c[a+8>>2]=e}else{q=p|0;if((c[q>>2]|0)==(r|0)){c[q>>2]=e;break}else{c[p+4>>2]=e;break}}}while(0);c[a+1052+(g<<5)+4>>2]=h;p=c[i>>2]|0;c[e>>2]=p;i=p+8|0;p=a+1052+(g<<5)+8|0;c[p>>2]=c[i>>2];c[a+1052+(f<<5)+8>>2]=e;c[i>>2]=e;c[b>>2]=h;Zm(a,c[p>>2]|0);return}function Zm(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,u=0,v=0,w=0,x=0,y=0,z=0,A=0;if((b|0)==0){return}d=b+12|0;e=c[d>>2]|0;do{if((e|0)!=0){if((c[e+24>>2]|0)!=(c[b+24>>2]|0)){break}f=c[c[b+20>>2]>>2]|0;g=b+8|0;h=c[g>>2]|0;if((f|0)==(h|0)){i=e}else{j=f+8|0;k=c[j>>2]|0;do{if((k|0)==0){c[a+8>>2]=b}else{l=k|0;if((c[l>>2]|0)==(f|0)){c[l>>2]=b;break}else{c[k+4>>2]=b;break}}}while(0);do{if((h|0)==0){c[a+8>>2]=f}else{l=h|0;if((c[l>>2]|0)==(b|0)){c[l>>2]=f;break}else{c[h+4>>2]=f;break}}}while(0);c[j>>2]=h;c[g>>2]=k;i=c[d>>2]|0}l=f+12|0;m=c[l>>2]|0;c[l>>2]=i;c[d>>2]=m;m=f+16|0;n=c[m>>2]|0;o=b+16|0;c[m>>2]=c[o>>2];c[o>>2]=n;n=c[l>>2]|0;if((n|0)==(f|0)){c[l>>2]=b;p=b}else{p=n}n=c[d>>2]|0;if((n|0)==(b|0)){c[d>>2]=f;q=c[l>>2]|0;r=f}else{q=p;r=n}if((q|0)==0){s=r}else{c[q+16>>2]=f;s=c[d>>2]|0}if((s|0)!=0){c[s+16>>2]=b}n=c[m>>2]|0;if((n|0)!=0){c[n+12>>2]=f}n=c[o>>2]|0;if((n|0)==0){break}c[n+12>>2]=b}}while(0);s=b+16|0;q=c[s>>2]|0;do{if((q|0)==0){t=c[b+24>>2]|0;u=32}else{r=c[q+24>>2]|0;p=c[b+24>>2]|0;if((r|0)!=(p|0)){t=p;u=32;break}c[c[b+20>>2]>>2]=q;v=r}}while(0);if((u|0)==32){q=b+20|0;c[c[q>>2]>>2]=0;r=c[q>>2]|0;q=a+1048|0;c[r>>2]=c[q>>2];c[q>>2]=r;v=t}t=v+1|0;c[b+24>>2]=t;v=c[d>>2]|0;do{if((v|0)==0){u=36}else{if((c[v+24>>2]|0)!=(t|0)){u=36;break}c[b+20>>2]=c[v+20>>2]}}while(0);if((u|0)==36){u=a+1048|0;v=c[u>>2]|0;if((v|0)==0){t=a+4|0;r=c[t>>2]|0;c[t>>2]=r+1;w=a+25628+(r<<2)|0}else{c[u>>2]=c[v>>2];w=v}c[b+20>>2]=w;c[w>>2]=b}w=b+8|0;v=c[w>>2]|0;if((v|0)==0){return}Zm(a,v);v=c[s>>2]|0;if((v|0)!=(c[w>>2]|0)){return}a=c[d>>2]|0;u=v+12|0;c[d>>2]=c[u>>2];c[u>>2]=a;a=c[s>>2]|0;r=v+16|0;c[s>>2]=c[r>>2];c[r>>2]=a;a=c[d>>2]|0;if((a|0)==(b|0)){c[d>>2]=v;x=v}else{x=a}a=c[u>>2]|0;if((a|0)==(v|0)){c[u>>2]=b;y=c[d>>2]|0;z=b}else{y=x;z=a}if((y|0)==0){A=z}else{c[y+16>>2]=b;A=c[u>>2]|0}if((A|0)!=0){c[A+16>>2]=v}A=c[s>>2]|0;if((A|0)!=0){c[A+12>>2]=b}A=c[r>>2]|0;if((A|0)!=0){c[A+12>>2]=v}v=c[b+20>>2]|0;if((c[v>>2]|0)!=(b|0)){return}c[v>>2]=c[w>>2];return}function _m(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=c[f>>2]|0;c[636486]=g;a:do{if((a|0)!=0){h=a;i=g;while(1){j=c[h+28>>2]|0;if((j|0)!=257){break}k=d[e+(i>>3)|0]|0;l=i+1|0;c[636486]=l;m=c[((k&1<<(i&7)|0)==0?h|0:h+4|0)>>2]|0;if((m|0)==0){break a}else{h=m;i=l}}c[b>>2]=j;c[f>>2]=c[636486];return}}while(0);c[b>>2]=0;return}function $m(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=c[b+8>>2]|0;if((g|0)!=0){$m(g,b,f)}if((e|0)==0){return}g=c[636486]|0;h=(g&7|0)==0;if((c[b+4>>2]|0)==(e|0)){if(h){a[f+(g>>3)|0]=0;i=c[636486]|0}else{i=g}e=f+(i>>3)|0;a[e]=d[e]|0|1<<(i&7);c[636486]=(c[636486]|0)+1;return}else{if(h){a[f+(g>>3)|0]=0;j=c[636486]|0}else{j=g}c[636486]=j+1;return}}function an(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[636486]=c[e>>2];$m(c[a+20+(b<<2)>>2]|0,0,d);c[e>>2]=c[636486];return}function bn(b,e){b=b|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,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=i;i=i+94240|0;g=f|0;h=f+65536|0;j=g|0;k=b+20|0;l=(c[k>>2]|0)-e|0;m=b+12|0;n=c[m>>2]|0;if((l|0)<1){o=28700;p=0;q=65536;r=0;i=f;return}Zx(h|0,0,28700)|0;c[h>>2]=1;s=h+1052|0;c[h+1044>>2]=s;c[h+16>>2]=s;c[h+12>>2]=s;t=h+8|0;c[t>>2]=s;c[h+1080>>2]=256;c[h+1076>>2]=0;c[h+1068>>2]=0;c[h+1064>>2]=0;c[h+1056>>2]=0;c[s>>2]=0;c[h+1060>>2]=0;s=(d[n+e|0]|0)<<8|(d[n+(e+1)|0]|0);u=(c[b+16>>2]|0)-e|0;b=(s|0)>(u|0)?u:s;c[636486]=16;a:do{if((b|0)>0){s=0;u=16;while(1){if((u>>3|0)>(l|0)){break}v=c[t>>2]|0;b:do{if((v|0)==0){w=0}else{x=v;y=u;while(1){z=c[x+28>>2]|0;A=z&255;if((z|0)==256){break}else if((z|0)!=257){w=A;break b}A=d[n+((y>>3)+e)|0]|0;z=y+1|0;c[636486]=z;B=c[((A&1<<(y&7)|0)==0?x|0:x+4|0)>>2]|0;if((B|0)==0){w=0;break b}else{x=B;y=z}}x=(d[n+((y>>3)+e)|0]|0)>>>((y&7)>>>0);z=y+1|0;c[636486]=z;B=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;z=y+2|0;c[636486]=z;A=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;z=y+3|0;c[636486]=z;C=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;z=y+4|0;c[636486]=z;D=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;z=y+5|0;c[636486]=z;E=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;z=y+6|0;c[636486]=z;F=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;z=y+7|0;c[636486]=z;G=(d[n+((z>>3)+e)|0]|0)>>>((z&7)>>>0)&1;c[636486]=y+8;w=(G|(F|(E|(D|(C|(A|(B|x<<1&2)<<1)<<1)<<1)<<1)<<1)<<1)&255}}while(0);a[g+s|0]=w;Ym(h,w);v=s+1|0;if((v|0)>=(b|0)){break a}s=v;u=c[636486]|0}a[g+s|0]=0}}while(0);c[k>>2]=b+e;Vx((c[m>>2]|0)+e|0,j|0,b)|0;o=28700;p=0;q=65536;r=0;i=f;return}function cn(a){a=a|0;var b=0;Zx(a|0,0,57400)|0;c[a+28700>>2]=1;b=a+29752|0;c[a+29744>>2]=b;c[a+28716>>2]=b;c[a+28712>>2]=b;c[a+28708>>2]=b;c[a+29780>>2]=256;c[a+29776>>2]=0;c[a+29768>>2]=0;c[a+29764>>2]=0;c[a+29756>>2]=0;c[b>>2]=0;c[a+29760>>2]=0;c[a>>2]=1;b=a+1052|0;c[a+1044>>2]=b;c[a+12>>2]=b;c[a+8>>2]=b;c[a+1080>>2]=256;c[a+1076>>2]=0;c[a+1068>>2]=0;c[a+1064>>2]=0;c[a+1056>>2]=0;c[b>>2]=0;c[a+1060>>2]=0;return}function dn(a){a=a|0;var b=0.0,c=0,d=0.0,e=0,f=0.0,h=0.0,i=0.0,j=0.0;b=+g[a>>2];c=a+4|0;d=+g[c>>2];e=a+8|0;f=+g[e>>2];h=b*b+d*d+f*f;if(!(h!=0.0)){i=h;return+i}j=1.0/+T(h);g[a>>2]=b*j;g[c>>2]=j*d;g[e>>2]=j*f;i=h*j;return+i}function en(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,h=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0;c=i;i=i+16|0;d=c|0;e=+g[b>>2];f=+S(+e);h=f<1.0?f:1.0;f=+g[b+4>>2];j=+S(+f);k=j<h;l=+g[b+8>>2];b=+S(+l)<(k?j:h);m=d+8|0;g[m>>2]=0.0;n=d+4|0;g[n>>2]=0.0;o=d|0;g[o>>2]=0.0;g[d+((b?2:k&1)<<2)>>2]=1.0;h=1.0/(e*e+f*f+l*l);j=+g[o>>2];p=+g[n>>2];q=+g[m>>2];r=h*(e*j+f*p+l*q);s=j-e*h*r;g[a>>2]=s;e=p-f*h*r;m=a+4|0;g[m>>2]=e;f=q-l*h*r;n=a+8|0;g[n>>2]=f;r=s*s+e*e+f*f;if(!(r!=0.0)){i=c;return}h=1.0/+T(r);g[a>>2]=s*h;g[m>>2]=e*h;g[n>>2]=f*h;i=c;return}function fn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=a|0;e=b|0;f=a+4|0;h=b+12|0;i=a+8|0;j=b+24|0;g[c>>2]=+g[d>>2]*+g[e>>2]+ +g[f>>2]*+g[h>>2]+ +g[i>>2]*+g[j>>2];k=b+4|0;l=b+16|0;m=b+28|0;g[c+4>>2]=+g[d>>2]*+g[k>>2]+ +g[f>>2]*+g[l>>2]+ +g[i>>2]*+g[m>>2];n=b+8|0;o=b+20|0;p=b+32|0;g[c+8>>2]=+g[d>>2]*+g[n>>2]+ +g[f>>2]*+g[o>>2]+ +g[i>>2]*+g[p>>2];i=a+12|0;f=a+16|0;d=a+20|0;g[c+12>>2]=+g[i>>2]*+g[e>>2]+ +g[f>>2]*+g[h>>2]+ +g[d>>2]*+g[j>>2];g[c+16>>2]=+g[i>>2]*+g[k>>2]+ +g[f>>2]*+g[l>>2]+ +g[d>>2]*+g[m>>2];g[c+20>>2]=+g[i>>2]*+g[n>>2]+ +g[f>>2]*+g[o>>2]+ +g[d>>2]*+g[p>>2];d=a+24|0;f=a+28|0;i=a+32|0;g[c+24>>2]=+g[d>>2]*+g[e>>2]+ +g[f>>2]*+g[h>>2]+ +g[i>>2]*+g[j>>2];g[c+28>>2]=+g[d>>2]*+g[k>>2]+ +g[f>>2]*+g[l>>2]+ +g[i>>2]*+g[m>>2];g[c+32>>2]=+g[d>>2]*+g[n>>2]+ +g[f>>2]*+g[o>>2]+ +g[i>>2]*+g[p>>2];return}function gn(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;c=+g[a+4>>2];d=+g[a>>2];do{if(c==0.0&d==0.0){e=+g[a+8>>2]>0.0?90.0:270.0;f=0.0}else{do{if(d!=0.0){h=+$(+c,+d)*180.0/3.141592653589793;if(!(h<0.0)){i=h;break}i=h+360.0}else{i=c>0.0?90.0:270.0}}while(0);h=+T(d*d+c*c);j=+$(+(+g[a+8>>2]),+h)*180.0/3.141592653589793;if(!(j<0.0)){e=j;f=i;break}e=j+360.0;f=i}}while(0);g[b>>2]=-0.0-e;g[b+4>>2]=f;g[b+8>>2]=0.0;return}function hn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0;e=+g[a+4>>2]*.017453292519943295;g[15334]=+W(e);f=+V(e);g[15340]=f;e=+g[a>>2]*.017453292519943295;g[15338]=+W(e);h=+V(e);g[15344]=h;e=+g[a+8>>2]*.017453292519943295;g[15336]=+W(e);g[15342]=+V(e);if((b|0)!=0){g[b>>2]=h*f;g[b+4>>2]=+g[15344]*+g[15334];g[b+8>>2]=-0.0- +g[15338]}if((c|0)!=0){g[c>>2]=+g[15336]*-1.0*+g[15338]*+g[15340]- +g[15334]*+g[15342]*-1.0;g[c+4>>2]=+g[15336]*-1.0*+g[15338]*+g[15334]+ +g[15342]*-1.0*+g[15340];g[c+8>>2]=+g[15336]*-1.0*+g[15344]}if((d|0)==0){return}g[d>>2]=+g[15342]*+g[15338]*+g[15340]+ +g[15336]*+g[15334];g[d+4>>2]=+g[15342]*+g[15338]*+g[15334]- +g[15336]*+g[15340];g[d+8>>2]=+g[15342]*+g[15344];return}function jn(b){b=b|0;var c=0,d=0,e=0,f=0;c=+g[b>>2]<0.0|0;d=+g[b+4>>2]<0.0?c|2:c;if(!(+g[b+8>>2]<0.0)){e=d&255;f=b+17|0;a[f]=e;return}e=(d|4)&255;f=b+17|0;a[f]=e;return}function kn(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;e=i;i=i+8|0;f=e|0;h=a[d+16|0]|0;j=h&255;if((h&255)>>>0<3>>>0){k=+g[d+12>>2];if(!(k>+g[b+(j<<2)>>2])){l=1;i=e;return l|0}l=k<+g[c+(j<<2)>>2]?3:2;i=e;return l|0}else{j=f+4|0;g[j>>2]=0.0;h=f|0;g[h>>2]=0.0;m=a[d+17|0]|0;if((m&255)>>>0<8>>>0){n=m&255;m=n&1;k=+g[d>>2];o=f+(m<<2)|0;g[o>>2]=+g[o>>2]+k*+g[c>>2];o=f+((m^1)<<2)|0;g[o>>2]=+g[o>>2]+k*+g[b>>2];o=n>>>1&1;k=+g[d+4>>2];m=f+(o<<2)|0;g[m>>2]=+g[m>>2]+k*+g[c+4>>2];m=f+((o^1)<<2)|0;g[m>>2]=+g[m>>2]+k*+g[b+4>>2];m=n>>>2&1;k=+g[d+8>>2];n=f+(m<<2)|0;g[n>>2]=+g[n>>2]+k*+g[c+8>>2];c=f+((m^1)<<2)|0;g[c>>2]=+g[c>>2]+k*+g[b+8>>2];p=+g[h>>2];q=+g[j>>2]}else{p=0.0;q=0.0}k=+g[d+12>>2];d=p>=k|0;l=q<k?d|2:d;i=e;return l|0}return 0}function ln(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0,h=0.0;c=+S(+(+g[a>>2]));d=+S(+(+g[b>>2]));e=c>d?c:d;d=+S(+(+g[a+4>>2]));c=+S(+(+g[b+4>>2]));f=d>c?d:c;c=+S(+(+g[a+8>>2]));d=+S(+(+g[b+8>>2]));h=c>d?c:d;return+(+T(e*e+f*f+h*h))}function mn(a,b){a=a|0;b=b|0;g[a+8>>2]=99999.0;g[a+4>>2]=99999.0;g[a>>2]=99999.0;g[b+8>>2]=-99999.0;g[b+4>>2]=-99999.0;g[b>>2]=-99999.0;return}function nn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0,h=0,i=0.0,j=0.0;d=+g[a>>2];if(d<+g[b>>2]){g[b>>2]=d;e=+g[a>>2]}else{e=d}if(e>+g[c>>2]){g[c>>2]=e}f=a+4|0;e=+g[f>>2];h=b+4|0;if(e<+g[h>>2]){g[h>>2]=e;i=+g[f>>2]}else{i=e}f=c+4|0;if(i>+g[f>>2]){g[f>>2]=i}f=a+8|0;i=+g[f>>2];a=b+8|0;if(i<+g[a>>2]){g[a>>2]=i;j=+g[f>>2]}else{j=i}f=c+8|0;if(!(j>+g[f>>2])){return}g[f>>2]=j;return}function on(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0,h=0.0,i=0.0,j=0.0;c=+g[a>>2];d=a+4|0;e=+g[d>>2];f=a+8|0;h=+g[f>>2];i=c*c+e*e+h*h;if(i!=0.0){h=1.0/+T(i);g[b>>2]=c*h;g[b+4>>2]=h*+g[d>>2];g[b+8>>2]=h*+g[f>>2];j=i*h;return+j}else{g[b+8>>2]=0.0;g[b+4>>2]=0.0;g[b>>2]=0.0;j=i;return+j}return 0.0}function pn(a){a=a|0;var b=0,c=0;b=Vb(a|0,46)|0;if((b|0)==0){return 2551512}else{c=Vb(a|0,47)|0;return((c|0)==0|c>>>0<b>>>0?b+1|0:2551512)|0}return 0}function qn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;g=Vb(b|0,46)|0;do{if((g|0)==0){h=e}else{j=Vb(b|0,47)|0;if(!((j|0)==0|j>>>0<g>>>0)){h=e;break}j=g-b|0;h=(j|0)<(e|0)?j+1|0:e}}while(0);if((b|0)==(d|0)&(h|0)>1){a[b+(h-1)|0]=0;i=f;return}if((d|0)==0){aj(0,23168,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}if((b|0)==0){aj(0,20016,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}if((h|0)<1){aj(0,17864,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}k=h-1|0;ay(d|0,b|0,k|0)|0;a[d+k|0]=0;i=f;return}function rn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;if((b|0)==0){aj(0,23168,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}if((d|0)==0){aj(0,20016,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}if((e|0)<1){aj(0,17864,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}else{g=e-1|0;ay(b|0,d|0,g|0)|0;a[b+g|0]=0;i=f;return}}function sn(b,c){b=b|0;c=c|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;d=Wx(b|0)|0;e=Wx(c|0)|0;if((e|0)>(d|0)){f=0;return f|0}g=b+(d-e)|0;if((g|0)==0|(c|0)==0){f=0;return f|0}else{h=99999;i=c;j=g}while(1){g=j+1|0;c=a[j]|0;e=c<<24>>24;d=i+1|0;b=a[i]|0;k=b<<24>>24;l=h-1|0;if((h|0)==0){f=1;m=7;break}if(c<<24>>24==b<<24>>24){n=e}else{o=(c-97&255)>>>0<26>>>0?e-32|0:e;if((o|0)==(((b-97&255)>>>0<26>>>0?k-32|0:k)|0)){n=o}else{f=0;m=7;break}}if((n|0)==0){f=1;m=7;break}else{h=l;i=d;j=g}}if((m|0)==7){return f|0}return 0}function tn(b,c){b=b|0;c=c|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;if((b|0)==0|(c|0)==0){d=-1;return d|0}else{e=99999;f=c;g=b}while(1){b=g+1|0;c=a[g]|0;h=c<<24>>24;i=f+1|0;j=a[f]|0;k=j<<24>>24;l=e-1|0;if((e|0)==0){d=0;m=7;break}if(c<<24>>24==j<<24>>24){n=h}else{o=(c-97&255)>>>0<26>>>0?h-32|0:h;p=(j-97&255)>>>0<26>>>0?k-32|0:k;if((o|0)==(p|0)){n=o}else{m=5;break}}if((n|0)==0){d=0;m=7;break}else{e=l;f=i;g=b}}if((m|0)==5){d=(o|0)<(p|0)?-1:1;return d|0}else if((m|0)==7){return d|0}return 0}function un(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=Vb(a|0,46)|0;do{if((d|0)!=0){e=Vb(a|0,47)|0;if(!((e|0)==0|e>>>0<d>>>0)){break}return}}while(0);vn(a,b,c);return}function vn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;g=Wx(b|0)|0;if((g|0)>=(d|0)){aj(0,60648,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}j=b+g|0;k=d-g|0;if((j|0)==0){aj(0,23168,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if((e|0)==0){aj(0,20016,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if((k|0)<1){aj(0,17864,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}else{ay(j|0,e|0,k-1|0)|0;a[b+(d-1)|0]=0;i=f;return}}function wn(a){a=a|0;return Sd(a|0)|0}function xn(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;i=i+16|0;g=f|0;h=g;c[h>>2]=e;c[h+4>>2]=0;h=fd(a|0,b|0,d|0,g|0)|0;if((h|0)<(b|0)){i=f;return h|0}_i(59120,(g=i,i=i+16|0,c[g>>2]=b,c[g+8>>2]=h+1,g)|0);i=g;i=f;return h|0}function yn(a){a=a|0;zn(a,1)|0;return 1692560}function zn(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,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;e=c[b>>2]|0;a[1692560]=0;c[423138]=0;if((e|0)==0){c[b>>2]=0;return 1692560}a:do{if((d|0)==0){f=e;b:while(1){g=a[f]|0;if(g<<24>>24<33){h=f;i=g;j=0;while(1){if((i<<24>>24|0)==10){c[429572]=(c[429572]|0)+1;k=1}else if((i<<24>>24|0)==0){l=26;break a}else{k=j}m=h+1|0;n=a[m]|0;if(n<<24>>24<33){h=m;i=n;j=k}else{break}}if((k|0)==0){o=n;p=m}else{break}}else{if((f|0)==0){l=26;break a}else{o=g;p=f}}if(!(o<<24>>24==47)){q=p;r=o;l=40;break a}j=a[p+1|0]|0;if((j<<24>>24|0)==47){i=p+2|0;while(1){h=a[i]|0;if((h<<24>>24|0)==0|(h<<24>>24|0)==10){f=i;continue b}i=i+1|0}}else if((j<<24>>24|0)!=42){s=p;l=33;break a}i=p+2|0;while(1){g=a[i]|0;if((g<<24>>24|0)==42){if((a[i+1|0]|0)==47){t=0;break}}else if((g<<24>>24|0)==10){c[429572]=(c[429572]|0)+1}else if((g<<24>>24|0)==0){t=1;break}i=i+1|0}f=t?i:i+2|0}c[b>>2]=m;return 1692560}else{f=e;c:while(1){j=a[f]|0;if(j<<24>>24<33){g=f;h=j;while(1){if((h<<24>>24|0)==10){c[429572]=(c[429572]|0)+1}else if((h<<24>>24|0)==0){l=26;break a}u=g+1|0;v=a[u]|0;if(v<<24>>24<33){g=u;h=v}else{w=u;x=v;break}}}else{if((f|0)==0){l=26;break a}else{w=f;x=j}}if(!(x<<24>>24==47)){q=w;r=x;l=40;break a}h=a[w+1|0]|0;if((h<<24>>24|0)==47){g=w+2|0;while(1){i=a[g]|0;if((i<<24>>24|0)==0|(i<<24>>24|0)==10){f=g;continue c}g=g+1|0}}else if((h<<24>>24|0)!=42){s=w;l=33;break a}g=w+2|0;while(1){j=a[g]|0;if((j<<24>>24|0)==0){y=1;break}else if((j<<24>>24|0)==42){if((a[g+1|0]|0)==47){y=0;break}}else if((j<<24>>24|0)==10){c[429572]=(c[429572]|0)+1}g=g+1|0}f=y?g:g+2|0}}}while(0);do{if((l|0)==26){c[b>>2]=0;return 1692560}else if((l|0)==33){c[423138]=c[429572];z=s;A=0;B=47}else if((l|0)==40){y=c[429572]|0;c[423138]=y;if(!(r<<24>>24==34)){z=q;A=0;B=r;break}w=q+1|0;x=0;e=y;while(1){if((x|0)>=1023){C=w;D=e;l=45;break}y=w+1|0;m=a[w]|0;if((m<<24>>24|0)==10){t=e+1|0;c[429572]=t;E=t}else if((m<<24>>24|0)==34|(m<<24>>24|0)==0){F=y;break}else{E=e}a[1692560+x|0]=m;w=y;x=x+1|0;e=E}d:do{if((l|0)==45){while(1){l=0;e=C+1|0;w=a[C]|0;if((w<<24>>24|0)==34|(w<<24>>24|0)==0){F=e;break d}else if((w<<24>>24|0)!=10){C=e;D=D;l=45;continue}w=D+1|0;c[429572]=w;C=e;D=w;l=45}}}while(0);a[1692560+x|0]=0;c[b>>2]=F;return 1692560}}while(0);while(1){if((A|0)<1023){a[1692560+A|0]=B;G=A+1|0}else{G=A}H=z+1|0;F=a[H]|0;if(F<<24>>24>32){z=H;A=G;B=F}else{break}}a[1692560+G|0]=0;c[b>>2]=H;return 1692560}function An(b){b=b|0;var d=0,e=0,f=0;d=i;i=i+8|0;e=d|0;if((a[b]|0)==0){f=0;i=d;return f|0}+Rx(b,e);f=(a[c[e>>2]|0]|0)==0|0;i=d;return f|0}function Bn(a){a=+a;return+(~~a|0)==a|0}function Cn(b,c,d){b=b|0;c=c|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=(c|0)==0;if((b|0)==0){f=(e^1)<<31>>31;return f|0}if(e){f=1;return f|0}else{g=d;h=c;i=b}while(1){b=i+1|0;c=a[i]|0;d=c<<24>>24;e=h+1|0;j=a[h]|0;k=j<<24>>24;l=g-1|0;if((g|0)==0){f=0;m=9;break}if(c<<24>>24==j<<24>>24){n=d}else{o=(c-97&255)>>>0<26>>>0?d-32|0:d;p=(j-97&255)>>>0<26>>>0?k-32|0:k;if((o|0)==(p|0)){n=o}else{m=7;break}}if((n|0)==0){f=0;m=9;break}else{g=l;h=e;i=b}}if((m|0)==7){f=(o|0)<(p|0)?-1:1;return f|0}else if((m|0)==9){return f|0}return 0}function Dn(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b;b=d;d=c;while(1){f=a[e]|0;g=a[d]|0;if((b|0)==0){h=0;i=6;break}if(!(f<<24>>24==g<<24>>24)){i=4;break}if(f<<24>>24==0){h=0;i=6;break}else{e=e+1|0;b=b-1|0;d=d+1|0}}if((i|0)==4){h=f<<24>>24<g<<24>>24?-1:1;return h|0}else if((i|0)==6){return h|0}return 0}function En(b){b=b|0;var c=0,d=0,e=0;c=a[b]|0;if(c<<24>>24==0){return b|0}else{d=b;e=c}do{a[d]=ey(e<<24>>24|0)|0;d=d+1|0;e=a[d]|0;}while(!(e<<24>>24==0));return b|0}function Fn(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c=a[b]|0;if(c<<24>>24==0){d=b;a[d]=0;return b|0}else{e=b;f=b;g=c}while(1){do{if((e|0)!=0&g<<24>>24==94){c=e+1|0;h=a[c]|0;if(h<<24>>24==0){i=5;break}if((Ec(h<<24>>24|0)|0)==0){i=5}else{j=f;k=c}}else{i=5}}while(0);do{if((i|0)==5){i=0;if(!(g<<24>>24>31&g<<24>>24!=127)){j=f;k=e;break}a[f]=g;j=f+1|0;k=e}}while(0);c=k+1|0;h=a[c]|0;if(h<<24>>24==0){d=j;break}else{e=c;f=j;g=h}}a[d]=0;return b|0}function Gn(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a[b]|0;if(d<<24>>24==0){e=0;return e|0}else{f=b;g=0;h=d}while(1){d=(h<<24>>24==c<<24>>24)+g|0;b=f+1|0;i=a[b]|0;if(i<<24>>24==0){e=d;break}else{f=b;g=d;h=i}}return e|0}function Hn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=d|0;f=c[31620]|0;g=62480+((f&1)*32e3|0)|0;c[31620]=f+1;f=e;c[f>>2]=b;c[f+4>>2]=0;fd(g|0,32e3,a|0,e|0)|0;i=d;return g|0}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;f=Wx(d|0)|0;g=(b|0)==0;if((f|0)<65){if(g){aj(0,23168,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if((d|0)==0){aj(0,20016,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}ay(b|0,d|0,63)|0;a[b+63|0]=0;i=e;return}if(g){aj(0,23168,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if((d|0)==0){aj(0,20016,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}ay(b|0,d|0,28)|0;a[b+28|0]=0;g=Wx(b|0)|0;if((g|0)>=64){aj(0,60648,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}j=b+g|0;k=64-g|0;if((j|0)==0){aj(0,23168,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if((k|0)<1){aj(0,17864,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}ay(j|0,57288,k-1|0)|0;a[b+63|0]=0;vn(b,64,d+(f-29)|0);i=e;return}function Jn(b,d){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,v=0,w=0,x=0,y=0,z=0,A=0;e=i;i=i+8192|0;f=e|0;if((b|0)==0|(d|0)==0){g=2551512;h=8192;j=0;i=e;return g|0}if((Wx(b|0)|0)>>>0>8191>>>0){aj(1,55864,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}c[64e4]=c[64e4]^1;k=f;l=(a[b]|0)==92?b+1|0:b;a:while(1){b=a[l]|0;if((b<<24>>24|0)==0){g=2551512;m=18;break}else if((b<<24>>24|0)!=92){a[k]=b;k=k+1|0;l=l+1|0;continue}a[k]=0;b=2560008+(c[64e4]<<13)|0;n=l;while(1){o=n+1|0;p=a[o]|0;if((p<<24>>24|0)==92|(p<<24>>24|0)==0){break}a[b]=p;b=b+1|0;n=o}a[b]=0;p=99999;q=f;r=d;while(1){s=r+1|0;t=a[r]|0;u=t<<24>>24;v=q+1|0;w=a[q]|0;x=w<<24>>24;y=p-1|0;if((p|0)==0){m=15;break a}if(t<<24>>24==w<<24>>24){z=u}else{A=(t-97&255)>>>0<26>>>0?u-32|0:u;if((A|0)==(((w-97&255)>>>0<26>>>0?x-32|0:x)|0)){z=A}else{break}}if((z|0)==0){m=15;break a}else{p=y;q=v;r=s}}if((a[o]|0)==0){g=2551512;m=18;break}k=f;l=n+2|0}if((m|0)==15){g=2560008+(c[64e4]<<13)|0;h=8192;j=0;i=e;return g|0}else if((m|0)==18){h=8192;j=0;i=e;return g|0}return 0}function Kn(b,d){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;i=i+2048|0;f=e|0;g=e+1024|0;if((Wx(b|0)|0)>>>0>1023>>>0){aj(1,54864,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}a:do{if((Ib(d|0,92)|0)==0){h=b;j=a[b]|0;while(1){k=f;l=j<<24>>24==92?h+1|0:h;while(1){m=a[l]|0;if((m<<24>>24|0)==92){break}else if((m<<24>>24|0)==0){break a}a[k]=m;k=k+1|0;l=l+1|0}a[k]=0;m=g;n=l;while(1){o=n+1|0;p=a[o]|0;if((p<<24>>24|0)==92|(p<<24>>24|0)==0){break}a[m]=p;m=m+1|0;n=o}a[m]=0;if((Tx(d,f)|0)==0){break}n=a[o]|0;if(n<<24>>24==0){break a}else{h=o;j=n}}_x(h|0,o|0,(Wx(o|0)|0)+1|0)|0}}while(0);i=e;return}function Ln(b,d){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;i=i+16384|0;f=e|0;g=e+8192|0;if((Wx(b|0)|0)>>>0>8191>>>0){aj(1,53912,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}a:do{if((Ib(d|0,92)|0)==0){h=b;j=a[b]|0;while(1){k=f;l=j<<24>>24==92?h+1|0:h;while(1){m=a[l]|0;if((m<<24>>24|0)==92){break}else if((m<<24>>24|0)==0){break a}a[k]=m;k=k+1|0;l=l+1|0}a[k]=0;m=g;n=l;while(1){o=n+1|0;p=a[o]|0;if((p<<24>>24|0)==92|(p<<24>>24|0)==0){break}a[m]=p;m=m+1|0;n=o}a[m]=0;if((Tx(d,f)|0)==0){break}n=a[o]|0;if(n<<24>>24==0){break a}else{h=o;j=n}}by(h|0,o|0)|0}}while(0);i=e;return}function Mn(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;f=i;i=i+1024|0;g=f|0;if((Wx(b|0)|0)>>>0>1023>>>0){aj(1,51816,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}else{j=52792;k=92}while(1){l=k<<24>>24;if((Ib(d|0,l|0)|0)!=0){m=6;break}n=j+1|0;if((Ib(e|0,l|0)|0)!=0){m=6;break}l=a[n]|0;if(l<<24>>24==0){break}else{j=n;k=l}}if((m|0)==6){_i(50864,(h=i,i=i+24|0,c[h>>2]=a[j]|0,c[h+8>>2]=d,c[h+16>>2]=e,h)|0);i=h;o=1024;p=0;i=f;return}Kn(b,d);if((e|0)==0){o=1024;p=0;i=f;return}if((a[e]|0)==0){o=1024;p=0;i=f;return}xn(g,1024,50120,(h=i,i=i+16|0,c[h>>2]=d,c[h+8>>2]=e,h)|0)|0;i=h;e=Wx(g|0)|0;if(((Wx(b|0)|0)+e|0)>>>0>1023>>>0){_i(49320,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;o=1024;p=0;i=f;return}else{$x(g|0,b|0)|0;by(b|0,g|0)|0;o=1024;p=0;i=f;return}}function Nn(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;f=i;i=i+8192|0;g=f|0;if((Wx(b|0)|0)>>>0>8191>>>0){aj(1,51816,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}else{j=52792;k=92}while(1){l=k<<24>>24;if((Ib(d|0,l|0)|0)!=0){m=6;break}n=j+1|0;if((Ib(e|0,l|0)|0)!=0){m=6;break}l=a[n]|0;if(l<<24>>24==0){break}else{j=n;k=l}}if((m|0)==6){_i(50864,(h=i,i=i+24|0,c[h>>2]=a[j]|0,c[h+8>>2]=d,c[h+16>>2]=e,h)|0);i=h;o=8192;p=0;i=f;return}Ln(b,d);if((e|0)==0){o=8192;p=0;i=f;return}xn(g,8192,50120,(h=i,i=i+16|0,c[h>>2]=d,c[h+8>>2]=e,h)|0)|0;i=h;e=Wx(g|0)|0;if(((Wx(b|0)|0)+e|0)>>>0>8191>>>0){_i(48560,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;o=8192;p=0;i=f;return}else{$x(b|0,g|0)|0;o=8192;p=0;i=f;return}}function On(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if((b|0)==0){d=0;return d|0}e=a[c]|0;f=e<<24>>24==0;g=b;a:while(1){b=a[g]|0;if(f){d=g;h=9;break}if(!(e<<24>>24==b<<24>>24)){i=Wx(c|0)|0;j=1;while(1){if(!(j>>>0<i>>>0)){d=g;h=9;break a}if((a[c+j|0]|0)==b<<24>>24){break}else{j=j+1|0}}}g=g+1|0}if((h|0)==9){return d|0}return 0}function Pn(b,c,d){b=b|0;c=c|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;e=b;f=0;a:while(1){g=(f|0)<(c|0);h=e;b:while(1){if(!g){i=h;j=16;break a}k=h+1|0;l=a[h]|0;m=a[d]|0;c:do{if(!(m<<24>>24==0)){if(m<<24>>24==l<<24>>24){break b}n=Wx(d|0)|0;o=1;while(1){if(!(o>>>0<n>>>0)){break c}if((a[d+o|0]|0)==l<<24>>24){break b}else{o=o+1|0}}}}while(0);if((a[k]|0)==0){i=k;j=16;break a}else{h=k}}h=f+1|0;g=k;while(1){l=a[g]|0;if(!(m<<24>>24==l<<24>>24)){o=Wx(d|0)|0;n=1;while(1){if(!(n>>>0<o>>>0)){e=g;f=h;continue a}if((a[d+n|0]|0)==l<<24>>24){break}else{n=n+1|0}}}g=g+1|0}}if((j|0)==16){return((f|0)==(c|0)?i:b)|0}return 0}function Qn(b,e){b=b|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,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,ba=0,ca=0,da=0,ea=0,fa=0;f=i;i=i+256|0;g=f|0;h=f+8|0;j=f+16|0;k=f+24|0;l=f+32|0;m=f+40|0;n=f+48|0;o=f+56|0;p=f+64|0;q=f+72|0;r=f+80|0;s=f+248|0;t=r;u=r|0;if((e|0)==0){mo(u)}else{Vx(t|0,e|0,32)|0}e=r+28|0;v=he[c[r>>2]&63](c[e>>2]|0,b,5)|0;b=r+32|0;c[b>>2]=v;if((v|0)==0){w=0;x=164;y=0;i=f;return w|0}z=r+16|0;do{if((xe[c[z>>2]&31](c[e>>2]|0,v,0,2)|0)==0){A=qe[c[r+12>>2]&63](c[e>>2]|0,v)|0;B=A>>>0<65535>>>0?A:65535;C=oj(1028)|0;if((C|0)==0){D=0;break}E=r+4|0;a:do{if(B>>>0>4>>>0){F=4;while(1){G=F+1024|0;H=G>>>0>B>>>0?B:G;G=A-H|0;I=H>>>0>1028>>>0?1028:H;if((xe[c[z>>2]&31](c[e>>2]|0,v,G,0)|0)!=0){J=0;break a}if((xe[c[E>>2]&31](c[e>>2]|0,v,C,I)|0)!=(I|0)){J=0;break a}K=I-3|0;b:do{if((K|0)>0){L=K;M=I-4|0;c:while(1){do{if((a[C+M|0]|0)==80){if((a[C+L|0]|0)!=75){break}if((a[C+(L+1)|0]|0)!=5){break}if((a[C+(L+2)|0]|0)==6){break c}}}while(0);if((M|0)>0){L=M;M=M-1|0}else{break b}}L=M+G|0;if((L|0)!=0){J=L;break a}}}while(0);if(H>>>0<B>>>0){F=H}else{J=0;break}}}else{J=0}}while(0);mj(C);D=J}else{D=0}}while(0);J=(xe[c[z>>2]&31](c[e>>2]|0,c[b>>2]|0,D,0)|0)==0;z=(Rn(u,c[b>>2]|0,s)|0)==0;s=z?J?((D|0)==0)<<31>>31:-1:-1;J=c[b>>2]|0;z=r+4|0;if((xe[c[z>>2]&31](c[e>>2]|0,J,q,1)|0)==1){N=d[q]|0;O=23}else{q=(qe[c[r+24>>2]&63](c[e>>2]|0,J)|0)!=0;if(q){P=0;Q=q<<31>>31}else{N=0;O=23}}do{if((O|0)==23){if((xe[c[z>>2]&31](c[e>>2]|0,J,p,1)|0)==1){R=d[p]|0}else{q=(qe[c[r+24>>2]&63](c[e>>2]|0,J)|0)!=0;if(q){P=0;Q=q<<31>>31;break}else{R=N}}P=R<<8|N;Q=0}}while(0);N=(Q|0)==0?s:-1;s=c[b>>2]|0;if((xe[c[z>>2]&31](c[e>>2]|0,s,o,1)|0)==1){S=d[o]|0;O=30}else{o=(qe[c[r+24>>2]&63](c[e>>2]|0,s)|0)!=0;if(o){T=0;U=o<<31>>31}else{S=0;O=30}}do{if((O|0)==30){if((xe[c[z>>2]&31](c[e>>2]|0,s,n,1)|0)==1){V=d[n]|0}else{o=(qe[c[r+24>>2]&63](c[e>>2]|0,s)|0)!=0;if(o){T=0;U=o<<31>>31;break}else{V=S}}T=V<<8|S;U=0}}while(0);S=(U|0)==0?N:-1;N=c[b>>2]|0;U=r+36|0;if((xe[c[z>>2]&31](c[e>>2]|0,N,m,1)|0)==1){W=d[m]|0;O=37}else{m=(qe[c[r+24>>2]&63](c[e>>2]|0,N)|0)!=0;if(m){X=0;Y=m<<31>>31}else{W=0;O=37}}do{if((O|0)==37){if((xe[c[z>>2]&31](c[e>>2]|0,N,l,1)|0)==1){Z=d[l]|0}else{m=(qe[c[r+24>>2]&63](c[e>>2]|0,N)|0)!=0;if(m){X=0;Y=m<<31>>31;break}else{Z=W}}X=Z<<8|W;Y=0}}while(0);c[U>>2]=X;X=(Y|0)==0?S:-1;S=c[b>>2]|0;if((xe[c[z>>2]&31](c[e>>2]|0,S,k,1)|0)==1){_=d[k]|0;O=44}else{k=(qe[c[r+24>>2]&63](c[e>>2]|0,S)|0)!=0;if(k){$=0;aa=k<<31>>31}else{_=0;O=44}}do{if((O|0)==44){if((xe[c[z>>2]&31](c[e>>2]|0,S,j,1)|0)==1){ba=d[j]|0}else{k=(qe[c[r+24>>2]&63](c[e>>2]|0,S)|0)!=0;if(k){$=0;aa=k<<31>>31;break}else{ba=_}}$=ba<<8|_;aa=0}}while(0);_=($|0)==(c[U>>2]|0)&(T|0)==0&(P|0)==0?(aa|0)==0?X:-1:-103;X=r+64|0;aa=(Rn(u,c[b>>2]|0,X)|0)==0;P=r+68|0;T=(Rn(u,c[b>>2]|0,P)|0)==0;u=T?aa?_:-1:-1;_=c[b>>2]|0;aa=r+40|0;if((xe[c[z>>2]&31](c[e>>2]|0,_,h,1)|0)==1){ca=d[h]|0;O=51}else{h=(qe[c[r+24>>2]&63](c[e>>2]|0,_)|0)!=0;if(h){da=0;ea=h<<31>>31}else{ca=0;O=51}}do{if((O|0)==51){if((xe[c[z>>2]&31](c[e>>2]|0,_,g,1)|0)==1){fa=d[g]|0}else{h=(qe[c[r+24>>2]&63](c[e>>2]|0,_)|0)!=0;if(h){da=0;ea=h<<31>>31;break}else{fa=ca}}da=fa<<8|ca;ea=0}}while(0);c[aa>>2]=da;da=(ea|0)==0?u:-1;u=(c[X>>2]|0)+(c[P>>2]|0)|0;if(!((da|0)==0&((da|0)!=0|D>>>0>=u>>>0))){qe[c[r+20>>2]&63](c[e>>2]|0,c[b>>2]|0)|0;w=0;x=164;y=0;i=f;return w|0}c[r+44>>2]=D-u;c[r+60>>2]=D;c[r+156>>2]=0;c[r+160>>2]=0;r=oj(164)|0;Vx(r|0,t|0,164)|0;if((r|0)==0){w=0;x=164;y=0;i=f;return w|0}c[r+52>>2]=c[r+68>>2];c[r+48>>2]=0;c[r+56>>2]=(Yn(r,r+72|0,r+152|0,0,0,0,0,0,0)|0)==0;w=r;x=164;y=0;i=f;return w|0}function Rn(a,b,e){a=a|0;b=b|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;f=i;i=i+32|0;g=f|0;h=f+8|0;j=f+16|0;k=f+24|0;l=a+4|0;m=a+28|0;do{if((xe[c[l>>2]&31](c[m>>2]|0,b,k,1)|0)==1){n=d[k]|0}else{if((qe[c[a+24>>2]&63](c[m>>2]|0,b)|0)==0){n=0;break}else{o=0;p=-1}c[e>>2]=o;i=f;return p|0}}while(0);do{if((xe[c[l>>2]&31](c[m>>2]|0,b,j,1)|0)==1){k=d[j]|0;q=k;r=k<<8|n}else{if((qe[c[a+24>>2]&63](c[m>>2]|0,b)|0)==0){q=n;r=n*257|0;break}else{o=0;p=-1}c[e>>2]=o;i=f;return p|0}}while(0);do{if((xe[c[l>>2]&31](c[m>>2]|0,b,h,1)|0)==1){s=d[h]|0}else{n=(qe[c[a+24>>2]&63](c[m>>2]|0,b)|0)!=0;if(n){o=0;p=n<<31>>31}else{s=q;break}c[e>>2]=o;i=f;return p|0}}while(0);q=(s<<16)+r|0;do{if((xe[c[l>>2]&31](c[m>>2]|0,b,g,1)|0)==1){t=d[g]|0}else{r=(qe[c[a+24>>2]&63](c[m>>2]|0,b)|0)!=0;if(r){o=0;p=r<<31>>31}else{t=s;break}c[e>>2]=o;i=f;return p|0}}while(0);o=(t<<24)+q|0;p=0;c[e>>2]=o;i=f;return p|0}function Sn(a){a=a|0;var b=0,d=0;if((a|0)==0){b=-102;return b|0}c[a+52>>2]=c[a+68>>2];c[a+48>>2]=0;d=Yn(a,a+72|0,a+152|0,0,0,0,0,0,0)|0;c[a+56>>2]=(d|0)==0;b=d;return b|0}function Tn(a){a=a|0;return Qn(a,0)|0}function Un(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((a|0)==0){b=-102;return b|0}d=a+156|0;e=c[d>>2]|0;if((e|0)!=0){f=e|0;g=c[f>>2]|0;if((g|0)!=0){mj(g)}c[f>>2]=0;f=e+64|0;if((c[f>>2]|0)!=0){vx(e+4|0)|0}c[f>>2]=0;mj(e);c[d>>2]=0}qe[c[a+20>>2]&63](c[a+28>>2]|0,c[a+32>>2]|0)|0;mj(a);b=0;return b|0}function Vn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((a|0)==0){b=-102;return b|0}d=a+156|0;a=c[d>>2]|0;if((a|0)==0){b=-102;return b|0}do{if((c[a+92>>2]|0)==0){if((c[a+140>>2]|0)!=0){e=0;break}e=(c[a+80>>2]|0)==(c[a+84>>2]|0)?0:-105}else{e=0}}while(0);f=a|0;g=c[f>>2]|0;if((g|0)!=0){mj(g)}c[f>>2]=0;f=a+64|0;if((c[f>>2]|0)!=0){vx(a+4|0)|0}c[f>>2]=0;mj(a);c[d>>2]=0;b=e;return b|0}function Wn(a,b){a=a|0;b=b|0;var d=0,e=0;if((a|0)==0){d=-102;return d|0}e=a+36|0;a=b;b=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=b;d=0;return d|0}function Xn(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Yn(a,b,0,c,d,e,f,g,h)|0}function Yn(b,e,f,g,h,j,k,l,m){b=b|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;var 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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0;n=i;i=i+240|0;o=n|0;p=n+8|0;q=n+16|0;r=n+24|0;s=n+32|0;t=n+40|0;u=n+48|0;v=n+56|0;w=n+64|0;x=n+72|0;y=n+80|0;z=n+88|0;A=n+96|0;B=n+104|0;C=n+112|0;D=n+120|0;E=n+128|0;F=n+136|0;G=n+144|0;H=n+224|0;I=n+232|0;J=G;if((b|0)==0){K=-102;L=80;M=0;i=n;return K|0}N=b;O=b+16|0;P=b+28|0;Q=b+32|0;R=(xe[c[O>>2]&31](c[P>>2]|0,c[Q>>2]|0,(c[b+44>>2]|0)+(c[b+52>>2]|0)|0,0)|0)==0;S=(R^1)<<31>>31;do{if(R){if((Rn(N,c[Q>>2]|0,I)|0)!=0){T=-1;break}T=(c[I>>2]|0)==33639248?S:-103}else{T=S}}while(0);S=c[Q>>2]|0;I=G|0;R=b+4|0;if((xe[c[R>>2]&31](c[P>>2]|0,S,F,1)|0)==1){U=d[F]|0;V=8}else{F=(qe[c[b+24>>2]&63](c[P>>2]|0,S)|0)!=0;if(F){W=0;X=F<<31>>31}else{U=0;V=8}}do{if((V|0)==8){if((xe[c[R>>2]&31](c[P>>2]|0,S,E,1)|0)==1){Y=d[E]|0}else{F=(qe[c[b+24>>2]&63](c[P>>2]|0,S)|0)!=0;if(F){W=0;X=F<<31>>31;break}else{Y=U}}W=Y<<8|U;X=0}}while(0);c[I>>2]=W;W=(X|0)==0?T:-1;T=c[Q>>2]|0;X=G+4|0;if((xe[c[R>>2]&31](c[P>>2]|0,T,D,1)|0)==1){Z=d[D]|0;V=15}else{D=(qe[c[b+24>>2]&63](c[P>>2]|0,T)|0)!=0;if(D){_=0;$=D<<31>>31}else{Z=0;V=15}}do{if((V|0)==15){if((xe[c[R>>2]&31](c[P>>2]|0,T,C,1)|0)==1){aa=d[C]|0}else{D=(qe[c[b+24>>2]&63](c[P>>2]|0,T)|0)!=0;if(D){_=0;$=D<<31>>31;break}else{aa=Z}}_=aa<<8|Z;$=0}}while(0);c[X>>2]=_;_=($|0)==0?W:-1;W=c[Q>>2]|0;$=G+8|0;if((xe[c[R>>2]&31](c[P>>2]|0,W,B,1)|0)==1){ba=d[B]|0;V=22}else{B=(qe[c[b+24>>2]&63](c[P>>2]|0,W)|0)!=0;if(B){ca=0;da=B<<31>>31}else{ba=0;V=22}}do{if((V|0)==22){if((xe[c[R>>2]&31](c[P>>2]|0,W,A,1)|0)==1){ea=d[A]|0}else{B=(qe[c[b+24>>2]&63](c[P>>2]|0,W)|0)!=0;if(B){ca=0;da=B<<31>>31;break}else{ea=ba}}ca=ea<<8|ba;da=0}}while(0);c[$>>2]=ca;ca=(da|0)==0?_:-1;_=c[Q>>2]|0;da=G+12|0;if((xe[c[R>>2]&31](c[P>>2]|0,_,z,1)|0)==1){fa=d[z]|0;V=29}else{z=(qe[c[b+24>>2]&63](c[P>>2]|0,_)|0)!=0;if(z){ga=0;ha=z<<31>>31}else{fa=0;V=29}}do{if((V|0)==29){if((xe[c[R>>2]&31](c[P>>2]|0,_,y,1)|0)==1){ia=d[y]|0}else{z=(qe[c[b+24>>2]&63](c[P>>2]|0,_)|0)!=0;if(z){ga=0;ha=z<<31>>31;break}else{ia=fa}}ga=ia<<8|fa;ha=0}}while(0);c[da>>2]=ga;ga=G+16|0;da=(Rn(N,c[Q>>2]|0,ga)|0)==0;fa=c[ga>>2]|0;c[G+68>>2]=fa>>>16&31;c[G+72>>2]=(fa>>>21&15)-1;c[G+76>>2]=(fa>>>25)+1980;c[G+64>>2]=fa>>>11&31;c[G+60>>2]=fa>>>5&63;c[G+56>>2]=fa<<1&62;fa=(Rn(N,c[Q>>2]|0,G+20|0)|0)==0;ga=(Rn(N,c[Q>>2]|0,G+24|0)|0)==0;ia=(Rn(N,c[Q>>2]|0,G+28|0)|0)==0;_=ia?ga?fa?da?(ha|0)==0?ca:-1:-1:-1:-1:-1;ca=c[Q>>2]|0;ha=G+32|0;if((xe[c[R>>2]&31](c[P>>2]|0,ca,x,1)|0)==1){ja=d[x]|0;V=36}else{x=(qe[c[b+24>>2]&63](c[P>>2]|0,ca)|0)!=0;if(x){ka=0;la=x<<31>>31}else{ja=0;V=36}}do{if((V|0)==36){if((xe[c[R>>2]&31](c[P>>2]|0,ca,w,1)|0)==1){ma=d[w]|0}else{x=(qe[c[b+24>>2]&63](c[P>>2]|0,ca)|0)!=0;if(x){ka=0;la=x<<31>>31;break}else{ma=ja}}ka=ma<<8|ja;la=0}}while(0);c[ha>>2]=ka;ka=(la|0)==0?_:-1;_=c[Q>>2]|0;la=G+36|0;if((xe[c[R>>2]&31](c[P>>2]|0,_,v,1)|0)==1){na=d[v]|0;V=43}else{v=(qe[c[b+24>>2]&63](c[P>>2]|0,_)|0)!=0;if(v){oa=0;pa=v<<31>>31}else{na=0;V=43}}do{if((V|0)==43){if((xe[c[R>>2]&31](c[P>>2]|0,_,u,1)|0)==1){qa=d[u]|0}else{v=(qe[c[b+24>>2]&63](c[P>>2]|0,_)|0)!=0;if(v){oa=0;pa=v<<31>>31;break}else{qa=na}}oa=qa<<8|na;pa=0}}while(0);c[la>>2]=oa;oa=(pa|0)==0?ka:-1;ka=c[Q>>2]|0;pa=G+40|0;if((xe[c[R>>2]&31](c[P>>2]|0,ka,t,1)|0)==1){ra=d[t]|0;V=50}else{t=(qe[c[b+24>>2]&63](c[P>>2]|0,ka)|0)!=0;if(t){sa=0;ta=t<<31>>31}else{ra=0;V=50}}do{if((V|0)==50){if((xe[c[R>>2]&31](c[P>>2]|0,ka,s,1)|0)==1){ua=d[s]|0}else{t=(qe[c[b+24>>2]&63](c[P>>2]|0,ka)|0)!=0;if(t){sa=0;ta=t<<31>>31;break}else{ua=ra}}sa=ua<<8|ra;ta=0}}while(0);c[pa>>2]=sa;sa=(ta|0)==0?oa:-1;oa=c[Q>>2]|0;ta=G+44|0;if((xe[c[R>>2]&31](c[P>>2]|0,oa,r,1)|0)==1){va=d[r]|0;V=57}else{r=(qe[c[b+24>>2]&63](c[P>>2]|0,oa)|0)!=0;if(r){wa=0;xa=r<<31>>31}else{va=0;V=57}}do{if((V|0)==57){if((xe[c[R>>2]&31](c[P>>2]|0,oa,q,1)|0)==1){ya=d[q]|0}else{r=(qe[c[b+24>>2]&63](c[P>>2]|0,oa)|0)!=0;if(r){wa=0;xa=r<<31>>31;break}else{ya=va}}wa=ya<<8|va;xa=0}}while(0);c[ta>>2]=wa;wa=(xa|0)==0?sa:-1;sa=c[Q>>2]|0;xa=G+48|0;if((xe[c[R>>2]&31](c[P>>2]|0,sa,p,1)|0)==1){za=d[p]|0;V=64}else{p=(qe[c[b+24>>2]&63](c[P>>2]|0,sa)|0)!=0;if(p){Aa=0;Ba=p<<31>>31}else{za=0;V=64}}do{if((V|0)==64){if((xe[c[R>>2]&31](c[P>>2]|0,sa,o,1)|0)==1){Ca=d[o]|0}else{p=(qe[c[b+24>>2]&63](c[P>>2]|0,sa)|0)!=0;if(p){Aa=0;Ba=p<<31>>31;break}else{Ca=za}}Aa=Ca<<8|za;Ba=0}}while(0);c[xa>>2]=Aa;Aa=(Rn(N,c[Q>>2]|0,G+52|0)|0)==0;G=H|0;H=(Rn(N,c[Q>>2]|0,G)|0)==0;N=H?Aa?(Ba|0)==0?wa:-1:-1:-1;wa=c[ha>>2]|0;if((N|0)!=0|(g|0)==0){Da=wa;Ea=N}else{if(wa>>>0<h>>>0){a[g+wa|0]=0;Fa=wa}else{Fa=h}if((wa|0)==0|(h|0)==0){Ga=0}else{Ga=((xe[c[R>>2]&31](c[P>>2]|0,c[Q>>2]|0,g,Fa)|0)!=(Fa|0))<<31>>31}Da=wa-Fa|0;Ea=Ga}Ga=c[la>>2]|0;if((Ea|0)!=0|(j|0)==0){Ha=Ga+Da|0;Ia=Ea}else{Ea=Ga>>>0<k>>>0?Ga:k;if((Da|0)==0){Ja=0;Ka=0;La=Ga}else{Ga=(xe[c[O>>2]&31](c[P>>2]|0,c[Q>>2]|0,Da,1)|0)==0;Ja=Ga?0:Da;Ka=(Ga^1)<<31>>31;La=c[la>>2]|0}if((La|0)==0|(k|0)==0){Ma=Ka;Na=La}else{La=(xe[c[R>>2]&31](c[P>>2]|0,c[Q>>2]|0,j,Ea)|0)==(Ea|0);Ma=La?Ka:-1;Na=c[la>>2]|0}Ha=Ja-Ea+Na|0;Ia=Ma}do{if((Ia|0)!=0|(l|0)==0){Oa=Ia}else{Ma=c[pa>>2]|0;if(Ma>>>0<m>>>0){a[l+Ma|0]=0;Pa=Ma}else{Pa=m}if((Ha|0)==0){Qa=0;Ra=Ma}else{Ma=((xe[c[O>>2]&31](c[P>>2]|0,c[Q>>2]|0,Ha,1)|0)!=0)<<31>>31;Qa=Ma;Ra=c[pa>>2]|0}if((Ra|0)==0|(m|0)==0){Oa=Qa;break}Ma=(xe[c[R>>2]&31](c[P>>2]|0,c[Q>>2]|0,l,Pa)|0)==(Pa|0);Oa=Ma?Qa:-1}}while(0);Qa=(Oa|0)!=0;if(!(Qa|(e|0)==0)){Vx(e|0,J|0,80)|0}if(Qa|(f|0)==0){K=Oa;L=80;M=0;i=n;return K|0}c[f>>2]=c[G>>2];K=0;L=80;M=0;i=n;return K|0}function Zn(a){a=a|0;var b=0,d=0,e=0,f=0;if((a|0)==0){b=-102;return b|0}d=a+56|0;if((c[d>>2]|0)==0){b=-100;return b|0}e=c[a+36>>2]|0;f=c[a+48>>2]|0;do{if((e|0)!=65535){if((f+1|0)==(e|0)){b=-100}else{break}return b|0}}while(0);e=a+52|0;c[e>>2]=(c[a+104>>2]|0)+46+(c[a+108>>2]|0)+(c[a+112>>2]|0)+(c[e>>2]|0);c[a+48>>2]=f+1;f=Yn(a,a+72|0,a+152|0,0,0,0,0,0,0)|0;c[d>>2]=(f|0)==0;b=f;return b|0}function _n(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,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;j=i;i=i+96|0;k=j|0;l=j+8|0;m=j+16|0;n=j+24|0;o=j+32|0;p=j+40|0;q=j+48|0;r=j+56|0;s=j+64|0;t=j+72|0;u=j+80|0;v=j+88|0;if((h|0)!=0|(b|0)==0){w=-102;i=j;return w|0}if((c[b+56>>2]|0)==0){w=-102;i=j;return w|0}h=b+156|0;x=c[h>>2]|0;if((x|0)!=0){y=x|0;z=c[y>>2]|0;if((z|0)!=0){mj(z)}c[y>>2]=0;y=x+64|0;if((c[y>>2]|0)!=0){vx(x+4|0)|0}c[y>>2]=0;mj(x);c[h>>2]=0}x=b;y=b+28|0;z=b+32|0;A=b+152|0;B=b+44|0;if((xe[c[b+16>>2]&31](c[y>>2]|0,c[z>>2]|0,(c[B>>2]|0)+(c[A>>2]|0)|0,0)|0)!=0){w=-103;i=j;return w|0}if((Rn(x,c[z>>2]|0,u)|0)==0){C=(c[u>>2]|0)==67324752?0:-103}else{C=-1}u=c[z>>2]|0;D=b+4|0;if((xe[c[D>>2]&31](c[y>>2]|0,u,t,1)|0)==1){E=d[t]|0;F=15}else{t=(qe[c[b+24>>2]&63](c[y>>2]|0,u)|0)!=0;if(t){G=0;H=t<<31>>31}else{E=0;F=15}}do{if((F|0)==15){if((xe[c[D>>2]&31](c[y>>2]|0,u,s,1)|0)==1){I=d[s]|0}else{t=(qe[c[b+24>>2]&63](c[y>>2]|0,u)|0)!=0;if(t){G=0;H=t<<31>>31;break}else{I=E}}G=I<<8|E;H=0}}while(0);c[v>>2]=G;G=(H|0)==0?C:-1;C=c[z>>2]|0;if((xe[c[D>>2]&31](c[y>>2]|0,C,r,1)|0)==1){J=a[r]&8;F=22}else{r=(qe[c[b+24>>2]&63](c[y>>2]|0,C)|0)!=0;if(r){K=0;L=r<<31>>31}else{J=0;F=22}}do{if((F|0)==22){if((xe[c[D>>2]&31](c[y>>2]|0,C,q,1)|0)!=1){r=(qe[c[b+24>>2]&63](c[y>>2]|0,C)|0)!=0;if(r){K=0;L=r<<31>>31;break}}K=J;L=0}}while(0);J=(L|0)==0?G:-1;G=c[z>>2]|0;if((xe[c[D>>2]&31](c[y>>2]|0,G,p,1)|0)==1){M=d[p]|0;F=28}else{if((qe[c[b+24>>2]&63](c[y>>2]|0,G)|0)==0){M=0;F=28}else{F=31}}do{if((F|0)==28){if((xe[c[D>>2]&31](c[y>>2]|0,G,o,1)|0)==1){N=d[o]|0}else{if((qe[c[b+24>>2]&63](c[y>>2]|0,G)|0)==0){N=M}else{F=31;break}}p=N<<8|M;c[v>>2]=p;if((J|0)!=0){O=J;break}L=(p|0)==(c[b+84>>2]|0);if(!L){O=L?0:-103;break}if((p|0)==0|(p|0)==8){O=0;break}O=-103}}while(0);if((F|0)==31){c[v>>2]=0;O=-1}J=(Rn(x,c[z>>2]|0,v)|0)==0;M=J?O:-1;do{if((Rn(x,c[z>>2]|0,v)|0)==0){if((M|0)!=0){P=M;break}if((c[v>>2]|0)==(c[b+92>>2]|0)){P=0;break}P=(K|0)==0?-103:0}else{P=-1}}while(0);do{if((Rn(x,c[z>>2]|0,v)|0)==0){if((P|0)!=0){Q=P;break}if((c[v>>2]|0)==(c[b+96>>2]|0)){Q=0;break}Q=(K|0)==0?-103:0}else{Q=-1}}while(0);do{if((Rn(x,c[z>>2]|0,v)|0)==0){if((Q|0)!=0){R=Q;break}if((c[v>>2]|0)==(c[b+100>>2]|0)){R=0;break}R=(K|0)==0?-103:0}else{R=-1}}while(0);K=c[z>>2]|0;if((xe[c[D>>2]&31](c[y>>2]|0,K,n,1)|0)==1){S=d[n]|0;F=51}else{if((qe[c[b+24>>2]&63](c[y>>2]|0,K)|0)==0){S=0;F=51}else{T=-1;U=0}}do{if((F|0)==51){if((xe[c[D>>2]&31](c[y>>2]|0,K,m,1)|0)==1){V=d[m]|0}else{if((qe[c[b+24>>2]&63](c[y>>2]|0,K)|0)==0){V=S}else{T=-1;U=0;break}}n=V<<8|S;if((R|0)!=0){T=R;U=n;break}T=(n|0)==(c[b+104>>2]|0)?0:-103;U=n}}while(0);R=c[z>>2]|0;if((xe[c[D>>2]&31](c[y>>2]|0,R,l,1)|0)==1){W=d[l]|0;F=59}else{l=(qe[c[b+24>>2]&63](c[y>>2]|0,R)|0)!=0;if(l){X=0;Y=l<<31>>31}else{W=0;F=59}}do{if((F|0)==59){if((xe[c[D>>2]&31](c[y>>2]|0,R,k,1)|0)==1){Z=d[k]|0}else{l=(qe[c[b+24>>2]&63](c[y>>2]|0,R)|0)!=0;if(l){X=0;Y=l<<31>>31;break}else{Z=W}}X=Z<<8|W;Y=0}}while(0);W=U+30|0;U=W+(c[A>>2]|0)|0;if((Y|T|0)!=0){w=-103;i=j;return w|0}T=oj(144)|0;Y=T;if((T|0)==0){w=-104;i=j;return w|0}Z=oj(16384)|0;c[T>>2]=Z;c[T+68>>2]=U;c[T+72>>2]=X;c[T+76>>2]=0;c[T+140>>2]=g;if((Z|0)==0){mj(T);w=-104;i=j;return w|0}Z=T+64|0;c[Z>>2]=0;if((e|0)!=0){c[e>>2]=c[b+84>>2]}do{if((f|0)!=0){c[f>>2]=6;e=c[b+80>>2]&6;if((e|0)==6){c[f>>2]=1;break}else if((e|0)==4){c[f>>2]=2;break}else if((e|0)==2){c[f>>2]=9;break}else{break}}}while(0);f=b+84|0;e=c[f>>2]|0;if((e|0)==0|(e|0)==8){_=0}else{_=-103}c[T+84>>2]=c[b+92>>2];c[T+80>>2]=0;c[T+132>>2]=c[f>>2];c[T+128>>2]=c[z>>2];Vx(T+96|0,b|0,32)|0;c[T+136>>2]=c[B>>2];B=T+4|0;c[T+24>>2]=0;do{if((c[f>>2]|0)==8&(g|0)==0){c[T+36>>2]=0;c[T+40>>2]=0;c[T+44>>2]=0;c[B>>2]=0;z=T+8|0;c[z>>2]=0;if((sx(B,-15,53168,56)|0)==0){c[Z>>2]=1;$=z;break}mj(T);w=-104;i=j;return w|0}else{$=T+8|0}}while(0);c[T+88>>2]=c[b+96>>2];c[T+92>>2]=c[b+100>>2];c[T+60>>2]=W+X+(c[A>>2]|0);c[$>>2]=0;c[h>>2]=Y;w=_;i=j;return w|0}function $n(a){a=a|0;return _n(a,0,0,0,0)|0}function ao(b,d,e){b=b|0;d=d|0;e=e|0;var 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;if((b|0)==0){f=-102;return f|0}g=c[b+156>>2]|0;if((g|0)==0){f=-102;return f|0}b=g|0;if((c[b>>2]|0)==0){f=-100;return f|0}if((e|0)==0){f=0;return f|0}h=g+4|0;i=g+16|0;c[i>>2]=d;d=g+20|0;c[d>>2]=e;j=g+92|0;k=c[j>>2]|0;do{if(k>>>0<e>>>0){if((c[g+140>>2]|0)!=0){l=e;break}c[d>>2]=k;l=k}else{l=e}}while(0);k=g+88|0;m=g+8|0;n=(c[m>>2]|0)+(c[k>>2]|0)|0;do{if(n>>>0<e>>>0){if((c[g+140>>2]|0)==0){o=0;p=l;break}c[d>>2]=n;o=0;p=n}else{o=0;p=l}}while(0);a:while(1){if((p|0)==0){q=0;r=o;s=29;break}l=c[m>>2]|0;do{if((l|0)==0){n=c[k>>2]|0;if((n|0)==0){t=0;break}e=n>>>0<16384>>>0?n:16384;if((e|0)==0){f=0;s=30;break a}n=g+124|0;u=g+128|0;v=g+60|0;if((xe[c[g+112>>2]&31](c[n>>2]|0,c[u>>2]|0,(c[g+136>>2]|0)+(c[v>>2]|0)|0,0)|0)!=0){f=-1;s=30;break a}if((xe[c[g+100>>2]&31](c[n>>2]|0,c[u>>2]|0,c[b>>2]|0,e)|0)!=(e|0)){f=-1;s=30;break a}c[v>>2]=(c[v>>2]|0)+e;c[k>>2]=(c[k>>2]|0)-e;c[h>>2]=c[b>>2];c[m>>2]=e;t=e}else{t=l}}while(0);do{if((c[g+132>>2]|0)!=0){if((c[g+140>>2]|0)!=0){break}l=g+24|0;e=c[l>>2]|0;v=c[i>>2]|0;u=tx(h,2)|0;if((u|0)>-1){w=(c[g+28>>2]|0)==0?u:-3}else{w=u}u=(c[l>>2]|0)-e|0;e=g+80|0;c[e>>2]=qx(c[e>>2]|0,v,u)|0;c[j>>2]=(c[j>>2]|0)-u;v=u+o|0;if((w|0)==1){f=v;s=30;break a}else if((w|0)!=0){q=w;r=v;s=29;break a}o=v;p=c[d>>2]|0;continue a}}while(0);if((t|0)==0){if((c[k>>2]|0)==0){f=o;s=30;break}}v=c[d>>2]|0;u=v>>>0<t>>>0?v:t;v=h|0;if((u|0)!=0){e=0;do{a[(c[i>>2]|0)+e|0]=a[(c[v>>2]|0)+e|0]|0;e=e+1|0;}while(e>>>0<u>>>0)}e=g+80|0;c[e>>2]=qx(c[e>>2]|0,c[i>>2]|0,u)|0;c[j>>2]=(c[j>>2]|0)-u;c[m>>2]=(c[m>>2]|0)-u;e=(c[d>>2]|0)-u|0;c[d>>2]=e;c[i>>2]=(c[i>>2]|0)+u;c[v>>2]=(c[v>>2]|0)+u;l=g+24|0;c[l>>2]=(c[l>>2]|0)+u;o=u+o|0;p=e}if((s|0)==29){f=(q|0)==0?r:q;return f|0}else if((s|0)==30){return f|0}return 0}function bo(a){a=a|0;var b=0,d=0;do{if((a|0)==0){b=-102}else{d=c[a+156>>2]|0;if((d|0)==0){b=-102;break}b=c[d+24>>2]|0}}while(0);return b|0}function co(a){a=a|0;var b=0,d=0;if((a|0)==0){b=-102;return b|0}if((c[a+56>>2]|0)==0){b=0;return b|0}d=c[a+36>>2]|0;do{if(!((d|0)==0|(d|0)==65535)){if((c[a+48>>2]|0)==(d|0)){b=0}else{break}return b|0}}while(0);b=c[a+52>>2]|0;return b|0}function eo(a,b){a=a|0;b=b|0;var d=0;if((a|0)==0){d=-102;return d|0}c[a+52>>2]=b;c[a+48>>2]=c[a+36>>2];b=Yn(a,a+72|0,a+152|0,0,0,0,0,0,0)|0;c[a+56>>2]=(b|0)==0;d=b;return d|0}function fo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;do{if((c&3|0)==1){d=53040}else{if((c&4|0)!=0){d=58304;break}d=(c&8|0)==0?0:47888}}while(0);if((b|0)==0|(d|0)==0){e=0;return e|0}e=zc(b|0,d|0)|0;return e|0}function go(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return kd(c|0,1,d|0,b|0)|0}function ho(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return _a(c|0,1,d|0,b|0)|0}function io(a,b){a=a|0;b=b|0;return Qb(b|0)|0}function jo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(!(d>>>0<3>>>0)){e=-1;return e|0}vd(b|0,c|0,d|0)|0;e=0;return e|0}function ko(a,b){a=a|0;b=b|0;return Ta(b|0)|0}function lo(a,b){a=a|0;b=b|0;return Yb(b|0)|0}function mo(a){a=a|0;c[a>>2]=20;c[a+4>>2]=4;c[a+8>>2]=18;c[a+12>>2]=36;c[a+16>>2]=10;c[a+20>>2]=34;c[a+24>>2]=30;c[a+28>>2]=0;return}function no(a){a=a|0;c[15496]=a;return}function oo(){jk(52952,58272,1)|0;jk(47880,58272,1)|0;jk(41112,58272,1)|0;Pi(36304,126);Pi(31008,28);Zx(61992|0,0|0,468|0)|0;return}function po(){var a=0,b=0,d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0,p=0.0,q=0;a=i;b=c[195392]|0;if((b|0)==0){i=a;return}d=b+128|0;e=c[d>>2]|0;if((e|0)==0){i=a;return}f=oj(e<<2)|0;e=f;g=c[b+132>>2]|0;c[e>>2]=g;j=+(c[g+8>>2]|0);b=c[d>>2]|0;if((b|0)>1){k=j;l=1;m=g;while(1){g=c[m>>2]|0;c[e+(l<<2)>>2]=g;n=k+ +(c[g+8>>2]|0);o=l+1|0;if((o|0)<(b|0)){k=n;l=o;m=g}else{p=n;break}}}else{p=j}Gc(f|0,b|0,4,56);if((c[d>>2]|0)>0){b=0;do{m=c[e+(b<<2)>>2]|0;l=m+8|0;g=c[l>>2]|0;_i(39904,(q=i,i=i+24|0,c[q>>2]=~~(+(g|0)*100.0/p),c[q+8>>2]=g,c[q+16>>2]=m+12,q)|0);i=q;c[l>>2]=0;b=b+1|0;}while((b|0)<(c[d>>2]|0))}_i(39472,(q=i,i=i+8|0,h[q>>3]=p,q)|0);i=q;mj(f);i=a;return}function qo(){var b=0,d=0,e=0,f=0,g=0;b=i;_i(38976,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;e=0;while(1){f=62e3+(e*156|0)|0;if((a[f]|0)==0){g=10;break}_i(38480,(d=i,i=i+8|0,c[d>>2]=f,d)|0);i=d;if((c[62068+(e*156|0)>>2]|0)==0){if((c[62084+(e*156|0)>>2]|0)==0){_i(37368,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}else{_i(37696,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}_i(36968,(d=i,i=i+8|0,c[d>>2]=c[62096+(e*156|0)>>2],d)|0);i=d;_i(36544,(d=i,i=i+8|0,c[d>>2]=c[62104+(e*156|0)>>2]<<2,d)|0);i=d;_i(35656,(d=i,i=i+8|0,c[d>>2]=(c[62112+(e*156|0)>>2]|0)+1,d)|0);i=d}else{_i(38072,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}f=e+1|0;if((f|0)<3){e=f}else{g=10;break}}if((g|0)==10){i=b;return}}function ro(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,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=i;i=i+144|0;e=d|0;f=d+8|0;g=d+16|0;h=d+80|0;if((c[(c[430622]|0)+32>>2]|0)==0){j=64;k=0;l=64;m=0;i=d;return}qn(b+8|0,g,64);xn(h,64,2e4,(n=i,i=i+8|0,c[n>>2]=g,n)|0)|0;i=n;hl(h,e)|0;g=c[e>>2]|0;if((g|0)==0){_i(17832,(n=i,i=i+8|0,c[n>>2]=h,n)|0);i=n;j=64;k=0;l=64;m=0;i=d;return}o=c[b+112>>2]|0;c[f>>2]=g;g=yn(f)|0;a:do{if((a[g]|0)==0){p=0}else{q=b+108|0;r=0;s=b+132|0;t=g;while(1){u=t;v=0;while(1){w=u;while(1){x=w+1|0;y=a[w]|0;z=y<<24>>24;if(y<<24>>24==0){A=16;break}if((y-48&255)>>>0<10>>>0){A=10;break}if((y-97&255)>>>0<6>>>0){A=13;break}if((y-65&255)>>>0<6>>>0){A=15;break}else{w=x}}if((A|0)==10){A=0;B=(v<<4)-48|0}else if((A|0)==13){A=0;B=(v<<4|10)-97|0}else if((A|0)==15){A=0;B=(v<<4|10)-65|0}else if((A|0)==16){A=0;C=yn(f)|0;if((v|0)==0){break}yn(f)|0;w=yn(f)|0;if((a[w]|0)==0){p=r;break a}else{u=w;v=0;continue}}u=x;v=B+z|0}if((a[C]|0)==0){A=19;break}else{D=C;E=0}b:while(1){v=D;while(1){F=v+1|0;u=a[v]|0;G=u<<24>>24;if(u<<24>>24==0){break b}if((u-48&255)>>>0<10>>>0){A=23;break}if((u-97&255)>>>0<6>>>0){A=26;break}if((u-65&255)>>>0<6>>>0){A=28;break}else{v=F}}if((A|0)==23){A=0;H=(E<<4)-48|0}else if((A|0)==26){A=0;H=(E<<4|10)-97|0}else if((A|0)==28){A=0;H=(E<<4|10)-65|0}D=F;E=H+G|0}v=yn(f)|0;if((a[v]|0)==0){A=30;break}u=Wx(v|0)|0;w=xj(u+16|0,0)|0;c[s>>2]=w;y=w;c[y>>2]=0;if((E|0)>-1&(E|0)<(o|0)){I=c[(c[q>>2]|0)+(E<<2)>>2]|0}else{I=E}c[w+4>>2]=I;rn(w+12|0,v,u+1|0);u=r+1|0;v=yn(f)|0;if((a[v]|0)==0){p=u;break a}else{r=u;s=y;t=v}}if((A|0)==19){_i(60600,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;p=r;break}else if((A|0)==30){_i(60600,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;p=r;break}}}while(0);c[b+128>>2]=p;_i(59088,(n=i,i=i+16|0,c[n>>2]=p,c[n+8>>2]=h,n)|0);i=n;il(c[e>>2]|0);j=64;k=0;l=64;m=0;i=d;return}function so(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+80|0;e=d|0;f=d+64|0;g=e|0;c[g>>2]=a;a=f|0;h=f;c[h>>2]=b;c[h+4>>2]=0;c[e+4>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+8>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+12>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+16>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+20>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+24>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+28>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+32>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+36>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+40>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+44>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+48>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+52>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+56>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);c[e+60>>2]=(y=c[a+4>>2]|0,c[a+4>>2]=y+8,c[(c[a>>2]|0)+y>>2]|0);a=be[c[(c[414928]|0)+4>>2]&127](g)|0;i=d;return a|0}function to(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,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;f=i;i=i+72|0;g=f+64|0;h=f|0;j=b+8|0;xn(h,64,57272,(k=i,i=i+8|0,c[k>>2]=j,k)|0)|0;i=k;_i(55840,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;l=b+72|0;m=g;gl(h,c[l>>2]|0,e,m)|0;e=g|0;if((c[e>>2]|0)==0){_i(54848,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;break}else{aj(0,42280,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;return 0}}}while(0);g=c[b+84>>2]|0;if((g|0)!=0){je[g&127](b)}g=c[b+76>>2]|0;if((g|0)==0){n=b}else{jx(g);g=b;Zx(g|0,0,156)|0;n=g}Zx(n|0,0,156)|0;c[414928]=0;c[195392]=0;_i(53872,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;o=0;p=64;q=0;i=f;return o|0}sl(h,c[l>>2]|0)|0;l=c[e>>2]|0;n=c[l>>2]|0;g=l;a:do{if((n|0)==309466180){r=c[l+28>>2]|0;do{if((r|0)>=0){s=c[l+20>>2]|0;if((s|0)<0){break}t=c[l+24>>2]|0;if((t|0)<0){break}if((c[l+12>>2]|0)>=1){u=s;v=t;w=r;x=g;break a}}}while(0);if((b|0)==0){y=g}else{do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;break}else{aj(0,42280,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;return 0}}}while(0);r=c[b+84>>2]|0;if((r|0)!=0){je[r&127](b)}r=c[b+76>>2]|0;if((r|0)==0){z=b}else{jx(r);r=b;Zx(r|0,0,156)|0;z=r}Zx(z|0,0,156)|0;c[414928]=0;c[195392]=0;y=c[m>>2]|0}il(y);_i(51784,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;o=0;p=64;q=0;i=f;return o|0}else if((n|0)==309466181){_i(52752,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;r=c[e>>2]|0;t=r;do{if((c[r+32>>2]|0)>=0){s=c[r+28>>2]|0;if((s|0)<0){break}A=c[r+20>>2]|0;if((A|0)<0){break}B=c[r+24>>2]|0;if((B|0)<0){break}if((c[r+12>>2]|0)>=1){u=A;v=B;w=s;x=t;break a}}}while(0);if((b|0)==0){C=t}else{do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;break}else{aj(0,42280,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;return 0}}}while(0);t=c[b+84>>2]|0;if((t|0)!=0){je[t&127](b)}t=c[b+76>>2]|0;if((t|0)==0){D=b}else{jx(t);t=b;Zx(t|0,0,156)|0;D=t}Zx(D|0,0,156)|0;c[414928]=0;c[195392]=0;C=c[m>>2]|0}il(C);_i(51784,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;o=0;p=64;q=0;i=f;return o|0}else{do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;break}else{aj(0,42280,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;return 0}}}while(0);t=c[b+84>>2]|0;if((t|0)!=0){je[t&127](b)}t=c[b+76>>2]|0;if((t|0)==0){E=b}else{jx(t);t=b;Zx(t|0,0,156)|0;E=t}Zx(E|0,0,156)|0;c[414928]=0;c[195392]=0;il(c[m>>2]|0);_i(50792,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;o=0;p=64;q=0;i=f;return o|0}}while(0);E=v+u+w|0;w=0;while(1){F=1<<w;if((E|0)>(F|0)){w=w+1|0}else{break}}w=(d|0)!=0;do{if(w){d=xj(F,0)|0;c[b+116>>2]=d;c[b+120>>2]=F-1;G=d}else{if(((c[b+120>>2]|0)+1|0)==(F|0)){d=b+116|0;Zx(c[d>>2]|0,0,F|0)|0;G=c[d>>2]|0;break}if((b|0)==0){H=x}else{do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;break}else{aj(0,42280,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;return 0}}}while(0);d=c[b+84>>2]|0;if((d|0)!=0){je[d&127](b)}d=c[b+76>>2]|0;if((d|0)==0){I=b}else{jx(d);d=b;Zx(d|0,0,156)|0;I=d}Zx(I|0,0,156)|0;c[414928]=0;c[195392]=0;H=c[m>>2]|0}il(H);_i(50048,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;o=0;p=64;q=0;i=f;return o|0}}while(0);H=c[e>>2]|0;Vx(G|0,H+(c[H+16>>2]|0)|0,(c[H+24>>2]|0)+(c[H+20>>2]|0)|0)|0;H=c[e>>2]|0;G=c[H+20>>2]|0;I=0;while(1){if((I|0)<(G|0)){I=I+4|0}else{break}}if((c[H>>2]|0)!=309466181){o=H;p=64;q=0;i=f;return o|0}I=b+152|0;G=c[I>>2]|0;x=H+32|0;H=c[x>>2]|0;c[x>>2]=H&-4;x=H>>2;c[I>>2]=x;_i(49288,(k=i,i=i+8|0,c[k>>2]=x,k)|0);i=k;do{if(w){x=xj(c[(c[e>>2]|0)+32>>2]|0,0)|0;c[b+148>>2]=x;J=x}else{if((c[I>>2]|0)==(G|0)){x=b+148|0;Zx(c[x>>2]|0,0,c[(c[e>>2]|0)+32>>2]|0)|0;J=c[x>>2]|0;break}if((b|0)!=0){do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;break}else{aj(0,42280,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;return 0}}}while(0);x=c[b+84>>2]|0;if((x|0)!=0){je[x&127](b)}x=c[b+76>>2]|0;if((x|0)==0){K=b}else{jx(x);x=b;Zx(x|0,0,156)|0;K=x}Zx(K|0,0,156)|0;c[414928]=0;c[195392]=0}il(c[m>>2]|0);_i(48488,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;o=0;p=64;q=0;i=f;return o|0}}while(0);k=c[e>>2]|0;Vx(J|0,k+((c[k+20>>2]|0)+(c[k+16>>2]|0)+(c[k+24>>2]|0))|0,c[k+32>>2]|0)|0;k=c[e>>2]|0;e=c[k+32>>2]|0;J=0;while(1){if((J|0)<(e|0)){J=J+4|0}else{o=k;break}}p=64;q=0;i=f;return o|0}function uo(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;if((b|0)==0){i=d;return}do{if((c[b+136>>2]|0)!=0){e=b+8|0;if(a[3800]|0){_i(41744,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;break}else{aj(0,42280,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f}}}while(0);f=c[b+84>>2]|0;if((f|0)!=0){je[f&127](b)}f=c[b+76>>2]|0;if((f|0)==0){g=b}else{jx(f);f=b;Zx(f|0,0,156)|0;g=f}Zx(g|0,0,156)|0;c[414928]=0;c[195392]=0;i=d;return}function vo(b,d){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+64|0;f=e|0;g=b+76|0;if((c[g>>2]|0)==0){_i(47272,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=to(b,0,d)|0;if((j|0)==0){aj(1,46224,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;return 0}il(j);k=b;i=e;return k|0}j=f|0;f=c[b+4>>2]|0;d=b+8|0;rn(j,d,64);do{if((c[b+136>>2]|0)!=0){if(a[3800]|0){_i(41744,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;break}else{aj(0,42280,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;return 0}}}while(0);h=c[b+84>>2]|0;if((h|0)!=0){je[h&127](b)}h=c[g>>2]|0;if((h|0)==0){l=b}else{jx(h);h=b;Zx(h|0,0,156)|0;l=h}Zx(l|0,0,156)|0;c[414928]=0;c[195392]=0;k=wo(j,f,0)|0;i=e;return k|0}function wo(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,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=i;i=i+4104|0;g=f+4096|0;h=f|0;c[g>>2]=0;if((b|0)==0){aj(0,45640,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;return 0}if((a[b]|0)==0|(d|0)==0){aj(0,45640,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;return 0}k=uj()|0;l=0;while(1){m=l+1|0;if((tn(62e3+(l*156|0)|0,b)|0)==0){n=7;break}if((m|0)<3){l=m}else{o=0;break}}if((n|0)==7){p=61992+(l*156|0)|0;q=4096;r=0;i=f;return p|0}while(1){l=o+1|0;if((a[62e3+(o*156|0)|0]|0)==0){s=o;break}if((l|0)<3){o=l}else{s=l;break}}if((s|0)==3){aj(0,44760,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;return 0}o=61992+(s*156|0)|0;l=62e3+(s*156|0)|0;rn(l,b,64);m=(e|0)==0|0;t=62072+(s*156|0)|0;u=62068+(s*156|0)|0;v=62064+(s*156|0)|0;while(1){w=$k(g,h,4096,b,m)|0;if((w|0)==0){_i(44088,(j=i,i=i+8|0,c[j>>2]=h,j)|0);i=j;x=kx(h,t,14)|0;c[u>>2]=x;if((x|0)!=0){n=15;break}_i(43440,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}else if((w|0)==2){c[v>>2]=c[g>>2];y=to(o,1,0)|0;if((y|0)!=0){n=20;break}rn(l,b,64)}if(!((w|0)>-1)){p=0;n=24;break}}if((n|0)==15){c[61996+(s*156|0)>>2]=d;p=o;q=4096;r=0;i=f;return p|0}else if((n|0)==20){c[61996+(s*156|0)>>2]=d;d=c[y+4>>2]|0;c[62104+(s*156|0)>>2]=d;c[62100+(s*156|0)>>2]=xj(d<<2,0)|0;c[62096+(s*156|0)>>2]=c[y+12>>2];d=62084+(s*156|0)|0;c[d>>2]=0;if((e|0)==1){n=22}else{c[d>>2]=1;Ab(o|0,y|0);if((c[d>>2]|0)==0){n=22}}if((n|0)==22){Ho(o,y)}il(y);ro(o);y=c[62112+(s*156|0)>>2]|0;c[o>>2]=y+1;c[62116+(s*156|0)>>2]=y-65535;y=k-(uj()|0)|0;_i(42856,(j=i,i=i+16|0,c[j>>2]=b,c[j+8>>2]=y,j)|0);i=j;p=o;q=4096;r=0;i=f;return p|0}else if((n|0)==24){q=4096;r=0;i=f;return p|0}return 0}function xo(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;d=0;while(1){e=61992+(d*156|0)|0;if((e|0)!=0){if((c[62128+(d*156|0)>>2]|0)!=0){f=62e3+(d*156|0)|0;if(!(a[3800]|0)){g=5;break}_i(41744,(h=i,i=i+8|0,c[h>>2]=f,h)|0);i=h}j=c[62076+(d*156|0)>>2]|0;if((j|0)!=0){je[j&127](e)}j=c[62068+(d*156|0)>>2]|0;if((j|0)==0){k=e}else{jx(j);j=e;Zx(j|0,0,156)|0;k=j}Zx(k|0,0,156)|0;c[414928]=0;c[195392]=0}j=d+1|0;if((j|0)<3){d=j}else{g=14;break}}if((g|0)==5){aj(0,42280,(h=i,i=i+8|0,c[h>>2]=f,h)|0);i=h}else if((g|0)==14){i=b;return}}function yo(){a[3800]=1;return}function zo(){a[3800]=0;return}function Ao(a){a=a|0;var b=0,d=0,e=0;do{if((a|0)==0){b=0}else{d=c[414928]|0;if((d|0)==0){b=0;break}e=c[d+116>>2]|0;if((c[d+80>>2]|0)==0){b=e+(c[d+120>>2]&a)|0;break}else{b=e+a|0;break}}}while(0);return b|0}function Bo(a,b){a=a|0;b=b|0;var d=0,e=0;if((b|0)==0|(c[414928]|0)==0){d=0;return d|0}e=c[a+116>>2]|0;if((c[a+80>>2]|0)==0){d=e+(c[a+120>>2]&b)|0;return d|0}else{d=e+b|0;return d|0}return 0}function Co(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,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0;f=i;i=i+136|0;g=f|0;h=f+48|0;j=f+64|0;k=f+120|0;if((b|0)==0){aj(0,41336,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}if((a[b+8|0]|0)==0){aj(0,41336,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;return 0}m=c[414928]|0;c[414928]=b;c[195392]=b;if((c[15496]|0)!=0){_i(40544,(l=i,i=i+8|0,c[l>>2]=d,l)|0);i=l}l=b+136|0;c[l>>2]=(c[l>>2]|0)+1;n=b+80|0;do{if((c[n>>2]|0)==0){o=j|0;c[o>>2]=d;p=k|0;q=k;c[q>>2]=e;c[q+4>>2]=0;c[j+4>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+8>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+12>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+16>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+20>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+24>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+28>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+32>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+36>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+40>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+44>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);c[j+48>>2]=(y=c[p+4>>2]|0,c[p+4>>2]=y+8,c[(c[p>>2]|0)+y>>2]|0);if((c[b+92>>2]|0)==0){r=Io(b,o)|0;break}else{r=Rc(b|0,o|0)|0;break}}else{o=h|0;p=h;c[p>>2]=e;c[p+4>>2]=0;p=g|0;c[p>>2]=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);q=g+4|0;c[q>>2]=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);s=g+8|0;c[s>>2]=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);t=g+12|0;c[t>>2]=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);u=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+16>>2]=u;v=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+20>>2]=v;w=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+24>>2]=w;x=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+28>>2]=x;z=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+32>>2]=z;A=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+36>>2]=A;B=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+40>>2]=B;C=(y=c[o+4>>2]|0,c[o+4>>2]=y+8,c[(c[o>>2]|0)+y>>2]|0);c[g+44>>2]=C;r=ee[c[n>>2]&3](d,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0,u,v,w,x,z,A,B,C)|0}}while(0);c[l>>2]=(c[l>>2]|0)-1;if((m|0)==0){i=f;return r|0}c[414928]=m;i=f;return r|0}function Do(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[a>>2]|0)+8>>2]|0;a=c[(c[b>>2]|0)+8>>2]|0;if((d|0)<(a|0)){e=-1;return e|0}e=(d|0)>(a|0)|0;return e|0}function Eo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;f=c[414928]|0;g=c[f+120>>2]|0;do{if((g&a|0)==(a|0)){if((g&b|0)!=(b|0)){break}h=d+a|0;if((g&h|0)!=(h|0)){break}h=d+b|0;if((g&h|0)!=(h|0)){break}h=c[f+116>>2]|0;Vx(h+a|0,h+b|0,d)|0;i=e;return}}while(0);aj(1,33592,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}function Fo(){return c[414928]|0}function Go(a){a=a|0;c[414928]=a;return}function Ho(a,b){a=a|0;b=b|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;e=i;f=xj(c[a+104>>2]<<2,0)|0;c[a+96>>2]=f;g=b;h=c[b+8>>2]|0;j=f;f=b+4|0;if((c[f>>2]|0)<=0){i=e;return}k=b+12|0;b=c[a+108>>2]|0;l=0;m=0;n=0;while(1){c[b+(n<<2)>>2]=l;o=n+1|0;p=d[g+(m+h)|0]|0;c[j+(l<<2)>>2]=p;if((m|0)>(c[k>>2]|0)){q=6;break}r=m+1|0;s=l+1|0;switch(p|0){case 3:case 8:case 9:case 4:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:case 34:{p=g+(r+h)|0;c[j+(s<<2)>>2]=d[p]|d[p+1|0]<<8|d[p+2|0]<<16|d[p+3|0]<<24;t=m+5|0;u=l+2|0;break};case 33:{c[j+(s<<2)>>2]=d[g+(r+h)|0]|0;t=m+2|0;u=l+2|0;break};default:{t=r;u=s}}v=c[f>>2]|0;if((o|0)<(v|0)){l=u;m=t;n=o}else{break}}if((q|0)==6){aj(1,47824,(w=i,i=i+1|0,i=i+7&-8,c[w>>2]=0,w)|0);i=w}if((v|0)<=0){i=e;return}n=a+112|0;t=a+108|0;a=0;m=0;u=v;a:while(1){v=m+1|0;l=a+1|0;switch(c[j+(a<<2)>>2]|0){case 3:case 8:case 9:case 4:case 34:case 33:{x=a+2|0;y=u;break};case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 23:case 24:case 25:case 26:{h=j+(l<<2)|0;g=c[h>>2]|0;if((g|0)<0){q=15;break a}if((g|0)>(c[n>>2]|0)){q=15;break a}c[h>>2]=c[(c[t>>2]|0)+(g<<2)>>2];x=a+2|0;y=c[f>>2]|0;break};default:{x=l;y=u}}if((v|0)<(y|0)){a=x;m=v;u=y}else{q=18;break}}if((q|0)==15){aj(1,41048,(w=i,i=i+1|0,i=i+7&-8,c[w>>2]=0,w)|0);i=w}else if((q|0)==18){i=e;return}}function Io(f,h){f=f|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,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;j=i;i=i+1040|0;k=f+88|0;c[k>>2]=1;l=f|0;m=c[l>>2]|0;n=c[f+116>>2]|0;o=c[f+96>>2]|0;p=c[f+120>>2]|0;c[n+(m-52)>>2]=c[h>>2];c[n+(m-48)>>2]=c[h+4>>2];c[n+(m-44)>>2]=c[h+8>>2];c[n+(m-40)>>2]=c[h+12>>2];c[n+(m-36)>>2]=c[h+16>>2];c[n+(m-32)>>2]=c[h+20>>2];c[n+(m-28)>>2]=c[h+24>>2];c[n+(m-24)>>2]=c[h+28>>2];c[n+(m-20)>>2]=c[h+32>>2];c[n+(m-16)>>2]=c[h+36>>2];c[n+(m-12)>>2]=c[h+40>>2];c[n+(m-8)>>2]=c[h+44>>2];c[n+(m-4)>>2]=c[h+48>>2];h=o;o=m-60|0;c[n+(m-56)>>2]=0;c[n+o>>2]=-1;no(0);q=j+15&-16;r=q;c[r>>2]=-559038737;s=f+144|0;t=p&-4;u=p&-2;v=f+4|0;w=f+112|0;x=f+108|0;y=f+104|0;f=q;q=0;z=0;A=o;o=-559038737;a:while(1){B=q;C=z;D=c[r+((q-1&255)<<2)>>2]|0;E=o;b:while(1){F=B&255;G=r+(F<<2)|0;H=C;I=E;c:while(1){J=H;d:while(1){K=J+1|0;switch(c[h+(J<<2)>>2]|0){case 16:{L=48;break b;break};case 24:{L=72;break b;break};case 25:{L=75;break b;break};case 43:{L=87;break b;break};case 44:{L=88;break b;break};case 45:{L=89;break b;break};case 2:{break};case 10:{L=30;break b;break};case 4:{L=27;break b;break};case 28:{L=11;break d;break};case 11:{L=33;break b;break};case 33:{L=17;break b;break};case 37:{L=81;break b;break};case 38:{L=82;break b;break};case 39:{L=83;break b;break};case 32:{L=13;break b;break};case 29:{L=10;break d;break};case 34:{L=18;break b;break};case 8:{L=7;break c;break};case 18:{L=54;break b;break};case 19:{L=57;break b;break};case 48:{L=92;break b;break};case 49:{L=93;break b;break};case 50:{L=94;break b;break};case 51:{L=95;break b;break};case 52:{L=96;break b;break};case 6:{L=24;break b;break};case 7:{L=25;break b;break};case 3:{L=26;break b;break};case 5:{L=19;break b;break};case 20:{L=60;break b;break};case 31:{L=15;break b;break};case 23:{L=69;break b;break};case 21:{L=63;break b;break};case 17:{L=51;break b;break};case 9:{L=8;break c;break};case 40:{L=84;break b;break};case 41:{L=85;break b;break};case 42:{L=86;break b;break};case 46:{L=90;break b;break};case 47:{L=91;break b;break};case 26:{L=78;break b;break};case 14:{L=42;break b;break};case 15:{L=45;break b;break};case 53:{L=97;break b;break};case 54:{L=98;break b;break};case 55:{L=99;break b;break};case 13:{L=39;break b;break};case 27:{L=12;break d;break};case 56:{L=100;break b;break};case 57:{L=101;break b;break};case 58:{L=102;break b;break};case 59:{L=103;break b;break};case 35:{L=104;break b;break};case 30:{L=16;break b;break};case 12:{L=36;break b;break};case 22:{L=66;break b;break};case 36:{L=105;break b;break};default:{M=B;N=K;O=A;break b}}c[s>>2]=(c[s>>2]|0)+1;J=K}if((L|0)==10){L=0;P=c[n+(t&I)>>2]|0;c[G>>2]=P;H=K;I=P;continue}else if((L|0)==11){L=0;P=e[n+(u&I)>>1]|0;c[G>>2]=P;H=K;I=P;continue}else if((L|0)==12){L=0;P=d[n+(I&p)|0]|0;c[G>>2]=P;H=K;I=P;continue}}if((L|0)==7){L=0;H=B+1&255;P=c[h+(K<<2)>>2]|0;c[r+((H&255)<<2)>>2]=P;Q=H;R=P}else if((L|0)==8){L=0;P=B+1&255;H=(c[h+(K<<2)>>2]|0)+A|0;c[r+((P&255)<<2)>>2]=H;Q=P;R=H}B=Q;C=J+2|0;D=I;E=R}do{if((L|0)==13){L=0;c[n+(t&D)>>2]=I;M=B-2&255;N=K;O=A}else if((L|0)==15){L=0;b[n+(u&D)>>1]=I;M=B-2&255;N=K;O=A}else if((L|0)==16){L=0;a[n+(D&p)|0]=I;M=B-2&255;N=K;O=A}else if((L|0)==17){L=0;c[n+(t&(c[h+(K<<2)>>2]|0)+A)>>2]=I;M=B-1&255;N=J+2|0;O=A}else if((L|0)==18){L=0;Eo(D,I,c[h+(K<<2)>>2]|0);M=B-2&255;N=J+2|0;O=A}else if((L|0)==19){L=0;E=n+A|0;c[E>>2]=K;if((I|0)<0){c[l>>2]=A-4;C=n+(A+4)|0;c[C>>2]=~I;c[G>>2]=be[c[v>>2]&127](C)|0;M=B;N=c[E>>2]|0;O=A;break}if(!(I>>>0<(c[w>>2]|0)>>>0)){L=22;break a}M=B-1&255;N=c[(c[x>>2]|0)+(I<<2)>>2]|0;O=A}else if((L|0)==24){L=0;M=B+1&255;N=K;O=A}else if((L|0)==25){L=0;M=B-1&255;N=K;O=A}else if((L|0)==26){L=0;M=B;N=J+2|0;O=A-(c[h+(K<<2)>>2]|0)|0}else if((L|0)==27){L=0;E=(c[h+(K<<2)>>2]|0)+A|0;C=c[n+E>>2]|0;if((C|0)==-1){L=106;break a}if(C>>>0<(c[y>>2]|0)>>>0){M=B;N=C;O=E}else{L=29;break a}}else if((L|0)==30){L=0;if(!(I>>>0<(c[w>>2]|0)>>>0)){L=31;break a}M=B-1&255;N=c[(c[x>>2]|0)+(I<<2)>>2]|0;O=A}else if((L|0)==33){L=0;E=B-2&255;if((D|0)==(I|0)){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==36){L=0;E=B-2&255;if((D|0)==(I|0)){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==39){L=0;E=B-2&255;if((D|0)<(I|0)){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==42){L=0;E=B-2&255;if((D|0)>(I|0)){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==45){L=0;E=B-2&255;if((D|0)>(I|0)){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==48){L=0;E=B-2&255;if((D|0)<(I|0)){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==51){L=0;E=B-2&255;if(D>>>0<I>>>0){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==54){L=0;E=B-2&255;if(D>>>0>I>>>0){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==57){L=0;E=B-2&255;if(D>>>0>I>>>0){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==60){L=0;E=B-2&255;if(D>>>0<I>>>0){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==63){L=0;E=B-2&255;if(+g[f+((B-1&255)<<2)>>2]==+g[f+(F<<2)>>2]){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==66){L=0;E=B-2&255;if(+g[f+((B-1&255)<<2)>>2]!=+g[f+(F<<2)>>2]){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==69){L=0;E=B-2&255;if(+g[f+((B-1&255)<<2)>>2]<+g[f+(F<<2)>>2]){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==72){L=0;E=B-2&255;if(+g[f+((B-1&255)<<2)>>2]>+g[f+(F<<2)>>2]){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==75){L=0;E=B-2&255;if(+g[f+((B-1&255)<<2)>>2]>+g[f+(F<<2)>>2]){M=E;N=c[h+(K<<2)>>2]|0;O=A;break}else{M=E;N=J+2|0;O=A;break}}else if((L|0)==78){L=0;E=B-2&255;if(+g[f+((B-1&255)<<2)>>2]<+g[f+(F<<2)>>2]){M=E;N=J+2|0;O=A;break}else{M=E;N=c[h+(K<<2)>>2]|0;O=A;break}}else if((L|0)==81){L=0;c[G>>2]=-I;M=B;N=K;O=A}else if((L|0)==82){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D+I;M=E;N=K;O=A}else if((L|0)==83){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D-I;M=E;N=K;O=A}else if((L|0)==84){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=(D|0)/(I|0)|0;M=E;N=K;O=A}else if((L|0)==85){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=(D>>>0)/(I>>>0)|0;M=E;N=K;O=A}else if((L|0)==86){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=(D|0)%(I|0)|0;M=E;N=K;O=A}else if((L|0)==87){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=(D>>>0)%(I>>>0)|0;M=E;N=K;O=A}else if((L|0)==88){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=da(D,I)|0;M=E;N=K;O=A}else if((L|0)==89){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=da(D,I)|0;M=E;N=K;O=A}else if((L|0)==90){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D&I;M=E;N=K;O=A}else if((L|0)==91){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D|I;M=E;N=K;O=A}else if((L|0)==92){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D^I;M=E;N=K;O=A}else if((L|0)==93){L=0;c[G>>2]=~I;M=B;N=K;O=A}else if((L|0)==94){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D<<I;M=E;N=K;O=A}else if((L|0)==95){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D>>I;M=E;N=K;O=A}else if((L|0)==96){L=0;E=B-1&255;c[r+((E&255)<<2)>>2]=D>>>(I>>>0);M=E;N=K;O=A}else if((L|0)==97){L=0;E=f+(F<<2)|0;g[E>>2]=-0.0- +g[E>>2];M=B;N=K;O=A}else if((L|0)==98){L=0;E=B-1&255;C=f+((E&255)<<2)|0;g[C>>2]=+g[C>>2]+ +g[f+(F<<2)>>2];M=E;N=K;O=A}else if((L|0)==99){L=0;E=B-1&255;C=f+((E&255)<<2)|0;g[C>>2]=+g[C>>2]- +g[f+(F<<2)>>2];M=E;N=K;O=A}else if((L|0)==100){L=0;E=B-1&255;C=f+((E&255)<<2)|0;g[C>>2]=+g[C>>2]/+g[f+(F<<2)>>2];M=E;N=K;O=A}else if((L|0)==101){L=0;E=B-1&255;C=f+((E&255)<<2)|0;g[C>>2]=+g[C>>2]*+g[f+(F<<2)>>2];M=E;N=K;O=A}else if((L|0)==102){L=0;g[f+(F<<2)>>2]=+(c[G>>2]|0);M=B;N=K;O=A}else if((L|0)==103){L=0;c[G>>2]=db(+(+g[f+(F<<2)>>2]))|0;M=B;N=K;O=A}else if((L|0)==104){L=0;c[G>>2]=c[G>>2]<<24>>24;M=B;N=K;O=A}else if((L|0)==105){L=0;c[G>>2]=c[G>>2]<<16>>16;M=B;N=K;O=A}}while(0);q=M;z=N;A=O;o=c[r+((M&255)<<2)>>2]|0}if((L|0)==22){aj(1,36256,(S=i,i=i+1|0,i=i+7&-8,c[S>>2]=0,S)|0);i=S;return 0}else if((L|0)==29){aj(1,30960,(S=i,i=i+1|0,i=i+7&-8,c[S>>2]=0,S)|0);i=S;return 0}else if((L|0)==31){aj(1,26592,(S=i,i=i+1|0,i=i+7&-8,c[S>>2]=0,S)|0);i=S;return 0}else if((L|0)==106){c[k>>2]=0;k=c[r>>2]|0;if(B<<24>>24==1&(k|0)==-559038737){c[l>>2]=m;i=j;return c[G>>2]|0}else{aj(1,23112,(S=i,i=i+16|0,c[S>>2]=k,c[S+8>>2]=F,S)|0);i=S;return 0}}return 0}function Jo(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;i=i+88|0;k=j|0;oe[c[636261]&7](k,b,d,e,f,g,h);Vx(a|0,k|0,84)|0;i=j;return}function Ko(a){a=a|0;return be[c[636263]&127](a)|0}function Lo(a,b,d,e,f,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0;k=i;i=i+88|0;l=k|0;oe[c[636262]&7](l,b,d,e,f,a,h);if(!(+g[l+8>>2]<+g[j+8>>2])){m=0;n=84;o=0;i=k;return m|0}Vx(j|0,l|0,84)|0;m=1;n=84;o=0;i=k;return m|0}function Mo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;Xd[c[636266]&7](a,b,d,e,f);return}function No(a){a=a|0;return}function Oo(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Po(a){a=a|0;var b=0;b=a+1|0;return((a|0)>-1&(b|0)<(c[634045]|0)?b:0)|0}function Qo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;g=i;a[e]=0;if(!((b|0)>0&(c[634045]|0)>(b|0))){ue[c[636260]&31](1,52104,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=0;i=g;return j|0}h=c[2536184+(b<<2)>>2]|0;if((h|0)==0){j=0;i=g;return j|0}else{k=h}while(1){if((Tx(c[k>>2]|0,d)|0)==0){break}h=c[k+8>>2]|0;if((h|0)==0){j=0;l=7;break}else{k=h}}if((l|0)==7){i=g;return j|0}l=f-1|0;ay(e|0,c[k+4>>2]|0,l|0)|0;a[e+l|0]=0;j=1;i=g;return j|0}function Ro(b,d,e){b=b|0;d=d|0;e=e|0;var f=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+152|0;j=f|0;k=f+128|0;l=f+136|0;m=f+144|0;n=j|0;o=e+8|0;g[o>>2]=0.0;p=e+4|0;g[p>>2]=0.0;g[e>>2]=0.0;a[n]=0;if(!((b|0)>0&(c[634045]|0)>(b|0))){ue[c[636260]&31](1,52104,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;r=0;s=128;t=0;i=f;return r|0}u=c[2536184+(b<<2)>>2]|0;if((u|0)==0){r=0;s=128;t=0;i=f;return r|0}else{v=u}while(1){if((Tx(c[v>>2]|0,d)|0)==0){break}u=c[v+8>>2]|0;if((u|0)==0){r=0;w=7;break}else{v=u}}if((w|0)==7){s=128;t=0;i=f;return r|0}ay(n|0,c[v+4>>2]|0,127)|0;a[j+127|0]=0;h[m>>3]=0.0;h[l>>3]=0.0;h[k>>3]=0.0;vb(n|0,58208,(q=i,i=i+24|0,c[q>>2]=k,c[q+8>>2]=l,c[q+16>>2]=m,q)|0)|0;i=q;g[e>>2]=+h[k>>3];g[p>>2]=+h[l>>3];g[o>>2]=+h[m>>3];r=1;s=128;t=0;i=f;return r|0}function So(b,d,e){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;f=i;i=i+128|0;h=f|0;j=h|0;g[e>>2]=0.0;a[j]=0;if(!((b|0)>0&(c[634045]|0)>(b|0))){ue[c[636260]&31](1,52104,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=0;m=128;n=0;i=f;return l|0}k=c[2536184+(b<<2)>>2]|0;if((k|0)==0){l=0;m=128;n=0;i=f;return l|0}else{o=k}while(1){if((Tx(c[o>>2]|0,d)|0)==0){break}k=c[o+8>>2]|0;if((k|0)==0){l=0;p=7;break}else{o=k}}if((p|0)==7){m=128;n=0;i=f;return l|0}ay(j|0,c[o+4>>2]|0,127)|0;a[h+127|0]=0;g[e>>2]=+Qx(j);l=1;m=128;n=0;i=f;return l|0}function To(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;f=i;i=i+128|0;g=f|0;h=g|0;c[e>>2]=0;a[h]=0;if(!((b|0)>0&(c[634045]|0)>(b|0))){ue[c[636260]&31](1,52104,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=0;l=128;m=0;i=f;return k|0}j=c[2536184+(b<<2)>>2]|0;if((j|0)==0){k=0;l=128;m=0;i=f;return k|0}else{n=j}while(1){if((Tx(c[n>>2]|0,d)|0)==0){break}j=c[n+8>>2]|0;if((j|0)==0){k=0;o=7;break}else{n=j}}if((o|0)==7){l=128;m=0;i=f;return k|0}ay(h|0,c[n+4>>2]|0,127)|0;a[g+127|0]=0;c[e>>2]=Vc(h|0)|0;k=1;l=128;m=0;i=f;return k|0}function Uo(){var a=0,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;a=i;i=i+1064|0;b=a|0;d=b|0;e=xw(c[634044]|0,c[634043]|0,47816)|0;uw(e,12);c[634045]=1;f=b+1024|0;a:while(1){if((qw(e,b)|0)==0){break}if((Tx(d,41040)|0)!=0){g=4;break}h=c[634045]|0;if((h|0)>2047){g=15;break}c[634045]=h+1;j=2536184+(h<<2)|0;c[j>>2]=0;b:do{if((qw(e,b)|0)!=0){do{if((Tx(d,26584)|0)==0){break b}h=mv(12)|0;c[h+8>>2]=c[j>>2];c[j>>2]=h;if((c[f>>2]|0)!=1){g=19;break a}sw(d);k=lv((Wx(d|0)|0)+1|0)|0;c[h>>2]=k;by(k|0,d|0)|0;if((rw(e,1,0,b)|0)==0){g=30;break a}sw(d);k=lv((Wx(d|0)|0)+1|0)|0;c[h+4>>2]=k;by(k|0,d|0)|0;}while((qw(e,b)|0)!=0)}}while(0);if((Tx(d,26584)|0)!=0){g=42;break}}if((g|0)==4){kw(e,36240,(l=i,i=i+8|0,c[l>>2]=d,l)|0);i=l;b=c[634045]|0;if((b|0)>1){f=1;j=b;while(1){b=c[2536184+(f<<2)>>2]|0;if((b|0)==0){m=j}else{k=b;while(1){b=c[k+8>>2]|0;h=c[k>>2]|0;if((h|0)!=0){nv(h)}h=c[k+4>>2]|0;if((h|0)!=0){nv(h)}nv(k);if((b|0)==0){break}else{k=b}}m=c[634045]|0}k=f+1|0;if((k|0)<(m|0)){f=k;j=m}else{break}}}c[634045]=0;yw(e);n=1060;o=0;i=a;return}else if((g|0)==15){ue[c[636260]&31](1,30928,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l}else if((g|0)==19){kw(e,36240,(l=i,i=i+8|0,c[l>>2]=d,l)|0);i=l;d=c[634045]|0;if((d|0)>1){m=1;j=d;while(1){d=c[2536184+(m<<2)>>2]|0;if((d|0)==0){p=j}else{f=d;while(1){d=c[f+8>>2]|0;k=c[f>>2]|0;if((k|0)!=0){nv(k)}k=c[f+4>>2]|0;if((k|0)!=0){nv(k)}nv(f);if((d|0)==0){break}else{f=d}}p=c[634045]|0}f=m+1|0;if((f|0)<(p|0)){m=f;j=p}else{break}}}c[634045]=0;yw(e);n=1060;o=0;i=a;return}else if((g|0)==30){p=c[634045]|0;if((p|0)>1){j=1;m=p;while(1){p=c[2536184+(j<<2)>>2]|0;if((p|0)==0){q=m}else{f=p;while(1){p=c[f+8>>2]|0;d=c[f>>2]|0;if((d|0)!=0){nv(d)}d=c[f+4>>2]|0;if((d|0)!=0){nv(d)}nv(f);if((p|0)==0){break}else{f=p}}q=c[634045]|0}f=j+1|0;if((f|0)<(q|0)){j=f;m=q}else{break}}}c[634045]=0;yw(e);n=1060;o=0;i=a;return}else if((g|0)==42){kw(e,23096,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;l=c[634045]|0;if((l|0)>1){g=1;q=l;while(1){l=c[2536184+(g<<2)>>2]|0;if((l|0)==0){r=q}else{m=l;while(1){l=c[m+8>>2]|0;j=c[m>>2]|0;if((j|0)!=0){nv(j)}j=c[m+4>>2]|0;if((j|0)!=0){nv(j)}nv(m);if((l|0)==0){break}else{m=l}}r=c[634045]|0}m=g+1|0;if((m|0)<(r|0)){g=m;q=r}else{break}}}c[634045]=0;yw(e);n=1060;o=0;i=a;return}yw(e);n=1060;o=0;i=a;return}function Vo(){var a=0,b=0,d=0,e=0,f=0,g=0;a=c[634045]|0;if((a|0)>1){b=1;d=a;while(1){a=c[2536184+(b<<2)>>2]|0;if((a|0)==0){e=d}else{f=a;while(1){a=c[f+8>>2]|0;g=c[f>>2]|0;if((g|0)!=0){nv(g)}g=c[f+4>>2]|0;if((g|0)!=0){nv(g)}nv(f);if((a|0)==0){break}else{f=a}}e=c[634045]|0}f=b+1|0;if((f|0)<(e|0)){b=f;d=e}else{break}}}c[634045]=0;e=c[634044]|0;if((e|0)==0){Zx(2536168,0,8208)|0;return}nv(e);Zx(2536168,0,8208)|0;return}function Wo(){var a=0,b=0;Vo();a=(Wx(se[c[636265]&31]()|0)|0)+1|0;c[634043]=a;b=mv(a)|0;c[634044]=b;a=se[c[636265]&31]()|0;Vx(b|0,a|0,c[634043]|0)|0;Uo();c[634042]=1;return 0}function Xo(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;d=i;e=c[637764]|0;a:do{if((e|0)>1){f=c[637765]|0;g=1;while(1){h=g+1|0;if((c[f+(g*20|0)>>2]|0)==(a|0)){j=g;break a}if((h|0)<(e|0)){g=h}else{j=h;break}}}else{j=1}}while(0);if((j|0)==(e|0)){tp(52e3,(k=i,i=i+8|0,c[k>>2]=a,k)|0);i=k;l=1;i=d;return l|0}e=c[637765]|0;g=e+(j*20|0)+4|0;f=c[g>>2]|0;if((f|0)==(b|0)){l=1;i=d;return l|0}h=e+(j*20|0)+8|0;e=c[h>>2]|0;if((e|0)==(b|0)){l=1;i=d;return l|0}do{if((f|0)==0){c[g>>2]=b}else{if((e|0)==0){c[h>>2]=b;break}m=(c[637759]|0)+(a*28|0)|0;c[m>>2]=c[m>>2]&-9;iv(58152,(k=i,i=i+8|0,c[k>>2]=a,k)|0);i=k;l=0;i=d;return l|0}}while(0);if((c[637766]|0)>65535){tp(47744,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;l=1;i=d;return l|0}else{c[(c[637759]|0)+(a*28|0)+12>>2]=-j;a=c[637769]|0;k=a+(b<<4)+8|0;c[(c[637767]|0)+((c[k>>2]|0)+(c[a+(b<<4)+12>>2]|0)<<2)>>2]=j;c[637766]=(c[637766]|0)+1;c[k>>2]=(c[k>>2]|0)+1;l=1;i=d;return l|0}return 0}function Yo(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;d=i;if(!((a|0)>0&(c[637756]|0)>(a|0))){tp(40992,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=0;i=d;return f|0}g=c[637759]|0;h=g+(a*28|0)+12|0;j=c[h>>2]|0;if((j|0)>0){if((j|0)==(b|0)){f=1;i=d;return f|0}tp(36192,(e=i,i=i+24|0,c[e>>2]=b,c[e+8>>2]=j,c[e+16>>2]=a,e)|0);i=e;f=0;i=d;return f|0}if((c[g+(a*28|0)>>2]&8|0)!=0){f=Xo(a,b)|0;i=d;return f|0}c[h>>2]=b;h=(c[637769]|0)+(b<<4)|0;c[g+(a*28|0)+16>>2]=c[h>>2];c[h>>2]=(c[h>>2]|0)+1;h=c[637757]|0;do{if((c[506]|0)==0){e=h+(a*48|0)+4|0;if((c[e>>2]|0)<=0){k=g;break}j=h+(a*48|0)+8|0;l=0;a:while(1){m=c[(c[637755]|0)+((c[j>>2]|0)+l<<2)>>2]|0;n=(m|0)>-1?m:-m|0;m=c[637753]|0;o=c[m+(n*24|0)+16>>2]|0;do{if((o|0)==(a|0)){p=c[m+(n*24|0)+20>>2]|0;if((p|0)==0){break}if((Yo(p,b)|0)==0){f=0;q=23;break a}}else{if((o|0)==0){break}if((Yo(o,b)|0)==0){f=0;q=23;break a}}}while(0);o=l+1|0;if((o|0)<(c[e>>2]|0)){l=o}else{q=11;break}}if((q|0)==11){k=c[637759]|0;break}else if((q|0)==23){i=d;return f|0}}else{k=g}}while(0);if((c[k+(a*28|0)+20>>2]|0)>0){r=0;s=k}else{f=1;i=d;return f|0}while(1){k=c[(c[637761]|0)+(((c[s+(a*28|0)+24>>2]|0)+r|0)*44|0)>>2]|0;if((k|0)==0){t=s}else{if((Yo(k,b)|0)==0){f=0;q=23;break}t=c[637759]|0}k=r+1|0;if((k|0)<(c[t+(a*28|0)+20>>2]|0)){r=k;s=t}else{f=1;q=23;break}}if((q|0)==23){i=d;return f|0}return 0}function Zo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=c[637769]|0;c[b+(a<<4)>>2]=0;c[b+(a<<4)+4>>2]=0;d=c[637756]|0;if((d|0)>1){e=1;do{do{if((c[(c[637759]|0)+(e*28|0)+12>>2]|0)==(a|0)){if((Yp(e)|0)==0){break}f=c[637769]|0;g=f+(a<<4)|0;c[(c[637759]|0)+(e*28|0)+16>>2]=c[g>>2];c[g>>2]=(c[g>>2]|0)+1;g=f+(a<<4)+4|0;c[g>>2]=(c[g>>2]|0)+1}}while(0);e=e+1|0;h=c[637756]|0;}while((e|0)<(h|0));i=c[637769]|0;j=h}else{i=b;j=d}d=i+(a<<4)+8|0;if((c[d>>2]|0)>0){b=i+(a<<4)+12|0;h=i+(a<<4)|0;i=0;do{e=c[(c[637767]|0)+((c[b>>2]|0)+i<<2)>>2]|0;g=c[637765]|0;do{if((Yp(c[g+(e*20|0)>>2]|0)|0)!=0){f=(c[g+(e*20|0)+4>>2]|0)==(a|0);k=c[h>>2]|0;c[h>>2]=k+1;if(f){c[g+(e*20|0)+12>>2]=k;f=(c[637769]|0)+(a<<4)+4|0;c[f>>2]=(c[f>>2]|0)+1;break}else{c[g+(e*20|0)+16>>2]=k;k=(c[637769]|0)+(a<<4)+4|0;c[k>>2]=(c[k>>2]|0)+1;break}}}while(0);i=i+1|0;}while((i|0)<(c[d>>2]|0));l=c[637756]|0}else{l=j}if((l|0)>1){l=1;do{do{if((c[(c[637759]|0)+(l*28|0)+12>>2]|0)==(a|0)){if((Yp(l)|0)!=0){break}j=(c[637769]|0)+(a<<4)|0;c[(c[637759]|0)+(l*28|0)+16>>2]=c[j>>2];c[j>>2]=(c[j>>2]|0)+1}}while(0);l=l+1|0;}while((l|0)<(c[637756]|0))}l=c[637769]|0;j=l+(a<<4)+8|0;if((c[j>>2]|0)<=0){return}d=l+(a<<4)+12|0;i=l+(a<<4)|0;l=0;do{h=c[(c[637767]|0)+((c[d>>2]|0)+l<<2)>>2]|0;b=c[637765]|0;do{if((Yp(c[b+(h*20|0)>>2]|0)|0)==0){e=(c[b+(h*20|0)+4>>2]|0)==(a|0);g=c[i>>2]|0;c[i>>2]=g+1;if(e){c[b+(h*20|0)+12>>2]=g;break}else{c[b+(h*20|0)+16>>2]=g;break}}}while(0);l=l+1|0;}while((l|0)<(c[j>>2]|0));return}function _o(){var a=0,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;a=i;if((c[637756]|0)<=1){b=1;i=a;return b|0}d=c[637759]|0;e=1;do{c[d+(e*28|0)+12>>2]=0;e=e+1|0;f=c[637756]|0;}while((e|0)<(f|0));if((f|0)>1){g=1;h=f}else{b=1;i=a;return b|0}a:while(1){f=c[637759]|0;do{if((c[f+(g*28|0)+12>>2]|0)==0){if((c[506]|0)!=0){if((c[f+(g*28|0)+20>>2]|0)==0){j=h;break}}if((c[f+(g*28|0)>>2]&8|0)!=0){j=h;break}e=c[637768]|0;if((e|0)>65535){k=10;break a}d=c[637769]|0;c[d+(e<<4)>>2]=0;c[d+(e<<4)+4>>2]=0;c[d+(e<<4)+12>>2]=c[637766];c[d+(e<<4)+8>>2]=0;if((Yo(g,c[637768]|0)|0)==0){b=0;k=26;break a}e=c[637768]|0;d=c[637756]|0;if((d|0)>1){l=1;m=d;while(1){d=c[637759]|0;b:do{if((c[d+(l*28|0)+12>>2]|0)==0){if((c[d+(l*28|0)>>2]&8|0)!=0){n=l;o=m;break}p=c[d+(l*28|0)+20>>2]|0;if((p|0)<=0){n=l;o=m;break}q=c[637761]|0;r=c[d+(l*28|0)+24>>2]|0;s=0;while(1){t=c[q+((s+r|0)*44|0)>>2]|0;if((c[d+(t*28|0)>>2]&8|0)==0){if((c[d+(t*28|0)+12>>2]|0)!=0){break}}t=s+1|0;if((t|0)<(p|0)){s=t}else{n=l;o=m;break b}}if((Yo(l,e)|0)==0){b=0;k=26;break a}n=0;o=c[637756]|0}else{n=l;o=m}}while(0);d=n+1|0;if((d|0)<(o|0)){l=d;m=o}else{break}}u=c[637768]|0}else{u=e}Zo(u);c[637768]=(c[637768]|0)+1;j=c[637756]|0}else{j=h}}while(0);f=g+1|0;if((f|0)<(j|0)){g=f;h=j}else{b=1;k=26;break}}if((k|0)==10){tp(30904,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;b=0;i=a;return b|0}else if((k|0)==26){i=a;return b|0}return 0}function $o(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;c[d+(e<<2)>>2]=1;f=a+(e<<2)|0;e=c[f>>2]|0;g=c[637757]|0;h=g+(e*48|0)+4|0;i=c[h>>2]|0;if((i|0)<=0){return}j=g+(e*48|0)+8|0;if((b|0)>0){k=0;l=i}else{e=0;g=i;while(1){i=c[(c[637755]|0)+((c[j>>2]|0)+e<<2)>>2]|0;do{if((c[(c[637753]|0)+(((i|0)>-1?i:-i|0)*24|0)+4>>2]&1|0)!=0|(b|0)==0){m=g}else{if((c[d>>2]|0)!=0){m=g;break}$o(a,b,d,0);m=c[h>>2]|0}}while(0);i=e+1|0;if((i|0)<(m|0)){e=i;g=m}else{break}}return}while(1){m=c[(c[637755]|0)+((c[j>>2]|0)+k<<2)>>2]|0;g=(m|0)>-1?m:-m|0;m=c[637753]|0;do{if((c[m+(g*24|0)+4>>2]&1|0)==0){e=c[m+(g*24|0)+16>>2]|0;if((e|0)==(c[f>>2]|0)){n=c[m+(g*24|0)+20>>2]|0}else{n=e}e=0;while(1){i=e+1|0;if((c[a+(e<<2)>>2]|0)==(n|0)){o=e;break}if((i|0)<(b|0)){e=i}else{o=i;break}}if((o|0)==(b|0)){p=l;break}if((c[d+(o<<2)>>2]|0)!=0){p=l;break}$o(a,b,d,o);p=c[h>>2]|0}else{p=l}}while(0);g=k+1|0;if((g|0)<(p|0)){k=g;l=p}else{break}}return}function ap(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,v=0;e=i;f=b+1|0;c[a+(b<<2)>>2]=d;b=c[637757]|0;g=c[(c[637759]|0)+(d*28|0)+8>>2]|0;h=b+(d*48|0)+4|0;j=c[h>>2]|0;if((j|0)<=0){k=f;i=e;return k|0}l=b+(d*48|0)+8|0;b=~g;m=0;n=f;f=j;a:while(1){j=c[(c[637755]|0)+((c[l>>2]|0)+m<<2)>>2]|0;o=(j|0)>-1?j:-j|0;j=c[637753]|0;do{if((c[j+(o*24|0)+4>>2]&1|0)==0){p=c[j+(o*24|0)+16>>2]|0;if((p|0)==(d|0)){q=c[j+(o*24|0)+20>>2]|0}else{q=p}p=c[(c[637759]|0)+(q*28|0)+8>>2]|0;if((g&~p|0)==0){r=n;s=f;break}if((p&b|0)!=0){r=n;s=f;break}b:do{if((n|0)>0){p=0;while(1){t=p+1|0;if((q|0)==(c[a+(p<<2)>>2]|0)){u=p;break b}if((t|0)<(n|0)){p=t}else{u=t;break}}}else{u=0}}while(0);if((u|0)!=(n|0)){r=n;s=f;break}if((n|0)>1023){break a}p=ap(a,n,q)|0;r=p;s=c[h>>2]|0}else{r=n;s=f}}while(0);o=m+1|0;if((o|0)<(s|0)){m=o;n=r;f=s}else{k=r;v=16;break}}if((v|0)==16){i=e;return k|0}tp(23072,(v=i,i=i+1|0,i=i+7&-8,c[v>>2]=0,v)|0);i=v;k=n;i=e;return k|0}function bp(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,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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;b=i;i=i+32768|0;d=b|0;e=b+4096|0;f=b+8192|0;g=b+12288|0;h=b+16384|0;j=b+20480|0;k=b+24576|0;l=b+28672|0;m=f;n=g;o=c[637759]|0;a:do{if((c[o+(a*28|0)>>2]&8|0)==0){if((c[o+(a*28|0)+4>>2]&1|0)==0){p=0;break}Zx(m|0,0,4096)|0;Zx(n|0,0,4096)|0;q=ap(e|0,0,a)|0;r=(q|0)>0;if(!r){Zx(d|0,0,4096)|0;p=0;break}s=c[637757]|0;t=c[637755]|0;u=c[637753]|0;v=c[637759]|0;w=0;x=0;y=0;z=0;A=-1;B=-1;C=0;while(1){D=c[e+(C<<2)>>2]|0;E=c[s+(D*48|0)+4>>2]|0;if((E|0)>0){F=c[s+(D*48|0)+8>>2]|0;G=f+(C<<2)|0;H=g+(C<<2)|0;I=w;J=x;K=y;L=z;M=A;N=B;O=0;while(1){P=c[t+(F+O<<2)>>2]|0;Q=(P|0)>-1?P:-P|0;do{if((c[u+(Q*24|0)+4>>2]&1|0)==0){P=u+(Q*24|0)+16|0;R=u+(Q*24|0)+20|0;S=0;while(1){if((S|0)!=(C|0)){T=c[e+(S<<2)>>2]|0;if((c[P>>2]|0)==(T|0)){U=S;break}if((c[R>>2]|0)==(T|0)){U=S;break}}T=S+1|0;if((T|0)<(q|0)){S=T}else{U=T;break}}if((U|0)!=(q|0)){V=N;W=M;X=L;Y=K;Z=J;_=I;break}S=c[P>>2]|0;if((S|0)==(D|0)){$=c[R>>2]|0}else{$=S}if((c[v+($*28|0)>>2]&8|0)!=0){p=0;break a}S=c[u+(Q*24|0)>>2]&-2;if((M|0)<0|(S|0)==(M|0)){T=I+1|0;c[h+(I<<2)>>2]=Q;b:do{if((K|0)>0){aa=0;while(1){ba=aa+1|0;if((c[k+(aa<<2)>>2]|0)==($|0)){ca=aa;break b}if((ba|0)<(K|0)){aa=ba}else{ca=ba;break}}}else{ca=0}}while(0);if((ca|0)==(K|0)){c[k+(K<<2)>>2]=$;da=K+1|0}else{da=K}c[G>>2]=(c[G>>2]|0)+1;V=N;W=S;X=L;Y=da;Z=J;_=T;break}if(!((N|0)<0|(S|0)==(N|0))){p=0;break a}R=J+1|0;c[j+(J<<2)>>2]=Q;c:do{if((L|0)>0){P=0;while(1){aa=P+1|0;if((c[l+(P<<2)>>2]|0)==($|0)){ea=P;break c}if((aa|0)<(L|0)){P=aa}else{ea=aa;break}}}else{ea=0}}while(0);if((ea|0)==(L|0)){c[l+(L<<2)>>2]=$;fa=L+1|0}else{fa=L}c[H>>2]=(c[H>>2]|0)+1;V=S;W=M;X=fa;Y=K;Z=R;_=I}else{V=N;W=M;X=L;Y=K;Z=J;_=I}}while(0);Q=O+1|0;if((Q|0)<(E|0)){I=_;J=Z;K=Y;L=X;M=W;N=V;O=Q}else{ga=_;ha=Z;ia=Y;ja=X;ka=W;la=V;break}}}else{ga=w;ha=x;ia=y;ja=z;ka=A;la=B}O=C+1|0;if((O|0)<(q|0)){w=ga;x=ha;y=ia;z=ja;A=ka;B=la;C=O}else{break}}if(r){C=0;while(1){if((c[f+(C<<2)>>2]|0)==0){p=0;break a}B=C+1|0;if((c[g+(C<<2)>>2]|0)==0){p=0;break a}if((B|0)<(q|0)){C=B}else{break}}}C=d;Zx(C|0,0,4096)|0;if((ia|0)<1){p=0;break}if((ia|0)!=1){$o(k|0,ia,d|0,0);B=0;while(1){A=B+1|0;if((c[d+(B<<2)>>2]|0)==0){p=0;break a}if((A|0)<(ia|0)){B=A}else{break}}}Zx(C|0,0,4096)|0;if((ja|0)<1){p=0;break}if((ja|0)!=1){$o(l|0,ja,d|0,0);B=0;while(1){A=B+1|0;if((c[d+(B<<2)>>2]|0)==0){p=0;break a}if((A|0)<(ja|0)){B=A}else{break}}}d:do{if((ga|0)>0){B=c[637753]|0;C=c[637751]|0;A=(ha|0)>0;z=0;while(1){y=c[h+(z<<2)>>2]|0;x=c[B+(y*24|0)+8>>2]|0;e:do{if((x|0)>0){w=c[B+(y*24|0)+12>>2]|0;if(A){ma=0}else{u=0;while(1){v=u+1|0;if((ha|0)!=0){na=u;break e}if((v|0)<(x|0)){u=v}else{na=v;break e}}}while(1){u=c[C+(w+ma<<2)>>2]|0;R=(u|0)>-1?u:-u|0;u=0;while(1){S=c[j+(u<<2)>>2]|0;v=c[B+(S*24|0)+8>>2]|0;f:do{if((v|0)>0){t=c[B+(S*24|0)+12>>2]|0;s=0;while(1){O=c[C+(t+s<<2)>>2]|0;N=s+1|0;if((R|0)==(((O|0)>-1?O:-O|0)|0)){oa=s;break f}if((N|0)<(v|0)){s=N}else{oa=N;break}}}else{oa=0}}while(0);S=u+1|0;if((oa|0)!=(v|0)){pa=u;break}if((S|0)<(ha|0)){u=S}else{pa=S;break}}u=ma+1|0;if((pa|0)!=(ha|0)){na=ma;break e}if((u|0)<(x|0)){ma=u}else{na=u;break}}}else{na=0}}while(0);y=z+1|0;if((na|0)!=(x|0)){qa=z;break d}if((y|0)<(ga|0)){z=y}else{qa=y;break}}}else{qa=0}}while(0);z=(qa|0)!=(ga|0);if(z|r^1){p=z?0:q;break}else{ra=0}while(1){z=c[e+(ra<<2)>>2]|0;C=(c[637759]|0)+(z*28|0)|0;c[C>>2]=c[C>>2]|40;iv(19976,(C=i,i=i+8|0,c[C>>2]=z,C)|0);i=C;C=ra+1|0;if((C|0)<(q|0)){ra=C}else{p=q;break}}}else{p=0}}while(0);i=b;return p|0}function cp(){var a=0,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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;a=i;if((c[637704]|0)==0){i=a;return}do{if((c[637768]|0)>0){if((~~+bv(54832)|0)!=0){break}if((~~+bv(53848)|0)!=0){break}i=a;return}}while(0);b=c[637756]|0;a:do{if((b|0)>1){d=c[637759]|0;e=1;f=b;while(1){g=d+(e*28|0)|0;h=c[g>>2]|0;if((h&512|0)==0){j=f}else{c[g>>2]=h|8;j=c[637756]|0}h=e+1|0;if((h|0)<(j|0)){e=h;f=j}else{break}}if((j|0)>1){k=0;l=1;m=j;n=d}else{o=0;break}while(1){if((c[n+(l*28|0)>>2]&8|0)==0){p=k;q=m}else{iv(57232,(r=i,i=i+8|0,c[r>>2]=l,r)|0);i=r;p=k+1|0;q=c[637756]|0}f=l+1|0;if((f|0)>=(q|0)){o=p;break a}k=p;l=f;m=q;n=c[637759]|0}}else{o=0}}while(0);ue[c[636260]&31](1,55808,(r=i,i=i+8|0,c[r>>2]=o,r)|0);i=r;do{if((c[637756]|0)>1){o=c[637759]|0;n=1;do{c[o+(n*28|0)+12>>2]=0;n=n+1|0;s=c[637756]|0;}while((n|0)<(s|0));if((s|0)>1){t=1;u=0}else{v=0;break}while(1){n=(bp(t)|0)+u|0;o=t+1|0;if((o|0)<(c[637756]|0)){t=o;u=n}else{v=n;break}}}else{v=0}}while(0);ue[c[636260]&31](1,17800,(r=i,i=i+8|0,c[r>>2]=v,r)|0);i=r;v=c[637756]|0;if((v|0)>1){u=c[637759]|0;t=1;s=v;while(1){v=u+(t*28|0)|0;n=c[v>>2]|0;if((n&8|0)==0){w=s}else{c[v>>2]=n|512;w=c[637756]|0}n=t+1|0;if((n|0)<(w|0)){t=n;s=w}else{break}}}w=c[637765]|0;if((w|0)!=0){nv(w)}c[637765]=kv(1310720)|0;w=c[637767]|0;if((w|0)!=0){nv(w)}c[637767]=kv(262144)|0;w=c[637769]|0;if((w|0)!=0){nv(w)}c[637769]=kv(1048576)|0;ue[c[636260]&31](1,52720,(r=i,i=i+8|0,c[r>>2]=0,r)|0);i=r;w=0;b:while(1){ue[c[636260]&31](1,51776,(r=i,i=i+8|0,c[r>>2]=w,r)|0);i=r;c[637764]=1;c[637766]=0;c[637768]=1;s=c[637756]|0;c:do{if((s|0)>1){t=c[637759]|0;u=c[637765]|0;n=1;v=s;o=1;while(1){if((c[t+(n*28|0)>>2]&8|0)==0){x=v;y=o}else{if((o|0)>65535){break}c[u+(o*20|0)>>2]=n;c[u+(o*20|0)+4>>2]=0;c[u+(o*20|0)+8>>2]=0;q=(c[637764]|0)+1|0;c[637764]=q;x=c[637756]|0;y=q}q=n+1|0;if((q|0)<(x|0)){n=q;v=x;o=y}else{break c}}tp(26560,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r}}while(0);s=w+1|0;if((_o()|0)==0){w=s;continue}o=c[637764]|0;if((o|0)<=1){break}v=c[637765]|0;n=1;while(1){z=v+(n*20|0)|0;if((c[v+(n*20|0)+4>>2]|0)==0){A=44;break}u=n+1|0;if((c[v+(n*20|0)+8>>2]|0)==0){A=46;break}if((u|0)<(o|0)){n=u}else{break b}}if((A|0)==44){A=0;n=z|0;o=(c[637759]|0)+((c[n>>2]|0)*28|0)|0;c[o>>2]=c[o>>2]&-9;iv(60560,(r=i,i=i+8|0,c[r>>2]=c[n>>2],r)|0);i=r;w=s;continue}else if((A|0)==46){A=0;n=z|0;o=(c[637759]|0)+((c[n>>2]|0)*28|0)|0;c[o>>2]=c[o>>2]&-9;iv(59048,(r=i,i=i+8|0,c[r>>2]=c[n>>2],r)|0);i=r;w=s;continue}}ue[c[636260]&31](1,50784,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;c[637706]=1;w=c[637764]|0;if((w|0)>1){z=1;while(1){A=c[(c[637765]|0)+(z*20|0)>>2]|0;iv(50024,(r=i,i=i+16|0,c[r>>2]=z,c[r+8>>2]=A,r)|0);i=r;A=z+1|0;y=c[637764]|0;if((A|0)<(y|0)){z=A}else{B=y;break}}}else{B=w}ue[c[636260]&31](1,49264,(r=i,i=i+8|0,c[r>>2]=B,r)|0);i=r;ue[c[636260]&31](1,48464,(r=i,i=i+8|0,c[r>>2]=c[637768],r)|0);i=r;B=c[637768]|0;if((B|0)>1){w=1;while(1){z=c[(c[637769]|0)+(w<<4)+4>>2]|0;ue[c[636260]&31](1,47192,(r=i,i=i+16|0,c[r>>2]=w,c[r+8>>2]=z,r)|0);i=r;z=w+1|0;y=c[637768]|0;if((z|0)<(y|0)){w=z}else{C=y;break}}}else{C=B}if((C|0)>0){B=c[637769]|0;w=0;y=0;z=0;while(1){A=c[B+(w<<4)+4>>2]|0;x=A+z|0;n=(da(A,A)|0)+y|0;A=w+1|0;if((A|0)<(C|0)){w=A;y=n;z=x}else{D=n;E=x;break}}}else{D=0;E=0}z=(da(c[637764]|0,E)|0)+D|0;ue[c[636260]&31](1,46192,(r=i,i=i+8|0,c[r>>2]=E,r)|0);i=r;ue[c[636260]&31](1,45584,(r=i,i=i+8|0,c[r>>2]=z*3|0,r)|0);i=r;i=a;return}function dp(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=0;while(1){f=1508112+(e<<2)|0;g=c[f>>2]|0;if((g|0)==0){h=4;break}i=e+1|0;if((c[1504016+(e<<2)>>2]|0)==0){j=g;break}if((i|0)<1024){e=i}else{h=7;break}}if((h|0)==4){i=se[c[636277]&31]()|0;c[f>>2]=i;c[1504016+(e<<2)>>2]=0;c[164932]=(c[164932]|0)+1;j=i}else if((h|0)==7){return}ze[c[636279]&15](j,a,b,d);c[1504016+(e<<2)>>2]=1;return}function ep(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=se[c[636277]&31]()|0;ze[c[636279]&15](e,a,b,d);return}function fp(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.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0.0;d=i;i=i+32|0;e=d|0;f=d+16|0;if((c[637704]|0)==0){ue[c[636260]&31](1,51472,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=3;i=d;return j|0}h=c[637778]|0;if((b|0)==0){k=h+(a*148|0)+140|0;or(c[k>>2]|0);l=h+(a*148|0)+144|0;No(c[l>>2]|0);c[k>>2]=0;c[l>>2]=0;j=0;i=d;return j|0}m=+yp();l=h+(a*148|0)+12|0;g[h+(a*148|0)+16>>2]=m- +g[l>>2];c[h+(a*148|0)+4>>2]=c[b>>2];c[h+(a*148|0)+8>>2]=c[b+4>>2];g[l>>2]=+yp();l=h+(a*148|0)+24|0;m=+g[l>>2];g[h+(a*148|0)+60>>2]=m;k=h+(a*148|0)+28|0;g[h+(a*148|0)+64>>2]=+g[k>>2];n=h+(a*148|0)+32|0;g[h+(a*148|0)+68>>2]=+g[n>>2];g[h+(a*148|0)+48>>2]=+g[b+32>>2];g[h+(a*148|0)+52>>2]=+g[b+36>>2];g[h+(a*148|0)+56>>2]=+g[b+40>>2];o=c[b+72>>2]|0;c[h+(a*148|0)+100>>2]=o;c[h+(a*148|0)+96>>2]=c[b+68>>2];p=c[b+76>>2]|0;c[h+(a*148|0)+104>>2]=p;c[h+(a*148|0)+108>>2]=c[b+80>>2];c[h+(a*148|0)+112>>2]=c[b+84>>2];c[h+(a*148|0)+116>>2]=c[b+88>>2];c[h+(a*148|0)+120>>2]=c[b+92>>2];c[h+(a*148|0)+124>>2]=c[b+96>>2];c[h+(a*148|0)+128>>2]=c[b+100>>2];c[h+(a*148|0)+132>>2]=c[b+104>>2];c[h+(a*148|0)+136>>2]=c[b+108>>2];c[h+(a*148|0)+20>>2]=a;c[h+(a*148|0)>>2]=1;q=(c[637709]|0)==1|0;if((o|0)==3){r=h+(a*148|0)+36|0;s=+g[b+20>>2];t=b+24|0;do{if(s!=+g[r>>2]){u=h+(a*148|0)+40|0;v=10}else{w=h+(a*148|0)+40|0;if(+g[t>>2]!=+g[w>>2]){u=w;v=10;break}if(+g[b+28>>2]!=+g[h+(a*148|0)+44>>2]){u=w;v=10}else{x=q}}}while(0);if((v|0)==10){g[r>>2]=s;g[u>>2]=+g[t>>2];g[h+(a*148|0)+44>>2]=+g[b+28>>2];x=1}Mo(p,r,h+(a*148|0)+72|0,h+(a*148|0)+84|0,0);y=x;z=+g[l>>2]}else if((o|0)==2){o=h+(a*148|0)+72|0;s=+g[b+44>>2];x=b+48|0;do{if(s!=+g[o>>2]){A=h+(a*148|0)+76|0;v=19}else{r=h+(a*148|0)+76|0;if(+g[x>>2]!=+g[r>>2]){A=r;v=19;break}if(+g[b+52>>2]!=+g[h+(a*148|0)+80>>2]){A=r;v=19;break}if(+g[b+56>>2]!=+g[h+(a*148|0)+84>>2]){A=r;v=19;break}if(+g[b+60>>2]!=+g[h+(a*148|0)+88>>2]){A=r;v=19;break}if(+g[b+64>>2]!=+g[h+(a*148|0)+92>>2]){A=r;v=19}else{B=q}}}while(0);if((v|0)==19){g[o>>2]=s;g[A>>2]=+g[x>>2];g[h+(a*148|0)+80>>2]=+g[b+52>>2];g[h+(a*148|0)+84>>2]=+g[b+56>>2];g[h+(a*148|0)+88>>2]=+g[b+60>>2];g[h+(a*148|0)+92>>2]=+g[b+64>>2];B=1}g[h+(a*148|0)+36>>2]=+g[b+20>>2];g[h+(a*148|0)+40>>2]=+g[b+24>>2];g[h+(a*148|0)+44>>2]=+g[b+28>>2];y=B;z=m}else{y=q;z=m}m=+g[b+8>>2];q=b+12|0;do{if(m!=z){v=24}else{if(+g[q>>2]!=+g[k>>2]){v=24;break}if(+g[b+16>>2]!=+g[n>>2]){v=24}else{C=y;D=z}}}while(0);if((v|0)==24){g[l>>2]=m;g[k>>2]=+g[q>>2];g[n>>2]=+g[b+16>>2];C=1;D=m}if((C|0)==0|(a|0)==1022){j=0;i=d;return j|0}C=e|0;g[C>>2]=+g[h+(a*148|0)+72>>2]+D;g[e+4>>2]=+g[h+(a*148|0)+76>>2]+ +g[k>>2];g[e+8>>2]=+g[h+(a*148|0)+80>>2]+ +g[n>>2];e=f|0;g[e>>2]=+g[h+(a*148|0)+84>>2]+ +g[l>>2];g[f+4>>2]=+g[h+(a*148|0)+88>>2]+ +g[k>>2];g[f+8>>2]=+g[h+(a*148|0)+92>>2]+ +g[n>>2];n=h+(a*148|0)+140|0;or(c[n>>2]|0);c[n>>2]=qr(C,e,a,2)|0;n=h+(a*148|0)+144|0;No(c[n>>2]|0);c[n>>2]=Oo(C,e,a,0)|0;j=0;i=d;return j|0}function gp(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((c[637705]|0)==0){ue[c[636260]&31](4,57984,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;Zx(b|0,0,140)|0;i=d;return}if((a|0)>-1&(c[637776]|0)>(a|0)){Vx(b|0,(c[637778]|0)+(a*148|0)|0,140)|0;i=d;return}else{ue[c[636260]&31](4,47696,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;Zx(b|0,0,140)|0;i=d;return}}function hp(a){a=a|0;var b=0,d=0,e=0;b=i;if((a|0)>-1&(c[637776]|0)>(a|0)){d=c[(c[637778]|0)+(a*148|0)+104>>2]|0;i=b;return d|0}else{ue[c[636260]&31](4,36144,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;d=0;i=b;return d|0}return 0}function ip(a){a=a|0;var b=0,d=0,e=0;b=i;if((c[637705]|0)==0){d=0;i=b;return d|0}if((a|0)>-1&(c[637776]|0)>(a|0)){d=c[(c[637778]|0)+(a*148|0)+4>>2]|0;i=b;return d|0}else{ue[c[636260]&31](4,30864,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;d=0;i=b;return d|0}return 0}function jp(a){a=a|0;var b=0,d=0,e=0;b=i;if((c[637705]|0)==0){d=0;i=b;return d|0}if((a|0)>-1&(c[637776]|0)>(a|0)){d=c[(c[637778]|0)+(a*148|0)+104>>2]|0;i=b;return d|0}else{ue[c[636260]&31](4,26512,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;d=0;i=b;return d|0}return 0}function kp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;d=c[637776]|0;if((d|0)<=0){e=0;return e|0}f=c[637778]|0;h=0;while(1){if((c[f+(h*148|0)+4>>2]|0)==4){if((c[f+(h*148|0)+104>>2]|0)==(a|0)){break}}i=h+1|0;if((i|0)<(d|0)){h=i}else{e=0;j=7;break}}if((j|0)==7){return e|0}g[b>>2]=+g[f+(h*148|0)+24>>2];g[b+4>>2]=+g[f+(h*148|0)+28>>2];g[b+8>>2]=+g[f+(h*148|0)+32>>2];e=1;return e|0}function lp(){var a=0,b=0;a=c[637776]|0;if((a|0)>0){b=0}else{return}do{c[(c[637778]|0)+(b*148|0)+140>>2]=0;c[(c[637778]|0)+(b*148|0)+144>>2]=0;b=b+1|0;}while((b|0)<(a|0));return}function mp(){var a=0,b=0;if((c[637776]|0)<=0){return}a=c[637778]|0;b=0;do{c[a+(b*148|0)>>2]=0;c[a+(b*148|0)+20>>2]=b;b=b+1|0;}while((b|0)<(c[637776]|0));return}function np(){var a=0,b=0,d=0,e=0,f=0;a=c[637776]|0;if((a|0)>0){b=0;d=a}else{return}while(1){a=c[637778]|0;if((c[a+(b*148|0)>>2]|0)==0){e=a+(b*148|0)+140|0;or(c[e>>2]|0);c[e>>2]=0;e=a+(b*148|0)+144|0;No(c[e>>2]|0);c[e>>2]=0;f=c[637776]|0}else{f=d}e=b+1|0;if((e|0)<(f|0)){b=e;d=f}else{break}}return}function op(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[637704]|0)==0){b=0;return b|0}d=c[637776]|0;e=c[637778]|0;f=(a|0)>-1?a:-1;while(1){a=f+1|0;if((a|0)>=(d|0)){b=0;g=5;break}if((c[e+(a*148|0)>>2]|0)==0){f=a}else{b=a;g=5;break}}if((g|0)==5){return b|0}return 0}function pp(){var a=0;c[637742]=0;a=c[637743]|0;if((a|0)!=0){nv(a)}c[637743]=0;c[637744]=0;a=c[637745]|0;if((a|0)!=0){nv(a)}c[637745]=0;c[637746]=0;a=c[637747]|0;if((a|0)!=0){nv(a)}c[637747]=0;c[637748]=0;a=c[637749]|0;if((a|0)!=0){nv(a)}c[637749]=0;c[637750]=0;a=c[637751]|0;if((a|0)!=0){nv(a)}c[637751]=0;c[637752]=0;a=c[637753]|0;if((a|0)!=0){nv(a)}c[637753]=0;c[637754]=0;a=c[637755]|0;if((a|0)!=0){nv(a)}c[637755]=0;c[637756]=0;a=c[637757]|0;if((a|0)!=0){nv(a)}c[637757]=0;c[637758]=0;a=c[637759]|0;if((a|0)!=0){nv(a)}c[637759]=0;c[637760]=0;a=c[637761]|0;if((a|0)!=0){nv(a)}c[637761]=0;c[637762]=0;a=c[637763]|0;if((a|0)!=0){nv(a)}c[637763]=0;c[637764]=0;a=c[637765]|0;if((a|0)!=0){nv(a)}c[637765]=0;c[637764]=0;a=c[637767]|0;if((a|0)!=0){nv(a)}c[637767]=0;c[637766]=0;a=c[637769]|0;if((a|0)==0){c[637769]=0;c[637768]=0;c[637704]=0;c[637705]=0;c[637706]=0;return}nv(a);c[637769]=0;c[637768]=0;c[637704]=0;c[637705]=0;c[637706]=0;return}function qp(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;if((d|0)==0){h=mv(f+1|0)|0;i=g;return h|0}do{if((c[e>>2]|0)==(b|0)){j=mv(d+1|0)|0}else{ue[c[636260]&31](2,51336,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;if((he[c[636276]&63](a,b,2)|0)==0){j=mv(d+1|0)|0;break}tp(57952,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;pp();je[c[636275]&127](a);h=0;i=g;return h|0}}while(0);he[c[636273]&63](j,d,a)|0;c[e>>2]=(c[e>>2]|0)+d;h=j;i=g;return h|0}function rp(b){b=b|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;e=i;i=i+144|0;f=e|0;g=e+8|0;h=e+136|0;ue[c[636260]&31](1,47672,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;pp();he[c[636272]&63](b,f,0)|0;k=c[f>>2]|0;if((k|0)==0){tp(40872,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;l=4;m=124;n=0;i=e;return l|0}he[c[636273]&63](g,124,k)|0;c[h>>2]=124;if((c[g>>2]|0)!=1396785477){tp(36120,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;je[c[636275]&127](c[f>>2]|0);l=5;m=124;n=0;i=e;return l|0}k=c[g+4>>2]|0;if(!((k-4|0)>>>0<2>>>0)){tp(30824,(j=i,i=i+24|0,c[j>>2]=b,c[j+8>>2]=k,c[j+16>>2]=5,j)|0);i=j;je[c[636275]&127](c[f>>2]|0);l=6;m=124;n=0;i=e;return l|0}o=g+8|0;if((k|0)==5){k=o;p=0;do{q=k+p|0;a[q]=(d[q]|0)^(p*119|0);p=p+1|0;}while((p|0)<116)}p=Vc(av(26496)|0)|0;c[637707]=p;if((c[o>>2]|0)!=(p|0)){tp(23040,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;je[c[636275]&127](c[f>>2]|0);l=6;m=124;n=0;i=e;return l|0}j=c[g+16>>2]|0;b=qp(c[f>>2]|0,c[g+12>>2]|0,j,h,32)|0;c[637743]=b;p=j>>>5;c[637742]=p;if(!((p|0)==0|(b|0)!=0)){l=7;m=124;n=0;i=e;return l|0}b=c[g+24>>2]|0;p=qp(c[f>>2]|0,c[g+20>>2]|0,b,h,12)|0;c[637745]=p;c[637744]=(b>>>0)/12|0;if(!(b>>>0<12>>>0|(p|0)!=0)){l=7;m=124;n=0;i=e;return l|0}p=c[g+32>>2]|0;b=qp(c[f>>2]|0,c[g+28>>2]|0,p,h,20)|0;c[637747]=b;c[637746]=(p>>>0)/20|0;if(!(p>>>0<20>>>0|(b|0)!=0)){l=7;m=124;n=0;i=e;return l|0}b=c[g+40>>2]|0;p=qp(c[f>>2]|0,c[g+36>>2]|0,b,h,8)|0;c[637749]=p;j=b>>>3;c[637748]=j;if(!((j|0)==0|(p|0)!=0)){l=7;m=124;n=0;i=e;return l|0}p=c[g+48>>2]|0;j=qp(c[f>>2]|0,c[g+44>>2]|0,p,h,4)|0;c[637751]=j;b=p>>>2;c[637750]=b;if(!((b|0)==0|(j|0)!=0)){l=7;m=124;n=0;i=e;return l|0}j=c[g+56>>2]|0;b=qp(c[f>>2]|0,c[g+52>>2]|0,j,h,24)|0;c[637753]=b;c[637752]=(j>>>0)/24|0;if(!(j>>>0<24>>>0|(b|0)!=0)){l=7;m=124;n=0;i=e;return l|0}b=c[g+64>>2]|0;j=qp(c[f>>2]|0,c[g+60>>2]|0,b,h,4)|0;c[637755]=j;p=b>>>2;c[637754]=p;if(!((p|0)==0|(j|0)!=0)){l=7;m=124;n=0;i=e;return l|0}j=c[g+72>>2]|0;p=qp(c[f>>2]|0,c[g+68>>2]|0,j,h,48)|0;c[637757]=p;c[637756]=(j>>>0)/48|0;if(!(j>>>0<48>>>0|(p|0)!=0)){l=7;m=124;n=0;i=e;return l|0}p=c[g+80>>2]|0;j=qp(c[f>>2]|0,c[g+76>>2]|0,p,h,28)|0;c[637759]=j;c[637758]=(p>>>0)/28|0;if(!(p>>>0<28>>>0|(j|0)!=0)){l=7;m=124;n=0;i=e;return l|0}j=c[g+88>>2]|0;p=qp(c[f>>2]|0,c[g+84>>2]|0,j,h,44)|0;c[637761]=p;c[637760]=(j>>>0)/44|0;if(!(j>>>0<44>>>0|(p|0)!=0)){l=7;m=124;n=0;i=e;return l|0}p=c[g+96>>2]|0;j=qp(c[f>>2]|0,c[g+92>>2]|0,p,h,12)|0;c[637763]=j;c[637762]=(p>>>0)/12|0;if(!(p>>>0<12>>>0|(j|0)!=0)){l=7;m=124;n=0;i=e;return l|0}j=c[g+104>>2]|0;p=qp(c[f>>2]|0,c[g+100>>2]|0,j,h,20)|0;c[637765]=p;c[637764]=(j>>>0)/20|0;if(!(j>>>0<20>>>0|(p|0)!=0)){l=7;m=124;n=0;i=e;return l|0}p=c[g+112>>2]|0;j=qp(c[f>>2]|0,c[g+108>>2]|0,p,h,4)|0;c[637767]=j;b=p>>>2;c[637766]=b;if(!((b|0)==0|(j|0)!=0)){l=7;m=124;n=0;i=e;return l|0}j=c[g+120>>2]|0;b=qp(c[f>>2]|0,c[g+116>>2]|0,j,h,16)|0;c[637769]=b;h=j>>>4;c[637768]=h;if(!((h|0)==0|(b|0)!=0)){l=7;m=124;n=0;i=e;return l|0}c[637704]=1;je[c[636275]&127](c[f>>2]|0);l=0;m=124;n=0;i=e;return l|0}function sp(b){b=b|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,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;e=i;i=i+136|0;f=e|0;g=e+128|0;h=f;ue[c[636260]&31](1,19960,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;Zx(h|0,0,124)|0;c[f>>2]=1396785477;c[f+4>>2]=5;k=f+8|0;c[k>>2]=c[637707];he[c[636272]&63](b,g,1)|0;l=c[g>>2]|0;if((l|0)==0){ue[c[636260]&31](3,17776,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;m=0;n=124;o=0;i=e;return m|0}he[c[636274]&63](h,124,l)|0;c[661398]=124;l=c[g>>2]|0;j=c[637743]|0;b=c[637742]<<5;c[f+12>>2]=124;c[f+16>>2]=b;if((b|0)>0){he[c[636274]&63](j,b,l)|0;p=c[661398]|0;q=c[g>>2]|0}else{p=124;q=l}l=p+b|0;c[661398]=l;b=c[637745]|0;p=(c[637744]|0)*12|0;c[f+20>>2]=l;c[f+24>>2]=p;if((p|0)>0){he[c[636274]&63](b,p,q)|0;r=c[661398]|0;s=c[g>>2]|0}else{r=l;s=q}q=r+p|0;c[661398]=q;p=c[637747]|0;r=(c[637746]|0)*20|0;c[f+28>>2]=q;c[f+32>>2]=r;if((r|0)>0){he[c[636274]&63](p,r,s)|0;t=c[661398]|0;u=c[g>>2]|0}else{t=q;u=s}s=t+r|0;c[661398]=s;r=c[637749]|0;t=c[637748]<<3;c[f+36>>2]=s;c[f+40>>2]=t;if((t|0)>0){he[c[636274]&63](r,t,u)|0;v=c[661398]|0;w=c[g>>2]|0}else{v=s;w=u}u=v+t|0;c[661398]=u;t=c[637751]|0;v=c[637750]<<2;c[f+44>>2]=u;c[f+48>>2]=v;if((v|0)>0){he[c[636274]&63](t,v,w)|0;x=c[661398]|0;y=c[g>>2]|0}else{x=u;y=w}w=x+v|0;c[661398]=w;v=c[637753]|0;x=(c[637752]|0)*24|0;c[f+52>>2]=w;c[f+56>>2]=x;if((x|0)>0){he[c[636274]&63](v,x,y)|0;z=c[661398]|0;A=c[g>>2]|0}else{z=w;A=y}y=z+x|0;c[661398]=y;x=c[637755]|0;z=c[637754]<<2;c[f+60>>2]=y;c[f+64>>2]=z;if((z|0)>0){he[c[636274]&63](x,z,A)|0;B=c[661398]|0;C=c[g>>2]|0}else{B=y;C=A}A=B+z|0;c[661398]=A;z=c[637757]|0;B=(c[637756]|0)*48|0;c[f+68>>2]=A;c[f+72>>2]=B;if((B|0)>0){he[c[636274]&63](z,B,C)|0;D=c[661398]|0;E=c[g>>2]|0}else{D=A;E=C}C=D+B|0;c[661398]=C;B=c[637759]|0;D=(c[637758]|0)*28|0;c[f+76>>2]=C;c[f+80>>2]=D;if((D|0)>0){he[c[636274]&63](B,D,E)|0;F=c[661398]|0;G=c[g>>2]|0}else{F=C;G=E}E=F+D|0;c[661398]=E;D=c[637761]|0;F=(c[637760]|0)*44|0;c[f+84>>2]=E;c[f+88>>2]=F;if((F|0)>0){he[c[636274]&63](D,F,G)|0;H=c[661398]|0;I=c[g>>2]|0}else{H=E;I=G}G=H+F|0;c[661398]=G;F=c[637763]|0;H=(c[637762]|0)*12|0;c[f+92>>2]=G;c[f+96>>2]=H;if((H|0)>0){he[c[636274]&63](F,H,I)|0;J=c[661398]|0;K=c[g>>2]|0}else{J=G;K=I}I=J+H|0;c[661398]=I;H=c[637765]|0;J=(c[637764]|0)*20|0;c[f+100>>2]=I;c[f+104>>2]=J;if((J|0)>0){he[c[636274]&63](H,J,K)|0;L=c[661398]|0;M=c[g>>2]|0}else{L=I;M=K}K=L+J|0;c[661398]=K;J=c[637767]|0;L=c[637766]<<2;c[f+108>>2]=K;c[f+112>>2]=L;if((L|0)>0){he[c[636274]&63](J,L,M)|0;N=c[661398]|0;O=c[g>>2]|0}else{N=K;O=M}M=N+L|0;c[661398]=M;L=c[637769]|0;N=c[637768]<<4;c[f+116>>2]=M;c[f+120>>2]=N;if((N|0)>0){he[c[636274]&63](L,N,O)|0;P=c[661398]|0;Q=c[g>>2]|0}else{P=M;Q=O}c[661398]=P+N;he[c[636276]&63](Q,0,2)|0;Q=k;k=0;do{N=Q+k|0;a[N]=(d[N]|0)^(k*119|0);k=k+1|0;}while((k|0)<116);he[c[636274]&63](h,124,c[g>>2]|0)|0;je[c[636275]&127](c[g>>2]|0);m=1;n=124;o=0;i=e;return m|0}function tp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+1040|0;e=d+1024|0;f=d|0;g=e;c[g>>2]=b;c[g+4>>2]=0;fd(f|0,1024,a|0,e|0)|0;ue[c[636260]&31](4,51296,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e;i=d;return}function up(){return c[637704]|0}function vp(){return c[637705]|0}function wp(a){a=+a;var b=0,d=0,e=0,f=0,g=0;b=i;if((c[637704]|0)==0|(c[637705]|0)!=0){i=b;return}if((uq(a)|0)!=0){i=b;return}cp();if((c[637706]|0)==0){if((~~+bv(47656)|0)!=0){d=5}}else{d=5}do{if((d|0)==5){if((~~+ev(40856,36112)|0)!=0){Up()}e=(sp(2550840)|0)==0;f=c[636260]|0;if(e){ue[f&31](3,26472,(g=i,i=i+8|0,c[g>>2]=2550840,g)|0);i=g;break}else{ue[f&31](1,30768,(g=i,i=i+8|0,c[g>>2]=2550840,g)|0);i=g;break}}}while(0);Oq();c[637705]=1;ue[c[636260]&31](1,57928,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;i=b;return}function xp(a){a=+a;var b=0,d=0;g[637708]=a;np();mp();wp(a);c[637814]=0;do{if((c[636484]|0)!=0){if(+bv(23016)!=0.0){wq();fv(23016,36112)}if(+bv(19944)!=0.0){pv();fv(19944,36112)}if(!(+bv(17760)!=0.0)){break}qv();fv(17760,36112)}}while(0);if(!(+g[(c[154352]|0)+16>>2]!=0.0)){b=c[637709]|0;d=b+1|0;c[637709]=d;return 0}Lq();fv(60536,36112);b=c[637709]|0;d=b+1|0;c[637709]=d;return 0}function yp(){return+(+g[637708])}
|
|
|
|
|
|
|
|
function Ae(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7&-8;return b|0}function Be(){return i|0}function Ce(a){a=a|0;i=a}function De(a,b){a=a|0;b=b|0;if((u|0)==0){u=a;v=b}}function Ee(b){b=b|0;a[k]=a[b];a[k+1|0]=a[b+1|0];a[k+2|0]=a[b+2|0];a[k+3|0]=a[b+3|0]}function Fe(b){b=b|0;a[k]=a[b];a[k+1|0]=a[b+1|0];a[k+2|0]=a[b+2|0];a[k+3|0]=a[b+3|0];a[k+4|0]=a[b+4|0];a[k+5|0]=a[b+5|0];a[k+6|0]=a[b+6|0];a[k+7|0]=a[b+7|0]}function Ge(a){a=a|0;H=a}function He(a){a=a|0;I=a}function Ie(a){a=a|0;J=a}function Je(a){a=a|0;K=a}function Ke(a){a=a|0;L=a}function Le(a){a=a|0;M=a}function Me(a){a=a|0;N=a}function Ne(a){a=a|0;O=a}function Oe(a){a=a|0;P=a}function Pe(a){a=a|0;Q=a}function Qe(){}function Re(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a=c[33781]|0;b=c[(c[64874]|0)+32>>2]|0;a:do{if((b|0)>0){d=0;e=a;while(1){if((c[e>>2]|0)==0){f=d;g=e;break a}h=d+1|0;i=e+121936|0;if((h|0)<(b|0)){d=h;e=i}else{f=h;g=i;break}}}else{f=0;g=a}}while(0);if((f|0)==(b|0)){j=-1;return j|0}b=ng(f)|0;c[g+67644>>2]=b;c[b>>2]=f;c[g>>2]=4;c[g+68168>>2]=c[33779];c[g+84984>>2]=1;c[g+84960>>2]=16384;j=f;return j|0}function Se(b){b=b|0;var d=0,e=0,f=0;d=i;do{if((b|0)>=0){if((c[(c[64874]|0)+32>>2]|0)<=(b|0)){break}e=c[33781]|0;c[e+(b*121936|0)>>2]=0;a[e+(b*121936|0)+67648|0]=0;f=c[e+(b*121936|0)+67644>>2]|0;if((f|0)==0){i=d;return}e=f+424|0;c[e>>2]=c[e>>2]&-9;i=d;return}}while(0);aj(1,61072,(d=i,i=i+8|0,c[d>>2]=b,d)|0);i=d}function Te(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=c[376002]|0;if((e|0)==0){f=0;return f|0}g=c[636480]|0;a:do{if((g|0)>1){h=1;while(1){i=h+1|0;if((c[e+(h*1548|0)>>2]|0)==0){j=h;break a}if((i|0)<(g|0)){h=i}else{j=i;break}}}else{j=1}}while(0);if((j|0)>=(g|0)){f=0;return f|0}c[e+(j*1548|0)>>2]=1;c[e+(j*1548|0)+4>>2]=a;c[e+(j*1548|0)+8>>2]=b;Vx(e+(j*1548|0)+12|0,d|0,b*12|0)|0;f=j;return f|0}function Ue(a){a=a|0;var b=0;b=c[376002]|0;if((b|0)==0){return}c[b+(a*1548|0)>>2]=0;return}function Ve(a){a=a|0;var b=0,d=0;b=i;d=c[196754]|0;if(!((c[636482]|0)!=0&(d|0)!=0)){i=b;return}Co(d,10,(d=i,i=i+8|0,c[d>>2]=a,d)|0)|0;i=d;i=b;return}function We(){var a=0,b=0,d=0,e=0;a=i;if((c[636482]|0)==0){b=0;i=a;return b|0}d=c[636256]|0;if((d|0)==0){_i(23648,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;b=-1;i=a;return b|0}else{qe[c[d+492>>2]&63](20552,c[(c[430924]|0)+4>>2]|0)|0;b=se[c[(c[636256]|0)+484>>2]&31]()|0;i=a;return b|0}return 0}function Xe(){var a=0,b=0;a=c[636256]|0;if((a|0)==0){b=-1;return b|0}b=se[c[a+488>>2]&31]()|0;return b|0}function Ye(){jk(18104,31736,0)|0;jk(61040,49432,512)|0;jk(61056,49432,512)|0;jk(59360,57584,0)|0;jk(37128,31736,0)|0;jk(41920,49432,0)|0;jk(56032,49432,512)|0;jk(55040,49432,0)|0;jk(54096,49432,0)|0;jk(52984,49432,0)|0;jk(51944,49432,0)|0;jk(51040,49432,0)|0;jk(50208,49424,512)|0;jk(48696,49432,0)|0;jk(47440,49432,0)|0;jk(46400,49432,0)|0;jk(45816,49432,512)|0;jk(44992,49432,512)|0;jk(44280,49432,0)|0;jk(43624,49432,0)|0;jk(42968,49432,512)|0;jk(42400,49432,512)|0;jk(41904,49432,0)|0;jk(41456,31736,0)|0;jk(40656,49432,0)|0;jk(39992,49432,0)|0;jk(39568,2551496,512)|0;jk(38632,38200,512)|0;jk(37848,37520,512)|0;jk(37104,2551496,512)|0;return}function Ze(){var a=0,b=0,d=0;a=i;i=i+88|0;b=a|0;d=c[376002]|0;if((d|0)!=0){mj(d)}d=ek(59360)|0;c[636480]=d;c[376002]=oj(d*1548|0)|0;c[b>>2]=12;c[b+4>>2]=4;c[b+8>>2]=6;c[b+12>>2]=28;c[b+16>>2]=46;c[b+20>>2]=20;c[b+24>>2]=4;c[b+28>>2]=30;c[b+32>>2]=42;c[b+36>>2]=22;c[b+40>>2]=30;c[b+44>>2]=60;c[b+48>>2]=28;c[b+52>>2]=32;c[b+56>>2]=24;c[b+60>>2]=52;c[b+64>>2]=14;c[b+68>>2]=10;c[b+72>>2]=54;c[b+76>>2]=10;c[b+80>>2]=12;c[b+84>>2]=114;c[636256]=Zu(2,b)|0;i=a;return}function _e(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+2064|0;f=e+2048|0;g=e|0;h=f;c[h>>2]=d;c[h+4>>2]=0;fd(g|0,2048,b|0,f|0)|0;switch(a|0){case 5:{aj(1,33696,(j=i,i=i+8|0,c[j>>2]=g,j)|0);i=j;break};case 3:{_i(34672,(j=i,i=i+8|0,c[j>>2]=g,j)|0);i=j;k=2048;l=0;i=e;return};case 1:{_i(35840,(j=i,i=i+8|0,c[j>>2]=g,j)|0);i=j;k=2048;l=0;i=e;return};case 4:{_i(34256,(j=i,i=i+8|0,c[j>>2]=g,j)|0);i=j;k=2048;l=0;i=e;return};case 2:{_i(35160,(j=i,i=i+8|0,c[j>>2]=g,j)|0);i=j;k=2048;l=0;i=e;return};default:{_i(32968,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=2048;l=0;i=e;return}}}function $e(b,d,e,f,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;var l=0,m=0;l=i;i=i+56|0;m=l|0;nh(m,d,e,f,h,j,k,0);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];g[b+8>>2]=+g[m+8>>2];g[b+12>>2]=+g[m+12>>2];g[b+16>>2]=+g[m+16>>2];g[b+20>>2]=+g[m+20>>2];g[b+36>>2]=+g[m+36>>2];g[b+24>>2]=+g[m+24>>2];g[b+28>>2]=+g[m+28>>2];g[b+32>>2]=+g[m+32>>2];a[b+41|0]=a[m+41|0]|0;a[b+40|0]=a[m+40|0]|0;c[b+72>>2]=c[m+44>>2];c[b+80>>2]=c[m+52>>2];g[b+44>>2]=0.0;c[b+48>>2]=0;c[b+76>>2]=0;i=l;return}function af(b,d,e,f,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;var l=0,m=0;l=i;i=i+56|0;m=l|0;mh(m,d,e,f,h,j,k,0);c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];g[b+8>>2]=+g[m+8>>2];g[b+12>>2]=+g[m+12>>2];g[b+16>>2]=+g[m+16>>2];g[b+20>>2]=+g[m+20>>2];g[b+36>>2]=+g[m+36>>2];g[b+24>>2]=+g[m+24>>2];g[b+28>>2]=+g[m+28>>2];g[b+32>>2]=+g[m+32>>2];a[b+41|0]=a[m+41|0]|0;a[b+40|0]=a[m+40|0]|0;c[b+72>>2]=c[m+44>>2];c[b+80>>2]=c[m+52>>2];g[b+44>>2]=0.0;c[b+48>>2]=0;c[b+76>>2]=0;i=l;return}function bf(a){a=a|0;return oh(a,-1)|0}function cf(a,b){a=a|0;b=b|0;return sg(a,b)|0}function df(){return Ah()|0}function ef(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;f=i;i=i+32|0;h=f|0;j=f+16|0;k=h|0;l=j|0;Eh(zh(a)|0,k,l);do{if(+g[b>>2]!=0.0){m=4}else{if(+g[b+4>>2]!=0.0){m=4;break}if(+g[b+8>>2]!=0.0){m=4}}}while(0);if((m|0)==4){n=+ln(k,l);o=-0.0-n;g[k>>2]=o;g[l>>2]=n;g[h+4>>2]=o;g[j+4>>2]=n;g[h+8>>2]=o;g[j+8>>2]=n}if((c|0)!=0){g[c>>2]=+g[k>>2];g[c+4>>2]=+g[h+4>>2];g[c+8>>2]=+g[h+8>>2]}if((d|0)!=0){g[d>>2]=+g[l>>2];g[d+4>>2]=+g[j+4>>2];g[d+8>>2]=+g[j+8>>2]}if((e|0)==0){i=f;return}g[e+8>>2]=0.0;g[e+4>>2]=0.0;g[e>>2]=0.0;i=f;return}function ff(a,b){a=a|0;b=b|0;yf((c[33781]|0)+(a*121936|0)|0,b,1);return}function gf(a){a=a|0;return nj(a,2)|0}function hf(a){a=a|0;mj(a);return}function jf(a){a=a|0;var b=0,d=0;b=i;if((wj()|0)==0){d=xj(a,0)|0;i=b;return d|0}else{aj(1,36632,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;return 0}return 0}function kf(){var a=0,b=0,d=0,e=0,f=0,g=0;a=c[376002]|0;if((a|0)==0){b=0;return b|0}d=c[636480]|0;a:do{if((d|0)>1){e=1;while(1){f=e+1|0;if((c[a+(e*1548|0)>>2]|0)==0){g=e;break a}if((f|0)<(d|0)){e=f}else{g=f;break}}}else{g=1}}while(0);if((g|0)>=(d|0)){b=0;return b|0}c[a+(g*1548|0)>>2]=1;c[a+(g*1548|0)+4>>2]=0;c[a+(g*1548|0)+8>>2]=0;b=g;return b|0}function lf(a){a=a|0;var b=0;b=c[376002]|0;if((b|0)==0){return}c[b+(a*1548|0)>>2]=0;return}function mf(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.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;f=i;i=i+32|0;h=f|0;j=f+16|0;k=+g[b>>2];l=+g[b+4>>2];m=+g[b+8>>2];n=+g[d>>2];o=+g[d+4>>2];p=+g[d+8>>2];d=h|0;g[d>>2]=n-k;b=h+4|0;g[b>>2]=o-l;q=h+8|0;g[q>>2]=p-m;+dn(d);r=+g[d>>2];s=r*0.0;t=+g[b>>2];u=t*0.0;v=+g[q>>2];w=v+(s+u);q=j|0;if(w>.99|w<-.99){g[q>>2]=1.0;g[j+4>>2]=0.0;g[j+8>>2]=0.0}else{w=v*0.0;g[q>>2]=t-w;g[j+4>>2]=w-r;g[j+8>>2]=s-u}+dn(q);u=+g[q>>2];s=u*2.0;r=+g[j+4>>2];w=r*2.0;t=+g[j+8>>2];v=t*2.0;x=u*-2.0;u=r*-2.0;r=t*-2.0;j=c[376002]|0;if((j|0)==0){i=f;return}c[j+(a*1548|0)>>2]=1;c[j+(a*1548|0)+4>>2]=e;c[j+(a*1548|0)+8>>2]=4;g[j+(a*1548|0)+12>>2]=k+s;g[j+(a*1548|0)+16>>2]=l+w;g[j+(a*1548|0)+20>>2]=m+v;g[j+(a*1548|0)+24>>2]=k+x;g[j+(a*1548|0)+28>>2]=l+u;g[j+(a*1548|0)+32>>2]=m+r;g[j+(a*1548|0)+36>>2]=n+x;g[j+(a*1548|0)+40>>2]=o+u;g[j+(a*1548|0)+44>>2]=p+r;g[j+(a*1548|0)+48>>2]=n+s;g[j+(a*1548|0)+52>>2]=o+w;g[j+(a*1548|0)+56>>2]=p+v;i=f;return}function nf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=c[33781]|0;c[f+(b*121936|0)+68168>>2]=c[33779];g=f+(b*121936|0)+66568|0;h=c[g>>2]|0;if((h|0)==(c[f+(b*121936|0)+66564>>2]|0)){i=0;return i|0}j=h+1|0;c[g>>2]=j;g=f+(b*121936|0)+1028+((j&63)<<10)|0;if((a[g]|0)==0){i=0;return i|0}rn(d,g,e);i=1;return i|0}function of(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[33781]|0;e=c[d+(a*121936|0)+85024>>2]&31;if((b|0)<0){f=-1;return f|0}if((c[d+(a*121936|0)+68188+(e*524|0)+504>>2]|0)<=(b|0)){f=-1;return f|0}f=c[(c[33784]|0)+((((c[d+(a*121936|0)+68188+(e*524|0)+508>>2]|0)+b|0)%(c[33782]|0)|0)*208|0)>>2]|0;return f|0}function pf(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;d=i;e=b;b=i;i=i+32|0;Vx(b,e,32)|0;if(+dk(32456)==2.0){i=d;return}if(+dk(54200)!=0.0){i=d;return}if((Og(b,10,1e3)|0)!=0){e=Dm(b)|0;$i(44928,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;i=d;return}if((Ng(659640,10,100)|0)!=0){$i(39104,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=d;return}e=yi(2)|0;g=c[(c[429584]|0)+4>>2]|0;do{if((a[e]|0)!=0){if((Tx(e,g)|0)!=0){break}h=Vc(yi(1)|0)|0;j=2147483647;k=135144;l=0;m=0;n=0;while(1){if((c[k+56>>2]|0)==0){o=(Fm(b,k|0)|0)==0;p=o?l:1}else{p=l}if((p|0)!=0&(n|0)>1023){q=m;r=16;break}o=c[k+40>>2]|0;s=(o|0)<(j|0);t=s?n:m;u=n+1|0;v=k+60|0;if((u|0)<2048){j=s?o:j;k=v;l=p;m=t;n=u}else{r=15;break}}if((r|0)==15){if((u|0)==2048){q=t;r=16}else{w=v}}if((r|0)==16){n=135144+(q*60|0)|0;c[135180+(q*60|0)>>2]=h;Vx(n|0,b|0,32)|0;c[135192+(q*60|0)>>2]=c[33779];c[135200+(q*60|0)>>2]=0;w=n}n=(Yx()|0)<<16;m=n^(Yx()|0);n=m^c[33779];c[w+32>>2]=n;c[w+52>>2]=0;c[w+40>>2]=c[33779];c[w+44>>2]=c[33779];m=c[(c[429556]|0)+32>>2]|0;xm(1,w|0,29168,(f=i,i=i+24|0,c[f>>2]=n,c[f+8>>2]=h,c[f+16>>2]=m,f)|0);i=f;i=d;return}}while(0);xm(1,b,34096,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;i=d;return}function qf(a){a=a|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.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=i;i=i+122960|0;e=a;a=i;i=i+32|0;Vx(a,e,32)|0;e=d|0;f=d+1024|0;$i(24952,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=c[144110]|0;a:do{if((j|0)>0){k=0;l=j;while(1){if((c[576484+(k*40|0)>>2]|0)==1){if((Bm(576448+(k*40|0)|0,a,c[576480+(k*40|0)>>2]|0)|0)!=0){break a}m=c[144110]|0}else{m=l}n=k+1|0;if((n|0)<(m|0)){k=n;l=m}else{break}}if((m|0)>0){o=0;p=m}else{break}while(1){if((c[576484+(o*40|0)>>2]|0)==0){if((Bm(576448+(o*40|0)|0,a,c[576480+(o*40|0)>>2]|0)|0)!=0){break}q=c[144110]|0}else{q=p}l=o+1|0;if((l|0)<(q|0)){o=l;p=q}else{break a}}xm(1,a,21544,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}}while(0);rn(e,yi(1)|0,1024);q=Vc(Jn(e,18656)|0)|0;p=c[(c[429556]|0)+32>>2]|0;if((q|0)!=(p|0)){xm(1,a,17e3,(h=i,i=i+16|0,c[h>>2]=p,c[h+8>>2]=q,h)|0);i=h;$i(59688,(h=i,i=i+8|0,c[h>>2]=q,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}q=Vc(Jn(e,58312)|0)|0;p=Vc(Jn(e,56304)|0)|0;b:do{if((c[(c[64874]|0)+32>>2]|0)>0){o=a+24|0;m=c[33781]|0;j=0;c:while(1){do{if((c[m>>2]|0)!=0){if((Cm(a,m+84984|0)|0)==0){break}if((c[m+85016>>2]|0)==(p|0)){break c}if((b[o>>1]|0)==(b[m+85008>>1]|0)){break c}}}while(0);l=j+1|0;if((l|0)<(c[(c[64874]|0)+32>>2]|0)){m=m+121936|0;j=l}else{break b}}if(((c[33779]|0)-(c[m+68172>>2]|0)|0)>=((c[(c[64850]|0)+32>>2]|0)*1e3|0|0)){break}j=Dm(a)|0;$i(55264,(h=i,i=i+8|0,c[h>>2]=j,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}}while(0);if((Gm(a)|0)==0){v=Dm(a)|0}else{v=54416}j=Wx(v|0)|0;if((j+4+(Wx(e|0)|0)|0)>>>0>1023>>>0){xm(1,a,53224,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}Mn(e,52208,v);if((Gm(a)|0)==0){v=0;while(1){if((Fm(a,135144+(v*60|0)|0)|0)!=0){if((q|0)==(c[135176+(v*60|0)>>2]|0)){w=v;break}}j=v+1|0;if((j|0)<2048){v=j}else{w=j;break}}if((w|0)==2048){xm(1,a,51168,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}v=135196+(w*60|0)|0;if((c[v>>2]|0)!=0){r=121936;s=0;t=1024;u=0;i=d;return}j=(c[33779]|0)-(c[135188+(w*60|0)>>2]|0)|0;do{if((Jm(a)|0)==0){x=+g[(c[64870]|0)+28>>2];do{if(x!=0.0){if(!(+(j|0)<x)){break}xm(1,a,50248,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;$i(49552,(h=i,i=i+8|0,c[h>>2]=w,h)|0);i=h;c[v>>2]=1;r=121936;s=0;t=1024;u=0;i=d;return}}while(0);x=+g[(c[64880]|0)+28>>2];if(!(x!=0.0)){break}if(!(+(j|0)>x)){break}xm(1,a,48792,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;$i(47776,(h=i,i=i+8|0,c[h>>2]=w,h)|0);i=h;c[v>>2]=1;r=121936;s=0;t=1024;u=0;i=d;return}}while(0);_i(46592,(h=i,i=i+16|0,c[h>>2]=w,c[h+8>>2]=j,h)|0);i=h;c[135200+(w*60|0)>>2]=1}Zx(f|0,0,121936)|0;w=c[33781]|0;d:do{if((c[(c[64874]|0)+32>>2]|0)>0){j=a+24|0;v=w;m=0;e:while(1){do{if((c[v>>2]|0)!=0){if((Cm(a,v+84984|0)|0)==0){break}if((c[v+85016>>2]|0)==(p|0)){break e}if((b[j>>1]|0)==(b[v+85008>>1]|0)){break e}}}while(0);o=m+1|0;l=v+121936|0;if((o|0)<(c[(c[64874]|0)+32>>2]|0)){v=l;m=o}else{y=l;z=50;break d}}m=Dm(a)|0;_i(45872,(h=i,i=i+8|0,c[h>>2]=m,h)|0);i=h;A=v}else{y=w;z=50}}while(0);if((z|0)==50){w=Jn(e,45136)|0;if((Tx(w,c[(c[64856]|0)+4>>2]|0)|0)==0){B=0}else{B=c[(c[64858]|0)+32>>2]|0}w=c[(c[64874]|0)+32>>2]|0;f:do{if((B|0)<(w|0)){m=c[33781]|0;j=B;while(1){C=m+(j*121936|0)|0;l=j+1|0;if((c[C>>2]|0)==0){break}if((l|0)<(w|0)){j=l}else{D=C;z=57;break f}}if((C|0)==0){D=0;z=57}else{E=C;F=C}}else{D=y;z=57}}while(0);do{if((z|0)==57){if((Gm(a)|0)==0){xm(1,a,43048,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;$i(42432,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}y=c[(c[64874]|0)+32>>2]|0;if((B|0)<(y|0)){C=c[33781]|0;w=B+1|0;j=(y|0)>(w|0)?y:w;w=0;m=B;do{w=((c[C+(m*121936|0)+84984>>2]|0)==1)+w|0;m=m+1|0;}while((m|0)<(y|0));G=w;H=C+((j-1|0)*121936|0)|0}else{G=0;H=D}if((G|0)<(y-B|0)){aj(0,43688,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}else{rf((c[33781]|0)+((y-1|0)*121936|0)|0,44376);E=H;F=(c[33781]|0)+(((c[(c[64874]|0)+32>>2]|0)-1|0)*121936|0)|0;break}}}while(0);c[E+66568>>2]=0;c[E+66564>>2]=0;A=F}Vx(A|0,f|0,121936)|0;f=(A-(c[33781]|0)|0)/121936|0;c[A+67644>>2]=ng(f)|0;c[A+66584>>2]=q;qm(1,A+84976|0,a,p,q,0);c[A+117832>>2]=A+117828;rn(A+4|0,e,1024);e=Co(c[196754]|0,2,(h=i,i=i+24|0,c[h>>2]=f,c[h+8>>2]=1,c[h+16>>2]=0,h)|0)|0;i=h;if((e|0)!=0){f=Bo(c[196754]|0,e)|0;xm(1,a,41960,(h=i,i=i+8|0,c[h>>2]=f,h)|0);i=h;$i(41480,(h=i,i=i+8|0,c[h>>2]=f,h)|0);i=h;r=121936;s=0;t=1024;u=0;i=d;return}sf(A);xm(1,a,40824,(h=i,i=i+8|0,c[h>>2]=q,h)|0);i=h;$i(40040,(h=i,i=i+8|0,c[h>>2]=A+67648,h)|0);i=h;c[A>>2]=2;c[A+68176>>2]=0;c[A+68168>>2]=c[33779];c[A+68172>>2]=c[33779];c[A+66580>>2]=-1;A=c[(c[64874]|0)+32>>2]|0;if((A|0)>0){h=c[33781]|0;q=0;a=0;while(1){f=((c[h+(a*121936|0)>>2]|0)>>>0>1>>>0)+q|0;e=a+1|0;if((e|0)<(A|0)){q=f;a=e}else{I=f;break}}}else{I=0}if(!((I|0)==1|(I|0)==(A|0))){r=121936;s=0;t=1024;u=0;i=d;return}Lf();r=121936;s=0;t=1024;u=0;i=d;return}function rf(b,d){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;f=b+84984|0;g=(c[f>>2]|0)==1;h=b|0;if((c[h>>2]|0)==1){i=e;return}a:do{if(!g){j=135144;k=0;while(1){if((Fm(f,j|0)|0)!=0){break}l=k+1|0;if((l|0)<2048){j=j+60|0;k=l}else{break a}}Zx(j|0,0,60)|0}}while(0);Wg(b);f=b+67744|0;k=c[f>>2]|0;if((k|0)!=0){Uk(k)}c[f>>2]=0;a[b+67680|0]=0;f=0;do{k=b+67768+(f<<2)|0;l=c[k>>2]|0;if((l|0)!=0){mj(l);c[k>>2]=0}f=f+1|0;}while((f|0)<48);f=b+67648|0;Kg(0,39600,(k=i,i=i+16|0,c[k>>2]=f,c[k+8>>2]=d,k)|0);i=k;l=b;Co(c[196754]|0,5,(k=i,i=i+8|0,c[k>>2]=(l-(c[33781]|0)|0)/121936|0,k)|0)|0;i=k;Kg(b,39232,(k=i,i=i+8|0,c[k>>2]=d,k)|0);i=k;d=(l-(c[33781]|0)|0)/121936|0;if(g){Se(d);Bg((l-(c[33781]|0)|0)/121936|0,2551488);m=0}else{Bg(d,2551488);$i(38224,(k=i,i=i+8|0,c[k>>2]=f,k)|0);i=k;m=1}c[h>>2]=m;m=c[(c[64874]|0)+32>>2]|0;b:do{if((m|0)>0){h=c[33781]|0;k=0;while(1){f=k+1|0;if((c[h+(k*121936|0)>>2]|0)>>>0>1>>>0){n=k;break b}if((f|0)<(m|0)){k=f}else{n=f;break}}}else{n=0}}while(0);if((n|0)!=(m|0)){i=e;return}Lf();i=e;return}function sf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=b+4|0;rn(b+67648|0,Jn(d,30616)|0,32);e=b+84984|0;do{if((Jm(e)|0)==0){f=5}else{if((c[(c[430624]|0)+32>>2]|0)==2){f=5;break}if((c[(c[64892]|0)+32>>2]|0)!=1){f=5;break}c[b+84960>>2]=99999}}while(0);do{if((f|0)==5){g=Jn(d,30064)|0;if((a[g]|0)==0){c[b+84960>>2]=3e3;break}h=Vc(g|0)|0;g=b+84960|0;c[g>>2]=h;if((h|0)<1e3){c[g>>2]=1e3;break}if((h|0)<=9e4){break}c[g>>2]=9e4}}while(0);f=Jn(d,29752)|0;do{if((a[f]|0)!=0){if(!(((Vc(f|0)|0)-1|0)>>>0>99>>>0)){if(!((Wx(f|0)|0)>>>0>4>>>0)){break}}Mn(d,29752,29440)}}while(0);f=Jn(d,29008)|0;if((a[f]|0)==0){i=50}else{g=Vc(f|0)|0;if((g|0)<1){j=1}else{f=c[(c[64902]|0)+32>>2]|0;j=(g|0)>(f|0)?f:g}i=1e3/(j|0)|0}j=b+84964|0;if((i|0)!=(c[j>>2]|0)){c[b+68176>>2]=0;c[j>>2]=i}if((Gm(e)|0)==0){k=Dm(e)|0}else{k=54416}e=Jn(d,52208)|0;i=(a[e]|0)==0;j=Wx(k|0)|0;if(i){l=j+4+(Wx(d|0)|0)|0}else{i=j-(Wx(e|0)|0)|0;l=i+(Wx(d|0)|0)|0}if((l|0)>1023){rf(b,28664);return}else{Mn(d,52208,k);return}}function tf(b){b=b|0;var d=0,e=0,f=0;Wg(b);d=b+67744|0;e=c[d>>2]|0;if((e|0)!=0){Uk(e)}c[d>>2]=0;a[b+67680|0]=0;d=0;do{e=b+67768+(d<<2)|0;f=c[e>>2]|0;if((f|0)!=0){mj(f);c[e>>2]=0}d=d+1|0;}while((d|0)<48);return}function uf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;$i(37880,(e=i,i=i+8|0,c[e>>2]=a+67648,e)|0);i=e;c[a>>2]=4;yg(a);f=a;g=(f-(c[33781]|0)|0)/121936|0;h=ng(g)|0;c[h>>2]=g;c[a+67644>>2]=h;c[a+68160>>2]=-1;c[a+68176>>2]=0;h=a+66588|0;if((b|0)==0){Zx(h|0,0,24)|0}else{a=b;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[h+12>>2]=c[a+12>>2];c[h+16>>2]=c[a+16>>2];c[h+20>>2]=c[a+20>>2]}Co(c[196754]|0,3,(e=i,i=i+8|0,c[e>>2]=(f-(c[33781]|0)|0)/121936|0,e)|0)|0;i=e;i=d;return}function vf(b,d){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=i;i=i+1088|0;f=e|0;g=e+1024|0;h=b+67680|0;if((a[h]|0)==0){j=0;k=64;l=0;m=1024;n=0;i=e;return j|0}o=b+67744|0;a:do{if((c[o>>2]|0)==0){xn(g,64,37536,(p=i,i=i+8|0,c[p>>2]=h,p)|0)|0;i=p;q=Vb(g|0,46)|0;b:do{if((q|0)==0){r=1;s=0}else{a[q]=0;if((tn(q+1|0,37160)|0)!=0){r=1;s=0;break}Oi(Cl()|0);t=xi()|0;if((t|0)>0){u=0}else{r=1;s=0;break}while(1){v=u+1|0;if((Yk(yi(u)|0,g)|0)==0){break}if((v|0)<(t|0)){u=v}else{r=1;s=0;break b}}r=(Mk(g,36704,9)|0)==0;s=1}}while(0);c[o>>2]=0;do{if((c[(c[64910]|0)+32>>2]&5|0)==1&r&s){q=Tk(h,o)|0;c[b+67748>>2]=q;if((q|0)<0){break}_i(31696,(p=i,i=i+16|0,c[p>>2]=(b-(c[33781]|0)|0)/121936|0,c[p+8>>2]=h,p)|0);i=p;c[b+68152>>2]=0;Zx(b+67752|0,0,16)|0;w=0;x=0;break a}}while(0);do{if(s){if(!r){_i(34688,(p=i,i=i+16|0,c[p>>2]=(b-(c[33781]|0)|0)/121936|0,c[p+8>>2]=h,p)|0);i=p;xn(f,1024,34272,(p=i,i=i+8|0,c[p>>2]=h,p)|0)|0;i=p;break}q=(b-(c[33781]|0)|0)/121936|0;if((c[(c[64910]|0)+32>>2]&5|0)==1){_i(32088,(p=i,i=i+16|0,c[p>>2]=q,c[p+8>>2]=h,p)|0);i=p;xn(f,1024,32032,(p=i,i=i+8|0,c[p>>2]=h,p)|0)|0;i=p;break}_i(33712,(p=i,i=i+16|0,c[p>>2]=q,c[p+8>>2]=h,p)|0);i=p;if((c[(c[64854]|0)+32>>2]|0)==0){xn(f,1024,32472,(p=i,i=i+8|0,c[p>>2]=h,p)|0)|0;i=p;break}else{xn(f,1024,32992,(p=i,i=i+8|0,c[p>>2]=h,p)|0)|0;i=p;break}}else{_i(36008,(p=i,i=i+16|0,c[p>>2]=(b-(c[33781]|0)|0)/121936|0,c[p+8>>2]=h,p)|0);i=p;xn(f,1024,35200,(p=i,i=i+8|0,c[p>>2]=h,p)|0)|0;i=p}}while(0);$l(d,6);bm(d,0);cm(d,-1);dm(d,f);a[h]=0;q=c[o>>2]|0;if((q|0)==0){j=0;k=64;l=0;m=1024;n=0;i=e;return j|0}Uk(q);j=0;k=64;l=0;m=1024;n=0;i=e;return j|0}else{w=c[b+67760>>2]|0;x=c[b+67756>>2]|0}}while(0);h=b+67760|0;f=b+67756|0;c:do{if((w-x|0)<48){r=b+67748|0;s=b+67752|0;g=w;u=c[s>>2]|0;while(1){if((c[r>>2]|0)==(u|0)){y=u;z=r;A=33;break c}q=(g|0)%48|0;t=b+67768+(q<<2)|0;v=c[t>>2]|0;if((v|0)==0){B=oj(1024)|0;c[t>>2]=B;C=B}else{C=v}v=bl(C,1024,c[o>>2]|0)|0;c[b+67960+(q<<2)>>2]=v;if((v|0)<0){break}q=(c[s>>2]|0)+v|0;c[s>>2]=q;v=(c[h>>2]|0)+1|0;c[h>>2]=v;if((v-(c[f>>2]|0)|0)<48){g=v;u=q}else{y=q;z=r;A=33;break c}}c[s>>2]=c[r>>2];D=b+67748|0;A=34}else{y=c[b+67752>>2]|0;z=b+67748|0;A=33}}while(0);if((A|0)==33){o=b+67748|0;if((y|0)==(c[z>>2]|0)){D=o;A=34}else{E=o}}do{if((A|0)==34){o=b+68152|0;if((c[o>>2]|0)!=0){E=D;break}z=c[h>>2]|0;if((z-(c[f>>2]|0)|0)>=48){E=D;break}c[b+67960+(((z|0)%48|0)<<2)>>2]=0;c[h>>2]=(c[h>>2]|0)+1;c[o>>2]=1;E=D}}while(0);D=c[f>>2]|0;f=c[h>>2]|0;if((D|0)==(f|0)){j=0;k=64;l=0;m=1024;n=0;i=e;return j|0}h=b+67764|0;A=c[h>>2]|0;do{if((A|0)==(f|0)){if(((c[33779]|0)-(c[b+68156>>2]|0)|0)>1e3){c[h>>2]=D;F=D;break}else{j=0;k=64;l=0;m=1024;n=0;i=e;return j|0}}else{F=A}}while(0);A=(F|0)%48|0;$l(d,6);bm(d,c[h>>2]|0);if((c[h>>2]|0)==0){cm(d,c[E>>2]|0)}E=b+67960+(A<<2)|0;bm(d,c[E>>2]|0);F=c[E>>2]|0;if((F|0)!=0){am(d,c[b+67768+(A<<2)>>2]|0,F)}F=c[h>>2]|0;$i(31368,(p=i,i=i+16|0,c[p>>2]=(b-(c[33781]|0)|0)/121936|0,c[p+8>>2]=F,p)|0);i=p;c[h>>2]=(c[h>>2]|0)+1;c[b+68156>>2]=c[33779];j=1;k=64;l=0;m=1024;n=0;i=e;return j|0}function wf(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0;if((c[(c[64874]|0)+32>>2]|0)>0){a=-1;b=0}else{d=-1;return d|0}while(1){e=(c[33781]|0)+(b*121936|0)|0;do{if((c[e>>2]|0)==0){f=a}else{g=Tg(e)|0;if((g|0)==0){h=Xg(e)|0}else{h=g}if(!((h|0)>-1)){f=a;break}f=(a|0)==-1|(a|0)>(h|0)?h:a}}while(0);e=b+1|0;if((e|0)<(c[(c[64874]|0)+32>>2]|0)){a=f;b=e}else{d=f;break}}return d|0}function xf(){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;b=i;i=i+16416|0;d=b|0;e=b+32|0;if((c[(c[64874]|0)+32>>2]|0)>0){f=0;g=0}else{h=0;j=16384;k=0;i=b;return h|0}while(1){l=c[33781]|0;m=l+(g*121936|0)|0;do{if((c[m>>2]|0)==0){n=f}else{if((a[l+(g*121936|0)+67680|0]|0)==0){n=f;break}Tl(d,e,16384);cm(d,c[l+(g*121936|0)+66616>>2]|0);o=vf(m,d)|0;if((o|0)==0){n=f;break}$l(d,8);Yg(m,d);n=o+f|0}}while(0);m=g+1|0;if((m|0)<(c[(c[64874]|0)+32>>2]|0)){f=n;g=m}else{h=n;break}}j=16384;k=0;i=b;return h|0}function yf(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;e=i;Mi(b);b=672;while(1){f=yi(0)|0;if((Tx(f,c[b>>2]|0)|0)==0){g=4;break}f=b+8|0;if((c[f>>2]|0)==0){h=0;j=f;break}else{b=f}}if((g|0)==4){je[c[b+4>>2]&127](a);h=1;j=b}if((d|0)==0){if((h|0)!=0){i=e;return}h=yi(0)|0;$i(28328,(k=i,i=i+16|0,c[k>>2]=a+67648,c[k+8>>2]=h,k)|0);i=k;i=e;return}if(!((c[j>>2]|0)==0&(c[64912]|0)==2)){i=e;return}if(!(((c[a>>2]|0)-3|0)>>>0<2>>>0)){i=e;return}Li();Co(c[196754]|0,6,(k=i,i=i+8|0,c[k>>2]=(a-(c[33781]|0)|0)/121936|0,k)|0)|0;i=k;i=e;return}function zf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;e=a+66588|0;f=b;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[a>>2]|0)!=4){i=d;return}Co(c[196754]|0,7,(f=i,i=i+8|0,c[f>>2]=(a-(c[33781]|0)|0)/121936|0,f)|0)|0;i=f;i=d;return}function Af(b,d){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;e=i;Wl(d);f=hm(d)|0;g=hm(d)|0;h=b+66576|0;c[h>>2]=g;if((g|0)<0){i=e;return}g=hm(d)|0;j=b+66568|0;c[j>>2]=g;k=c[b+66564>>2]|0;if((g|0)<(k-64|0)){c[j>>2]=k;i=e;return}k=c[64914]|0;j=(f|0)==(k|0);do{if(j){l=11}else{if((a[b+67680|0]|0)!=0){l=12;break}if((nb(b+66620|0,27952)|0)!=0){l=11;break}if((f|0)>=(c[64915]|0)&(f|0)<(k|0)){$i(27504,(m=i,i=i+8|0,c[m>>2]=b+67648,m)|0);i=m;i=e;return}if((c[h>>2]|0)<=(c[b+66580>>2]|0)){i=e;return}$i(27080,(m=i,i=i+8|0,c[m>>2]=b+67648,m)|0);i=m;Bf(b);i=e;return}}while(0);do{if((l|0)==11){h=b+117836|0;if(!((c[h>>2]|0)!=0&j)){l=12;break}k=b+67648|0;$i(26280,(m=i,i=i+8|0,c[m>>2]=k,m)|0);i=m;c[h>>2]=0;n=k}}while(0);if((l|0)==12){n=b+67648|0}j=b+66616|0;k=b|0;h=b+68164|0;f=b+66620|0;while(1){g=fm(d)|0;if((g|0)==3){l=26;break}else if((g|0)==2){l=25;break}else if((g|0)==5){l=28;break}else if((g|0)!=4){l=27;break}o=hm(d)|0;g=im(d)|0;if((c[j>>2]|0)<(o|0)){$i(24160,(m=i,i=i+24|0,c[m>>2]=n,c[m+8>>2]=o,c[m+16>>2]=g,m)|0);i=m;p=c[j>>2]|0;if((o|0)>(p+1|0)){l=23;break}do{if((c[(c[430914]|0)+32>>2]|0)==0){if(!((c[k>>2]|0)>>>0>3>>>0)){q=1;break}if((c[(c[64904]|0)+32>>2]|0)==0){q=1;break}q=(c[33779]|0)>=(c[h>>2]|0)|0}else{q=1}}while(0);c[h>>2]=(c[33779]|0)+1e3;yf(b,g,q);c[j>>2]=o;xn(f,1024,37536,(m=i,i=i+8|0,c[m>>2]=g,m)|0)|0;i=m}if((c[k>>2]|0)==1){l=28;break}}if((l|0)==23){_i(23872,(m=i,i=i+16|0,c[m>>2]=n,c[m+8>>2]=o+1-p,m)|0);i=m;rf(b,23624);i=e;return}else if((l|0)==25){Cf(b,d,1);i=e;return}else if((l|0)==26){Cf(b,d,0);i=e;return}else if((l|0)==27){_i(25672,(m=i,i=i+8|0,c[m>>2]=(b-(c[33781]|0)|0)/121936|0,m)|0);i=m;i=e;return}else if((l|0)==28){i=e;return}}function Bf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+16624|0;e=d|0;f=d+208|0;g=e;h=b+67648|0;$i(23448,(j=i,i=i+8|0,c[j>>2]=h,j)|0);i=j;$i(22840,(j=i,i=i+8|0,c[j>>2]=h,j)|0);i=j;c[b>>2]=3;c[b+84968>>2]=0;c[b+84972>>2]=0;c[b+66580>>2]=c[b+85024>>2];Tl(f,d+240|0,16384);cm(f,c[b+66616>>2]|0);_g(b,f);$l(f,2);cm(f,c[b+66564>>2]|0);j=0;do{h=259684+(j<<2)|0;if((a[c[h>>2]|0]|0)!=0){$l(f,3);bm(f,j);em(f,c[h>>2]|0)}j=j+1|0;}while((j|0)<1024);Zx(g|0,0,208)|0;g=0;do{j=263788+(g*300|0)|0;if((c[j>>2]|0)!=0){$l(f,4);nm(f,e,j,1)}g=g+1|0;}while((g|0)<1024);$l(f,8);cm(f,(b-(c[33781]|0)|0)/121936|0);cm(f,c[64916]|0);$g(f,b);i=d;return}function Cf(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+792|0;f=e|0;g=e+24|0;h=g;if((d|0)==0){c[a+68160>>2]=-1}else{c[a+68160>>2]=c[a+66576>>2]}d=fm(b)|0;if((d|0)<1){_i(25448,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=768;l=0;i=e;return}if((d|0)>32){_i(25216,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;k=768;l=0;i=e;return}m=a+66576|0;n=c[m>>2]^c[64916];o=n^(km(a+1028+((c[a+66568>>2]&63)<<10)|0,32)|0);Zx(f|0,0,24)|0;n=0;p=f;while(1){f=g+(n*24|0)|0;lm(b,o,p,f);q=n+1|0;if((q|0)<(d|0)){n=q;p=f}else{break}}c[a+68188+((c[m>>2]&31)*524|0)+516>>2]=c[33779];m=c[(c[64854]|0)+32>>2]|0;do{if((m|0)!=0){if((c[a+84968>>2]|0)!=0){break}if((c[a+84972>>2]|0)!=0){break}if((c[a>>2]|0)!=4){k=768;l=0;i=e;return}$i(24792,(j=i,i=i+8|0,c[j>>2]=a+67648,j)|0);i=j;Bf(a);k=768;l=0;i=e;return}}while(0);p=a|0;if((c[p>>2]|0)==3){$i(37880,(j=i,i=i+8|0,c[j>>2]=a+67648,j)|0);i=j;c[p>>2]=4;yg(a);n=a;o=(n-(c[33781]|0)|0)/121936|0;b=ng(o)|0;c[b>>2]=o;c[a+67644>>2]=b;c[a+68160>>2]=-1;c[a+68176>>2]=0;b=a+66588|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];c[b+16>>2]=c[h+16>>2];c[b+20>>2]=c[h+20>>2];Co(c[196754]|0,3,(j=i,i=i+8|0,c[j>>2]=(n-(c[33781]|0)|0)/121936|0,j)|0)|0;i=j;r=c[(c[64854]|0)+32>>2]|0}else{r=m}do{if((r|0)!=0){if((c[a+84968>>2]|0)!=0){break}rf(a,24448);k=768;l=0;i=e;return}}while(0);if((c[p>>2]|0)!=4){c[a+68160>>2]=-1;k=768;l=0;i=e;return}r=g+((d-1|0)*24|0)|0;m=a+66588|0;n=a+66588|0;h=a;a=0;do{b=g+(a*24|0)|0;o=c[b>>2]|0;do{if((o|0)<=(c[r>>2]|0)){if((o|0)<=(c[m>>2]|0)){break}f=b;c[n>>2]=c[f>>2];c[n+4>>2]=c[f+4>>2];c[n+8>>2]=c[f+8>>2];c[n+12>>2]=c[f+12>>2];c[n+16>>2]=c[f+16>>2];c[n+20>>2]=c[f+20>>2];if((c[p>>2]|0)!=4){break}Co(c[196754]|0,7,(j=i,i=i+8|0,c[j>>2]=(h-(c[33781]|0)|0)/121936|0,j)|0)|0;i=j}}while(0);a=a+1|0;}while((a|0)<(d|0));k=768;l=0;i=e;return}function Df(a){a=a|0;var b=0,d=0;b=i;rn(a+4|0,yi(1)|0,1024);sf(a);Co(c[196754]|0,4,(d=i,i=i+8|0,c[d>>2]=(a-(c[33781]|0)|0)/121936|0,d)|0)|0;i=d;i=b;return}function Ef(a){a=a|0;rf(a,18248);return}function Ff(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,B=0,C=0,D=0;d=i;i=i+8208|0;e=d|0;f=d+8|0;g=d+16|0;h=d+4112|0;if((c[(c[64854]|0)+32>>2]|0)==0){j=4096;k=0;l=4096;m=0;i=d;return}c[f>>2]=0;c[e>>2]=0;if((fl(18776,e)|0)==1){n=(fl(18624,f)|0)==1|0}else{n=0}o=xi()|0;p=yi(1)|0;a:do{if((p|0)==0){q=34}else{r=Vc(p|0)|0;if((r|0)<(c[64917]|0)){$i(18472,(r=i,i=i+8|0,c[r>>2]=b+67648,r)|0);i=r;j=4096;k=0;l=4096;m=0;i=d;return}if((n|0)==0|(o|0)<6){q=34;break}r=yi(2)|0;if((r|0)==0){q=34;break}if((a[r]|0)==64){q=34;break}s=Vc(r|0)|0;if((s|0)!=(c[e>>2]|0)){q=34;break}s=yi(3)|0;if((s|0)==0){q=34;break}if((a[s]|0)==64){q=34;break}r=Vc(s|0)|0;if((r|0)!=(c[f>>2]|0)){q=34;break}if((a[yi(4)|0]|0)!=64){q=34;break}b:do{if((o|0)>5){r=0;s=5;while(1){t=s+1|0;c[g+(r<<2)>>2]=Vc(yi(s)|0)|0;if((t|0)<(o|0)){r=r+1|0;s=t}else{break}}s=o-6|0;r=(s|0)>0;if(r){u=0}else{v=s;w=0;break}c:while(1){t=g+(u<<2)|0;x=0;do{if((u|0)!=(x|0)){if((c[t>>2]|0)==(c[g+(x<<2)>>2]|0)){break c}}x=x+1|0;}while((x|0)<(s|0));x=u+1|0;if((x|0)<(s|0)){u=x}else{v=s;w=r;break b}}c[b+84972>>2]=1;y=b+84968|0;break a}else{v=-1;w=0}}while(0);Mi(Al()|0);r=xi()|0;s=(r|0)>1024?1024:r;r=(s|0)>0;if(r){x=0;do{c[h+(x<<2)>>2]=Vc(yi(x)|0)|0;x=x+1|0;}while((x|0)<(s|0))}do{if(w){if(r){z=0}else{q=34;break a}do{x=c[g+(z<<2)>>2]|0;t=0;while(1){A=t+1|0;if((x|0)==(c[h+(t<<2)>>2]|0)){break}if((A|0)<(s|0)){t=A}else{q=34;break a}}z=z+1|0;}while((z|0)<(v|0));t=c[64916]|0;c[e>>2]=t;if(w){B=0;C=t}else{D=t;break}do{C=C^c[g+(B<<2)>>2];B=B+1|0;}while((B|0)<(v|0));c[e>>2]=C;D=C}else{t=c[64916]|0;c[e>>2]=t;D=t}}while(0);s=D^v;c[e>>2]=s;r=c[g+(v<<2)>>2]|0;c[b+84972>>2]=1;t=b+84968|0;if((s|0)!=(r|0)){y=t;break}c[t>>2]=1;j=4096;k=0;l=4096;m=0;i=d;return}}while(0);if((q|0)==34){c[b+84972>>2]=1;y=b+84968|0}c[y>>2]=0;c[b+68176>>2]=0;c[b>>2]=4;ah(b);rf(b,18344);j=4096;k=0;l=4096;m=0;i=d;return}function Gf(a){a=a|0;c[a+84968>>2]=0;c[a+84972>>2]=0;return}function Hf(b){b=b|0;var d=0,e=0,f=0,g=0;d=b+67744|0;e=c[d>>2]|0;if((e|0)!=0){Uk(e)}c[d>>2]=0;d=b+67680|0;a[d]=0;e=0;do{f=b+67768+(e<<2)|0;g=c[f>>2]|0;if((g|0)!=0){mj(g);c[f>>2]=0}e=e+1|0;}while((e|0)<48);rn(d,yi(1)|0,64);return}function If(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=Vc(yi(1)|0)|0;f=b+67756|0;if((e|0)!=(c[f>>2]|0)){rf(b,19032);i=d;return}g=b;$i(19744,(h=i,i=i+16|0,c[h>>2]=(g-(c[33781]|0)|0)/121936|0,c[h+8>>2]=e,h)|0);i=h;e=c[f>>2]|0;if((c[b+67960+(((e|0)%48|0)<<2)>>2]|0)!=0){c[b+68156>>2]=c[33779];c[f>>2]=e+1;i=d;return}e=b+67680|0;_i(19272,(h=i,i=i+16|0,c[h>>2]=(g-(c[33781]|0)|0)/121936|0,c[h+8>>2]=e,h)|0);i=h;h=b+67744|0;g=c[h>>2]|0;if((g|0)!=0){Uk(g)}c[h>>2]=0;a[e]=0;e=0;do{h=b+67768+(e<<2)|0;g=c[h>>2]|0;if((g|0)!=0){mj(g);c[h>>2]=0}e=e+1|0;}while((e|0)<48);i=d;return}function Jf(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;e=b+67680|0;if((a[e]|0)!=0){$i(20312,(f=i,i=i+16|0,c[f>>2]=(b-(c[33781]|0)|0)/121936|0,c[f+8>>2]=e,f)|0);i=f}f=b+67744|0;g=c[f>>2]|0;if((g|0)!=0){Uk(g)}c[f>>2]=0;a[e]=0;e=0;do{f=b+67768+(e<<2)|0;g=c[f>>2]|0;if((g|0)!=0){mj(g);c[f>>2]=0}e=e+1|0;}while((e|0)<48);i=d;return}function Kf(a){a=a|0;var b=0,d=0;b=i;if((c[a>>2]|0)==4){i=b;return}$i(20520,(d=i,i=i+8|0,c[d>>2]=a+67648,d)|0);i=d;Bf(a);i=b;return}function Lf(){c[33785]=-9999999;return}function Mf(){if(a[61264]|0){return}a[61264]=1;Pi(16576,88);Pi(59320,32);Pi(48680,34);Pi(41448,90);Pi(36624,118);Pi(31352,118);Pi(27072,30);Pi(23432,72);Pi(20296,84);Pi(17984,80);Pi(60848,6);Pi(59280,96);Pi(57504,78);Qi(57504,34);Pi(55992,78);Qi(55992,34);Pi(55008,78);Qi(55008,34);Pi(54048,78);Qi(54048,34);Pi(52872,82);if((c[(c[430624]|0)+32>>2]|0)!=0){Pi(51912,68);Pi(50976,100)}Pi(50192,104);Pi(49408,44);Pi(48648,54);Pi(47360,120);Pi(46288,114);Pi(45768,42);Pi(44848,122);return}function Nf(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}if((xi()|0)!=2){_i(60952,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}d=mg()|0;if((d|0)!=0){if((c[d+84984>>2]|0)==2){_i(16688,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}else{rf(d,16512);c[d+68168>>2]=c[33779];i=a;return}}if((tn(yi(1)|0,60864)|0)==0){d=c[64874]|0;if((c[d+32>>2]|0)<=0){i=a;return}b=c[33781]|0;e=0;f=d;while(1){do{if((c[b>>2]|0)==0){g=f}else{if((c[b+84984>>2]|0)==2){g=f;break}rf(b,16512);c[b+68168>>2]=c[33779];g=c[64874]|0}}while(0);d=e+1|0;if((d|0)<(c[g+32>>2]|0)){b=b+121936|0;e=d;f=g}else{break}}i=a;return}if((tn(yi(1)|0,60384)|0)!=0){i=a;return}g=c[64874]|0;if((c[g+32>>2]|0)<=0){i=a;return}f=c[33781]|0;e=0;b=g;while(1){do{if((c[f>>2]|0)==0){h=b}else{if((c[f+84984>>2]|0)!=1){h=b;break}rf(f,16512);c[f+68168>>2]=c[33779];h=c[64874]|0}}while(0);g=e+1|0;if((g|0)<(c[h+32>>2]|0)){f=f+121936|0;e=g;b=h}else{break}}i=a;return}function Of(){var a=0,b=0,d=0,e=0,f=0,g=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}b=c[64874]|0;if((c[b+32>>2]|0)<=0){i=a;return}d=c[33781]|0;e=0;f=b;while(1){do{if((c[d>>2]|0)==0){g=f}else{if((c[d+84984>>2]|0)!=1){g=f;break}rf(d,16512);c[d+68168>>2]=c[33779];g=c[64874]|0}}while(0);b=e+1|0;if((b|0)<(c[g+32>>2]|0)){d=d+121936|0;e=b;f=g}else{break}}i=a;return}function Pf(){var a=0,b=0,d=0,e=0,f=0,g=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}b=c[64874]|0;if((c[b+32>>2]|0)<=0){i=a;return}d=c[33781]|0;e=0;f=b;while(1){do{if((c[d>>2]|0)==0){g=f}else{if((c[d+84984>>2]|0)==2){g=f;break}rf(d,16512);c[d+68168>>2]=c[33779];g=c[64874]|0}}while(0);b=e+1|0;if((b|0)<(c[g+32>>2]|0)){d=d+121936|0;e=b;f=g}else{break}}i=a;return}function Qf(){var a=0,b=0,d=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}if((xi()|0)!=2){d=yi(0)|0;_i(16800,(b=i,i=i+8|0,c[b>>2]=d,b)|0);i=b;i=a;return}d=kg()|0;if((d|0)==0){i=a;return}if((c[d+84984>>2]|0)==2){_i(16688,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}else{rf(d,16512);c[d+68168>>2]=c[33779];i=a;return}}function Rf(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}_i(19648,(b=i,i=i+8|0,c[b>>2]=c[(c[64888]|0)+4>>2],b)|0);i=b;_i(19168,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;_i(18928,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;d=c[64874]|0;if((c[d+32>>2]|0)>0){e=c[33781]|0;f=0;g=d;while(1){d=e|0;if((c[d>>2]|0)==0){h=g}else{_i(18760,(b=i,i=i+8|0,c[b>>2]=f,b)|0);i=b;j=c[(og(f)|0)+248>>2]|0;_i(18600,(b=i,i=i+8|0,c[b>>2]=j,b)|0);i=b;j=c[d>>2]|0;if((j|0)==2){_i(18440,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b}else if((j|0)==1){_i(18320,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b}else{j=c[e+84956>>2]|0;_i(18224,(b=i,i=i+8|0,c[b>>2]=(j|0)<9999?j:9999,b)|0);i=b}j=e+67648|0;_i(18096,(b=i,i=i+8|0,c[b>>2]=j,b)|0);i=b;_i(18e3,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;d=14-(Wx(j|0)|0)|0;j=0;do{_i(17624,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;j=j+1|0;}while((j|0)<(d|0));_i(17312,(b=i,i=i+8|0,c[b>>2]=(c[33779]|0)-(c[e+68168>>2]|0),b)|0);i=b;d=Dm(e+84984|0)|0;_i(18096,(b=i,i=i+8|0,c[b>>2]=d,b)|0);i=b;j=22-(Wx(d|0)|0)|0;d=0;do{_i(17624,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;d=d+1|0;}while((d|0)<(j|0));_i(17208,(b=i,i=i+8|0,c[b>>2]=c[e+85016>>2],b)|0);i=b;_i(17128,(b=i,i=i+8|0,c[b>>2]=c[e+84960>>2],b)|0);i=b;_i(16960,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;h=c[64874]|0}j=f+1|0;if((j|0)<(c[h+32>>2]|0)){e=e+121936|0;f=j;g=h}else{break}}}_i(16960,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}function Sf(){var a=0,b=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}else{_i(20232,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;gj(Dk(4)|0);i=a;return}}function Tf(){var a=0,b=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}else{_i(20456,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;gj(Ek(8)|0);i=a;return}}function Uf(){var a=0,b=0,d=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}if((xi()|0)!=2){_i(21384,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}d=mg()|0;if((d|0)==0){i=a;return}_i(21112,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;_i(20920,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;gj(d+4|0);i=a;return}function Vf(){var a=0,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;a=i;i=i+64|0;b=a|0;if((c[429590]|0)==(c[64914]|0)){i=a;return}if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=a;return}if((c[142751]|0)!=0){i=a;return}if((xi()|0)>1){e=Vc(yi(1)|0)|0;if((e|0)==0){f=0}else{g=e;h=7}}else{g=5;h=7}do{if((h|0)==7){if(+dk(25096)!=0.0){f=g;break}e=(c[142752]|0)+(g*1e3|0)|0;c[142751]=e;j=Hn(23568,(d=i,i=i+8|0,c[d>>2]=e,d)|0)|0;i=d;zg(5,j);i=a;return}}while(0);do{if((c[(c[64874]|0)+20>>2]|0)==0){if((c[(c[64900]|0)+20>>2]|0)!=0){break}c[33780]=c[33780]^4;g=c[429590]|0;c[64914]=g;h=Hn(23568,(d=i,i=i+8|0,c[d>>2]=g,d)|0)|0;i=d;nk(22232,h);h=(c[64874]|0)+32|0;g=c[h>>2]|0;if((g|0)>0){j=c[33781]|0;e=0;k=g;while(1){if((c[j+(e*121936|0)>>2]|0)==3){c[j+(e*121936|0)+117836>>2]=c[142751];l=c[h>>2]|0}else{l=k}g=e+1|0;if((g|0)<(l|0)){e=g;k=l}else{break}}}c[64912]=1;c[64913]=1;vg();Co(c[196754]|0,8,(d=i,i=i+8|0,c[d>>2]=c[142752],d)|0)|0;i=d;k=(c[142752]|0)+100|0;c[142752]=k;c[33779]=(c[33779]|0)+100;Co(c[196754]|0,8,(d=i,i=i+8|0,c[d>>2]=k,d)|0)|0;i=d;k=(c[142752]|0)+100|0;c[142752]=k;c[33779]=(c[33779]|0)+100;Co(c[196754]|0,8,(d=i,i=i+8|0,c[d>>2]=k,d)|0)|0;i=d;k=(c[142752]|0)+100|0;c[142752]=k;c[33779]=(c[33779]|0)+100;c[64912]=2;c[64913]=0;if((c[(c[64874]|0)+32>>2]|0)>0){e=0;do{h=c[33781]|0;j=h+(e*121936|0)|0;g=j|0;do{if(!((c[g>>2]|0)>>>0<2>>>0)){m=(c[h+(e*121936|0)+84984>>2]|0)==1|0;Jg(j,22040);n=c[196754]|0;o=Co(n,2,(d=i,i=i+24|0,c[d>>2]=e,c[d+8>>2]=0,c[d+16>>2]=m,d)|0)|0;i=d;m=Bo(n,o)|0;if((m|0)!=0){rf(j,m);_i(21760,(d=i,i=i+16|0,c[d>>2]=f,c[d+8>>2]=e,d)|0);i=d;break}if((c[g>>2]|0)==4){uf(j,h+(e*121936|0)+66588|0);break}else{uf(j,0);break}}}while(0);e=e+1|0;}while((e|0)<(c[(c[64874]|0)+32>>2]|0));p=c[142752]|0}else{p=k}Co(c[196754]|0,8,(d=i,i=i+8|0,c[d>>2]=p,d)|0)|0;i=d;c[142752]=(c[142752]|0)+100;c[33779]=(c[33779]|0)+100;i=a;return}}while(0);p=b|0;_i(23360,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;rn(p,fk(22752)|0,64);Eg(p,0,0);i=a;return}function Wf(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;a=i;i=i+128|0;b=a|0;d=a+64|0;e=yi(1)|0;if((e|0)==0){f=64;g=0;h=64;j=0;i=a;return}xn(b,64,28272,(k=i,i=i+8|0,c[k>>2]=e,k)|0)|0;i=k;do{if((hl(b,0)|0)==-1){xn(b,64,27872,(k=i,i=i+8|0,c[k>>2]=e,k)|0)|0;i=k;if((nb(fk(27448)|0,b|0)|0)!=0){break}_i(26984,(k=i,i=i+8|0,c[k>>2]=e,k)|0);i=k;f=64;g=0;h=64;j=0;i=a;return}}while(0);jk(26176,25600,38)|0;k=yi(0)|0;do{if((Cn(k,25416,2)|0)==0){qk(26176,2.0);qk(25096,0.0);pk(24696,24400);l=1;m=(tn(k+2|0,55992)|0)==0|0}else{b=(tn(k,55992)|0)==0|0;if((c[(c[64900]|0)+32>>2]|0)!=2){l=b;m=b;break}qk(26176,0.0);l=b;m=b}}while(0);rn(d,e,64);e=Xi(24,4)|0;c[c[e>>2]>>2]=m;Eg(d,l,e);f=64;g=0;h=64;j=0;i=a;return}function Xf(a,b){a=a|0;b=b|0;if((b|0)!=2){return}Tj(28936,28632,1,0);return}function Yf(){Ig(52872);return}function Zf(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;i=i+1024|0;d=b|0;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=1024;g=0;i=b;return}if((xi()|0)<2){f=1024;g=0;i=b;return}Vx(d|0,29384,10)|0;h=Hi()|0;if((a[h]|0)==34){j=h+1|0;a[h+(Wx(j|0)|0)|0]=0;k=j}else{k=h}$x(d|0,k|0)|0;Kg(0,29672,(e=i,i=i+8|0,c[e>>2]=d,e)|0);i=e;f=1024;g=0;i=b;return}function _f(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;i=i+1024|0;d=b|0;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=1024;g=0;i=b;return}if((xi()|0)<3){_i(30488,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=1024;g=0;i=b;return}h=kg()|0;if((h|0)==0){f=1024;g=0;i=b;return}Vx(d|0,29968,15)|0;j=Ji(2)|0;if((a[j]|0)==34){k=j+1|0;a[j+(Wx(k|0)|0)|0]=0;l=k}else{l=j}$x(d|0,l|0)|0;Kg(h,29672,(e=i,i=i+8|0,c[e>>2]=d,e)|0);i=e;f=1024;g=0;i=b;return}function $f(){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;b=i;i=i+72|0;d=b|0;e=b+8|0;if((c[(c[423400]|0)+32>>2]|0)==0){f=64;g=0;i=b;return}c[144110]=0;h=c[(c[64908]|0)+4>>2]|0;if((h|0)==0){f=64;g=0;i=b;return}if((a[h]|0)==0){f=64;g=0;i=b;return}h=Ml()|0;j=c[(c[64908]|0)+4>>2]|0;xn(e,64,42936,(k=i,i=i+16|0,c[k>>2]=h,c[k+8>>2]=j,k)|0)|0;i=k;k=Tk(e,d)|0;if(!((k|0)>-1)){f=64;g=0;i=b;return}if((k|0)<2){Uk(c[d>>2]|0);f=64;g=0;i=b;return}e=oj(k)|0;j=bl(e,k,c[d>>2]|0)|0;Uk(c[d>>2]|0);d=e+j|0;j=e;k=0;a:while(1){h=j+2|0;if(h>>>0<d>>>0){l=h}else{m=k;break}while(1){n=l+1|0;if((a[l]|0)==32){o=l;break}if(n>>>0<d>>>0){l=n}else{o=n;break}}n=o+1|0;if(!(n>>>0<d>>>0)){m=k;break}a[o]=0;p=n;while(1){q=p+1|0;if((a[p]|0)==10){break}if(q>>>0<d>>>0){p=q}else{m=k;break a}}a[p]=0;r=576448+(k*40|0)|0;do{if((ym(h,r|0,7)|0)!=0){c[576484+(k*40|0)>>2]=(a[j]|0)!=48;s=Vc(n|0)|0;t=576480+(k*40|0)|0;c[t>>2]=s;u=c[r>>2]|0;if((u|0)==5){if(!((s-1|0)>>>0>127>>>0)){break}c[t>>2]=128;break}else if((u|0)==4){if(!((s-1|0)>>>0>31>>>0)){break}c[t>>2]=32;break}else{break}}}while(0);r=k+1|0;if((r|0)<1024){j=q;k=r}else{m=r;break}}c[144110]=m;mj(e);f=64;g=0;i=b;return}function ag(){var a=0,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;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}d=c[144110]|0;if((d|0)>0){e=0;f=0;g=d}else{i=a;return}while(1){if((c[576484+(e*40|0)>>2]|0)==0){d=f+1|0;h=Dm(576448+(e*40|0)|0)|0;j=c[576480+(e*40|0)>>2]|0;_i(31624,(b=i,i=i+24|0,c[b>>2]=d,c[b+8>>2]=h,c[b+16>>2]=j,b)|0);i=b;k=d;l=c[144110]|0}else{k=f;l=g}d=e+1|0;if((d|0)<(l|0)){e=d;f=k;g=l}else{break}}if((l|0)>0){m=0;n=0;o=l}else{i=a;return}while(1){if((c[576484+(m*40|0)>>2]|0)==0){p=n;q=o}else{l=n+1|0;g=Dm(576448+(m*40|0)|0)|0;k=c[576480+(m*40|0)>>2]|0;_i(31264,(b=i,i=i+24|0,c[b>>2]=l,c[b+8>>2]=g,c[b+16>>2]=k,b)|0);i=b;p=l;q=c[144110]|0}l=m+1|0;if((l|0)<(q|0)){m=l;n=p;o=q}else{break}}i=a;return}function bg(){jg(0);return}function cg(){jg(1);return}function dg(){ig(0);return}function eg(){ig(1);return}function fg(){var a=0,b=0;a=i;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}else{c[144110]=0;hg();_i(43520,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}}function gg(){return}function hg(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;i=i+192|0;d=b|0;e=c[(c[64908]|0)+4>>2]|0;if((e|0)==0){f=64;g=0;i=b;return}if((a[e]|0)==0){f=64;g=0;i=b;return}e=Ml()|0;h=c[(c[64908]|0)+4>>2]|0;xn(d,64,42936,(j=i,i=i+16|0,c[j>>2]=e,c[j+8>>2]=h,j)|0)|0;i=j;h=Sk(d)|0;if((h|0)==0){f=64;g=0;i=b;return}d=b+64|0;if((c[144110]|0)>0){e=0;do{k=c[576484+(e*40|0)>>2]|0;l=Dm(576448+(e*40|0)|0)|0;m=c[576480+(e*40|0)>>2]|0;xn(d,128,42360,(j=i,i=i+24|0,c[j>>2]=k,c[j+8>>2]=l,c[j+16>>2]=m,j)|0)|0;i=j;cl(d,Wx(d|0)|0,h)|0;e=e+1|0;}while((e|0)<(c[144110]|0))}Uk(h);f=64;g=0;i=b;return}function ig(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;d=i;i=i+32|0;e=d|0;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=d;return}if((xi()|0)!=2){g=yi(0)|0;_i(41848,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;i=d;return}g=yi(1)|0;a:do{if((Ib(g|0,46)|0)==0){if((Ib(g|0,58)|0)!=0){h=7;break}j=Vc(yi(1)|0)|0;k=c[144110]|0;if((j|0)<1|(j|0)>(k|0)){_i(39040,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=d;return}if((k|0)>0){l=0;m=0}else{break}while(1){if((c[576484+(m*40|0)>>2]|0)==(b|0)){n=l+1|0;if((n|0)==(j|0)){break}else{o=n}}else{o=l}n=m+1|0;if((n|0)<(k|0)){l=o;m=n}else{break a}}k=Dm(576448+(m*40|0)|0)|0;j=c[576480+(m*40|0)>>2]|0;_i(40600,(f=i,i=i+24|0,c[f>>2]=(b|0)!=0?39952:39528,c[f+8>>2]=k,c[f+16>>2]=j,f)|0);i=f;j=c[144110]|0;k=j-1|0;if((k|0)!=(m|0)){if(!(m>>>0<1023>>>0)){break}_x(576448+(m*40|0)|0,576448+((m+1|0)*40|0)|0,((j-m|0)*40|0)-40|0)|0}c[144110]=k}else{h=7}}while(0);b:do{if((h|0)==7){m=Ib(g|0,47)|0;if((m|0)==0){p=0}else{a[m]=0;p=m+1|0}if((ym(g,e,7)|0)==0){_i(41392,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;i=d;return}do{if((p|0)==0){q=(c[e>>2]|0)==4?32:128}else{m=Vc(p|0)|0;o=m-1|0;if((c[e>>2]|0)==4){q=o>>>0>31>>>0?32:m;break}else{q=o>>>0>127>>>0?128:m;break}}}while(0);m=c[144110]|0;if((m|0)<=0){break}o=(b|0)!=0?39952:39528;l=0;k=m;while(1){m=576484+(l*40|0)|0;j=576480+(l*40|0)|0;n=576448+(l*40|0)|0;r=l>>>0<1023>>>0;s=576448+(l*40|0)|0;t=l+1|0;u=576448+(t*40|0)|0;v=k;while(1){if((c[m>>2]|0)!=(b|0)){w=v;break}if((c[j>>2]|0)<(q|0)){w=v;break}if((Bm(n,e,q)|0)==0){h=21;break}x=Dm(n)|0;y=c[j>>2]|0;_i(40600,(f=i,i=i+24|0,c[f>>2]=o,c[f+8>>2]=x,c[f+16>>2]=y,f)|0);i=f;y=c[144110]|0;x=y-1|0;do{if((x|0)==(l|0)){h=26}else{if(!r){z=y;break}_x(s|0,u|0,((y-l|0)*40|0)-40|0)|0;h=26}}while(0);if((h|0)==26){h=0;c[144110]=x;z=x}if((l|0)<(z|0)){v=z}else{break b}}if((h|0)==21){h=0;w=c[144110]|0}if((t|0)<(w|0)){l=t;k=w}else{break}}}}while(0);hg();i=d;return}function jg(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,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=i;i=i+80|0;e=d+48|0;f=d|0;if((c[(c[423400]|0)+32>>2]|0)==0){_i(44176,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;h=48;j=0;i=d;return}k=xi()|0;if((k-2|0)>>>0>1>>>0){l=yi(0)|0;_i(38528,(g=i,i=i+8|0,c[g>>2]=l,g)|0);i=g;h=48;j=0;i=d;return}if((c[144110]|0)>>>0>1024>>>0){_i(38120,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;h=48;j=0;i=d;return}l=yi(1)|0;do{if((Ib(l|0,46)|0)==0){if((Ib(l|0,58)|0)!=0){m=9;break}n=kg()|0;if((n|0)==0){o=yi(1)|0;_i(37768,(g=i,i=i+8|0,c[g>>2]=o,g)|0);i=g;h=48;j=0;i=d;return}Vx(e|0,n+84984|0,32)|0;if((k|0)!=3){n=c[e>>2]|0;p=(n|0)==5?128:32;q=n;m=25;break}n=Vc(yi(2)|0)|0;o=c[e>>2]|0;r=n-1|0;if((o|0)==4){s=r>>>0>31>>>0?32:n;break}else{p=r>>>0>127>>>0?128:n;q=o;m=25;break}}else{m=9}}while(0);do{if((m|0)==9){k=Ib(l|0,47)|0;if((k|0)==0){t=0}else{a[k]=0;t=k+1|0}if((ym(l,e,7)|0)==0){_i(41392,(g=i,i=i+8|0,c[g>>2]=l,g)|0);i=g;h=48;j=0;i=d;return}if((t|0)==0){k=c[e>>2]|0;p=(k|0)==4?32:128;q=k;m=25;break}k=Vc(t|0)|0;o=c[e>>2]|0;n=k-1|0;if((o|0)==4){s=n>>>0>31>>>0?32:k;break}else{p=n>>>0>127>>>0?128:k;q=o;m=25;break}}}while(0);do{if((m|0)==25){if((q-4|0)>>>0<2>>>0){s=p;break}_i(37400,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;h=48;j=0;i=d;return}}while(0);p=c[144110]|0;a:do{if((p|0)>0){q=(b|0)!=0;t=(b|0)==0;l=0;b:while(1){o=576448+(l*40|0)|0;u=576480+(l*40|0)|0;k=c[u>>2]|0;do{if((k|0)>(s|0)){v=k}else{w=576484+(l*40|0)|0;if(!((c[w>>2]|0)!=0|t)){v=k;break}x=o|0;if((Bm(x,e,k)|0)!=0){m=35;break b}v=c[u>>2]|0}}while(0);do{if((v|0)>=(s|0)){y=576484+(l*40|0)|0;if((c[y>>2]|0)!=0|q^1){break}z=o|0;if((Bm(z,e,s)|0)!=0){m=39;break b}}}while(0);o=l+1|0;A=c[144110]|0;if((o|0)<(A|0)){l=o}else{m=29;break}}if((m|0)==29){if((A|0)<=0){B=A;break}l=(b|0)==0;t=0;while(1){o=576480+(t*40|0)|0;k=576484+(t*40|0)|0;n=576448+(t*40|0)|0;r=t>>>0<1023>>>0;C=576448+(t*40|0)|0;D=t+1|0;E=576448+(D*40|0)|0;c:do{if(l){if(r){while(1){if((c[o>>2]|0)<=(s|0)){break c}if((c[k>>2]|0)!=0){break c}if((Bm(n,e,s)|0)==0){break c}F=c[144110]|0;G=F-1|0;if((G|0)!=(t|0)){_x(C|0,E|0,((F-t|0)*40|0)-40|0)|0}c[144110]=G;if((t|0)>=(G|0)){B=G;break a}}}else{while(1){if((c[o>>2]|0)<=(s|0)){break c}if((c[k>>2]|0)!=0){break c}if((Bm(n,e,s)|0)==0){break c}G=c[144110]|0;F=G-1|0;if((F|0)==(t|0)){c[144110]=F;H=F}else{H=G}if((t|0)>=(H|0)){B=H;break a}}}}else{if(r){while(1){if((c[o>>2]|0)<=(s|0)){break c}if((Bm(n,e,s)|0)==0){break c}G=c[144110]|0;F=G-1|0;if((F|0)!=(t|0)){_x(C|0,E|0,((G-t|0)*40|0)-40|0)|0}c[144110]=F;if((t|0)>=(F|0)){B=F;break a}}}else{while(1){if((c[o>>2]|0)<=(s|0)){break c}if((Bm(n,e,s)|0)==0){break c}F=c[144110]|0;G=F-1|0;if((G|0)==(t|0)){c[144110]=G;I=G}else{I=F}if((t|0)>=(I|0)){B=I;break a}}}}}while(0);n=c[144110]|0;if((D|0)<(n|0)){t=D}else{B=n;break}}}else if((m|0)==35){rn(f,Dm(e)|0,48);t=(c[w>>2]|0)!=0?36584:35680;l=Dm(x)|0;n=c[u>>2]|0;_i(37040,(g=i,i=i+48|0,c[g>>2]=t,c[g+8>>2]=l,c[g+16>>2]=n,c[g+24>>2]=q?39952:39528,c[g+32>>2]=f,c[g+40>>2]=s,g)|0);i=g;h=48;j=0;i=d;return}else if((m|0)==39){rn(f,Dm(z)|0,48);n=Dm(e)|0;l=(c[y>>2]|0)!=0?39952:39528;t=c[u>>2]|0;_i(35064,(g=i,i=i+48|0,c[g>>2]=36584,c[g+8>>2]=n,c[g+16>>2]=s,c[g+24>>2]=l,c[g+32>>2]=f,c[g+40>>2]=t,g)|0);i=g;h=48;j=0;i=d;return}}else{B=p}}while(0);Vx(576448+(B*40|0)|0,e|0,32)|0;c[576480+(B*40|0)>>2]=s;c[576484+(B*40|0)>>2]=b;c[144110]=B+1;hg();B=Dm(e)|0;_i(34576,(g=i,i=i+24|0,c[g>>2]=(b|0)!=0?34184:39528,c[g+8>>2]=B,c[g+16>>2]=s,g)|0);i=g;h=48;j=0;i=d;return}function kg(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;if((c[(c[423400]|0)+32>>2]|0)==0){d=0;i=b;return d|0}if((xi()|0)<2){_i(33624,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;d=0;i=b;return d|0}f=yi(1)|0;g=a[f]|0;a:do{if(!(g<<24>>24==0)){h=0;j=g;while(1){h=h+1|0;if((j-48&255)>>>0>9>>>0){break}j=a[f+h|0]|0;if(j<<24>>24==0){break a}}_i(32888,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e;d=0;i=b;return d|0}}while(0);g=Vc(f|0)|0;do{if((g|0)>=0){if((g|0)>=(c[(c[64874]|0)+32>>2]|0)){break}f=(c[33781]|0)+(g*121936|0)|0;if((c[f>>2]|0)!=0){d=f;i=b;return d|0}_i(31944,(e=i,i=i+8|0,c[e>>2]=g,e)|0);i=e;d=0;i=b;return d|0}}while(0);_i(32384,(e=i,i=i+8|0,c[e>>2]=g,e)|0);i=e;d=0;i=b;return d|0}function lg(a,b){a=a|0;b=b|0;var d=0;b=c[a>>2]|0;d=c[b>>2]|0;if((b|0)!=0){Gx(b)}Gx(a);c[469154]=(c[469154]|0)-1;if((d|0)==0){nk(24104,25600);return}else{nk(24104,23832);return}}function mg(){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;b=i;i=i+64|0;d=b|0;if((c[(c[423400]|0)+32>>2]|0)==0){e=0;f=64;g=0;i=b;return e|0}if((xi()|0)<2){_i(33624,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;e=0;f=64;g=0;i=b;return e|0}j=yi(1)|0;k=0;while(1){l=a[j+k|0]|0;if((l-48&255)>>>0<10>>>0){k=k+1|0}else{break}}do{if(l<<24>>24==0){k=Vc(j|0)|0;if(!((k|0)>-1)){break}if((k|0)>=(c[(c[64874]|0)+32>>2]|0)){break}m=(c[33781]|0)+(k*121936|0)|0;if((c[m>>2]|0)==0){break}else{e=m}f=64;g=0;i=b;return e|0}}while(0);l=c[64874]|0;a:do{if((c[l+32>>2]|0)>0){m=0;k=c[33781]|0;n=l;while(1){if((c[k>>2]|0)==0){o=n}else{p=k+67648|0;if((tn(p,j)|0)==0){e=k;q=18;break}rn(d,p,64);Fn(d)|0;if((tn(d,j)|0)==0){e=k;q=18;break}o=c[64874]|0}p=m+1|0;if((p|0)<(c[o+32>>2]|0)){m=p;k=k+121936|0;n=o}else{break a}}if((q|0)==18){f=64;g=0;i=b;return e|0}}}while(0);_i(20752,(h=i,i=i+8|0,c[h>>2]=j,h)|0);i=h;e=0;f=64;g=0;i=b;return e|0}function ng(a){a=a|0;return(c[142746]|0)+(da(c[142747]|0,a)|0)|0}function og(a){a=a|0;return(c[142749]|0)+(da(c[142750]|0,a)|0)|0}function pg(a){a=a|0;var b=0,d=0;b=i;do{if((a|0)!=0){d=c[a>>2]|0;if(d>>>0>1023>>>0){break}i=b;return 263780+(d*300|0)|0}}while(0);aj(1,49912,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;return 0}function qg(a){a=a|0;return(c[142746]|0)+(da(c[142747]|0,(a-263780|0)/300|0)|0)|0}function rg(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+32|0;f=e|0;h=e+16|0;if((d|0)==0){aj(1,47472,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}if((a[d]|0)==42){k=Vc(d+1|0)|0;c[b+160>>2]=k;l=f|0;m=h|0;Eh(zh(k)|0,l,m);g[b+436>>2]=+g[l>>2];g[b+440>>2]=+g[f+4>>2];g[b+444>>2]=+g[f+8>>2];g[b+448>>2]=+g[m>>2];g[b+452>>2]=+g[h+4>>2];g[b+456>>2]=+g[h+8>>2];c[b+432>>2]=1;c[b+460>>2]=-1;jh(b);i=e;return}else{aj(1,40688,(j=i,i=i+8|0,c[j>>2]=d,j)|0);i=j}}function sg(a,b){a=a|0;b=b|0;var c=0,e=0,f=0,g=0;c=Xh(a)|0;a=Bh(c)|0;e=Ch(c)|0;c=bi(a)|0;a=Xh(b)|0;b=Bh(a)|0;f=Ch(a)|0;do{if((c|0)!=0){if(((d[c+(b>>3)|0]|0)&1<<(b&7)|0)==0){g=0}else{break}return g|0}}while(0);g=(fi(e,f)|0)!=0|0;return g|0}function tg(b){b=b|0;var e=0,f=0,h=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0;e=i;i=i+112|0;f=e|0;h=e+56|0;j=c[b>>2]|0;switch(j|0){case 8:{l=xi()|0;i=e;return l|0};case 15:{m=Ao(c[b+4>>2]|0)|0;n=c[b+8>>2]|0;o=c[b+12>>2]|0;p=Ao(c[b+16>>2]|0)|0;q=c[b+20>>2]|0;c[142746]=m;c[142747]=o;c[142748]=n;c[142749]=p;c[142750]=q;l=0;i=e;return l|0};case 16:{q=c[b+4>>2]|0;p=Ao(c[b+8>>2]|0)|0;if((q|0)<0){l=0;i=e;return l|0}if((c[(c[64874]|0)+32>>2]|0)<=(q|0)){l=0;i=e;return l|0}rf((c[33781]|0)+(q*121936|0)|0,p);l=0;i=e;return l|0};case 33:{p=Ao(c[b+4>>2]|0)|0;q=Ao(c[b+8>>2]|0)|0;n=Ao(c[b+12>>2]|0)|0;vi(h,62464,62464,p,q,eh(n)|0,-1,n+488|0,n+500|0,0);l=c[h+4>>2]|0;i=e;return l|0};case 10:{h=Ao(c[b+4>>2]|0)|0;l=Kl(h,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0)|0;i=e;return l|0};case 0:{h=Ao(c[b+4>>2]|0)|0;_i(57680,(r=i,i=i+8|0,c[r>>2]=h,r)|0);i=r;l=0;i=e;return l|0};case 3:{h=Ao(c[b+4>>2]|0)|0;n=Ao(c[b+8>>2]|0)|0;Gk(h,n,Ao(c[b+12>>2]|0)|0,c[b+16>>2]|0);l=0;i=e;return l|0};case 1:{n=Ao(c[b+4>>2]|0)|0;aj(1,57680,(r=i,i=i+8|0,c[r>>2]=n,r)|0);i=r;return 0};case 28:{n=Ao(c[b+4>>2]|0)|0;h=c[b+8>>2]|0;if((n|0)==0){aj(1,49912,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;return 0}q=c[n>>2]|0;if(q>>>0>1023>>>0){aj(1,49912,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;return 0}n=c[264072+(q*300|0)>>2]|0;if((n|0)==-1){l=0;i=e;return l|0}ei(c[264068+(q*300|0)>>2]|0,n,h);l=0;i=e;return l|0};case 29:{l=fi(c[b+4>>2]|0,c[b+8>>2]|0)|0;i=e;return l|0};case 34:{l=Re()|0;i=e;return l|0};case 35:{Se(c[b+4>>2]|0);l=0;i=e;return l|0};case 36:{h=c[b+4>>2]|0;n=Ao(c[b+8>>2]|0)|0;if((h|0)<0){aj(1,30640,(r=i,i=i+8|0,c[r>>2]=h,r)|0);i=r;return 0}if((c[(c[64874]|0)+32>>2]|0)<=(h|0)){aj(1,30640,(r=i,i=i+8|0,c[r>>2]=h,r)|0);i=r;return 0}q=(c[33781]|0)+(h*121936|0)+66588|0;c[n>>2]=c[q>>2];c[n+4>>2]=c[q+4>>2];c[n+8>>2]=c[q+8>>2];c[n+12>>2]=c[q+12>>2];c[n+16>>2]=c[q+16>>2];c[n+20>>2]=c[q+20>>2];l=0;i=e;return l|0};case 5:{ok(Ao(c[b+4>>2]|0)|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 11:{al(Ao(c[b+4>>2]|0)|0,c[b+8>>2]|0,c[b+12>>2]|0)|0;l=0;i=e;return l|0};case 44:{q=Ao(c[b+4>>2]|0)|0;n=Ao(c[b+8>>2]|0)|0;h=Ao(c[b+12>>2]|0)|0;vi(f,62464,62464,q,n,eh(h)|0,-1,h+488|0,h+500|0,1);l=c[f+4>>2]|0;i=e;return l|0};case 25:{l=oh(Ao(c[b+4>>2]|0)|0,c[b+8>>2]|0)|0;i=e;return l|0};case 579:{l=be[c[(c[636256]|0)+508>>2]&127](c[b+4>>2]|0)|0;i=e;return l|0};case 580:{f=c[(c[636256]|0)+512>>2]|0;h=c[b+4>>2]|0;n=Ao(c[b+8>>2]|0)|0;l=qe[f&63](h,n)|0;i=e;return l|0};case 27:{n=Ao(c[b+4>>2]|0)|0;h=Ao(c[b+8>>2]|0)|0;f=bi(Bh(Xh(n)|0)|0)|0;n=Bh(Xh(h)|0)|0;do{if((f|0)!=0){if((d[f+(n>>3)|0]&1<<(n&7)|0)==0){l=0}else{break}i=e;return l|0}}while(0);l=1;i=e;return l|0};case 30:{jh(Ao(c[b+4>>2]|0)|0);l=0;i=e;return l|0};case 31:{ih(Ao(c[b+4>>2]|0)|0);l=0;i=e;return l|0};case 23:{rg(Ao(c[b+4>>2]|0)|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 26:{l=sg(Ao(c[b+4>>2]|0)|0,Ao(c[b+8>>2]|0)|0)|0;i=e;return l|0};case 2:{l=Jd()|0;i=e;return l|0};case 17:{n=c[b+4>>2]|0;f=Ao(c[b+8>>2]|0)|0;if((n|0)==-1){Kg(0,57680,(r=i,i=i+8|0,c[r>>2]=f,r)|0);i=r;l=0;i=e;return l|0}if((n|0)<0){l=0;i=e;return l|0}if((c[(c[64874]|0)+32>>2]|0)<=(n|0)){l=0;i=e;return l|0}Kg((c[33781]|0)+(n*121936|0)|0,57680,(r=i,i=i+8|0,c[r>>2]=f,r)|0);i=r;l=0;i=e;return l|0};case 32:{f=Ao(c[b+4>>2]|0)|0;n=Ao(c[b+8>>2]|0)|0;l=kh(f,n,Ao(c[b+12>>2]|0)|0,c[b+16>>2]|0)|0;i=e;return l|0};case 9:{n=c[b+4>>2]|0;Ii(n,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0);l=0;i=e;return l|0};case 14:{Bi(c[b+4>>2]|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 37:{n=yn(570980)|0;rn(Ao(c[b+4>>2]|0)|0,n,c[b+8>>2]|0);do{if((c[142745]|0)==0){if((a[n]|0)==0){l=0}else{break}i=e;return l|0}}while(0);l=1;i=e;return l|0};case 39:{l=Te(c[b+4>>2]|0,c[b+8>>2]|0,Ao(c[b+12>>2]|0)|0)|0;i=e;return l|0};case 40:{Ue(c[b+4>>2]|0);l=0;i=e;return l|0};case 41:{l=kj(Ao(c[b+4>>2]|0)|0)|0;i=e;return l|0};case 42:{n=Ao(c[b+4>>2]|0)|0;f=n;g[f>>2]=+xb(+(+g[f>>2]));f=n+4|0;g[f>>2]=+xb(+(+g[f>>2]));f=n+8|0;g[f>>2]=+xb(+(+g[f>>2]));l=0;i=e;return l|0};case 200:{l=We()|0;i=e;return l|0};case 201:{l=Xe()|0;i=e;return l|0};case 202:{f=c[(c[636256]|0)+492>>2]|0;n=Ao(c[b+4>>2]|0)|0;h=Ao(c[b+8>>2]|0)|0;l=qe[f&63](n,h)|0;i=e;return l|0};case 203:{h=c[(c[636256]|0)+496>>2]|0;n=Ao(c[b+4>>2]|0)|0;f=Ao(c[b+8>>2]|0)|0;l=he[h&63](n,f,c[b+12>>2]|0)|0;i=e;return l|0};case 18:{zg(c[b+4>>2]|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 19:{f=c[b+4>>2]|0;Ag(f,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0);l=0;i=e;return l|0};case 21:{Bg(c[b+4>>2]|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 20:{f=c[b+4>>2]|0;Cg(f,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0);l=0;i=e;return l|0};case 22:{f=Ao(c[b+4>>2]|0)|0;n=c[b+8>>2]|0;if((n|0)<1){aj(1,35856,(r=i,i=i+8|0,c[r>>2]=n,r)|0);i=r;return 0}rn(f,Dk(4)|0,n);l=0;i=e;return l|0};case 24:{n=Ao(c[b+4>>2]|0)|0;f=Ao(c[b+8>>2]|0)|0;h=Ao(c[b+12>>2]|0)|0;q=Ao(c[b+16>>2]|0)|0;nh(n,f,h,q,Ao(c[b+20>>2]|0)|0,c[b+24>>2]|0,c[b+28>>2]|0,0);l=0;i=e;return l|0};case 45:{l=el(c[b+4>>2]|0,c[b+8>>2]|0,c[b+12>>2]|0)|0;i=e;return l|0};case 13:{Uk(c[b+4>>2]|0);l=0;i=e;return l|0};case 4:{Hk(Ao(c[b+4>>2]|0)|0);l=0;i=e;return l|0};case 581:{q=c[(c[636256]|0)+516>>2]|0;h=c[b+4>>2]|0;f=Ao(c[b+8>>2]|0)|0;n=Ao(c[b+12>>2]|0)|0;l=he[q&63](h,f,n)|0;i=e;return l|0};case 205:{l=ge[c[(c[636256]|0)+520>>2]&7](+g[b+4>>2])|0;i=e;return l|0};case 204:{n=c[(c[636256]|0)+500>>2]|0;f=Ao(c[b+4>>2]|0)|0;l=be[n&127](f)|0;i=e;return l|0};case 578:{f=c[(c[636256]|0)+504>>2]|0;n=Ao(c[b+4>>2]|0)|0;l=be[f&127](n)|0;i=e;return l|0};case 38:{n=Ao(c[b+4>>2]|0)|0;f=Ao(c[b+8>>2]|0)|0;l=ll(n,f,Ao(c[b+12>>2]|0)|0,c[b+16>>2]|0)|0;i=e;return l|0};case 43:{f=Ao(c[b+4>>2]|0)|0;n=Ao(c[b+8>>2]|0)|0;h=Ao(c[b+12>>2]|0)|0;q=Ao(c[b+16>>2]|0)|0;nh(f,n,h,q,Ao(c[b+20>>2]|0)|0,c[b+24>>2]|0,c[b+28>>2]|0,1);l=0;i=e;return l|0};case 12:{cl(Ao(c[b+4>>2]|0)|0,c[b+8>>2]|0,c[b+12>>2]|0)|0;l=0;i=e;return l|0};case 7:{q=Ao(c[b+4>>2]|0)|0;gk(q,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0);l=0;i=e;return l|0};case 6:{l=ek(Ao(c[b+4>>2]|0)|0)|0;i=e;return l|0};case 206:{q=c[(c[636256]|0)+524>>2]|0;h=Ao(c[b+4>>2]|0)|0;l=be[q&127](h)|0;i=e;return l|0};case 207:{h=c[(c[636256]|0)+528>>2]|0;q=c[b+4>>2]|0;n=Ao(c[b+8>>2]|0)|0;l=qe[h&63](q,n)|0;i=e;return l|0};case 208:{n=c[(c[636256]|0)+532>>2]|0;q=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;f=Ao(c[b+12>>2]|0)|0;p=Ao(c[b+16>>2]|0)|0;l=xe[n&31](q,h,f,p)|0;i=e;return l|0};case 209:{l=of(c[b+4>>2]|0,c[b+8>>2]|0)|0;i=e;return l|0};case 210:{p=c[b+4>>2]|0;l=nf(p,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0)|0;i=e;return l|0};case 211:{zf((c[33781]|0)+((c[b+4>>2]|0)*121936|0)|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 301:{p=c[(c[636256]|0)+28>>2]|0;f=Ao(c[b+4>>2]|0)|0;h=Ao(c[b+8>>2]|0)|0;q=Ao(c[b+12>>2]|0)|0;l=xe[p&31](f,h,q,c[b+16>>2]|0)|0;i=e;return l|0};case 302:{q=c[(c[636256]|0)+32>>2]|0;h=c[b+4>>2]|0;f=Ao(c[b+8>>2]|0)|0;l=qe[q&63](h,f)|0;i=e;return l|0};case 575:{f=c[(c[636256]|0)+76>>2]|0;h=Ao(c[b+4>>2]|0)|0;q=c[b+8>>2]|0;p=Ao(c[b+12>>2]|0)|0;n=c[b+16>>2]|0;o=c[b+20>>2]|0;m=Ao(c[b+24>>2]|0)|0;l=we[f&7](h,q,p,n,o,m,c[b+28>>2]|0,c[b+32>>2]|0)|0;i=e;return l|0};case 303:{m=c[c[636256]>>2]|0;o=c[b+4>>2]|0;n=Ao(c[b+8>>2]|0)|0;ae[m&127](o,n);l=0;i=e;return l|0};case 304:{l=se[c[(c[636256]|0)+4>>2]&31]()|0;i=e;return l|0};case 305:{n=c[(c[636256]|0)+8>>2]|0;o=c[b+4>>2]|0;m=Ao(c[b+8>>2]|0)|0;p=Ao(c[b+12>>2]|0)|0;ue[n&31](o,m,p);l=0;i=e;return l|0};case 306:{s=+re[c[(c[636256]|0)+12>>2]&7]();l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 307:{p=c[(c[636256]|0)+16>>2]|0;m=Ao(c[b+4>>2]|0)|0;l=be[p&127](m)|0;i=e;return l|0};case 577:{m=c[(c[636256]|0)+20>>2]|0;p=Ao(c[b+4>>2]|0)|0;l=be[m&127](p)|0;i=e;return l|0};case 308:{p=c[(c[636256]|0)+24>>2]|0;m=Ao(c[b+4>>2]|0)|0;o=Ao(c[b+8>>2]|0)|0;n=Ao(c[b+12>>2]|0)|0;q=Ao(c[b+16>>2]|0)|0;l=te[p&15](m,o,n,q,c[b+20>>2]|0)|0;i=e;return l|0};case 309:{q=c[(c[636256]|0)+36>>2]|0;n=Ao(c[b+4>>2]|0)|0;l=be[q&127](n)|0;i=e;return l|0};case 310:{l=be[c[(c[636256]|0)+40>>2]&127](c[b+4>>2]|0)|0;i=e;return l|0};case 311:{n=c[(c[636256]|0)+44>>2]|0;q=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;m=Ao(c[b+12>>2]|0)|0;l=xe[n&31](q,o,m,c[b+16>>2]|0)|0;i=e;return l|0};case 312:{m=c[(c[636256]|0)+48>>2]|0;o=c[b+4>>2]|0;q=Ao(c[b+8>>2]|0)|0;n=Ao(c[b+12>>2]|0)|0;l=he[m&63](o,q,n)|0;i=e;return l|0};case 313:{n=c[(c[636256]|0)+52>>2]|0;q=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;m=Ao(c[b+12>>2]|0)|0;l=he[n&63](q,o,m)|0;i=e;return l|0};case 314:{m=c[(c[636256]|0)+56>>2]|0;o=c[b+4>>2]|0;q=Ao(c[b+8>>2]|0)|0;n=Ao(c[b+12>>2]|0)|0;l=he[m&63](o,q,n)|0;i=e;return l|0};case 315:{l=be[c[(c[636256]|0)+60>>2]&127](c[b+4>>2]|0)|0;i=e;return l|0};case 316:{n=c[(c[636256]|0)+64>>2]|0;q=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;l=xe[n&31](q,o,c[b+12>>2]|0,c[b+16>>2]|0)|0;i=e;return l|0};case 300:{l=qe[c[(c[636256]|0)+68>>2]&63](c[b+4>>2]|0,c[b+8>>2]|0)|0;i=e;return l|0};case 576:{o=c[(c[636256]|0)+72>>2]|0;q=Ao(c[b+4>>2]|0)|0;n=c[b+8>>2]|0;m=Ao(c[b+12>>2]|0)|0;l=ie[o&7](q,n,m,c[b+16>>2]|0,c[b+20>>2]|0,c[b+24>>2]|0,c[b+28>>2]|0,c[b+32>>2]|0,c[b+36>>2]|0,c[b+40>>2]|0,c[b+44>>2]|0)|0;i=e;return l|0};case 317:{m=c[(c[636256]|0)+80>>2]|0;n=Ao(c[b+4>>2]|0)|0;l=be[m&127](n)|0;i=e;return l|0};case 318:{n=c[(c[636256]|0)+84>>2]|0;m=Ao(c[b+4>>2]|0)|0;q=c[b+8>>2]|0;o=Ao(c[b+12>>2]|0)|0;p=c[b+16>>2]|0;h=c[b+20>>2]|0;f=Ao(c[b+24>>2]|0)|0;t=Ao(c[b+28>>2]|0)|0;l=$d[n&7](m,q,o,p,h,f,t,c[b+32>>2]|0,c[b+36>>2]|0,+g[b+40>>2],c[b+44>>2]|0,c[b+48>>2]|0,c[b+52>>2]|0)|0;i=e;return l|0};case 400:{t=c[(c[636256]|0)+92>>2]|0;f=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;ae[t&127](f,h);l=0;i=e;return l|0};case 401:{h=c[(c[636256]|0)+96>>2]|0;f=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;ae[h&127](f,t);l=0;i=e;return l|0};case 402:{t=c[(c[636256]|0)+88>>2]|0;f=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;ae[t&127](f,h);l=0;i=e;return l|0};case 403:{ae[c[(c[636256]|0)+100>>2]&127](c[b+4>>2]|0,c[b+8>>2]|0);l=0;i=e;return l|0};case 404:{je[c[(c[636256]|0)+104>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 405:{je[c[(c[636256]|0)+108>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 406:{je[c[(c[636256]|0)+112>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 407:{je[c[(c[636256]|0)+116>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 408:{je[c[(c[636256]|0)+120>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 409:{je[c[(c[636256]|0)+148>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 410:{je[c[(c[636256]|0)+124>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 411:{je[c[(c[636256]|0)+128>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 412:{je[c[(c[636256]|0)+132>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 413:{je[c[(c[636256]|0)+136>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 414:{je[c[(c[636256]|0)+140>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 415:{je[c[(c[636256]|0)+144>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 416:{ae[c[(c[636256]|0)+152>>2]&127](c[b+4>>2]|0,c[b+8>>2]|0);l=0;i=e;return l|0};case 417:{je[c[(c[636256]|0)+156>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 418:{je[c[(c[636256]|0)+160>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 419:{h=c[(c[636256]|0)+164>>2]|0;f=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;ye[h&7](f,t,+g[b+12>>2]);l=0;i=e;return l|0};case 420:{t=c[(c[636256]|0)+168>>2]|0;f=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;ae[t&127](f,h);l=0;i=e;return l|0};case 421:{Zd[c[(c[636256]|0)+172>>2]&7](c[b+4>>2]|0,+g[b+8>>2]);l=0;i=e;return l|0};case 422:{h=c[(c[636256]|0)+176>>2]|0;f=c[b+4>>2]|0;s=+g[b+8>>2];t=Ao(c[b+12>>2]|0)|0;ke[h&7](f,s,t);l=0;i=e;return l|0};case 423:{je[c[(c[636256]|0)+180>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 500:{t=c[(c[636256]|0)+184>>2]|0;f=Ao(c[b+4>>2]|0)|0;l=ne[t&7](f,+g[b+8>>2])|0;i=e;return l|0};case 501:{je[c[(c[636256]|0)+188>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 502:{s=+le[c[(c[636256]|0)+192>>2]&7](c[b+4>>2]|0,c[b+8>>2]|0);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 503:{s=+pe[c[(c[636256]|0)+196>>2]&7](c[b+4>>2]|0,c[b+8>>2]|0,+g[b+12>>2],+g[b+16>>2]);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 504:{l=qe[c[(c[636256]|0)+200>>2]&63](c[b+4>>2]|0,c[b+8>>2]|0)|0;i=e;return l|0};case 505:{l=xe[c[(c[636256]|0)+204>>2]&31](c[b+4>>2]|0,c[b+8>>2]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;i=e;return l|0};case 506:{f=c[(c[636256]|0)+208>>2]|0;t=c[b+4>>2]|0;h=c[b+8>>2]|0;p=Ao(c[b+12>>2]|0)|0;ze[f&15](t,h,p,c[b+16>>2]|0);l=0;i=e;return l|0};case 507:{l=se[c[(c[636256]|0)+212>>2]&31]()|0;i=e;return l|0};case 508:{je[c[(c[636256]|0)+216>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 509:{p=c[(c[636256]|0)+220>>2]|0;h=c[b+4>>2]|0;t=c[b+8>>2]|0;f=Ao(c[b+12>>2]|0)|0;ue[p&31](h,t,f);l=0;i=e;return l|0};case 510:{ae[c[(c[636256]|0)+224>>2]&127](c[b+4>>2]|0,c[b+8>>2]|0);l=0;i=e;return l|0};case 511:{f=c[(c[636256]|0)+228>>2]|0;t=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;l=qe[f&63](t,h)|0;i=e;return l|0};case 512:{l=be[c[(c[636256]|0)+232>>2]&127](c[b+4>>2]|0)|0;i=e;return l|0};case 513:{h=c[(c[636256]|0)+236>>2]|0;t=c[b+4>>2]|0;f=Ao(c[b+8>>2]|0)|0;p=c[b+12>>2]|0;o=Ao(c[b+16>>2]|0)|0;q=Ao(c[b+20>>2]|0)|0;m=Ao(c[b+24>>2]|0)|0;n=Ao(c[b+28>>2]|0)|0;u=Ao(c[b+32>>2]|0)|0;v=Ao(c[b+36>>2]|0)|0;w=Ao(c[b+40>>2]|0)|0;x=Ao(c[b+44>>2]|0)|0;ce[h&7](t,f,p,o,q,m,n,u,v,w,x);l=0;i=e;return l|0};case 569:{x=c[(c[636256]|0)+240>>2]|0;w=c[b+4>>2]|0;v=Ao(c[b+8>>2]|0)|0;l=qe[x&63](w,v)|0;i=e;return l|0};case 514:{v=c[(c[636256]|0)+244>>2]|0;w=c[b+4>>2]|0;x=Ao(c[b+8>>2]|0)|0;u=c[b+12>>2]|0;n=c[b+16>>2]|0;m=Ao(c[b+20>>2]|0)|0;q=Ao(c[b+24>>2]|0)|0;o=Ao(c[b+28>>2]|0)|0;p=Ao(c[b+32>>2]|0)|0;f=Ao(c[b+36>>2]|0)|0;t=Ao(c[b+40>>2]|0)|0;h=Ao(c[b+44>>2]|0)|0;y=Ao(c[b+48>>2]|0)|0;l=me[v&7](w,x,u,n,m,q,o,p,f,t,h,y)|0;i=e;return l|0};case 515:{l=be[c[(c[636256]|0)+248>>2]&127](c[b+4>>2]|0)|0;i=e;return l|0};case 516:{ue[c[(c[636256]|0)+252>>2]&31](c[b+4>>2]|0,c[b+8>>2]|0,c[b+12>>2]|0);l=0;i=e;return l|0};case 570:{y=c[(c[636256]|0)+256>>2]|0;h=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;ue[y&31](h,t,c[b+12>>2]|0);l=0;i=e;return l|0};case 517:{t=c[(c[636256]|0)+260>>2]|0;h=Ao(c[b+4>>2]|0)|0;y=Ao(c[b+8>>2]|0)|0;l=he[t&63](h,y,c[b+12>>2]|0)|0;i=e;return l|0};case 518:{y=c[(c[636256]|0)+264>>2]|0;h=Ao(c[b+4>>2]|0)|0;t=Ao(c[b+8>>2]|0)|0;l=he[y&63](h,t,c[b+12>>2]|0)|0;i=e;return l|0};case 519:{t=c[(c[636256]|0)+268>>2]|0;h=Ao(c[b+4>>2]|0)|0;y=c[b+8>>2]|0;f=Ao(c[b+12>>2]|0)|0;ze[t&15](h,y,f,c[b+16>>2]|0);l=0;i=e;return l|0};case 520:{f=c[(c[636256]|0)+272>>2]|0;y=Ao(c[b+4>>2]|0)|0;je[f&127](y);l=0;i=e;return l|0};case 521:{y=c[(c[636256]|0)+276>>2]|0;f=Ao(c[b+4>>2]|0)|0;ae[y&127](f,c[b+8>>2]|0);l=0;i=e;return l|0};case 522:{f=c[(c[636256]|0)+280>>2]|0;y=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;t=Ao(c[b+12>>2]|0)|0;l=he[f&63](y,h,t)|0;i=e;return l|0};case 523:{ae[c[(c[636256]|0)+284>>2]&127](c[b+4>>2]|0,c[b+8>>2]|0);l=0;i=e;return l|0};case 524:{t=c[(c[636256]|0)+288>>2]|0;h=c[b+4>>2]|0;y=Ao(c[b+8>>2]|0)|0;ue[t&31](h,y,c[b+12>>2]|0);l=0;i=e;return l|0};case 525:{je[c[(c[636256]|0)+292>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 526:{je[c[(c[636256]|0)+296>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 571:{ae[c[(c[636256]|0)+300>>2]&127](c[b+4>>2]|0,c[b+8>>2]|0);l=0;i=e;return l|0};case 527:{y=c[(c[636256]|0)+304>>2]|0;h=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;ae[y&127](h,t);l=0;i=e;return l|0};case 528:{je[c[(c[636256]|0)+308>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 529:{je[c[(c[636256]|0)+312>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 530:{je[c[(c[636256]|0)+316>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 531:{je[c[(c[636256]|0)+320>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 532:{t=c[(c[636256]|0)+324>>2]|0;h=c[b+4>>2]|0;y=Ao(c[b+8>>2]|0)|0;ue[t&31](h,y,c[b+12>>2]|0);l=0;i=e;return l|0};case 533:{y=c[(c[636256]|0)+328>>2]|0;h=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;l=qe[y&63](h,t)|0;i=e;return l|0};case 534:{t=c[(c[636256]|0)+332>>2]|0;h=c[b+4>>2]|0;y=Ao(c[b+8>>2]|0)|0;l=qe[t&63](h,y)|0;i=e;return l|0};case 535:{y=c[(c[636256]|0)+336>>2]|0;h=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;f=Ao(c[b+12>>2]|0)|0;l=xe[y&31](h,t,f,c[b+16>>2]|0)|0;i=e;return l|0};case 536:{f=c[(c[636256]|0)+340>>2]|0;t=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;y=Ao(c[b+12>>2]|0)|0;p=c[b+16>>2]|0;o=Ao(c[b+20>>2]|0)|0;l=Yd[f&7](t,h,y,p,o,+g[b+24>>2])|0;i=e;return l|0};case 537:{o=c[(c[636256]|0)+344>>2]|0;p=Ao(c[b+4>>2]|0)|0;y=Ao(c[b+8>>2]|0)|0;l=qe[o&63](p,y)|0;i=e;return l|0};case 538:{y=c[(c[636256]|0)+348>>2]|0;p=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;h=Ao(c[b+12>>2]|0)|0;t=Ao(c[b+16>>2]|0)|0;l=xe[y&31](p,o,h,t)|0;i=e;return l|0};case 539:{t=c[(c[636256]|0)+352>>2]|0;h=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;p=Ao(c[b+12>>2]|0)|0;l=he[t&63](h,o,p)|0;i=e;return l|0};case 567:{p=c[(c[636256]|0)+356>>2]|0;o=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;l=qe[p&63](o,h)|0;i=e;return l|0};case 568:{h=c[(c[636256]|0)+360>>2]|0;o=Ao(c[b+4>>2]|0)|0;p=Ao(c[b+8>>2]|0)|0;l=qe[h&63](o,p)|0;i=e;return l|0};case 540:{s=+le[c[(c[636256]|0)+364>>2]&7](c[b+4>>2]|0,c[b+8>>2]|0);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 573:{ye[c[(c[636256]|0)+368>>2]&7](c[b+4>>2]|0,c[b+8>>2]|0,+g[b+12>>2]);l=0;i=e;return l|0};case 541:{ve[c[(c[636256]|0)+372>>2]&255]();l=0;i=e;return l|0};case 542:{ve[c[(c[636256]|0)+376>>2]&255]();l=0;i=e;return l|0};case 543:{p=c[(c[636256]|0)+380>>2]|0;o=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;l=qe[p&63](o,h)|0;i=e;return l|0};case 544:{je[c[(c[636256]|0)+384>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 565:{ue[c[(c[636256]|0)+388>>2]&31](c[b+4>>2]|0,c[b+8>>2]|0,c[b+12>>2]|0);l=0;i=e;return l|0};case 545:{h=c[(c[636256]|0)+392>>2]|0;o=c[b+4>>2]|0;p=Ao(c[b+8>>2]|0)|0;ae[h&127](o,p);l=0;i=e;return l|0};case 566:{Zd[c[(c[636256]|0)+396>>2]&7](c[b+4>>2]|0,+g[b+8>>2]);l=0;i=e;return l|0};case 546:{l=be[c[(c[636256]|0)+400>>2]&127](c[b+4>>2]|0)|0;i=e;return l|0};case 547:{je[c[(c[636256]|0)+404>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 548:{je[c[(c[636256]|0)+408>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 574:{p=c[(c[636256]|0)+452>>2]|0;o=c[b+4>>2]|0;h=Ao(c[b+8>>2]|0)|0;de[p&7](o,h,+g[b+12>>2],c[b+16>>2]|0);l=0;i=e;return l|0};case 549:{h=c[(c[636256]|0)+412>>2]|0;o=Ao(c[b+4>>2]|0)|0;p=c[b+8>>2]|0;t=Ao(c[b+12>>2]|0)|0;ze[h&15](o,p,t,c[b+16>>2]|0);l=0;i=e;return l|0};case 550:{t=c[(c[636256]|0)+416>>2]|0;p=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;l=fe[t&7](p,o,+g[b+12>>2],c[b+16>>2]|0)|0;i=e;return l|0};case 551:{je[c[(c[636256]|0)+420>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 552:{je[c[(c[636256]|0)+424>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 553:{o=c[(c[636256]|0)+428>>2]|0;p=Ao(c[b+4>>2]|0)|0;l=qe[o&63](p,c[b+8>>2]|0)|0;i=e;return l|0};case 554:{p=c[(c[636256]|0)+432>>2]|0;o=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;h=c[b+12>>2]|0;s=+g[b+16>>2];y=Ao(c[b+20>>2]|0)|0;l=_d[p&7](o,t,h,s,y)|0;i=e;return l|0};case 572:{y=c[(c[636256]|0)+436>>2]|0;h=Ao(c[b+4>>2]|0)|0;t=c[b+8>>2]|0;o=Ao(c[b+12>>2]|0)|0;p=c[b+16>>2]|0;f=Ao(c[b+20>>2]|0)|0;l=te[y&15](h,t,o,p,f)|0;i=e;return l|0};case 555:{l=se[c[(c[636256]|0)+440>>2]&31]()|0;i=e;return l|0};case 556:{je[c[(c[636256]|0)+444>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 557:{f=c[(c[636256]|0)+448>>2]|0;p=c[b+4>>2]|0;o=Ao(c[b+8>>2]|0)|0;ae[f&127](p,o);l=0;i=e;return l|0};case 558:{o=c[(c[636256]|0)+456>>2]|0;p=c[b+4>>2]|0;f=Ao(c[b+8>>2]|0)|0;l=qe[o&63](p,f)|0;i=e;return l|0};case 559:{f=c[(c[636256]|0)+460>>2]|0;p=c[b+4>>2]|0;o=c[b+8>>2]|0;t=Ao(c[b+12>>2]|0)|0;ue[f&31](p,o,t);l=0;i=e;return l|0};case 560:{t=c[(c[636256]|0)+464>>2]|0;o=c[b+4>>2]|0;p=Ao(c[b+8>>2]|0)|0;l=qe[t&63](o,p)|0;i=e;return l|0};case 561:{l=se[c[(c[636256]|0)+468>>2]&31]()|0;i=e;return l|0};case 562:{je[c[(c[636256]|0)+472>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 563:{je[c[(c[636256]|0)+476>>2]&127](c[b+4>>2]|0);l=0;i=e;return l|0};case 564:{p=c[(c[636256]|0)+480>>2]|0;o=c[b+4>>2]|0;t=Ao(c[b+8>>2]|0)|0;f=Ao(c[b+12>>2]|0)|0;h=Ao(c[b+16>>2]|0)|0;y=Ao(c[b+20>>2]|0)|0;l=te[p&15](o,t,f,h,y)|0;i=e;return l|0};case 100:{Zx(Ao(c[b+4>>2]|0)|0,c[b+8>>2]&255|0,c[b+12>>2]|0)|0;l=0;i=e;return l|0};case 101:{y=Ao(c[b+4>>2]|0)|0;Vx(y|0,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0)|0;l=0;i=e;return l|0};case 102:{y=b+4|0;h=Ao(c[y>>2]|0)|0;ay(h|0,Ao(c[b+8>>2]|0)|0,c[b+12>>2]|0)|0;l=c[y>>2]|0;i=e;return l|0};case 103:{s=+W(+g[b+4>>2]);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 104:{s=+V(+g[b+4>>2]);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 105:{s=+$(+(+g[b+4>>2]),+(+g[b+8>>2]));l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 106:{s=+T(+g[b+4>>2]);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 107:{y=Ao(c[b+4>>2]|0)|0;fn(y,Ao(c[b+8>>2]|0)|0,Ao(c[b+12>>2]|0)|0);l=0;i=e;return l|0};case 108:{y=Ao(c[b+4>>2]|0)|0;h=Ao(c[b+8>>2]|0)|0;hn(y,h,Ao(c[b+12>>2]|0)|0,Ao(c[b+16>>2]|0)|0);l=0;i=e;return l|0};case 109:{en(Ao(c[b+4>>2]|0)|0,Ao(c[b+8>>2]|0)|0);l=0;i=e;return l|0};case 110:{s=+R(+g[b+4>>2]);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};case 111:{s=+ca(+g[b+4>>2]);l=(g[k>>2]=s,c[k>>2]|0);i=e;return l|0};default:{aj(1,26248,(r=i,i=i+8|0,c[r>>2]=j,r)|0);i=r;return 0}}return 0}function ug(){var a=0,b=0;a=i;b=c[196754]|0;if((b|0)==0){i=a;return}Co(b,1,(b=i,i=i+8|0,c[b>>2]=0,b)|0)|0;i=b;uo(c[196754]|0);c[196754]=0;i=a;return}function vg(){var a=0,b=0,d=0,e=0,f=0;a=i;b=c[196754]|0;if((b|0)==0){i=a;return}Co(b,1,(b=i,i=i+8|0,c[b>>2]=1,b)|0)|0;i=b;d=vo(c[196754]|0,1)|0;c[196754]=d;if((d|0)==0){aj(0,22808,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b}c[142745]=Ah()|0;if((c[(c[64874]|0)+32>>2]|0)>0){d=0;do{c[(c[33781]|0)+(d*121936|0)+67644>>2]=0;d=d+1|0;}while((d|0)<(c[(c[64874]|0)+32>>2]|0))}d=c[196754]|0;e=c[142752]|0;f=Gj()|0;Co(d,0,(b=i,i=i+24|0,c[b>>2]=e,c[b+8>>2]=f,c[b+16>>2]=1,b)|0)|0;i=b;i=a;return}function wg(){var a=0,b=0,d=0,e=0,f=0;a=i;b=jk(19728,17616,32)|0;if((b|0)==0){d=0}else{d=c[b+32>>2]|0}c[636482]=d;d=wo(60352,12,~~+dk(58800))|0;c[196754]=d;if((d|0)==0){aj(0,57016,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}c[142745]=Ah()|0;if((c[(c[64874]|0)+32>>2]|0)>0){d=0;do{c[(c[33781]|0)+(d*121936|0)+67644>>2]=0;d=d+1|0;}while((d|0)<(c[(c[64874]|0)+32>>2]|0))}d=c[196754]|0;b=c[142752]|0;f=Gj()|0;Co(d,0,(e=i,i=i+24|0,c[e>>2]=b,c[e+8>>2]=f,c[e+16>>2]=0,e)|0)|0;i=e;i=a;return}function xg(){var a=0,b=0,d=0,e=0;a=i;if((c[64912]|0)!=2){b=0;i=a;return b|0}d=Co(c[196754]|0,9,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0)|0;i=e;b=d;i=a;return b|0}function yg(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;b=i;i=i+1024|0;d=a+67644|0;e=b|0;f=0;a:while(1){g=a+117840+(f<<2)|0;if((c[g>>2]|0)!=0){do{if((f|0)==0){h=c[d>>2]|0;if((h|0)==0){break}if((c[h+424>>2]&512|0)==0){break}f=f+1|0;continue a}}while(0);h=259684+(f<<2)|0;j=c[h>>2]|0;k=Wx(j|0)|0;if((k|0)>999){l=0;m=k;while(1){if((l|0)==0){n=21056}else{n=(m|0)<1e3?20864:20648}rn(e,(c[h>>2]|0)+l|0,1e3);Kg(a,20400,(o=i,i=i+24|0,c[o>>2]=n,c[o+8>>2]=f,c[o+16>>2]=e,o)|0);i=o;k=m-999|0;if((k|0)>0){l=l+999|0;m=k}else{break}}}else{Kg(a,20104,(o=i,i=i+16|0,c[o>>2]=f,c[o+8>>2]=j,o)|0);i=o}c[g>>2]=0}f=f+1|0;if((f|0)>=1024){break}}i=b;return}function zg(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;d=i;i=i+1024|0;if(a>>>0>1023>>>0){aj(1,47936,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e}f=(b|0)==0?2551528:b;b=259684+(a<<2)|0;g=c[b>>2]|0;if((Tx(f,g)|0)==0){i=d;return}mj(g);c[b>>2]=qj(f)|0;if(!((c[64912]|0)==2|(c[64913]|0)!=0)){i=d;return}f=c[33781]|0;if((c[(c[64874]|0)+32>>2]|0)<=0){i=d;return}g=d|0;if((a|0)==0){h=0;j=f}else{k=0;l=f;while(1){f=c[l>>2]|0;do{if(f>>>0<4>>>0){if((f|0)!=3){break}c[l+117840+(a<<2)>>2]=1}else{m=c[b>>2]|0;n=Wx(m|0)|0;if((n|0)>999){o=0;p=n}else{Kg(l,20104,(e=i,i=i+16|0,c[e>>2]=a,c[e+8>>2]=m,e)|0);i=e;break}while(1){if((o|0)==0){q=21056}else{q=(p|0)<1e3?20864:20648}rn(g,(c[b>>2]|0)+o|0,1e3);Kg(l,20400,(e=i,i=i+24|0,c[e>>2]=q,c[e+8>>2]=a,c[e+16>>2]=g,e)|0);i=e;m=p-999|0;if((m|0)>0){o=o+999|0;p=m}else{break}}}}while(0);f=k+1|0;if((f|0)<(c[(c[64874]|0)+32>>2]|0)){k=f;l=l+121936|0}else{break}}i=d;return}while(1){l=c[j>>2]|0;do{if(l>>>0<4>>>0){if((l|0)!=3){break}c[j+117840>>2]=1}else{k=c[j+67644>>2]|0;if((k|0)!=0){if((c[k+424>>2]&512|0)!=0){break}}k=c[b>>2]|0;p=Wx(k|0)|0;if((p|0)>999){r=0;s=p}else{Kg(j,20104,(e=i,i=i+16|0,c[e>>2]=0,c[e+8>>2]=k,e)|0);i=e;break}while(1){if((r|0)==0){t=21056}else{t=(s|0)<1e3?20864:20648}rn(g,(c[b>>2]|0)+r|0,1e3);Kg(j,20400,(e=i,i=i+24|0,c[e>>2]=t,c[e+8>>2]=0,c[e+16>>2]=g,e)|0);i=e;k=s-999|0;if((k|0)>0){r=r+999|0;s=k}else{break}}}}while(0);l=h+1|0;if((l|0)<(c[(c[64874]|0)+32>>2]|0)){h=l;j=j+121936|0}else{break}}i=d;return}function Ag(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;if((e|0)<1){aj(1,47232,(g=i,i=i+8|0,c[g>>2]=e,g)|0);i=g}if(b>>>0>1023>>>0){aj(1,40496,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g}g=c[259684+(b<<2)>>2]|0;if((g|0)==0){a[d]=0;i=f;return}else{rn(d,g,e);i=f;return}}function Bg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;do{if((a|0)>=0){if((c[(c[64874]|0)+32>>2]|0)<=(a|0)){break}e=(b|0)==0?2551528:b;rn((c[33781]|0)+(a*121936|0)+4|0,e,1024);f=(c[33781]|0)+(a*121936|0)+67648|0;rn(f,Jn(e,30400)|0,32);i=d;return}}while(0);aj(1,35568,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d}function Cg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;if((d|0)<1){aj(1,26072,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f}do{if((a|0)>=0){if((c[(c[64874]|0)+32>>2]|0)<=(a|0)){break}rn(b,(c[33781]|0)+(a*121936|0)+4|0,d);i=e;return}}while(0);aj(1,22696,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f}function Dg(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;a=i;b=c[(c[64874]|0)+32>>2]|0;if((b|0)>0){d=c[33781]|0;e=0;f=0;while(1){g=(c[d+(e*121936|0)>>2]|0)>>>0>1>>>0&(e|0)>(f|0)?e:f;h=e+1|0;if((h|0)<(b|0)){e=h;f=g}else{j=g;break}}}else{j=0}f=j+1|0;jk(43872,43240,0)|0;c[(c[64874]|0)+20>>2]=0;e=c[(c[64874]|0)+32>>2]|0;do{if((e|0)<(f|0)){d=Hn(23304,(k=i,i=i+8|0,c[k>>2]=f,k)|0)|0;i=k;nk(43872,d)}else{if((e|0)<=64){break}d=Hn(23304,(k=i,i=i+8|0,c[k>>2]=64,k)|0)|0;i=k;nk(43872,d)}}while(0);if((c[(c[64874]|0)+32>>2]|0)==(b|0)){i=a;return}b=yj(f*121936|0)|0;k=b;e=(j|0)>-1;j=c[33781]|0;if(e){d=0;g=j;while(1){h=g+(d*121936|0)|0;l=k+(d*121936|0)|0;if((c[h>>2]|0)>>>0>1>>>0){Vx(l|0,h|0,121936)|0}else{Zx(l|0,0,121936)|0}l=d+1|0;h=c[33781]|0;if((l|0)<(f|0)){d=l;g=h}else{m=h;break}}}else{m=j}mj(m);m=oj((c[(c[64874]|0)+32>>2]|0)*121936|0)|0;c[33781]=m;Zx(m|0,0,(c[(c[64874]|0)+32>>2]|0)*121936|0|0)|0;if(e){e=0;do{m=k+(e*121936|0)|0;if((c[m>>2]|0)>>>0>1>>>0){Vx((c[33781]|0)+(e*121936|0)|0,m|0,121936)|0}e=e+1|0;}while((e|0)<(f|0))}zj(b);b=c[(c[64874]|0)+32>>2]|0;if((c[(c[430624]|0)+32>>2]|0)==0){c[33782]=b<<10;i=a;return}else{c[33782]=b<<13;i=a;return}}function Eg(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;ug();_i(19552,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;_i(17480,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;Lw();Uw(0);tj();xh();do{if(+dk(60216)!=0.0){if((c[(c[64874]|0)+20>>2]|0)==0){break}Dg()}else{if((c[33778]|0)!=0){aj(0,21280,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}jk(43872,43240,0)|0;c[(c[64874]|0)+20>>2]=0;g=c[(c[64874]|0)+32>>2]|0;do{if((g|0)<1){h=Hn(23304,(f=i,i=i+8|0,c[f>>2]=1,f)|0)|0;i=f;nk(43872,h)}else{if((g|0)<=64){break}h=Hn(23304,(f=i,i=i+8|0,c[f>>2]=64,f)|0)|0;i=f;nk(43872,h)}}while(0);c[33781]=oj((c[(c[64874]|0)+32>>2]|0)*121936|0)|0;c[33782]=c[(c[64874]|0)+32>>2]<<((c[(c[430624]|0)+32>>2]|0)==0?10:13);c[33778]=1;if((c[(c[64894]|0)+32>>2]|0)!=0){nk(27664,54560)}nk(60216,38768);Nm()}}while(0);Dl(0);c[33784]=xj((c[33782]|0)*208|0,0)|0;c[33783]=0;c[33780]=c[33780]^4;nk(58664,56864);f=(c[64874]|0)+32|0;g=c[f>>2]|0;if((g|0)>0){h=c[33781]|0;j=0;k=g;while(1){if((c[h+(j*121936|0)>>2]|0)>>>0>1>>>0){c[h+(j*121936|0)+117836>>2]=c[142752];l=c[f>>2]|0}else{l=k}g=j+1|0;if((g|0)<(l|0)){j=g;k=l}else{m=0;break}}}else{m=0}do{l=c[259684+(m<<2)>>2]|0;if((l|0)!=0){mj(l)}m=m+1|0;}while((m|0)<1024);Zx(259648,0,311364)|0;m=0;do{c[259684+(m<<2)>>2]=qj(2551528)|0;m=m+1|0;}while((m|0)<1024);nk(55552,54560);nk(53512,a);m=(Yx()|0)<<16;l=m^(Yx()|0);c[64916]=l^(Gj()|0);l=Xi(64,72)|0;m=c[l>>2]|0;rn(m,a,64);c[m+64>>2]=b;c[m+68>>2]=d;Il(c[64916]|0,l);i=e;return}function Fg(b,d){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;d=i;i=i+16528|0;e=d|0;f=d+8|0;g=d+72|0;h=d+80|0;j=d+16464|0;k=b|0;l=c[k>>2]|0;rn(j,l,64);m=c[l+64>>2]|0;n=c[l+68>>2]|0;l=c[k>>2]|0;if((l|0)!=0){Gx(l)}Gx(b);c[469154]=(c[469154]|0)-1;b=Hn(23512,(l=i,i=i+8|0,c[l>>2]=j,l)|0)|0;i=l;vh(b,0,g);b=Hn(23304,(l=i,i=i+8|0,c[l>>2]=c[g>>2],l)|0)|0;i=l;nk(27248,b);b=c[429590]|0;c[64914]=b;c[64915]=b;c[64917]=b;g=Hn(23304,(l=i,i=i+8|0,c[l>>2]=b,l)|0)|0;i=l;nk(37944,g);gh();c[64912]=1;wg();c[(c[64900]|0)+20>>2]=0;Co(c[196754]|0,8,(l=i,i=i+8|0,c[l>>2]=c[142752],l)|0)|0;i=l;Ve(c[142752]|0);g=(c[142752]|0)+100|0;c[142752]=g;c[33779]=(c[33779]|0)+100;Co(c[196754]|0,8,(l=i,i=i+8|0,c[l>>2]=g,l)|0)|0;i=l;Ve(c[142752]|0);g=(c[142752]|0)+100|0;c[142752]=g;c[33779]=(c[33779]|0)+100;Co(c[196754]|0,8,(l=i,i=i+8|0,c[l>>2]=g,l)|0)|0;i=l;Ve(c[142752]|0);c[142752]=(c[142752]|0)+100;c[33779]=(c[33779]|0)+100;if((c[142748]|0)>1){g=1;do{b=ng(g)|0;if((c[b+416>>2]|0)!=0){c[b>>2]=g;Vx(263788+(g*300|0)|0,b|0,208)|0}g=g+1|0;}while((g|0)<(c[142748]|0))}if((c[(c[64874]|0)+32>>2]|0)>0){g=(m|0)==0;m=0;do{b=c[33781]|0;j=b+(m*121936|0)|0;do{if((c[j>>2]|0)>>>0>1>>>0){k=(c[b+(m*121936|0)+84984>>2]|0)!=1;if(!(k|g)){rf(j,2551528);break}o=c[196754]|0;p=Co(o,2,(l=i,i=i+24|0,c[l>>2]=m,c[l+8>>2]=0,c[l+16>>2]=k&1^1,l)|0)|0;i=l;q=Bo(o,p)|0;if((q|0)!=0){rf((c[33781]|0)+(m*121936|0)|0,q);break}q=c[33781]|0;p=q+(m*121936|0)|0;if(k){c[p>>2]=2;break}else{c[p>>2]=4;p=ng(m)|0;c[p>>2]=m;c[q+(m*121936|0)+67644>>2]=p;c[q+(m*121936|0)+68160>>2]=-1;c[q+(m*121936|0)+68176>>2]=0;Co(c[196754]|0,3,(l=i,i=i+8|0,c[l>>2]=m,l)|0)|0;i=l;break}}}while(0);m=m+1|0;}while((m|0)<(c[(c[64874]|0)+32>>2]|0))}Co(c[196754]|0,8,(l=i,i=i+8|0,c[l>>2]=c[142752],l)|0)|0;i=l;Ve(c[142752]|0);c[142752]=(c[142752]|0)+100;c[33779]=(c[33779]|0)+100;do{if((c[(c[64854]|0)+32>>2]|0)==0){nk(37200,2551528);nk(36768,2551528)}else{m=yl()|0;nk(37200,m);if((a[m]|0)==0){_i(22584,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l}nk(36768,zl()|0);if((c[(c[430624]|0)+32>>2]|0)==0){break}m=f|0;xn(m,64,21952,(l=i,i=i+8|0,c[l>>2]=21640,l)|0)|0;i=l;_k(m,e,0)|0;m=c[e>>2]|0;if((m|0)==0){break}Uk(m)}}while(0);nk(36376,Bl()|0);nk(35440,Cl()|0);rn(h,Ek(8)|0,16384);c[378060]=c[378060]&-9;zg(1,h);zg(0,Dk(4)|0);c[378060]=c[378060]&-5;c[64912]=2;Lf();vj();_i(22128,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;if((n|0)==0){r=64;s=0;t=16384;u=0;i=d;return}ae[c[n+4>>2]&127](n,0);r=64;s=0;t=16384;u=0;i=d;return}function Gg(){var a=0,b=0,d=0;a=i;Mf();jk(52448,54560,4)|0;jk(51440,50568,4)|0;jk(49800,54560,4)|0;c[64900]=jk(49040,54560,36)|0;jk(48240,2551528,4)|0;c[64888]=jk(53512,46944,68)|0;c[64858]=jk(45976,54560,4)|0;c[64896]=jk(45376,44536,5)|0;c[64874]=jk(43872,43240,36)|0;c[64868]=jk(42664,54560,5)|0;c[64878]=jk(42072,54560,5)|0;c[64906]=jk(41600,41200,5)|0;c[64870]=jk(40296,54560,5)|0;c[64880]=jk(39672,54560,5)|0;c[64904]=jk(39320,38768,5)|0;jk(38328,38768,72)|0;c[64848]=jk(37944,54560,72)|0;c[64854]=jk(37568,38768,8)|0;jk(37200,2551528,72)|0;jk(36768,2551528,72)|0;jk(36376,2551528,72)|0;jk(35440,2551528,72)|0;c[64852]=jk(34864,2551528,256)|0;c[64856]=jk(34496,2551528,256)|0;c[64902]=jk(33952,50568,256)|0;c[64844]=jk(33392,32784,256)|0;c[64522]=jk(32272,31824,256)|0;jk(58664,2551528,256)|0;c[64910]=jk(31488,54560,4)|0;jk(31096,2551528,5)|0;c[64882]=jk(30280,29808,0)|0;b=Hn(29528,(d=i,i=i+8|0,c[d>>2]=2,d)|0)|0;i=d;c[64883]=jk(b,2551528,1)|0;b=Hn(29528,(d=i,i=i+8|0,c[d>>2]=3,d)|0)|0;i=d;c[64884]=jk(b,2551528,1)|0;b=Hn(29528,(d=i,i=i+8|0,c[d>>2]=4,d)|0)|0;i=d;c[64885]=jk(b,2551528,1)|0;b=Hn(29528,(d=i,i=i+8|0,c[d>>2]=5,d)|0)|0;i=d;c[64886]=jk(b,2551528,1)|0;c[64850]=jk(29200,28784,0)|0;c[64846]=jk(28416,54560,0)|0;c[64862]=jk(28064,54560,0)|0;c[64894]=jk(27664,54560,0)|0;c[64890]=jk(27248,2551528,64)|0;c[64892]=jk(26720,38768,1)|0;c[64908]=jk(25960,25504,1)|0;Ye();Ze();Ai(25360);i=a;return}function Hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;d=c[64874]|0;if((c[d+32>>2]|0)<=0){i=b;return}e=0;f=c[33781]|0;g=d;while(1){if((c[f>>2]|0)>>>0>1>>>0){if((c[f+84984>>2]|0)!=2){Kg(f,24976,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;Kg(f,24616,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h}c[f+68176>>2]=0;ah(f);j=c[64874]|0}else{j=g}d=e+1|0;k=c[j+32>>2]|0;if((d|0)<(k|0)){e=d;f=f+121936|0;g=j}else{break}}if((k|0)<=0){i=b;return}k=0;g=c[33781]|0;f=j;while(1){if((c[g>>2]|0)>>>0>1>>>0){if((c[g+84984>>2]|0)!=2){Kg(g,24976,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;Kg(g,24616,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h}c[g+68176>>2]=0;ah(g);l=c[64874]|0}else{l=f}j=k+1|0;if((j|0)<(c[l+32>>2]|0)){k=j;g=g+121936|0;f=l}else{break}}i=b;return}function Ig(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;d=c[423400]|0;if((d|0)==0){i=b;return}if((c[d+32>>2]|0)==0){i=b;return}_i(24328,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;Om();if(!((c[33781]|0)==0|(c[430620]|0)!=0)){Hg(a)}gg();Mg();ug();a=0;do{e=c[259684+(a<<2)>>2]|0;if((e|0)!=0){mj(e)}a=a+1|0;}while((a|0)<1024);Zx(259648,0,311364)|0;a=c[33781]|0;if((a|0)!=0){if((c[(c[64874]|0)+32>>2]|0)>0){e=0;f=a;while(1){tf(f+(e*121936|0)|0);g=e+1|0;h=c[33781]|0;if((g|0)<(c[(c[64874]|0)+32>>2]|0)){e=g;f=h}else{j=h;break}}}else{j=a}mj(j)}Zx(135112,0,122976)|0;nk(60216,54560);nk(24032,54560);_i(23736,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;if((c[(c[64894]|0)+32>>2]|0)==2){i=b;return}Kw(0);i=b;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;if((c[a>>2]|0)>>>0<3>>>0){i=d;return}e=a+66564|0;f=(c[e>>2]|0)+1|0;c[e>>2]=f;g=a+66568|0;if((f-(c[g>>2]|0)|0)!=65){rn(a+1028+((f&63)<<10)|0,b,1024);i=d;return}_i(40952,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;h=c[g>>2]|0;g=h+1|0;if((h|0)<(c[e>>2]|0)){h=g;while(1){_i(55752,(f=i,i=i+16|0,c[f>>2]=h,c[f+8>>2]=a+1028+((h&63)<<10),f)|0);i=f;j=h+1|0;if((h|0)<(c[e>>2]|0)){h=j}else{k=j;break}}}else{k=g}_i(55752,(f=i,i=i+16|0,c[f>>2]=k,c[f+8>>2]=b,f)|0);i=f;rf(a,46112);i=d;return}function Kg(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;f=i;i=i+16400|0;g=f|0;h=f+16|0;j=g;c[j>>2]=e;c[j+4>>2]=0;fd(h|0,16384,d|0,g|0)|0;if((Wx(h|0)|0)>>>0>1022>>>0){k=16384;l=0;i=f;return}if((b|0)!=0){Jg(b,h);k=16384;l=0;i=f;return}do{if((c[(c[430624]|0)+32>>2]|0)!=0){if((Ux(h,39832,5)|0)!=0){break}b=a[h]|0;if(b<<24>>24==0){m=0}else{g=h;d=0;j=b;while(1){if(j<<24>>24==10){b=d+1|0;a[2556792+d|0]=92;a[2556792+b|0]=110;n=b}else{a[2556792+d|0]=j;n=d}b=n+1|0;e=g+1|0;o=a[e]|0;if(o<<24>>24!=0&b>>>0<1021>>>0){g=e;d=b;j=o}else{m=b;break}}}a[2556792+m|0]=0;_i(34936,(j=i,i=i+8|0,c[j>>2]=2556792,j)|0);i=j}}while(0);if((c[(c[64874]|0)+32>>2]|0)<=0){k=16384;l=0;i=f;return}m=c[33781]|0;n=0;while(1){Jg(m,h);j=n+1|0;if((j|0)<(c[(c[64874]|0)+32>>2]|0)){m=m+121936|0;n=j}else{break}}k=16384;l=0;i=f;return}function Lg(d){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;e=i;f=ek(29856)|0;g=c[430624]|0;if((g|0)==0){i=e;return}if((c[g+32>>2]|0)!=2){i=e;return}if((f&3|0)==0){i=e;return}if((c[33779]|0)<(c[33785]|0)){i=e;return}g=(tn(c[(c[429584]|0)+4>>2]|0,25520)|0)==0;h=g?22168:d;c[33785]=(c[33779]|0)+3e5;d=(f&1|0)==0;g=(f&2|0)==0;f=0;do{j=259528+(f<<2)|0;k=c[j>>2]|0;a:do{if((a[c[k+4>>2]|0]|0)!=0){l=k+20|0;do{if((c[l>>2]|0)==0){if((c[2556472+(f<<6)>>2]|0)!=0){break}if((c[2556504+(f<<6)>>2]|0)==0){m=10}}else{m=10}}while(0);do{if((m|0)==10){m=0;c[l>>2]=0;b:do{if(!d){_i(19080,(n=i,i=i+8|0,c[n>>2]=c[(c[j>>2]|0)+4>>2],n)|0);i=n;o=2556472+(f<<6)|0;p=ym(c[(c[j>>2]|0)+4>>2]|0,o,4)|0;do{if((p|0)==2){b[2556496+(f<<6)>>1]=wn(27950)|0;q=c[(c[j>>2]|0)+4>>2]|0}else{r=c[(c[j>>2]|0)+4>>2]|0;if((p|0)!=0){q=r;break}_i(59904,(n=i,i=i+8|0,c[n>>2]=r,n)|0);i=n;break b}}while(0);p=Em(o)|0;_i(17248,(n=i,i=i+16|0,c[n>>2]=q,c[n+8>>2]=p,n)|0);i=n}}while(0);c:do{if(!g){_i(58464,(n=i,i=i+8|0,c[n>>2]=c[(c[j>>2]|0)+4>>2],n)|0);i=n;p=2556504+(f<<6)|0;r=ym(c[(c[j>>2]|0)+4>>2]|0,p,5)|0;do{if((r|0)==2){b[2556528+(f<<6)>>1]=wn(27950)|0;s=c[(c[j>>2]|0)+4>>2]|0}else{t=c[(c[j>>2]|0)+4>>2]|0;if((r|0)!=0){s=t;break}_i(56600,(n=i,i=i+8|0,c[n>>2]=t,n)|0);i=n;break c}}while(0);r=Em(p)|0;_i(17248,(n=i,i=i+16|0,c[n>>2]=s,c[n+8>>2]=r,n)|0);i=n}}while(0);if((c[2556472+(f<<6)>>2]|0)!=0){break}if((c[2556504+(f<<6)>>2]|0)!=0){break}_i(55352,(n=i,i=i+8|0,c[n>>2]=c[(c[j>>2]|0)+4>>2],n)|0);i=n;nk(c[c[j>>2]>>2]|0,2551520);c[(c[j>>2]|0)+20>>2]=0;break a}}while(0);_i(53440,(n=i,i=i+8|0,c[n>>2]=c[(c[j>>2]|0)+4>>2],n)|0);i=n;l=2556472+(f<<6)|0;if((c[l>>2]|0)!=0){xm(1,l|0,52352,(n=i,i=i+8|0,c[n>>2]=h,n)|0);i=n}l=2556504+(f<<6)|0;if((c[l>>2]|0)==0){break}xm(1,l,52352,(n=i,i=i+8|0,c[n>>2]=h,n)|0);i=n}}while(0);f=f+1|0;}while((f|0)<5);i=e;return}function Mg(){c[33785]=-9999;Lg(51320);c[33785]=-9999;Lg(51320);return}function Ng(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((b|0)==0){f=1;return f|0}g=Jd()|0;h=b+20|0;i=g-(c[h>>2]|0)|0;j=(i|0)/(e|0)|0;k=b+24|0;b=a[k]|0;if((j|0)>(b|0)){a[k]=0;l=g;m=0}else{n=b-j&255;a[k]=n;l=g-((i|0)%(e|0)|0)|0;m=n}c[h>>2]=l;if((m<<24>>24|0)>=(d|0)){f=1;return f|0}a[k]=m+1;f=0;return f|0}function Og(b,e,f){b=b|0;e=e|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;g=i;i=i+32|0;h=b;b=i;i=i+32|0;Vx(b,h,32)|0;h=g|0;Vx(h|0,b|0,32)|0;b=c[h>>2]|0;if((b|0)==5){j=16;k=h+8|0;l=4}else if((b|0)==4){j=4;k=h+4|0;l=4}else{m=0}if((l|0)==4){n=0;o=0;while(1){p=(da(d[k+n|0]|0,n+119|0)|0)+o|0;q=n+1|0;if(q>>>0<j>>>0){n=q;o=p}else{m=p;break}}}o=(m>>>10^m^m>>>20)&1023;m=Jd()|0;n=2532072+(o<<2)|0;j=c[n>>2]|0;a:do{if((j|0)==0){l=8}else{k=h+4|0;p=h+8|0;q=j;while(1){r=c[q>>2]|0;if((r|0)==4){if((Sx(q+4|0,k,4)|0)==0){s=q;break a}}else if((r|0)==5){if((Sx(q+4|0,p,16)|0)==0){s=q;break a}}r=c[q+36>>2]|0;if((r|0)==0){l=8;break}else{q=r}}}}while(0);if((l|0)==8){j=da(f,e)|0;q=0;while(1){t=1876712+(q*40|0)|0;u=1876732+(q*40|0)|0;p=c[u>>2]|0;k=m-p|0;do{if((p|0)>0){if(!((k|0)>(j|0)|(k|0)<0)){break}r=1876744+(q*40|0)|0;v=c[r>>2]|0;w=1876748+(q*40|0)|0;x=c[w>>2]|0;if((v|0)==0){c[2532072+(c[1876740+(q*40|0)>>2]<<2)>>2]=x;y=x}else{c[v+36>>2]=x;y=c[w>>2]|0}if((y|0)!=0){c[y+32>>2]=c[r>>2]}Zx(t|0,0,40)|0}}while(0);z=t|0;k=q+1|0;if((c[z>>2]|0)==0){break}if((k|0)<16384){q=k}else{A=1;l=35;break}}if((l|0)==35){i=g;return A|0}c[z>>2]=b;if((b|0)==4){c[1876716+(q*40|0)>>2]=c[h+4>>2]}else if((b|0)==5){b=1876716+(q*40|0)|0;z=h+8|0;c[b>>2]=c[z>>2];c[b+4>>2]=c[z+4>>2];c[b+8>>2]=c[z+8>>2];c[b+12>>2]=c[z+12>>2]}c[u>>2]=m;a[1876736+(q*40|0)|0]=0;c[1876740+(q*40|0)>>2]=o;o=c[n>>2]|0;c[1876748+(q*40|0)>>2]=o;if((o|0)!=0){c[o+32>>2]=t}c[1876744+(q*40|0)>>2]=0;c[n>>2]=t;s=t}if((s|0)==0){A=1;i=g;return A|0}t=Jd()|0;n=s+20|0;q=t-(c[n>>2]|0)|0;o=(q|0)/(f|0)|0;m=s+24|0;s=a[m]|0;if((o|0)>(s|0)){a[m]=0;B=t;C=0}else{u=s-o&255;a[m]=u;B=t-((q|0)%(f|0)|0)|0;C=u}c[n>>2]=B;if((C<<24>>24|0)>=(e|0)){A=1;i=g;return A|0}a[m]=C+1;A=0;i=g;return A|0}function Pg(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;d=i;i=i+1024|0;e=b;b=i;i=i+32|0;Vx(b,e,32)|0;e=d|0;if(+dk(50440)==2.0){f=1024;g=0;i=d;return}if(+dk(49712)!=0.0){f=1024;g=0;i=d;return}if((Og(b,10,1e3)|0)!=0){h=Dm(b)|0;$i(48904,(j=i,i=i+8|0,c[j>>2]=h,j)|0);i=j;f=1024;g=0;i=d;return}h=Jd()|0;k=h-(c[164915]|0)|0;l=(k|0)/100|0;m=a[659664]|0;do{if((l|0)>(m|0)){a[659664]=0;c[164915]=h;n=0}else{o=m-l&255;a[659664]=o;c[164915]=h-((k|0)%100|0);if(o<<24>>24<10){n=o;break}$i(47984,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;f=1024;g=0;i=d;return}}while(0);a[659664]=n+1;if((Wx(yi(1)|0)|0)>>>0>128>>>0){f=1024;g=0;i=d;return}n=c[(c[64858]|0)+32>>2]|0;k=c[(c[64874]|0)+32>>2]|0;if((n|0)<(k|0)){h=c[33781]|0;l=0;m=0;o=n;while(1){if((c[h+(o*121936|0)>>2]|0)>>>0>1>>>0){p=((c[h+(o*121936|0)+84984>>2]|0)!=1)+m|0;q=l+1|0}else{p=m;q=l}n=o+1|0;if((n|0)<(k|0)){l=q;m=p;o=n}else{r=q;s=p;break}}}else{r=0;s=0}a[e]=0;Mn(e,46800,yi(1)|0);Mn(e,45928,c[(c[429584]|0)+4>>2]|0);p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=c[(c[429556]|0)+32>>2],j)|0)|0;i=j;Mn(e,45296,p);Mn(e,43744,c[(c[64896]|0)+4>>2]|0);Mn(e,43120,c[(c[64888]|0)+4>>2]|0);p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=r,j)|0)|0;i=j;Mn(e,42552,p);p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=s,j)|0)|0;i=j;Mn(e,42016,p);p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=(c[(c[64874]|0)+32>>2]|0)-(c[(c[64858]|0)+32>>2]|0),j)|0)|0;i=j;Mn(e,41560,p);p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=c[(c[64900]|0)+32>>2],j)|0)|0;i=j;Mn(e,41128,p);p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=c[(c[64854]|0)+32>>2],j)|0)|0;i=j;Mn(e,40208,p);p=ek(39632)|0;s=Hn(39304,(j=i,i=i+8|0,c[j>>2]=p,j)|0)|0;i=j;Mn(e,39632,s);s=c[(c[64870]|0)+32>>2]|0;if((s|0)!=0){p=Hn(44480,(j=i,i=i+8|0,c[j>>2]=s,j)|0)|0;i=j;Mn(e,38752,p)}p=c[(c[64880]|0)+32>>2]|0;if((p|0)!=0){s=Hn(44480,(j=i,i=i+8|0,c[j>>2]=p,j)|0)|0;i=j;Mn(e,38256,s)}s=fk(37928)|0;if((a[s]|0)!=0){Mn(e,37552,s)}xm(1,b,37176,(j=i,i=i+8|0,c[j>>2]=e,j)|0);i=j;f=1024;g=0;i=d;return}function Qg(d,e){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,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;f=i;i=i+19536|0;g=d;d=i;i=i+32|0;Vx(d,g,32)|0;g=f|0;h=f+1008|0;j=f+1040|0;k=f+2064|0;l=f+18448|0;m=f+19472|0;n=f+19504|0;do{if((c[e+20>>2]|0)>3){o=e+12|0;if(!((c[c[o>>2]>>2]|0)==-1)){break}p=n;Vx(p|0,d|0,32)|0;q=h;r=m;Xl(e);hm(e)|0;if((Dn(27656,(c[o>>2]|0)+4|0,7)|0)==0){bn(e,12)}o=jm(e)|0;Mi(o);s=yi(0)|0;t=Dm(n)|0;$i(27200,(u=i,i=i+16|0,c[u>>2]=t,c[u+8>>2]=s,u)|0);i=u;if((tn(s,26640)|0)==0){c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];c[r+16>>2]=c[p+16>>2];c[r+20>>2]=c[p+20>>2];c[r+24>>2]=c[p+24>>2];c[r+28>>2]=c[p+28>>2];r=j|0;t=k|0;v=l|0;if(+dk(50440)==2.0){i=f;return}if(+dk(49712)!=0.0){i=f;return}if((Og(m,10,1e3)|0)!=0){w=Dm(m)|0;$i(21888,(u=i,i=i+8|0,c[u>>2]=w,u)|0);i=u;i=f;return}w=Jd()|0;x=w-(c[164915]|0)|0;y=(x|0)/100|0;z=a[659664]|0;do{if((y|0)>(z|0)){a[659664]=0;c[164915]=w;A=0}else{B=z-y&255;a[659664]=B;c[164915]=w-((x|0)%100|0);if(B<<24>>24<10){A=B;break}$i(21584,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;i=f;return}}while(0);a[659664]=A+1;if((Wx(yi(1)|0)|0)>>>0>128>>>0){i=f;return}by(v|0,Dk(4)|0)|0;Mn(v,46800,yi(1)|0);a[t]=0;x=c[64874]|0;a:do{if((c[x+32>>2]|0)>0){w=0;y=0;z=x;while(1){B=c[33781]|0;if((c[B+(y*121936|0)>>2]|0)>>>0>1>>>0){C=c[(og(y)|0)+248>>2]|0;D=c[B+(y*121936|0)+84956>>2]|0;xn(r,1024,21256,(u=i,i=i+24|0,c[u>>2]=C,c[u+8>>2]=D,c[u+16>>2]=B+(y*121936|0)+67648,u)|0)|0;i=u;B=(Wx(r|0)|0)+w|0;if(B>>>0>16383>>>0){break a}by(k+w|0,r|0)|0;E=B;F=c[64874]|0}else{E=w;F=z}B=y+1|0;if((B|0)<(c[F+32>>2]|0)){w=E;y=B;z=F}else{break}}}}while(0);xm(1,m,21032,(u=i,i=i+16|0,c[u>>2]=v,c[u+8>>2]=t,u)|0);i=u;i=f;return}if((tn(s,25912)|0)==0){Pg(n);i=f;return}if((tn(s,25488)|0)==0){pf(n);i=f;return}if((tn(s,27656)|0)==0){qf(n);i=f;return}if((tn(s,25352)|0)!=0){if((tn(s,24936)|0)==0){i=f;return}r=Dm(n)|0;$i(24528,(u=i,i=i+16|0,c[u>>2]=r,c[u+8>>2]=o,u)|0);i=u;i=f;return}c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];r=j|0;x=g|0;if((Og(h,10,1e3)|0)!=0){z=Dm(h)|0;$i(24256,(u=i,i=i+8|0,c[u>>2]=z,u)|0);i=u;i=f;return}do{if((a[c[(c[64852]|0)+4>>2]|0]|0)==0){G=32}else{z=yi(1)|0;if((Tx(z,c[(c[64852]|0)+4>>2]|0)|0)!=0){G=32;break}z=Dm(h)|0;y=Ji(2)|0;_i(23488,(u=i,i=i+16|0,c[u>>2]=z,c[u+8>>2]=y,u)|0);i=u;H=1}}while(0);if((G|0)==32){p=Jd()|0;o=p-(c[639459]|0)|0;s=(o|0)/1e3|0;t=a[2557840]|0;do{if((s|0)>(t|0)){a[2557840]=0;c[639459]=p;I=0}else{v=t-s&255;a[2557840]=v;c[639459]=p-((o|0)%1e3|0);if(v<<24>>24<10){I=v;break}$i(23968,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;i=f;return}}while(0);a[2557840]=I+1;o=Dm(h)|0;p=Ji(2)|0;_i(23712,(u=i,i=i+16|0,c[u>>2]=o,c[u+8>>2]=p,u)|0);i=u;H=0}Vx(258024,q|0,32)|0;Yi(x,1008,18);do{if((a[c[(c[64852]|0)+4>>2]|0]|0)==0){_i(23192,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u}else{if((H|0)==0){_i(22496,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;break}a[r]=0;p=(Ki()|0)+4|0;while(1){o=a[p]|0;if(o<<24>>24==32){p=p+1|0}else{J=p;K=o;break}}while(1){if((K<<24>>24|0)==32){L=J;G=46;break}else if((K<<24>>24|0)==0){M=J;break}p=J+1|0;J=p;K=a[p]|0}if((G|0)==46){while(1){G=0;p=L+1|0;if((a[p]|0)==32){L=p;G=46}else{M=p;break}}}vn(r,1024,M);Ci(r)}}while(0);Zi();i=f;return}}while(0);Xl(e);hm(e)|0;M=(gm(e)|0)&65535;if((c[(c[64874]|0)+32>>2]|0)<=0){i=f;return}L=c[33781]|0;K=0;b:while(1){N=L|0;do{if((c[N>>2]|0)!=0){if((Cm(d,L+84984|0)|0)==0){break}if((c[L+85016>>2]|0)==(M|0)){break b}}}while(0);J=K+1|0;if((J|0)<(c[(c[64874]|0)+32>>2]|0)){L=L+121936|0;K=J}else{G=62;break}}if((G|0)==62){i=f;return}G=L+85008|0;K=d+24|0;if((b[G>>1]|0)!=(b[K>>1]|0)){_i(36712,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;b[G>>1]=b[K>>1]|0}if((Zg(L,e)|0)==0){i=f;return}if((c[N>>2]|0)==1){i=f;return}c[L+68168>>2]=c[33779];Af(L,e);i=f;return}function Rg(){var a=0,b=0;a=c[64902]|0;if((a|0)==0){return 1}else{b=~~(1.0e3/+g[a+28>>2]);a=c[64919]|0;return((b|0)<(a|0)?0:b-a|0)|0}return 0}function Sg(a){a=a|0;var b=0,d=0,e=0,f=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;b=i;if((c[(c[64894]|0)+32>>2]|0)!=0){Ig(36320);nk(35400,34848);i=b;return}if((c[(c[423400]|0)+32>>2]|0)==0){i=b;return}a:do{if((c[(c[469150]|0)+32>>2]|0)!=0){d=c[(c[64874]|0)+32>>2]|0;do{if((d|0)>0){e=0;f=c[33781]|0;j=0;while(1){if((c[f>>2]|0)>>>0>1>>>0){k=((c[f+84984>>2]|0)!=1)+e|0}else{k=e}l=j+1|0;if((l|0)<(d|0)){e=k;f=f+121936|0;j=l}else{break}}j=(c[(c[64860]|0)+32>>2]|0)!=0;if((k|0)>1){if(!j){break a}nk(28400,34848);break a}else{if(!j){break}i=b;return}}else{if((c[(c[64860]|0)+32>>2]|0)==0){break}i=b;return}}while(0);nk(28400,28056);i=b;return}}while(0);k=c[(c[64902]|0)+32>>2]|0;if((k|0)<1){nk(34480,33936);m=c[(c[64902]|0)+32>>2]|0}else{m=k}k=~~(+(1e3/(m|0)|0|0)*+g[(c[423396]|0)+28>>2]);if((k|0)<1){d=Hn(32768,(n=i,i=i+8|0,h[n>>3]=+(m|0)/1.0e3,n)|0)|0;i=n;nk(33336,d);o=1}else{o=k}k=(c[64919]|0)+a|0;c[64919]=k;if((c[(c[430624]|0)+32>>2]|0)==0){Ve((c[142752]|0)+k|0)}if((c[33779]|0)>1879048192){Ig(32224);k=fk(43120)|0;a=Hn(31808,(n=i,i=i+8|0,c[n>>2]=k,n)|0)|0;i=n;Ai(a);i=b;return}if((c[33783]|0)>=(2147483646-(c[33782]|0)|0)){Ig(31432);a=fk(43120)|0;k=Hn(31808,(n=i,i=i+8|0,c[n>>2]=a,n)|0)|0;i=n;Ai(k);i=b;return}k=c[142751]|0;if(!((k|0)==0|(c[142752]|0)<(k|0))){c[142751]=0;Ai(31016);i=b;return}k=c[378060]|0;if((k&4|0)==0){p=k}else{zg(0,Dk(4)|0);k=c[378060]&-5;c[378060]=k;p=k}if((p&8|0)!=0){zg(1,Ek(8)|0);c[378060]=c[378060]&-9}if((c[(c[423404]|0)+32>>2]|0)==0){q=0}else{q=Jd()|0}p=c[64874]|0;if((c[p+32>>2]|0)>0){k=0;a=p;while(1){p=c[33781]|0;do{if((c[p+(k*121936|0)>>2]|0)==4){d=c[p+(k*121936|0)+67644>>2]|0;if((d|0)==0){c[p+(k*121936|0)+84956>>2]=999;r=a;break}if((c[d+424>>2]&8|0)==0){s=0;t=0;u=0}else{c[p+(k*121936|0)+84956>>2]=0;r=a;break}while(1){d=c[p+(k*121936|0)+68188+(u*524|0)+516>>2]|0;if((d|0)<1){v=t;w=s}else{v=t+1|0;w=d+s-(c[p+(k*121936|0)+68188+(u*524|0)+512>>2]|0)|0}d=u+1|0;if((d|0)<32){s=w;t=v;u=d}else{break}}if((v|0)==0){c[p+(k*121936|0)+84956>>2]=999}else{d=(w|0)/(v|0)|0;c[p+(k*121936|0)+84956>>2]=(d|0)>999?999:d}d=og(k)|0;c[d+452>>2]=c[p+(k*121936|0)+84956>>2];r=c[64874]|0}else{c[p+(k*121936|0)+84956>>2]=999;r=a}}while(0);p=k+1|0;if((p|0)<(c[r+32>>2]|0)){k=p;a=r}else{break}}}if((c[(c[430624]|0)+32>>2]|0)!=0){Ve(c[142752]|0)}r=c[64919]|0;if((r|0)>=(o|0)){a=r;do{c[64919]=a-o;c[33779]=(c[33779]|0)+o;r=(c[142752]|0)+o|0;c[142752]=r;Co(c[196754]|0,8,(n=i,i=i+8|0,c[n>>2]=r,n)|0)|0;i=n;a=c[64919]|0;}while((a|0)>=(o|0))}if((c[(c[423404]|0)+32>>2]|0)!=0){c[33770]=(Jd()|0)-q}q=c[33779]|0;o=((c[(c[64844]|0)+32>>2]|0)*-1e3|0)+q|0;a=((c[(c[64522]|0)+32>>2]|0)*-1e3|0)+q|0;b:do{if((c[(c[64874]|0)+32>>2]|0)>0){r=c[33781]|0;k=0;v=q;while(1){w=r+68168|0;u=c[w>>2]|0;if((u|0)>(v|0)){c[w>>2]=v;x=v}else{x=u}u=r|0;w=c[u>>2]|0;do{if((w|0)==1){if((x|0)>=(a|0)){y=66;break}$i(29120,(n=i,i=i+8|0,c[n>>2]=k,n)|0);i=n;c[u>>2]=0}else{if(!(w>>>0>1>>>0&(x|0)<(o|0))){y=66;break}t=r+68184|0;s=c[t>>2]|0;c[t>>2]=s+1;if((s|0)<=4){break}rf(r,28760);c[u>>2]=0}}while(0);if((y|0)==66){y=0;c[r+68184>>2]=0}u=k+1|0;if((u|0)>=(c[(c[64874]|0)+32>>2]|0)){break b}r=r+121936|0;k=u;v=c[33779]|0}}}while(0);bh();Lg(51320);i=b;return}function Tg(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=c[a+117824>>2]|0;d=c[a+84960>>2]|0;e=c[(c[64878]|0)+32>>2]|0;if((e|0)==0){f=d}else{if((e|0)<1e3){nk(30248,29800);h=c[(c[64878]|0)+32>>2]|0}else{h=e}f=(h|0)<(d|0)?h:d}d=c[(c[64868]|0)+32>>2]|0;if((d|0)==0){i=f}else{if((d|0)<1e3){nk(29512,29800);j=c[(c[64868]|0)+32>>2]|0}else{j=d}i=(j|0)>(f|0)?j:f}f=((((c[a+84984>>2]|0)==5?48:28)+b|0)*1e3|0|0)/(~~(+(i|0)*+g[(c[423396]|0)+28>>2])|0)|0;i=Jd()|0;b=i-(c[a+117820>>2]|0)|0;return((b|0)>(f|0)?0:f-b|0)|0}function Ug(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0;a=wf()|0;b=(a|0)>-1?a:2147483647;if((c[(c[64906]|0)+32>>2]|0)==0){a=(xf()|0)==0;d=a?b:0;return d|0}a=Jd()|0;e=(c[639116]|0)-a|0;if((e|0)>0){d=(e|0)<(b|0)?e+1|0:b;return d|0}e=xf()|0;if((e|0)==0){d=b;return d|0}f=Jd()|0;g=f-a|0;h=(e*1024e3|0|0)/(c[(c[64906]|0)+32>>2]<<10|0)|0;if((h|0)>(g+1|0)){c[639116]=h+a;a=h-g|0;return((a|0)<(b|0)?a:b)|0}c[639116]=f+1;d=(b|0)>2?2:b;return d|0}function Vg(a){a=a|0;var b=0,d=0;b=i;xm(1,258024,22112,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}function Wg(a){a=a|0;var b=0,d=0,e=0;b=a+117828|0;d=c[b>>2]|0;if((d|0)!=0){e=d;while(1){d=c[e+16416>>2]|0;mj(e);if((d|0)==0){break}else{e=d}}}c[b>>2]=0;c[a+117832>>2]=b;return}function Xg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;if((c[a+101420>>2]|0)!=0){rm(a+84976|0);d=Tg(a)|0;i=b;return d|0}e=a+117828|0;if((c[e>>2]|0)==0){d=-1;i=b;return d|0}$i(33256,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;g=c[e>>2]|0;tm(a+84976|0,c[g+20>>2]|0,c[g+12>>2]|0);h=c[g+16416>>2]|0;c[e>>2]=h;if((h|0)==0){$i(54352,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;c[a+117832>>2]=e}else{$i(45168,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}mj(g);d=Tg(a)|0;i=b;return d|0}function Yg(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;$l(b,8);e=a+84976|0;do{if((c[a+101420>>2]|0)==0){if((c[a+117828>>2]|0)!=0){break}tm(e,c[b+20>>2]|0,c[b+12>>2]|0);i=d;return}}while(0);$i(39248,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;e=oj(16420)|0;Yl(e,e+32|0,16384,b);c[e+16416>>2]=0;b=a+117832|0;c[c[b>>2]>>2]=e;c[b>>2]=(c[c[b>>2]>>2]|0)+16416;i=d;return}function Zg(a,b){a=a|0;b=b|0;return(um(a+84976|0,b)|0)!=0|0}function _g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[a+66568>>2]|0;e=a+66564|0;f=c[e>>2]|0;if((d|0)<(f|0)){g=d}else{h=f;i=a+66572|0;c[i>>2]=h;return}while(1){f=g+1|0;$l(b,5);cm(b,f);dm(b,a+1028+((f&63)<<10)|0);d=c[e>>2]|0;if((f|0)<(d|0)){g=f}else{h=d;break}}i=a+66572|0;c[i>>2]=h;return}function $g(a,b){a=a|0;b=b|0;var d=0;d=b+85024|0;c[b+68188+((c[d>>2]&31)*524|0)+520>>2]=c[a+20>>2];c[b+68188+((c[d>>2]&31)*524|0)+512>>2]=c[33779];c[b+68188+((c[d>>2]&31)*524|0)+516>>2]=-1;Yg(b,a);return}function ah(a){a=a|0;var b=0,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;b=i;i=i+17464|0;d=b|0;e=b+16|0;f=b+17432|0;h=b+1048|0;c[64918]=(c[64918]|0)+1;j=a+85024|0;k=c[j>>2]&31;l=a+68188+(k*524|0)|0;m=e|0;c[m>>2]=0;n=a+68188+(k*524|0)+4|0;Zx(n|0,0,32)|0;o=a+68188+(k*524|0)+504|0;c[o>>2]=0;p=a+67644|0;a:do{if((c[p>>2]|0)!=0){if((c[a>>2]|0)==1){break}q=og((a-(c[33781]|0)|0)/121936|0)|0;Vx(a+68188+(k*524|0)+36|0,q|0,468)|0;r=c[a+68188+(k*524|0)+176>>2]|0;if(r>>>0>1023>>>0){aj(1,39200,(s=i,i=i+1|0,i=i+7&-8,c[s>>2]=0,s)|0);i=s}c[264076+(r*300|0)>>2]=c[64918];r=d|0;g[r>>2]=+g[q+20>>2];g[d+4>>2]=+g[q+24>>2];g[d+8>>2]=+g[q+28>>2]+ +(c[q+164>>2]|0);ch(r,l,e);Gc(e+4|0,c[m>>2]|0,4,12);r=n;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+8|0;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+12|0;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+16|0;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+20|0;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+24|0;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+28|0;c[r>>2]=~c[r>>2];r=a+68188+(k*524|0)+32|0;c[r>>2]=~c[r>>2];c[o>>2]=0;c[a+68188+(k*524|0)+508>>2]=c[33783];if((c[m>>2]|0)>0){t=0}else{break}while(1){r=ng(c[e+4+(t<<2)>>2]|0)|0;Vx((c[33784]|0)+(((c[33783]|0)%(c[33782]|0)|0)*208|0)|0,r|0,208)|0;r=c[33783]|0;c[33783]=r+1;if((r|0)>2147483644){break}c[o>>2]=(c[o>>2]|0)+1;t=t+1|0;if((t|0)>=(c[m>>2]|0)){break a}}aj(0,34384,(s=i,i=i+1|0,i=i+7&-8,c[s>>2]=0,s)|0);i=s}}while(0);m=c[p>>2]|0;do{if((m|0)!=0){if((c[m+424>>2]&8|0)==0){break}u=16384;v=0;i=b;return}}while(0);Tl(f,h,16384);c[f>>2]=1;cm(f,c[a+66616>>2]|0);h=c[a+66568>>2]|0;m=a+66564|0;p=c[m>>2]|0;if((h|0)<(p|0)){t=h;while(1){h=t+1|0;$l(f,5);cm(f,h);dm(f,a+1028+((h&63)<<10)|0);o=c[m>>2]|0;if((h|0)<(o|0)){t=h}else{w=o;break}}}else{w=p}c[a+66572>>2]=w;w=c[j>>2]|0;p=w&31;t=c[a+68160>>2]|0;do{if((t|0)<1){x=0;y=0}else{if((c[a>>2]|0)!=4){x=0;y=0;break}m=w-t|0;if((m|0)>28){$i(54248,(s=i,i=i+8|0,c[s>>2]=a+67648,s)|0);i=s;x=0;y=0;break}o=t&31;if((c[a+68188+(o*524|0)+508>>2]|0)>((c[33783]|0)-(c[33782]|0)|0)){x=m;y=a+68188+(o*524|0)|0;break}$i(45088,(s=i,i=i+8|0,c[s>>2]=a+67648,s)|0);i=s;x=0;y=0}}while(0);$l(f,7);t=c[a+117836>>2]|0;w=c[142752]|0;if((t|0)==0){cm(f,w)}else{cm(f,w+t|0)}$l(f,x);x=(c[a+68180>>2]|0)!=0|c[33780];$l(f,(c[a>>2]|0)==4?x:x|2);x=a+68188+(p*524|0)|0;$l(f,c[x>>2]|0);am(f,a+68188+(p*524|0)+4|0,c[x>>2]|0);if((y|0)==0){om(f,0,a+68188+(p*524|0)+36|0);z=0}else{om(f,y+36|0,a+68188+(p*524|0)+36|0);z=c[y+504>>2]|0}x=a+68188+(p*524|0)+504|0;t=(c[x>>2]|0)>0;w=(z|0)>0;o=a+68188+(p*524|0)+508|0;p=y+508|0;b:do{if(t|w){y=0;m=0;h=0;e=0;k=t;n=w;while(1){l=y;d=m;r=e;q=k;c:while(1){A=c[33782]|0;B=c[33784]|0;do{if(q){C=B+((((c[o>>2]|0)+r|0)%(A|0)|0)*208|0)|0;D=c[C>>2]|0;if(n){E=B+((((c[p>>2]|0)+h|0)%(A|0)|0)*208|0)|0;F=c[E>>2]|0;if((D|0)==(F|0)){G=C;H=E;I=38;break c}if((D|0)<(F|0)){J=C;K=D;L=E;break}else{I=32;break c}}else{if((D|0)==9999){G=C;H=l;I=38;break c}if((D|0)<9999){J=C;K=D;L=l;break}else{M=C;N=l;I=41;break c}}}else{if(!n){G=d;H=l;I=38;break c}O=B+((((c[p>>2]|0)+h|0)%(A|0)|0)*208|0)|0;P=c[O>>2]|0;if((P|0)==9999){G=d;H=O;I=38;break c}if((P|0)>9999){J=d;K=9999;L=O}else{M=d;N=O;I=41;break c}}}while(0);nm(f,263788+(K*300|0)|0,J,1);A=r+1|0;B=(A|0)<(c[x>>2]|0);if(B|n){l=L;d=J;r=A;q=B}else{break b}}if((I|0)==32){I=0;if((D|0)>(F|0)){M=C;N=E;I=41}else{break}}else if((I|0)==38){I=0;nm(f,H,G,0);Q=r+1|0;R=G;S=H}if((I|0)==41){I=0;nm(f,N,0,1);Q=r;R=M;S=N}q=h+1|0;d=(Q|0)<(c[x>>2]|0);l=(q|0)<(z|0);if(d|l){y=S;m=R;h=q;e=Q;k=d;n=l}else{break b}}while(1){}}}while(0);Zl(f,1023,10);if((c[(c[64862]|0)+32>>2]|0)>0){Q=0;do{$l(f,1);Q=Q+1|0;}while((Q|0)<(c[(c[64862]|0)+32>>2]|0))}if((c[f+4>>2]|0)!=0){_i(32712,(s=i,i=i+8|0,c[s>>2]=a+67648,s)|0);i=s;Vl(f)}c[a+68188+((c[j>>2]&31)*524|0)+520>>2]=c[f+20>>2];c[a+68188+((c[j>>2]&31)*524|0)+512>>2]=c[33779];c[a+68188+((c[j>>2]&31)*524|0)+516>>2]=-1;Yg(a,f);u=16384;v=0;i=b;return}function bh(){var b=0,d=0,e=0,f=0;if((c[(c[64874]|0)+32>>2]|0)>0){b=0}else{return}do{d=c[33781]|0;e=d+(b*121936|0)|0;a:do{if((c[e>>2]|0)!=0){if((a[d+(b*121936|0)+67680|0]|0)!=0){break}do{if((c[d+(b*121936|0)+101420>>2]|0)==0){if((c[d+(b*121936|0)+117828>>2]|0)!=0){break}f=d+(b*121936|0)+84984|0;do{if((c[f>>2]|0)!=2){if((c[(c[64892]|0)+32>>2]|0)!=0){if((Jm(f)|0)!=0){break}}if(+((c[33779]|0)-(c[d+(b*121936|0)+68176>>2]|0)|0)<+(c[d+(b*121936|0)+84964>>2]|0)*+g[(c[423396]|0)+28>>2]){break a}if((Tg(e)|0)<=0){break}c[d+(b*121936|0)+68180>>2]=1;break a}}while(0);ah(e);c[d+(b*121936|0)+68176>>2]=c[33779];c[d+(b*121936|0)+68180>>2]=0;break a}}while(0);c[d+(b*121936|0)+68180>>2]=1}}while(0);b=b+1|0;}while((b|0)<(c[(c[64874]|0)+32>>2]|0));return}function ch(a,b,e){a=a|0;b=b|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.0,E=0.0,F=0.0,G=0.0;f=i;if((c[64912]|0)==0){i=f;return}h=Xh(a)|0;j=Ch(h)|0;k=Bh(h)|0;c[b>>2]=gi(b+4|0,j)|0;h=bi(k)|0;if((c[142748]|0)<=0){i=f;return}k=a+4|0;l=a+8|0;m=e|0;n=b+176|0;o=0;a:while(1){p=ng(o)|0;do{if((c[p+416>>2]|0)!=0){q=p|0;if((c[q>>2]|0)!=(o|0)){$i(25272,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;c[q>>2]=o}s=p+424|0;t=c[s>>2]|0;if((t&1|0)!=0){break}if((t&256|0)!=0){if((c[p+428>>2]|0)!=(c[n>>2]|0)){break}}if((t&2048|0)!=0){if((c[p+428>>2]|0)==(c[n>>2]|0)){break}}if((t&2|0)!=0){t=c[n>>2]|0;if((t|0)>31){u=14;break a}if((c[p+428>>2]&1<<t|0)==0){break}}t=pg(p)|0;v=t+296|0;w=c[64918]|0;if((c[v>>2]|0)==(w|0)){break}if((c[s>>2]&32|0)!=0){c[v>>2]=w;w=c[m>>2]|0;if((w|0)==256){break}c[e+4+(w<<2)>>2]=c[q>>2];c[m>>2]=(c[m>>2]|0)+1;break}if((fi(j,c[t+288>>2]|0)|0)==0){if((fi(j,c[t+292>>2]|0)|0)==0){break}}w=c[t+216>>2]|0;if((w|0)==0){break}b:do{if((w|0)>0){x=0;while(1){y=c[t+220+(x<<2)>>2]|0;z=x+1|0;if(((d[h+(y>>3)|0]|0)&1<<(y&7)|0)!=0){A=y;B=x;break b}if((z|0)<(w|0)){x=z}else{A=y;B=z;break}}}else{A=0;B=0}}while(0);if((B|0)==(w|0)){x=c[t+284>>2]|0;if((x|0)==0){break}c:do{if((A|0)>(x|0)){C=A}else{z=A;while(1){y=z+1|0;if(((d[h+(z>>3)|0]|0)&1<<(z&7)|0)!=0){C=z;break c}if((z|0)<(x|0)){z=y}else{C=y;break}}}}while(0);if((C|0)==(x|0)){break}}t=c[64918]|0;do{if((c[v>>2]|0)!=(t|0)){c[v>>2]=t;w=c[m>>2]|0;if((w|0)==256){break}c[e+4+(w<<2)>>2]=c[q>>2];c[m>>2]=(c[m>>2]|0)+1}}while(0);if((c[s>>2]&64|0)==0){break}q=c[p+204>>2]|0;if((q|0)!=0){D=+g[p+92>>2]- +g[a>>2];E=+g[p+96>>2]- +g[k>>2];F=+g[p+100>>2]- +g[l>>2];G=+(q|0);if(D*D+E*E+F*F>G*G){break}}ch(p+104|0,b,e)}}while(0);p=o+1|0;if((p|0)<(c[142748]|0)){o=p}else{u=40;break}}if((u|0)==14){aj(1,21848,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r}else if((u|0)==40){i=f;return}}function dh(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=c[a>>2]|0;a=c[b>>2]|0;if((e|0)==(a|0)){aj(1,29456,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;return 0}else{i=d;return((e|0)<(a|0)?-1:1)|0}return 0}function eh(a){a=a|0;var b=0,d=0,e=0;if((c[a+432>>2]|0)!=0){b=zh(c[a+160>>2]|0)|0;return b|0}d=a+436|0;e=a+448|0;if((c[a+424>>2]&1024|0)==0){b=Dh(d,e,0)|0;return b|0}else{b=Dh(d,e,1)|0;return b|0}return 0}function fh(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0;a=i;b=0;do{d=c[258112+(b*20|0)>>2]|0;if((d|0)==0){e=0}else{f=0;g=d;while(1){d=f+1|0;h=c[g+4>>2]|0;if((h|0)==0){e=d;break}else{f=d;g=h}}}_i(31784,(g=i,i=i+16|0,c[g>>2]=b,c[g+8>>2]=e,g)|0);i=g;b=b+1|0;}while((b|0)<64);i=a;return}function gh(){var a=0,b=0,d=0;a=i;i=i+32|0;Zx(258096,0,1280)|0;c[64866]=0;b=a|0;d=a+16|0;Eh(zh(0)|0,b,d);hh(0,b,d)|0;i=a;return}function hh(a,b,d){a=a|0;b=b|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.0,r=0.0,s=0,t=0.0,u=0.0;e=i;i=i+64|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=c[64866]|0;m=258096+(l*20|0)|0;c[64866]=l+1;if((a|0)==4){c[m>>2]=-1;c[258108+(l*20|0)>>2]=0;c[258104+(l*20|0)>>2]=0;i=e;return m|0}else{n=d+4|0;o=b+4|0;p=+g[d>>2]- +g[b>>2]<=+g[n>>2]- +g[o>>2]|0;c[m>>2]=p;q=(+g[d+(p<<2)>>2]+ +g[b+(p<<2)>>2])*.5;g[258100+(l*20|0)>>2]=q;r=+g[b>>2];s=f|0;g[s>>2]=r;t=+g[o>>2];g[f+4>>2]=t;u=+g[b+8>>2];g[f+8>>2]=u;f=j|0;g[f>>2]=r;g[j+4>>2]=t;g[j+8>>2]=u;u=+g[d>>2];b=h|0;g[b>>2]=u;t=+g[n>>2];g[h+4>>2]=t;r=+g[d+8>>2];g[h+8>>2]=r;d=k|0;g[d>>2]=u;g[k+4>>2]=t;g[k+8>>2]=r;g[j+(p<<2)>>2]=q;g[h+(p<<2)>>2]=q;p=a+1|0;c[258104+(l*20|0)>>2]=hh(p,f,d)|0;c[258108+(l*20|0)>>2]=hh(p,s,b)|0;i=e;return m|0}return 0}function ih(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=pg(a)|0;c[a+416>>2]=0;a=d|0;e=c[a>>2]|0;if((e|0)==0){i=b;return}c[a>>2]=0;a=e+16|0;e=c[a>>2]|0;if((e|0)==(d|0)){c[a>>2]=c[d+4>>2];i=b;return}else{f=e}while(1){if((f|0)==0){g=7;break}h=f+4|0;e=c[h>>2]|0;if((e|0)==(d|0)){g=6;break}else{f=e}}if((g|0)==6){c[h>>2]=c[d+4>>2];i=b;return}else if((g|0)==7){_i(54144,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;i=b;return}}function jh(a){a=a|0;var b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.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;b=i;i=i+520|0;d=b|0;e=b+512|0;f=pg(a)|0;j=f|0;do{if((c[j>>2]|0)!=0){k=pg(a)|0;c[a+416>>2]=0;l=k|0;m=c[l>>2]|0;if((m|0)==0){break}c[l>>2]=0;l=m+16|0;m=c[l>>2]|0;if((m|0)==(k|0)){c[l>>2]=c[k+4>>2];break}else{n=m}while(1){if((n|0)==0){o=8;break}p=n+4|0;m=c[p>>2]|0;if((m|0)==(k|0)){o=7;break}else{n=m}}if((o|0)==7){c[p>>2]=c[k+4>>2];break}else if((o|0)==8){_i(54144,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;break}}}while(0);a:do{if((c[a+432>>2]|0)==0){if((c[a+460>>2]&33554433|0)==0){c[a+176>>2]=0;r=a+488|0;o=17;break}else{p=~~+g[a+448>>2];n=(p|0)<1?1:p;p=~~(-0.0- +g[a+444>>2]);m=(p|0)<1?1:p;p=~~(+g[a+456>>2]+32.0);l=(p|0)<1?1:p;c[a+176>>2]=((m|0)>255?65280:m<<8)|((n|0)>255?255:n)|((l|0)>255?16711680:l<<16);r=a+488|0;o=17;break}}else{c[a+176>>2]=16777215;l=a+488|0;do{if(!(+g[a+500>>2]!=0.0)){if(+g[a+504>>2]!=0.0){break}if(!(+g[a+508>>2]!=0.0)){r=l;o=17;break a}}}while(0);s=+ln(a+436|0,a+448|0);t=+g[l>>2];u=t-s;g[a+464>>2]=u;v=s+t;g[a+476>>2]=v;t=+g[a+492>>2];w=t-s;g[a+468>>2]=w;x=s+t;g[a+480>>2]=x;t=+g[a+496>>2];y=t-s;g[a+472>>2]=y;z=s+t;g[a+484>>2]=z;A=u;B=w;C=y;D=v;E=x;F=z}}while(0);if((o|0)==17){z=+g[r>>2];x=z+ +g[a+436>>2];g[a+464>>2]=x;v=+g[a+492>>2];y=v+ +g[a+440>>2];g[a+468>>2]=y;w=+g[a+496>>2];u=w+ +g[a+444>>2];g[a+472>>2]=u;t=z+ +g[a+448>>2];g[a+476>>2]=t;z=v+ +g[a+452>>2];g[a+480>>2]=z;v=w+ +g[a+456>>2];g[a+484>>2]=v;A=x;B=y;C=u;D=t;E=z;F=v}r=a+464|0;g[r>>2]=A+-1.0;o=a+468|0;g[o>>2]=B+-1.0;k=a+472|0;g[k>>2]=C+-1.0;n=a+476|0;g[n>>2]=D+1.0;g[a+480>>2]=E+1.0;g[a+484>>2]=F+1.0;m=f+216|0;c[m>>2]=0;p=f+284|0;c[p>>2]=0;G=f+288|0;c[G>>2]=-1;H=f+292|0;c[H>>2]=-1;I=_h(r,n,d|0,128,e)|0;if((I|0)==0){J=512;K=0;i=b;return}n=(I|0)>0;b:do{if(n){L=a|0;M=0;do{N=Ch(c[d+(M<<2)>>2]|0)|0;do{if(!((N|0)==-1)){O=c[G>>2]|0;if((O|0)==-1|(O|0)==(N|0)){c[G>>2]=N;break}O=c[H>>2]|0;do{if(!((O|0)==-1)){if(!((O|0)!=(N|0)&(c[64912]|0)==1)){break}F=+g[r>>2];E=+g[o>>2];D=+g[k>>2];$i(45016,(q=i,i=i+32|0,c[q>>2]=c[L>>2],h[q+8>>3]=F,h[q+16>>3]=E,h[q+24>>3]=D,q)|0);i=q}}while(0);c[H>>2]=N}}while(0);M=M+1|0;}while((M|0)<(I|0));c[m>>2]=0;if(n){P=0}else{Q=0;break}while(1){M=Bh(c[d+(P<<2)>>2]|0)|0;if(!((M|0)==-1)){L=c[m>>2]|0;c[m>>2]=L+1;c[f+220+(L<<2)>>2]=M;if((c[m>>2]|0)==16){Q=P;break b}}M=P+1|0;if((M|0)<(I|0)){P=M}else{Q=M;break}}}else{c[m>>2]=0;Q=0}}while(0);if((Q|0)!=(I|0)){c[p>>2]=Bh(c[e>>2]|0)|0}e=a+420|0;c[e>>2]=(c[e>>2]|0)+1;e=c[64524]|0;c:do{if((e|0)==-1){R=258096}else{p=258096;I=e;while(1){D=+g[p+4>>2];if(+g[a+464+(I<<2)>>2]>D){S=p+8|0}else{if(!(+g[a+476+(I<<2)>>2]<D)){R=p;break c}S=p+12|0}Q=c[S>>2]|0;m=c[Q>>2]|0;if((m|0)==-1){R=Q;break}else{p=Q;I=m}}}}while(0);c[j>>2]=R;j=R+16|0;c[f+4>>2]=c[j>>2];c[j>>2]=f;c[a+416>>2]=1;J=512;K=0;i=b;return}function kh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+24|0;g=f|0;c[g>>2]=a;c[g+4>>2]=b;c[g+8>>2]=d;d=g+12|0;c[d>>2]=0;c[g+16>>2]=e;lh(258096,g);i=f;return c[d>>2]|0}function lh(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.0,s=0,t=0.0;d=i;e=b+4|0;f=b|0;h=b+12|0;j=b+16|0;k=b+8|0;l=a;a:while(1){a=c[l+16>>2]|0;if((a|0)!=0){m=a;while(1){a=c[m+4>>2]|0;n=qg(m)|0;o=c[e>>2]|0;do{if(!(+g[n+464>>2]>+g[o>>2])){if(+g[n+468>>2]>+g[o+4>>2]){break}if(+g[n+472>>2]>+g[o+8>>2]){break}p=c[f>>2]|0;if(+g[n+476>>2]<+g[p>>2]){break}if(+g[n+480>>2]<+g[p+4>>2]){break}if(+g[n+484>>2]<+g[p+8>>2]){break}p=c[h>>2]|0;if((p|0)==(c[j>>2]|0)){q=11;break a}c[(c[k>>2]|0)+(p<<2)>>2]=(m-263780|0)/300|0;c[h>>2]=(c[h>>2]|0)+1}}while(0);if((a|0)==0){break}else{m=a}}}m=l|0;n=c[m>>2]|0;if((n|0)==-1){q=18;break}o=l+4|0;r=+g[o>>2];if(+g[(c[e>>2]|0)+(n<<2)>>2]>r){lh(c[l+8>>2]|0,b);s=c[m>>2]|0;t=+g[o>>2]}else{s=n;t=r}if(!(+g[(c[f>>2]|0)+(s<<2)>>2]<t)){q=18;break}l=c[l+12>>2]|0}if((q|0)==11){_i(39160,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;i=d;return}else if((q|0)==18){i=d;return}}function mh(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;k=ng(h)|0;Zx(a|0,0,56)|0;if((c[k+460>>2]&i|0)==0){g[a+8>>2]=1.0;return}h=k+432|0;do{if((c[h>>2]|0)==0){l=k+436|0;m=k+448|0;if((c[k+424>>2]&1024|0)==0){n=Dh(l,m,0)|0;break}else{n=Dh(l,m,1)|0;break}}else{n=zh(c[k+160>>2]|0)|0}}while(0);vi(a,b,f,d,e,n,i,k+488|0,(c[h>>2]|0)!=0?k+500|0:62464,j);if(!(+g[a+8>>2]<1.0)){return}c[a+52>>2]=c[k>>2];return}function nh(a,b,d,e,f,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;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.0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.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;l=i;i=i+4296|0;m=l|0;n=l+24|0;o=l+4120|0;p=l+4176|0;q=(d|0)==0?62464:d;d=(e|0)==0?62464:e;Zx(p|0,0,116)|0;e=p+48|0;ui(e,b,f,q,d,0,j,k);r=p+56|0;s=+g[r>>2];c[p+100>>2]=s!=1.0?1022:1023;if(s==0.0){Vx(a|0,e|0,56)|0;t=116;u=0;i=l;return}v=p+108|0;c[v>>2]=j;j=p+32|0;c[j>>2]=b;s=+g[f>>2];w=p+36|0;g[w>>2]=s;x=+g[f+4>>2];g[p+40>>2]=x;y=+g[f+8>>2];g[p+44>>2]=y;f=p+24|0;c[f>>2]=q;z=p+28|0;c[z>>2]=d;A=p+104|0;c[A>>2]=h;h=p+112|0;c[h>>2]=k;B=+g[b>>2];C=+g[q>>2];if(s>B){g[p>>2]=B+C+-1.0;g[p+12>>2]=s+ +g[d>>2]+1.0}else{g[p>>2]=s+C+-1.0;g[p+12>>2]=B+ +g[d>>2]+1.0}k=b+4|0;B=+g[k>>2];C=+g[q+4>>2];if(x>B){g[p+4>>2]=B+C+-1.0;g[p+16>>2]=x+ +g[d+4>>2]+1.0}else{g[p+4>>2]=x+C+-1.0;g[p+16>>2]=+g[k>>2]+ +g[d+4>>2]+1.0}k=b+8|0;C=+g[k>>2];x=+g[q+8>>2];if(y>C){g[p+8>>2]=C+x+-1.0;g[p+20>>2]=y+ +g[d+8>>2]+1.0}else{g[p+8>>2]=y+x+-1.0;g[p+20>>2]=+g[k>>2]+ +g[d+8>>2]+1.0}d=o;c[m>>2]=p;c[m+4>>2]=p+12;c[m+8>>2]=n;k=m+12|0;c[k>>2]=0;c[m+16>>2]=1024;lh(258096,m);m=c[k>>2]|0;k=c[A>>2]|0;if((k|0)==1023){D=-1}else{q=c[(ng(k)|0)+512>>2]|0;D=(q|0)==1023?-1:q}q=e|0;a:do{if((m|0)>0){k=o|0;b=o+4|0;E=p+52|0;F=o+52|0;G=o+8|0;H=e;I=0;while(1){if((c[q>>2]|0)!=0){J=H;break a}K=n+(I<<2)|0;L=ng(c[K>>2]|0)|0;M=c[A>>2]|0;do{if((M|0)==1023){N=15}else{if((c[K>>2]|0)==(M|0)){break}O=c[L+512>>2]|0;if(!((O|0)==(M|0)|(O|0)==(D|0))){N=15}}}while(0);do{if((N|0)==15){N=0;if((c[L+460>>2]&c[v>>2]|0)==0){break}M=L+432|0;do{if((c[M>>2]|0)==0){K=L+436|0;O=L+448|0;if((c[L+424>>2]&1024|0)==0){P=Dh(K,O,0)|0;break}else{P=Dh(K,O,1)|0;break}}else{P=zh(c[L+160>>2]|0)|0}}while(0);vi(o,c[j>>2]|0,w,c[f>>2]|0,c[z>>2]|0,P,c[v>>2]|0,L+488|0,(c[M>>2]|0)!=0?L+500|0:62464,c[h>>2]|0);do{if((c[k>>2]|0)==0){if((c[b>>2]|0)==0){break}c[E>>2]=1;c[F>>2]=c[L>>2]}else{c[q>>2]=1;c[F>>2]=c[L>>2]}}while(0);if(!(+g[G>>2]<+g[r>>2])){break}M=c[E>>2]|0;c[F>>2]=c[L>>2];Vx(H|0,d|0,56)|0;c[E>>2]=c[E>>2]|M}}while(0);L=I+1|0;if((L|0)<(m|0)){I=L}else{J=H;break}}}else{J=e}}while(0);Vx(a|0,J|0,56)|0;t=116;u=0;i=l;return}function oh(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;d=i;i=i+4120|0;e=d|0;f=d+24|0;g=$h(a,0)|0;c[e>>2]=a;c[e+4>>2]=a;c[e+8>>2]=f;h=e+12|0;c[h>>2]=0;c[e+16>>2]=1024;lh(258096,e);e=c[h>>2]|0;if((e|0)>0){j=g;k=0}else{l=g;m=4096;n=0;i=d;return l|0}while(1){g=c[f+(k<<2)>>2]|0;if((g|0)==(b|0)){o=j}else{h=ng(g)|0;g=h+432|0;do{if((c[g>>2]|0)==0){p=h+436|0;q=h+448|0;if((c[h+424>>2]&1024|0)==0){r=Dh(p,q,0)|0;break}else{r=Dh(p,q,1)|0;break}}else{r=zh(c[h+160>>2]|0)|0}}while(0);o=ai(a,r,h+488|0,(c[g>>2]|0)!=0?h+500|0:62464)|0|j}q=k+1|0;if((q|0)<(e|0)){j=o;k=q}else{l=o;break}}m=4096;n=0;i=d;return l|0}function ph(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0;b=i;d=(c[430932]|0)+(c[a>>2]|0)|0;e=c[a+4>>2]|0;if(((e>>>0)%40|0|0)!=0){aj(1,44648,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}a=(e>>>0)/40|0;if(e>>>0<40>>>0){aj(1,38872,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}h=xj(a*48|0,0)|0;c[469129]=h;c[469128]=a;if(e>>>0>10279>>>0){aj(1,34e3,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{j=0;k=d;l=h}while(1){g[l+(j*48|0)>>2]=+g[k>>2]+-1.0;g[l+(j*48|0)+12>>2]=+g[k+12>>2]+1.0;g[l+(j*48|0)+4>>2]=+g[k+4>>2]+-1.0;g[l+(j*48|0)+16>>2]=+g[k+16>>2]+1.0;g[l+(j*48|0)+8>>2]=+g[k+8>>2]+-1.0;g[l+(j*48|0)+20>>2]=+g[k+20>>2]+1.0;do{if((j|0)!=0){h=c[k+36>>2]|0;d=l+(j*48|0)+36|0;c[d>>2]=h;f=xj(h<<2,0)|0;h=f;c[l+(j*48|0)+32>>2]=f-(c[469125]|0)>>2;if((c[d>>2]|0)>0){f=k+32|0;e=0;do{c[h+(e<<2)>>2]=(c[f>>2]|0)+e;e=e+1|0;}while((e|0)<(c[d>>2]|0))}d=c[k+28>>2]|0;e=l+(j*48|0)+44|0;c[e>>2]=d;f=xj(d<<2,0)|0;d=f;c[l+(j*48|0)+40>>2]=f-(c[469127]|0)>>2;if((c[e>>2]|0)<=0){break}f=k+24|0;h=0;do{c[d+(h<<2)>>2]=(c[f>>2]|0)+h;h=h+1|0;}while((h|0)<(c[e>>2]|0))}}while(0);e=j+1|0;if((e|0)>=(a|0)){break}j=e;k=k+40|0;l=c[469129]|0}i=b;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0;b=i;d=c[a+4>>2]|0;if(((d>>>0)%12|0|0)!=0){aj(1,29288,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}f=c[a>>2]|0;a=c[430932]|0;h=(d>>>0)/12|0;j=xj((h*44|0)+44|0,0)|0;c[469131]=j;c[469130]=h;if(!(d>>>0>11>>>0)){i=b;return}d=j;j=0;k=a+f|0;while(1){f=c[469117]|0;a=c[k>>2]|0;l=f+(a*12|0)|0;c[d+36>>2]=l;c[d+32>>2]=c[k+4>>2];m=c[k+8>>2]|0;c[d>>2]=m;if(!((m|0)>-1&(m|0)<(c[469114]|0))){n=6;break}c[d+4>>2]=c[(c[469115]|0)+(m*72|0)+68>>2];g[d+8>>2]=-0.0- +g[(c[l>>2]|0)+12>>2];g[d+20>>2]=+g[(c[f+((a+1|0)*12|0)>>2]|0)+12>>2];g[d+12>>2]=-0.0- +g[(c[f+((a+2|0)*12|0)>>2]|0)+12>>2];g[d+24>>2]=+g[(c[f+((a+3|0)*12|0)>>2]|0)+12>>2];g[d+16>>2]=-0.0- +g[(c[f+((a+4|0)*12|0)>>2]|0)+12>>2];g[d+28>>2]=+g[(c[f+((a+5|0)*12|0)>>2]|0)+12>>2];a=j+1|0;if((a|0)<(h|0)){d=d+44|0;j=a;k=k+12|0}else{n=8;break}}if((n|0)==6){aj(1,21696,(e=i,i=i+8|0,c[e>>2]=m,e)|0);i=e}else if((n|0)==8){i=b;return}}
|
|
|
|
|
|
|
|
function nq(){var a=0,d=0,e=0,f=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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0.0,Xa=0.0,Ya=0,Za=0,_a=0,$a=0.0,ab=0.0,bb=0.0,cb=0.0,db=0.0,eb=0.0,fb=0.0,gb=0.0,hb=0.0,ib=0.0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0.0,Ab=0.0,Bb=0.0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0;a=i;i=i+760|0;d=a|0;e=a+8|0;f=a+184|0;j=a+312|0;k=a+328|0;l=a+344|0;m=a+360|0;n=a+376|0;o=a+392|0;p=a+408|0;q=a+424|0;r=a+440|0;s=a+488|0;t=a+536|0;u=a+552|0;v=a+568|0;w=a+584|0;x=a+704|0;y=a+712|0;z=a+736|0;A=a+56|0;B=f|0;Zx(q|0,0,12)|0;C=Po(0)|0;if((C|0)==0){D=120;E=0;F=48;G=0;H=48;I=0;J=128;K=0;L=128;M=0;N=40;O=0;i=a;return}P=f+1|0;f=j|0;Q=j+4|0;R=j+8|0;j=q|0;q=o|0;S=p|0;T=o+4|0;U=o+8|0;o=p+4|0;V=p+8|0;p=k|0;W=k+4|0;X=k+8|0;Y=l|0;Z=l+4|0;_=l+8|0;$=r|0;aa=r|0;ba=r+4|0;ca=r+12|0;da=r+16|0;ea=r+24|0;fa=r+28|0;ga=r+36|0;ha=r+40|0;ia=r+8|0;ja=y+12|0;ka=y|0;la=y+4|0;ma=y+8|0;na=s|0;oa=s|0;pa=s+4|0;qa=s+12|0;ra=s+16|0;sa=s+24|0;ta=s+28|0;ua=s+36|0;va=s+40|0;wa=s+8|0;xa=z+12|0;ya=z|0;za=z+4|0;Aa=z+8|0;Ba=m|0;Ca=m+4|0;Da=m+8|0;m=n|0;Ea=n+4|0;Fa=n+8|0;n=v|0;Ga=v+4|0;Ha=v+8|0;v=t|0;Ia=t+4|0;Ja=t+8|0;t=u|0;Ka=u+4|0;La=u+8|0;u=a+16|0;Ma=w|0;Na=w+12|0;Oa=w+16|0;Pa=w+20|0;w=C;do{do{if((Qo(w,60472,A,128)|0)!=0){if((Tx(A,38448)|0)!=0){break}So(w,38952,x)|0;if(!(+g[x>>2]!=0.0)){g[x>>2]=32.0}if((Qo(w,57792,B,128)|0)==0){ue[c[636260]&31](3,38032,(Qa=i,i=i+1|0,i=i+7&-8,c[Qa>>2]=0,Qa)|0);i=Qa;break}C=Vc(P|0)|0;if((C|0)<1){ue[c[636260]&31](3,37640,(Qa=i,i=i+1|0,i=i+7&-8,c[Qa>>2]=0,Qa)|0);i=Qa;break}if((Ro(w,26400,f)|0)==0){g[f>>2]=0.0;g[Q>>2]=0.0;g[R>>2]=0.0}Mo(C,j,q,S,0);Ra=+g[f>>2];Sa=+g[q>>2]+Ra;g[q>>2]=Sa;Ta=+g[Q>>2];Ua=+g[T>>2]+Ta;g[T>>2]=Ua;Va=+g[R>>2];Wa=+g[U>>2]+Va;g[U>>2]=Wa;Xa=+g[S>>2]+Ra;g[S>>2]=Xa;Ra=+g[o>>2]+Ta;g[o>>2]=Ra;Ta=+g[V>>2]+Va;g[V>>2]=Ta;Va=(Sa+Xa)*.5;Xa=(Ua+Ra)*.5;Ra=(Ta+Wa)*.5;g[f>>2]=Va;g[Q>>2]=Xa;g[R>>2]=Ra;g[p>>2]=Va;g[W>>2]=Xa;g[X>>2]=Ra;g[Y>>2]=Va;g[Z>>2]=Xa;g[_>>2]=Ra;To(w,37336,e)|0;Ya=c[e>>2]|0;if((Ya&1|0)==0){Za=2-(Ya>>>1&1)|0;_a=Za;$a=+g[l+(Za<<2)>>2];ab=+g[k+(Za<<2)>>2]}else{_a=0;$a=Va;ab=Va}Wa=+g[x>>2];Za=l+(_a<<2)|0;g[Za>>2]=$a-Wa;Ya=k+(_a<<2)|0;g[Ya>>2]=Wa+ab;Wa=+g[Y>>2];Ta=+g[Z>>2];Ua=+g[_>>2];Sa=+g[p>>2];bb=+g[W>>2];cb=+g[X>>2];iv(36880,(Qa=i,i=i+56|0,c[Qa>>2]=C,h[Qa+8>>3]=Wa,h[Qa+16>>3]=Ta,h[Qa+24>>3]=Ua,h[Qa+32>>3]=Sa,h[Qa+40>>3]=bb,h[Qa+48>>3]=cb,Qa)|0);i=Qa;db=+g[V>>2]-Ra;Ra=Ua+db+24.0;g[ia>>2]=Ra;g[r+20>>2]=Ra;g[r+32>>2]=Ra;g[r+44>>2]=Ra;eb=+g[S>>2]-Va;fb=Wa+eb;g[aa>>2]=fb;gb=+g[o>>2]-Xa;hb=Ta+gb;g[ba>>2]=hb;g[ca>>2]=fb;fb=+g[T>>2]-Xa;Xa=Ta+fb;g[da>>2]=Xa;ib=+g[q>>2]-Va;Va=Wa+ib;g[ea>>2]=Va;g[fa>>2]=Xa;g[ga>>2]=Va;g[ha>>2]=hb;g[ja>>2]=Ra;g[ka>>2]=0.0;g[la>>2]=0.0;g[ma>>2]=1.0;Ra=cb+db+24.0;g[wa>>2]=Ra;g[s+20>>2]=Ra;g[s+32>>2]=Ra;g[s+44>>2]=Ra;hb=Sa+eb;g[oa>>2]=hb;eb=bb+gb;g[pa>>2]=eb;g[qa>>2]=hb;hb=bb+fb;g[ra>>2]=hb;fb=Sa+ib;g[sa>>2]=fb;g[ta>>2]=hb;g[ua>>2]=fb;g[va>>2]=eb;g[xa>>2]=Ra;g[ya>>2]=0.0;g[za>>2]=0.0;g[Aa>>2]=1.0;g[Ba>>2]=Wa;g[Ca>>2]=Ta;Ta=db+24.0;g[Da>>2]=Ua+Ta;g[m>>2]=Sa;g[Ea>>2]=bb;g[Fa>>2]=cb+Ta;if((gr(Ba)|0)==0){break}if((gr(m)|0)==0){break}else{jb=0}do{kb=(jb|0)==0;if(kb){lb=mq($,4,y,1)|0;mb=mq(na,4,z,0)|0;nb=lb}else{lb=mq(na,4,z,1)|0;mb=mq($,4,y,0)|0;nb=lb}lb=(nb|0)==0;do{if(!lb){ob=(mb|0)==0;pb=nb;while(1){qb=c[pb+44>>2]|0;if(!ob){rb=pb|0;sb=pb+12|0;tb=pb+16|0;ub=pb+20|0;vb=mb;while(1){wb=c[vb+44>>2]|0;xb=vb|0;yb=c[xb>>2]|0;iv(36488,(Qa=i,i=i+16|0,c[Qa>>2]=c[rb>>2],c[Qa+8>>2]=yb,Qa)|0);i=Qa;if(kb){zb=+g[Ba>>2];Ab=+g[Ca>>2]}else{zb=+g[m>>2];Ab=+g[Ea>>2]}g[n>>2]=+g[sb>>2]-zb;g[Ga>>2]=+g[tb>>2]-Ab;g[Ha>>2]=0.0;+dn(n);g[v>>2]=+g[sb>>2];g[Ia>>2]=+g[tb>>2];g[Ja>>2]=+g[ub>>2];Ta=+g[n>>2];g[v>>2]=+g[sb>>2]+Ta;cb=+g[Ga>>2];g[Ia>>2]=+g[tb>>2]+cb;bb=+g[Ha>>2];g[Ja>>2]=+g[ub>>2]+bb+1.0;g[t>>2]=+g[sb>>2]+Ta*16.0;g[Ka>>2]=+g[tb>>2]+cb*16.0;g[La>>2]=+g[ub>>2]+bb*16.0+1.0;yb=mr(v,t,u,Ma,10)|0;do{if((yb|0)>=1){if((yb|0)>1){g[sb>>2]=+g[Na>>2];g[tb>>2]=+g[Oa>>2];Bb=+g[Pa>>2]}else{g[sb>>2]=+g[t>>2];g[tb>>2]=+g[Ka>>2];Bb=+g[La>>2]}g[ub>>2]=Bb;if((gr(sb)|0)==0){break}Cb=vb+24|0;if((gr(Cb)|0)==0){break}Db=c[164946]|0;if((Db|0)==0){Eb=0}else{Fb=c[Db+44>>2]|0;if((Fb|0)==0){tp(54768,(Qa=i,i=i+1|0,i=i+7&-8,c[Qa>>2]=0,Qa)|0);i=Qa;Gb=c[164946]|0;Hb=Gb;Ib=c[Gb+44>>2]|0}else{Hb=Db;Ib=Fb}c[164946]=Ib;c[164928]=(c[164928]|0)+1;Eb=Hb}c[Eb>>2]=c[xb>>2];if(kb){c[Eb+8>>2]=~~+g[Ya>>2]&65535|~~+g[Za>>2]<<16}else{c[Eb+8>>2]=~~+g[Za>>2]&65535|~~+g[Ya>>2]<<16}c[Eb+4>>2]=c[e>>2]<<16|C;g[Eb+12>>2]=+g[sb>>2];g[Eb+16>>2]=+g[tb>>2];g[Eb+20>>2]=+g[ub>>2];g[Eb+24>>2]=+g[Cb>>2];g[Eb+28>>2]=+g[vb+28>>2];g[Eb+32>>2]=+g[vb+32>>2];Cb=Eb+36|0;c[Cb>>2]=19;do{if((To(w,52672,d)|0)==0){Jb=0}else{Fb=c[d>>2]|0;if((Fb|0)==2){Jb=33554432;break}else if((Fb|0)==1){Jb=16777216;break}else{Jb=0;break}}}while(0);c[Cb>>2]=c[Cb>>2]|Jb;b[Eb+40>>1]=~~+g[637857];c[154390]=(c[154390]|0)+1;Fb=c[rb>>2]|0;c[Eb+44>>2]=c[(c[637662]|0)+(Fb<<2)>>2];c[(c[637662]|0)+(Fb<<2)>>2]=Eb}}while(0);if((wb|0)==0){break}else{vb=wb}}}if((qb|0)==0){break}else{pb=qb}}if(lb){break}else{Kb=nb}while(1){pb=Kb+44|0;ob=c[pb>>2]|0;Zx(Kb|0,0,48)|0;c[pb>>2]=c[164946];c[164946]=Kb;c[164928]=(c[164928]|0)-1;if((ob|0)==0){break}else{Kb=ob}}}}while(0);if((mb|0)!=0){lb=mb;while(1){kb=lb+44|0;ob=c[kb>>2]|0;Zx(lb|0,0,48)|0;c[kb>>2]=c[164946];c[164946]=lb;c[164928]=(c[164928]|0)-1;if((ob|0)==0){break}else{lb=ob}}}jb=jb+1|0;}while((c[e>>2]&3|0)!=0&(jb|0)<2)}}while(0);w=Po(w)|0;}while((w|0)!=0);D=120;E=0;F=48;G=0;H=48;I=0;J=128;K=0;L=128;M=0;N=40;O=0;i=a;return}function oq(){var a=0,d=0,e=0,f=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,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;a=i;i=i+336|0;d=a|0;e=a+8|0;f=a+16|0;j=a+24|0;k=a+40|0;l=a+56|0;m=a+72|0;n=a+120|0;o=n;p=a+208|0;q=~~+ev(19872,17728);r=Po(0)|0;if((r|0)==0){s=128;t=0;u=84;v=0;i=a;return}w=j|0;x=a+88|0;y=a+104|0;z=m|0;A=m+4|0;B=m+8|0;m=l|0;C=l+4|0;D=l+8|0;l=n+12|0;E=n|0;F=n+4|0;G=j+4|0;H=n+8|0;I=j+8|0;j=n+16|0;J=n+20|0;K=n+24|0;L=k|0;M=k+8|0;N=k+4|0;k=n+80|0;O=n+68|0;P=r;a:while(1){b:do{if((Qo(P,60472,p,128)|0)!=0){if((Tx(p,58976)|0)!=0){break}if((Zp(P,w,x,y,z)|0)==0){break}Q=qr(x,y,-1,4)|0;c:do{if((Q|0)!=0){r=c[637759]|0;R=Q;while(1){if((c[r+((c[R+4>>2]|0)*28|0)>>2]&128|0)!=0){break}R=c[R+16>>2]|0;if((R|0)==0){break c}}U=+g[A>>2];V=+g[B>>2];ue[c[636260]&31](1,35600,(W=i,i=i+24|0,h[W>>3]=+g[z>>2],h[W+8>>3]=U,h[W+16>>3]=V,W)|0);i=W;if(+g[z>>2]!=0.0){X=13}else{if(+g[A>>2]!=0.0){X=13}}d:do{if((X|0)==13){X=0;g[m>>2]=0.0;g[C>>2]=0.0;g[D>>2]=0.0;Zx(o|0,0,84)|0;R=0;e:while(1){Jp(n,-1,w,2,0,z,m,0,30,.10000000149011612,445,0,q)|0;Y=c[l>>2]|0;r=c[637759]|0;Z=Q;while(1){_=c[Z+4>>2]|0;if((c[r+(_*28|0)>>2]&128|0)!=0&(_|0)==(Y|0)){break}Z=c[Z+16>>2]|0;if((Z|0)==0){break e}}g[w>>2]=+g[E>>2];g[G>>2]=+g[F>>2];g[I>>2]=+g[H>>2];g[z>>2]=+g[j>>2];g[A>>2]=+g[J>>2];g[B>>2]=+g[K>>2];R=R+1|0;if((R|0)>=20){break d}}if((Y|0)==0){break}else{$=Q}do{R=$+4|0;Z=c[R>>2]|0;f:do{if((c[(c[637759]|0)+(Z*28|0)>>2]&128|0)!=0){r=c[(c[637662]|0)+(Z<<2)>>2]|0;if((r|0)!=0){_=r;do{if((c[_>>2]|0)==(Y|0)){break f}_=c[_+44>>2]|0;}while((_|0)!=0)}_=c[164946]|0;if((_|0)==0){X=27;break a}r=c[_+44>>2]|0;if((r|0)==0){tp(54768,(W=i,i=i+1|0,i=i+7&-8,c[W>>2]=0,W)|0);i=W;aa=c[164946]|0;c[164946]=c[aa+44>>2];c[164928]=(c[164928]|0)+1;if((aa|0)==0){X=27;break a}else{ba=aa}}else{c[164946]=r;c[164928]=(c[164928]|0)+1;ba=_}c[ba>>2]=Y;c[ba+4>>2]=~~+g[B>>2];V=+g[z>>2];U=+g[A>>2];c[ba+8>>2]=~~+T(V*V+U*U);g[ba+12>>2]=+g[w>>2];g[ba+16>>2]=+g[G>>2];g[ba+20>>2]=+g[I>>2];g[ba+24>>2]=+g[E>>2];g[ba+28>>2]=+g[F>>2];g[ba+32>>2]=+g[H>>2];_=ba+36|0;c[_>>2]=18;do{if((To(P,52672,d)|0)==0){ca=0}else{r=c[d>>2]|0;if((r|0)==2){ca=33554432;break}else if((r|0)==1){ca=16777216;break}else{ca=0;break}}}while(0);c[_>>2]=c[_>>2]|ca;b[ba+40>>1]=~~+g[637855];r=c[R>>2]|0;c[ba+44>>2]=c[(c[637662]|0)+(r<<2)>>2];c[(c[637662]|0)+(r<<2)>>2]=ba;c[154384]=(c[154384]|0)+1}}while(0);$=c[$+16>>2]|0;}while(($|0)!=0)}}while(0);if(+S(+(+g[z>>2]))>100.0){break b}if(+S(+(+g[A>>2]))>100.0){break b}R=c[637756]|0;if((R|0)>1){Z=1;r=R;while(1){R=c[637662]|0;aa=c[637759]|0;da=Q;g:while(1){ea=c[da+4>>2]|0;fa=c[R+(ea<<2)>>2]|0;if((fa|0)!=0){ga=fa;do{if((c[ga>>2]|0)==(Z|0)){ha=r;break g}ga=c[ga+44>>2]|0;}while((ga|0)!=0)}if((c[aa+(ea*28|0)>>2]&128|0)!=0&(ea|0)==(Z|0)){ha=r;break}ga=c[da+16>>2]|0;if((ga|0)==0){X=43;break}else{da=ga}}do{if((X|0)==43){X=0;da=c[637757]|0;aa=da+(Z*48|0)+4|0;if((c[aa>>2]|0)<=0){ha=r;break}R=da+(Z*48|0)+8|0;da=0;do{ga=c[(c[637755]|0)+((c[R>>2]|0)+da<<2)>>2]|0;h:do{if((c[(c[637753]|0)+(((ga|0)>-1?ga:-ga|0)*24|0)+4>>2]&4|0)!=0){bq(ga,L);if(+g[M>>2]<+g[I>>2]){break}if((Pp(+g[B>>2],w,L,f)|0)==0){break}U=+g[f>>2];if(!(U<150.0)){break}V=+g[N>>2]- +g[G>>2];g[m>>2]=U*(+g[L>>2]- +g[w>>2]);g[C>>2]=V*U;g[D>>2]=U*0.0;Jp(n,-1,w,2,0,z,m,30,30,.10000000149011612,1468,Z,0)|0;if((c[k>>2]|0)>=30){break}fa=c[O>>2]|0;if((fa&56|0)!=0|(fa&1408|0)==0){break}fa=c[l>>2]|0;ia=Q;while(1){if((c[ia+4>>2]|0)==(fa|0)){break h}ja=c[ia+16>>2]|0;if((ja|0)==0){ka=Q;break}else{ia=ja}}do{ia=ka+4|0;fa=c[ia>>2]|0;i:do{if((c[(c[637759]|0)+(fa*28|0)>>2]&128|0)!=0){ja=c[(c[637662]|0)+(fa<<2)>>2]|0;if((ja|0)!=0){la=ja;do{if((c[la>>2]|0)==(Z|0)){break i}la=c[la+44>>2]|0;}while((la|0)!=0)}la=c[164946]|0;if((la|0)==0){X=62;break a}ja=c[la+44>>2]|0;if((ja|0)==0){tp(54768,(W=i,i=i+1|0,i=i+7&-8,c[W>>2]=0,W)|0);i=W;ma=c[164946]|0;c[164946]=c[ma+44>>2];c[164928]=(c[164928]|0)+1;if((ma|0)==0){X=62;break a}else{na=ma}}else{c[164946]=ja;c[164928]=(c[164928]|0)+1;na=la}c[na>>2]=c[l>>2];c[na+4>>2]=~~+g[B>>2];U=+g[m>>2];V=+g[C>>2];c[na+8>>2]=~~+T(U*U+V*V);g[na+12>>2]=+g[w>>2];g[na+16>>2]=+g[G>>2];g[na+20>>2]=+g[I>>2];g[na+24>>2]=+g[L>>2];g[na+28>>2]=+g[N>>2];g[na+32>>2]=+g[M>>2];la=na+36|0;c[la>>2]=18;do{if((To(P,52672,e)|0)==0){oa=0}else{ja=c[e>>2]|0;if((ja|0)==2){oa=33554432;break}else if((ja|0)==1){oa=16777216;break}else{oa=0;break}}}while(0);c[la>>2]=c[la>>2]|oa;b[na+40>>1]=~~+g[637856];ja=c[ia>>2]|0;c[na+44>>2]=c[(c[637662]|0)+(ja<<2)>>2];c[(c[637662]|0)+(ja<<2)>>2]=na;c[154384]=(c[154384]|0)+1}}while(0);ka=c[ka+16>>2]|0;}while((ka|0)!=0)}}while(0);da=da+1|0;}while((da|0)<(c[aa>>2]|0));ha=c[637756]|0}}while(0);aa=Z+1|0;if((aa|0)<(ha|0)){Z=aa;r=ha}else{break}}}or(Q);break b}}while(0);ue[c[636260]&31](1,57152,(W=i,i=i+1|0,i=i+7&-8,c[W>>2]=0,W)|0);i=W;or(Q)}}while(0);r=Po(P)|0;if((r|0)==0){X=74;break}else{P=r}}if((X|0)==27){or(Q);s=128;t=0;u=84;v=0;i=a;return}else if((X|0)==62){or(Q);s=128;t=0;u=84;v=0;i=a;return}else if((X|0)==74){s=128;t=0;u=84;v=0;i=a;return}}function pq(a,d){a=a|0;d=d|0;var e=0,f=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.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0,oa=0,pa=0;e=i;i=i+496|0;f=e|0;j=e+80|0;k=e+168|0;l=e+208|0;m=e+224|0;n=e+240|0;o=e+256|0;p=e+272|0;q=e+288|0;r=e+328|0;s=e+416|0;t=e+456|0;u=j;v=k;Zx(l|0,0,12)|0;if((c[(c[637759]|0)+(a*28|0)+4>>2]&5|0)==0){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}if(((ir(a)|0)&2|0)==0){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}if((c[(c[637759]|0)+(a*28|0)+4>>2]&4|0)!=0){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}C=c[637757]|0;if(+g[C+(d*48|0)+32>>2]<+g[C+(a*48|0)+20>>2]){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}D=n|0;g[D>>2]=+g[C+(a*48|0)+36>>2];E=n+4|0;g[E>>2]=+g[C+(a*48|0)+40>>2];F=n+8|0;g[F>>2]=+g[C+(a*48|0)+44>>2];if((gr(D)|0)==0){G=+g[D>>2];H=+g[E>>2];I=+g[F>>2];iv(35e3,(J=i,i=i+32|0,c[J>>2]=a,h[J+8>>3]=G,h[J+16>>3]=H,h[J+24>>3]=I,J)|0);i=J}n=o|0;g[n>>2]=+g[D>>2];g[o+4>>2]=+g[E>>2];g[o+8>>2]=+g[F>>2]+-1.0e3;lr(q,D,n,4,-1);Vx(v|0,q|0,36)|0;if((c[k>>2]|0)!=0){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}g[l>>2]=+g[k+8>>2];g[l+4>>2]=+g[k+12>>2];g[l+8>>2]=+g[k+16>>2];q=C+(d*48|0)+4|0;if((c[q>>2]|0)<=0){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}n=C+(d*48|0)+8|0;d=l|0;C=p|0;K=l+4|0;L=p+4|0;M=l+8|0;l=p+8|0;p=m|0;N=m+8|0;O=m+4|0;m=o|0;P=o+4|0;Q=o+8|0;o=r;R=j+68|0;S=j+8|0;U=j+12|0;V=j+16|0;W=j+20|0;j=s;X=k+8|0;Y=k+12|0;Z=k+16|0;_=t;$=k+4|0;k=f|0;aa=0;a:while(1){ba=c[(c[637755]|0)+((c[n>>2]|0)+aa<<2)>>2]|0;ca=(ba|0)>-1?ba:-ba|0;da=c[637753]|0;b:do{if((c[da+(ca*24|0)+4>>2]&1|0)!=0){ea=c[(c[637751]|0)+(c[da+(ca*24|0)+12>>2]<<2)>>2]|0;fa=c[(c[637749]|0)+(((ea|0)>-1?ea:-ea|0)<<3)>>2]|0;ea=c[637745]|0;I=+g[ea+(fa*12|0)>>2]- +g[d>>2];g[C>>2]=I;H=+g[ea+(fa*12|0)+4>>2]- +g[K>>2];g[L>>2]=H;G=+g[ea+(fa*12|0)+8>>2]- +g[M>>2];g[l>>2]=G;fa=da+(ca*24|0)|0;ea=c[fa>>2]|0;ga=c[637747]|0;if(+g[ga+(ea*20|0)>>2]*I+ +g[ga+(ea*20|0)+4>>2]*H+G*+g[ga+(ea*20|0)+8>>2]>0.0){break}bq(ba,p);G=+g[N>>2];H=+g[M>>2];if(G<H+64.0){break}ea=c[fa>>2]|0;fa=c[637747]|0;ga=fa+(ea*20|0)|0;ha=fa+(ea*20|0)+4|0;ia=fa+(ea*20|0)+8|0;if(+g[ga>>2]*0.0+ +g[ha>>2]*0.0+ +g[ia>>2]*-1.0<0.0){break}I=+g[p>>2];ja=I- +g[d>>2];g[C>>2]=ja;ka=+g[O>>2];la=ka- +g[K>>2];g[L>>2]=la;g[l>>2]=0.0;ma=+T(ja*ja+la*la+0.0);if(ma==0.0|ma>2.0e3){break}if((G-H)/ma<.2679491924311227){break}g[D>>2]=I;g[E>>2]=ka;g[F>>2]=G;g[m>>2]=I+ +g[ga>>2]*-500.0;g[P>>2]=ka+ +g[ha>>2]*-500.0;g[Q>>2]=G+ +g[ia>>2]*-500.0;Jo(r,D,0,0,m,0,1);Vx(u|0,o|0,84)|0;if((c[R>>2]&4|0)!=0){break}if(+g[S>>2]*500.0>32.0){break}g[C>>2]=I- +g[d>>2];g[L>>2]=ka- +g[K>>2];g[l>>2]=G- +g[M>>2];+dn(C);g[D>>2]=+g[d>>2]+ +g[C>>2]*4.0;g[E>>2]=+g[K>>2]+ +g[L>>2]*4.0;g[F>>2]=+g[M>>2]+ +g[l>>2]*4.0;g[m>>2]=+g[U>>2];g[P>>2]=+g[V>>2];g[Q>>2]=+g[W>>2];lr(s,D,m,2,-1);Vx(v|0,j|0,36)|0;ma=+g[X>>2];H=ma-I;g[C>>2]=H;I=+g[Y>>2];la=I-ka;g[L>>2]=la;ka=+g[Z>>2];ja=ka-G;g[l>>2]=ja;if(+T(ja*ja+(H*H+la*la))>24.0){break}g[D>>2]=ma;g[E>>2]=I;g[F>>2]=ka;g[m>>2]=ma;g[P>>2]=I;I=+g[637829];ma=547.7225341796875/I;g[Q>>2]=ka- +(~~(ma*I*.5*ma)|0);lr(t,D,m,2,-1);Vx(v|0,_|0,36)|0;if(!(+g[$>>2]<1.0)){break}ia=gr(X)|0;ha=c[637759]|0;if((c[ha+(ia*28|0)>>2]&6|0)!=0|(ia|0)==(a|0)){break}ga=c[(c[637662]|0)+(a<<2)>>2]|0;if((ga|0)!=0){ea=ga;do{if((c[ea>>2]|0)==(ia|0)){break b}ea=c[ea+44>>2]|0;}while((ea|0)!=0)}if((c[ha+(ia*28|0)+4>>2]&1|0)==0){break}ea=mr(d,U,k,0,20)|0;if((ea|0)>19){break}if((ea|0)>0){ga=c[637759]|0;fa=0;while(1){na=fa+1|0;if((c[ga+((c[f+(fa<<2)>>2]|0)*28|0)>>2]&8|0)!=0){break b}if((na|0)<(ea|0)){fa=na}else{break}}}fa=c[164946]|0;if((fa|0)==0){oa=36;break a}ea=c[fa+44>>2]|0;if((ea|0)==0){tp(54768,(J=i,i=i+1|0,i=i+7&-8,c[J>>2]=0,J)|0);i=J;ga=c[164946]|0;c[164946]=c[ga+44>>2];c[164928]=(c[164928]|0)+1;if((ga|0)==0){oa=36;break a}else{pa=ga}}else{c[164946]=ea;c[164928]=(c[164928]|0)+1;pa=fa}c[pa>>2]=ia;c[pa+4>>2]=ba;c[pa+8>>2]=0;ma=+g[d>>2];g[pa+12>>2]=ma;fa=pa+16|0;g[fa>>2]=+g[K>>2];ea=pa+20|0;g[ea>>2]=+g[M>>2];I=+g[U>>2];g[pa+24>>2]=I;ga=pa+28|0;g[ga>>2]=+g[V>>2];ha=pa+32|0;g[ha>>2]=+g[W>>2];c[pa+36>>2]=14;ka=I-ma;g[C>>2]=ka;ma=+g[ga>>2]- +g[fa>>2];g[L>>2]=ma;I=+g[ha>>2]- +g[ea>>2];g[l>>2]=I;b[pa+40>>1]=~~(+g[637850]+ +T(I*I+(ka*ka+ma*ma))*.25);c[pa+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=pa;c[154388]=(c[154388]|0)+1}}while(0);ba=aa+1|0;if((ba|0)<(c[q>>2]|0)){aa=ba}else{oa=36;break}}if((oa|0)==36){w=36;x=0;y=84;z=0;A=80;B=0;i=e;return 0}return 0}function qq(){var a=0,b=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;a=i;i=i+184|0;b=a|0;d=a+16|0;e=a+32|0;f=a+48|0;j=b;c[j>>2]=c[15346];c[j+4>>2]=c[15347];c[j+8>>2]=c[15348];j=d;c[j>>2]=c[15350];c[j+4>>2]=c[15351];c[j+8>>2]=c[15352];j=a+56|0;k=Po(0)|0;if((k|0)==0){l=0}else{m=e|0;n=b|0;b=d|0;d=e+4|0;o=e+8|0;e=k;k=0;while(1){a:do{if((Qo(e,60472,j,128)|0)==0){p=k}else{do{if((Tx(j,34552)|0)!=0){if((Tx(j,34144)|0)==0){break}if((Tx(j,33552)|0)==0){break}if((Tx(j,32848)|0)==0){break}if((Tx(j,32344)|0)==0){break}if((Tx(j,31912)|0)==0){break}if((Tx(j,31576)|0)==0){break}if((Tx(j,31192)|0)==0){break}if((Tx(j,30448)|0)==0){break}if((Tx(j,29936)|0)==0){break}if((Tx(j,29640)|0)==0){break}if((Tx(j,29336)|0)!=0){p=k;break a}}}while(0);if((Ro(e,26400,m)|0)==0){p=k;break}c[f>>2]=0;To(e,37336,f)|0;do{if((c[f>>2]&1|0)==0){if((Dp(m,n,b)|0)!=0){break}q=+g[m>>2];r=+g[d>>2];s=+g[o>>2];ue[c[636260]&31](1,28888,(t=i,i=i+32|0,c[t>>2]=j,h[t+8>>3]=q,h[t+16>>3]=r,h[t+24>>3]=s,t)|0);i=t}}while(0);u=aq(m,n,b,m)|0;v=(c[637759]|0)+(u*28|0)+4|0;c[v>>2]=c[v>>2]|8192;p=k+1|0}}while(0);v=Po(e)|0;if((v|0)==0){l=p;break}else{e=v;k=p}}}p=c[637756]|0;if((p|0)<=1){w=l;x=c[636260]|0;ue[x&31](1,28584,(t=i,i=i+8|0,c[t>>2]=w,t)|0);i=t;y=128;z=0;i=a;return}k=c[637759]|0;e=1;m=l;l=p;while(1){if((c[k+(e*28|0)>>2]&128|0)==0){A=m;B=l}else{p=k+(e*28|0)+4|0;c[p>>2]=c[p>>2]|8192;A=m+1|0;B=c[637756]|0}p=e+1|0;if((p|0)<(B|0)){e=p;m=A;l=B}else{w=A;break}}x=c[636260]|0;ue[x&31](1,28584,(t=i,i=i+8|0,c[t>>2]=w,t)|0);i=t;y=128;z=0;i=a;return}function rq(a,d){a=a|0;d=d|0;var e=0,f=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.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=i;i=i+232|0;f=e|0;j=e+8|0;k=e+24|0;l=e+40|0;m=e+56|0;n=e+72|0;o=e+88|0;p=e+104|0;q=e+192|0;r=c[637759]|0;if((c[r+(a*28|0)+4>>2]&5|0)!=1){s=0;t=84;u=0;i=e;return s|0}if((c[r+(d*28|0)+4>>2]&8193|0)!=8193){s=0;t=84;u=0;i=e;return s|0}r=c[637757]|0;if(+g[r+(d*48|0)+32>>2]<+g[r+(a*48|0)+20>>2]){s=0;t=84;u=0;i=e;return s|0}v=l|0;g[v>>2]=+g[r+(a*48|0)+36>>2];w=l+4|0;g[w>>2]=+g[r+(a*48|0)+40>>2];x=l+8|0;g[x>>2]=+g[r+(a*48|0)+44>>2];if((gr(v)|0)==0){y=+g[v>>2];z=+g[w>>2];A=+g[x>>2];iv(35e3,(B=i,i=i+32|0,c[B>>2]=a,h[B+8>>3]=y,h[B+16>>3]=z,h[B+24>>3]=A,B)|0);i=B}l=m|0;g[l>>2]=+g[v>>2];g[m+4>>2]=+g[w>>2];g[m+8>>2]=+g[x>>2]+-1.0e3;lr(q,v,l,4,-1);if((c[q>>2]|0)!=0){s=0;t=84;u=0;i=e;return s|0}A=+g[q+16>>2];z=+g[q+12>>2];l=j|0;g[l>>2]=+g[q+8>>2];q=j+4|0;g[q>>2]=z;v=j+8|0;g[v>>2]=A;j=r+(d*48|0)+4|0;if((c[j>>2]|0)<=0){s=0;t=84;u=0;i=e;return s|0}x=r+(d*48|0)+8|0;r=k|0;m=k+8|0;w=k+4|0;k=n|0;C=n+4|0;D=n+8|0;n=o|0;E=o+4|0;F=o+8|0;o=p+80|0;G=p+68|0;H=0;a:while(1){I=c[(c[637755]|0)+((c[x>>2]|0)+H<<2)>>2]|0;do{if((c[(c[637753]|0)+(((I|0)>-1?I:-I|0)*24|0)+4>>2]&4|0)!=0){bq(I,r);if(+g[m>>2]<+g[v>>2]+64.0){break}A=+Lp(l);if((Pp(A,l,r,f)|0)==0){break}z=+g[f>>2];if(!(z<300.0)){break}y=+g[w>>2]- +g[q>>2];g[k>>2]=z*(+g[r>>2]- +g[l>>2]);g[C>>2]=y*z;g[D>>2]=z*0.0;g[n>>2]=0.0;g[E>>2]=0.0;g[F>>2]=A;Jp(p,-1,l,2,1,n,k,30,30,.10000000149011612,1213,d,0)|0;if((c[o>>2]|0)>=30){break}J=c[G>>2]|0;if(!((J&56|0)!=0|(J&1152|0)==0)){break a}}}while(0);I=H+1|0;if((I|0)<(c[j>>2]|0)){H=I}else{s=0;K=21;break}}if((K|0)==21){t=84;u=0;i=e;return s|0}K=c[164946]|0;if((K|0)==0){s=0;t=84;u=0;i=e;return s|0}H=c[K+44>>2]|0;do{if((H|0)==0){tp(54768,(B=i,i=i+1|0,i=i+7&-8,c[B>>2]=0,B)|0);i=B;j=c[164946]|0;c[164946]=c[j+44>>2];c[164928]=(c[164928]|0)+1;if((j|0)==0){s=0}else{L=j;break}t=84;u=0;i=e;return s|0}else{c[164946]=H;c[164928]=(c[164928]|0)+1;L=K}}while(0);c[L>>2]=d;c[L+4>>2]=0;c[L+8>>2]=0;g[L+12>>2]=+g[l>>2];g[L+16>>2]=+g[q>>2];g[L+20>>2]=+g[v>>2];g[L+24>>2]=+g[r>>2];g[L+28>>2]=+g[w>>2];g[L+32>>2]=+g[m>>2];c[L+36>>2]=12;b[L+40>>1]=~~+g[637853];c[L+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=L;c[154380]=(c[154380]|0)+1;s=1;t=84;u=0;i=e;return s|0}function sq(a){a=a|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,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0.0,Aa=0,Ba=0,Ca=0,Da=0;d=i;i=i+168|0;e=d|0;f=d+40|0;h=d+56|0;j=d+72|0;k=d+88|0;l=d+128|0;m=k;if((c[(c[637759]|0)+(a*28|0)+4>>2]&5|0)!=1){n=36;o=0;p=40;q=0;i=d;return}r=c[637757]|0;s=r+(a*48|0)+4|0;t=c[s>>2]|0;if((t|0)<=0){n=36;o=0;p=40;q=0;i=d;return}u=r+(a*48|0)+8|0;r=h|0;v=h+4|0;w=h+8|0;h=f|0;x=f+4|0;y=f+8|0;f=j|0;z=j+4|0;A=j+8|0;j=l;B=k|0;C=k+8|0;D=e|0;E=k+16|0;F=k+12|0;k=0;G=t;while(1){t=c[(c[637755]|0)+((c[u>>2]|0)+k<<2)>>2]|0;H=(t|0)>-1?t:-t|0;t=c[637753]|0;do{if((c[t+(H*24|0)+4>>2]&4|0)==0){I=G}else{J=t+(H*24|0)+8|0;K=c[J>>2]|0;if((K|0)<=0){I=G;break}L=t+(H*24|0)+12|0;M=t+(H*24|0)|0;N=0;O=G;P=K;while(1){K=c[(c[637751]|0)+((c[L>>2]|0)+N<<2)>>2]|0;if((O|0)>0){Q=(K|0)>-1?K:-K|0;R=K>>>31;U=R^1;V=0;do{W=c[(c[637755]|0)+((c[u>>2]|0)+V<<2)>>2]|0;X=(W|0)>-1?W:-W|0;W=c[637753]|0;a:do{if((c[W+(X*24|0)+4>>2]&4|0)==0){Y=W+(X*24|0)+8|0;Z=c[Y>>2]|0;if((Z|0)<=0){break}_=W+(X*24|0)+12|0;$=W+(X*24|0)+16|0;aa=W+(X*24|0)+20|0;ba=0;ca=Z;while(1){Z=c[637751]|0;da=c[Z+((c[_>>2]|0)+ba<<2)>>2]|0;if((Q|0)==(((da|0)>-1?da:-da|0)|0)){da=c[$>>2]|0;if((da|0)==(a|0)){ea=c[aa>>2]|0}else{ea=da}da=c[637757]|0;if((c[(c[637759]|0)+(ea*28|0)+4>>2]&1|0)!=0){fa=c[da+(ea*48|0)+4>>2]|0;if((fa|0)<=0){break a}ga=c[da+(ea*48|0)+8>>2]|0;da=c[637755]|0;ha=c[637753]|0;ia=0;ja=0;while(1){ka=c[da+(ga+ja<<2)>>2]|0;la=(ka|0)>-1?ka:-ka|0;if((la|0)==(X|0)){ma=ia}else{ka=c[ha+(la*24|0)+8>>2]|0;b:do{if((ka|0)>0){na=c[ha+(la*24|0)+12>>2]|0;oa=0;while(1){pa=c[Z+(na+oa<<2)>>2]|0;qa=oa+1|0;if((((pa|0)>-1?pa:-pa|0)|0)==(Q|0)){break}if((qa|0)<(ka|0)){oa=qa}else{ra=ia;sa=qa;break b}}na=c[ha+(la*24|0)+4>>2]|0;if((na&1|0)==0){ra=1;sa=oa;break}ra=na>>>2&1^1;sa=oa}else{ra=ia;sa=0}}while(0);if((sa|0)<(ka|0)){ta=ra;break}else{ma=ra}}la=ja+1|0;if((la|0)<(fa|0)){ia=ma;ja=la}else{ta=ma;break}}if((ta|0)==0){break a}}ja=c[637749]|0;ia=c[ja+(Q<<3)+(R<<2)>>2]|0;fa=c[637745]|0;ha=fa+(ia*12|0)|0;Z=c[ja+(Q<<3)+(U<<2)>>2]|0;ja=fa+(Z*12|0)|0;ga=c[M>>2]|0;da=c[637747]|0;ua=+g[ja>>2]- +g[ha>>2];la=fa+(Z*12|0)+4|0;na=fa+(ia*12|0)+4|0;va=+g[la>>2]- +g[na>>2];qa=fa+(Z*12|0)+8|0;Z=fa+(ia*12|0)+8|0;wa=+g[qa>>2]- +g[Z>>2];ia=da+(ga*20|0)|0;fa=da+(ga*20|0)+4|0;pa=da+(ga*20|0)+8|0;g[r>>2]=+g[fa>>2]*wa-va*+g[pa>>2];g[v>>2]=ua*+g[pa>>2]-wa*+g[ia>>2];g[w>>2]=va*+g[ia>>2]-ua*+g[fa>>2];+dn(r);ua=+g[ha>>2]+ +g[ja>>2];g[h>>2]=ua;va=+g[na>>2]+ +g[la>>2];g[x>>2]=va;wa=(+g[Z>>2]+ +g[qa>>2])*.5;xa=ua*.5+ +g[r>>2]*8.0;g[h>>2]=xa;ua=va*.5+ +g[v>>2]*8.0;g[x>>2]=ua;va=wa+ +g[w>>2]*8.0;g[y>>2]=va;g[f>>2]=xa;g[z>>2]=ua;g[A>>2]=va+-1.0e3;lr(l,h,f,4,-1);Vx(m|0,j|0,36)|0;if((c[B>>2]|0)!=0){break a}qa=gr(C)|0;if((qa|0)==(a|0)){break a}Z=c[(c[637662]|0)+(a<<2)>>2]|0;if((Z|0)!=0){la=Z;do{if((c[la>>2]|0)==(qa|0)){break a}la=c[la+44>>2]|0;}while((la|0)!=0)}la=c[637759]|0;if((c[la+(qa*28|0)+4>>2]&5|0)==0){break a}if((c[la+(qa*28|0)>>2]&6|0)!=0){break a}la=mr(h,f,D,0,10)|0;if((la|0)>0){Z=c[637759]|0;na=0;while(1){ja=na+1|0;if((c[Z+((c[e+(na<<2)>>2]|0)*28|0)>>2]&8|0)!=0){break a}if((ja|0)<(la|0)){na=ja}else{break}}}va=+g[637861];if(va!=0.0){if(+S(+(+g[y>>2]- +g[E>>2]))>va){break a}}na=c[164946]|0;if((na|0)==0){break a}la=c[na+44>>2]|0;if((la|0)==0){tp(54768,(Z=i,i=i+1|0,i=i+7&-8,c[Z>>2]=0,Z)|0);i=Z;Z=c[164946]|0;c[164946]=c[Z+44>>2];c[164928]=(c[164928]|0)+1;if((Z|0)==0){break a}else{ya=Z}}else{c[164946]=la;c[164928]=(c[164928]|0)+1;ya=na}c[ya>>2]=qa;c[ya+4>>2]=0;c[ya+8>>2]=K;g[ya+12>>2]=+g[h>>2];g[ya+16>>2]=+g[x>>2];g[ya+20>>2]=+g[y>>2];g[ya+24>>2]=+g[C>>2];g[ya+28>>2]=+g[F>>2];g[ya+32>>2]=+g[E>>2];c[ya+36>>2]=7;va=+S(+(+g[y>>2]- +g[E>>2]));ua=+g[637829];xa=ua;na=~~(+g[637851]+va*50.0/xa);la=ya+40|0;b[la>>1]=na;Z=c[637759]|0;do{if((c[Z+(qa*28|0)+4>>2]&4|0)==0){if((c[Z+(qa*28|0)>>2]&128|0)!=0){break}wa=ua*+T(va*2.0/xa);za=wa*wa*1.0e-4;if(za>+g[637844]){b[la>>1]=~~(+((na&65535)>>>0)+ +g[637859]);break}if(!(za>+g[637845])){break}b[la>>1]=~~(+((na&65535)>>>0)+ +g[637860])}}while(0);c[ya+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=ya;c[154370]=(c[154370]|0)+1;Aa=c[Y>>2]|0}else{Aa=ca}na=ba+1|0;if((na|0)<(Aa|0)){ba=na;ca=Aa}else{break}}}}while(0);V=V+1|0;Ba=c[s>>2]|0;}while((V|0)<(Ba|0));Ca=Ba;Da=c[J>>2]|0}else{Ca=O;Da=P}V=N+1|0;if((V|0)<(Da|0)){N=V;O=Ca;P=Da}else{I=Ca;break}}}}while(0);H=k+1|0;if((H|0)<(I|0)){k=H;G=I}else{break}}n=36;o=0;p=40;q=0;i=d;return}function tq(){var a=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a=c[637761]|0;if((a|0)!=0){nv(a)}a=kv(((c[164928]|0)*44|0)+440|0)|0;c[637761]=a;c[637760]=1;if((c[637756]|0)<=0){return}d=c[637759]|0;e=c[637662]|0;f=0;h=1;do{i=d+(f*28|0)+24|0;c[i>>2]=h;j=d+(f*28|0)+20|0;c[j>>2]=0;k=c[e+(f<<2)>>2]|0;a:do{if((k|0)==0){l=0}else{m=k;n=0;o=h;while(1){p=n+o|0;c[a+(p*44|0)>>2]=c[m>>2];c[a+(p*44|0)+4>>2]=c[m+4>>2];c[a+(p*44|0)+8>>2]=c[m+8>>2];g[a+(p*44|0)+12>>2]=+g[m+12>>2];g[a+(p*44|0)+16>>2]=+g[m+16>>2];g[a+(p*44|0)+20>>2]=+g[m+20>>2];g[a+(p*44|0)+24>>2]=+g[m+24>>2];g[a+(p*44|0)+28>>2]=+g[m+28>>2];g[a+(p*44|0)+32>>2]=+g[m+32>>2];c[a+(p*44|0)+36>>2]=c[m+36>>2];b[a+(p*44|0)+40>>1]=b[m+40>>1]|0;p=(c[j>>2]|0)+1|0;c[j>>2]=p;q=c[m+44>>2]|0;if((q|0)==0){l=p;break a}m=q;n=p;o=c[i>>2]|0}}}while(0);h=(c[637760]|0)+l|0;c[637760]=h;f=f+1|0;}while((f|0)<(c[637756]|0));return}function uq(a){a=+a;var b=0,d=0,e=0,f=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=i;if((c[637704]|0)==0){d=0;i=b;return d|0}e=c[637770]|0;if((e|0)>=((c[637756]|0)+2|0)){d=0;i=b;return d|0}if((e|0)==1){ue[c[636260]&31](1,28232,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;c[661400]=0;g[15356]=2.0e3;g[15354]=1.0e3;j=c[637770]|0;k=2e3}else{j=e;k=~~+g[15356]}e=k+j|0;j=Qu()|0;k=c[637770]|0;l=c[637756]|0;a:do{if((k|0)<(l|0)&(k|0)<(e|0)){m=k;n=l;o=k;b:while(1){c[637770]=o+1;p=c[(c[637759]|0)+(m*28|0)>>2]|0;do{if((p&128|0)==0){if((n|0)>1){q=1;do{c:do{if((m|0)!=(q|0)){r=c[637759]|0;if((c[r+(m*28|0)>>2]&192|0)!=0){if((c[r+(q*28|0)>>2]&192|0)==0){break}}r=c[(c[637662]|0)+(m<<2)>>2]|0;if((r|0)!=0){s=r;do{if((c[s>>2]|0)==(q|0)){break c}s=c[s+44>>2]|0;}while((s|0)!=0)}if((eq(m,q)|0)!=0){break}if((fq(m,q)|0)!=0){break}if((gq(m,q)|0)!=0){break}if((jq(m,q)|0)!=0){break}iq(m,q)|0}}while(0);q=q+1|0;t=c[637756]|0;}while((q|0)<(t|0));u=t;v=c[(c[637759]|0)+(m*28|0)>>2]|0}else{u=n;v=p}if((v&192|0)!=0){w=u;break}if((u|0)>1){q=1;s=u;while(1){d:do{if((m|0)==(q|0)){x=s}else{r=c[(c[637662]|0)+(m<<2)>>2]|0;if((r|0)!=0){y=r;do{if((c[y>>2]|0)==(q|0)){x=s;break d}y=c[y+44>>2]|0;}while((y|0)!=0)}if((c[469158]|0)!=0){pq(m,q)|0}rq(m,q)|0;x=c[637756]|0}}while(0);y=q+1|0;if((y|0)<(x|0)){q=y;s=x}else{break}}}s=(Qu()|0)-j|0;if((s|0)>(~~+g[15354]|0)){break b}s=c[637756]|0;if((((c[637770]|0)*1e3|0|0)/(s|0)|0|0)>(c[661400]|0)){z=s;break a}else{w=s}}else{w=n}}while(0);p=m+1|0;if(!((p|0)<(w|0)&(p|0)<(e|0))){z=w;break a}m=p;n=w;o=c[637770]|0}z=c[637756]|0}else{z=l}}while(0);l=c[637770]|0;if((l|0)==(z|0)){ue[c[636260]&31](1,27824,(f=i,i=i+8|0,h[f>>3]=100.0,f)|0);i=f;ue[c[636260]&31](1,27400,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;c[637770]=(c[637770]|0)+1;d=1;i=b;return d|0}if((l|0)!=(z+1|0)){w=(l*1e3|0|0)/(z|0)|0;c[661400]=w;ue[c[636260]&31](1,27824,(f=i,i=i+8|0,h[f>>3]=+(w|0)/10.0,f)|0);i=f;d=1;i=b;return d|0}if((z|0)>1){w=1;l=z;while(1){if((c[(c[637759]|0)+(w*28|0)>>2]&128|0)==0){sq(w);A=c[637756]|0}else{A=l}z=w+1|0;if((z|0)<(A|0)){w=z;l=A}else{break}}}oq();kq();lq();nq();tq();nv(c[154366]|0);c[164928]=0;nv(c[637662]|0);c[637770]=(c[637770]|0)+1;ue[c[636260]&31](1,26912,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;d=1;i=b;return d|0}function vq(){var a=0,b=0,d=0,e=0;if((c[637704]|0)==0){return}do{if((c[637760]|0)!=0){if((~~+bv(26152)|0)!=0){break}c[637770]=(c[637756]|0)+2;return}}while(0);c[469158]=~~+bv(25584);c[637706]=1;c[637770]=1;a=kv(3145728)|0;c[154366]=a;b=0;d=a;while(1){a=b+1|0;c[d+(b*48|0)+44>>2]=d+(a*48|0);e=c[154366]|0;if((a|0)<65535){b=a;d=e}else{break}}c[e+3145724>>2]=0;c[164946]=c[154366];c[164928]=0;c[637662]=kv(c[637756]<<2)|0;qq();return}function wq(){var a=0,b=0;a=i;ue[c[636260]&31](1,50160,(b=i,i=i+8|0,c[b>>2]=c[164936],b)|0);i=b;ue[c[636260]&31](1,57696,(b=i,i=i+8|0,c[b>>2]=c[164926],b)|0);i=b;ue[c[636260]&31](1,47496,(b=i,i=i+8|0,c[b>>2]=c[154360],b)|0);i=b;i=a;return}function xq(a){a=a|0;var b=0,d=0;b=a&16777215;if(b>>>0>31>>>0){d=1;return d|0}d=c[2551116+(b<<2)>>2]|a<<3&402653184;return d|0}function yq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;b=c[637817]|0;if((b|0)==0){return}d=(c[637769]|0)+(a<<4)|0;e=c[d>>2]|0;if((e|0)>0){f=0;g=e;h=b}else{return}while(1){b=c[h+(a<<2)>>2]|0;e=c[b+(f<<2)>>2]|0;if((e|0)==0){i=b;j=g}else{b=e;while(1){e=c[b+44>>2]|0;k=b+52|0;l=c[k>>2]|0;m=b+48|0;n=c[m>>2]|0;if((l|0)==0){c[637820]=n}else{c[l+48>>2]=n}n=c[m>>2]|0;l=c[k>>2]|0;if((n|0)==0){c[637819]=l}else{c[n+52>>2]=l}c[k>>2]=0;c[m>>2]=0;c[154360]=(c[154360]|0)-(c[b+8>>2]|0);nv(b|0);if((e|0)==0){break}else{b=e}}i=c[(c[637817]|0)+(a<<2)>>2]|0;j=c[d>>2]|0}c[i+(f<<2)>>2]=0;b=f+1|0;if((b|0)>=(j|0)){break}f=b;g=j;h=c[637817]|0}return}function zq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=c[(c[637759]|0)+(a*28|0)+12>>2]|0;if((b|0)>0){yq(b)}else{a=-b|0;yq(c[(c[637765]|0)+(a*20|0)+4>>2]|0);yq(c[(c[637765]|0)+(a*20|0)+8>>2]|0)}a=c[637756]|0;if((a|0)>0){d=0;e=a}else{return}while(1){a=c[637818]|0;b=c[a+(d<<2)>>2]|0;if((b|0)==0){f=a;g=e}else{a=b;while(1){b=c[a+44>>2]|0;h=a+52|0;i=c[h>>2]|0;j=a+48|0;k=c[j>>2]|0;if((i|0)==0){c[637820]=k}else{c[i+48>>2]=k}k=c[j>>2]|0;i=c[h>>2]|0;if((k|0)==0){c[637819]=i}else{c[k+52>>2]=i}c[h>>2]=0;c[j>>2]=0;c[154360]=(c[154360]|0)-(c[a+8>>2]|0);nv(a|0);if((b|0)==0){break}else{a=b}}f=c[637818]|0;g=c[637756]|0}c[f+(d<<2)>>2]=0;a=d+1|0;if((a|0)<(g|0)){d=a;e=g}else{break}}return}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;if(!((a|0)>0&(c[637756]|0)>(a|0))){if((c[636484]|0)==0){e=0;i=d;return e|0}ue[c[636260]&31](3,40760,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;e=0;i=d;return e|0}f=(c[637759]|0)+(a*28|0)+4|0;g=c[f>>2]|0;h=g&8;if((b|0)<0){e=h>>>3^1;i=d;return e|0}j=(b|0)==0?g|8:g&-9;c[f>>2]=j;if((h|0)!=(j&8|0)){zq(a)}e=h>>>3^1;i=d;return e|0}function Bq(a){a=a|0;return c[(c[637811]|0)+(a<<2)>>2]|0}function Cq(){var a=0,b=0,d=0,e=0,f=0,g=0;a=c[637811]|0;if((a|0)!=0){nv(a)}a=kv(c[637756]<<2)|0;c[637811]=a;if((c[637756]|0)<=0){return}b=c[637759]|0;d=0;do{e=c[b+(d*28|0)>>2]|0;do{if((e&1|0)==0){if((e&4|0)!=0){f=2097152;break}f=(e&2|0)==0?524288:4194304}else{f=1048576}}while(0);g=e<<16;c[a+(d<<2)>>2]=g&134217728|e<<15&8388608|g&268435456|f|c[b+(d*28|0)+4>>2]<<22&67108864;d=d+1|0;}while((d|0)<(c[637756]|0));return}function Dq(){var a=0,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;a=i;b=c[637815]|0;if((b|0)!=0){nv(b)}b=kv(((c[637760]|0)*12|0)+(c[637756]<<3)|0)|0;c[637815]=b;d=c[637756]|0;if((d|0)<=1){i=a;return}e=1;f=b+(d<<3)|0;while(1){d=c[637759]|0;b=d+(e*28|0)+20|0;g=c[b>>2]|0;if((g|0)>127){ue[c[636260]&31](2,35936,(h=i,i=i+8|0,c[h>>2]=e,h)|0);i=h;j=c[b>>2]|0}else{j=g}if((j|0)>0){g=d+(e*28|0)+24|0;d=0;h=f;k=c[637815]|0;while(1){l=(c[g>>2]|0)+d|0;m=c[637761]|0;n=h+12|0;c[h+4>>2]=e;c[h>>2]=(c[g>>2]|0)+d;o=c[m+(l*44|0)>>2]|0;c[h+8>>2]=c[k+(o<<3)+4>>2];c[(c[637815]|0)+(o<<3)+4>>2]=h;l=c[637815]|0;m=l+(o<<3)|0;c[m>>2]=(c[m>>2]|0)+1;m=d+1|0;if((m|0)<(c[b>>2]|0)&(m|0)<128){d=m;h=n;k=l}else{p=n;break}}}else{p=f}k=e+1|0;if((k|0)<(c[637756]|0)){e=k;f=p}else{break}}i=a;return}function Eq(){var a=0,d=0,e=0,f=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.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0;a=c[637816]|0;if((a|0)!=0){nv(a)}a=c[637756]|0;d=a<<2;if((a|0)>0){e=c[637815]|0;f=c[637759]|0;h=d;i=0;while(1){j=(da((c[e+(i<<3)>>2]<<1)+6&-8|4,c[f+(i*28|0)+20>>2]|0)|0)+h|0;k=i+1|0;if((k|0)<(a|0)){h=j;i=k}else{l=j;break}}}else{l=d}d=kv(l)|0;l=d;c[637816]=l;i=c[637756]|0;if((i|0)<=0){return}h=d+(i<<2)|0;d=0;a=i;i=l;while(1){l=c[637815]|0;f=c[637759]|0;c[i+(d<<2)>>2]=h;e=f+(d*28|0)+20|0;j=c[e>>2]|0;k=h+(j<<2)|0;if((j|0)>0){m=l+(d<<3)|0;n=f+(d*28|0)+24|0;f=l+(d<<3)+4|0;l=0;o=k;p=j;while(1){c[(c[(c[637816]|0)+(d<<2)>>2]|0)+(l<<2)>>2]=o;q=o+((c[m>>2]<<1)+6&-8)|0;j=(c[n>>2]|0)+l|0;r=c[637761]|0;s=c[f>>2]|0;if((s|0)==0){t=p}else{u=r+(j*44|0)+12|0;v=r+(j*44|0)+16|0;w=r+(j*44|0)+20|0;j=0;x=s;s=r;while(1){r=c[x>>2]|0;y=+g[s+(r*44|0)+24>>2]- +g[u>>2];z=+g[s+(r*44|0)+28>>2]- +g[v>>2];A=+g[s+(r*44|0)+32>>2]- +g[w>>2];B=+T(y*y+z*z+A*A);do{if((cq(d)|0)==0){if((Xp(d)|0)!=0){C=B;break}C=B*.33000001311302185}else{C=B*1.2999999523162842}}while(0);r=~~C;b[(c[(c[(c[637816]|0)+(d<<2)>>2]|0)+(l<<2)>>2]|0)+(j<<1)>>1]=(r|0)<1?1:r&65535;r=c[x+8>>2]|0;if((r|0)==0){break}j=j+1|0;x=r;s=c[637761]|0}t=c[e>>2]|0}s=l+1|0;if((s|0)<(t|0)){l=s;o=q;p=t}else{break}}D=q;E=c[637756]|0}else{D=k;E=a}p=d+1|0;if((p|0)>=(E|0)){break}h=D;d=p;a=E;i=c[637816]|0}return}function Fq(){var a=0,b=0,d=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;a=c[637821]|0;if((a|0)!=0){nv(a)}a=kv(c[637764]<<2)|0;c[637821]=a;if((c[637764]|0)<=0){return}b=c[637765]|0;d=c[637759]|0;f=0;do{g=c[b+(f*20|0)>>2]|0;h=c[d+(g*28|0)+20>>2]|0;do{if((h|0)>0){i=c[(c[637815]|0)+(g<<3)+4>>2]|0;if((i|0)==0){j=0;break}k=c[(c[637816]|0)+(g<<2)>>2]|0;l=0;m=0;while(1){n=c[k+(m<<2)>>2]|0;o=l;p=0;q=i;while(1){r=e[n+(p<<1)>>1]|0;s=(r|0)>(o|0)?r:o;r=c[q+8>>2]|0;if((r|0)==0){break}else{o=s;p=p+1|0;q=r}}q=m+1|0;if((q|0)<(h|0)){l=s;m=q}else{j=s;break}}}else{j=0}}while(0);c[a+(f<<2)>>2]=j;f=f+1|0;}while((f|0)<(c[637764]|0));return}function Gq(){var b=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;b=c[637819]|0;if((b|0)==0){d=0;return d|0}e=c[637759]|0;f=b;while(1){g=f|0;if((a[g]|0)!=1){h=14;break}i=c[f+16>>2]|0;j=c[e+(i*28|0)+12>>2]|0;if((j|0)>=0){h=6;break}b=c[f+52>>2]|0;if((b|0)==0){d=0;h=26;break}else{f=b}}do{if((h|0)==6){b=f+12|0;if((j|0)>0){k=e+(i*28|0)+16|0}else{l=-j|0;m=c[637765]|0;k=m+(l*20|0)+12+(((c[m+(l*20|0)+4>>2]|0)!=(c[b>>2]|0))<<2)|0}l=f+40|0;m=c[l>>2]|0;n=f+44|0;o=c[n>>2]|0;if((m|0)==0){c[(c[(c[637817]|0)+(c[b>>2]<<2)>>2]|0)+(c[k>>2]<<2)>>2]=o}else{c[m+44>>2]=o}o=c[n>>2]|0;if((o|0)==0){break}c[o+40>>2]=c[l>>2]}else if((h|0)==14){l=f+40|0;o=c[l>>2]|0;n=f+44|0;m=c[n>>2]|0;if((o|0)==0){c[(c[637818]|0)+(c[f+16>>2]<<2)>>2]=m}else{c[o+44>>2]=m}m=c[n>>2]|0;if((m|0)==0){break}c[m+40>>2]=c[l>>2]}else if((h|0)==26){return d|0}}while(0);h=f+52|0;k=c[h>>2]|0;j=f+48|0;i=c[j>>2]|0;if((k|0)==0){c[637820]=i}else{c[k+48>>2]=i}i=c[j>>2]|0;k=c[h>>2]|0;if((i|0)==0){c[637819]=k}else{c[i+52>>2]=k}c[h>>2]=0;c[j>>2]=0;c[154360]=(c[154360]|0)-(c[f+8>>2]|0);nv(g);d=1;return d|0}function Hq(){var a=0,b=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;a=c[637817]|0;if((a|0)==0){return}b=c[637768]|0;if((b|0)>0){d=0;e=b;while(1){b=(c[637769]|0)+(d<<4)|0;f=c[b>>2]|0;if((f|0)>0){g=0;h=f;while(1){f=c[(c[637817]|0)+(d<<2)>>2]|0;i=c[f+(g<<2)>>2]|0;if((i|0)==0){j=f;k=h}else{f=i;while(1){i=c[f+44>>2]|0;l=f+52|0;m=c[l>>2]|0;n=f+48|0;o=c[n>>2]|0;if((m|0)==0){c[637820]=o}else{c[m+48>>2]=o}o=c[n>>2]|0;m=c[l>>2]|0;if((o|0)==0){c[637819]=m}else{c[o+52>>2]=m}c[l>>2]=0;c[n>>2]=0;c[154360]=(c[154360]|0)-(c[f+8>>2]|0);nv(f|0);if((i|0)==0){break}else{f=i}}j=c[(c[637817]|0)+(d<<2)>>2]|0;k=c[b>>2]|0}c[j+(g<<2)>>2]=0;f=g+1|0;if((f|0)<(k|0)){g=f;h=k}else{break}}p=c[637768]|0}else{p=e}h=d+1|0;if((h|0)<(p|0)){d=h;e=p}else{break}}q=c[637817]|0}else{q=a}nv(q);c[637817]=0;return}function Iq(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;a=c[637818]|0;if((a|0)==0){return}b=c[637756]|0;if((b|0)>0){d=0;e=a;f=b;while(1){b=c[e+(d<<2)>>2]|0;if((b|0)==0){g=e;h=f}else{i=b;while(1){b=c[i+44>>2]|0;j=i+52|0;k=c[j>>2]|0;l=i+48|0;m=c[l>>2]|0;if((k|0)==0){c[637820]=m}else{c[k+48>>2]=m}m=c[l>>2]|0;k=c[j>>2]|0;if((m|0)==0){c[637819]=k}else{c[m+52>>2]=k}c[j>>2]=0;c[l>>2]=0;c[154360]=(c[154360]|0)-(c[i+8>>2]|0);nv(i|0);if((b|0)==0){break}else{i=b}}g=c[637818]|0;h=c[637756]|0}c[g+(d<<2)>>2]=0;i=d+1|0;b=c[637818]|0;if((i|0)<(h|0)){d=i;e=b;f=h}else{n=b;break}}}else{n=a}nv(n);c[637818]=0;return}function Jq(){var a=0,b=0,d=0,e=0,f=0,g=0;a=c[637812]|0;if((a|0)!=0){nv(a)}a=c[637768]|0;if((a|0)>0){b=c[637769]|0;d=0;e=0;do{f=c[b+(d<<4)+4>>2]|0;e=(f|0)>(e|0)?f:e;d=d+1|0;}while((d|0)<(a|0));g=e*40|0}else{g=0}c[637812]=kv(g)|0;g=c[637813]|0;if((g|0)!=0){nv(g)}c[637813]=kv(((c[637764]|0)*40|0)+40|0)|0;return}function Kq(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;i=i+16|0;g=f|0;h=(Uq(a,b,d,e,g,f+8|0)|0)==0;i=f;return(h?0:c[g>>2]|0)|0}function Lq(){var a=0,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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;a=i;i=i+104|0;b=a|0;d=a+72|0;e=a+8|0;f=c[637756]|0;if((f|0)>0){g=c[637818]|0;h=0;j=0;while(1){k=c[g+(h<<2)>>2]|0;if((k|0)==0){l=j}else{m=j;n=k;while(1){k=m+1|0;o=c[n+44>>2]|0;if((o|0)==0){l=k;break}else{m=k;n=o}}}n=h+1|0;if((n|0)<(f|0)){h=n;j=l}else{p=l;break}}}else{p=0}l=c[637768]|0;if((l|0)>0){j=c[637769]|0;h=c[637817]|0;f=0;g=0;while(1){n=c[j+(f<<4)>>2]|0;if((n|0)>0){m=c[h+(f<<2)>>2]|0;o=0;k=g;while(1){q=c[m+(o<<2)>>2]|0;if((q|0)==0){r=k}else{s=k;t=q;while(1){q=s+1|0;u=c[t+44>>2]|0;if((u|0)==0){r=q;break}else{s=q;t=u}}}t=o+1|0;if((t|0)<(n|0)){o=t;k=r}else{v=r;break}}}else{v=g}k=f+1|0;if((k|0)<(l|0)){f=k;g=v}else{w=v;break}}}else{w=0}xn(e,64,26384,(v=i,i=i+8|0,c[v>>2]=2550904,v)|0)|0;i=v;he[c[636272]&63](e,b,1)|0;if((c[b>>2]|0)==0){tp(22944,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=v;x=64;y=0;i=a;return}c[d>>2]=1129465165;c[d+4>>2]=2;g=c[637756]|0;c[d+8>>2]=g;c[d+12>>2]=c[637768];c[d+16>>2]=(_u(c[637757]|0,g*48|0)|0)&65535;c[d+20>>2]=(_u(c[637769]|0,c[637768]<<4)|0)&65535;c[d+24>>2]=p;c[d+28>>2]=w;he[c[636274]&63](d,32,c[b>>2]|0)|0;d=c[637756]|0;if((d|0)>0){w=0;p=0;g=d;while(1){d=c[(c[637818]|0)+(w<<2)>>2]|0;if((d|0)==0){z=p;A=g}else{f=p;l=d;do{d=l+8|0;he[c[636274]&63](l|0,c[d>>2]|0,c[b>>2]|0)|0;f=(c[d>>2]|0)+f|0;l=c[l+44>>2]|0;}while((l|0)!=0);z=f;A=c[637756]|0}l=w+1|0;if((l|0)<(A|0)){w=l;p=z;g=A}else{B=z;break}}}else{B=0}z=c[637768]|0;if((z|0)>0){A=0;g=B;p=z;while(1){z=(c[637769]|0)+(A<<4)|0;w=c[z>>2]|0;if((w|0)>0){l=0;d=g;r=w;while(1){w=c[(c[(c[637817]|0)+(A<<2)>>2]|0)+(l<<2)>>2]|0;if((w|0)==0){C=d;D=r}else{h=d;j=w;do{w=j+8|0;he[c[636274]&63](j|0,c[w>>2]|0,c[b>>2]|0)|0;h=(c[w>>2]|0)+h|0;j=c[j+44>>2]|0;}while((j|0)!=0);C=h;D=c[z>>2]|0}j=l+1|0;if((j|0)<(D|0)){l=j;d=C;r=D}else{break}}E=C;F=c[637768]|0}else{E=g;F=p}r=A+1|0;if((r|0)<(F|0)){A=r;g=E;p=F}else{G=E;break}}}else{G=B}je[c[636275]&127](c[b>>2]|0);ue[c[636260]&31](1,19840,(v=i,i=i+8|0,c[v>>2]=e,v)|0);i=v;ue[c[636260]&31](1,17688,(v=i,i=i+8|0,c[v>>2]=G,v)|0);i=v;x=64;y=0;i=a;return}function Mq(){var a=0,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;a=i;i=i+120|0;b=a|0;d=a+8|0;e=a+16|0;f=a+88|0;g=a+24|0;xn(g,64,26384,(h=i,i=i+8|0,c[h>>2]=2550904,h)|0)|0;i=h;he[c[636272]&63](g,e,0)|0;j=c[e>>2]|0;if((j|0)==0){k=0;l=64;m=0;i=a;return k|0}he[c[636273]&63](f,32,j)|0;if((c[f>>2]|0)!=1129465165){tp(60440,(h=i,i=i+8|0,c[h>>2]=g,h)|0);i=h;k=0;l=64;m=0;i=a;return k|0}g=c[f+4>>2]|0;if((g|0)!=2){tp(58920,(h=i,i=i+16|0,c[h>>2]=g,c[h+8>>2]=2,h)|0);i=h;k=0;l=64;m=0;i=a;return k|0}h=c[f+8>>2]|0;if((h|0)!=(c[637756]|0)){k=0;l=64;m=0;i=a;return k|0}if((c[f+12>>2]|0)!=(c[637768]|0)){k=0;l=64;m=0;i=a;return k|0}g=c[f+16>>2]|0;if((g|0)!=((_u(c[637757]|0,h*48|0)|0)&65535|0)){k=0;l=64;m=0;i=a;return k|0}h=c[f+20>>2]|0;if((h|0)!=((_u(c[637769]|0,c[637768]<<4)|0)&65535|0)){k=0;l=64;m=0;i=a;return k|0}h=f+24|0;if((c[h>>2]|0)>0){g=d;j=0;do{n=c[e>>2]|0;he[c[636273]&63](g,4,n)|0;o=jv(c[d>>2]|0)|0;p=o;c[o+8>>2]=c[d>>2];he[c[636273]&63](o+4|0,(c[d>>2]|0)-4|0,n)|0;c[o+56>>2]=o+((((((c[d>>2]|0)-62|0)>>>0)/3|0)<<1)+62);n=c[o+16>>2]|0;c[o+44>>2]=c[(c[637818]|0)+(n<<2)>>2];c[o+40>>2]=0;o=c[637818]|0;q=c[o+(n<<2)>>2]|0;if((q|0)==0){r=o}else{c[q+40>>2]=p;r=c[637818]|0}c[r+(n<<2)>>2]=p;j=j+1|0;}while((j|0)<(c[h>>2]|0))}h=f+28|0;if((c[h>>2]|0)>0){f=b;j=0;do{r=c[e>>2]|0;he[c[636273]&63](f,4,r)|0;d=jv(c[b>>2]|0)|0;g=d;c[d+8>>2]=c[b>>2];he[c[636273]&63](d+4|0,(c[b>>2]|0)-4|0,r)|0;c[d+56>>2]=d+((((((c[b>>2]|0)-62|0)>>>0)/3|0)<<1)+62);r=d+12|0;p=c[d+16>>2]|0;n=c[637759]|0;q=c[n+(p*28|0)+12>>2]|0;if((q|0)>0){s=n+(p*28|0)+16|0;t=c[r>>2]|0}else{p=c[r>>2]|0;r=-q|0;q=c[637765]|0;s=q+(r*20|0)+12+(((c[q+(r*20|0)+4>>2]|0)!=(p|0))<<2)|0;t=p}p=c[s>>2]|0;c[d+44>>2]=c[(c[(c[637817]|0)+(t<<2)>>2]|0)+(p<<2)>>2];c[d+40>>2]=0;d=c[(c[637817]|0)+(t<<2)>>2]|0;r=c[d+(p<<2)>>2]|0;if((r|0)==0){u=d}else{c[r+40>>2]=g;u=c[(c[637817]|0)+(t<<2)>>2]|0}c[u+(p<<2)>>2]=g;j=j+1|0;}while((j|0)<(c[h>>2]|0))}je[c[636275]&127](c[e>>2]|0);k=1;l=64;m=0;i=a;return k|0}function Nq(){var a=0,b=0,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;a=i;i=i+160|0;b=a|0;d=a+128|0;e=a+144|0;f=c[637823]|0;if((f|0)!=0){nv(f)}f=c[637822]|0;if((f|0)!=0){nv(f)}c[637823]=kv(c[637760]<<3)|0;c[637822]=kv(c[637760]<<7)|0;if((c[637760]|0)<=0){h=128;j=0;i=a;return}f=e|0;k=e+4|0;l=e+8|0;e=b|0;m=d|0;n=d+4|0;o=d+8|0;d=0;p=0;while(1){q=c[637761]|0;r=c[q+(p*44|0)+36>>2]&16777215;if((r|0)==14){s=mr(q+(p*44|0)+12|0,q+(p*44|0)+24|0,e,0,32)|0;t=12}else if((r|0)==4|(r|0)==9){u=q+(p*44|0)+12|0;g[f>>2]=+g[u>>2];g[k>>2]=+g[q+(p*44|0)+16>>2];g[l>>2]=+g[q+(p*44|0)+20>>2];g[l>>2]=+g[q+(p*44|0)+32>>2];s=mr(u,f,e,0,32)|0;t=12}else if((r|0)==7){r=q+(p*44|0)+24|0;g[m>>2]=+g[r>>2];g[n>>2]=+g[q+(p*44|0)+28>>2];g[o>>2]=+g[q+(p*44|0)+32>>2];g[o>>2]=+g[q+(p*44|0)+20>>2];s=mr(m,r,e,0,32)|0;t=12}else{r=c[637823]|0;c[r+(p<<3)>>2]=d;c[r+(p<<3)+4>>2]=0;v=d}do{if((t|0)==12){t=0;r=c[637823]|0;c[r+(p<<3)>>2]=d;c[r+(p<<3)+4>>2]=s;if((s|0)<=0){v=d;break}r=c[637822]|0;q=0;u=d;while(1){c[r+(u<<2)>>2]=c[b+(q<<2)>>2];w=q+1|0;if((w|0)<(s|0)){q=w;u=u+1|0}else{break}}v=s+d|0}}while(0);u=p+1|0;if((u|0)<(c[637760]|0)){d=v;p=u}else{break}}h=128;j=0;i=a;return}function Oq(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a=0;do{c[2551116+(a<<2)>>2]=1;a=a+1|0;}while((a|0)<32);c[637780]=1;c[637781]=2;c[637782]=4;c[637783]=8;c[637784]=16;c[637785]=32;c[637786]=128;c[637787]=256;c[637788]=512;c[637789]=1024;c[637790]=2048;c[637791]=4096;c[637792]=8192;c[637793]=16384;c[637794]=32768;c[637795]=65536;c[637796]=131072;c[637797]=262144;c[637798]=16777216;Cq();Jq();Dq();a=c[637768]|0;if((a|0)>0){b=c[637769]|0;d=0;e=0;while(1){f=(c[b+(d<<4)>>2]|0)+e|0;g=d+1|0;if((g|0)<(a|0)){d=g;e=f}else{h=f;break}}}else{h=0}e=kv(h+a<<2)|0;a=e;c[637817]=a;h=c[637768]|0;do{if((h|0)>0){d=e+(h<<2)|0;c[a>>2]=d;if((h|0)>1){i=d;j=0;k=1}else{break}while(1){d=i+(c[(c[637769]|0)+(j<<4)>>2]<<2)|0;c[(c[637817]|0)+(k<<2)>>2]=d;b=k+1|0;if((b|0)<(h|0)){i=d;j=k;k=b}else{break}}}}while(0);c[637818]=kv(c[637756]<<2)|0;Eq();Fq();Nq();c[164936]=0;c[164926]=0;c[154360]=0;c[179590]=~~+ev(57104,55704)<<10;Mq()|0;return}function Pq(){var a=0;Hq();Iq();a=c[637816]|0;if((a|0)!=0){nv(a)}c[637816]=0;a=c[637821]|0;if((a|0)!=0){nv(a)}c[637821]=0;a=c[637815]|0;if((a|0)!=0){nv(a)}c[637815]=0;a=c[637812]|0;if((a|0)!=0){nv(a)}c[637812]=0;a=c[637813]|0;if((a|0)!=0){nv(a)}c[637813]=0;a=c[637823]|0;if((a|0)!=0){nv(a)}c[637823]=0;a=c[637822]|0;if((a|0)!=0){nv(a)}c[637822]=0;a=c[637811]|0;if((a|0)==0){c[637811]=0;return}nv(a);c[637811]=0;return}function Qq(d){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,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;e=i;i=i+256|0;f=e|0;c[164936]=(c[164936]|0)+1;h=d+12|0;j=c[(c[637769]|0)+(c[h>>2]<<4)+4>>2]|0;c[637814]=(c[637814]|0)+1;k=~c[d+36>>2];l=c[d+16>>2]|0;m=c[637759]|0;n=c[m+(l*28|0)+12>>2]|0;if((n|0)>0){o=m+(l*28|0)+16|0}else{m=-n|0;n=c[637765]|0;o=n+(m*20|0)+12+(((c[n+(m*20|0)+4>>2]|0)!=(c[h>>2]|0))<<2)|0}m=c[o>>2]|0;if((m|0)>=(j|0)){p=256;q=0;i=e;return}Zx(f|0,0,256)|0;o=c[637812]|0;n=o+(m*40|0)|0;c[o+(m*40|0)+4>>2]=l;c[o+(m*40|0)+24>>2]=f;f=~~+g[d+32>>2];b[o+(m*40|0)+20>>1]=f;b[d+60+(m<<1)>>1]=f;c[o+(m*40|0)+32>>2]=0;c[o+(m*40|0)+36>>2]=0;if((n|0)==0){p=256;q=0;i=e;return}m=d+56|0;o=n;f=n;while(1){n=f+32|0;l=c[n>>2]|0;if((l|0)==0){r=0;s=0}else{c[l+36>>2]=0;r=o;s=c[n>>2]|0}c[f+28>>2]=0;n=c[(c[637815]|0)+(c[f+4>>2]<<3)+4>>2]|0;a:do{if((n|0)==0){t=r;u=s}else{l=f+20|0;v=f+24|0;w=r;x=s;y=0;z=n;while(1){A=c[z>>2]|0;B=c[637761]|0;C=c[B+(A*44|0)+36>>2]|0;D=C&16777215;if(D>>>0>31>>>0){E=1}else{E=c[2551116+(D<<2)>>2]|C<<3&402653184}do{if((E&k|0)==0){C=c[B+(A*44|0)>>2]|0;D=c[637759]|0;if((c[D+(C*28|0)+4>>2]&8|0)!=0){F=x;G=w;break}if((c[(c[637811]|0)+(C<<2)>>2]&k|0)!=0){F=x;G=w;break}C=c[z+4>>2]|0;H=c[D+(C*28|0)+12>>2]|0;I=c[h>>2]|0;if((H|0)>0){if((H|0)!=(I|0)){F=x;G=w;break}J=D+(C*28|0)+16|0}else{K=-H|0;H=c[637765]|0;J=H+(K*20|0)+12+(((c[H+(K*20|0)+4>>2]|0)!=(I|0))<<2)|0}I=c[J>>2]|0;if((I|0)>=(j|0)){F=x;G=w;break}K=((b[(c[v>>2]|0)+(y<<1)>>1]|0)+(b[l>>1]|0)&65535)+(b[B+(A*44|0)+40>>1]|0)&65535;H=d+60+(I<<1)|0;L=b[H>>1]|0;if(!(L<<16>>16==0|(L&65535)>>>0>(K&65535)>>>0)){F=x;G=w;break}b[H>>1]=K;a[(c[m>>2]|0)+I|0]=A-(c[D+(C*28|0)+24>>2]|0);D=c[637812]|0;H=D+(I*40|0)|0;c[D+(I*40|0)+4>>2]=C;b[D+(I*40|0)+20>>1]=K;c[D+(I*40|0)+24>>2]=c[(c[(c[637816]|0)+(C<<2)>>2]|0)+(A-(c[(c[637759]|0)+(C*28|0)+24>>2]|0)<<2)>>2];C=D+(I*40|0)+28|0;if((c[C>>2]|0)!=0){F=x;G=w;break}c[D+(I*40|0)+32>>2]=0;c[D+(I*40|0)+36>>2]=w;if((w|0)==0){M=H}else{c[w+32>>2]=H;M=x}c[C>>2]=1;F=M;G=H}else{F=x;G=w}}while(0);A=c[z+8>>2]|0;if((A|0)==0){t=G;u=F;break a}w=G;x=F;y=y+1|0;z=A}}}while(0);if((u|0)==0){break}else{o=t;f=u}}p=256;q=0;i=e;return}function Rq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=c[637759]|0;h=c[f+(d*28|0)+12>>2]|0;if((h|0)>0){i=f+(d*28|0)+16|0}else{f=-h|0;h=c[637765]|0;i=h+(f*20|0)+12+(((c[h+(f*20|0)+4>>2]|0)!=(b|0))<<2)|0}f=c[i>>2]|0;i=c[(c[(c[637817]|0)+(b<<2)>>2]|0)+(f<<2)>>2]|0;h=(i|0)==0;a:do{if(h){j=7}else{k=i;while(1){if((c[k+36>>2]|0)==(e|0)){break}l=c[k+44>>2]|0;if((l|0)==0){j=7;break a}else{k=l}}l=k+52|0;m=c[l>>2]|0;n=k+48|0;o=c[n>>2]|0;if((m|0)==0){c[637820]=o}else{c[m+48>>2]=o}o=c[n>>2]|0;m=c[l>>2]|0;if((o|0)==0){c[637819]=m}else{c[o+52>>2]=m}c[l>>2]=0;c[n>>2]=0;p=k}}while(0);if((j|0)==7){j=c[(c[637769]|0)+(b<<4)+4>>2]|0;n=(j<<1)+64|0;l=n+j|0;c[154360]=l+(c[154360]|0);j=kv(l)|0;m=j;c[j+56>>2]=j+n;c[j+8>>2]=l;c[j+12>>2]=b;c[j+16>>2]=d;l=c[637757]|0;g[j+20>>2]=+g[l+(d*48|0)+36>>2];g[j+24>>2]=+g[l+(d*48|0)+40>>2];g[j+28>>2]=+g[l+(d*48|0)+44>>2];g[j+32>>2]=1.0;c[j+36>>2]=e;c[j+40>>2]=0;c[j+44>>2]=i;if(!h){c[i+40>>2]=m}c[(c[(c[637817]|0)+(b<<2)>>2]|0)+(f<<2)>>2]=m;Qq(m);p=m}g[p+4>>2]=+yp();a[p|0]=1;m=c[637820]|0;if((m|0)==0){c[637819]=p;c[p+48>>2]=0;q=p+52|0;c[q>>2]=0;c[637820]=p;return p|0}else{c[m+52>>2]=p;c[p+48>>2]=c[637820];q=p+52|0;c[q>>2]=0;c[637820]=p;return p|0}return 0}function Sq(a){a=a|0;var d=0,e=0,f=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,A=0,B=0,C=0,D=0,E=0,F=0,G=0;c[164926]=(c[164926]|0)+1;d=c[637764]|0;e=c[637813]|0;f=e+(d*40|0)|0;c[f>>2]=c[a+12>>2];h=a+16|0;c[e+(d*40|0)+4>>2]=c[h>>2];i=~~+g[a+32>>2];b[e+(d*40|0)+20>>1]=i;j=c[(c[637759]|0)+((c[h>>2]|0)*28|0)+12>>2]|0;if((j|0)<0){b[a+60+(-j<<1)>>1]=i}c[e+(d*40|0)+32>>2]=0;c[e+(d*40|0)+36>>2]=0;if((f|0)==0){return}d=a+36|0;e=f;i=f;while(1){f=e+32|0;j=c[f>>2]|0;if((j|0)==0){k=0;l=0}else{c[j+36>>2]=0;k=i;l=c[f>>2]|0}c[e+28>>2]=0;f=e|0;j=c[f>>2]|0;h=c[637769]|0;m=e+4|0;n=Rq(j,c[m>>2]|0,c[d>>2]|0)|0;o=h+(j<<4)+8|0;if((c[o>>2]|0)>0){p=h+(j<<4)+12|0;q=h+(j<<4)+4|0;j=e+20|0;h=l;r=k;s=0;while(1){t=c[(c[637767]|0)+((c[p>>2]|0)+s<<2)>>2]|0;u=c[637765]|0;v=u+(t*20|0)|0;w=c[v>>2]|0;do{if((w|0)==(c[m>>2]|0)){x=r;y=h}else{z=c[637759]|0;A=c[z+(w*28|0)+12>>2]|0;if((A|0)>0){B=z+(w*28|0)+16|0}else{z=-A|0;B=u+(z*20|0)+12+(((c[u+(z*20|0)+4>>2]|0)!=(c[f>>2]|0))<<2)|0}z=c[B>>2]|0;if((z|0)>=(c[q>>2]|0)){x=r;y=h;break}A=b[n+60+(z<<1)>>1]|0;if(A<<16>>16==0){x=r;y=h;break}z=(b[j>>1]|0)+A&65535;A=a+60+(t<<1)|0;C=b[A>>1]|0;if(!(C<<16>>16==0|(C&65535)>>>0>(z&65535)>>>0)){x=r;y=h;break}b[A>>1]=z;A=c[637813]|0;C=A+(t*40|0)|0;D=c[u+(t*20|0)+4>>2]|0;if((D|0)==(c[f>>2]|0)){c[C>>2]=c[u+(t*20|0)+8>>2]}else{c[C>>2]=D}c[A+(t*40|0)+4>>2]=c[v>>2];b[A+(t*40|0)+20>>1]=(c[(c[637821]|0)+(t<<2)>>2]|0)+(z&65535);z=A+(t*40|0)+28|0;if((c[z>>2]|0)!=0){x=r;y=h;break}c[A+(t*40|0)+32>>2]=0;c[A+(t*40|0)+36>>2]=r;if((r|0)==0){E=C}else{c[r+32>>2]=C;E=h}c[z>>2]=1;x=C;y=E}}while(0);t=s+1|0;if((t|0)<(c[o>>2]|0)){h=y;r=x;s=t}else{F=y;G=x;break}}}else{F=l;G=k}if((F|0)==0){break}else{e=F;i=G}}return}function Tq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=c[(c[637818]|0)+(d<<2)>>2]|0;a:do{if((f|0)==0){h=4}else{i=f;while(1){if((c[i+36>>2]|0)==(e|0)){break}j=c[i+44>>2]|0;if((j|0)==0){h=4;break a}else{i=j}}j=i+52|0;k=c[j>>2]|0;l=i+48|0;m=c[l>>2]|0;if((k|0)==0){c[637820]=m}else{c[k+48>>2]=m}m=c[l>>2]|0;k=c[j>>2]|0;if((m|0)==0){c[637819]=k}else{c[m+52>>2]=k}c[j>>2]=0;c[l>>2]=0;n=i}}while(0);if((h|0)==4){h=c[637764]|0;f=(h<<1)+64|0;l=f+h|0;c[154360]=l+(c[154360]|0);h=kv(l)|0;j=h;c[h+56>>2]=h+f;c[h+8>>2]=l;c[h+12>>2]=b;c[h+16>>2]=d;b=c[637757]|0;g[h+20>>2]=+g[b+(d*48|0)+36>>2];g[h+24>>2]=+g[b+(d*48|0)+40>>2];g[h+28>>2]=+g[b+(d*48|0)+44>>2];g[h+32>>2]=1.0;c[h+36>>2]=e;c[h+40>>2]=0;c[h+44>>2]=c[(c[637818]|0)+(d<<2)>>2];h=c[637818]|0;e=c[h+(d<<2)>>2]|0;if((e|0)==0){o=h}else{c[e+40>>2]=j;o=c[637818]|0}c[o+(d<<2)>>2]=j;Sq(j);n=j}g[n+4>>2]=+yp();a[n|0]=0;j=c[637820]|0;if((j|0)==0){c[637819]=n;c[n+48>>2]=0;p=n+52|0;c[p>>2]=0;c[637820]=n;return n|0}else{c[j+52>>2]=n;c[n+48>>2]=c[637820];p=n+52|0;c[p>>2]=0;c[637820]=n;return n|0}return 0}function Uq(a,f,h,j,k,l){a=a|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;var 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.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0.0;m=i;if((c[637705]|0)==0){n=0;i=m;return n|0}if((a|0)==(h|0)){c[k>>2]=1;c[l>>2]=0;n=1;i=m;return n|0}do{if((a|0)>=1){o=c[637756]|0;if((o|0)<=(a|0)){break}if(!((h|0)>0&(o|0)>(h|0))){if((c[636484]|0)==0){n=0;i=m;return n|0}ue[c[636260]&31](3,53688,(p=i,i=i+8|0,c[p>>2]=h,p)|0);i=p;n=0;i=m;return n|0}do{if((ov()|0)>=1048576){break}}while((Gq()|0)!=0);if((dq(a)|0)==0){if((dq(h)|0)==0){q=j}else{r=15}}else{r=15}if((r|0)==15){q=j|8388608}o=c[637759]|0;s=c[o+(a*28|0)+12>>2]|0;t=c[o+(h*28|0)+12>>2]|0;do{if((s|0)<0&(t|0)>0){o=-s|0;u=c[637765]|0;if((c[u+(o*20|0)+4>>2]|0)!=(t|0)){if((c[u+(o*20|0)+8>>2]|0)!=(t|0)){v=t;w=s;break}}v=t;w=t}else{if(!((s|0)>0&(t|0)<0)){v=t;w=s;break}o=-t|0;u=c[637765]|0;if((c[u+(o*20|0)+4>>2]|0)!=(s|0)){if((c[u+(o*20|0)+8>>2]|0)!=(s|0)){v=t;w=s;break}}v=s;w=s}}while(0);do{if((w|0)>0&(v|0)>0&(w|0)==(v|0)){o=Rq(w,h,q)|0;u=c[637759]|0;x=c[u+(a*28|0)+12>>2]|0;if((x|0)>0){y=u+(a*28|0)+16|0}else{z=-x|0;A=c[637765]|0;y=A+(z*20|0)+12+(((c[A+(z*20|0)+4>>2]|0)!=(w|0))<<2)|0}z=c[y>>2]|0;if((z|0)>=(c[(c[637769]|0)+(w<<4)+4>>2]|0)){n=0;i=m;return n|0}A=b[o+60+(z<<1)>>1]|0;if(A<<16>>16==0){B=x;C=c[u+(h*28|0)+12>>2]|0;break}x=(d[(c[o+56>>2]|0)+z|0]|0)+(c[u+(a*28|0)+24>>2]|0)|0;c[l>>2]=x;if((f|0)==0){c[k>>2]=A&65535;n=1;i=m;return n|0}u=c[637761]|0;z=A&65535;D=+g[f>>2]- +g[u+(x*44|0)+12>>2];E=+g[f+4>>2]- +g[u+(x*44|0)+16>>2];F=+g[f+8>>2]- +g[u+(x*44|0)+20>>2];G=+T(D*D+E*E+F*F);do{if((cq(a)|0)==0){if((Xp(a)|0)!=0){H=G;break}H=G*.33000001311302185}else{H=G*1.2999999523162842}}while(0);x=~~H;c[k>>2]=((x|0)<1?1:x&65535)+z;n=1;i=m;return n|0}else{B=s;C=t}}while(0);if((C|0)<0){I=c[(c[637765]|0)+((-C|0)*20|0)+4>>2]|0}else{I=C}t=Tq(I,h,q)|0;if((B|0)<0){s=-B|0;c[k>>2]=e[t+60+(s<<1)>>1]|0;c[l>>2]=(d[(c[t+56>>2]|0)+s|0]|0)+(c[(c[637759]|0)+(a*28|0)+24>>2]|0);n=1;i=m;return n|0}s=c[637769]|0;x=s+(B<<4)+8|0;if((c[x>>2]|0)<=0){n=0;i=m;return n|0}u=s+(B<<4)+12|0;A=s+(B<<4)+4|0;s=f+4|0;o=f+8|0;if((f|0)==0){J=0;K=-1;L=0;while(1){M=c[(c[637767]|0)+((c[u>>2]|0)+J<<2)>>2]|0;N=t+60+(M<<1)|0;do{if((b[N>>1]|0)==0){O=L;P=K}else{Q=Rq(B,c[(c[637765]|0)+(M*20|0)>>2]|0,q)|0;R=c[637759]|0;S=c[R+(a*28|0)+12>>2]|0;if((S|0)>0){U=R+(a*28|0)+16|0}else{R=-S|0;S=c[637765]|0;U=S+(R*20|0)+12+(((c[S+(R*20|0)+4>>2]|0)!=(B|0))<<2)|0}R=c[U>>2]|0;if((R|0)>=(c[A>>2]|0)){O=L;P=K;break}S=b[Q+60+(R<<1)>>1]|0;if(S<<16>>16==0){O=L;P=K;break}R=((b[N>>1]|0)+S&65535)+(c[(c[637821]|0)+(M<<2)>>2]|0)&65535;if(!(L<<16>>16==0|(R&65535)>>>0<(L&65535)>>>0)){O=L;P=K;break}O=R;P=c[l>>2]|0}}while(0);M=J+1|0;if((M|0)<(c[x>>2]|0)){J=M;K=P;L=O}else{V=P;W=O;break}}}else{L=0;K=-1;J=0;while(1){M=c[(c[637767]|0)+((c[u>>2]|0)+L<<2)>>2]|0;N=t+60+(M<<1)|0;do{if((b[N>>1]|0)==0){X=J;Y=K}else{z=Rq(B,c[(c[637765]|0)+(M*20|0)>>2]|0,q)|0;R=c[637759]|0;S=c[R+(a*28|0)+12>>2]|0;if((S|0)>0){Z=R+(a*28|0)+16|0}else{Q=-S|0;S=c[637765]|0;Z=S+(Q*20|0)+12+(((c[S+(Q*20|0)+4>>2]|0)!=(B|0))<<2)|0}Q=c[Z>>2]|0;if((Q|0)>=(c[A>>2]|0)){X=J;Y=K;break}S=b[z+60+(Q<<1)>>1]|0;if(S<<16>>16==0){X=J;Y=K;break}_=((b[N>>1]|0)+S&65535)+(c[(c[637821]|0)+(M<<2)>>2]|0)|0;S=(d[(c[z+56>>2]|0)+Q|0]|0)+(c[R+(a*28|0)+24>>2]|0)|0;c[l>>2]=S;R=c[637761]|0;G=+g[f>>2]- +g[R+(S*44|0)+12>>2];F=+g[s>>2]- +g[R+(S*44|0)+16>>2];E=+g[o>>2]- +g[R+(S*44|0)+20>>2];D=+T(G*G+F*F+E*E);do{if((cq(a)|0)==0){if((Xp(a)|0)!=0){$=D;break}$=D*.33000001311302185}else{$=D*1.2999999523162842}}while(0);S=~~$;R=((S|0)<1?1:S)+_&65535;if(!(J<<16>>16==0|(R&65535)>>>0<(J&65535)>>>0)){X=J;Y=K;break}X=R;Y=c[l>>2]|0}}while(0);M=L+1|0;if((M|0)<(c[x>>2]|0)){L=M;K=Y;J=X}else{V=Y;W=X;break}}}if((V|0)<0){n=0;i=m;return n|0}c[l>>2]=V;c[k>>2]=W&65535;n=1;i=m;return n|0}}while(0);if((c[636484]|0)==0){n=0;i=m;return n|0}ue[c[636260]&31](3,54712,(p=i,i=i+8|0,c[p>>2]=a,p)|0);i=p;n=0;i=m;return n|0}function Vq(a,b,d,f,h,j,k,l,m,n,o){a=a|0;b=b|0;d=d|0;f=f|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,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,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0,ja=0,ka=0,la=0.0,ma=0.0;p=i;i=i+32|0;q=p|0;r=p+8|0;s=p+16|0;t=a+16|0;c[t>>2]=0;u=a+12|0;c[u>>2]=f;v=a+20|0;c[v>>2]=0;w=a+24|0;c[w>>2]=0;x=a|0;g[x>>2]=+g[d>>2];y=d+4|0;z=a+4|0;g[z>>2]=+g[y>>2];A=d+8|0;B=a+8|0;g[B>>2]=+g[A>>2];C=a+32|0;c[C>>2]=0;a=s|0;g[a>>2]=+g[d>>2];D=s+4|0;g[D>>2]=+g[y>>2];E=s+8|0;g[E>>2]=+g[A>>2];a:do{if((b|0)==(f|0)){F=b}else{s=(j|0)==0;G=(l&2|0)==0;H=(k|0)!=0;I=(l&4|0)==0;J=(l&8|0)!=0;K=0;L=b;b:while(1){if(!((s|(K|0)<(j|0))&(K|0)<(c[637756]|0))){F=L;break a}M=(Uq(L,a,f,h,q,r)|0)==0;N=M?0:c[r>>2]|0;if((N|0)==0){O=5;break}P=c[637761]|0;M=P+(N*44|0)|0;if(!G){Q=P+(N*44|0)+36|0;R=c[Q>>2]|0;S=R&16777215;if(S>>>0>31>>>0){U=1}else{U=c[2551116+(S<<2)>>2]|R<<3&402653184}if((U&n|0)!=0){O=10;break}V=M|0;W=c[637811]|0;if((c[W+(c[V>>2]<<2)>>2]&n|0)!=0){O=14;break}}R=c[637823]|0;S=c[R+(N<<3)+4>>2]|0;if((S|0)>-1){X=R+(N<<3)|0;R=c[637822]|0;Y=c[637759]|0;Z=M|0;_=0;while(1){$=(_|0)<(S|0);if($){aa=R+((c[X>>2]|0)+_<<2)|0}else{aa=Z}ba=c[aa>>2]|0;if(!I){ca=Y+(ba*28|0)|0;if((c[ca>>2]&m|0)!=0){O=26;break b}}if(J&(ba|0)==(o|0)){O=32;break b}if($){_=_+1|0}else{break}}}da=+g[d>>2]- +g[P+(N*44|0)+12>>2];ea=+g[y>>2]- +g[P+(N*44|0)+16>>2];fa=+g[A>>2]- +g[P+(N*44|0)+20>>2];ga=+T(da*da+ea*ea+fa*fa);do{if((cq(b)|0)==0){if((Xp(b)|0)!=0){ha=ga;break}ha=ga*.33000001311302185}else{ha=ga*1.2999999523162842}}while(0);_=~~ha;Z=((_|0)<1?1:_&65535)+(c[C>>2]|0)+(e[P+(N*44|0)+40>>1]|0)|0;c[C>>2]=Z;_=M|0;c[u>>2]=c[_>>2];c[v>>2]=c[(c[637759]|0)+((c[_>>2]|0)*28|0)>>2];X=c[P+(N*44|0)+36>>2]|0;R=X&16777215;if(R>>>0>31>>>0){ia=1}else{ia=c[2551116+(R<<2)>>2]|X<<3&402653184}c[w>>2]=ia;X=P+(N*44|0)+24|0;g[x>>2]=+g[X>>2];R=P+(N*44|0)+28|0;g[z>>2]=+g[R>>2];S=P+(N*44|0)+32|0;g[B>>2]=+g[S>>2];$=c[_>>2]|0;g[a>>2]=+g[X>>2];g[D>>2]=+g[R>>2];g[E>>2]=+g[S>>2];if(H&(Z|0)>(k|0)){F=$;break a}if(($|0)==(f|0)){F=f;break a}else{K=K+1|0;L=$}}if((O|0)==5){c[t>>2]=1;ja=0;i=p;return ja|0}else if((O|0)==10){c[t>>2]=2;c[u>>2]=L;c[v>>2]=c[(c[637759]|0)+(L*28|0)>>2];K=c[Q>>2]|0;H=K&16777215;if(H>>>0>31>>>0){ka=1}else{ka=c[2551116+(H<<2)>>2]|K<<3&402653184}c[w>>2]=ka;g[x>>2]=+g[P+(N*44|0)+12>>2];g[z>>2]=+g[P+(N*44|0)+16>>2];g[B>>2]=+g[P+(N*44|0)+20>>2];ja=1;i=p;return ja|0}else if((O|0)==14){c[t>>2]=2;c[u>>2]=c[V>>2];c[v>>2]=c[(c[637759]|0)+((c[V>>2]|0)*28|0)>>2];c[w>>2]=c[W+(c[V>>2]<<2)>>2];g[x>>2]=+g[P+(N*44|0)+24>>2];g[z>>2]=+g[P+(N*44|0)+28>>2];g[B>>2]=+g[P+(N*44|0)+32>>2];ga=+g[d>>2]- +g[P+(N*44|0)+12>>2];fa=+g[y>>2]- +g[P+(N*44|0)+16>>2];ea=+g[A>>2]- +g[P+(N*44|0)+20>>2];da=+T(ga*ga+fa*fa+ea*ea);do{if((cq(b)|0)==0){if((Xp(b)|0)!=0){la=da;break}la=da*.33000001311302185}else{la=da*1.2999999523162842}}while(0);L=~~la;c[C>>2]=((L|0)<1?1:L&65535)+(c[C>>2]|0)+(e[P+(N*44|0)+40>>1]|0);ja=1;i=p;return ja|0}else if((O|0)==26){c[t>>2]=4;c[u>>2]=ba;c[v>>2]=c[ca>>2];g[x>>2]=+g[P+(N*44|0)+24>>2];g[z>>2]=+g[P+(N*44|0)+28>>2];g[B>>2]=+g[P+(N*44|0)+32>>2];da=+g[d>>2]- +g[P+(N*44|0)+12>>2];ea=+g[y>>2]- +g[P+(N*44|0)+16>>2];fa=+g[A>>2]- +g[P+(N*44|0)+20>>2];ga=+T(da*da+ea*ea+fa*fa);do{if((cq(b)|0)==0){if((Xp(b)|0)!=0){ma=ga;break}ma=ga*.33000001311302185}else{ma=ga*1.2999999523162842}}while(0);L=~~ma;c[C>>2]=((L|0)<1?1:L&65535)+(c[C>>2]|0)+(e[P+(N*44|0)+40>>1]|0);ja=1;i=p;return ja|0}else if((O|0)==32){c[t>>2]=8;c[u>>2]=o;c[v>>2]=c[Y+(o*28|0)>>2];g[x>>2]=+g[P+(N*44|0)+12>>2];g[z>>2]=+g[P+(N*44|0)+16>>2];g[B>>2]=+g[P+(N*44|0)+20>>2];ja=1;i=p;return ja|0}}}while(0);ja=(F|0)==(f|0)|0;i=p;return ja|0}function Wq(a,b){a=a|0;b=b|0;var d=0;if((c[637705]|0)==0){Zx(b|0,0,44)|0;return}d=b;if((a|0)>-1&(c[637760]|0)>(a|0)){Vx(d|0,(c[637761]|0)+(a*44|0)|0,44)|0;return}else{Zx(d|0,0,44)|0;return}}function Xq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;if((c[637705]|0)==0){e=0;i=d;return e|0}if(!((a|0)>0&(c[637756]|0)>(a|0))){ue[c[636260]&31](3,52616,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;e=0;i=d;return e|0}g=c[637759]|0;h=c[g+(a*28|0)+24>>2]|0;if((b|0)==0){e=h;i=d;return e|0}if((h|0)>(b|0)){ue[c[636260]&31](4,51656,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;e=0;i=d;return e|0}else{f=b+1|0;e=(f|0)<((c[g+(a*28|0)+20>>2]|0)+h|0)?f:0;i=d;return e|0}return 0}function Yq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[637760]|0;do{if((a|0)<1){e=1}else{if((d|0)>(a|0)){e=a+1|0;break}else{f=0;return f|0}}}while(0);if((e|0)>=(d|0)){f=0;return f|0}a=c[637761]|0;g=e;while(1){e=c[a+(g*44|0)+36>>2]&16777215;if((e|0)==11){if((c[a+(g*44|0)+4>>2]|0)==(b|0)){f=g;h=10;break}}else if((e|0)==19){if((c[a+(g*44|0)+4>>2]&65535|0)==(b|0)){f=g;h=10;break}}e=g+1|0;if((e|0)<(d|0)){g=e}else{f=0;h=10;break}}if((h|0)==10){return f|0}return 0}function Zq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c[(c[469146]|0)+(c[164934]<<2)>>2]=a;c[164934]=(c[164934]|0)+1;c[(c[179588]|0)+(a<<3)>>2]=0;b=c[637757]|0;d=b+(a*48|0)+4|0;e=c[d>>2]|0;if((e|0)<=0){return}f=b+(a*48|0)+8|0;b=0;g=e;while(1){e=c[(c[637755]|0)+((c[f>>2]|0)+b<<2)>>2]|0;h=(e|0)>-1?e:-e|0;e=c[637753]|0;i=c[e+(h*24|0)+16>>2]|0;if((i|0)==(a|0)){j=c[e+(h*24|0)+20>>2]|0}else{j=i}do{if((j|0)==0){k=g}else{if((c[(c[179588]|0)+(j<<3)>>2]|0)==0){k=g;break}Zq(j);k=c[d>>2]|0}}while(0);i=b+1|0;if((i|0)<(k|0)){b=i;g=k}else{break}}return}function _q(a,d,f,h,j,k,l,m){a=a|0;d=d|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.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.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0;f=i;if((d|0)==0|(h|0)==0){n=0;i=f;return n|0}o=Kq(d,a,h,j)|0;Zx(c[179588]|0,0,c[637756]<<3|0)|0;if((c[637756]|0)<=1){n=0;i=f;return n|0}p=(m&2|0)==0;q=(m&4|0)==0;r=+(o|0);s=r*1.100000023841858;t=r*.800000011920929;if((m&1|0)==0){m=0;u=1;while(1){if(p){v=6}else{if((c[(c[637759]|0)+(u*28|0)>>2]&8|0)==0){v=6}else{v=8}}do{if((v|0)==6){v=0;if(q){w=m;break}if((c[(c[637759]|0)+(u*28|0)>>2]&512|0)==0){w=m}else{v=8}}}while(0);do{if((v|0)==8){v=0;if((Yp(u)|0)==0){w=m;break}x=Kq(d,a,u,j)|0;if((x|0)==0|+(x|0)>s){w=m;break}y=Kq(u,0,h,j)|0;if((y|0)==0|+(y|0)>t){w=m;break}z=c[179588]|0;c[z+(u<<3)>>2]=1;b[z+(u<<3)+4>>1]=x;b[z+(u<<3)+6>>1]=y;iv(49688,(A=i,i=i+16|0,c[A>>2]=m,c[A+8>>2]=u,A)|0);i=A;w=m+1|0}}while(0);y=u+1|0;z=c[637756]|0;if((y|0)<(z|0)){m=w;u=y}else{B=z;break}}}else{u=0;w=1;while(1){do{if((Yp(w)|0)==0){C=u}else{m=Kq(d,a,w,j)|0;if((m|0)==0|+(m|0)>s){C=u;break}q=Kq(w,0,h,j)|0;if((q|0)==0|+(q|0)>t){C=u;break}p=c[179588]|0;c[p+(w<<3)>>2]=1;b[p+(w<<3)+4>>1]=m;b[p+(w<<3)+6>>1]=q;iv(49688,(A=i,i=i+16|0,c[A>>2]=u,c[A+8>>2]=w,A)|0);i=A;C=u+1|0}}while(0);q=w+1|0;p=c[637756]|0;if((q|0)<(p|0)){u=C;w=q}else{B=p;break}}}if((B|0)<=1){n=0;i=f;return n|0}w=0;C=1;u=c[179588]|0;A=B;while(1){if((c[u+(C<<3)>>2]|0)==0){D=w;E=u;F=A}else{c[164934]=0;Zq(C);B=c[164934]|0;j=(B|0)>0;if(j){h=c[469146]|0;a=c[637757]|0;d=0;t=0.0;s=0.0;r=0.0;do{p=c[h+(d<<2)>>2]|0;r=r+ +g[a+(p*48|0)+36>>2];s=s+ +g[a+(p*48|0)+40>>2];t=t+ +g[a+(p*48|0)+44>>2];d=d+1|0;}while((d|0)<(B|0));G=t;H=s;I=r}else{G=0.0;H=0.0;I=0.0}J=1.0/+(B|0);K=I*J;L=H*J;M=G*J;if(j){d=c[469146]|0;a=c[637757]|0;h=0;p=0;J=999999.0;while(1){q=c[d+(p<<2)>>2]|0;N=K- +g[a+(q*48|0)+36>>2];O=L- +g[a+(q*48|0)+40>>2];P=M- +g[a+(q*48|0)+44>>2];Q=+T(N*N+O*O+P*P);m=Q<J;z=m?q:h;q=p+1|0;if((q|0)<(B|0)){h=z;p=q;J=m?Q:J}else{R=z;S=a;break}}}else{R=0;S=c[637757]|0}g[k+(w*24|0)>>2]=+g[S+(R*48|0)+36>>2];g[k+(w*24|0)+4>>2]=+g[S+(R*48|0)+40>>2];g[k+(w*24|0)+8>>2]=+g[S+(R*48|0)+44>>2];c[k+(w*24|0)+12>>2]=R;a=c[179588]|0;p=a+(R<<3)+4|0;b[k+(w*24|0)+16>>1]=b[p>>1]|0;h=a+(R<<3)+6|0;b[k+(w*24|0)+18>>1]=b[h>>1]|0;b[k+(w*24|0)+20>>1]=(e[p>>1]|0)-o+(e[h>>1]|0);h=w+1|0;if((h|0)>=(l|0)){n=h;v=32;break}D=h;E=a;F=c[637756]|0}a=C+1|0;if((a|0)<(F|0)){w=D;C=a;u=E;A=F}else{n=D;v=32;break}}if((v|0)==32){i=f;return n|0}return 0}function $q(){var a=0;a=c[179588]|0;if((a|0)!=0){nv(a)}c[179588]=jv(c[637756]<<3)|0;a=c[469146]|0;if((a|0)!=0){nv(a)}c[469146]=jv(c[637756]<<2)|0;return}function ar(){var a=0;a=c[179588]|0;if((a|0)!=0){nv(a)}c[179588]=0;a=c[469146]|0;if((a|0)!=0){nv(a)}c[469146]=0;c[164934]=0;return}function br(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0;e=i;i=i+80|0;f=e|0;h=e+40|0;Zx(f|0,0,32)|0;g[f+12>>2]=-15.0;g[f+16>>2]=-15.0;g[f+20>>2]=-24.0;g[f+24>>2]=-15.0;g[f+28>>2]=-15.0;g[f+32>>2]=-24.0;Zx(h|0,0,32)|0;g[h+12>>2]=15.0;g[h+16>>2]=15.0;g[h+20>>2]=32.0;g[h+24>>2]=15.0;g[h+28>>2]=15.0;g[h+32>>2]=8.0;if((a|0)==2){j=1}else if((a|0)==4){j=2}else{ue[c[636260]&31](4,49632,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;j=2}g[b>>2]=+g[f+(j*12|0)>>2];g[b+4>>2]=+g[f+(j*12|0)+4>>2];g[b+8>>2]=+g[f+(j*12|0)+8>>2];g[d>>2]=+g[h+(j*12|0)>>2];g[d+4>>2]=+g[h+(j*12|0)+4>>2];g[d+8>>2]=+g[h+(j*12|0)+8>>2];i=e;return}function cr(){var a=0,b=0,d=0,e=0,f=0,g=0;a=c[637773]|0;b=c[637772]|0;if((b|0)==0){d=~~+ev(57664,47464);e=(d|0)<0?0:d;c[637773]=e;d=lv(e*24|0)|0;c[637772]=d;f=e;g=d}else{f=a;g=b}c[g+12>>2]=0;g=c[637772]|0;c[g+8>>2]=g+24;g=f-1|0;if((g|0)>1){b=1;while(1){a=c[637772]|0;c[a+(b*24|0)+12>>2]=a+((b-1|0)*24|0);a=b+1|0;d=c[637772]|0;c[d+(b*24|0)+8>>2]=d+(a*24|0);if((a|0)<(g|0)){b=a}else{break}}}b=c[637772]|0;c[b+(g*24|0)+12>>2]=b+((f-2|0)*24|0);c[(c[637772]|0)+(g*24|0)+8>>2]=0;c[637774]=c[637772];c[164938]=f;return}function dr(){var a=0;a=c[637772]|0;if((a|0)!=0){nv(a)}c[637772]=0;c[637773]=0;return}function er(){var a=0;if((c[637704]|0)==0){return}a=c[637775]|0;if((a|0)!=0){nv(a)}c[637775]=mv(c[637756]<<2)|0;return}function fr(){var a=0;a=c[637775]|0;if((a|0)!=0){nv(a)}c[637775]=0;return}function gr(a){a=a|0;var b=0,d=0,e=0,f=0.0,h=0.0,j=0.0,k=0,l=0;b=i;if((c[637704]|0)==0){ue[c[636260]&31](3,35896,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=b;return 0}d=c[637763]|0;e=c[637747]|0;f=+g[a>>2];h=+g[a+4>>2];j=+g[a+8>>2];a=1;do{k=c[d+(a*12|0)>>2]|0;if(f*+g[e+(k*20|0)>>2]+h*+g[e+(k*20|0)+4>>2]+j*+g[e+(k*20|0)+8>>2]- +g[e+(k*20|0)+12>>2]>0.0){l=d+(a*12|0)+4|0}else{l=d+(a*12|0)+8|0}a=c[l>>2]|0;}while((a|0)>0);i=b;return-a|0}function hr(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0;b=i;if((c[637705]|0)==0){d=0;i=b;return d|0}if((a|0)==0){e=c[637768]|0;if((e|0)<=0){d=0;i=b;return d|0}f=c[637769]|0;h=0;j=0;while(1){k=(c[f+(h<<4)+4>>2]|0)+j|0;l=h+1|0;if((l|0)<(e|0)){h=l;j=k}else{d=k;break}}i=b;return d|0}if((c[637704]|0)==0){ue[c[636260]&31](3,35896,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;d=0;i=b;return d|0}j=c[637763]|0;h=c[637747]|0;m=+g[a>>2];n=+g[a+4>>2];o=+g[a+8>>2];a=1;do{e=c[j+(a*12|0)>>2]|0;if(m*+g[h+(e*20|0)>>2]+n*+g[h+(e*20|0)+4>>2]+o*+g[h+(e*20|0)+8>>2]- +g[h+(e*20|0)+12>>2]>0.0){p=j+(a*12|0)+4|0}else{p=j+(a*12|0)+8|0}a=c[p>>2]|0;}while((a|0)>0);p=-a|0;if((a|0)==0){d=0;i=b;return d|0}if((Yp(p)|0)==0){d=0;i=b;return d|0}a=c[637759]|0;j=c[a+(p*28|0)+12>>2]|0;if((j|0)<0){h=c[637765]|0;e=c[h+((-j|0)*20|0)+4>>2]|0;q=e;r=h+((-e|0)*20|0)+12|0}else{q=j;r=a+(p*28|0)+16|0}p=c[r>>2]|0;if((q|0)>0){r=c[637769]|0;a=0;j=0;while(1){e=(c[r+(a<<4)+4>>2]|0)+j|0;h=a+1|0;if((h|0)<(q|0)){a=h;j=e}else{s=e;break}}}else{s=0}d=s+p|0;i=b;return d|0}function ir(a){a=a|0;var b=0,d=0;b=i;if((c[637704]|0)==0){d=0;i=b;return d|0}if((a|0)>0&(c[637756]|0)>(a|0)){d=c[(c[637759]|0)+(a*28|0)+8>>2]|0;i=b;return d|0}else{ue[c[636260]&31](3,26328,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;d=0;i=b;return d|0}return 0}function jr(a){a=a|0;var b=0,d=0,e=0,f=0.0,h=0.0,i=0.0,j=0,k=0;if((c[637704]|0)==0){b=0;return b|0}d=c[637763]|0;e=c[637747]|0;f=+g[a>>2];h=+g[a+4>>2];i=+g[a+8>>2];a=1;do{j=c[d+(a*12|0)>>2]|0;if(f*+g[e+(j*20|0)>>2]+h*+g[e+(j*20|0)+4>>2]+i*+g[e+(j*20|0)+8>>2]- +g[e+(j*20|0)+12>>2]>0.0){k=d+(a*12|0)+4|0}else{k=d+(a*12|0)+8|0}a=c[k>>2]|0;}while((a|0)>0);if((a|0)==0){b=1;return b|0}b=c[(c[637759]|0)+((-a|0)*28|0)+8>>2]|0;return b|0}function kr(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|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;j=i;i=i+200|0;k=j|0;l=j+40|0;m=j+80|0;n=j+96|0;o=j+112|0;p=o;q=m|0;r=n|0;Zx(k|0,0,28)|0;g[k+12>>2]=-15.0;g[k+16>>2]=-15.0;g[k+20>>2]=-24.0;g[k+24>>2]=-15.0;g[k+28>>2]=-15.0;g[k+32>>2]=-24.0;Zx(l|0,0,28)|0;g[l+12>>2]=15.0;g[l+16>>2]=15.0;g[l+20>>2]=32.0;g[l+24>>2]=15.0;g[l+28>>2]=15.0;g[l+32>>2]=8.0;if((e|0)==4){s=2}else if((e|0)==2){s=1}else{ue[c[636260]&31](4,49632,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;s=2}g[q>>2]=+g[k+(s*12|0)>>2];g[m+4>>2]=+g[k+(s*12|0)+4>>2];g[m+8>>2]=+g[k+(s*12|0)+8>>2];g[r>>2]=+g[l+(s*12|0)>>2];g[n+4>>2]=+g[l+(s*12|0)+4>>2];g[n+8>>2]=+g[l+(s*12|0)+8>>2];Zx(p|0,0,84)|0;g[o+8>>2]=1.0;p=c[(c[637775]|0)+(a<<2)>>2]|0;if((p|0)==0){t=0;u=84;v=0;i=j;return t|0}else{w=0;x=p}while(1){p=c[x>>2]|0;if((p|0)==(f|0)){y=w}else{a=(Lo(p,b,q,r,d,65537,o)|0)==0;y=a?w:1}a=c[x+8>>2]|0;if((a|0)==0){break}else{w=y;x=a}}if((y|0)==0){t=0;u=84;v=0;i=j;return t|0}c[h>>2]=c[o+4>>2];c[h+20>>2]=c[o+80>>2];g[h+8>>2]=+g[o+12>>2];g[h+12>>2]=+g[o+16>>2];g[h+16>>2]=+g[o+20>>2];c[h+28>>2]=0;c[h+32>>2]=0;t=1;u=84;v=0;i=j;return t|0}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,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.0,P=0.0,Q=0.0,R=0.0,S=0.0,U=0.0,V=0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0,ba=0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0.0,Aa=0.0,Ba=0.0,Ca=0;h=i;i=i+4120|0;j=h|0;k=h+16|0;l=h+4080|0;m=l;Zx(m|0,0,36)|0;if((c[637704]|0)==0){Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}r=k|0;g[k>>2]=+g[b>>2];s=b+4|0;g[k+4>>2]=+g[s>>2];t=b+8|0;g[k+8>>2]=+g[t>>2];g[k+12>>2]=+g[d>>2];u=d+4|0;g[k+16>>2]=+g[u>>2];v=d+8|0;g[k+20>>2]=+g[v>>2];c[k+24>>2]=0;c[k+28>>2]=1;w=k+4064|0;x=(f|0)>-1;y=l+24|0;z=k+32|0;k=r;a:while(1){A=z-32+28|0;B=c[637763]|0;C=k|0;D=z-32+4|0;E=z-32+8|0;F=z-32+12|0;G=z-32+16|0;H=z-32+20|0;I=c[637747]|0;J=z>>>0<w>>>0;K=c[A>>2]|0;b:do{if(J){L=K;while(1){if((L|0)<0){M=L;N=13;break b}if((L|0)==0){N=31;break a}O=+g[C>>2];P=+g[D>>2];Q=+g[E>>2];R=+g[F>>2];S=+g[G>>2];U=+g[H>>2];V=c[B+(L*12|0)>>2]|0;W=+g[I+(V*20|0)>>2];X=+g[I+(V*20|0)+4>>2];Y=+g[I+(V*20|0)+8>>2];Z=+g[I+(V*20|0)+12>>2];_=O*W+P*X+Q*Y-Z;$=R*W+S*X+U*Y-Z;if(!(_<0.0|$<0.0)){aa=c[B+(L*12|0)+4>>2]|0;c[A>>2]=aa;L=aa;continue}if(!(_<0.0&$<0.0)){ba=L;ca=O;da=P;ea=Q;fa=R;ga=S;ha=U;ia=_;ja=$;ka=V;N=44;break b}V=c[B+(L*12|0)+8>>2]|0;c[A>>2]=V;L=V}}else{if((K|0)<0){M=K;N=13;break}if((K|0)==0){N=31;break a}$=+g[C>>2];_=+g[D>>2];U=+g[E>>2];S=+g[F>>2];R=+g[G>>2];Q=+g[H>>2];L=c[B+(K*12|0)>>2]|0;P=+g[I+(L*20|0)>>2];O=+g[I+(L*20|0)+4>>2];Z=+g[I+(L*20|0)+8>>2];Y=+g[I+(L*20|0)+12>>2];X=$*P+_*O+U*Z-Y;W=S*P+R*O+Q*Z-Y;if(!(X<0.0|W<0.0)){N=41;break a}if(X<0.0&W<0.0){N=43;break a}else{ba=K;ca=$;da=_;ea=U;fa=S;ga=R;ha=Q;ia=X;ja=W;ka=L;N=44}}}while(0);if((N|0)==13){N=0;la=-M|0;if((c[(c[637759]|0)+(la*28|0)+8>>2]&e|0)==0){N=14;break}if(x){if((kr(la,C,F,e,f,l)|0)!=0){N=25;break}}c[y>>2]=la;ma=k}else if((N|0)==44){N=0;H=z-32+24|0;G=c[H>>2]|0;if(ia==ja){na=ia+-.0010000000474974513}else{na=ia}L=na<0.0;W=na;if(L){oa=(W+.125)/(na-ja)}else{oa=(W+-.125)/(na-ja)}W=oa;do{if(W<0.0){pa=.0010000000474974513}else{if(!(W>1.0)){pa=W;break}pa=.9990000128746033}}while(0);W=ca+(fa-ca)*pa;X=da+(ga-da)*pa;Q=ea+(ha-ea)*pa;g[C>>2]=W;g[D>>2]=X;g[E>>2]=Q;c[H>>2]=ka;F=L&1;c[A>>2]=c[B+(ba*12|0)+4+((F^1)<<2)>>2];if(!J){N=53;break}g[z>>2]=ca;g[z+4>>2]=da;g[z+8>>2]=ea;g[z+12>>2]=W;g[z+16>>2]=X;g[z+20>>2]=Q;c[z+24>>2]=G;c[z+28>>2]=c[B+(ba*12|0)+4+(F<<2)>>2];F=z+32|0;if(F>>>0<w>>>0){ma=F}else{N=55;break}}F=ma-32|0;if(F>>>0<r>>>0){N=11;break}else{z=ma;k=F}}if((N|0)==11){c[l>>2]=0;g[l+4>>2]=1.0;g[l+8>>2]=+g[d>>2];g[l+12>>2]=+g[u>>2];g[l+16>>2]=+g[v>>2];c[l+20>>2]=0;c[l+28>>2]=0;c[l+32>>2]=0;Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==14){ea=+g[b>>2];do{if(+g[C>>2]==ea){da=+g[s>>2];if(!(+g[D>>2]==da)){qa=da;N=19;break}if(!(+g[E>>2]==+g[t>>2])){qa=da;N=19;break}c[l>>2]=1;g[l+4>>2]=0.0;g[j+8>>2]=0.0;g[j+4>>2]=0.0;g[j>>2]=0.0;ra=+g[C>>2];sa=I;ta=0.0;ua=0.0;va=0.0}else{qa=+g[s>>2];N=19}}while(0);if((N|0)==19){c[l>>2]=0;k=j|0;g[k>>2]=+g[d>>2]-ea;ma=j+4|0;g[ma>>2]=+g[u>>2]-qa;da=+g[t>>2];r=j+8|0;g[r>>2]=+g[v>>2]-da;ca=+g[C>>2]-ea;ea=+g[D>>2]-qa;qa=+g[E>>2]-da;da=+T(ca*ca+ea*ea+qa*qa);g[l+4>>2]=da/+dn(k);da=+g[C>>2]+ +g[k>>2]*-.125;g[C>>2]=da;g[D>>2]=+g[D>>2]+ +g[ma>>2]*-.125;g[E>>2]=+g[E>>2]+ +g[r>>2]*-.125;ra=da;sa=c[637747]|0;ta=+g[k>>2];ua=+g[ma>>2];va=+g[r>>2]}g[l+8>>2]=ra;g[l+12>>2]=+g[D>>2];g[l+16>>2]=+g[E>>2];c[l+20>>2]=0;c[l+28>>2]=la;la=c[z-32+24>>2]|0;r=l+32|0;c[r>>2]=la;if(ta*+g[sa+(la*20|0)>>2]+ua*+g[sa+(la*20|0)+4>>2]+va*+g[sa+(la*20|0)+8>>2]>0.0){c[r>>2]=la^1}Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==25){if((c[l>>2]|0)==0){va=+g[b>>2];ua=+g[d>>2]-va;g[j>>2]=ua;ta=+g[s>>2];ra=+g[u>>2]-ta;g[j+4>>2]=ra;da=+g[t>>2];qa=+g[v>>2]-da;g[j+8>>2]=qa;ea=+g[l+8>>2]-va;va=+g[l+12>>2]-ta;ta=+g[l+16>>2]-da;g[l+4>>2]=+T(ea*ea+va*va+ta*ta)/+T(ua*ua+ra*ra+qa*qa)}Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==31){qa=+g[b>>2];do{if(+g[C>>2]==qa){ra=+g[s>>2];if(!(+g[D>>2]==ra)){wa=ra;N=36;break}if(!(+g[E>>2]==+g[t>>2])){wa=ra;N=36;break}c[l>>2]=1;g[l+4>>2]=0.0;g[j+8>>2]=0.0;g[j+4>>2]=0.0;g[j>>2]=0.0;xa=+g[C>>2];ya=I;za=0.0;Aa=0.0;Ba=0.0}else{wa=+g[s>>2];N=36}}while(0);if((N|0)==36){c[l>>2]=0;s=j|0;g[s>>2]=+g[d>>2]-qa;d=j+4|0;g[d>>2]=+g[u>>2]-wa;ra=+g[t>>2];t=j+8|0;g[t>>2]=+g[v>>2]-ra;ua=+g[C>>2]-qa;qa=+g[D>>2]-wa;wa=+g[E>>2]-ra;ra=+T(ua*ua+qa*qa+wa*wa);g[l+4>>2]=ra/+dn(s);ra=+g[C>>2]+ +g[s>>2]*-.125;g[C>>2]=ra;g[D>>2]=+g[D>>2]+ +g[d>>2]*-.125;g[E>>2]=+g[E>>2]+ +g[t>>2]*-.125;xa=ra;ya=c[637747]|0;za=+g[s>>2];Aa=+g[d>>2];Ba=+g[t>>2]}g[l+8>>2]=xa;g[l+12>>2]=+g[D>>2];g[l+16>>2]=+g[E>>2];c[l+20>>2]=0;c[l+28>>2]=0;E=c[z-32+24>>2]|0;z=l+32|0;c[z>>2]=E;if(za*+g[ya+(E*20|0)>>2]+Aa*+g[ya+(E*20|0)+4>>2]+Ba*+g[ya+(E*20|0)+8>>2]>0.0){c[z>>2]=E^1}Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==41){c[A>>2]=c[B+(K*12|0)+4>>2];ue[c[636260]&31](3,22904,(Ca=i,i=i+1|0,i=i+7&-8,c[Ca>>2]=0,Ca)|0);i=Ca;Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==43){c[A>>2]=c[B+(K*12|0)+8>>2];ue[c[636260]&31](3,22904,(Ca=i,i=i+1|0,i=i+7&-8,c[Ca>>2]=0,Ca)|0);i=Ca;Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==53){ue[c[636260]&31](3,22904,(Ca=i,i=i+1|0,i=i+7&-8,c[Ca>>2]=0,Ca)|0);i=Ca;Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}else if((N|0)==55){ue[c[636260]&31](3,22904,(Ca=i,i=i+1|0,i=i+7&-8,c[Ca>>2]=0,Ca)|0);i=Ca;Vx(a|0,m|0,36)|0;n=36;o=0;p=4064;q=0;i=h;return}}function mr(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,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0.0,T=0;h=i;i=i+4064|0;j=h|0;c[d>>2]=0;if((c[637704]|0)==0){k=0;l=4064;m=0;i=h;return k|0}n=j|0;g[j>>2]=+g[a>>2];g[j+4>>2]=+g[a+4>>2];g[j+8>>2]=+g[a+8>>2];g[j+12>>2]=+g[b>>2];g[j+16>>2]=+g[b+4>>2];g[j+20>>2]=+g[b+8>>2];c[j+24>>2]=0;c[j+28>>2]=1;b=c[637763]|0;a=c[637747]|0;o=j+4064|0;p=(e|0)==0;q=0;r=j+32|0;a:while(1){j=r-32|0;if(j>>>0<n>>>0){k=q;s=24;break}else{t=r;u=j}b:while(1){j=t-32+28|0;v=u|0;w=t-32+4|0;x=t-32+8|0;y=t-32+12|0;z=t-32+16|0;A=t-32+20|0;B=t>>>0<o>>>0;C=c[j>>2]|0;while(1){if((C|0)<0){break b}if((C|0)==0){D=u;break}E=+g[v>>2];F=+g[w>>2];G=+g[x>>2];H=+g[y>>2];I=+g[z>>2];J=+g[A>>2];K=c[b+(C*12|0)>>2]|0;L=+g[a+(K*20|0)>>2];M=+g[a+(K*20|0)+4>>2];N=+g[a+(K*20|0)+8>>2];O=+g[a+(K*20|0)+12>>2];P=E*L+F*M+G*N-O;Q=H*L+I*M+J*N-O;if(P>0.0&Q>0.0){R=c[b+(C*12|0)+4>>2]|0;c[j>>2]=R;if(B){C=R;continue}else{s=12;break a}}if(P>0.0|Q>0.0){s=16;break}R=c[b+(C*12|0)+8>>2]|0;c[j>>2]=R;if(B){C=R}else{s=15;break a}}if((s|0)==16){s=0;A=t-32+24|0;z=c[A>>2]|0;O=P/(P-Q);do{if(O<0.0){S=0.0}else{if(!(O>1.0)){S=O;break}S=1.0}}while(0);O=E+(H-E)*S;N=F+(I-F)*S;M=G+(J-G)*S;g[v>>2]=O;g[w>>2]=N;g[x>>2]=M;c[A>>2]=K;y=P<0.0|0;c[j>>2]=c[b+(C*12|0)+4+((y^1)<<2)>>2];if(!B){s=20;break a}g[t>>2]=E;g[t+4>>2]=F;g[t+8>>2]=G;g[t+12>>2]=O;g[t+16>>2]=N;g[t+20>>2]=M;c[t+24>>2]=z;c[t+28>>2]=c[b+(C*12|0)+4+(y<<2)>>2];y=t+32|0;if(y>>>0<o>>>0){D=y}else{s=23;break a}}y=D-32|0;if(y>>>0<n>>>0){k=q;s=24;break a}else{t=D;u=y}}c[d+(q<<2)>>2]=-C;if(!p){g[e+(q*12|0)>>2]=+g[v>>2];g[e+(q*12|0)+4>>2]=+g[w>>2];g[e+(q*12|0)+8>>2]=+g[x>>2]}y=q+1|0;if((y|0)<(f|0)){q=y;r=u}else{k=y;s=24;break}}if((s|0)==12){ue[c[636260]&31](3,19808,(T=i,i=i+1|0,i=i+7&-8,c[T>>2]=0,T)|0);i=T;k=q;l=4064;m=0;i=h;return k|0}else if((s|0)==15){ue[c[636260]&31](3,19808,(T=i,i=i+1|0,i=i+7&-8,c[T>>2]=0,T)|0);i=T;k=q;l=4064;m=0;i=h;return k|0}else if((s|0)==20){ue[c[636260]&31](3,19808,(T=i,i=i+1|0,i=i+7&-8,c[T>>2]=0,T)|0);i=T;k=q;l=4064;m=0;i=h;return k|0}else if((s|0)==23){ue[c[636260]&31](3,19808,(T=i,i=i+1|0,i=i+7&-8,c[T>>2]=0,T)|0);i=T;k=q;l=4064;m=0;i=h;return k|0}else if((s|0)==24){l=4064;m=0;i=h;return k|0}return 0}function nr(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0;if((c[637704]|0)==0){e=0;return e|0}f=c[637753]|0;h=c[f+(a*24|0)>>2]|0;i=c[637747]|0;j=c[f+(a*24|0)+8>>2]|0;if((j|0)<=0){e=1;return e|0}k=c[f+(a*24|0)+12>>2]|0;a=c[637751]|0;f=c[637749]|0;l=c[637745]|0;m=+g[b>>2];n=+g[b+4>>2];o=+g[b+8>>2];p=+g[i+(h*20|0)+8>>2];q=+g[i+(h*20|0)+4>>2];r=+g[i+(h*20|0)>>2];s=-0.0-d;h=0;while(1){i=c[a+(k+h<<2)>>2]|0;b=(i|0)>-1?i:-i|0;t=i>>>31;i=c[f+(b<<3)+(t<<2)>>2]|0;u=c[f+(b<<3)+((t^1)<<2)>>2]|0;d=+g[l+(i*12|0)>>2];v=+g[l+(u*12|0)>>2]-d;w=+g[l+(i*12|0)+4>>2];x=+g[l+(u*12|0)+4>>2]-w;y=+g[l+(i*12|0)+8>>2];z=+g[l+(u*12|0)+8>>2]-y;u=h+1|0;if((o-y)*(v*q-x*r)+((m-d)*(x*p-z*q)+(n-w)*(z*r-v*p))<s){e=0;A=6;break}if((u|0)<(j|0)){h=u}else{e=1;A=6;break}}if((A|0)==6){return e|0}return 0}function or(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if((a|0)==0){return}else{b=a}while(1){a=b+16|0;d=c[a>>2]|0;e=b+12|0;f=c[e>>2]|0;g=b+8|0;h=c[g>>2]|0;if((f|0)==0){c[(c[637775]|0)+(c[b+4>>2]<<2)>>2]=h}else{c[f+8>>2]=h}h=c[g>>2]|0;if((h|0)!=0){c[h+12>>2]=c[e>>2]}h=c[637774]|0;if((h|0)!=0){c[h+12>>2]=b}c[e>>2]=0;c[g>>2]=c[637774];c[b+20>>2]=0;c[a>>2]=0;c[637774]=b;c[164938]=(c[164938]|0)+1;if((d|0)==0){break}else{b=d}}return}function pr(a,b,d){a=a|0;b=b|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,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.0,F=0,G=0.0,H=0.0,I=0.0,J=0,K=0.0,L=0.0,M=0.0,N=0,O=0.0,P=0.0,Q=0.0,R=0,S=0,T=0,U=0;e=i;i=i+512|0;f=e|0;if((c[637704]|0)==0){ue[c[636260]&31](3,17656,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=0;k=512;l=0;i=e;return j|0}m=f|0;c[f>>2]=1;n=a+4|0;o=b+4|0;p=a+8|0;q=b+8|0;r=f+508|0;s=f+4|0;f=0;t=m;a:while(1){u=s;v=t;b:while(1){w=v|0;x=c[w>>2]|0;c:do{if((x|0)<0){y=-x|0;z=c[(c[637775]|0)+(y<<2)>>2]|0;if((z|0)==0){break b}else{A=z}while(1){if((c[A>>2]|0)==(d|0)){B=v;break c}A=c[A+8>>2]|0;if((A|0)==0){break b}}}else{if((x|0)==0){B=v;break}z=c[637763]|0;C=c[z+(x*12|0)>>2]|0;D=c[637747]|0;E=+g[D+(C*20|0)>>2];F=E<0.0;G=+g[a>>2];H=+g[b>>2];I=+g[D+(C*20|0)+4>>2];J=I<0.0;K=+g[n>>2];L=+g[o>>2];M=+g[D+(C*20|0)+8>>2];N=M<0.0;O=+g[p>>2];P=+g[q>>2];Q=+g[D+(C*20|0)+12>>2];C=E*(F?G:H)+I*(J?K:L)+M*(N?O:P)-Q>=0.0|0;D=E*(F?H:G)+I*(J?L:K)+M*(N?P:O)-Q<0.0?C|2:C;if((D&1|0)==0){R=v}else{c[w>>2]=c[z+(x*12|0)+4>>2];R=u}if(!(R>>>0<r>>>0)){S=24;break a}if((D&2|0)==0){T=R}else{c[R>>2]=c[z+(x*12|0)+8>>2];T=R+4|0}if(T>>>0<r>>>0){B=T}else{S=28;break a}}}while(0);x=B-4|0;if(x>>>0<m>>>0){j=f;S=29;break a}else{u=B;v=x}}u=c[637774]|0;if((u|0)==0){S=10;break}x=u+8|0;w=c[x>>2]|0;c[637774]=w;if((w|0)!=0){c[w+12>>2]=0}c[164938]=(c[164938]|0)-1;c[u>>2]=d;c[u+4>>2]=y;c[u+20>>2]=0;c[u+16>>2]=f;if((f|0)!=0){c[f+20>>2]=u}c[u+12>>2]=0;c[x>>2]=c[(c[637775]|0)+(y<<2)>>2];x=c[637775]|0;w=c[x+(y<<2)>>2]|0;if((w|0)==0){U=x}else{c[w+12>>2]=u;U=c[637775]|0}c[U+(y<<2)>>2]=u;w=v-4|0;if(w>>>0<m>>>0){j=u;S=29;break}else{s=v;f=u;t=w}}if((S|0)==10){if((c[636484]|0)==0){j=f;k=512;l=0;i=e;return j|0}ue[c[636260]&31](4,40736,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=f;k=512;l=0;i=e;return j|0}else if((S|0)==24){ue[c[636260]&31](3,60408,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=f;k=512;l=0;i=e;return j|0}else if((S|0)==28){ue[c[636260]&31](3,60408,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;j=f;k=512;l=0;i=e;return j|0}else if((S|0)==29){k=512;l=0;i=e;return j|0}return 0}function qr(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.0,o=0.0,p=0.0,q=0.0,r=0.0;f=i;i=i+112|0;h=f|0;j=f+40|0;k=f+80|0;l=f+96|0;Zx(h|0,0,28)|0;g[h+12>>2]=-15.0;g[h+16>>2]=-15.0;g[h+20>>2]=-24.0;g[h+24>>2]=-15.0;g[h+28>>2]=-15.0;g[h+32>>2]=-24.0;Zx(j|0,0,28)|0;g[j+12>>2]=15.0;g[j+16>>2]=15.0;g[j+20>>2]=32.0;g[j+24>>2]=15.0;g[j+28>>2]=15.0;g[j+32>>2]=8.0;if((e|0)==4){m=2}else if((e|0)==2){m=1}else{ue[c[636260]&31](4,49632,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;m=2}n=+g[h+(m*12|0)>>2];o=+g[h+(m*12|0)+4>>2];p=+g[h+(m*12|0)+8>>2];q=+g[j+(m*12|0)+4>>2];r=+g[j+(m*12|0)+8>>2];h=k|0;g[h>>2]=+g[a>>2]- +g[j+(m*12|0)>>2];g[k+4>>2]=+g[a+4>>2]-q;g[k+8>>2]=+g[a+8>>2]-r;a=l|0;g[a>>2]=+g[b>>2]-n;g[l+4>>2]=+g[b+4>>2]-o;g[l+8>>2]=+g[b+8>>2]-p;b=pr(h,a,d)|0;i=f;return b|0}function rr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=pr(a,b,-1)|0;b=(f|0)==0;if(b){g=0;return g|0}else{h=f;i=0}do{c[d+(i<<2)>>2]=c[h+4>>2];i=i+1|0;if((i|0)>=(e|0)){break}h=c[h+16>>2]|0;}while((h|0)!=0);if(b){g=i;return g|0}else{j=f}while(1){f=j+16|0;b=c[f>>2]|0;h=j+12|0;e=c[h>>2]|0;d=j+8|0;a=c[d>>2]|0;if((e|0)==0){c[(c[637775]|0)+(c[j+4>>2]<<2)>>2]=a}else{c[e+8>>2]=a}a=c[d>>2]|0;if((a|0)!=0){c[a+12>>2]=c[h>>2]}a=c[637774]|0;if((a|0)!=0){c[a+12>>2]=j}c[h>>2]=0;c[d>>2]=c[637774];c[j+20>>2]=0;c[f>>2]=0;c[637774]=j;c[164938]=(c[164938]|0)+1;if((b|0)==0){g=i;break}else{j=b}}return g|0}function sr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;if((b|0)==0){e=0;i=d;return e|0}if((a|0)>0&(c[637756]|0)>(a|0)){f=c[637759]|0;c[b+12>>2]=c[f+(a*28|0)+12>>2];c[b>>2]=c[f+(a*28|0)>>2];c[b+4>>2]=c[f+(a*28|0)+4>>2];c[b+8>>2]=c[f+(a*28|0)+8>>2];f=c[637757]|0;g[b+16>>2]=+g[f+(a*48|0)+12>>2];g[b+20>>2]=+g[f+(a*48|0)+16>>2];g[b+24>>2]=+g[f+(a*48|0)+20>>2];g[b+28>>2]=+g[f+(a*48|0)+24>>2];g[b+32>>2]=+g[f+(a*48|0)+28>>2];g[b+36>>2]=+g[f+(a*48|0)+32>>2];g[b+40>>2]=+g[f+(a*48|0)+36>>2];g[b+44>>2]=+g[f+(a*48|0)+40>>2];g[b+48>>2]=+g[f+(a*48|0)+44>>2];e=52;i=d;return e|0}else{ue[c[636260]&31](3,58880,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;e=0;i=d;return e|0}return 0}function tr(a){a=a|0;var b=0;if((c[637704]|0)==0){b=0;return b|0}b=(c[637747]|0)+(a*20|0)|0;return b|0}function ur(b){b=b|0;var d=0,e=0,f=0,j=0,k=0.0,l=0;d=i;iv(47456,(e=i,i=i+8|0,c[e>>2]=b,e)|0);i=e;iv(40672,(e=i,i=i+8|0,h[e>>3]=+g[b+64>>2],e)|0);i=e;iv(35848,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=0;do{j=a[b+68+(f<<3)|0]|0;if((j|0)==2){k=+g[b+68+(f<<3)+4>>2];iv(26312,(e=i,i=i+16|0,c[e>>2]=f,h[e+8>>3]=k,e)|0);i=e}else if((j|0)==3){l=c[b+68+(f<<3)+4>>2]|0;iv(22888,(e=i,i=i+16|0,c[e>>2]=f,c[e+8>>2]=l,e)|0);i=e}else if((j|0)==1){j=c[b+68+(f<<3)+4>>2]|0;iv(30624,(e=i,i=i+16|0,c[e>>2]=f,c[e+8>>2]=j,e)|0);i=e}f=f+1|0;}while((f|0)<80);iv(19800,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;i=d;return}function vr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;if(!(+bv(17632)!=0.0)){i=d;return}if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(e=i,i=i+8|0,c[e>>2]=b,e)|0);i=e;i=d;return}f=2545656+(b<<2)|0;g=c[f>>2]|0;if((g|0)==0){ue[c[636260]&31](4,57640,(e=i,i=i+8|0,c[e>>2]=b,e)|0);i=e;i=d;return}else{h=0}do{if((a[g+68+(h<<3)|0]|0)==3){nv(c[g+68+(h<<3)+4>>2]|0)}h=h+1|0;}while((h|0)<80);nv(c[f>>2]|0);c[f>>2]=0;i=d;return}function wr(b,d){b=b|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,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=i;i=i+1064|0;f=e|0;h=f|0;hw(60392);j=bw(b)|0;if((j|0)==0){ue[c[636260]&31](3,58856,(k=i,i=i+8|0,c[k>>2]=b,k)|0);i=k;l=0;m=1060;n=0;i=e;return l|0}o=kv(716)|0;p=o;by(o|0,b|0)|0;a:do{if((Yv(j,f)|0)!=0){b=f+1032|0;b:do{if((d|0)<0){if((Tx(h,57096)|0)!=0){q=72;break}if((_v(j,3,0,f)|0)==0){q=11;break}if((Zv(j,55688)|0)==0){q=17}else{q=23}}else{c:while(1){if((Tx(h,57096)|0)!=0){q=72;break b}if((_v(j,3,0,f)|0)==0){q=11;break b}if((Zv(j,55688)|0)==0){q=17;break b}if((c[b>>2]|0)==(d|0)){q=23;break b}else{r=1}while(1){if(($v(j,f)|0)==0){break c}if((Tx(h,55688)|0)==0){s=r+1|0}else{s=(((Tx(h,54688)|0)==0)<<31>>31)+r|0}if((s|0)==0){break}else{r=s}}if((Yv(j,f)|0)==0){break a}}cw(j);t=0;do{if((a[p+68+(t<<3)|0]|0)==3){nv(c[p+68+(t<<3)+4>>2]|0)}t=t+1|0;}while((t|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}}while(0);if((q|0)==11){cw(j);t=0;do{if((a[p+68+(t<<3)|0]|0)==3){nv(c[p+68+(t<<3)+4>>2]|0)}t=t+1|0;}while((t|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==17){cw(j);t=0;do{if((a[p+68+(t<<3)|0]|0)==3){nv(c[p+68+(t<<3)+4>>2]|0)}t=t+1|0;}while((t|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==23){g[o+64>>2]=+((c[b>>2]|0)>>>0>>>0);d:do{if(($v(j,f)|0)!=0){t=f+1024|0;u=f+1028|0;v=o+68|0;w=f+1036|0;e:while(1){if((Tx(h,54688)|0)==0){q=82;break}if((c[t>>2]|0)!=3){q=28;break}if((c[u>>2]&4096|0)==0){q=28;break}x=c[b>>2]|0;if(x>>>0>80>>>0){q=34;break}y=v+(x<<3)|0;if((a[y]|0)!=0){q=40;break}if(($v(j,f)|0)==0){q=46;break}z=c[t>>2]|0;do{if((z|0)==3){if((c[u>>2]&2048|0)==0){c[v+(x<<3)+4>>2]=c[b>>2];a[y]=1;break}else{g[v+(x<<3)+4>>2]=+g[w>>2];a[y]=2;break}}else if((z|0)==1){sw(h);A=jv((Wx(h|0)|0)+1|0)|0;c[v+(x<<3)+4>>2]=A;by(A|0,h|0)|0;a[y]=3}else{q=57;break e}}while(0);if(($v(j,f)|0)==0){break d}}if((q|0)==28){rv(j,53632,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;cw(j);v=0;do{if((a[p+68+(v<<3)|0]|0)==3){nv(c[p+68+(v<<3)+4>>2]|0)}v=v+1|0;}while((v|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==34){rv(j,52552,(k=i,i=i+8|0,c[k>>2]=80,k)|0);i=k;cw(j);v=0;do{if((a[p+68+(v<<3)|0]|0)==3){nv(c[p+68+(v<<3)+4>>2]|0)}v=v+1|0;}while((v|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==40){rv(j,51600,(k=i,i=i+8|0,c[k>>2]=x,k)|0);i=k;cw(j);v=0;do{if((a[p+68+(v<<3)|0]|0)==3){nv(c[p+68+(v<<3)+4>>2]|0)}v=v+1|0;}while((v|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==46){cw(j);v=0;do{if((a[p+68+(v<<3)|0]|0)==3){nv(c[p+68+(v<<3)+4>>2]|0)}v=v+1|0;}while((v|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==57){rv(j,50656,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;cw(j);v=0;do{if((a[p+68+(v<<3)|0]|0)==3){nv(c[p+68+(v<<3)+4>>2]|0)}v=v+1|0;}while((v|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}else if((q|0)==82){cw(j);l=p;m=1060;n=0;i=e;return l|0}}}while(0);cw(j);l=p;m=1060;n=0;i=e;return l|0}else if((q|0)==72){rv(j,49888,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;cw(j);b=0;do{if((a[p+68+(b<<3)|0]|0)==3){nv(c[p+68+(b<<3)+4>>2]|0)}b=b+1|0;}while((b|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}}}while(0);cw(j);j=0;do{if((a[p+68+(j<<3)|0]|0)==3){nv(c[p+68+(j<<3)+4>>2]|0)}j=j+1|0;}while((j|0)<80);nv(o);l=0;m=1060;n=0;i=e;return l|0}function xr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;f=1;while(1){j=2545656+(f<<2)|0;k=f+1|0;if((c[j>>2]|0)==0){break}if((k|0)<65){f=k}else{l=0;m=48;break}}if((m|0)==48){i=e;return l|0}if((f|0)>64){l=0;i=e;return l|0}m=(d|0)!=0;a:do{if(!m){b:do{if(b<0.0){d=1;while(1){k=c[2545656+(d<<2)>>2]|0;if((k|0)!=0){if((Tx(k|0,a)|0)==0){n=d;break b}}d=d+1|0;if((d|0)>=65){break a}}}else{d=1;while(1){k=c[2545656+(d<<2)>>2]|0;do{if((k|0)!=0){if((Tx(k|0,a)|0)!=0){break}if(+S(+(+g[k+64>>2]-b))<.01){n=d;break b}}}while(0);d=d+1|0;if((d|0)>=65){break a}}}}while(0);if((n|0)==0){break}ue[c[636260]&31](1,49200,(o=i,i=i+16|0,h[o>>3]=b,c[o+8>>2]=a,o)|0);i=o;l=n;i=e;return l|0}}while(0);n=~~(b+.5);d=wr(a,n)|0;if((d|0)!=0){c[j>>2]=d;ue[c[636260]&31](1,48352,(o=i,i=i+16|0,c[o>>2]=n,c[o+8>>2]=a,o)|0);i=o;l=f;i=e;return l|0}ue[c[636260]&31](2,47096,(o=i,i=i+16|0,c[o>>2]=n,c[o+8>>2]=a,o)|0);i=o;c:do{if(!m){d:do{if(b<0.0){d=1;while(1){k=c[2545656+(d<<2)>>2]|0;if((k|0)!=0){if((Tx(k|0,46088)|0)==0){p=d;break d}}d=d+1|0;if((d|0)>=65){break c}}}else{d=1;while(1){k=c[2545656+(d<<2)>>2]|0;do{if((k|0)!=0){if((Tx(k|0,46088)|0)!=0){break}if(+S(+(+g[k+64>>2]-b))<.01){p=d;break d}}}while(0);d=d+1|0;if((d|0)>=65){break c}}}}while(0);if((p|0)==0){break}ue[c[636260]&31](1,45480,(o=i,i=i+16|0,c[o>>2]=n,c[o+8>>2]=a,o)|0);i=o;l=p;i=e;return l|0}}while(0);p=wr(46088,n)|0;if((p|0)!=0){c[j>>2]=p;ue[c[636260]&31](1,44608,(o=i,i=i+16|0,c[o>>2]=n,c[o+8>>2]=a,o)|0);i=o;l=f;i=e;return l|0}e:do{if(!m){n=1;while(1){q=c[2545656+(n<<2)>>2]|0;if((q|0)!=0){if((Tx(q|0,a)|0)==0){break}}p=n+1|0;if((p|0)<65){n=p}else{break e}}if((n|0)==0){break}ue[c[636260]&31](1,49200,(o=i,i=i+16|0,h[o>>3]=+g[q+64>>2],c[o+8>>2]=a,o)|0);i=o;l=n;i=e;return l|0}}while(0);q=wr(a,-1)|0;if((q|0)!=0){c[j>>2]=q;ue[c[636260]&31](1,44e3,(o=i,i=i+16|0,h[o>>3]=+g[q+64>>2],c[o+8>>2]=a,o)|0);i=o;l=f;i=e;return l|0}f:do{if(!m){q=1;while(1){r=c[2545656+(q<<2)>>2]|0;if((r|0)!=0){if((Tx(r|0,46088)|0)==0){break}}p=q+1|0;if((p|0)<65){q=p}else{break f}}if((q|0)==0){break}ue[c[636260]&31](1,43344,(o=i,i=i+16|0,h[o>>3]=+g[r+64>>2],c[o+8>>2]=a,o)|0);i=o;l=q;i=e;return l|0}}while(0);r=wr(46088,-1)|0;if((r|0)==0){ue[c[636260]&31](2,42176,(o=i,i=i+8|0,c[o>>2]=a,o)|0);i=o;l=0;i=e;return l|0}else{c[j>>2]=r;ue[c[636260]&31](1,42800,(o=i,i=i+16|0,h[o>>3]=+g[r+64>>2],c[o+8>>2]=a,o)|0);i=o;l=f;i=e;return l|0}return 0}function yr(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0;e=xr(46088,d,0)|0;f=xr(b,d,~~+bv(17632))|0;if((e|0)==0|(f|0)==0){return f|0}b=c[2545656+(f<<2)>>2]|0;h=c[2545656+(e<<2)>>2]|0;e=0;do{i=b+68+(e<<3)|0;do{if((a[i]|0)==0){j=a[h+68+(e<<3)|0]|0;if((j<<24>>24|0)==2){a[i]=2;g[b+68+(e<<3)+4>>2]=+g[h+68+(e<<3)+4>>2];break}else if((j<<24>>24|0)==1){a[i]=1;c[b+68+(e<<3)+4>>2]=c[h+68+(e<<3)+4>>2];break}else if((j<<24>>24|0)==3){a[i]=3;j=h+68+(e<<3)+4|0;k=jv((Wx(c[j>>2]|0)|0)+1|0)|0;c[b+68+(e<<3)+4>>2]=k;by(k|0,c[j>>2]|0)|0;break}else{break}}}while(0);e=e+1|0;}while((e|0)<80);return f|0}function zr(b,d,e){b=b|0;d=d|0;e=+e;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;f=i;do{if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(h=i,i=i+8|0,c[h>>2]=b,h)|0);i=h;j=0}else{k=c[2545656+(b<<2)>>2]|0;if((k|0)!=0){j=k;break}ue[c[636260]&31](4,57640,(h=i,i=i+8|0,c[h>>2]=b,h)|0);i=h;j=0}}while(0);if((d-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;l=0;i=f;return l|0}b=c[2545656+(d<<2)>>2]|0;if((b|0)==0){ue[c[636260]&31](4,57640,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;l=0;i=f;return l|0}if((j|0)==0){l=0;i=f;return l|0}else{m=1}while(1){n=2545656+(m<<2)|0;h=m+1|0;if((c[n>>2]|0)==0){break}if((h|0)<65){m=h}else{l=0;o=20;break}}if((o|0)==20){i=f;return l|0}if((m|0)>64){l=0;i=f;return l|0}o=kv(716)|0;g[o+64>>2]=e;by(o|0,j|0)|0;c[n>>2]=o;p=+g[j+64>>2];q=(e-p)/(+g[b+64>>2]-p);n=o+68|0;o=0;while(1){h=a[j+68+(o<<3)|0]|0;do{if((h<<24>>24|0)==3){a[n+(o<<3)|0]=3;d=j+68+(o<<3)+4|0;k=jv((Wx(c[d>>2]|0)|0)+1|0)|0;c[n+(o<<3)+4>>2]=k;by(k|0,c[d>>2]|0)|0}else if((h<<24>>24|0)==2){if((a[b+68+(o<<3)|0]|0)!=2){break}a[n+(o<<3)|0]=2;p=+g[j+68+(o<<3)+4>>2];g[n+(o<<3)+4>>2]=p+q*(+g[b+68+(o<<3)+4>>2]-p)}else if((h<<24>>24|0)==1){a[n+(o<<3)|0]=1;c[n+(o<<3)+4>>2]=c[j+68+(o<<3)+4>>2]}}while(0);h=o+1|0;if((h|0)<80){o=h}else{l=m;break}}i=f;return l|0}function Ar(a,b){a=a|0;b=+b;var d=0,e=0.0,f=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;do{if(b<1.0){e=1.0}else{if(b>5.0){e=5.0;break}f=b;if(b==1.0|b==4.0|b==5.0){e=b;break}a:do{if(b<0.0){j=1;do{k=c[2545656+(j<<2)>>2]|0;if((k|0)!=0){if((Tx(k|0,a)|0)==0){l=j;m=13;break a}}j=j+1|0;}while((j|0)<65)}else{j=1;do{k=c[2545656+(j<<2)>>2]|0;do{if((k|0)!=0){if((Tx(k|0,a)|0)!=0){break}if(+S(+(+g[k+64>>2]-b))<.01){l=j;m=13;break a}}}while(0);j=j+1|0;}while((j|0)<65)}}while(0);do{if((m|0)==13){if((l|0)==0){break}ue[c[636260]&31](1,49200,(j=i,i=i+16|0,h[j>>3]=f,c[j+8>>2]=a,j)|0);i=j;n=l;i=d;return n|0}}while(0);do{if(b<4.0){j=yr(a,1.0)|0;if((j|0)==0){n=0;i=d;return n|0}k=yr(a,4.0)|0;if((k|0)==0){n=j}else{o=k;p=j;break}i=d;return n|0}else{j=yr(a,4.0)|0;if((j|0)==0){n=0;i=d;return n|0}k=yr(a,5.0)|0;if((k|0)==0){n=j}else{o=k;p=j;break}i=d;return n|0}}while(0);j=zr(p,o,b)|0;if((j|0)==0){n=0;i=d;return n|0}ur(c[2545656+(j<<2)>>2]|0);n=j;i=d;return n|0}}while(0);n=yr(a,e)|0;i=d;return n|0}function Br(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,j=0;e=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;h=0.0;i=e;return+h}j=c[2545656+(b<<2)>>2]|0;if((j|0)==0){ue[c[636260]&31](4,57640,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;h=0.0;i=e;return+h}if(d>>>0>79>>>0){ue[c[636260]&31](3,41656,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;h=0.0;i=e;return+h}b=a[j+68+(d<<3)|0]|0;if((b<<24>>24|0)==2){h=+g[j+68+(d<<3)+4>>2];i=e;return+h}else if((b<<24>>24|0)==0){ue[c[636260]&31](3,41240,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;h=0.0;i=e;return+h}else if((b<<24>>24|0)==1){h=+(c[j+68+(d<<3)+4>>2]|0);i=e;return+h}else{ue[c[636260]&31](3,40408,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;h=0.0;i=e;return+h}return 0.0}function Cr(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var j=0,k=0,l=0.0,m=0,n=0.0;j=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(k=i,i=i+8|0,c[k>>2]=b,k)|0);i=k;l=0.0;i=j;return+l}m=c[2545656+(b<<2)>>2]|0;if((m|0)==0){ue[c[636260]&31](4,57640,(k=i,i=i+8|0,c[k>>2]=b,k)|0);i=k;l=0.0;i=j;return+l}if(e>f){ue[c[636260]&31](3,39776,(k=i,i=i+24|0,c[k>>2]=d,h[k+8>>3]=e,h[k+16>>3]=f,k)|0);i=k;l=0.0;i=j;return+l}do{if(d>>>0>79>>>0){ue[c[636260]&31](3,41656,(k=i,i=i+8|0,c[k>>2]=d,k)|0);i=k;n=0.0}else{b=a[m+68+(d<<3)|0]|0;if((b<<24>>24|0)==1){n=+(c[m+68+(d<<3)+4>>2]|0);break}else if((b<<24>>24|0)==2){n=+g[m+68+(d<<3)+4>>2];break}else if((b<<24>>24|0)==0){ue[c[636260]&31](3,41240,(k=i,i=i+8|0,c[k>>2]=d,k)|0);i=k;n=0.0;break}else{ue[c[636260]&31](3,40408,(k=i,i=i+8|0,c[k>>2]=d,k)|0);i=k;n=0.0;break}}}while(0);if(n<e){l=e;i=j;return+l}l=n>f?f:n;i=j;return+l}function Dr(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,j=0;e=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;h=0;i=e;return h|0}j=c[2545656+(b<<2)>>2]|0;if((j|0)==0){ue[c[636260]&31](4,57640,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;h=0;i=e;return h|0}if(d>>>0>79>>>0){ue[c[636260]&31](3,41656,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;h=0;i=e;return h|0}b=a[j+68+(d<<3)|0]|0;if((b<<24>>24|0)==1){h=c[j+68+(d<<3)+4>>2]|0;i=e;return h|0}else if((b<<24>>24|0)==2){h=~~+g[j+68+(d<<3)+4>>2];i=e;return h|0}else if((b<<24>>24|0)==0){ue[c[636260]&31](3,41240,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;h=0;i=e;return h|0}else{ue[c[636260]&31](3,39416,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f;h=0;i=e;return h|0}return 0}function Er(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,j=0,k=0,l=0,m=0;h=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;k=0;i=h;return k|0}l=c[2545656+(b<<2)>>2]|0;if((l|0)==0){ue[c[636260]&31](4,57640,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j;k=0;i=h;return k|0}if((e|0)>(f|0)){ue[c[636260]&31](3,38896,(j=i,i=i+24|0,c[j>>2]=d,c[j+8>>2]=e,c[j+16>>2]=f,j)|0);i=j;k=0;i=h;return k|0}do{if(d>>>0>79>>>0){ue[c[636260]&31](3,41656,(j=i,i=i+8|0,c[j>>2]=d,j)|0);i=j;m=0}else{b=a[l+68+(d<<3)|0]|0;if((b<<24>>24|0)==1){m=c[l+68+(d<<3)+4>>2]|0;break}else if((b<<24>>24|0)==2){m=~~+g[l+68+(d<<3)+4>>2];break}else if((b<<24>>24|0)==0){ue[c[636260]&31](3,41240,(j=i,i=i+8|0,c[j>>2]=d,j)|0);i=j;m=0;break}else{ue[c[636260]&31](3,39416,(j=i,i=i+8|0,c[j>>2]=d,j)|0);i=j;m=0;break}}}while(0);if((m|0)<(e|0)){k=e;i=h;return k|0}k=(m|0)>(f|0)?f:m;i=h;return k|0}function Fr(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;g=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,49496,(h=i,i=i+8|0,c[h>>2]=b,h)|0);i=h;i=g;return}j=c[2545656+(b<<2)>>2]|0;if((j|0)==0){ue[c[636260]&31](4,57640,(h=i,i=i+8|0,c[h>>2]=b,h)|0);i=h;i=g;return}if(d>>>0>79>>>0){ue[c[636260]&31](3,41656,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;i=g;return}b=a[j+68+(d<<3)|0]|0;if((b<<24>>24|0)==3){k=f-1|0;ay(e|0,c[j+68+(d<<3)+4>>2]|0,k|0)|0;a[e+k|0]=0;i=g;return}else if((b<<24>>24|0)==0){ue[c[636260]&31](3,41240,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;i=g;return}else{ue[c[636260]&31](3,38408,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;i=g;return}}function Gr(){var b=0,d=0,e=0,f=0;b=1;do{d=2545656+(b<<2)|0;e=c[d>>2]|0;if((e|0)!=0){f=0;do{if((a[e+68+(f<<3)|0]|0)==3){nv(c[e+68+(f<<3)+4>>2]|0)}f=f+1|0;}while((f|0)<80);nv(c[d>>2]|0);c[d>>2]=0}b=b+1|0;}while((b|0)<65);return}function Hr(){var a=0,b=0,d=0,e=0,f=0;a=c[414936]|0;if((a|0)!=0){nv(a)}a=~~+ev(47424,40648);b=mv(a*276|0)|0;c[414936]=b;c[b+268>>2]=0;b=c[414936]|0;c[b+272>>2]=b+276;b=a-1|0;if((b|0)>1){d=1;while(1){e=c[414936]|0;c[e+(d*276|0)+268>>2]=e+((d-1|0)*276|0);e=d+1|0;f=c[414936]|0;c[f+(d*276|0)+272>>2]=f+(e*276|0);if((e|0)<(b|0)){d=e}else{break}}}d=c[414936]|0;c[d+(b*276|0)+268>>2]=d+((a-2|0)*276|0);c[(c[414936]|0)+(b*276|0)+272>>2]=0;c[210616]=c[414936];return}function Ir(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}f=c[2545392+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}e=f+300|0;a=c[e>>2]|0;while(1){if((a|0)==0){g=17;break}h=a+272|0;j=c[h>>2]|0;if((c[a>>2]|0)==(b|0)){break}else{a=j}}if((g|0)==17){i=d;return}g=a+268|0;b=c[g>>2]|0;if((j|0)==0){c[f+304>>2]=b}else{c[j+268>>2]=b}b=c[g>>2]|0;j=c[h>>2]|0;if((b|0)==0){c[e>>2]=j}else{c[b+272>>2]=j}j=c[210616]|0;if((j|0)!=0){c[j+268>>2]=a}c[g>>2]=0;c[h>>2]=c[210616];c[210616]=a;a=f+308|0;c[a>>2]=(c[a>>2]|0)-1;i=d;return}function Jr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0;e=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;i=e;return}h=c[2545392+(a<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,57544,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;i=e;return}a=c[210616]|0;if((a|0)==0){ue[c[636260]&31](3,35808,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=e;return}f=a+272|0;j=c[f>>2]|0;c[210616]=j;if((j|0)!=0){c[j+268>>2]=0}j=h+296|0;k=c[j>>2]|0;l=k>>>0>8191>>>0?1:k+1|0;c[j>>2]=l;c[a>>2]=l;g[a+4>>2]=+yp();c[a+8>>2]=b;ay(a+12|0,d|0,256)|0;c[f>>2]=0;f=h+304|0;d=c[f>>2]|0;if((d|0)==0){c[f>>2]=a;c[h+300>>2]=a;c[a+268>>2]=0}else{c[d+272>>2]=a;c[a+268>>2]=c[f>>2];c[f>>2]=a}a=h+308|0;c[a>>2]=(c[a>>2]|0)+1;i=e;return}function Kr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}h=c[2545392+(a<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}e=c[h+300>>2]|0;if((e|0)==0){f=0;i=d;return f|0}h=b|0;c[h>>2]=c[e>>2];g[b+4>>2]=+g[e+4>>2];c[b+8>>2]=c[e+8>>2];rn(b+12|0,e+12|0,256);f=c[h>>2]|0;i=d;return f|0}function Lr(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;e=0;i=b;return e|0}f=c[2545392+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,57544,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;e=0;i=b;return e|0}else{e=c[f+308>>2]|0;i=b;return e|0}return 0}function Mr(b){b=b|0;var 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;c=a[b]|0;if(c<<24>>24==0){return}else{d=b;e=c}a:while(1){do{if(e<<24>>24==0){f=d}else{c=d;g=e;b:while(1){if((g-97&255)>>>0<26>>>0|(g-65&255)>>>0<26>>>0|(g-48&255)>>>0<10>>>0){h=c;i=g;break}switch(g<<24>>24){case 95:case 93:case 91:case 63:case 61:case 58:case 47:case 46:case 45:case 44:case 43:case 41:case 40:case 39:{h=c;i=g;break b;break};default:{}}j=c+1|0;k=a[j]|0;if(k<<24>>24==0){h=j;i=0;break}else{c=j;g=k}}if(!(h>>>0>d>>>0)){f=h;break}if(d>>>0<=b>>>0|i<<24>>24==0){l=d}else{a[d]=32;l=d+1|0}if(!(h>>>0>l>>>0)){f=h;break}_x(l|0,h|0,(Wx(h|0)|0)+1|0)|0;f=h}}while(0);g=a[f]|0;if(g<<24>>24==0){m=15;break}else{n=f;o=g}while(1){if(!((o-97&255)>>>0<26>>>0|(o-65&255)>>>0<26>>>0|(o-48&255)>>>0<10>>>0)){switch(o<<24>>24){case 95:case 93:case 91:case 63:case 61:case 58:case 47:case 46:case 45:case 44:case 43:case 41:case 40:case 39:{break};case 0:{m=15;break a;break};default:{d=n;e=o;continue a}}}g=n+1|0;c=a[g]|0;if(c<<24>>24==0){m=15;break a}else{n=g;o=c}}}if((m|0)==15){return}}function Nr(b,c,d){b=b|0;c=c|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;if((b|0)==0|(c|0)==0){e=-1;return e|0}f=Wx(b|0)|0;g=f-(Wx(c|0)|0)|0;if((g|0)<0){e=-1;return e|0}if((d|0)==0){d=b;f=0;a:while(1){if((a[c]|0)==0){e=f;h=16;break}else{i=0;j=c}while(1){k=wc(a[d+i|0]|0)|0;if((k|0)!=(wc(a[j]|0)|0)){break}k=i+1|0;l=c+k|0;if((a[l]|0)==0){e=f;h=16;break a}else{i=k;j=l}}if((a[j]|0)==0){e=f;h=16;break}if((f|0)>=(g|0)){e=-1;h=16;break}d=d+1|0;f=f+1|0}if((h|0)==16){return e|0}}else{f=a[c]|0;d=b;b=0;b:while(1){if(f<<24>>24==0){e=b;h=16;break}else{m=0;n=c;o=f}while(1){if(!((a[d+m|0]|0)==o<<24>>24)){break}j=m+1|0;i=c+j|0;l=a[i]|0;if(l<<24>>24==0){e=b;h=16;break b}else{m=j;n=i;o=l}}if((a[n]|0)==0){e=b;h=16;break}if((b|0)<(g|0)){d=d+1|0;b=b+1|0}else{e=-1;h=16;break}}if((h|0)==16){return e|0}}return 0}function Or(b,c,d){b=b|0;c=c|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;e=Wx(b|0)|0;f=e-(Wx(c|0)|0)|0;if((f|0)<0){g=0;return g|0}e=(d|0)==0;d=b;b=0;a:while(1){if((b|0)==0){h=d}else{i=d;b:while(1){switch(a[i]|0){case 32:case 33:case 44:case 46:{break b;break};case 0:{g=0;j=17;break a;break};default:{}}i=i+1|0}h=i+1|0}k=a[c]|0;c:do{if(k<<24>>24==0){l=0;j=15}else{d:do{if(e){m=0;n=c;while(1){o=wc(a[h+m|0]|0)|0;if((o|0)!=(wc(a[n]|0)|0)){break}o=m+1|0;p=c+o|0;if((a[p]|0)==0){l=o;j=15;break c}else{m=o;n=p}}q=m;r=a[n]|0}else{p=0;o=k;while(1){if(!((a[h+p|0]|0)==o<<24>>24)){q=p;r=o;break d}s=p+1|0;t=a[c+s|0]|0;if(t<<24>>24==0){l=s;j=15;break c}else{p=s;o=t}}}}while(0);if(r<<24>>24==0){l=q;j=15}}}while(0);if((j|0)==15){j=0;switch(a[h+l|0]|0){case 0:case 32:case 46:case 44:case 33:{g=h;j=17;break a;break};default:{}}}if((b|0)<(f|0)){d=h+1|0;b=b+1|0}else{g=0;j=17;break}}if((j|0)==17){return g|0}return 0}function Pr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=Or(a,b,0)|0;if((d|0)==0){return}else{e=d}do{d=Or(a,c,0)|0;a:do{if((d|0)==0){f=6}else{g=d;while(1){if(!(g>>>0>e>>>0)){if(e>>>0<(g+(Wx(c|0)|0)|0)>>>0){break a}}h=Or(g+1|0,c,0)|0;if((h|0)==0){f=6;break}else{g=h}}}}while(0);if((f|0)==6){f=0;d=e+(Wx(c|0)|0)|0;g=e+(Wx(b|0)|0)|0;_x(d|0,g|0,(Wx(g|0)|0)+1|0)|0;Vx(e|0,c|0,Wx(c|0)|0)|0}e=Or(e+(Wx(c|0)|0)|0,b,0)|0;}while((e|0)!=0);return}function Qr(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,X=0,Y=0,Z=0,_=0.0,$=0,aa=0;d=i;i=i+1192|0;e=d|0;f=d+128|0;h=f|0;j=f+1024|0;k=f+1032|0;l=f+1036|0;m=0;n=0;o=0;p=0;q=0;a:while(1){r=(m|0)==0;if(r|(n|0)==0){s=o}else{s=mv(n)|0}hw(17600);t=bw(b)|0;if((t|0)==0){u=6;break}else{v=q;w=p;x=0;y=0;z=s;A=0;B=0;C=n}b:while(1){D=A;E=B;while(1){while(1){if((Yv(t,f)|0)==0){break b}F=c[j>>2]|0;if((F|0)==5){break}else if((F|0)==3){u=9;break}}if((u|0)==9){u=0;F=c[k>>2]|0;c[e+(E<<2)>>2]=F;if((E|0)>30){u=10;break a}if((Zv(t,57048)|0)==0){u=13;break a}else{D=F|D;E=E+1|0;continue}}if((Tx(h,55680)|0)!=0){break}F=E-1|0;if((E|0)<1){u=16;break a}D=D&~c[e+(F<<2)>>2];E=F}if((Tx(h,53624)|0)!=0){u=44;break a}F=C+16|0;do{if(r|(z|0)==0){G=w;H=x;I=y;J=z}else{K=z;L=z+16|0;c[z>>2]=D;c[z+8>>2]=0;c[z+12>>2]=0;if((x|0)==0){G=K;H=K;I=K;J=L;break}c[x+12>>2]=K;G=K;H=K;I=y;J=L}}while(0);L=G+4|0;K=G+8|0;M=0;N=v;O=J;P=0;Q=F;while(1){if((Zv(t,52544)|0)==0){u=25;break a}if((_v(t,1,0,f)|0)==0){u=25;break a}sw(h);if((a[h]|0)==0){u=27;break a}R=(Wx(h|0)|0)+16&-4;S=R+Q|0;do{if(r|(O|0)==0){T=M;U=N;V=O}else{W=O;X=O+12|0;c[O>>2]=X;Y=O+R|0;by(X|0,h|0)|0;if((M|0)==0){c[K>>2]=W;T=W;U=W;V=Y;break}else{c[M+8>>2]=W;T=W;U=W;V=Y;break}}}while(0);Z=P+1|0;if((Zv(t,50648)|0)==0){u=35;break a}if((_v(t,3,0,f)|0)==0){u=35;break a}if((Zv(t,49880)|0)==0){u=35;break a}if(!(r|(V|0)==0)){_=+g[l>>2];g[U+4>>2]=_;g[L>>2]=_+ +g[L>>2]}if((Av(t,49192)|0)!=0){break}if((Zv(t,50648)|0)==0){u=40;break a}else{M=T;N=U;O=V;P=Z;Q=S}}if((Z|0)<2){u=43;break a}else{v=U;w=G;x=H;y=I;z=V;A=D;B=E;C=S}}cw(t);r=m+1|0;if((E|0)>0){u=46;break}if((r|0)<2){m=r;n=C;o=z;p=w;q=v}else{u=47;break}}if((u|0)==6){ue[c[636260]&31](3,60360,($=i,i=i+8|0,c[$>>2]=b,$)|0);i=$;aa=0}else if((u|0)==10){rv(t,58808,($=i,i=i+1|0,i=i+7&-8,c[$>>2]=0,$)|0);i=$;cw(t);aa=0}else if((u|0)==13){cw(t);aa=0}else if((u|0)==16){rv(t,54672,($=i,i=i+1|0,i=i+7&-8,c[$>>2]=0,$)|0);i=$;cw(t);aa=0}else if((u|0)==25){cw(t);aa=0}else if((u|0)==27){rv(t,51584,($=i,i=i+1|0,i=i+7&-8,c[$>>2]=0,$)|0);i=$;cw(t);aa=0}else if((u|0)==35){cw(t);aa=0}else if((u|0)==40){cw(t);aa=0}else if((u|0)==43){rv(t,48312,($=i,i=i+1|0,i=i+7&-8,c[$>>2]=0,$)|0);i=$;cw(t);aa=0}else if((u|0)==44){rv(t,47080,($=i,i=i+8|0,c[$>>2]=h,$)|0);i=$;cw(t);aa=0}else if((u|0)==46){rv(t,46072,($=i,i=i+1|0,i=i+7&-8,c[$>>2]=0,$)|0);i=$;aa=0}else if((u|0)==47){ue[c[636260]&31](1,45464,($=i,i=i+8|0,c[$>>2]=b,$)|0);i=$;aa=y}i=d;return aa|0}function Rr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[33776]|0;if((d|0)==0){return}else{e=d}do{a:do{if((c[e>>2]&b|0)!=0){d=e+8|0;f=c[d>>2]|0;g=c[f+8>>2]|0;if((g|0)==0){break}else{h=g;i=f}while(1){Pr(a,c[h>>2]|0,c[i>>2]|0);f=c[h+8>>2]|0;if((f|0)==0){break a}h=f;i=c[d>>2]|0}}}while(0);e=c[e+12>>2]|0;}while((e|0)!=0);return}function Sr(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;e=b;f=a[b]|0;while(1){if(f<<24>>24==0){g=17;break}else{h=e;i=f}while(1){j=i<<24>>24==0;b=h+1|0;if(!(i<<24>>24<33&(j^1))){break}h=b;i=a[b]|0}if(j){g=17;break}b=c[33776]|0;a:do{if((b|0)==0){k=h}else{l=b;b:while(1){do{if((c[l>>2]&d|0)!=0){m=l+8|0;n=c[(c[m>>2]|0)+8>>2]|0;if((n|0)==0){break}else{o=n}do{p=o|0;n=Or(h,c[p>>2]|0,0)|0;if((n|0)!=0&(n|0)==(h|0)){q=c[c[m>>2]>>2]|0;n=Or(h,q,0)|0;if(!((n|0)!=0&(n|0)==(h|0))){break b}}o=c[o+8>>2]|0;}while((o|0)!=0)}}while(0);m=c[l+12>>2]|0;if((m|0)==0){k=h;break a}else{l=m}}l=h+(Wx(q|0)|0)|0;m=h+(Wx(c[p>>2]|0)|0)|0;_x(l|0,m|0,(Wx(m|0)|0)+1|0)|0;Vx(h|0,q|0,Wx(q|0)|0)|0;k=h}}while(0);while(1){r=a[k]|0;s=r<<24>>24==0;if(!(r<<24>>24>32&(s^1))){break}k=k+1|0}if(s){g=17;break}else{e=k;f=r}}if((g|0)==17){return}}function Tr(b,d){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+1064|0;f=e|0;g=f|0;a[d]=0;h=f+1024|0;j=f+1028|0;k=f+1032|0;while(1){if(($v(b,f)|0)==0){l=0;m=17;break}n=c[h>>2]|0;if((n|0)==1){sw(g);o=Wx(d|0)|0;if((o+1+(Wx(g|0)|0)|0)>>>0>256>>>0){m=5;break}$x(d|0,g|0)|0}else if((n|0)==3){if((c[j>>2]&4096|0)==0){m=14;break}o=Wx(d|0)|0;if((o+7|0)>>>0>256>>>0){m=9;break}p=c[k>>2]|0;jb(d+o|0,43984,(q=i,i=i+24|0,c[q>>2]=1,c[q+8>>2]=p,c[q+16>>2]=1,q)|0)|0;i=q}else if((n|0)==4){n=Wx(d|0)|0;if((n+7|0)>>>0>256>>>0){m=12;break}jb(d+n|0,43336,(q=i,i=i+24|0,c[q>>2]=1,c[q+8>>2]=g,c[q+16>>2]=1,q)|0)|0;i=q}else{m=14;break}if((Av(b,42168)|0)!=0){l=1;m=17;break}if((Zv(b,50648)|0)==0){l=0;m=17;break}}if((m|0)==5){rv(b,44584,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;l=0;r=1060;s=0;i=e;return l|0}else if((m|0)==9){rv(b,44584,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;l=0;r=1060;s=0;i=e;return l|0}else if((m|0)==12){rv(b,44584,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;l=0;r=1060;s=0;i=e;return l|0}else if((m|0)==14){rv(b,42768,(q=i,i=i+8|0,c[q>>2]=g,q)|0);i=q;l=0;r=1060;s=0;i=e;return l|0}else if((m|0)==17){r=1060;s=0;i=e;return l|0}return 0}function Ur(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,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;b=i;i=i+1320|0;d=b+256|0;e=b|0;f=d|0;g=d+1024|0;h=0;j=0;k=0;l=0;a:while(1){m=(k|0)==0;if(m|(h|0)==0){n=j}else{n=mv(h)|0}hw(17600);o=bw(a)|0;if((o|0)==0){p=6;break}if((Yv(o,d)|0)==0){q=h;r=n;s=0;t=l}else{u=h;v=n;w=0;x=0;y=l;while(1){if((c[g>>2]|0)!=4){p=9;break a}z=(Wx(f|0)|0)+20&-4;A=z+u|0;do{if(m|(v|0)==0){B=y;C=x;D=w;E=v}else{F=v;G=v+16|0;c[v>>2]=G;H=v+z|0;by(G|0,f|0)|0;c[v+8>>2]=0;c[v+4>>2]=0;if((x|0)==0){B=F;C=F;D=F;E=H;break}c[x+12>>2]=F;B=F;C=F;D=w;E=H}}while(0);if((Zv(o,39408)|0)==0){p=16;break a}if((Zv(o,57048)|0)==0){p=16;break a}z=B+4|0;H=B+8|0;F=E;G=A;b:while(1){I=m|(F|0)==0;J=G;while(1){if((Av(o,55680)|0)!=0){break b}if((Tr(o,e)|0)==0){p=19;break a}K=(Wx(e|0)|0)+12&-4;L=K+J|0;if(I){J=L}else{break}}I=F+8|0;c[F>>2]=I;by(I|0,e|0)|0;c[z>>2]=(c[z>>2]|0)+1;c[F+4>>2]=c[H>>2];c[H>>2]=F;F=F+K|0;G=L}if((Yv(o,d)|0)==0){q=J;r=F;s=D;t=B;break}else{u=J;v=F;w=D;x=C;y=B}}}cw(o);y=k+1|0;if((y|0)<2){h=q;j=r;k=y;l=t}else{p=24;break}}if((p|0)==6){ue[c[636260]&31](3,60360,(M=i,i=i+8|0,c[M>>2]=a,M)|0);i=M;N=0;O=1060;P=0;Q=256;R=0;i=b;return N|0}else if((p|0)==9){rv(o,39752,(M=i,i=i+8|0,c[M>>2]=f,M)|0);i=M;cw(o);N=0;O=1060;P=0;Q=256;R=0;i=b;return N|0}else if((p|0)==16){cw(o);N=0;O=1060;P=0;Q=256;R=0;i=b;return N|0}else if((p|0)==19){cw(o);N=0;O=1060;P=0;Q=256;R=0;i=b;return N|0}else if((p|0)==24){ue[c[636260]&31](1,45464,(M=i,i=i+8|0,c[M>>2]=a,M)|0);i=M;N=s;O=1060;P=0;Q=256;R=0;i=b;return N|0}return 0}function Vr(b,d){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,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;e=i;i=i+1064|0;f=e|0;g=f|0;h=f+1024|0;j=f+1028|0;k=f+1032|0;l=0;m=0;n=0;a:while(1){if((Yv(b,f)|0)==0){o=m;p=46;break}q=c[h>>2]|0;do{if((q|0)==1){r=mv(16)|0;s=r;t=r+4|0;c[t>>2]=0;c[r>>2]=2;c[r+8>>2]=0;c[r+12>>2]=0;if((l|0)==0){u=s}else{c[l+12>>2]=s;u=m}r=0;v=0;while(1){if((c[t>>2]|0)!=0){if((_v(b,1,0,f)|0)==0){p=24;break a}}sw(g);w=mv((Wx(g|0)|0)+9|0)|0;x=w;y=w+8|0;c[w>>2]=y;by(y|0,g|0)|0;z=(a[g]|0)==0?1:v;c[w+4>>2]=0;if((r|0)==0){c[t>>2]=x}else{c[r+4>>2]=x}if((Av(b,38400)|0)==0){break}else{r=x;v=z}}A=s;B=u;C=(z|0)==0?0:n}else if((q|0)==3){if((c[j>>2]&4096|0)==0){p=34;break a}if((c[k>>2]|0)>>>0>7>>>0){p=6;break a}if((n|0)!=0){p=12;break a}v=mv(16)|0;r=v;c[v>>2]=1;c[v+8>>2]=c[k>>2];c[v+12>>2]=0;if((l|0)==0){A=r;B=r;C=1;break}c[l+12>>2]=r;A=r;B=m;C=1}else{p=34;break a}}while(0);if((Av(b,d)|0)!=0){o=B;p=46;break}if((Zv(b,50648)|0)==0){p=41;break}else{l=A;m=B;n=C}}if((p|0)==6){rv(b,37296,(D=i,i=i+8|0,c[D>>2]=8,D)|0);i=D;cw(b);if((m|0)==0){o=0;E=1060;F=0;i=e;return o|0}else{G=m}while(1){C=c[G+12>>2]|0;do{if((c[G>>2]|0)==2){n=c[G+4>>2]|0;if((n|0)==0){break}else{H=n}while(1){n=c[H+4>>2]|0;nv(H);if((n|0)==0){break}else{H=n}}}}while(0);nv(G);if((C|0)==0){o=0;break}else{G=C}}E=1060;F=0;i=e;return o|0}else if((p|0)==12){rv(b,36840,(D=i,i=i+1|0,i=i+7&-8,c[D>>2]=0,D)|0);i=D;cw(b);if((m|0)==0){o=0;E=1060;F=0;i=e;return o|0}else{I=m}while(1){G=c[I+12>>2]|0;do{if((c[I>>2]|0)==2){H=c[I+4>>2]|0;if((H|0)==0){break}else{J=H}while(1){H=c[J+4>>2]|0;nv(J);if((H|0)==0){break}else{J=H}}}}while(0);nv(I);if((G|0)==0){o=0;break}else{I=G}}E=1060;F=0;i=e;return o|0}else if((p|0)==24){cw(b);if((u|0)==0){o=0;E=1060;F=0;i=e;return o|0}else{K=u}while(1){u=c[K+12>>2]|0;do{if((c[K>>2]|0)==2){I=c[K+4>>2]|0;if((I|0)==0){break}else{L=I}while(1){I=c[L+4>>2]|0;nv(L);if((I|0)==0){break}else{L=I}}}}while(0);nv(K);if((u|0)==0){o=0;break}else{K=u}}E=1060;F=0;i=e;return o|0}else if((p|0)==34){rv(b,36464,(D=i,i=i+8|0,c[D>>2]=g,D)|0);i=D;cw(b);if((m|0)==0){o=0;E=1060;F=0;i=e;return o|0}else{M=m}while(1){m=c[M+12>>2]|0;do{if((c[M>>2]|0)==2){D=c[M+4>>2]|0;if((D|0)==0){break}else{N=D}while(1){D=c[N+4>>2]|0;nv(N);if((D|0)==0){break}else{N=D}}}}while(0);nv(M);if((m|0)==0){o=0;break}else{M=m}}E=1060;F=0;i=e;return o|0}else if((p|0)==41){cw(b);if((B|0)==0){o=0;E=1060;F=0;i=e;return o|0}else{O=B}while(1){B=c[O+12>>2]|0;do{if((c[O>>2]|0)==2){b=c[O+4>>2]|0;if((b|0)==0){break}else{P=b}while(1){b=c[P+4>>2]|0;nv(P);if((b|0)==0){break}else{P=b}}}}while(0);nv(O);if((B|0)==0){o=0;break}else{O=B}}E=1060;F=0;i=e;return o|0}else if((p|0)==46){E=1060;F=0;i=e;return o|0}return 0}function Wr(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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;b=i;i=i+1064|0;d=b|0;e=d|0;hw(17600);f=bw(a)|0;if((f|0)==0){ue[c[636260]&31](3,60360,(g=i,i=i+8|0,c[g>>2]=a,g)|0);i=g;h=0;j=1060;k=0;i=b;return h|0}a:do{if((Yv(f,d)|0)==0){l=0}else{m=d+1024|0;n=d+1028|0;o=d+1032|0;p=0;q=0;b:while(1){if((c[m>>2]|0)!=3){r=8;break}if((c[n>>2]&4096|0)==0){r=8;break}s=c[o>>2]|0;if((Zv(f,57048)|0)==0){r=17;break}else{t=q;u=p}while(1){if((Yv(f,d)|0)==0){break}if((Tx(e,55680)|0)==0){break}aw(f);v=mv(20)|0;w=v;c[v>>2]=s;c[v+16>>2]=0;if((t|0)==0){x=w}else{c[t+16>>2]=w;x=u}y=Vr(f,39408)|0;c[v+12>>2]=y;if((y|0)==0){r=30;break b}if((Zv(f,52544)|0)==0){r=39;break b}if((_v(f,3,4096,d)|0)==0){r=39;break b}c[v+4>>2]=c[o>>2];if((Zv(f,50648)|0)==0){r=49;break b}if((_v(f,3,4096,d)|0)==0){r=49;break b}c[v+8>>2]=c[o>>2];if((Zv(f,49880)|0)==0){r=59;break b}if((Zv(f,42168)|0)==0){r=59;break b}else{t=w;u=x}}if((Yv(f,d)|0)==0){l=u;break a}else{p=u;q=t}}if((r|0)==8){rv(f,35528,(g=i,i=i+8|0,c[g>>2]=e,g)|0);i=g;if((p|0)!=0){q=p;while(1){o=c[q+16>>2]|0;n=c[q+12>>2]|0;if((n|0)!=0){m=n;while(1){n=c[m+12>>2]|0;do{if((c[m>>2]|0)==2){s=c[m+4>>2]|0;if((s|0)==0){break}else{z=s}while(1){s=c[z+4>>2]|0;nv(z);if((s|0)==0){break}else{z=s}}}}while(0);nv(m);if((n|0)==0){break}else{m=n}}}nv(q);if((o|0)==0){break}else{q=o}}}cw(f);h=0;j=1060;k=0;i=b;return h|0}else if((r|0)==17){if((p|0)!=0){q=p;while(1){m=c[q+16>>2]|0;s=c[q+12>>2]|0;if((s|0)!=0){w=s;while(1){s=c[w+12>>2]|0;do{if((c[w>>2]|0)==2){v=c[w+4>>2]|0;if((v|0)==0){break}else{A=v}while(1){v=c[A+4>>2]|0;nv(A);if((v|0)==0){break}else{A=v}}}}while(0);nv(w);if((s|0)==0){break}else{w=s}}}nv(q);if((m|0)==0){break}else{q=m}}}cw(f);h=0;j=1060;k=0;i=b;return h|0}else if((r|0)==30){if((x|0)==0){h=0;j=1060;k=0;i=b;return h|0}else{B=x}while(1){q=c[B+16>>2]|0;p=c[B+12>>2]|0;if((p|0)!=0){w=p;while(1){p=c[w+12>>2]|0;do{if((c[w>>2]|0)==2){o=c[w+4>>2]|0;if((o|0)==0){break}else{C=o}while(1){o=c[C+4>>2]|0;nv(C);if((o|0)==0){break}else{C=o}}}}while(0);nv(w);if((p|0)==0){break}else{w=p}}}nv(B);if((q|0)==0){h=0;break}else{B=q}}j=1060;k=0;i=b;return h|0}else if((r|0)==39){if((x|0)!=0){w=x;while(1){m=c[w+16>>2]|0;s=c[w+12>>2]|0;if((s|0)!=0){o=s;while(1){s=c[o+12>>2]|0;do{if((c[o>>2]|0)==2){n=c[o+4>>2]|0;if((n|0)==0){break}else{D=n}while(1){n=c[D+4>>2]|0;nv(D);if((n|0)==0){break}else{D=n}}}}while(0);nv(o);if((s|0)==0){break}else{o=s}}}nv(w);if((m|0)==0){break}else{w=m}}}cw(f);h=0;j=1060;k=0;i=b;return h|0}else if((r|0)==49){if((x|0)!=0){w=x;while(1){o=c[w+16>>2]|0;q=c[w+12>>2]|0;if((q|0)!=0){p=q;while(1){q=c[p+12>>2]|0;do{if((c[p>>2]|0)==2){n=c[p+4>>2]|0;if((n|0)==0){break}else{E=n}while(1){n=c[E+4>>2]|0;nv(E);if((n|0)==0){break}else{E=n}}}}while(0);nv(p);if((q|0)==0){break}else{p=q}}}nv(w);if((o|0)==0){break}else{w=o}}}cw(f);h=0;j=1060;k=0;i=b;return h|0}else if((r|0)==59){if((x|0)!=0){w=x;while(1){p=c[w+16>>2]|0;m=c[w+12>>2]|0;if((m|0)!=0){s=m;while(1){m=c[s+12>>2]|0;do{if((c[s>>2]|0)==2){n=c[s+4>>2]|0;if((n|0)==0){break}else{F=n}while(1){n=c[F+4>>2]|0;nv(F);if((n|0)==0){break}else{F=n}}}}while(0);nv(s);if((m|0)==0){break}else{s=m}}}nv(w);if((p|0)==0){break}else{w=p}}}cw(f);h=0;j=1060;k=0;i=b;return h|0}}}while(0);cw(f);ue[c[636260]&31](1,45464,(g=i,i=i+8|0,c[g>>2]=a,g)|0);i=g;h=l;j=1060;k=0;i=b;return h|0}function Xr(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,v=0;e=d|0;do{if((b|0)==0){f=e}else{g=d;h=-1;i=e;j=b;a:while(1){k=c[j>>2]|0;if((k|0)==1){l=j+8|0;a[d+264+(c[l>>2]<<3)|0]=i-g;m=i;n=c[l>>2]|0}else if((k|0)==2){k=c[j+4>>2]|0;if((k|0)==0){o=0;p=19;break}l=(h|0)>-1;q=k;while(1){r=q|0;k=c[r>>2]|0;if((a[k]|0)==0){s=i;t=h;break}u=Nr(i,k,0)|0;if((u|0)>-1){v=i+u|0;if(l){p=9;break}if((u|0)==0){s=v;t=h;break}}u=c[q+4>>2]|0;if((u|0)==0){o=0;p=19;break a}else{q=u}}if((p|0)==9){p=0;c[d+264+(h<<3)+4>>2]=v-g-(a[d+264+(h<<3)|0]|0);s=v;t=-1}if((s|0)==0){o=0;p=19;break}m=s+(Wx(c[r>>2]|0)|0)|0;n=t}else{m=i;n=h}q=c[j+12>>2]|0;if((q|0)==0){p=16;break}else{h=n;i=m;j=q}}if((p|0)==16){if(!((n|0)>-1)){f=m;break}c[d+264+(n<<3)+4>>2]=Wx(d+(a[d+264+(n<<3)|0]|0)|0)|0;o=1;return o|0}else if((p|0)==19){return o|0}}}while(0);o=(a[f]|0)==0|0;return o|0}function Yr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=d|0;ay(f|0,b|0,256)|0;a:do{if((a[f]|0)!=0){do{b=d+((Wx(f|0)|0)-1)|0;if((a[b]|0)!=10){break a}a[b]=0;}while((a[f]|0)!=0)}}while(0);f=c[179592]|0;if((f|0)==0){g=0;return g|0}else{h=f}while(1){if((c[h>>2]&e|0)!=0){a[d+264|0]=-1;a[d+272|0]=-1;a[d+280|0]=-1;a[d+288|0]=-1;a[d+296|0]=-1;a[d+304|0]=-1;a[d+312|0]=-1;a[d+320|0]=-1;if((Xr(c[h+12>>2]|0,d)|0)!=0){break}}f=c[h+16>>2]|0;if((f|0)==0){g=0;i=9;break}else{h=f}}if((i|0)==9){return g|0}c[d+256>>2]=c[h+4>>2];c[d+260>>2]=c[h+8>>2];g=1;return g|0}function Zr(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;g=i;if(d>>>0>7>>>0){ue[c[636260]&31](4,34952,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;a[e]=0;i=g;return}h=a[b+264+(d<<3)|0]|0;if(h<<24>>24>-1){j=c[b+264+(d<<3)+4>>2]|0;d=((j|0)<(f|0)?j+1|0:f)-1|0;ay(e|0,b+(h<<24>>24)|0,d|0)|0;a[e+d|0]=0;i=g;return}else{a[e]=0;i=g;return}}
|
|
|
|
|
|
|
|
function rh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;d=(c[430932]|0)+(c[a>>2]|0)|0;e=c[a+4>>2]|0;if(((e>>>0)%48|0|0)!=0){aj(1,29288,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}a=(e>>>0)/48|0;if(e>>>0<48>>>0){aj(1,18672,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}f=xj((a*24|0)+48|0,0)|0;c[469123]=f;c[469122]=a;e=f;f=d;d=0;while(1){g=c[f>>2]|0;c[e>>2]=g;h=c[f+4>>2]|0;j=e+4|0;c[j>>2]=h;c[e+8>>2]=c[f+40>>2];c[e+12>>2]=c[f+44>>2];c[e+16>>2]=c[f+32>>2];c[e+20>>2]=c[f+36>>2];if((g|0)<(c[469132]|0)){k=h}else{c[469132]=g+1;k=c[j>>2]|0}j=c[469138]|0;if((k|0)<(j|0)){l=j}else{j=k+1|0;c[469138]=j;l=j}j=d+1|0;if((j|0)<(a|0)){e=e+24|0;f=f+48|0;d=j}else{break}}c[469139]=xj(l<<3,0)|0;l=c[469138]|0;c[469140]=xj(da(l<<2,l)|0,0)|0;i=b;return}function sh(b){b=b|0;var d=0,e=0,f=0,h=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0,p=0;d=i;e=(c[430932]|0)+(c[b>>2]|0)|0;f=c[b+4>>2]|0;if((f&15|0)!=0){aj(1,29288,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}b=f>>>4;if((b|0)==0){aj(1,17056,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}h=xj((b*20|0)+240|0,0)|0;c[469119]=h;c[469118]=b;f=h;h=e;e=0;while(1){j=+g[h>>2];g[f>>2]=j;k=j<0.0|0;l=+g[h+4>>2];g[f+4>>2]=l;m=l<0.0?k|2:k;n=+g[h+8>>2];g[f+8>>2]=n;if(n<0.0){o=(m|4)&255}else{o=m&255}g[f+12>>2]=+g[h+12>>2];do{if(j==1.0){p=0}else{if(l==1.0){p=1;break}p=n==1.0?2:3}}while(0);a[f+16|0]=p;a[f+17|0]=o;m=e+1|0;if((m|0)<(b|0)){f=f+20|0;h=h+16|0;e=m}else{break}}i=d;return}function th(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;d=c[a+4>>2]|0;if((d&7|0)!=0){aj(1,29288,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}f=c[a>>2]|0;a=c[430932]|0;g=d>>>3;d=xj((g*12|0)+72|0,0)|0;c[469117]=d;c[469116]=g;if((g|0)==0){i=b;return}h=a+f|0;f=d;d=0;while(1){c[f>>2]=(c[469119]|0)+((c[h>>2]|0)*20|0);j=c[h+4>>2]|0;c[f+8>>2]=j;if(!((j|0)>-1&(j|0)<(c[469114]|0))){k=6;break}c[f+4>>2]=c[(c[469115]|0)+(j*72|0)+64>>2];a=d+1|0;if((a|0)<(g|0)){h=h+8|0;f=f+12|0;d=a}else{k=8;break}}if((k|0)==6){aj(1,59728,(e=i,i=i+8|0,c[e>>2]=j,e)|0);i=e}else if((k|0)==8){i=b;return}}function uh(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;d=i;i=i+12288|0;e=d|0;f=c[a+4>>2]|0;if(((f>>>0)%104|0|0)!=0){aj(1,29288,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}j=(c[430932]|0)+(c[a>>2]|0)|0;a=(f>>>0)/104|0;c[469141]=a;c[469142]=xj(a<<2,0)|0;k=(c[430932]|0)+(c[b>>2]|0)|0;if((((c[b+4>>2]|0)>>>0)%44|0|0)!=0){aj(1,29288,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}if(!(f>>>0>103>>>0)){l=12288;m=0;i=d;return}f=e|0;b=0;n=j;while(1){if((c[n+8>>2]|0)==2){j=xj(16,0)|0;c[(c[469142]|0)+(b<<2)>>2]=j;o=c[n+96>>2]|0;p=c[n+100>>2]|0;q=da(p,o)|0;if((q|0)>1024){r=9;break}if((q|0)>0){s=0;t=k+((c[n+12>>2]|0)*44|0)|0;while(1){g[e+(s*12|0)>>2]=+g[t>>2];g[e+(s*12|0)+4>>2]=+g[t+4>>2];g[e+(s*12|0)+8>>2]=+g[t+8>>2];u=s+1|0;if((u|0)<(q|0)){s=u;t=t+44|0}else{break}}}t=c[n>>2]|0;s=c[469115]|0;c[j+8>>2]=c[s+(t*72|0)+68>>2];c[j+4>>2]=c[s+(t*72|0)+64>>2];c[j+12>>2]=Jh(o,p,f)|0}t=b+1|0;if((t|0)<(a|0)){b=t;n=n+104|0}else{r=15;break}}if((r|0)==9){aj(1,58328,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}else if((r|0)==15){l=12288;m=0;i=d;return}}function vh(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;f=i;i=i+152|0;g=f|0;h=f+8|0;if((b|0)==0){aj(1,56352,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}if((a[b]|0)==0){aj(1,56352,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}c[469096]=jk(55312,54456,512)|0;c[469094]=jk(53392,54456,512)|0;c[469092]=jk(52288,51264,513)|0;$i(50360,(j=i,i=i+16|0,c[j>>2]=b,c[j+8>>2]=d,j)|0);i=j;k=(d|0)==0;if(!((Tx(1876392,b)|0)!=0|k)){c[e>>2]=c[661396];l=144;m=0;i=f;return}Zx(1876392,0,188)|0;Fh();if((a[b]|0)==0){c[469122]=1;c[469132]=1;c[469138]=1;c[469129]=xj(48,0)|0;c[e>>2]=0;l=144;m=0;i=f;return}d=g;n=hl(b,d)|0;o=g|0;g=c[o>>2]|0;if((g|0)==0){aj(1,49608,(j=i,i=i+8|0,c[j>>2]=b,j)|0);i=j}p=Ql(g,n)|0;c[661396]=p;c[e>>2]=p;p=c[o>>2]|0;Vx(h|0,p|0,144)|0;o=c[h+4>>2]|0;if((o|0)!=46){aj(1,48840,(j=i,i=i+24|0,c[j>>2]=b,c[j+8>>2]=o,c[j+16>>2]=46,j)|0);i=j}c[430932]=p;o=p+(c[h+16>>2]|0)|0;p=c[h+20>>2]|0;if(((p>>>0)%72|0|0)!=0){aj(1,30720,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}e=(p>>>0)/72|0;if(p>>>0<72>>>0){aj(1,53752,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}p=e*72|0;n=xj(p,0)|0;c[469115]=n;c[469114]=e;Vx(n|0,o|0,p)|0;rh(h+40|0);p=c[h+60>>2]|0;if((p&3|0)!=0){aj(1,29288,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}o=c[h+56>>2]|0;n=c[430932]|0;e=p>>>2;p=xj((e<<2)+4|0,0)|0;c[469125]=p;c[469124]=e;if((e|0)!=0){g=p;p=n+o|0;o=0;while(1){c[g>>2]=c[p>>2];n=o+1|0;if((n|0)<(e|0)){g=g+4|0;p=p+4|0;o=n}else{break}}}o=c[h+52>>2]|0;if((o&3|0)!=0){aj(1,29288,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}p=c[h+48>>2]|0;g=c[430932]|0;e=o>>>2;o=xj(e<<2,0)|0;c[469127]=o;c[469126]=e;if((e|0)!=0){n=o;o=g+p|0;p=0;while(1){c[n>>2]=c[o>>2];g=p+1|0;if((g|0)<(e|0)){n=n+4|0;o=o+4|0;p=g}else{break}}}sh(h+24|0);th(h+80|0);qh(h+72|0);ph(h+64|0);p=(c[430932]|0)+(c[h+32>>2]|0)|0;o=c[h+36>>2]|0;if(((o>>>0)%36|0|0)!=0){aj(1,29288,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}n=(o>>>0)/36|0;if(o>>>0<36>>>0){aj(1,25064,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j}j=xj(n*12|0,0)|0;c[469121]=j;c[469120]=n;o=j;j=0;e=p;while(1){c[o>>2]=(c[469119]|0)+((c[e>>2]|0)*20|0);c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];p=j+1|0;if((p|0)<(n|0)){o=o+12|0;j=p;e=e+36|0}else{break}}e=h+12|0;j=xj(c[e>>2]|0,0)|0;c[469137]=j;o=c[e>>2]|0;c[469136]=o;Vx(j|0,(c[430932]|0)+(c[h+8>>2]|0)|0,o)|0;o=c[h+140>>2]|0;if((o|0)==0){j=(c[469132]|0)+31&-32;c[469133]=j;e=xj(j,0)|0;c[469134]=e;Zx(e|0,-1|0,c[469133]|0)|0}else{e=c[430932]|0;j=c[h+136>>2]|0;c[469135]=1;n=xj(o,0)|0;c[469134]=n;c[469132]=c[e+j>>2];c[469133]=c[e+(j+4)>>2];Vx(n|0,e+(j+8)|0,o-8|0)|0}uh(h+112|0,h+88|0);il(c[d>>2]|0);wh();di();if(!k){l=144;m=0;i=f;return}rn(1876392,b,64);l=144;m=0;i=f;return}function wh(){var b=0,d=0,e=0,f=0,h=0;c[636094]=(c[469119]|0)+((c[469118]|0)*20|0);b=c[469130]|0;d=c[469131]|0;c[636108]=d+(b*44|0);c[d+(b*44|0)+32>>2]=6;c[d+(b*44|0)+36>>2]=(c[469117]|0)+((c[469116]|0)*12|0);c[(c[636108]|0)+4>>2]=33554432;c[636105]=1;b=c[469124]|0;c[636104]=b;c[(c[469125]|0)+(b<<2)>>2]=c[469130];b=0;do{d=(c[469116]|0)+b|0;e=c[469117]|0;f=b<<1;c[e+(d*12|0)>>2]=(c[469119]|0)+(((b&1|f)+(c[469118]|0)|0)*20|0);c[e+(d*12|0)+4>>2]=0;d=c[636094]|0;e=b>>1;a[d+(f*20|0)+16|0]=e;a[d+(f*20|0)+17|0]=0;g[d+(f*20|0)+8>>2]=0.0;g[d+(f*20|0)+4>>2]=0.0;g[d+(f*20|0)>>2]=0.0;g[d+(f*20|0)+(e<<2)>>2]=1.0;d=f|1;f=c[636094]|0;h=f+(d*20|0)|0;a[f+(d*20|0)+16|0]=e+3;a[f+(d*20|0)+17|0]=0;g[f+(d*20|0)+8>>2]=0.0;g[f+(d*20|0)+4>>2]=0.0;g[h>>2]=0.0;g[f+(d*20|0)+(e<<2)>>2]=-1.0;jn(h);b=b+1|0;}while((b|0)<6);return}function xh(){Zx(1876392|0,0|0,188|0)|0;Fh();return}function yh(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a|0)<0){aj(1,47896,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;return 0}e=c[469128]|0;if((e|0)>(a|0)){f=(c[469129]|0)+(a*48|0)|0;i=b;return f|0}if((a|0)==255){f=2544384;i=b;return f|0}if((a|0)<256){aj(1,46656,(d=i,i=i+24|0,c[d>>2]=e,c[d+8>>2]=a,c[d+16>>2]=256,d)|0);i=d;return 0}else{aj(1,47896,(d=i,i=i+8|0,c[d>>2]=a+256,d)|0);i=d;return 0}return 0}function zh(a){a=a|0;if((a|0)>-1&(c[469128]|0)>(a|0)){i=i;return a|0}else{aj(1,45896,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;return 0}return 0}function Ah(){return c[469137]|0}function Bh(a){a=a|0;if((a|0)>-1&(c[469122]|0)>(a|0)){i=i;return c[(c[469123]|0)+(a*24|0)>>2]|0}else{aj(1,45240,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;return 0}return 0}function Ch(a){a=a|0;if((a|0)>-1&(c[469122]|0)>(a|0)){i=i;return c[(c[469123]|0)+(a*24|0)+4>>2]|0}else{aj(1,44456,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;return 0}return 0}function Dh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0;g[636096]=+g[a>>2];e=a+4|0;g[636097]=+g[e>>2];f=a+8|0;g[636098]=+g[f>>2];g[636099]=+g[b>>2];h=b+4|0;g[636100]=+g[h>>2];i=b+8|0;g[636101]=+g[i>>2];if((d|0)!=0){j=254;return j|0}d=c[636094]|0;g[d+12>>2]=+g[b>>2];g[d+32>>2]=-0.0- +g[b>>2];g[d+52>>2]=+g[a>>2];g[d+72>>2]=-0.0- +g[a>>2];g[d+92>>2]=+g[h>>2];g[d+112>>2]=-0.0- +g[h>>2];g[d+132>>2]=+g[e>>2];g[d+152>>2]=-0.0- +g[e>>2];g[d+172>>2]=+g[i>>2];g[d+192>>2]=-0.0- +g[i>>2];g[d+212>>2]=+g[f>>2];g[d+232>>2]=-0.0- +g[f>>2];d=c[636108]|0;g[d+8>>2]=+g[a>>2];g[d+12>>2]=+g[e>>2];g[d+16>>2]=+g[f>>2];g[d+20>>2]=+g[b>>2];g[d+24>>2]=+g[h>>2];g[d+28>>2]=+g[i>>2];j=255;return j|0}function Eh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0;e=i;if((a|0)<0){aj(1,47896,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f}h=c[469128]|0;do{if((h|0)>(a|0)){j=(c[469129]|0)+(a*48|0)|0}else{if((a|0)==255){j=2544384;break}if((a|0)<256){aj(1,46656,(f=i,i=i+24|0,c[f>>2]=h,c[f+8>>2]=a,c[f+16>>2]=256,f)|0);i=f}else{aj(1,47896,(f=i,i=i+8|0,c[f>>2]=a+256,f)|0);i=f}}}while(0);g[b>>2]=+g[j>>2];g[b+4>>2]=+g[j+4>>2];g[b+8>>2]=+g[j+8>>2];g[d>>2]=+g[j+12>>2];g[d+4>>2]=+g[j+16>>2];g[d+8>>2]=+g[j+20>>2];i=e;return}function Fh(){c[378052]=0;c[378054]=0;return}function Gh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0;e=+g[a>>2];f=+g[b>>2];do{if(+S(+(e-f))<1.0e-4){if(!(+S(+(+g[a+4>>2]- +g[b+4>>2]))<1.0e-4)){break}if(!(+S(+(+g[a+8>>2]- +g[b+8>>2]))<1.0e-4)){break}if(!(+S(+(+g[a+12>>2]- +g[b+12>>2]))<.02)){break}c[d>>2]=0;h=1;return h|0}}while(0);if(!(+S(+(f+e))<1.0e-4)){h=0;return h|0}if(!(+S(+(+g[b+4>>2]+ +g[a+4>>2]))<1.0e-4)){h=0;return h|0}if(!(+S(+(+g[b+8>>2]+ +g[a+8>>2]))<1.0e-4)){h=0;return h|0}if(!(+S(+(+g[b+12>>2]+ +g[a+12>>2]))<.02)){h=0;return h|0}c[d>>2]=1;h=1;return h|0}function Hh(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;d=i;e=c[164940]|0;do{if((e|0)>0){f=0;while(1){h=f+1|0;if((Gh(617632+(f*20|0)|0,a,b)|0)!=0){j=f;k=7;break}l=c[164940]|0;if((h|0)<(l|0)){f=h}else{break}}if((k|0)==7){i=d;return j|0}if((l|0)!=2048){m=l;break}aj(1,28984,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}else{m=e}}while(0);g[617632+(m*20|0)>>2]=+g[a>>2];e=a+4|0;g[617636+(m*20|0)>>2]=+g[e>>2];l=a+8|0;g[617640+(m*20|0)>>2]=+g[l>>2];g[617644+(m*20|0)>>2]=+g[a+12>>2];k=+g[a>>2]<0.0|0;a=+g[e>>2]<0.0?k|2:k;c[617648+(m*20|0)>>2]=+g[l>>2]<0.0?a|4:a;c[164940]=m+1;c[b>>2]=0;j=(c[164940]|0)-1|0;i=d;return j|0}function Ih(a){a=a|0;var b=0,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.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.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0;b=i;i=i+120|0;d=b|0;e=b+8|0;f=b+24|0;h=b+40|0;j=b+48|0;k=b+56|0;l=b+72|0;m=b+88|0;n=b+104|0;o=a|0;p=c[o>>2]|0;q=e|0;g[q>>2]=+g[617632+(p*20|0)>>2];r=e+4|0;g[r>>2]=+g[617636+(p*20|0)>>2];s=e+8|0;g[s>>2]=+g[617640+(p*20|0)>>2];t=+g[617644+(p*20|0)>>2];p=e+12|0;g[p>>2]=t;u=Uh(q,t)|0;c[h>>2]=u;v=a+4|0;w=c[v>>2]|0;x=(u|0)==0;a:do{if((w|0)>0){y=0;z=x;A=w;B=u;while(1){if(z){break}C=c[a+8+(y<<2)>>2]|0;if((C|0)==(c[o>>2]|0)){D=A;E=B}else{t=+g[617632+(C*20|0)>>2];g[q>>2]=t;F=+g[617636+(C*20|0)>>2];g[r>>2]=F;G=+g[617640+(C*20|0)>>2];g[s>>2]=G;H=+g[617644+(C*20|0)>>2];g[p>>2]=H;if((c[a+112+(y<<2)>>2]|0)==0){g[q>>2]=+g[15616]-t;g[r>>2]=+g[15617]-F;g[s>>2]=+g[15618]-G;G=-0.0-H;g[p>>2]=G;I=G}else{I=H}Wh(h,q,I,.10000000149011612);D=c[v>>2]|0;E=c[h>>2]|0}C=y+1|0;J=(E|0)==0;if((C|0)<(D|0)){y=C;z=J;A=D;B=E}else{K=E;L=J;break a}}i=b;return}else{K=u;L=x}}while(0);if(L){i=b;return}Th(K,k|0,l|0);K=0;do{L=e+(K<<2)|0;x=l+(K<<2)|0;u=k+(K<<2)|0;E=-1;while(1){g[s>>2]=0.0;g[r>>2]=0.0;g[q>>2]=0.0;g[L>>2]=+(E|0);if((E|0)==1){M=+g[x>>2]}else{M=-0.0- +g[u>>2]}g[p>>2]=M;D=c[o>>2]|0;I=+g[617632+(D*20|0)>>2];H=+g[q>>2];do{if(+S(+(I-H))<1.0e-4){if(!(+S(+(+g[617636+(D*20|0)>>2]- +g[r>>2]))<1.0e-4)){N=21;break}if(!(+S(+(+g[617640+(D*20|0)>>2]- +g[s>>2]))<1.0e-4)){N=21;break}if(!(+S(+(+g[617644+(D*20|0)>>2]-M))<.02)){N=21;break}c[d>>2]=0}else{N=21}}while(0);b:do{if((N|0)==21){N=0;G=+g[s>>2];do{if(+S(+(I+H))<1.0e-4){if(!(+S(+(+g[r>>2]+ +g[617636+(D*20|0)>>2]))<1.0e-4)){break}if(!(+S(+(G+ +g[617640+(D*20|0)>>2]))<1.0e-4)){break}if(!(+S(+(M+ +g[617644+(D*20|0)>>2]))<.02)){break}c[d>>2]=1;break b}}while(0);w=c[v>>2]|0;c:do{if((w|0)>0){F=+g[r>>2];B=0;d:while(1){A=c[a+8+(B<<2)>>2]|0;t=+g[617632+(A*20|0)>>2];do{if(+S(+(t-H))<1.0e-4){if(!(+S(+(+g[617636+(A*20|0)>>2]-F))<1.0e-4)){break}if(!(+S(+(+g[617640+(A*20|0)>>2]-G))<1.0e-4)){break}if(+S(+(+g[617644+(A*20|0)>>2]-M))<.02){O=0;break d}}}while(0);do{if(+S(+(t+H))<1.0e-4){if(!(+S(+(F+ +g[617636+(A*20|0)>>2]))<1.0e-4)){break}if(!(+S(+(G+ +g[617640+(A*20|0)>>2]))<1.0e-4)){break}if(+S(+(M+ +g[617644+(A*20|0)>>2]))<.02){O=1;break d}}}while(0);A=B+1|0;if((A|0)<(w|0)){B=A}else{P=A;break c}}c[d>>2]=O;P=B}else{P=0}}while(0);if((P|0)!=(w|0)){break}if((w|0)>26){_i(53312,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q}A=Hh(q,d)|0;c[a+8+(c[v>>2]<<2)>>2]=A;c[a+216+(c[v>>2]<<2)>>2]=0;c[a+112+(c[v>>2]<<2)>>2]=c[d>>2];c[v>>2]=(c[v>>2]|0)+1}}while(0);if((E|0)<0){E=E+2|0}else{break}}K=K+1|0;}while((K|0)<3);K=c[h>>2]|0;P=c[K>>2]|0;if((P|0)>0){O=m|0;k=m+4|0;l=m+8|0;e=n+8|0;E=n+4|0;u=n|0;x=f|0;L=f+4|0;D=f+8|0;A=f+12|0;f=0;z=K;y=P;while(1){P=f+1|0;J=(P|0)%(y|0)|0;g[O>>2]=+g[z+4+(f*12|0)>>2]- +g[z+4+(J*12|0)>>2];g[k>>2]=+g[z+4+(f*12|0)+4>>2]- +g[z+4+(J*12|0)+4>>2];g[l>>2]=+g[z+4+(f*12|0)+8>>2]- +g[z+4+(J*12|0)+8>>2];e:do{if(!(+dn(O)<.5)){J=0;while(1){R=m+(J<<2)|0;M=+g[R>>2];if(+S(+(M+-1.0))<1.0e-4){N=48;break}C=J+1|0;if(+S(+(M+1.0))<1.0e-4){N=50;break}if((C|0)<3){J=C}else{T=0;break}}if((N|0)==48){N=0;g[l>>2]=0.0;g[k>>2]=0.0;g[O>>2]=0.0;g[R>>2]=1.0;T=0}else if((N|0)==50){N=0;g[l>>2]=0.0;g[k>>2]=0.0;g[O>>2]=0.0;g[R>>2]=-1.0;T=0}while(1){M=+g[m+(T<<2)>>2];J=T+1|0;if(M==-1.0|M==1.0){break e}if((J|0)<3){T=J}else{U=0;break}}do{J=n+(U<<2)|0;C=-1;while(1){g[e>>2]=0.0;g[E>>2]=0.0;g[u>>2]=0.0;g[J>>2]=+(C|0);M=+g[k>>2];H=+g[e>>2];I=+g[l>>2];G=+g[E>>2];g[q>>2]=M*H-I*G;F=+g[u>>2];t=+g[O>>2];g[r>>2]=I*F-t*H;g[s>>2]=t*G-M*F;f:do{if(!(+dn(q)<.5)){V=c[h>>2]|0;F=+g[q>>2];M=+g[r>>2];G=+g[s>>2];t=+g[V+4+(f*12|0)>>2]*F+ +g[V+4+(f*12|0)+4>>2]*M+ +g[V+4+(f*12|0)+8>>2]*G;g[p>>2]=t;W=c[V>>2]|0;g:do{if((W|0)>0){X=0;while(1){Y=X+1|0;if(+g[V+4+(X*12|0)>>2]*F+ +g[V+4+(X*12|0)+4>>2]*M+ +g[V+4+(X*12|0)+8>>2]*G-t>.1){Z=X;break g}if((Y|0)<(W|0)){X=Y}else{Z=Y;break}}}else{Z=0}}while(0);if((Z|0)<(W|0)){break}V=c[o>>2]|0;H=+g[617632+(V*20|0)>>2];do{if(+S(+(H-F))<1.0e-4){if(!(+S(+(+g[617636+(V*20|0)>>2]-M))<1.0e-4)){break}if(!(+S(+(+g[617640+(V*20|0)>>2]-G))<1.0e-4)){break}if(!(+S(+(+g[617644+(V*20|0)>>2]-t))<.02)){break}c[d>>2]=0;break f}}while(0);do{if(+S(+(H+F))<1.0e-4){if(!(+S(+(M+ +g[617636+(V*20|0)>>2]))<1.0e-4)){break}if(!(+S(+(G+ +g[617640+(V*20|0)>>2]))<1.0e-4)){break}if(!(+S(+(t+ +g[617644+(V*20|0)>>2]))<.02)){break}c[d>>2]=1;break f}}while(0);V=c[v>>2]|0;h:do{if((V|0)>0){W=0;i:while(1){X=c[a+8+(W<<2)>>2]|0;H=+g[617632+(X*20|0)>>2];do{if(+S(+(H-F))<1.0e-4){if(!(+S(+(+g[617636+(X*20|0)>>2]-M))<1.0e-4)){break}if(!(+S(+(+g[617640+(X*20|0)>>2]-G))<1.0e-4)){break}if(+S(+(+g[617644+(X*20|0)>>2]-t))<.02){_=0;break i}}}while(0);do{if(+S(+(H+F))<1.0e-4){if(!(+S(+(M+ +g[617636+(X*20|0)>>2]))<1.0e-4)){break}if(!(+S(+(G+ +g[617640+(X*20|0)>>2]))<1.0e-4)){break}if(+S(+(t+ +g[617644+(X*20|0)>>2]))<.02){_=1;break i}}}while(0);X=W+1|0;if((X|0)<(V|0)){W=X}else{$=X;break h}}c[d>>2]=_;$=W}else{$=0}}while(0);if(($|0)!=(V|0)){break}if((V|0)>26){_i(53312,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q}X=Hh(q,d)|0;c[a+8+(c[v>>2]<<2)>>2]=X;X=c[v>>2]|0;if((X|0)>0){Y=0;aa=X;while(1){if((c[a+8+(aa<<2)>>2]|0)==(c[a+8+(Y<<2)>>2]|0)){_i(44416,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;ba=c[v>>2]|0}else{ba=aa}ca=Y+1|0;if((ca|0)<(ba|0)){Y=ca;aa=ba}else{da=ba;break}}}else{da=X}c[a+216+(da<<2)>>2]=0;c[a+112+(c[v>>2]<<2)>>2]=c[d>>2];c[j>>2]=Vh(c[h>>2]|0)|0;aa=c[v>>2]|0;Y=c[a+8+(aa<<2)>>2]|0;t=+g[617632+(Y*20|0)>>2];g[x>>2]=t;G=+g[617636+(Y*20|0)>>2];g[L>>2]=G;M=+g[617640+(Y*20|0)>>2];g[D>>2]=M;F=+g[617644+(Y*20|0)>>2];g[A>>2]=F;if((c[a+112+(aa<<2)>>2]|0)==0){g[x>>2]=-0.0-t;g[L>>2]=-0.0-G;g[D>>2]=-0.0-M;M=-0.0-F;g[A>>2]=M;ea=M}else{ea=F}Wh(j,x,ea,.10000000149011612);aa=c[j>>2]|0;if((aa|0)==0){$i(38704,(Q=i,i=i+1|0,i=i+7&-8,c[Q>>2]=0,Q)|0);i=Q;break}else{Sh(aa);c[v>>2]=(c[v>>2]|0)+1;break}}}while(0);if((C|0)<0){C=C+2|0}else{break}}U=U+1|0;}while((U|0)<3)}}while(0);C=c[h>>2]|0;J=c[C>>2]|0;if((P|0)<(J|0)){f=P;z=C;y=J}else{fa=C;break}}}else{fa=K}Sh(fa);c[a+8+(c[v>>2]<<2)>>2]=c[o>>2];c[a+216+(c[v>>2]<<2)>>2]=0;c[a+112+(c[v>>2]<<2)>>2]=1;c[v>>2]=(c[v>>2]|0)+1;i=b;return}function Jh(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.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,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0.0,wa=0.0,xa=0,ya=0,za=0.0,Aa=0.0,Ba=0,Ca=0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0,Ia=0,Ja=0.0,Ka=0.0,La=0,Ma=0,Na=0.0,Oa=0.0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0;e=i;i=i+332856|0;f=e|0;h=e+16|0;j=e+133144|0;if((a|0)<3|(b|0)<3|(d|0)==0){aj(1,33880,(k=i,i=i+24|0,c[k>>2]=a,c[k+8>>2]=b,c[k+16>>2]=d,k)|0);i=k;return 0}if((a&1|0)==0){aj(1,29048,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}if((b&1|0)==0){aj(1,29048,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}if((a|0)>129|(b|0)>129){aj(1,24880,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}l=j|0;c[l>>2]=a;m=j+4|0;c[m>>2]=b;n=j+8|0;c[n>>2]=0;o=j+12|0;c[o>>2]=0;do{if((a|0)>0){if((b|0)>0){p=0}else{q=0;r=b;break}do{s=0;do{t=(da(s,a)|0)+p|0;g[j+16+(p*1548|0)+(s*12|0)>>2]=+g[d+(t*12|0)>>2];g[j+16+(p*1548|0)+(s*12|0)+4>>2]=+g[d+(t*12|0)+4>>2];g[j+16+(p*1548|0)+(s*12|0)+8>>2]=+g[d+(t*12|0)+8>>2];s=s+1|0;}while((s|0)<(b|0));p=p+1|0;}while((p|0)<(a|0));u=c[m>>2]|0;v=14}else{u=b;v=14}}while(0);a:do{if((v|0)==14){if((u|0)<=0){q=0;r=u;break}b=(c[l>>2]|0)-1|0;a=0;while(1){p=0;while(1){w=+g[j+16+(a*12|0)+(p<<2)>>2]- +g[j+16+(b*1548|0)+(a*12|0)+(p<<2)>>2];d=p+1|0;if(w<-.1|w>.1){x=p;break}if((d|0)<3){p=d}else{x=d;break}}p=a+1|0;if((x|0)!=3){q=a;r=u;break a}if((p|0)<(u|0)){a=p}else{q=p;r=u;break}}}}while(0);c[n>>2]=(q|0)==(r|0);Kh(j);Lh(j);r=c[l>>2]|0;q=c[m>>2]|0;do{if((r|0)>(q|0)){if((q|0)>0){y=0;z=r;A=q}else{B=r;C=q;break}while(1){u=y+1|0;if((u|0)<(z|0)){x=u;a=A;while(1){if((x|0)<(a|0)){b=j+16+(y*1548|0)+(x*12|0)|0;w=+g[b>>2];p=j+16+(y*1548|0)+(x*12|0)+4|0;D=+g[p>>2];d=j+16+(y*1548|0)+(x*12|0)+8|0;E=+g[d>>2];s=j+16+(x*1548|0)+(y*12|0)|0;g[b>>2]=+g[s>>2];b=j+16+(x*1548|0)+(y*12|0)+4|0;g[p>>2]=+g[b>>2];p=j+16+(x*1548|0)+(y*12|0)+8|0;g[d>>2]=+g[p>>2];g[s>>2]=w;g[b>>2]=D;g[p>>2]=E}else{g[j+16+(y*1548|0)+(x*12|0)>>2]=+g[j+16+(x*1548|0)+(y*12|0)>>2];g[j+16+(y*1548|0)+(x*12|0)+4>>2]=+g[j+16+(x*1548|0)+(y*12|0)+4>>2];g[j+16+(y*1548|0)+(x*12|0)+8>>2]=+g[j+16+(x*1548|0)+(y*12|0)+8>>2]}p=x+1|0;b=c[l>>2]|0;s=c[m>>2]|0;if((p|0)<(b|0)){x=p;a=s}else{F=b;G=s;break}}}else{F=z;G=A}if((u|0)<(G|0)){y=u;z=F;A=G}else{B=F;C=G;break}}}else{if((r|0)>0){H=0;I=q;J=r}else{B=r;C=q;break}while(1){a=H+1|0;if((a|0)<(I|0)){x=a;s=J;while(1){if((x|0)<(s|0)){b=j+16+(x*1548|0)+(H*12|0)|0;E=+g[b>>2];p=j+16+(x*1548|0)+(H*12|0)+4|0;D=+g[p>>2];d=j+16+(x*1548|0)+(H*12|0)+8|0;w=+g[d>>2];t=j+16+(H*1548|0)+(x*12|0)|0;g[b>>2]=+g[t>>2];b=j+16+(H*1548|0)+(x*12|0)+4|0;g[p>>2]=+g[b>>2];p=j+16+(H*1548|0)+(x*12|0)+8|0;g[d>>2]=+g[p>>2];g[t>>2]=E;g[b>>2]=D;g[p>>2]=w}else{g[j+16+(x*1548|0)+(H*12|0)>>2]=+g[j+16+(H*1548|0)+(x*12|0)>>2];g[j+16+(x*1548|0)+(H*12|0)+4>>2]=+g[j+16+(H*1548|0)+(x*12|0)+4>>2];g[j+16+(x*1548|0)+(H*12|0)+8>>2]=+g[j+16+(H*1548|0)+(x*12|0)+8>>2]}p=x+1|0;b=c[m>>2]|0;t=c[l>>2]|0;if((p|0)<(b|0)){x=p;s=t}else{K=b;L=t;break}}}else{K=I;L=J}if((a|0)<(L|0)){H=a;I=K;J=L}else{B=L;C=K;break}}}}while(0);c[l>>2]=C;c[m>>2]=B;K=c[n>>2]|0;c[n>>2]=c[o>>2];c[o>>2]=K;b:do{if((B|0)>0){K=C-1|0;L=0;while(1){J=0;while(1){w=+g[j+16+(L*12|0)+(J<<2)>>2]- +g[j+16+(K*1548|0)+(L*12|0)+(J<<2)>>2];I=J+1|0;if(w<-.1|w>.1){M=J;break}if((I|0)<3){J=I}else{M=I;break}}J=L+1|0;if((M|0)!=3){N=L;break b}if((J|0)<(B|0)){L=J}else{N=J;break}}}else{N=0}}while(0);c[n>>2]=(N|0)==(B|0);Kh(j);Lh(j);B=xj(40,0)|0;N=B;M=B;C=B+12|0;mn(M,C);L=c[l>>2]|0;K=c[m>>2]|0;if((L|0)>0){J=0;a=K;I=L;while(1){if((a|0)>0){H=0;do{nn(j+16+(J*1548|0)+(H*12|0)|0,M,C);H=H+1|0;O=c[m>>2]|0;}while((H|0)<(O|0));P=O;Q=c[l>>2]|0}else{P=a;Q=I}H=J+1|0;if((H|0)<(Q|0)){J=H;a=P;I=Q}else{R=Q;S=P;break}}}else{R=L;S=K}K=R-1|0;L=da(S-1|0,K)|0;c[469166]=L+(c[469166]|0);c[164940]=0;c[164944]=0;if((K|0)>0){K=0;L=S;P=R;while(1){Q=K+1|0;if((L-1|0)>0){I=0;while(1){a=j+16+(K*1548|0)+(I*12|0)|0;J=I+1|0;O=j+16+(Q*1548|0)+(J*12|0)|0;c[h+(K*1032|0)+(I<<3)>>2]=Ph(a,j+16+(Q*1548|0)+(I*12|0)|0,O)|0;c[h+(K*1032|0)+(I<<3)+4>>2]=Ph(O,j+16+(K*1548|0)+(J*12|0)|0,a)|0;T=c[m>>2]|0;if((J|0)<(T-1|0)){I=J}else{break}}U=T;V=c[l>>2]|0}else{U=L;V=P}if((Q|0)<(V-1|0)){K=Q;L=U;P=V}else{W=V;X=U;break}}}else{W=R;X=S}if((W-1|0)<=0){Y=c[164940]|0;Z=B+24|0;_=Z;c[_>>2]=Y;$=c[164944]|0;aa=B+32|0;ba=aa;c[ba>>2]=$;ca=c[164944]|0;ea=ca*320|0;fa=xj(ea,0)|0;ga=fa;ha=B+36|0;ia=ha;c[ia>>2]=ga;ja=c[164944]|0;ka=ja*320|0;Vx(fa|0,842472,ka)|0;la=c[164940]|0;ma=la*20|0;na=xj(ma,0)|0;oa=na;pa=B+28|0;qa=pa;c[qa>>2]=oa;ra=c[164940]|0;sa=ra*20|0;Vx(na|0,617632,sa)|0;ta=133128;ua=0;va=+g[M>>2];wa=va+-1.0;g[M>>2]=wa;xa=B+4|0;ya=xa;za=+g[ya>>2];Aa=za+-1.0;g[ya>>2]=Aa;Ba=B+8|0;Ca=Ba;Da=+g[Ca>>2];Ea=Da+-1.0;g[Ca>>2]=Ea;Fa=+g[C>>2];Ga=Fa+1.0;g[C>>2]=Ga;Ha=B+16|0;Ia=Ha;Ja=+g[Ia>>2];Ka=Ja+1.0;g[Ia>>2]=Ka;La=B+20|0;Ma=La;Na=+g[Ma>>2];Oa=Na+1.0;g[Ma>>2]=Oa;Pa=199708;Qa=0;i=e;return N|0}S=f|0;R=f+4|0;U=f+8|0;f=0;V=X;X=W;c:while(1){W=f+1|0;if((V-1|0)>0){P=(f|0)>0;L=f-1|0;K=h+(f*1032|0)|0;T=0;I=V;do{do{if((T|0)>0){Ra=T-1|0;v=62}else{if((c[o>>2]|0)==0){J=h+(f*1032|0)+(T<<3)|0;a=c[J>>2]|0;Sa=J;Ta=(a|0)==-1|0;Ua=a;v=63;break}else{Ra=I-2|0;v=62;break}}}while(0);if((v|0)==62){v=0;a=c[h+(f*1032|0)+(Ra<<3)+4>>2]|0;J=h+(f*1032|0)+(T<<3)|0;O=c[J>>2]|0;H=(a|0)==(O|0);q=H&1;if((a|0)==-1|H){Sa=J;Ta=q;Ua=O;v=63}else{Va=a;Wa=J;Xa=q;Ya=I}}if((v|0)==63){v=0;q=j+16+(f*1548|0)+(T*12|0)|0;J=j+16+(W*1548|0)+(T*12|0)|0;do{if((Ua|0)==-1){a=c[h+(f*1032|0)+(T<<3)+4>>2]|0;if(!((a|0)==-1)){Za=a;break}_i(50320,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;Za=-1}else{Za=Ua}}while(0);g[S>>2]=+g[q>>2]+ +g[617632+(Za*20|0)>>2]*4.0;g[R>>2]=+g[j+16+(f*1548|0)+(T*12|0)+4>>2]+ +g[617636+(Za*20|0)>>2]*4.0;g[U>>2]=+g[j+16+(f*1548|0)+(T*12|0)+8>>2]+ +g[617640+(Za*20|0)>>2]*4.0;a=Ph(q,J,S)|0;Va=a;Wa=Sa;Xa=Ta;Ya=c[m>>2]|0}do{if((T|0)<(Ya-2|0)){_a=h+(f*1032|0)+(T+1<<3)|0;v=71}else{if((c[o>>2]|0)!=0){_a=K;v=71;break}a=h+(f*1032|0)+(T<<3)+4|0;O=c[a>>2]|0;$a=a;ab=(O|0)==-1|0;bb=O;v=72}}while(0);if((v|0)==71){v=0;J=c[_a>>2]|0;q=h+(f*1032|0)+(T<<3)+4|0;O=c[q>>2]|0;a=(J|0)==(O|0);H=a&1;if((J|0)==-1|a){$a=q;ab=H;bb=O;v=72}else{cb=J;db=q;eb=H}}if((v|0)==72){v=0;H=T+1|0;q=j+16+(f*1548|0)+(H*12|0)|0;J=j+16+(W*1548|0)+(H*12|0)|0;do{if((bb|0)==-1){O=c[h+(f*1032|0)+(T<<3)>>2]|0;if(!((O|0)==-1)){fb=O;break}_i(50320,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;fb=-1}else{fb=bb}}while(0);g[S>>2]=+g[q>>2]+ +g[617632+(fb*20|0)>>2]*4.0;g[R>>2]=+g[j+16+(f*1548|0)+(H*12|0)+4>>2]+ +g[617636+(fb*20|0)>>2]*4.0;g[U>>2]=+g[j+16+(f*1548|0)+(H*12|0)+8>>2]+ +g[617640+(fb*20|0)>>2]*4.0;cb=Ph(J,q,S)|0;db=$a;eb=ab}do{if(P){gb=L;v=80}else{if((c[n>>2]|0)==0){hb=(c[db>>2]|0)==-1|0;v=81;break}else{gb=(c[l>>2]|0)-2|0;v=80;break}}}while(0);if((v|0)==80){v=0;q=c[h+(gb*1032|0)+(T<<3)>>2]|0;J=(q|0)==(c[db>>2]|0);H=J&1;if((q|0)==-1|J){hb=H;v=81}else{ib=q;jb=H}}if((v|0)==81){v=0;H=j+16+(f*1548|0)+(T*12|0)|0;q=j+16+(f*1548|0)+((T+1|0)*12|0)|0;J=c[h+(f*1032|0)+(T<<3)+4>>2]|0;do{if((J|0)==-1){O=c[h+(f*1032|0)+(T<<3)>>2]|0;if(!((O|0)==-1)){kb=O;break}_i(50320,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;kb=-1}else{kb=J}}while(0);g[S>>2]=+g[H>>2]+ +g[617632+(kb*20|0)>>2]*4.0;g[R>>2]=+g[j+16+(f*1548|0)+(T*12|0)+4>>2]+ +g[617636+(kb*20|0)>>2]*4.0;g[U>>2]=+g[j+16+(f*1548|0)+(T*12|0)+8>>2]+ +g[617640+(kb*20|0)>>2]*4.0;ib=Ph(q,H,S)|0;jb=hb}do{if((f|0)<((c[l>>2]|0)-2|0)){lb=h+(W*1032|0)+(T<<3)+4|0;v=90}else{if((c[n>>2]|0)==0){mb=(c[Wa>>2]|0)==-1|0;v=91;break}else{lb=h+(T<<3)+4|0;v=90;break}}}while(0);if((v|0)==90){v=0;H=c[lb>>2]|0;q=(H|0)==(c[Wa>>2]|0);J=q&1;if((H|0)==-1|q){mb=J;v=91}else{nb=H;ob=J}}if((v|0)==91){v=0;J=j+16+(W*1548|0)+(T*12|0)|0;H=j+16+(W*1548|0)+((T+1|0)*12|0)|0;q=c[h+(f*1032|0)+(T<<3)>>2]|0;do{if((q|0)==-1){O=c[h+(f*1032|0)+(T<<3)+4>>2]|0;if(!((O|0)==-1)){pb=O;break}_i(50320,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;pb=-1}else{pb=q}}while(0);g[S>>2]=+g[J>>2]+ +g[617632+(pb*20|0)>>2]*4.0;g[R>>2]=+g[j+16+(W*1548|0)+(T*12|0)+4>>2]+ +g[617636+(pb*20|0)>>2]*4.0;g[U>>2]=+g[j+16+(W*1548|0)+(T*12|0)+8>>2]+ +g[617640+(pb*20|0)>>2]*4.0;nb=Ph(J,H,S)|0;ob=mb}q=c[164944]|0;if((q|0)==1024){v=96;break c}O=842472+(q*320|0)|0;Zx(O|0,0,320)|0;a=c[Wa>>2]|0;do{if((a|0)==(c[db>>2]|0)){if((a|0)==-1){break}c[O>>2]=a;c[842476+(q*320|0)>>2]=4;c[842480+(q*320|0)>>2]=Va;c[842688+(q*320|0)>>2]=Xa;c[842484+(q*320|0)>>2]=nb;c[842692+(q*320|0)>>2]=ob;c[842488+(q*320|0)>>2]=cb;c[842696+(q*320|0)>>2]=eb;c[842492+(q*320|0)>>2]=ib;c[842700+(q*320|0)>>2]=jb;Qh(O,j,f,T,-1);if((Rh(O)|0)==0){break}Ih(O);c[164944]=(c[164944]|0)+1}else{c[O>>2]=a;c[842476+(q*320|0)>>2]=3;c[842480+(q*320|0)>>2]=Va;c[842688+(q*320|0)>>2]=Xa;c[842484+(q*320|0)>>2]=nb;c[842692+(q*320|0)>>2]=ob;r=c[db>>2]|0;G=842488+(q*320|0)|0;c[G>>2]=r;do{if((r|0)==-1){c[G>>2]=cb;if(!((cb|0)==-1)){break}F=T+1|0;A=j+16+(W*1548|0)+(F*12|0)|0;z=j+16+(f*1548|0)+(T*12|0)|0;y=c[h+(f*1032|0)+(T<<3)>>2]|0;do{if((y|0)==-1){s=c[h+(f*1032|0)+(T<<3)+4>>2]|0;if(!((s|0)==-1)){qb=s;break}_i(50320,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;qb=-1}else{qb=y}}while(0);g[S>>2]=+g[A>>2]+ +g[617632+(qb*20|0)>>2]*4.0;g[R>>2]=+g[j+16+(W*1548|0)+(F*12|0)+4>>2]+ +g[617636+(qb*20|0)>>2]*4.0;g[U>>2]=+g[j+16+(W*1548|0)+(F*12|0)+8>>2]+ +g[617640+(qb*20|0)>>2]*4.0;c[G>>2]=Ph(A,z,S)|0}}while(0);Qh(O,j,f,T,0);if((Rh(O)|0)==0){rb=c[164944]|0}else{Ih(O);G=(c[164944]|0)+1|0;c[164944]=G;rb=G}if((rb|0)==1024){v=111;break c}G=842472+(rb*320|0)|0;Zx(G|0,0,320)|0;c[G>>2]=c[db>>2];c[842476+(rb*320|0)>>2]=3;c[842480+(rb*320|0)>>2]=cb;c[842688+(rb*320|0)>>2]=eb;c[842484+(rb*320|0)>>2]=ib;c[842692+(rb*320|0)>>2]=jb;r=c[Wa>>2]|0;y=842488+(rb*320|0)|0;c[y>>2]=r;do{if((r|0)==-1){c[y>>2]=Va;if(!((Va|0)==-1)){break}s=j+16+(f*1548|0)+(T*12|0)|0;x=j+16+(W*1548|0)+((T+1|0)*12|0)|0;u=c[h+(f*1032|0)+(T<<3)+4>>2]|0;do{if((u|0)==-1){t=c[h+(f*1032|0)+(T<<3)>>2]|0;if(!((t|0)==-1)){sb=t;break}_i(50320,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;sb=-1}else{sb=u}}while(0);g[S>>2]=+g[s>>2]+ +g[617632+(sb*20|0)>>2]*4.0;g[R>>2]=+g[j+16+(f*1548|0)+(T*12|0)+4>>2]+ +g[617636+(sb*20|0)>>2]*4.0;g[U>>2]=+g[j+16+(f*1548|0)+(T*12|0)+8>>2]+ +g[617640+(sb*20|0)>>2]*4.0;c[y>>2]=Ph(s,x,S)|0}}while(0);Qh(G,j,f,T,1);if((Rh(G)|0)==0){break}Ih(G);c[164944]=(c[164944]|0)+1}}while(0);T=T+1|0;I=c[m>>2]|0;}while((T|0)<(I-1|0));tb=I;ub=c[l>>2]|0}else{tb=V;ub=X}if((W|0)<(ub-1|0)){f=W;V=tb;X=ub}else{v=123;break}}if((v|0)==96){aj(1,54440,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}else if((v|0)==111){aj(1,54440,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;return 0}else if((v|0)==123){Y=c[164940]|0;Z=B+24|0;_=Z;c[_>>2]=Y;$=c[164944]|0;aa=B+32|0;ba=aa;c[ba>>2]=$;ca=c[164944]|0;ea=ca*320|0;fa=xj(ea,0)|0;ga=fa;ha=B+36|0;ia=ha;c[ia>>2]=ga;ja=c[164944]|0;ka=ja*320|0;Vx(fa|0,842472,ka)|0;la=c[164940]|0;ma=la*20|0;na=xj(ma,0)|0;oa=na;pa=B+28|0;qa=pa;c[qa>>2]=oa;ra=c[164940]|0;sa=ra*20|0;Vx(na|0,617632,sa)|0;ta=133128;ua=0;va=+g[M>>2];wa=va+-1.0;g[M>>2]=wa;xa=B+4|0;ya=xa;za=+g[ya>>2];Aa=za+-1.0;g[ya>>2]=Aa;Ba=B+8|0;Ca=Ba;Da=+g[Ca>>2];Ea=Da+-1.0;g[Ca>>2]=Ea;Fa=+g[C>>2];Ga=Fa+1.0;g[C>>2]=Ga;Ha=B+16|0;Ia=Ha;Ja=+g[Ia>>2];Ka=Ja+1.0;g[Ia>>2]=Ka;La=B+20|0;Ma=La;Na=+g[Ma>>2];Oa=Na+1.0;g[Ma>>2]=Oa;Pa=199708;Qa=0;i=e;return N|0}return 0}function Kh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.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.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0;b=a|0;d=c[b>>2]|0;if((d-2|0)<=0){return}e=a+4|0;f=0;h=d;d=c[e>>2]|0;a:while(1){i=f+1|0;j=f+2|0;k=f+3|0;l=d;m=h;n=d;while(1){o=(l|0)>0;b:do{if(o){p=0;while(1){q=+g[a+16+(f*1548|0)+(p*12|0)>>2];r=+g[a+16+(j*1548|0)+(p*12|0)>>2];s=+g[a+16+(f*1548|0)+(p*12|0)+4>>2];t=+g[a+16+(j*1548|0)+(p*12|0)+4>>2];u=+g[a+16+(f*1548|0)+(p*12|0)+8>>2];v=+g[a+16+(j*1548|0)+(p*12|0)+8>>2];w=+g[a+16+(i*1548|0)+(p*12|0)>>2];x=+g[a+16+(i*1548|0)+(p*12|0)+4>>2];y=+g[a+16+(i*1548|0)+(p*12|0)+8>>2];z=((q+w)*.5+(r+w)*.5)*.5-(q+r)*.5;r=((s+x)*.5+(t+x)*.5)*.5-(s+t)*.5;t=((u+y)*.5+(v+y)*.5)*.5-(u+v)*.5;A=p+1|0;if(!(+T(z*z+r*r+t*t)<16.0)){B=p;break b}if((A|0)<(l|0)){p=A}else{B=A;break}}}else{B=0}}while(0);if((B|0)==(l|0)){break}if(o){p=0;A=m;while(1){t=+g[a+16+(f*1548|0)+(p*12|0)>>2];r=+g[a+16+(f*1548|0)+(p*12|0)+4>>2];z=+g[a+16+(f*1548|0)+(p*12|0)+8>>2];C=a+16+(i*1548|0)+(p*12|0)|0;v=+g[C>>2];D=a+16+(i*1548|0)+(p*12|0)+4|0;u=+g[D>>2];E=a+16+(i*1548|0)+(p*12|0)+8|0;y=+g[E>>2];F=a+16+(j*1548|0)+(p*12|0)|0;s=+g[F>>2];G=a+16+(j*1548|0)+(p*12|0)+4|0;x=+g[G>>2];H=a+16+(j*1548|0)+(p*12|0)+8|0;q=+g[H>>2];I=A-1|0;if((I|0)>(i|0)){J=A;K=I;while(1){I=J+1|0;g[a+16+(I*1548|0)+(p*12|0)>>2]=+g[a+16+(K*1548|0)+(p*12|0)>>2];g[a+16+(I*1548|0)+(p*12|0)+4>>2]=+g[a+16+(K*1548|0)+(p*12|0)+4>>2];g[a+16+(I*1548|0)+(p*12|0)+8>>2]=+g[a+16+(K*1548|0)+(p*12|0)+8>>2];I=K-1|0;if((I|0)>(i|0)){J=K;K=I}else{break}}}w=(t+v)*.5;g[C>>2]=w;L=(v+s)*.5;g[a+16+(k*1548|0)+(p*12|0)>>2]=L;g[F>>2]=(L+w)*.5;w=(r+u)*.5;g[D>>2]=w;L=(u+x)*.5;g[a+16+(k*1548|0)+(p*12|0)+4>>2]=L;g[G>>2]=(L+w)*.5;w=(z+y)*.5;g[E>>2]=w;L=(y+q)*.5;g[a+16+(k*1548|0)+(p*12|0)+8>>2]=L;g[H>>2]=(L+w)*.5;K=p+1|0;J=c[e>>2]|0;I=c[b>>2]|0;if((K|0)<(J|0)){p=K;A=I}else{M=J;N=I;O=J;break}}}else{M=l;N=m;O=n}A=N+2|0;c[b>>2]=A;if((f|0)<(N|0)){l=M;m=A;n=O}else{P=19;break a}}if(o){k=0;A=m;p=l;J=n;while(1){if((j|0)<(A|0)){I=j;do{K=I-1|0;g[a+16+(K*1548|0)+(k*12|0)>>2]=+g[a+16+(I*1548|0)+(k*12|0)>>2];g[a+16+(K*1548|0)+(k*12|0)+4>>2]=+g[a+16+(I*1548|0)+(k*12|0)+4>>2];g[a+16+(K*1548|0)+(k*12|0)+8>>2]=+g[a+16+(I*1548|0)+(k*12|0)+8>>2];I=I+1|0;Q=c[b>>2]|0;}while((I|0)<(Q|0));I=c[e>>2]|0;R=Q;S=I;U=I}else{R=A;S=p;U=J}I=k+1|0;if((I|0)<(S|0)){k=I;A=R;p=S;J=U}else{V=R;W=U;break}}}else{V=m;W=n}J=V-1|0;c[b>>2]=J;if((i|0)<(V-3|0)){f=i;h=J;d=W}else{P=19;break}}if((P|0)==19){return}}function Lh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.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;b=a|0;d=c[b>>2]|0;if((d-1|0)<=0){return}e=a+4|0;f=0;h=c[e>>2]|0;i=d;while(1){d=(h|0)>0;a:do{if(d){j=f+1|0;k=0;while(1){l=+g[a+16+(f*1548|0)+(k*12|0)>>2]- +g[a+16+(j*1548|0)+(k*12|0)>>2];if(l<-.1|l>.1){m=k;break a}l=+g[a+16+(f*1548|0)+(k*12|0)+4>>2]- +g[a+16+(j*1548|0)+(k*12|0)+4>>2];if(l<-.1|l>.1){m=k;break a}l=+g[a+16+(f*1548|0)+(k*12|0)+8>>2]- +g[a+16+(j*1548|0)+(k*12|0)+8>>2];n=k+1|0;if(l<-.1|l>.1){m=k;break a}if((n|0)<(h|0)){k=n}else{m=n;break}}}else{m=0}}while(0);if((m|0)==(h|0)){if(d){k=f+2|0;j=0;n=i;o=h;while(1){if((k|0)<(n|0)){p=k;do{q=p-1|0;g[a+16+(q*1548|0)+(j*12|0)>>2]=+g[a+16+(p*1548|0)+(j*12|0)>>2];g[a+16+(q*1548|0)+(j*12|0)+4>>2]=+g[a+16+(p*1548|0)+(j*12|0)+4>>2];g[a+16+(q*1548|0)+(j*12|0)+8>>2]=+g[a+16+(p*1548|0)+(j*12|0)+8>>2];p=p+1|0;r=c[b>>2]|0;}while((p|0)<(r|0));s=r;t=c[e>>2]|0}else{s=n;t=o}p=j+1|0;if((p|0)<(t|0)){j=p;n=s;o=t}else{u=t;v=s;break}}}else{u=h;v=i}o=v-1|0;c[b>>2]=o;w=f-1|0;x=u;y=o}else{w=f;x=h;y=i}o=w+1|0;if((o|0)<(y-1|0)){f=o;h=x;i=y}else{break}}return}function Mh(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.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.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.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;d=i;i=i+16384|0;e=d|0;f=d+8192|0;if((c[(c[469092]|0)+32>>2]|0)==0){h=8192;j=0;k=8192;l=0;i=d;return}if((c[a+200>>2]|0)==0){h=8192;j=0;k=8192;l=0;i=d;return}m=b+28|0;n=c[b+24>>2]|0;if((n|0)>0){o=+g[a>>2];p=+g[a+4>>2];q=+g[a+8>>2];r=+g[a+12>>2];s=+g[a+16>>2];t=+g[a+20>>2];u=0;v=c[m>>2]|0;while(1){w=c[v+16>>2]|0;x=+g[v>>2];y=+g[v+4>>2];z=+g[v+8>>2];A=+g[a+48+(w*12|0)>>2]*x+ +g[a+48+(w*12|0)+4>>2]*y+ +g[a+48+(w*12|0)+8>>2]*z;B=+g[v+12>>2];C=A+(x*o+y*p+z*q-B);D=A+(x*r+y*s+z*t-B);c[e+(u<<2)>>2]=C>0.0;do{if(C==D){g[f+(u<<2)>>2]=99999.0}else{B=C/(C-D);w=f+(u<<2)|0;g[w>>2]=B;if(B>0.0){break}g[w>>2]=99999.0}}while(0);w=u+1|0;if((w|0)<(n|0)){u=w;v=v+20|0}else{break}}}v=b+32|0;u=c[v>>2]|0;if((u|0)<=0){h=8192;j=0;k=8192;l=0;i=d;return}n=a+212|0;w=a|0;E=a+4|0;F=a+8|0;G=a+12|0;H=a+16|0;I=a+20|0;J=a+228|0;K=a+232|0;L=a+236|0;M=a+240|0;N=c[b+36>>2]|0;O=0;P=u;while(1){u=N|0;Q=c[u>>2]|0;do{if((c[e+(Q<<2)>>2]|0)==0){R=P}else{t=+g[f+(Q<<2)>>2];if(t<0.0){R=P;break}if(t>+g[n>>2]){R=P;break}S=c[N+4>>2]|0;a:do{if((S|0)>0){T=0;while(1){U=c[N+8+(T<<2)>>2]|0;s=+g[f+(U<<2)>>2];if((c[e+(U<<2)>>2]|0)==(c[N+112+(T<<2)>>2]|0)){if(s<t){V=T;break a}}else{if(s>t){V=T;break a}}U=T+1|0;if((U|0)<(S|0)){T=U}else{V=U;break}}}else{V=0}}while(0);if((V|0)!=(S|0)){R=P;break}T=c[661394]|0;if((T|0)==0){U=jk(21520,18648,0)|0;c[661394]=U;W=U}else{W=T}if((c[W+32>>2]|0)!=0){c[378052]=b;c[378054]=N}T=c[u>>2]|0;U=c[m>>2]|0;X=c[U+(T*20|0)+16>>2]|0;Y=U+(T*20|0)|0;t=+g[Y>>2];Z=U+(T*20|0)+4|0;s=+g[Z>>2];_=U+(T*20|0)+8|0;r=+g[_>>2];q=+g[a+48+(X*12|0)>>2]*t+ +g[a+48+(X*12|0)+4>>2]*s+ +g[a+48+(X*12|0)+8>>2]*r;X=U+(T*20|0)+12|0;p=+g[X>>2];o=q+(t*+g[w>>2]+s*+g[E>>2]+r*+g[F>>2]-p);D=(o+-.125)/(o-(q+(t*+g[G>>2]+s*+g[H>>2]+r*+g[I>>2]-p)));g[n>>2]=D<0.0?0.0:D;g[J>>2]=+g[Y>>2];g[K>>2]=+g[Z>>2];g[L>>2]=+g[_>>2];g[M>>2]=+g[X>>2];R=c[v>>2]|0}}while(0);u=O+1|0;if((u|0)<(R|0)){N=N+320|0;O=u;P=R}else{break}}h=8192;j=0;k=8192;l=0;i=d;return}function Nh(a,b){a=a|0;b=b|0;var d=0,e=0,f=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,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0,va=0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0,Ma=0,Na=0.0,Oa=0.0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0,Xa=0.0,Ya=0.0,Za=0.0,_a=0;if((hi(a+160|0,a+172|0,b|0,b+12|0)|0)==0){return}if((c[a+200>>2]|0)!=0){Mh(a,b);return}d=b+32|0;e=c[d>>2]|0;if((e|0)<=0){return}f=b+28|0;h=a+260|0;i=a|0;j=a+4|0;k=a+8|0;l=a+12|0;m=a+16|0;n=a+20|0;o=a+212|0;p=a+228|0;q=a+232|0;r=a+236|0;s=a+240|0;t=a+264|0;u=a+272|0;v=a+276|0;w=a+280|0;x=1;y=c[b+36>>2]|0;z=0.0;A=0.0;B=0.0;C=0.0;D=e;while(1){e=c[y>>2]|0;E=c[f>>2]|0;F=+g[E+(e*20|0)>>2];G=+g[E+(e*20|0)+4>>2];H=+g[E+(e*20|0)+8>>2];I=+g[E+(e*20|0)+12>>2];J=(c[h>>2]|0)==0;do{if(J){K=c[E+(e*20|0)+16>>2]|0;L=+g[i>>2];M=+g[j>>2];N=+g[k>>2];O=+g[l>>2];P=+g[m>>2];Q=+g[n>>2];R=O;T=P;U=Q;V=L;W=M;X=N;Y=I-(F*+g[a+48+(K*12|0)>>2]+G*+g[a+48+(K*12|0)+4>>2]+H*+g[a+48+(K*12|0)+8>>2]);Z=L;_=M;$=N;aa=O;ba=P;ca=Q}else{Q=I+ +g[t>>2];P=+g[u>>2];O=+g[v>>2];N=+g[w>>2];M=+g[i>>2];if(F*P+G*O+H*N>0.0){L=+g[j>>2];da=+g[k>>2];ea=+g[l>>2];fa=+g[m>>2];ga=+g[n>>2];R=ea-P;T=fa-O;U=ga-N;V=M-P;W=L-O;X=da-N;Y=Q;Z=M;_=L;$=da;aa=ea;ba=fa;ca=ga;break}else{ga=+g[j>>2];fa=+g[k>>2];ea=+g[l>>2];da=+g[m>>2];L=+g[n>>2];R=P+ea;T=O+da;U=N+L;V=P+M;W=O+ga;X=N+fa;Y=Q;Z=M;_=ga;$=fa;aa=ea;ba=da;ca=L;break}}}while(0);I=H*X+(G*W+F*V)-Y;L=H*U+(G*T+F*R)-Y;if(I>0.0){if(L<.125&L<I){ha=13}else{ia=C;ja=B;ka=A;la=z;ma=D}}else{ha=13}do{if((ha|0)==13){ha=0;do{if(I>0.0|L>0.0){da=I;if(I>L){ea=(da+-.125)/(I-L);fa=ea<0.0?0.0:ea;if(fa>-1.0){na=F;oa=G;pa=H;qa=Y;ra=1.0;sa=fa;break}else{ta=1.0;ha=18;break}}fa=(da+.125)/(I-L);da=fa>1.0?1.0:fa;if(!(da<1.0)){ta=1.0;ha=18;break}ta=da;ha=18}else{ta=1.0;ha=18}}while(0);if((ha|0)==18){ha=0;na=C;oa=B;pa=A;qa=z;ra=ta;sa=-1.0}e=c[y+4>>2]|0;a:do{if((e|0)>0){da=sa;fa=ra;K=0;ua=-1;ea=qa;ga=pa;M=oa;Q=na;while(1){va=c[y+8+(K<<2)>>2]|0;N=+g[E+(va*20|0)>>2];if((c[y+112+(K<<2)>>2]|0)==0){wa=+g[E+(va*20|0)+12>>2];xa=N;ya=+g[E+(va*20|0)+4>>2];za=+g[E+(va*20|0)+8>>2]}else{wa=-0.0- +g[E+(va*20|0)+12>>2];xa=-0.0-N;ya=-0.0- +g[E+(va*20|0)+4>>2];za=-0.0- +g[E+(va*20|0)+8>>2]}do{if(J){Aa=c[E+(va*20|0)+16>>2]|0;Ba=aa;Ca=ba;Da=ca;Ea=Z;Fa=_;Ga=$;Ha=wa+ +S(+(xa*+g[a+48+(Aa*12|0)>>2]+ya*+g[a+48+(Aa*12|0)+4>>2]+za*+g[a+48+(Aa*12|0)+8>>2]))}else{N=wa+ +g[t>>2];O=+g[u>>2];P=+g[v>>2];Ia=+g[w>>2];if(xa*O+ya*P+za*Ia>0.0){Ba=aa-O;Ca=ba-P;Da=ca-Ia;Ea=Z-O;Fa=_-P;Ga=$-Ia;Ha=N;break}else{Ba=O+aa;Ca=P+ba;Da=Ia+ca;Ea=O+Z;Fa=P+_;Ga=Ia+$;Ha=N;break}}}while(0);N=za*Ga+(ya*Fa+xa*Ea)-Ha;Ia=za*Da+(ya*Ca+xa*Ba)-Ha;if(N>0.0){if(!(Ia<.125&Ia<N)){Ja=da;Ka=fa;La=K;Ma=ua;Na=ea;Oa=ga;Pa=M;Qa=Q;break a}}do{if(N>0.0|Ia>0.0){P=N;if(N>Ia){O=(P+-.125)/(N-Ia);Ra=O<0.0?0.0:O;if(Ra>da){Sa=xa;Ta=ya;Ua=za;Va=Ha;Wa=K;Xa=Ra;Ya=fa;break}else{Za=fa;ha=35;break}}Ra=(P+.125)/(N-Ia);P=Ra>1.0?1.0:Ra;if(!(P<fa)){Za=fa;ha=35;break}Za=P;ha=35}else{Za=fa;ha=35}}while(0);if((ha|0)==35){ha=0;Sa=Q;Ta=M;Ua=ga;Va=ea;Wa=ua;Xa=da;Ya=Za}va=K+1|0;if((va|0)<(e|0)){da=Xa;fa=Ya;K=va;ua=Wa;ea=Va;ga=Ua;M=Ta;Q=Sa}else{Ja=Xa;Ka=Ya;La=va;Ma=Wa;Na=Va;Oa=Ua;Pa=Ta;Qa=Sa;break}}}else{Ja=sa;Ka=ra;La=0;Ma=-1;Na=qa;Oa=pa;Pa=oa;Qa=na}}while(0);if((La|0)<(e|0)|(Ma|0)==(e-1|0)){ia=Qa;ja=Pa;ka=Oa;la=Na;ma=D;break}if(!(Ja<Ka&Ja>=0.0)){ia=Qa;ja=Pa;ka=Oa;la=Na;ma=D;break}if(!(Ja<+g[o>>2])){ia=Qa;ja=Pa;ka=Oa;la=Na;ma=D;break}Q=Ja<0.0?0.0:Ja;ua=c[661392]|0;if((ua|0)==0){K=jk(21520,18648,0)|0;c[661392]=K;if((K|0)!=0){_a=K;ha=42}}else{_a=ua;ha=42}do{if((ha|0)==42){ha=0;if((c[_a+32>>2]|0)==0){break}c[378052]=b;c[378054]=y}}while(0);g[o>>2]=Q;g[p>>2]=Qa;g[q>>2]=Pa;g[r>>2]=Oa;g[s>>2]=Na;ia=Qa;ja=Pa;ka=Oa;la=Na;ma=c[d>>2]|0}}while(0);if((x|0)>=(ma|0)){break}x=x+1|0;y=y+320|0;z=la;A=ka;B=ja;C=ia;D=ma}return}function Oh(a,b){a=a|0;b=b|0;var d=0,e=0,f=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,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0;if((c[a+200>>2]|0)!=0){d=0;return d|0}e=c[b+32>>2]|0;if((e|0)<=0){d=0;return d|0}f=c[b+28>>2]|0;h=(c[a+260>>2]|0)==0;i=a|0;j=a+4|0;k=a+8|0;l=a+264|0;m=a+272|0;n=a+276|0;o=a+280|0;p=0;q=c[b+36>>2]|0;while(1){b=c[q>>2]|0;r=+g[f+(b*20|0)>>2];s=+g[f+(b*20|0)+4>>2];t=+g[f+(b*20|0)+8>>2];u=+g[f+(b*20|0)+12>>2];do{if(h){v=c[f+(b*20|0)+16>>2]|0;w=+g[i>>2];x=+g[j>>2];y=+g[k>>2];z=w;A=x;B=y;C=u-(r*+g[a+48+(v*12|0)>>2]+s*+g[a+48+(v*12|0)+4>>2]+t*+g[a+48+(v*12|0)+8>>2]);D=w;E=x;F=y}else{y=u+ +g[l>>2];x=+g[m>>2];w=+g[n>>2];G=+g[o>>2];H=+g[i>>2];if(r*x+s*w+t*G>0.0){I=+g[j>>2];J=+g[k>>2];z=H-x;A=I-w;B=J-G;C=y;D=H;E=I;F=J;break}else{J=+g[j>>2];I=+g[k>>2];z=x+H;A=w+J;B=G+I;C=y;D=H;E=J;F=I;break}}}while(0);if(!(t*B+(s*A+r*z)-C>0.0)){b=c[q+4>>2]|0;a:do{if((b|0)>0){if(h){v=0;while(1){K=c[q+8+(v<<2)>>2]|0;u=+g[f+(K*20|0)>>2];if((c[q+112+(v<<2)>>2]|0)==0){L=u;M=+g[f+(K*20|0)+4>>2];N=+g[f+(K*20|0)+8>>2];O=+g[f+(K*20|0)+12>>2]}else{L=-0.0-u;M=-0.0- +g[f+(K*20|0)+4>>2];N=-0.0- +g[f+(K*20|0)+8>>2];O=-0.0- +g[f+(K*20|0)+12>>2]}P=c[f+(K*20|0)+16>>2]|0;K=v+1|0;if(N*F+(M*E+L*D)-(O+ +S(+(L*+g[a+48+(P*12|0)>>2]+M*+g[a+48+(P*12|0)+4>>2]+N*+g[a+48+(P*12|0)+8>>2])))>0.0){Q=v;break a}if((K|0)<(b|0)){v=K}else{Q=K;break a}}}else{R=0}while(1){v=c[q+8+(R<<2)>>2]|0;u=+g[f+(v*20|0)>>2];if((c[q+112+(R<<2)>>2]|0)==0){T=u;U=+g[f+(v*20|0)+4>>2];V=+g[f+(v*20|0)+8>>2];W=+g[f+(v*20|0)+12>>2]}else{T=-0.0-u;U=-0.0- +g[f+(v*20|0)+4>>2];V=-0.0- +g[f+(v*20|0)+8>>2];W=-0.0- +g[f+(v*20|0)+12>>2]}u=+g[m>>2];I=+g[n>>2];J=+g[o>>2];if(T*u+U*I+V*J>0.0){X=D-u;Y=E-I;Z=F-J}else{X=u+D;Y=I+E;Z=J+F}v=R+1|0;if(V*Z+(U*Y+T*X)-(W+ +g[l>>2])>0.0){Q=R;break a}if((v|0)<(b|0)){R=v}else{Q=v;break}}}else{Q=0}}while(0);if((Q|0)>=(b|0)){d=1;_=27;break}}v=p+1|0;if((v|0)<(e|0)){p=v;q=q+320|0}else{d=0;_=27;break}}if((_|0)==27){return d|0}return 0}function Ph(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0;e=i;i=i+16|0;f=e|0;h=f|0;j=b+4|0;k=b+8|0;l=d+4|0;m=d+8|0;n=+g[a>>2];o=+g[b>>2]-n;p=a+4|0;q=+g[p>>2];r=+g[j>>2]-q;s=a+8|0;t=+g[s>>2];u=+g[k>>2]-t;v=+g[d>>2]-n;n=+g[l>>2]-q;q=+g[m>>2]-t;g[h>>2]=n*u-r*q;w=f+4|0;g[w>>2]=o*q-v*u;x=f+8|0;g[x>>2]=v*r-o*n;if(+dn(h)==0.0){y=-1;i=e;return y|0}n=+g[a>>2];o=+g[h>>2];r=+g[p>>2];v=+g[w>>2];u=+g[s>>2];q=+g[x>>2];t=n*o+r*v+u*q;g[f+12>>2]=t;f=c[164940]|0;do{if((f|0)>0){x=0;a:do{z=+g[617632+(x*20|0)>>2];A=+g[617636+(x*20|0)>>2];B=+g[617640+(x*20|0)>>2];do{if(!(o*z+v*A+q*B<0.0)){C=+g[617644+(x*20|0)>>2];D=z*n+A*r+B*u-C;if(D<-.1|D>.1){break}D=z*+g[b>>2]+A*+g[j>>2]+B*+g[k>>2]-C;if(D<-.1|D>.1){break}D=z*+g[d>>2]+A*+g[l>>2]+B*+g[m>>2]-C;if(!(D<-.1|D>.1)){y=x;E=11;break a}}}while(0);x=x+1|0;}while((x|0)<(f|0));if((E|0)==11){i=e;return y|0}if((f|0)!=2048){break}aj(1,28984,(x=i,i=i+1|0,i=i+7&-8,c[x>>2]=0,x)|0);i=x;return 0}}while(0);g[617632+(f*20|0)>>2]=o;g[617636+(f*20|0)>>2]=v;g[617640+(f*20|0)>>2]=q;g[617644+(f*20|0)>>2]=t;E=o<0.0|0;m=v<0.0?E|2:E;c[617648+(f*20|0)>>2]=q<0.0?m|4:m;c[164940]=f+1;y=f;i=e;return y|0}function Qh(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|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.0,L=0;j=i;i=i+16|0;k=j|0;if((h|0)==1){l=f+1|0;c[k>>2]=d+16+((e+1|0)*1548|0)+(l*12|0);c[k+4>>2]=d+16+(e*1548|0)+(l*12|0);c[k+8>>2]=d+16+(e*1548|0)+(f*12|0);m=3}else if((h|0)==0){c[k>>2]=d+16+(e*1548|0)+(f*12|0);l=e+1|0;c[k+4>>2]=d+16+(l*1548|0)+(f*12|0);c[k+8>>2]=d+16+(l*1548|0)+((f+1|0)*12|0);m=3}else if((h|0)==(-1|0)){c[k>>2]=d+16+(e*1548|0)+(f*12|0);h=e+1|0;c[k+4>>2]=d+16+(h*1548|0)+(f*12|0);l=f+1|0;c[k+8>>2]=d+16+(h*1548|0)+(l*12|0);c[k+12>>2]=d+16+(e*1548|0)+(l*12|0);m=4}else{aj(0,53352,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n}l=b+4|0;if((c[l>>2]|0)<=0){i=j;return}h=d+16+(e*1548|0)+(f*12|0)|0;o=d+16+(e*1548|0)+(f*12|0)+4|0;p=d+16+(e*1548|0)+(f*12|0)+8|0;q=e+1|0;r=d+16+(q*1548|0)+(f*12|0)|0;s=d+16+(q*1548|0)+(f*12|0)+4|0;t=d+16+(q*1548|0)+(f*12|0)+8|0;u=f+1|0;f=d+16+(q*1548|0)+(u*12|0)|0;v=d+16+(q*1548|0)+(u*12|0)+4|0;w=d+16+(q*1548|0)+(u*12|0)+8|0;q=d+16+(e*1548|0)+(u*12|0)|0;x=d+16+(e*1548|0)+(u*12|0)+4|0;y=d+16+(e*1548|0)+(u*12|0)+8|0;u=0;do{e=b+8+(u<<2)|0;d=c[e>>2]|0;z=617632+(d*20|0)|0;A=617636+(d*20|0)|0;B=617640+(d*20|0)|0;C=617644+(d*20|0)|0;do{if((d|0)==-1){D=0;while(1){E=D+1|0;if((E|0)<(m|0)){D=E}else{F=0;G=0;H=17;break}}}else{D=0;E=0;I=0;do{J=c[k+(D<<2)>>2]|0;K=+g[J>>2]*+g[z>>2]+ +g[J+4>>2]*+g[A>>2]+ +g[J+8>>2]*+g[B>>2]- +g[C>>2];if(K>.1){L=0}else{L=K<-.1?1:2}E=((L|0)==0)+E|0;I=((L|0)==1)+I|0;D=D+1|0;}while((D|0)<(m|0));D=(E|0)!=0;J=(I|0)==0;if(D&J){c[b+112+(u<<2)>>2]=1;break}if(D|J){F=E;G=I;H=17;break}c[b+112+(u<<2)>>2]=0}}while(0);do{if((H|0)==17){H=0;if((G|F|0)==0){c[e>>2]=-1;break}$i(52240,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;c[b+112+(u<<2)>>2]=0;if(a[7736]|0){break}a[7736]=1;g[1932]=+g[h>>2];g[1930]=+g[o>>2];g[1928]=+g[p>>2];g[1926]=+g[r>>2];g[1924]=+g[s>>2];g[1922]=+g[t>>2];g[1920]=+g[f>>2];g[1918]=+g[v>>2];g[1916]=+g[w>>2];g[1914]=+g[q>>2];g[1912]=+g[x>>2];g[1910]=+g[y>>2]}}while(0);u=u+1|0;}while((u|0)<(c[l>>2]|0));i=j;return}function Rh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0;b=i;i=i+48|0;d=b|0;e=b+16|0;f=b+24|0;h=c[a>>2]|0;if((h|0)==-1){j=0;i=b;return j|0}k=d|0;g[k>>2]=+g[617632+(h*20|0)>>2];l=d+4|0;g[l>>2]=+g[617636+(h*20|0)>>2];m=d+8|0;g[m>>2]=+g[617640+(h*20|0)>>2];n=+g[617644+(h*20|0)>>2];h=d+12|0;g[h>>2]=n;d=Uh(k,n)|0;c[e>>2]=d;o=a+4|0;p=(d|0)==0;a:do{if((c[o>>2]|0)>0){q=0;r=d;s=p;while(1){if(s){j=0;t=13;break}u=c[a+8+(q<<2)>>2]|0;if((u|0)==-1){break}n=+g[617632+(u*20|0)>>2];g[k>>2]=n;v=+g[617636+(u*20|0)>>2];g[l>>2]=v;w=+g[617640+(u*20|0)>>2];g[m>>2]=w;x=+g[617644+(u*20|0)>>2];g[h>>2]=x;if((c[a+112+(q<<2)>>2]|0)==0){g[k>>2]=+g[15616]-n;g[l>>2]=+g[15617]-v;g[m>>2]=+g[15618]-w;w=-0.0-x;g[h>>2]=w;y=w}else{y=x}Wh(e,k,y,.10000000149011612);u=q+1|0;z=c[e>>2]|0;A=(z|0)==0;if((u|0)<(c[o>>2]|0)){q=u;r=z;s=A}else{B=z;C=A;break a}}if((t|0)==13){i=b;return j|0}Sh(r);j=0;i=b;return j|0}else{B=d;C=p}}while(0);if(C){j=0;i=b;return j|0}Th(B,f|0,f+12|0);Sh(c[e>>2]|0);e=0;while(1){y=+g[f+12+(e<<2)>>2];x=+g[f+(e<<2)>>2];B=e+1|0;if(!(y-x<=65535.0&x<65535.0&y>-65535.0)){j=0;t=13;break}if((B|0)<3){e=B}else{j=1;t=13;break}}if((t|0)==13){i=b;return j|0}return 0}function Sh(a){a=a|0;var b=0,d=0,e=0;b=i;d=a|0;if((c[d>>2]|0)==-559030611){aj(0,53112,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}else{c[d>>2]=-559030611;c[469176]=(c[469176]|0)-1;mj(a);i=b;return}}function Th(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;e=b+8|0;g[e>>2]=65535.0;f=b+4|0;g[f>>2]=65535.0;g[b>>2]=65535.0;h=d+8|0;g[h>>2]=-65535.0;i=d+4|0;g[i>>2]=-65535.0;g[d>>2]=-65535.0;j=c[a>>2]|0;if((j|0)>0){k=0}else{return}do{l=+g[a+4+(k*12|0)>>2];if(l<+g[b>>2]){g[b>>2]=l}if(l>+g[d>>2]){g[d>>2]=l}l=+g[a+4+(k*12|0)+4>>2];if(l<+g[f>>2]){g[f>>2]=l}if(l>+g[i>>2]){g[i>>2]=l}l=+g[a+4+(k*12|0)+8>>2];if(l<+g[e>>2]){g[e>>2]=l}if(l>+g[h>>2]){g[h>>2]=l}k=k+1|0;}while((k|0)<(j|0));return}function Uh(a,b){a=a|0;b=+b;var d=0,e=0,f=0.0,h=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;d=i;i=i+16|0;e=d|0;f=+g[a>>2];h=+S(+f);j=h>-65535.0;k=j?h:-65535.0;l=a+4|0;h=+g[l>>2];m=+S(+h);n=m>k;o=a+8|0;p=+g[o>>2];q=+S(+p)>(n?m:k);r=q?2:n?1:(j^1)<<31>>31;if((r|0)==-1){aj(1,44336,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;return 0}k=+g[15616];j=e|0;g[j>>2]=k;m=+g[15617];n=e+4|0;g[n>>2]=m;s=+g[15618];q=e+8|0;g[q>>2]=s;if((r|0)==0|(r|0)==1){g[q>>2]=1.0;t=k;u=1.0}else if((r|0)==2){g[j>>2]=1.0;t=1.0;u=s}else{t=k;u=s}s=-0.0-(t*f+m*h+u*p);g[j>>2]=t+f*s;g[n>>2]=m+h*s;g[q>>2]=u+p*s;+on(j,j);s=+g[a>>2];p=s*b;u=+g[l>>2];h=u*b;m=+g[o>>2];f=m*b;b=+g[n>>2];t=+g[q>>2];k=+g[j>>2];g[j>>2]=k*65535.0;g[n>>2]=b*65535.0;g[q>>2]=t*65535.0;v=(m*b-u*t)*65535.0;w=(s*t-m*k)*65535.0;m=(u*k-s*b)*65535.0;c[469162]=(c[469162]|0)+1;c[469160]=(c[469160]|0)+4;o=c[469176]|0;l=o+1|0;c[469176]=l;if((o|0)>=(c[469170]|0)){c[469170]=l}l=oj(52)|0;Zx(l|0,0,52)|0;b=p-v;o=l+4|0;g[o>>2]=b;s=h-w;a=l+8|0;g[a>>2]=s;k=f-m;r=l+12|0;g[r>>2]=k;g[o>>2]=b+ +g[j>>2];g[a>>2]=s+ +g[n>>2];g[r>>2]=k+ +g[q>>2];u=p+v;r=l+16|0;g[r>>2]=u;v=h+w;a=l+20|0;g[a>>2]=v;w=f+m;o=l+24|0;g[o>>2]=w;g[r>>2]=u+ +g[j>>2];g[a>>2]=v+ +g[n>>2];g[o>>2]=w+ +g[q>>2];o=l+28|0;g[o>>2]=u;a=l+32|0;g[a>>2]=v;r=l+36|0;g[r>>2]=w;g[o>>2]=u- +g[j>>2];g[a>>2]=v- +g[n>>2];g[r>>2]=w- +g[q>>2];r=l+40|0;g[r>>2]=b;a=l+44|0;g[a>>2]=s;o=l+48|0;g[o>>2]=k;g[r>>2]=b- +g[j>>2];g[a>>2]=s- +g[n>>2];g[o>>2]=k- +g[q>>2];c[l>>2]=4;i=d;return l|0}function Vh(a){a=a|0;var b=0,d=0,e=0,f=0;b=a|0;d=c[b>>2]|0;c[469162]=(c[469162]|0)+1;c[469160]=(c[469160]|0)+d;e=c[469176]|0;f=e+1|0;c[469176]=f;if((e|0)>=(c[469170]|0)){c[469170]=f}f=(d*12|0)+4|0;d=oj(f)|0;Zx(d|0,0,f|0)|0;Vx(d|0,a|0,4+((c[b>>2]|0)*12|0)|0)|0;return d|0}function Wh(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.0,t=0,u=0.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.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0;f=i;i=i+560|0;h=f|0;j=f+272|0;k=f+544|0;Zx(h|0,0,272)|0;Zx(j|0,0,272)|0;l=c[a>>2]|0;c[k+8>>2]=0;m=k+4|0;c[m>>2]=0;n=k|0;c[n>>2]=0;o=l|0;p=c[o>>2]|0;do{if((p|0)>0){q=b+4|0;r=b+8|0;s=-0.0-e;t=0;do{u=+g[l+4+(t*12|0)>>2]*+g[b>>2]+ +g[l+4+(t*12|0)+4>>2]*+g[q>>2]+ +g[l+4+(t*12|0)+8>>2]*+g[r>>2]-d;g[15324]=u;g[h+(t<<2)>>2]=u;do{if(u>e){c[j+(t<<2)>>2]=0;v=0}else{w=j+(t<<2)|0;if(u<s){c[w>>2]=1;v=1;break}else{c[w>>2]=2;v=2;break}}}while(0);w=k+(v<<2)|0;c[w>>2]=(c[w>>2]|0)+1;t=t+1|0;}while((t|0)<(p|0));s=+g[h>>2];r=(c[n>>2]|0)==0;c[j+(t<<2)>>2]=c[j>>2];g[h+(t<<2)>>2]=s;if(r){break}if((c[m>>2]|0)==0){x=272;y=0;z=272;A=0;i=f;return}r=p+4|0;c[469162]=(c[469162]|0)+1;c[469160]=(c[469160]|0)+r;q=c[469176]|0;w=q+1|0;c[469176]=w;if((q|0)>=(c[469170]|0)){c[469170]=w}w=(r*12|0)+4|0;q=oj(w)|0;B=q;Zx(q|0,0,w|0)|0;w=c[o>>2]|0;if((w|0)>0){s=-0.0-d;C=q;D=0;while(1){E=l+4+(D*12|0)|0;F=c[j+(D<<2)>>2]|0;if((F|0)==2){g[B+4+((c[C>>2]|0)*12|0)>>2]=+g[E>>2];g[B+4+((c[C>>2]|0)*12|0)+4>>2]=+g[l+4+(D*12|0)+4>>2];g[B+4+((c[C>>2]|0)*12|0)+8>>2]=+g[l+4+(D*12|0)+8>>2];c[C>>2]=(c[C>>2]|0)+1;G=D+1|0}else if((F|0)==0){g[B+4+((c[C>>2]|0)*12|0)>>2]=+g[E>>2];g[B+4+((c[C>>2]|0)*12|0)+4>>2]=+g[l+4+(D*12|0)+4>>2];g[B+4+((c[C>>2]|0)*12|0)+8>>2]=+g[l+4+(D*12|0)+8>>2];c[C>>2]=(c[C>>2]|0)+1;H=23}else{H=23}do{if((H|0)==23){H=0;I=D+1|0;J=c[j+(I<<2)>>2]|0;if((J|0)==2|(J|0)==(F|0)){G=I;break}J=(I|0)%(c[o>>2]|0)|0;u=+g[h+(D<<2)>>2];K=u/(u- +g[h+(I<<2)>>2]);g[15324]=K;u=+g[b>>2];do{if(u==1.0){L=d}else{if(u==-1.0){L=s;break}M=+g[E>>2];L=M+K*(+g[l+4+(J*12|0)>>2]-M)}}while(0);u=+g[b+4>>2];do{if(u==1.0){N=d}else{if(u==-1.0){N=s;break}M=+g[l+4+(D*12|0)+4>>2];N=M+K*(+g[l+4+(J*12|0)+4>>2]-M)}}while(0);u=+g[b+8>>2];do{if(u==1.0){O=d}else{if(u==-1.0){O=s;break}M=+g[l+4+(D*12|0)+8>>2];O=M+K*(+g[l+4+(J*12|0)+8>>2]-M)}}while(0);g[B+4+((c[C>>2]|0)*12|0)>>2]=L;g[B+4+((c[C>>2]|0)*12|0)+4>>2]=N;g[B+4+((c[C>>2]|0)*12|0)+8>>2]=O;c[C>>2]=(c[C>>2]|0)+1;G=I}}while(0);E=c[o>>2]|0;if((G|0)<(E|0)){D=G}else{P=E;Q=C;break}}}else{P=w;Q=q}C=c[Q>>2]|0;if((C|0)>(r|0)){aj(1,38664,(R=i,i=i+1|0,i=i+7&-8,c[R>>2]=0,R)|0);i=R}if((C|0)>64){aj(1,33800,(R=i,i=i+1|0,i=i+7&-8,c[R>>2]=0,R)|0);i=R}if((P|0)==-559030611){aj(0,53112,(R=i,i=i+1|0,i=i+7&-8,c[R>>2]=0,R)|0);i=R}c[o>>2]=-559030611;c[469176]=(c[469176]|0)-1;mj(l);c[a>>2]=B;x=272;y=0;z=272;A=0;i=f;return}else{c[j>>2]=0;g[h>>2]=0.0}}while(0);if((p|0)==-559030611){aj(0,53112,(R=i,i=i+1|0,i=i+7&-8,c[R>>2]=0,R)|0);i=R}c[o>>2]=-559030611;c[469176]=(c[469176]|0)-1;mj(l);c[a>>2]=0;x=272;y=0;z=272;A=0;i=f;return}function Xh(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0;if((c[469120]|0)==0){d=0;return d|0}e=c[469121]|0;f=b+4|0;h=b+8|0;i=0;do{j=c[e+(i*12|0)>>2]|0;k=a[j+16|0]|0;if((k&255)>>>0<3>>>0){l=+g[b+((k&255)<<2)>>2]- +g[j+12>>2]}else{l=+g[j>>2]*+g[b>>2]+ +g[j+4>>2]*+g[f>>2]+ +g[j+8>>2]*+g[h>>2]- +g[j+12>>2]}if(l<0.0){m=e+(i*12|0)+8|0}else{m=e+(i*12|0)+4|0}i=c[m>>2]|0;}while((i|0)>-1);c[469168]=(c[469168]|0)+1;d=~i;return d|0}function Yh(a,b){a=a|0;b=b|0;var d=0,e=0;d=~b;if(!((c[(c[469123]|0)+(d*24|0)>>2]|0)==-1)){c[a+40>>2]=d}b=a|0;e=c[b>>2]|0;if((e|0)<(c[a+4>>2]|0)){c[b>>2]=e+1;c[(c[a+12>>2]|0)+(e<<2)>>2]=d;return}else{c[a+8>>2]=1;return}}function Zh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if((b|0)<0){d=b}else{e=a+16|0;f=a+28|0;g=b;while(1){b=c[469121]|0;h=kn(e,f,c[b+(g*12|0)>>2]|0)|0;if((h|0)==1){i=b+(g*12|0)+4|0}else if((h|0)==2){i=b+(g*12|0)+8|0}else{Zh(a,c[b+(g*12|0)+4>>2]|0);i=b+(g*12|0)+8|0}b=c[i>>2]|0;if((b|0)<0){d=b;break}else{g=b}}}ae[c[a+44>>2]&127](a,d);return}function _h(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;h=i;i=i+48|0;j=h|0;c[469144]=(c[469144]|0)+1;g[j+16>>2]=+g[a>>2];g[j+20>>2]=+g[a+4>>2];g[j+24>>2]=+g[a+8>>2];g[j+28>>2]=+g[b>>2];g[j+32>>2]=+g[b+4>>2];g[j+36>>2]=+g[b+8>>2];b=j|0;c[b>>2]=0;c[j+4>>2]=e;c[j+12>>2]=d;c[j+44>>2]=6;d=j+40|0;c[d>>2]=0;c[j+8>>2]=0;Zh(j,0);c[f>>2]=c[d>>2];i=h;return c[b>>2]|0}function $h(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0;if((c[469120]|0)==0){e=0;return e|0}if((d|0)==0){f=c[469121]|0;h=b+4|0;i=b+8|0;j=0;do{k=c[f+(j*12|0)>>2]|0;l=a[k+16|0]|0;if((l&255)>>>0<3>>>0){m=+g[b+((l&255)<<2)>>2]- +g[k+12>>2]}else{m=+g[k>>2]*+g[b>>2]+ +g[k+4>>2]*+g[h>>2]+ +g[k+8>>2]*+g[i>>2]- +g[k+12>>2]}if(m<0.0){n=f+(j*12|0)+8|0}else{n=f+(j*12|0)+4|0}j=c[n>>2]|0;}while((j|0)>-1);c[469168]=(c[469168]|0)+1;o=(c[469123]|0)+(~j*24|0)|0}else{o=(yh(d)|0)+24|0}d=c[o+12>>2]|0;if((d|0)<=0){e=0;return e|0}j=c[o+8>>2]|0;o=c[469125]|0;n=c[469131]|0;m=+g[b>>2];p=m;q=p+-.125;f=b+4|0;i=b+8|0;r=p+.125;b=0;h=0;while(1){k=c[o+(j+b<<2)>>2]|0;l=n+(k*44|0)+8|0;do{if(+g[n+(k*44|0)+20>>2]<q){s=h}else{p=+g[f>>2];t=p;if(+g[n+(k*44|0)+24>>2]<t+-.125){s=h;break}u=+g[i>>2];v=u;if(+g[n+(k*44|0)+28>>2]<v+-.125){s=h;break}if(+g[l>>2]>r){s=h;break}if(+g[n+(k*44|0)+12>>2]>t+.125){s=h;break}if(+g[n+(k*44|0)+16>>2]>v+.125){s=h;break}w=c[n+(k*44|0)+32>>2]|0;a:do{if((w|0)>0){x=c[n+(k*44|0)+36>>2]|0;y=0;while(1){z=c[x+(y*12|0)>>2]|0;A=y+1|0;if(m*+g[z>>2]+p*+g[z+4>>2]+u*+g[z+8>>2]>+g[z+12>>2]){B=y;break a}if((A|0)<(w|0)){y=A}else{B=A;break}}}else{B=0}}while(0);if((B|0)!=(w|0)){s=h;break}s=c[n+(k*44|0)+4>>2]|h}}while(0);k=b+1|0;if((k|0)<(d|0)){b=k;h=s}else{e=s;break}}return e|0}function ai(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0,q=0,r=0;e=i;i=i+64|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=+g[a>>2]- +g[c>>2];m=f|0;g[m>>2]=l;n=+g[a+4>>2]- +g[c+4>>2];o=f+4|0;g[o>>2]=n;p=+g[a+8>>2]- +g[c+8>>2];c=f+8|0;g[c>>2]=p;if((b|0)==255){q=$h(m,b)|0;i=e;return q|0}do{if(!(+g[d>>2]!=0.0)){if(+g[d+4>>2]!=0.0){break}if(+g[d+8>>2]!=0.0){break}q=$h(m,b)|0;i=e;return q|0}}while(0);f=h|0;a=j|0;r=k|0;hn(d,f,a,r);g[m>>2]=l*+g[f>>2]+n*+g[h+4>>2]+p*+g[h+8>>2];g[o>>2]=-0.0-(l*+g[a>>2]+n*+g[j+4>>2]+p*+g[j+8>>2]);g[c>>2]=l*+g[r>>2]+n*+g[k+4>>2]+p*+g[k+8>>2];q=$h(m,b)|0;i=e;return q|0}function bi(a){a=a|0;var b=0;do{if((a|0)>=0){if(!((c[469132]|0)>(a|0)&(c[469135]|0)!=0)){break}b=(c[469134]|0)+(da(c[469133]|0,a)|0)|0;return b|0}}while(0);b=c[469134]|0;return b|0}function ci(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=c[469139]|0;f=e+(a<<3)+4|0;g=e+(a<<3)|0;if((c[f>>2]|0)==(c[469143]|0)){if((c[g>>2]|0)==(b|0)){i=d;return}else{aj(1,27224,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e}}c[g>>2]=b;c[f>>2]=c[469143];f=c[469140]|0;g=c[469138]|0;e=da(g,a)|0;if((g|0)>0){h=0;j=g}else{i=d;return}while(1){if((c[f+(h+e<<2)>>2]|0)>0){ci(h,b);k=c[469138]|0}else{k=j}g=h+1|0;if((g|0)<(k|0)){h=g;j=k}else{break}}i=d;return}function di(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;a=(c[469143]|0)+1|0;c[469143]=a;b=c[469138]|0;if((b|0)>0){d=0;e=0;f=b;g=a}else{return}while(1){if((c[(c[469139]|0)+(d<<3)+4>>2]|0)==(g|0)){h=e;i=f}else{a=e+1|0;ci(d,a);h=a;i=c[469138]|0}a=d+1|0;if((a|0)>=(i|0)){break}d=a;e=h;f=i;g=c[469143]|0}return}function ei(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;if((b|a|0)<0){i=e;return}f=c[469138]|0;if(!((f|0)>(a|0)&(f|0)>(b|0))){aj(1,52904,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}h=(da(f,a)|0)+b|0;f=c[469140]|0;j=f+(h<<2)|0;h=c[j>>2]|0;do{if((d|0)==0){c[j>>2]=h-1;k=f+((da(c[469138]|0,b)|0)+a<<2)|0;c[k>>2]=(c[k>>2]|0)-1;k=c[469138]|0;if((c[f+((da(k,b)|0)+a<<2)>>2]|0)>=0){l=k;break}aj(1,44224,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}else{c[j>>2]=h+1;k=f+((da(c[469138]|0,b)|0)+a<<2)|0;c[k>>2]=(c[k>>2]|0)+1;l=c[469138]|0}}while(0);a=(c[469143]|0)+1|0;c[469143]=a;if((l|0)>0){m=0;n=0;o=l;p=a}else{i=e;return}while(1){if((c[(c[469139]|0)+(m<<3)+4>>2]|0)==(p|0)){q=n;r=o}else{a=n+1|0;ci(m,a);q=a;r=c[469138]|0}a=m+1|0;if((a|0)>=(r|0)){break}m=a;n=q;o=r;p=c[469143]|0}i=e;return}function fi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;if((c[(c[469096]|0)+32>>2]|0)!=0){e=1;i=d;return e|0}if((b|a|0)<0){e=0;i=d;return e|0}f=c[469138]|0;if(!((f|0)>(a|0)&(f|0)>(b|0))){aj(1,38608,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}f=c[469139]|0;e=(c[f+(a<<3)>>2]|0)==(c[f+(b<<3)>>2]|0)|0;i=d;return e|0}function gi(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=c[469138]|0;g=f+7>>3;if((c[(c[469096]|0)+32>>2]|0)!=0|(e|0)==-1){Zx(b|0,-1|0,g|0)|0;return g|0}h=c[469139]|0;i=c[h+(e<<3)>>2]|0;if((f|0)>0){j=0;k=f;l=h}else{return g|0}while(1){if((c[l+(j<<3)>>2]|0)==(i|0)){h=b+(j>>3)|0;a[h]=d[h]|0|1<<(j&7);m=c[469138]|0}else{m=k}h=j+1|0;if((h|0)>=(m|0)){break}j=h;k=m;l=c[469139]|0}return g|0}function hi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if(+g[b>>2]<+g[c>>2]+-.125){e=0;return e|0}if(+g[b+4>>2]<+g[c+4>>2]+-.125){e=0;return e|0}if(+g[b+8>>2]<+g[c+8>>2]+-.125){e=0;return e|0}if(+g[a>>2]>+g[d>>2]+.125){e=0;return e|0}if(+g[a+4>>2]>+g[d+4>>2]+.125){e=0;return e|0}if(+g[a+8>>2]>+g[d+8>>2]+.125){e=0;return e|0}e=1;return e|0}function ii(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0.0,j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0,z=0,A=0.0;e=i;i=i+16|0;f=e|0;h=+g[a>>2];j=+g[b>>2];k=+g[a+4>>2];l=b+4|0;m=+g[l>>2];n=+g[a+8>>2];o=+g[b+8>>2];p=n-o;q=+g[d>>2];r=+g[d+4>>2];s=+g[d+8>>2];t=(h-j)*q+(k-m)*r+p*s;u=j+q*t;g[f>>2]=u;q=m+r*t;g[f+4>>2]=q;r=o+s*t;g[f+8>>2]=r;d=0;t=u;s=j;while(1){if(t>s){j=+g[c+(d<<2)>>2];if(t>j){v=j;break}}if(t<s){j=+g[c+(d<<2)>>2];if(t<j){v=j;break}}a=d+1|0;if((a|0)>=3){w=11;break}d=a;t=+g[f+(a<<2)>>2];s=+g[b+(a<<2)>>2]}if((w|0)==11){j=h-u;u=k-q;q=n-r;x=j*j+u*u+q*q;i=e;return+x}if(+S(+(t-s))<+S(+(t-v))){y=b;z=l;A=p}else{y=c;z=c+4|0;A=n- +g[c+8>>2]}n=k- +g[z>>2];k=h- +g[y>>2];x=A*A+(n*n+k*k);i=e;return+x}function ji(a,b){a=a|0;b=b|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0;e=c[b+32>>2]|0;if((e|0)==0){return}if(+g[a+160>>2]>+g[b+20>>2]){return}if(+g[a+164>>2]>+g[b+24>>2]){return}if(+g[a+168>>2]>+g[b+28>>2]){return}if(+g[a+172>>2]<+g[b+8>>2]){return}if(+g[a+176>>2]<+g[b+12>>2]){return}if(+g[a+180>>2]<+g[b+16>>2]){return}f=(e|0)>6;a:do{if((c[a+260>>2]|0)==0){if(!f){break}h=c[b+36>>2]|0;i=+g[a>>2];j=+g[a+4>>2];k=+g[a+8>>2];l=6;while(1){m=c[h+(l*12|0)>>2]|0;n=d[m+17|0]|0;o=+g[m>>2];p=+g[m+4>>2];q=+g[m+8>>2];l=l+1|0;if(o*i+p*j+q*k-(+g[m+12>>2]-(+g[a+48+(n*12|0)>>2]*o+ +g[a+48+(n*12|0)+4>>2]*p+ +g[a+48+(n*12|0)+8>>2]*q))>0.0){break}if((l|0)>=(e|0)){break a}}return}else{if(!f){break}l=c[b+36>>2]|0;k=+g[a+264>>2];j=+g[a+272>>2];i=+g[a+276>>2];q=+g[a+280>>2];p=+g[a>>2];o=p-j;h=a+4|0;n=a+8|0;r=j+p;m=6;while(1){s=c[l+(m*12|0)>>2]|0;p=+g[s>>2];t=+g[s+4>>2];u=+g[s+8>>2];v=+g[h>>2];if(p*j+t*i+u*q>0.0){w=o;x=v-i;y=+g[n>>2]-q}else{w=r;x=i+v;y=q+ +g[n>>2]}m=m+1|0;if(w*p+x*t+y*u-(+g[s+12>>2]+k)>0.0){break}if((m|0)>=(e|0)){break a}}return}}while(0);c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0;c[a+252>>2]=c[b+4>>2];return}function ki(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=b+12|0;a:do{if((c[d>>2]|0)>0){e=b+8|0;f=a+196|0;h=a+204|0;i=0;b:while(1){j=c[(c[469125]|0)+((c[e>>2]|0)+i<<2)>>2]|0;k=c[469131]|0;l=k+(j*44|0)|0;m=k+(j*44|0)+40|0;n=c[469144]|0;do{if((c[m>>2]|0)!=(n|0)){c[m>>2]=n;if((c[f>>2]&c[k+(j*44|0)+4>>2]|0)==0){break}ji(a,l);if((c[h>>2]|0)!=0){break b}}}while(0);i=i+1|0;if((i|0)>=(c[d>>2]|0)){break a}}return}}while(0);if((c[(c[469094]|0)+32>>2]|0)!=0){return}d=b+20|0;if((c[d>>2]|0)<=0){return}i=b+16|0;b=a+196|0;h=0;c:while(1){f=c[(c[469142]|0)+(c[(c[469127]|0)+((c[i>>2]|0)+h<<2)>>2]<<2)>>2]|0;do{if((f|0)!=0){e=f|0;l=c[469144]|0;if((c[e>>2]|0)==(l|0)){break}c[e>>2]=l;o=f+8|0;if((c[b>>2]&c[o>>2]|0)==0){break}if((Oh(a,c[f+12>>2]|0)|0)!=0){break c}}}while(0);f=h+1|0;if((f|0)<(c[d>>2]|0)){h=f}else{p=16;break}}if((p|0)==16){return}c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0;c[a+252>>2]=c[o>>2];return}function li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;d=i;i=i+32|0;e=d|0;f=d+16|0;h=e|0;j=f|0;Eh(b,h,j);k=+g[a>>2];l=+g[a+272>>2];m=+g[a+4>>2];n=+g[a+276>>2];o=+g[a+8>>2];p=+g[a+280>>2];q=o+p;r=+g[j>>2];s=(+g[h>>2]+r)*.5;t=r-s;r=(+g[e+4>>2]+ +g[f+4>>2])*.5;u=+g[f+8>>2];v=(+g[e+8>>2]+u)*.5;w=u-v;u=k+l;x=m+n;y=o-p;p=t>w?w:t;t=w-p;w=+g[a+264>>2]+p;p=w*w;w=t+v;o=s-u;z=r-x;A=w-q;B=o*o+z*z;if(B+A*A<p){c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0}A=s-(k-l);l=r-(m-n);n=w-y;m=A*A+l*l;if(m+n*n<p){c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0}n=v-t;t=n-q;if(B+t*t<p){c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0}t=n-y;if(m+t*t<p){c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0}do{if(q<w|q>n){if(!(y<w|y>n)){break}i=d;return}}while(0);n=u-s;s=x-r;if(!(n*n+s*s+0.0<p)){i=d;return}c[a+204>>2]=1;c[a+208>>2]=1;g[a+212>>2]=0.0;i=d;return}function mi(a){a=a|0;var b=0,d=0,e=0,f=0.0,h=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;b=i;i=i+4144|0;d=b|0;e=b+4096|0;f=+g[a>>2];h=+g[a+4>>2];j=h+ +g[a+28>>2];k=+g[a+8>>2];l=k+ +g[a+32>>2];m=f+ +g[a+36>>2];n=h+ +g[a+40>>2];h=k+ +g[a+44>>2];g[e+16>>2]=f+ +g[a+24>>2]+-1.0;g[e+28>>2]=m+1.0;g[e+20>>2]=j+-1.0;g[e+32>>2]=n+1.0;g[e+24>>2]=l+-1.0;g[e+36>>2]=h+1.0;o=e|0;c[o>>2]=0;c[e+4>>2]=1024;c[e+12>>2]=d;c[e+44>>2]=6;c[e+40>>2]=0;c[e+8>>2]=0;c[469144]=(c[469144]|0)+1;Zh(e,0);c[469144]=(c[469144]|0)+1;if((c[o>>2]|0)<=0){p=48;q=0;r=4096;s=0;i=b;return}e=a+204|0;t=0;while(1){ki(a,(c[469123]|0)+((c[d+(t<<2)>>2]|0)*24|0)|0);u=t+1|0;if((c[e>>2]|0)!=0){v=5;break}if((u|0)<(c[o>>2]|0)){t=u}else{v=5;break}}if((v|0)==5){p=48;q=0;r=4096;s=0;i=b;return}}function ni(a,b){a=a|0;b=b|0;var e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0.0,ea=0.0,fa=0;e=b+32|0;if((c[e>>2]|0)==0){return}c[469174]=(c[469174]|0)+1;f=c[e>>2]|0;e=(f|0)>0;a:do{if((c[a+260>>2]|0)==0){if(!e){h=28;break}i=c[b+36>>2]|0;j=+g[a>>2];k=+g[a+4>>2];l=+g[a+8>>2];m=+g[a+12>>2];n=+g[a+16>>2];o=+g[a+20>>2];p=0;q=-1.0;r=1.0;s=0;t=0;u=0;v=0;while(1){w=i+(v*12|0)|0;x=c[w>>2]|0;y=d[x+17|0]|0;z=+g[x>>2];A=+g[x+4>>2];B=+g[x+8>>2];C=+g[x+12>>2]-(+g[a+48+(y*12|0)>>2]*z+ +g[a+48+(y*12|0)+4>>2]*A+ +g[a+48+(y*12|0)+8>>2]*B);D=z*j+A*k+B*l-C;E=z*m+A*n+B*o-C;y=E>0.0?1:s;F=D>0.0;G=F?1:t;if(F){if(!(E<.125&E<D)){break}}do{if(D>0.0|E>0.0){C=D;if(D>E){B=(C+-.125)/(D-E);A=B<0.0?0.0:B;if(!(A>q)){H=u;I=r;J=q;K=p;break}H=w;I=r;J=A;K=x;break}else{A=(C+.125)/(D-E);C=A>1.0?1.0:A;if(!(C<r)){H=u;I=r;J=q;K=p;break}H=u;I=C;J=q;K=p;break}}else{H=u;I=r;J=q;K=p}}while(0);x=v+1|0;if((x|0)<(f|0)){p=K;q=J;r=I;s=y;t=G;u=H;v=x}else{L=H;M=G;N=y;O=I;P=J;Q=K;h=29;break a}}return}else{if(!e){h=28;break}v=c[b+36>>2]|0;r=+g[a+264>>2];q=+g[a+272>>2];o=+g[a+276>>2];n=+g[a+280>>2];m=+g[a>>2];l=m-q;u=a+4|0;t=a+8|0;s=a+12|0;p=a+16|0;i=a+20|0;k=q+m;x=0;m=-1.0;j=1.0;w=0;F=0;R=0;S=0;while(1){T=v+(S*12|0)|0;U=c[T>>2]|0;E=+g[U+12>>2]+r;D=+g[U>>2];C=+g[U+4>>2];A=+g[U+8>>2];B=+g[u>>2];if(D*q+C*o+A*n>0.0){V=+g[s>>2]-q;W=+g[p>>2]-o;X=+g[i>>2]-n;Y=l;Z=B-o;_=+g[t>>2]-n}else{V=q+ +g[s>>2];W=o+ +g[p>>2];X=n+ +g[i>>2];Y=k;Z=o+B;_=n+ +g[t>>2]}B=Y*D+Z*C+_*A-E;z=V*D+W*C+X*A-E;$=z>0.0?1:w;aa=B>0.0;ba=aa?1:F;if(aa){if(!(z<.125&z<B)){break}}do{if(B>0.0|z>0.0){E=B;if(B>z){A=(E+-.125)/(B-z);C=A<0.0?0.0:A;if(!(C>m)){ca=R;da=j;ea=m;fa=x;break}ca=T;da=j;ea=C;fa=U;break}else{C=(E+.125)/(B-z);E=C>1.0?1.0:C;if(!(E<j)){ca=R;da=j;ea=m;fa=x;break}ca=R;da=E;ea=m;fa=x;break}}else{ca=R;da=j;ea=m;fa=x}}while(0);U=S+1|0;if((U|0)<(f|0)){x=fa;m=ea;j=da;w=$;F=ba;R=ca;S=U}else{L=ca;M=ba;N=$;O=da;P=ea;Q=fa;h=29;break a}}return}}while(0);do{if((h|0)==28){c[a+208>>2]=1}else if((h|0)==29){if((M|0)==0){c[a+208>>2]=1;if((N|0)==0){break}return}if(!(P<O&P>-1.0)){return}fa=a+212|0;if(!(P<+g[fa>>2])){return}g[fa>>2]=P<0.0?0.0:P;if((Q|0)!=0){fa=a+228|0;ca=Q;c[fa>>2]=c[ca>>2];c[fa+4>>2]=c[ca+4>>2];c[fa+8>>2]=c[ca+8>>2];c[fa+12>>2]=c[ca+12>>2];c[fa+16>>2]=c[ca+16>>2]}if((L|0)!=0){c[a+248>>2]=c[L+4>>2]}c[a+252>>2]=c[b+4>>2];return}}while(0);c[a+204>>2]=1;g[a+212>>2]=0.0;c[a+252>>2]=c[b+4>>2];return}function oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;d=b+12|0;a:do{if((c[d>>2]|0)>0){e=b+8|0;f=a+196|0;h=a+160|0;i=a+172|0;j=a+212|0;k=0;b:while(1){l=c[(c[469125]|0)+((c[e>>2]|0)+k<<2)>>2]|0;m=c[469131]|0;n=m+(l*44|0)|0;o=m+(l*44|0)+40|0;p=c[469144]|0;do{if((c[o>>2]|0)!=(p|0)){c[o>>2]=p;if((c[f>>2]&c[m+(l*44|0)+4>>2]|0)==0){break}if((hi(h,i,m+(l*44|0)+8|0,m+(l*44|0)+20|0)|0)==0){break}ni(a,n);if(!(+g[j>>2]!=0.0)){break b}}}while(0);k=k+1|0;if((k|0)>=(c[d>>2]|0)){break a}}return}}while(0);if((c[(c[469094]|0)+32>>2]|0)!=0){return}d=b+20|0;if((c[d>>2]|0)<=0){return}k=b+16|0;b=a+196|0;j=a+212|0;i=a+248|0;h=a+252|0;f=0;c:while(1){e=c[(c[469142]|0)+(c[(c[469127]|0)+((c[k>>2]|0)+f<<2)>>2]<<2)>>2]|0;do{if((e|0)!=0){n=e|0;l=c[469144]|0;if((c[n>>2]|0)==(l|0)){break}c[n>>2]=l;l=e+8|0;if((c[b>>2]&c[l>>2]|0)==0){break}c[469172]=(c[469172]|0)+1;q=+g[j>>2];Nh(a,c[e+12>>2]|0);r=+g[j>>2];if(r<q){c[i>>2]=c[e+4>>2];c[h>>2]=c[l>>2]}if(!(r!=0.0)){s=18;break c}}}while(0);e=f+1|0;if((e|0)<(c[d>>2]|0)){f=e}else{s=18;break}}if((s|0)==18){return}}function pi(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,j=0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0;h=i;i=i+16|0;j=h|0;l=+g[e>>2];m=l- +g[b>>2];n=j|0;g[n>>2]=m;o=e+4|0;p=+g[o>>2];q=b+4|0;r=p- +g[q>>2];s=j+4|0;g[s>>2]=r;t=e+8|0;u=+g[t>>2];v=b+8|0;w=u- +g[v>>2];x=j+8|0;g[x>>2]=w;y=d*d;if(w*w+(m*m+r*r)<y){g[a+212>>2]=0.0;c[a+208>>2]=1;r=+g[f>>2]- +g[b>>2];g[n>>2]=r;m=+g[f+4>>2]- +g[q>>2];g[s>>2]=m;w=+g[f+8>>2]- +g[v>>2];g[x>>2]=w;if(!(w*w+(r*r+m*m)<y)){i=h;return}c[a+204>>2]=1;i=h;return}g[n>>2]=+g[f>>2]-l;j=f+4|0;g[s>>2]=+g[j>>2]-p;z=f+8|0;g[x>>2]=+g[z>>2]-u;u=+dn(n);p=+ii(b,e,f,n);l=+g[b>>2];m=+g[f>>2]-l;r=+g[q>>2];w=+g[j>>2]-r;A=+g[v>>2];B=+g[z>>2]-A;do{if(!(p<y)){C=d+.125;if(!(m*m+w*w+B*B>C*C)){break}i=h;return}}while(0);B=+g[e>>2]-l;l=+g[o>>2]-r;r=+g[t>>2]-A;A=(B*+g[n>>2]+l*+g[s>>2]+r*+g[x>>2])*2.0;w=d+1.0;d=A*A-(B*B+l*l+r*r-w*w)*4.0;if(!(d>0.0)){i=h;return}r=d*.5;l=(c[k>>2]=1597463007-((g[k>>2]=d,c[k>>2]|0)>>1),+g[k>>2]);B=l*(1.5-l*r*l);l=(-0.0-A-d*B*(1.5-B*r*B))*.5;if(l<0.0){D=0.0}else{D=l/u}E=a+212|0;if(!(D<+g[E>>2])){i=h;return}g[E>>2]=D;u=+g[e>>2];l=+g[o>>2];B=+g[t>>2];r=u+D*(+g[f>>2]-u);u=l+D*(+g[j>>2]-l);l=D*(+g[z>>2]-B)+B;B=u- +g[q>>2];D=l- +g[v>>2];d=1.0/w;w=d*(r- +g[b>>2]);g[n>>2]=w;A=d*B;g[s>>2]=A;B=d*D;g[x>>2]=B;g[a+228>>2]=w;g[a+232>>2]=A;g[a+236>>2]=B;g[a+240>>2]=B*(l+ +g[a+192>>2])+((r+ +g[a+184>>2])*w+(u+ +g[a+188>>2])*A);c[a+252>>2]=33554432;i=h;return}function qi(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=f|0;h=h|0;var j=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0.0,J=0,K=0,L=0.0,M=0.0;j=i;i=i+64|0;l=j|0;m=j+16|0;n=j+32|0;o=j+48|0;p=+g[f>>2];q=m|0;g[q>>2]=p;r=f+4|0;s=+g[r>>2];g[m+4>>2]=s;g[m+8>>2]=0.0;t=+g[h>>2];m=n|0;g[m>>2]=t;u=h+4|0;v=+g[u>>2];g[n+4>>2]=v;g[n+8>>2]=0.0;w=+g[b>>2];n=o|0;g[n>>2]=w;x=b+4|0;y=+g[x>>2];g[o+4>>2]=y;g[o+8>>2]=0.0;o=f+8|0;z=+g[o>>2];A=b+8|0;B=+g[A>>2];do{if(z>B+e|z<B-e){C=l|0;D=l+4|0;E=l+8|0;F=d*d}else{G=p-w;H=l|0;g[H>>2]=G;I=s-y;J=l+4|0;g[J>>2]=I;K=l+8|0;g[K>>2]=0.0;L=d*d;if(!(G*G+I*I+0.0<L)){C=H;D=J;E=K;F=L;break}g[a+212>>2]=0.0;c[a+208>>2]=1;I=t-w;g[H>>2]=I;G=v-y;g[J>>2]=G;g[K>>2]=0.0;if(!(I*I+G*G+0.0<L)){i=j;return}c[a+204>>2]=1;i=j;return}}while(0);g[C>>2]=t-p;g[D>>2]=v-s;g[E>>2]=0.0;s=+dn(C);p=t-w;w=v-y;do{if(!(+ii(n,q,m,C)<F)){y=d+.125;if(!(p*p+w*w+0.0>y*y)){break}i=j;return}}while(0);w=+g[f>>2];p=w- +g[b>>2];F=+g[r>>2];y=F- +g[x>>2];v=(p*+g[C>>2]+y*+g[D>>2])*2.0;t=d+1.0;d=v*v-(p*p+y*y-t*t)*4.0;if(!(d>0.0)){i=j;return}y=d*.5;p=(c[k>>2]=1597463007-((g[k>>2]=d,c[k>>2]|0)>>1),+g[k>>2]);B=p*(1.5-p*y*p);p=(-0.0-v-d*B*(1.5-B*y*B))*.5;if(p<0.0){M=0.0}else{M=p/s}r=a+212|0;if(!(M<+g[r>>2])){i=j;return}s=+g[h>>2]-w;g[C>>2]=s;p=+g[u>>2]-F;g[D>>2]=p;B=+g[o>>2];y=+g[h+8>>2]-B;g[E>>2]=y;d=w+M*s;s=F+M*p;p=M*y+B;B=+g[A>>2];if(p>B+e|p<B-e){i=j;return}g[r>>2]=M;M=s- +g[x>>2];e=1.0/t;t=e*(d- +g[b>>2]);g[C>>2]=t;B=e*M;g[D>>2]=B;M=e*0.0;g[E>>2]=M;g[a+228>>2]=t;g[a+232>>2]=B;g[a+236>>2]=M;g[a+240>>2]=M*(p+ +g[a+192>>2])+((d+ +g[a+184>>2])*t+(s+ +g[a+188>>2])*B);c[a+252>>2]=33554432;i=j;return}function ri(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0;c=i;i=i+144|0;d=c|0;e=c+16|0;f=c+32|0;h=c+48|0;j=c+64|0;k=c+80|0;l=c+96|0;m=c+112|0;n=c+128|0;o=d|0;p=e|0;Eh(b,o,p);q=+g[p>>2];if(+g[a+160>>2]>q+1.0){i=c;return}r=+g[e+4>>2];if(+g[a+164>>2]>r+1.0){i=c;return}s=+g[e+8>>2];if(+g[a+168>>2]>s+1.0){i=c;return}t=+g[o>>2];if(+g[a+172>>2]<t+-1.0){i=c;return}u=+g[d+4>>2];if(+g[a+176>>2]<u+-1.0){i=c;return}v=+g[d+8>>2];if(+g[a+180>>2]<v+-1.0){i=c;return}d=a|0;w=+g[d>>2];x=+g[a+272>>2];o=j|0;g[o>>2]=w+x;y=+g[a+4>>2];z=+g[a+276>>2];g[j+4>>2]=y+z;A=+g[a+8>>2];B=+g[a+280>>2];g[j+8>>2]=A+B;j=k|0;g[j>>2]=w-x;g[k+4>>2]=y-z;g[k+8>>2]=A-B;k=a+12|0;A=+g[k>>2];e=l|0;g[e>>2]=A+x;w=+g[a+16>>2];g[l+4>>2]=w+z;C=+g[a+20>>2];g[l+8>>2]=C+B;l=m|0;g[l>>2]=A-x;g[m+4>>2]=w-z;g[m+8>>2]=C-B;B=(t+q)*.5;m=n|0;g[m>>2]=B;t=q-B;q=(u+r)*.5;g[n+4>>2]=q;r=(v+s)*.5;g[n+8>>2]=r;v=s-r;s=t>v?v:t;t=v-s;n=f|0;g[n>>2]=B;g[f+4>>2]=q;g[f+8>>2]=r+t;f=h|0;g[f>>2]=B;g[h+4>>2]=q;g[h+8>>2]=r-t;t=s+ +g[a+264>>2];do{if(+g[d>>2]!=A|y!=w){s=v+ +g[a+268>>2]-t;if(!(s>0.0)){break}qi(a,m,t,s,d,k)}}while(0);pi(a,n,t,j,l);pi(a,f,t,o,e);i=c;return}function si(b,d,e,f,h,j){b=b|0;d=d|0;e=+e;f=+f;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0;k=i;i=i+16|0;l=k|0;if(!(+g[b+212>>2]>e)){i=k;return}if((d|0)<0){oi(b,(c[469123]|0)+(~d*24|0)|0);i=k;return}m=c[469121]|0;n=c[m+(d*12|0)>>2]|0;o=a[n+16|0]|0;p=o&255;if((o&255)>>>0<3>>>0){q=+g[n+12>>2];r=+g[b+148+(p<<2)>>2];s=+g[j+(p<<2)>>2]-q;t=+g[h+(p<<2)>>2]-q}else{q=+g[n>>2];u=+g[n+4>>2];v=+g[n+8>>2];w=+g[n+12>>2];r=(c[b+200>>2]|0)==0?2048.0:0.0;s=q*+g[j>>2]+u*+g[j+4>>2]+v*+g[j+8>>2]-w;t=q*+g[h>>2]+u*+g[h+4>>2]+v*+g[h+8>>2]-w}w=r+1.0;if(!(t<w|s<w)){si(b,c[m+(d*12|0)+4>>2]|0,e,f,h,j);i=k;return}w=-1.0-r;if(t<w&s<w){si(b,c[m+(d*12|0)+8>>2]|0,e,f,h,j);i=k;return}do{if(t<s){w=1.0/(t-s);x=1;y=(t+r+.125)*w;z=(t-r+.125)*w}else{if(!(t>s)){x=0;y=0.0;z=1.0;break}w=1.0/(t-s);x=0;y=(t-r+-.125)*w;z=(t+r+.125)*w}}while(0);r=z<0.0?0.0:z;z=r>1.0?1.0:r;r=f-e;t=+g[h>>2];n=l|0;g[n>>2]=t+z*(+g[j>>2]-t);p=h+4|0;t=+g[p>>2];o=j+4|0;A=l+4|0;g[A>>2]=t+z*(+g[o>>2]-t);B=h+8|0;t=+g[B>>2];C=j+8|0;D=l+8|0;g[D>>2]=t+z*(+g[C>>2]-t);si(b,c[m+(d*12|0)+4+(x<<2)>>2]|0,e,r*z+e,h,n);z=y<0.0?0.0:y;y=z>1.0?1.0:z;z=+g[h>>2];g[n>>2]=z+y*(+g[j>>2]-z);z=+g[p>>2];g[A>>2]=z+y*(+g[o>>2]-z);z=+g[B>>2];g[D>>2]=z+y*(+g[C>>2]-z);si(b,c[m+(d*12|0)+4+((x^1)<<2)>>2]|0,r*y+e,f,n,j);i=k;return}function ti(a,b,d,e,f,h,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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.0,A=0.0,B=0,C=0.0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0.0,T=0.0,U=0.0,V=0,W=0.0,X=0,Y=0,Z=0.0,_=0.0,$=0,aa=0,ba=0,ca=0.0,da=0.0,ea=0,fa=0;n=i;i=i+320|0;o=n|0;p=n+16|0;q=n+32|0;r=yh(h)|0;c[469144]=(c[469144]|0)+1;c[469164]=(c[469164]|0)+1;Zx(q|0,0,284)|0;s=q+204|0;t=q+212|0;g[t>>2]=1.0;g[q+184>>2]=+g[j>>2];g[q+188>>2]=+g[j+4>>2];g[q+192>>2]=+g[j+8>>2];if((c[469120]|0)==0){Vx(a|0,s|0,56)|0;u=284;v=0;i=n;return}j=(e|0)==0?62464:e;e=(f|0)==0?62464:f;c[q+196>>2]=k;w=+g[j>>2];x=+g[e>>2];y=(w+x)*.5;z=w-y;k=q+24|0;g[k>>2]=z;w=x-y;f=q+36|0;g[f>>2]=w;x=+g[b>>2];A=x+y;B=q|0;g[B>>2]=A;C=+g[d>>2];D=C+y;E=q+12|0;g[E>>2]=D;y=+g[j+4>>2];F=+g[e+4>>2];G=(y+F)*.5;H=y-G;I=q+28|0;g[I>>2]=H;y=F-G;J=q+40|0;g[J>>2]=y;K=b+4|0;F=+g[K>>2];L=F+G;M=q+4|0;g[M>>2]=L;N=d+4|0;O=+g[N>>2];P=O+G;Q=q+16|0;g[Q>>2]=P;G=+g[j+8>>2];R=+g[e+8>>2];T=(G+R)*.5;U=G-T;e=q+32|0;g[e>>2]=U;G=R-T;j=q+44|0;g[j>>2]=G;V=b+8|0;R=+g[V>>2];W=R+T;X=q+8|0;g[X>>2]=W;Y=d+8|0;Z=+g[Y>>2];_=Z+T;$=q+20|0;g[$>>2]=_;if((m|0)==0){c[q+260>>2]=l;T=w>G?G:w;g[q+264>>2]=T;g[q+268>>2]=G;g[q+272>>2]=0.0;g[q+276>>2]=0.0;g[q+280>>2]=G-T;aa=l}else{l=q+260|0;ba=m;c[l>>2]=c[ba>>2];c[l+4>>2]=c[ba+4>>2];c[l+8>>2]=c[ba+8>>2];c[l+12>>2]=c[ba+12>>2];c[l+16>>2]=c[ba+16>>2];c[l+20>>2]=c[ba+20>>2];aa=c[q+260>>2]|0}g[q+144>>2]=w+y+G;g[q+48>>2]=z;g[q+52>>2]=H;g[q+56>>2]=U;g[q+60>>2]=w;g[q+64>>2]=H;g[q+68>>2]=U;g[q+72>>2]=z;g[q+76>>2]=y;g[q+80>>2]=U;g[q+84>>2]=w;g[q+88>>2]=y;g[q+92>>2]=U;g[q+96>>2]=z;g[q+100>>2]=H;g[q+104>>2]=G;g[q+108>>2]=w;g[q+112>>2]=H;g[q+116>>2]=G;g[q+120>>2]=z;g[q+124>>2]=y;g[q+128>>2]=G;g[q+132>>2]=w;g[q+136>>2]=y;g[q+140>>2]=G;ba=q+260|0;a:do{if((aa|0)==0){if(A<D){g[q+160>>2]=A+z;g[q+172>>2]=D+w}else{g[q+160>>2]=D+z;g[q+172>>2]=A+w}if(L<P){g[q+164>>2]=L+H;g[q+176>>2]=P+y}else{g[q+164>>2]=P+H;g[q+176>>2]=L+y}if(W<_){g[q+168>>2]=W+U;g[q+180>>2]=_+G;break}else{g[q+168>>2]=_+U;g[q+180>>2]=W+G;break}}else{l=q+264|0;m=0;T=A;ca=D;while(1){if(T<ca){da=+S(+(+g[q+272+(m<<2)>>2]));g[q+160+(m<<2)>>2]=T-da- +g[l>>2];g[q+172+(m<<2)>>2]=ca+da+ +g[l>>2]}else{da=+S(+(+g[q+272+(m<<2)>>2]));g[q+160+(m<<2)>>2]=ca-da- +g[l>>2];g[q+172+(m<<2)>>2]=T+da+ +g[l>>2]}ea=m+1|0;if((ea|0)>=3){break a}m=ea;T=+g[q+(ea<<2)>>2];ca=+g[q+12+(ea<<2)>>2]}}}while(0);do{if(x==C&F==O&R==Z){if((h|0)==254){if((c[ba>>2]|0)==0){aa=o|0;m=p|0;Eh(254,aa,m);D=+g[m>>2];A=(+g[aa>>2]+D)*.5;G=D-A;g[B>>2]=+g[B>>2]-A;g[E>>2]=+g[E>>2]-A;A=(+g[o+4>>2]+ +g[p+4>>2])*.5;g[M>>2]=+g[M>>2]-A;g[Q>>2]=+g[Q>>2]-A;A=+g[p+8>>2];D=(+g[o+8>>2]+A)*.5;W=A-D;g[X>>2]=+g[X>>2]-D;g[$>>2]=+g[$>>2]-D;c[ba>>2]=1;D=G>W?W:G;g[q+264>>2]=D;g[q+268>>2]=W;g[q+272>>2]=0.0;g[q+276>>2]=0.0;g[q+280>>2]=W-D;ki(q,(yh(Dh(k,f,0)|0)|0)+24|0);break}else{li(q,254);break}}else if((h|0)==0){mi(q);break}else{ki(q,r+24|0);break}}else{do{if(+g[k>>2]==0.0){if(!(+g[I>>2]==0.0)){fa=28;break}if(!(+g[e>>2]==0.0)){fa=28;break}c[q+200>>2]=1;g[q+156>>2]=0.0;g[q+152>>2]=0.0;g[q+148>>2]=0.0}else{fa=28}}while(0);if((fa|0)==28){c[q+200>>2]=0;g[q+148>>2]=+g[f>>2];g[q+152>>2]=+g[J>>2];g[q+156>>2]=+g[j>>2]}if((h|0)==0){si(q,0,0.0,1.0,B,E);break}else if((h|0)==254){if((c[ba>>2]|0)==0){aa=o|0;m=p|0;Eh(254,aa,m);D=+g[m>>2];W=(+g[aa>>2]+D)*.5;G=D-W;g[B>>2]=+g[B>>2]-W;g[E>>2]=+g[E>>2]-W;W=(+g[o+4>>2]+ +g[p+4>>2])*.5;g[M>>2]=+g[M>>2]-W;g[Q>>2]=+g[Q>>2]-W;W=+g[p+8>>2];D=(+g[o+8>>2]+W)*.5;A=W-D;g[X>>2]=+g[X>>2]-D;g[$>>2]=+g[$>>2]-D;c[ba>>2]=1;D=G>A?A:G;g[q+264>>2]=D;g[q+268>>2]=A;g[q+272>>2]=0.0;g[q+276>>2]=0.0;g[q+280>>2]=A-D;oi(q,(yh(Dh(k,f,0)|0)|0)+24|0);break}else{ri(q,254);break}}else{oi(q,r+24|0);break}}}while(0);Z=+g[t>>2];if(Z==1.0){g[q+216>>2]=+g[d>>2];g[q+220>>2]=+g[N>>2];g[q+224>>2]=+g[Y>>2]}else{R=+g[b>>2];g[q+216>>2]=R+Z*(+g[d>>2]-R);R=+g[K>>2];g[q+220>>2]=R+Z*(+g[N>>2]-R);R=+g[V>>2];g[q+224>>2]=R+Z*(+g[Y>>2]-R)}Vx(a|0,s|0,56)|0;u=284;v=0;i=n;return}function ui(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ti(a,b,c,d,e,f,62464,g,h,0);return}function vi(a,b,d,e,f,h,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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,A=0,B=0.0,C=0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0.0,sa=0.0,ta=0,ua=0.0;n=i;i=i+176|0;o=n|0;p=n+56|0;q=n+72|0;r=n+88|0;s=n+112|0;t=n+152|0;u=o;v=(e|0)==0?62464:e;e=(f|0)==0?62464:f;w=+g[v>>2];x=+g[e>>2];y=(w+x)*.5;f=r|0;g[f>>2]=w-y;w=x-y;z=r+12|0;g[z>>2]=w;x=+g[b>>2]+y;A=p|0;B=+g[d>>2]+y;C=q|0;y=+g[v+4>>2];D=+g[e+4>>2];E=(y+D)*.5;g[r+4>>2]=y-E;g[r+16>>2]=D-E;F=b+4|0;D=+g[F>>2]+E;G=p+4|0;H=d+4|0;y=+g[H>>2]+E;I=q+4|0;E=+g[v+8>>2];J=+g[e+8>>2];K=(E+J)*.5;g[r+8>>2]=E-K;E=J-K;g[r+20>>2]=E;r=b+8|0;J=+g[r>>2]+K;e=p+8|0;p=d+8|0;L=+g[p>>2]+K;v=q+8|0;K=+g[k>>2];M=x-K;g[A>>2]=M;x=+g[k+4>>2];N=D-x;g[G>>2]=N;D=+g[k+8>>2];O=J-D;g[e>>2]=O;J=B-K;g[C>>2]=J;K=y-x;g[I>>2]=K;x=L-D;g[v>>2]=x;do{if((h|0)==255){P=5}else{if(+g[l>>2]!=0.0){Q=1;break}if(+g[l+4>>2]!=0.0){Q=1;break}if(+g[l+8>>2]!=0.0){Q=1}else{P=5}}}while(0);if((P|0)==5){Q=0}c[t>>2]=m;D=w>E?E:w;g[t+4>>2]=D;g[t+8>>2]=E;w=E-D;if(!Q){g[t+12>>2]=0.0;g[t+16>>2]=0.0;g[t+20>>2]=w;ti(o,A,C,f,z,h,k,j,m,t);R=+g[o+8>>2];S=+g[b>>2];T=+g[d>>2];U=T-S;V=R*U;W=S+V;X=o+12|0;g[X>>2]=W;Y=+g[F>>2];Z=+g[H>>2];_=Z-Y;$=R*_;aa=Y+$;ba=o+16|0;g[ba>>2]=aa;ca=+g[r>>2];da=+g[p>>2];ea=da-ca;fa=R*ea;ga=ca+fa;ha=o+20|0;g[ha>>2]=ga;ia=a;Vx(ia|0,u|0,56)|0;ja=36;ka=0;la=56;ma=0;i=n;return}Q=s|0;P=s+12|0;q=s+24|0;hn(l,Q,P,q);D=-0.0- +g[P>>2];g[P>>2]=D;l=s+16|0;E=-0.0- +g[l>>2];g[l>>2]=E;na=s+20|0;L=-0.0- +g[na>>2];g[na>>2]=L;y=+g[Q>>2];oa=s+4|0;B=+g[oa>>2];pa=s+8|0;qa=+g[pa>>2];g[A>>2]=M*y+N*B+O*qa;g[G>>2]=M*D+N*E+O*L;ra=+g[q>>2];G=s+28|0;sa=+g[G>>2];ta=s+32|0;ua=+g[ta>>2];g[e>>2]=M*ra+N*sa+O*ua;g[C>>2]=J*y+K*B+x*qa;g[I>>2]=J*D+K*E+x*L;g[v>>2]=J*ra+K*sa+x*ua;g[t+12>>2]=w*qa;g[t+16>>2]=-0.0-w*L;g[t+20>>2]=w*ua;ti(o,A,C,f,z,h,k,j,m,t);ua=+g[o+8>>2];if(!(ua!=1.0)){R=ua;S=+g[b>>2];T=+g[d>>2];U=T-S;V=R*U;W=S+V;X=o+12|0;g[X>>2]=W;Y=+g[F>>2];Z=+g[H>>2];_=Z-Y;$=R*_;aa=Y+$;ba=o+16|0;g[ba>>2]=aa;ca=+g[r>>2];da=+g[p>>2];ea=da-ca;fa=R*ea;ga=ca+fa;ha=o+20|0;g[ha>>2]=ga;ia=a;Vx(ia|0,u|0,56)|0;ja=36;ka=0;la=56;ma=0;i=n;return}w=+g[oa>>2];L=+g[l>>2];qa=+g[G>>2];x=+g[pa>>2];sa=+g[na>>2];K=+g[ta>>2];ta=o+24|0;ra=+g[ta>>2];na=o+28|0;J=+g[na>>2];pa=o+32|0;E=+g[pa>>2];g[ta>>2]=+g[Q>>2]*ra+ +g[P>>2]*J+ +g[q>>2]*E;g[na>>2]=w*ra+L*J+qa*E;g[pa>>2]=x*ra+sa*J+K*E;R=ua;S=+g[b>>2];T=+g[d>>2];U=T-S;V=R*U;W=S+V;X=o+12|0;g[X>>2]=W;Y=+g[F>>2];Z=+g[H>>2];_=Z-Y;$=R*_;aa=Y+$;ba=o+16|0;g[ba>>2]=aa;ca=+g[r>>2];da=+g[p>>2];ea=da-ca;fa=R*ea;ga=ca+fa;ha=o+20|0;g[ha>>2]=ga;ia=a;Vx(ia|0,u|0,56)|0;ja=36;ka=0;la=56;ma=0;i=n;return}function wi(){var a=0,b=0;if((c[469090]|0)==2){a=Vc(c[468067]|0)|0;b=(a|0)<0?1:a}else{b=1}c[430934]=b;return}function xi(){return c[469090]|0}function yi(a){a=a|0;var b=0;if(!((c[469090]|0)>>>0>a>>>0)){b=2551456;return b|0}b=c[1872264+(a<<2)>>2]|0;return b|0}function zi(){c[466008]=1732960;c[466009]=131072;c[466010]=0;return}function Ai(a){a=a|0;var b=0,d=0,e=0;b=i;d=Wx(a|0)|0;e=c[466010]|0;if((e+d|0)<(c[466009]|0)){Vx((c[466008]|0)+e|0,a|0,d)|0;c[466010]=(c[466010]|0)+d;i=b;return}else{_i(25648,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=b;return}}function Bi(b,d){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)==2){f=Wx(d|0)|0;g=c[466010]|0;if((g+f|0)<(c[466009]|0)){Vx((c[466008]|0)+g|0,d|0,f)|0;c[466010]=(c[466010]|0)+f;i=e;return}else{_i(25648,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;i=e;return}}else if((b|0)==1){f=Wx(d|0)|0;g=f+1|0;j=c[466010]|0;if((g+j|0)>(c[466009]|0)){_i(52368,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;i=e;return}k=c[466008]|0;if((j|0)>0){l=j;j=k;while(1){m=l-1|0;a[j+(l+f)|0]=a[j+m|0]|0;n=c[466008]|0;if((m|0)>0){l=m;j=n}else{o=n;break}}}else{o=k}Vx(o|0,d|0,f)|0;a[(c[466008]|0)+f|0]=10;c[466010]=(c[466010]|0)+g;i=e;return}else if((b|0)==0){b=c[469154]|0;do{if((d|0)==0){p=5}else{if((a[d]|0)==0){p=5;break}$i(43760,(h=i,i=i+8|0,c[h>>2]=d,h)|0);i=h;Ci(d)}}while(0);if((p|0)==5){Di();$i(43760,(h=i,i=i+8|0,c[h>>2]=c[466008],h)|0);i=h}if((c[469154]|0)==(b|0)){i=e;return}else{aj(1,38264,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}}else{aj(0,33352,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}}function Ci(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;Ni(a,0);if((c[469090]|0)==0){return}else{b=1864064}while(1){d=c[b>>2]|0;if((d|0)==0){break}e=d|0;if((tn(c[468066]|0,c[d+4>>2]|0)|0)==0){f=4;break}else{b=e}}do{if((f|0)==4){c[b>>2]=c[e>>2];c[e>>2]=c[466016];c[466016]=d;g=c[d+8>>2]|0;if((g|0)==0){break}ve[g&255]();return}}while(0);if((sk()|0)!=0){return}d=c[430914]|0;do{if((d|0)!=0){if((c[d+32>>2]|0)==0){break}if((Mw()|0)==0){break}return}}while(0);d=c[423400]|0;do{if((d|0)!=0){if((c[d+32>>2]|0)==0){break}if((xg()|0)==0){break}return}}while(0);d=c[430914]|0;do{if((d|0)!=0){if((c[d+32>>2]|0)==0){break}if((Ow()|0)==0){break}return}}while(0);Pw(a);return}function Di(){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0;b=i;i=i+1024|0;d=b|0;e=d|0;f=c[466010]|0;if((f|0)!=0&(c[469154]|0)==0){g=0;h=0;j=f}else{k=1024;l=0;i=b;return}while(1){m=c[430934]|0;if((m|0)>0){break}f=c[466008]|0;a:do{if((j|0)>0){n=0;o=0;p=g;q=h;while(1){r=a[f+n|0]|0;s=(r<<24>>24==34)+o|0;b:do{if((s&1|0)==0){do{if((n|0)<(j-1|0)){t=(p|0)!=0;u=t^1;v=r<<24>>24==47;if(v&u){if((a[f+(n+1)|0]|0)==47){w=1;x=p;break b}}if(!((q|0)!=0|v^1)){v=(a[f+(n+1)|0]|0)==42;y=0;z=v|u?v?1:p:p;break}if(!t){y=q;z=0;break}if(!(r<<24>>24==42)){y=q;z=p;break}t=n+1|0;if((a[f+t|0]|0)==47){A=q;B=0;C=t;break a}else{y=q;z=p}}else{y=q;z=p}}while(0);if((y|z|0)==0&r<<24>>24==59){A=y;B=z;C=n;break a}else{w=y;x=z}}else{w=q;x=p}}while(0);if((x|0)==0){if((r<<24>>24|0)==10|(r<<24>>24|0)==13){A=0;B=0;C=n;break a}}t=n+1|0;if((t|0)<(j|0)){n=t;o=s;p=x;q=w}else{A=w;B=x;C=t;break}}}else{A=h;B=g;C=0}}while(0);q=(C|0)<1023?C:1023;Vx(e|0,f|0,q)|0;a[d+q|0]=0;if((q|0)==(j|0)){c[466010]=0}else{p=q+1|0;q=j-p|0;c[466010]=q;_x(f|0,f+p|0,q|0)|0}Ci(e);q=c[466010]|0;if((q|0)!=0&(c[469154]|0)==0){g=B;h=A;j=q}else{D=22;break}}if((D|0)==22){k=1024;l=0;i=b;return}c[430934]=m-1;k=1024;l=0;i=b;return}function Ei(){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;b=i;i=i+72|0;d=b|0;e=b+8|0;f=(tn((c[469090]|0)!=0?c[468066]|0:2551456,28776)|0)==0;if((c[469090]|0)!=2){_i(24568,(g=i,i=i+16|0,c[g>>2]=f?21272:2551456,c[g+8>>2]=f?16896:2551456,g)|0);i=g;h=64;j=0;i=b;return}rn(e,c[468067]|0,64);un(e,64,59600);hl(e,d)|0;k=c[d>>2]|0;if((k|0)==0){_i(58224,(g=i,i=i+8|0,c[g>>2]=e,g)|0);i=g;h=64;j=0;i=b;return}if(f){l=k}else{_i(56280,(g=i,i=i+8|0,c[g>>2]=e,g)|0);i=g;l=c[d>>2]|0}e=Wx(l|0)|0;k=e+1|0;f=c[466010]|0;if((k+f|0)>(c[466009]|0)){_i(52368,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}else{g=c[466008]|0;if((f|0)>0){m=f;f=g;while(1){n=m-1|0;a[f+(m+e)|0]=a[f+n|0]|0;o=c[466008]|0;if((n|0)>0){m=n;f=o}else{p=o;break}}}else{p=g}Vx(p|0,l|0,e)|0;a[(c[466008]|0)+e|0]=10;c[466010]=(c[466010]|0)+k}il(c[d>>2]|0);h=64;j=0;i=b;return}function Fi(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;if((c[469090]|0)!=2){_i(55208,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=b;return}e=fk(c[468067]|0)|0;f=Hn(54408,(d=i,i=i+8|0,c[d>>2]=e,d)|0)|0;i=d;e=Wx(f|0)|0;g=e+1|0;h=c[466010]|0;if((g+h|0)>(c[466009]|0)){_i(52368,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d;i=b;return}d=c[466008]|0;if((h|0)>0){j=h;h=d;while(1){k=j-1|0;a[h+(j+e)|0]=a[h+k|0]|0;l=c[466008]|0;if((k|0)>0){j=k;h=l}else{m=l;break}}}else{m=d}Vx(m|0,f|0,e)|0;a[(c[466008]|0)+e|0]=10;c[466010]=(c[466010]|0)+g;i=b;return}function Gi(){var b=0,d=0,e=0,f=0;b=i;a[2636096]=0;if((c[469090]|0)>1){d=1;do{$x(2636096,c[1872264+(d<<2)>>2]|0)|0;e=c[469090]|0;if((d|0)!=(e-1|0)){f=2636096+(Wx(2636096)|0)|0;z=32;a[f]=z;z=z>>8;a[f+1|0]=z}d=d+1|0;}while((d|0)<(e|0))}_i(54408,(d=i,i=i+8|0,c[d>>2]=2636096,d)|0);i=d;i=b;return}function Hi(){var b=0,d=0,e=0;a[2636096]=0;if((c[469090]|0)>1){b=1}else{return 2636096}do{$x(2636096,c[1872264+(b<<2)>>2]|0)|0;d=c[469090]|0;if((b|0)!=(d-1|0)){e=2636096+(Wx(2636096)|0)|0;z=32;a[e]=z;z=z>>8;a[e+1|0]=z}b=b+1|0;}while((b|0)<(d|0));return 2636096}function Ii(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[469090]|0)>>>0>a>>>0){e=c[1872264+(a<<2)>>2]|0}else{e=2551456}rn(b,e,d);return}function Ji(b){b=b|0;var d=0,e=0;a[2637120]=0;d=(b|0)<0?0:b;if((d|0)<(c[469090]|0)){e=d}else{return 2637120}do{$x(2637120,c[1872264+(e<<2)>>2]|0)|0;d=c[469090]|0;if((e|0)!=(d-1|0)){b=2637120+(Wx(2637120)|0)|0;z=32;a[b]=z;z=z>>8;a[b+1|0]=z}e=e+1|0;}while((e|0)<(d|0));return 2637120}function Ki(){return 1864072}function Li(){var b=0,d=0,e=0;if((c[469090]|0)>1){b=1}else{return}do{d=c[1872264+(b<<2)>>2]|0;if((Wx(d|0)|0)>>>0>255>>>0){a[d+255|0]=0}e=Gd(d|0,52200)|0;if((e|0)!=0){d=e;do{a[d]=32;d=Gd(d+1|0,52200)|0;}while((d|0)!=0)}b=b+1|0;}while((b|0)<(c[469090]|0));return}function Mi(a){a=a|0;Ni(a,0);return}function Ni(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,v=0,w=0,x=0,y=0,z=0,A=0,B=0;c[469090]=0;if((b|0)==0){return}rn(1864072,b,8192);e=c[469090]|0;if((e|0)==1024){return}f=(d|0)!=0;d=1723744;g=b;b=e;a:while(1){e=g;while(1){h=a[e]|0;if(h<<24>>24<33&h<<24>>24!=0){e=e+1|0;continue}if((h<<24>>24|0)==0){i=32;break a}else if((h<<24>>24|0)!=47){break}if((a[e+1|0]|0)==47){i=32;break a}if((a[e+1|0]|0)==42){j=e;k=47}else{break}while(1){if((k<<24>>24|0)==42){l=a[j+1|0]|0;if(l<<24>>24==47){break}else{m=l}}else if((k<<24>>24|0)==0){i=32;break a}else{m=a[j+1|0]|0}j=j+1|0;k=m}e=j+2|0}c[1872264+(b<<2)>>2]=d;c[469090]=b+1;if(h<<24>>24==34&(f^1)){l=d;n=e;while(1){o=n+1|0;p=a[o]|0;if((p<<24>>24|0)==0|(p<<24>>24|0)==34){break}a[l]=p;l=l+1|0;n=o}a[l]=0;if((a[o]|0)==0){i=32;break}p=c[469090]|0;if((p|0)==1024){i=32;break}else{d=l+1|0;g=n+2|0;b=p;continue}}p=a[e]|0;b:do{if(p<<24>>24>32){if(f){q=e;r=d;s=p;while(1){t=q+1|0;if(s<<24>>24==47){if((a[t]|0)==47){u=q;v=r;break b}w=q+1|0;if((a[w]|0)==42){u=q;v=r;break b}else{x=w}}else{x=t}t=r+1|0;a[r]=s;w=a[x]|0;if(w<<24>>24>32){q=x;r=t;s=w}else{u=x;v=t;break b}}}else{y=e;z=d;A=p}while(1){if((A<<24>>24|0)==34){u=y;v=z;break b}else if((A<<24>>24|0)==47){if((a[y+1|0]|0)==47){u=y;v=z;break b}s=y+1|0;if((a[s]|0)==42){u=y;v=z;break b}else{B=s}}else{B=y+1|0}s=z+1|0;a[z]=A;r=a[B]|0;if(r<<24>>24>32){y=B;z=s;A=r}else{u=B;v=s;break}}}else{u=e;v=d}}while(0);a[v]=0;e=c[469090]|0;if((a[u]|0)==0|(e|0)==1024){i=32;break}else{d=v+1|0;g=u;b=e}}if((i|0)==32){return}}function Oi(a){a=a|0;Ni(a,1);return}function Pi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;e=c[466016]|0;a:do{if((e|0)!=0){f=e;while(1){if((tn(a,c[f+4>>2]|0)|0)==0){break}f=c[f>>2]|0;if((f|0)==0){break a}}if((b|0)==0){i=d;return}_i(51216,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;i=d;return}}while(0);e=pj(16)|0;c[e+4>>2]=qj(a)|0;c[e+8>>2]=b;c[e+12>>2]=0;c[e>>2]=c[466016];c[466016]=e;i=d;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[466016]|0;if((d|0)==0){return}else{e=d}do{if((tn(a,c[e+4>>2]|0)|0)==0){c[e+12>>2]=b}e=c[e>>2]|0;}while((e|0)!=0);return}function Ri(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=1864064;while(1){d=c[b>>2]|0;if((d|0)==0){e=7;break}f=d+4|0;g=d|0;if((Tx(a,c[f>>2]|0)|0)==0){break}else{b=g}}if((e|0)==7){return}c[b>>2]=c[g>>2];g=c[f>>2]|0;if((g|0)!=0){mj(g)}mj(d);return}function Si(a){a=a|0;var b=0,d=0;b=c[466016]|0;if((b|0)==0){return}else{d=b}do{je[a&127](c[d+4>>2]|0);d=c[d>>2]|0;}while((d|0)!=0);return}function Ti(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[466016]|0;if((e|0)==0){return}else{f=e}do{do{if((tn(a,c[f+4>>2]|0)|0)==0){e=c[f+12>>2]|0;if((e|0)==0){break}ae[e&127](b,d)}}while(0);f=c[f>>2]|0;}while((f|0)!=0);return}function Ui(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;a=i;b=(c[469090]|0)>1?c[468067]|0:0;d=c[466016]|0;a:do{if((d|0)==0){e=0}else{if((b|0)==0){f=0;g=d;while(1){_i(54408,(h=i,i=i+8|0,c[h>>2]=c[g+4>>2],h)|0);i=h;j=f+1|0;k=c[g>>2]|0;if((k|0)==0){e=j;break a}else{f=j;g=k}}}else{l=0;m=d}while(1){g=m+4|0;if((ij(b,c[g>>2]|0,0)|0)==0){n=l}else{_i(54408,(h=i,i=i+8|0,c[h>>2]=c[g>>2],h)|0);i=h;n=l+1|0}g=c[m>>2]|0;if((g|0)==0){e=n;break}else{l=n;m=g}}}}while(0);_i(49592,(h=i,i=i+8|0,c[h>>2]=e,h)|0);i=h;i=a;return}function Vi(a,b){a=a|0;b=b|0;if((b|0)!=2){return}Tj(2551456,48832,0,1);return}function Wi(){var a=0,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;a=i;b=c[466016]|0;a:do{if((b|0)==0){d=5}else{e=b;while(1){if((tn(47872,c[e+4>>2]|0)|0)==0){break}f=c[e>>2]|0;if((f|0)==0){d=5;break a}else{e=f}}_i(51216,(g=i,i=i+8|0,c[g>>2]=47872,g)|0);i=g;h=c[466016]|0}}while(0);if((d|0)==5){b=pj(16)|0;e=b;c[b+4>>2]=qj(47872)|0;c[b+8>>2]=130;c[b+12>>2]=0;c[b>>2]=c[466016];c[466016]=e;h=e}b:do{if((h|0)==0){d=10}else{e=h;while(1){if((tn(46640,c[e+4>>2]|0)|0)==0){break}b=c[e>>2]|0;if((b|0)==0){d=10;break b}else{e=b}}_i(51216,(g=i,i=i+8|0,c[g>>2]=46640,g)|0);i=g;j=c[466016]|0}}while(0);if((d|0)==10){h=pj(16)|0;e=h;c[h+4>>2]=qj(46640)|0;c[h+8>>2]=74;c[h+12>>2]=0;c[h>>2]=c[466016];c[466016]=e;j=e}c:do{if((j|0)==0){d=15}else{e=j;while(1){if((tn(28776,c[e+4>>2]|0)|0)==0){break}h=c[e>>2]|0;if((h|0)==0){d=15;break c}else{e=h}}_i(51216,(g=i,i=i+8|0,c[g>>2]=28776,g)|0);i=g;k=c[466016]|0}}while(0);if((d|0)==15){j=pj(16)|0;e=j;c[j+4>>2]=qj(28776)|0;c[j+8>>2]=74;c[j+12>>2]=0;c[j>>2]=c[466016];c[466016]=e;k=e}d:do{if((k|0)==0){d=28}else{e=k;do{if((tn(46640,c[e+4>>2]|0)|0)==0){c[e+12>>2]=26}e=c[e>>2]|0;}while((e|0)!=0);e=c[466016]|0;if((e|0)==0){d=28;break}else{l=e}do{if((tn(28776,c[l+4>>2]|0)|0)==0){c[l+12>>2]=26}l=c[l>>2]|0;}while((l|0)!=0);e=c[466016]|0;if((e|0)==0){d=28;break}else{m=e}while(1){if((tn(45888,c[m+4>>2]|0)|0)==0){break}e=c[m>>2]|0;if((e|0)==0){d=28;break d}else{m=e}}_i(51216,(g=i,i=i+8|0,c[g>>2]=45888,g)|0);i=g;n=c[466016]|0}}while(0);if((d|0)==28){m=pj(16)|0;l=m;c[m+4>>2]=qj(45888)|0;c[m+8>>2]=52;c[m+12>>2]=0;c[m>>2]=c[466016];c[466016]=l;n=l}e:do{if((n|0)==0){d=37}else{l=n;do{if((tn(45888,c[l+4>>2]|0)|0)==0){c[l+12>>2]=12}l=c[l>>2]|0;}while((l|0)!=0);l=c[466016]|0;if((l|0)==0){d=37;break}else{o=l}while(1){if((tn(45232,c[o+4>>2]|0)|0)==0){break}l=c[o>>2]|0;if((l|0)==0){d=37;break e}else{o=l}}_i(51216,(g=i,i=i+8|0,c[g>>2]=45232,g)|0);i=g;p=c[466016]|0}}while(0);if((d|0)==37){d=pj(16)|0;o=d;c[d+4>>2]=qj(45232)|0;c[d+8>>2]=108;c[d+12>>2]=0;c[d>>2]=c[466016];c[466016]=o;p=o}f:do{if((p|0)!=0){o=p;while(1){if((tn(44408,c[o+4>>2]|0)|0)==0){break}o=c[o>>2]|0;if((o|0)==0){break f}}_i(51216,(g=i,i=i+8|0,c[g>>2]=44408,g)|0);i=g;i=a;return}}while(0);g=pj(16)|0;c[g+4>>2]=qj(44408)|0;c[g+8>>2]=48;c[g+12>>2]=0;c[g>>2]=c[466016];c[466016]=g;i=a;return}function Xi(a,b){a=a|0;b=b|0;var d=0;d=Hx(1,8)|0;c[d+4>>2]=a;if((b|0)!=0){c[d>>2]=Hx(b,1)|0}c[469154]=(c[469154]|0)+1;return d|0}function Yi(b,d,e){b=b|0;d=d|0;e=e|0;if((b|0)==0|(d|0)==0|(e|0)==0){return}c[154402]=b;c[154400]=d;c[154398]=e;a[b]=0;return}function Zi(){var a=0;a=c[154398]|0;if((a|0)!=0){je[a&127](c[154402]|0)}c[154402]=0;c[154400]=0;c[154398]=0;return}function _i(b,d){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;e=i;i=i+4120|0;f=e|0;g=e+4112|0;h=e+16|0;j=f;c[j>>2]=d;c[j+4>>2]=0;fd(h|0,4096,b|0,f|0)|0;f=c[154402]|0;if((f|0)!=0){b=Wx(h|0)|0;j=(Wx(f|0)|0)+b|0;b=c[154400]|0;if(j>>>0>(b-1|0)>>>0){je[c[154398]&127](f);a[c[154402]|0]=0;k=c[154402]|0;l=c[154400]|0}else{k=f;l=b}vn(k,l,h);m=4096;n=0;i=e;return}hx(h);l=c[429570]|0;if((l|0)==0){m=4096;n=0;i=e;return}if((c[l+32>>2]|0)==0){m=4096;n=0;i=e;return}do{if((c[191096]|0)==0){l=(Kk()|0)==0;if(!(l|a[61280])){a[61280]=1;Dd(g|0)|0;l=gb(g|0)|0;k=Vk(23936)|0;c[191096]=k;do{if((k|0)==0){_i(43640,(o=i,i=i+1|0,i=i+7&-8,c[o>>2]=0,o)|0);i=o;qk(38208,0.0)}else{b=Ub(l|0)|0;_i(52040,(o=i,i=i+8|0,c[o>>2]=b,o)|0);i=o;if((c[(c[429570]|0)+32>>2]|0)<=1){break}Ok(c[191096]|0)}}while(0);a[61280]=0}if((c[191096]|0)!=0){break}m=4096;n=0;i=e;return}}while(0);if((Kk()|0)==0){m=4096;n=0;i=e;return}o=Wx(h|0)|0;cl(h,o,c[191096]|0)|0;m=4096;n=0;i=e;return}function $i(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+4112|0;e=d|0;f=d+16|0;g=c[430622]|0;if((g|0)==0){h=4096;j=0;i=d;return}if((c[g+32>>2]|0)==0){h=4096;j=0;i=d;return}g=e;c[g>>2]=b;c[g+4>>2]=0;fd(f|0,4096,a|0,e|0)|0;_i(33160,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e;h=4096;j=0;i=d;return}function aj(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;i=i+16|0;f=e|0;if((c[430620]|0)!=0){ix(28696,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0);i=g}c[430620]=1;e=Hn(21192,(g=i,i=i+8|0,c[g>>2]=a,g)|0)|0;i=g;nk(24480,e);e=c[430920]|0;if((e|0)==0){h=a}else{h=(c[e+32>>2]|0)==0?a:0}a=Jd()|0;if((a-(c[659018]|0)|0)<100){e=c[659020]|0;c[659020]=e+1;j=(e|0)>2?0:h}else{c[659020]=0;j=h}c[659018]=a;a=f;c[a>>2]=d;c[a+4>>2]=0;fd(1718384,4096,b|0,f|0)|0;if((j-3|0)>>>0>1>>>0){nk(18520,1718384)}if((j&-2|0)==2){yo();Ig(16832);Kw(1);Tw();zo();El(2551544,2551544);c[430620]=0;Bd(2550656,-1|0)}if((j|0)==1){_i(58096,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0);i=g;yo();f=Hn(56248,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0)|0;i=g;Ig(f);Kw(1);Tw();zo();El(2551544,2551544);c[430620]=0;Bd(2550656,-1|0)}yo();if((j|0)==4){Ig(55136);j=c[430914]|0;do{if((j|0)!=0){if((c[j+32>>2]|0)==0){break}Kw(1);Tw();zo();Sw();El(2551544,2551544);c[430620]=0;Bd(2550656,-1|0)}}while(0);_i(54312,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;zo();El(2551544,2551544);c[430620]=0;Bd(2550656,-1|0)}j=Hn(53176,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0)|0;i=g;Ew(j,1,1);j=Hn(52152,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0)|0;i=g;Ig(j);zo();j=c[191096]|0;if((j|0)!=0){Uk(j);c[191096]=0}j=c[429574]|0;if((j|0)!=0){Uk(j);c[429574]=0}j=c[164648]|0;if((j|0)==0){ix(33160,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0);i=g}Uk(j);Rk(c[(c[429558]|0)+4>>2]|0);ix(33160,(g=i,i=i+8|0,c[g>>2]=1718384,g)|0);i=g}function bj(a){a=a|0;var b=0,d=0,e=0,f=0;b=1;d=0;e=i;i=i+168|0;c[e>>2]=0;while(1)switch(b|0){case 1:f=cy(2550656,b,e)|0;b=4;break;case 4:if((f|0)==0){b=2;break}else{b=3;break};case 2:pa(c[a+4>>2]|0,a|0,0);if((u|0)!=0&(v|0)!=0){d=dy(c[u>>2]|0,e)|0;if((d|0)>0){b=-1;break}else return}u=v=0;b=3;break;case 3:return;case-1:if((d|0)==1){f=v;b=4}u=v=0;break}}function cj(){var b=0;b=Hi()|0;if((c[430620]|0)!=0){cx()}yo();Ig((a[b]|0)!=0?b:51112);Ew((a[b]|0)!=0?b:50232,1,1);zo();b=c[191096]|0;if((b|0)!=0){Uk(b);c[191096]=0}b=c[429574]|0;if((b|0)!=0){Uk(b);c[429574]=0}b=c[164648]|0;if((b|0)!=0){Uk(b);Rk(c[(c[429558]|0)+4>>2]|0)}b=Hx(1,8)|0;c[b+4>>2]=58;c[469154]=(c[469154]|0)+1;xl(1,b);return}function dj(a,b){a=a|0;b=b|0;b=c[a>>2]|0;if((b|0)!=0){Gx(b)}Gx(a);c[469154]=(c[469154]|0)-1;cx()}function ej(){var b=0,d=0,e=0,f=0,g=0;if((c[429560]|0)>0){b=0}else{d=0;return d|0}while(1){e=1722504+(b<<2)|0;Mi(c[e>>2]|0);if((tn(yi(0)|0,49544)|0)==0){break}f=b+1|0;if((tn(yi(0)|0,48776)|0)==0){break}if((f|0)<(c[429560]|0)){b=f}else{d=0;g=6;break}}if((g|0)==6){return d|0}a[c[e>>2]|0]=0;d=1;return d|0}function fj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[429560]|0)<=0){return}if((a|0)==0){b=0;do{Mi(c[1722504+(b<<2)>>2]|0);do{if((Tx(yi(0)|0,47736)|0)==0){d=yi(1)|0;e=(hk(d)|0)==-2147483648;f=yi(2)|0;if(e){jk(d,f,128)|0;break}else{lk(d,f,0)|0;break}}}while(0);b=b+1|0;}while((b|0)<(c[429560]|0));return}else{g=0}do{Mi(c[1722504+(g<<2)>>2]|0);do{if((Tx(yi(0)|0,47736)|0)==0){b=yi(1)|0;if((Tx(b,a)|0)!=0){break}f=(hk(b)|0)==-2147483648;d=yi(2)|0;if(f){jk(b,d,128)|0;break}else{lk(b,d,0)|0;break}}}while(0);g=g+1|0;}while((g|0)<(c[429560]|0));return}function gj(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;d=i;i=i+16384|0;e=d|0;f=e|0;g=d+8192|0;h=(a[b]|0)==92?b+1|0:b;b=a[h]|0;if(b<<24>>24==0){j=8192;k=0;l=8192;m=0;i=d;return}n=e;o=e+20|0;e=h;h=f;p=b;while(1){if(!((p<<24>>24|0)==0|(p<<24>>24|0)==92)){b=e+1|0;a[h]=p;e=b;h=h+1|0;p=a[b]|0;continue}b=h-n|0;if((b|0)<20){Zx(h|0,32,20-b|0)|0;a[o]=0}else{a[h]=0}_i(45864,(q=i,i=i+8|0,c[q>>2]=f,q)|0);i=q;if((a[e]|0)==0){break}else{r=e;s=g}while(1){t=r+1|0;b=a[t]|0;if((b<<24>>24|0)==0|(b<<24>>24|0)==92){break}a[s]=b;r=t;s=s+1|0}a[s]=0;b=(a[t]|0)==0?t:r+2|0;_i(44400,(q=i,i=i+8|0,c[q>>2]=g,q)|0);i=q;u=a[b]|0;if(u<<24>>24==0){v=13;break}else{e=b;h=f;p=u}}if((v|0)==13){j=8192;k=0;l=8192;m=0;i=d;return}_i(45152,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0);i=q;j=8192;k=0;l=8192;m=0;i=d;return}function hj(b,c,d){b=b|0;c=c|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;e=Wx(b|0)|0;f=e-(Wx(c|0)|0)|0;if((f|0)<0){g=0;return g|0}e=(d|0)==0;d=b;b=0;a:while(1){h=a[c]|0;if(h<<24>>24==0){g=d;i=13;break}b:do{if(e){j=0;k=c;while(1){l=wc(a[d+j|0]|0)|0;if((l|0)!=(wc(a[k]|0)|0)){break}l=j+1|0;m=c+l|0;if((a[m]|0)==0){g=d;i=13;break a}else{j=l;k=m}}n=a[k]|0}else{j=0;m=h;while(1){if(!((a[d+j|0]|0)==m<<24>>24)){n=m;break b}l=j+1|0;o=a[c+l|0]|0;if(o<<24>>24==0){g=d;i=13;break a}else{j=l;m=o}}}}while(0);if(n<<24>>24==0){g=d;i=13;break}if((b|0)>=(f|0)){g=0;i=13;break}d=d+1|0;b=b+1|0}if((i|0)==13){return g|0}return 0}function ij(b,c,d){b=b|0;c=c|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,B=0,C=0,D=0,E=0,F=0,G=0;e=i;i=i+1024|0;f=e|0;g=f|0;h=(d|0)==0;j=b;b=c;a:while(1){c=j;while(1){k=a[c]|0;if((k<<24>>24|0)==42){l=0;m=c}else if((k<<24>>24|0)==63){n=9;break}else if((k<<24>>24|0)==91){o=c+1|0;p=a[o]|0;if((p<<24>>24|0)==91){c=o;continue}else if((p<<24>>24|0)==0){q=0;n=38;break a}else{r=o;s=p;n=11;break}}else if((k<<24>>24|0)==0){q=1;n=38;break a}else{n=34;break}while(1){t=m+1|0;p=a[t]|0;if((p<<24>>24|0)==0|(p<<24>>24|0)==42|(p<<24>>24|0)==63){break}a[f+l|0]=p;l=l+1|0;m=t}a[f+l|0]=0;if((a[g]|0)==0){c=t}else{n=7;break}}if((n|0)==7){n=0;p=hj(b,g,d)|0;if((p|0)==0){q=0;n=38;break}j=t;b=p+(Wx(g|0)|0)|0;continue}else if((n|0)==9){n=0;j=c+1|0;b=b+1|0;continue}else if((n|0)==11){while(1){n=0;p=a[r+1|0]|0;do{if(s<<24>>24==93){if(!(p<<24>>24==93)){q=0;n=38;break a}u=r+1|0;n=24}else{o=r+1|0;if(!(p<<24>>24==45)){u=o;n=24;break}v=r+2|0;w=a[v]|0;if((w<<24>>24|0)==93){if((a[r+3|0]|0)!=93){u=o;n=24;break}}else if((w<<24>>24|0)==0){u=o;n=24;break}o=a[b]|0;do{if(h){x=wc(o<<24>>24|0)|0;if((x|0)<(wc(a[r]|0)|0)){y=0;break}x=wc(a[b]|0)|0;y=(x|0)<=(wc(a[v]|0)|0)|0}else{if(o<<24>>24<s<<24>>24){y=0;break}y=o<<24>>24<=w<<24>>24|0}}while(0);z=y;A=r+3|0}}while(0);do{if((n|0)==24){n=0;if(h){p=wc(s<<24>>24|0)|0;z=(p|0)==(wc(a[b]|0)|0)|0;A=u;break}else{z=s<<24>>24==(a[b]|0)|0;A=u;break}}}while(0);B=a[A]|0;C=(z|0)==0;if(B<<24>>24!=0&C){r=A;s=B;n=11}else{break}}if(C){q=0;n=38;break}else{D=A;E=B}while(1){if((E<<24>>24|0)==0){n=29;break}else if((E<<24>>24|0)==93){p=D+1|0;if((a[p]|0)==93){F=93}else{G=p;break}}else{F=a[D+1|0]|0}D=D+1|0;E=F}if((n|0)==29){n=0;G=D+1|0}j=G;b=b+1|0;continue}else if((n|0)==34){n=0;if(h){p=wc(k<<24>>24|0)|0;if((p|0)!=(wc(a[b]|0)|0)){q=0;n=38;break}}else{if(!(k<<24>>24==(a[b]|0))){q=0;n=38;break}}j=c+1|0;b=b+1|0;continue}}if((n|0)==38){i=e;return q|0}return 0}function jj(b,c,d){b=b|0;c=c|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+128|0;f=e|0;g=e+64|0;h=f|0;j=g|0;k=0;while(1){l=a[b+k|0]|0;if((l<<24>>24|0)==0){m=k;break}else if((l<<24>>24|0)==92|(l<<24>>24|0)==58){a[f+k|0]=47}else{a[f+k|0]=l}l=k+1|0;if((l|0)<63){k=l}else{m=l;break}}a[f+m|0]=0;m=0;while(1){f=a[c+m|0]|0;if((f<<24>>24|0)==0){n=m;break}else if((f<<24>>24|0)==92|(f<<24>>24|0)==58){a[g+m|0]=47}else{a[g+m|0]=f}f=m+1|0;if((f|0)<63){m=f}else{n=f;break}}a[g+n|0]=0;n=ij(h,j,d)|0;i=e;return n|0}function kj(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+8|0;d=b|0;e=Dd(0)|0;c[d>>2]=e;if((a|0)==0){f=e;i=b;return f|0}e=gb(d|0)|0;if((e|0)!=0){c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];c[a+32>>2]=c[e+32>>2]}f=c[d>>2]|0;i=b;return f|0}function lj(){var a=0;a=c[179598]|0;return(c[a>>2]|0)-(c[a+4>>2]|0)|0}function mj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;if((a|0)==0){aj(1,43720,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}e=a-20|0;f=e;if((c[a-4>>2]|0)!=1919505){aj(0,43080,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}g=a-16|0;h=c[g>>2]|0;if((h|0)==0){aj(0,42456,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}else if((h|0)==5){i=b;return}else{j=e;e=c[j>>2]|0;if((c[a+(e-24)>>2]|0)!=1919505){aj(0,41976,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0);i=d}d=c[((h|0)==4?575392:718392)>>2]|0;h=d+4|0;c[h>>2]=(c[h>>2]|0)-e;e=c[j>>2]|0;Zx(a|0,-86|0,e-20|0)|0;c[g>>2]=0;g=c[a-8>>2]|0;do{if((c[g+4>>2]|0)==0){j=g|0;c[j>>2]=(c[j>>2]|0)+e;j=c[a-12>>2]|0;c[g+8>>2]=j;c[j+12>>2]=g;j=d+28|0;if((f|0)!=(c[j>>2]|0)){k=g;l=j;break}c[j>>2]=g;k=g;l=j}else{k=f;l=d+28|0}}while(0);c[l>>2]=k;l=k+8|0;d=c[l>>2]|0;if((c[d+4>>2]|0)!=0){i=b;return}f=k|0;c[f>>2]=(c[f>>2]|0)+(c[d>>2]|0);f=c[d+8>>2]|0;c[l>>2]=f;c[f+12>>2]=k;i=b;return}}function nj(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;d=i;if((b|0)==0){aj(0,41520,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;return 0}else if((b|0)==4){f=575392}else{f=718392}g=c[f>>2]|0;f=a+27&-4;a=g+28|0;h=c[a>>2]|0;j=c[h+12>>2]|0;if((h|0)==(j|0)){k=c[143848]|0;l=(g|0)==(k|0);m=l?40112:39624;aj(0,40888,(e=i,i=i+16|0,c[e>>2]=f,c[e+8>>2]=m,e)|0);i=e;return 0}else{n=h;o=h}while(1){h=c[n+8>>2]|0;p=(c[n+4>>2]|0)==0?o:h;q=p+4|0;if((c[q>>2]|0)==0){r=p|0;s=c[r>>2]|0;if((s|0)>=(f|0)){break}}if((h|0)==(j|0)){t=5;break}else{n=h;o=p}}if((t|0)==5){k=c[143848]|0;l=(g|0)==(k|0);m=l?40112:39624;aj(0,40888,(e=i,i=i+16|0,c[e>>2]=f,c[e+8>>2]=m,e)|0);i=e;return 0}e=s-f|0;if((e|0)>64){m=p;l=m+f|0;k=l;c[l>>2]=e;c[m+(f+4)>>2]=0;c[m+(f+12)>>2]=p;c[m+(f+16)>>2]=1919505;e=p+8|0;l=c[e>>2]|0;c[m+(f+8)>>2]=l;c[l+12>>2]=k;c[e>>2]=k;c[r>>2]=f;u=f;v=k;w=m}else{u=s;v=c[p+8>>2]|0;w=p}c[q>>2]=b;c[a>>2]=v;v=g+4|0;c[v>>2]=(c[v>>2]|0)+u;c[p+16>>2]=1919505;c[w+((c[r>>2]|0)-4)>>2]=1919505;i=d;return p+20|0}function oj(a){a=a|0;var b=0;b=nj(a,1)|0;Zx(b|0,0,a|0)|0;return b|0}function pj(a){a=a|0;return nj(a,4)|0}function qj(b){b=b|0;var c=0,d=0;c=a[b]|0;if(c<<24>>24==0){d=6620;return d|0}do{if((a[b+1|0]|0)==0){if(!((c-48&255)>>>0<10>>>0)){break}d=1804+(((c<<24>>24)-48|0)*24|0)|0;return d|0}}while(0);c=nj((Wx(b|0)|0)+1|0,4)|0;by(c|0,b|0)|0;d=c;return d|0}function rj(){var a=0,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,x=0;a=i;b=0;d=0;e=0;f=0;g=(c[179598]|0)+16|0;while(1){h=c[g>>2]|0;if((xi()|0)==1){j=h+4|0}else{k=c[h>>2]|0;l=h+4|0;m=c[l>>2]|0;_i(35296,(n=i,i=i+24|0,c[n>>2]=h,c[n+8>>2]=k,c[n+16>>2]=m,n)|0);i=n;j=l}l=c[j>>2]|0;do{if((l|0)==0){o=b;p=d;q=e;r=f}else{m=c[h>>2]|0;k=m+f|0;s=e+1|0;if((l|0)==2){o=b;p=m+d|0;q=s;r=k;break}else if((l|0)==3){o=m+b|0;p=d;q=s;r=k;break}else{o=b;p=d;q=s;r=k;break}}}while(0);l=h+8|0;k=c[l>>2]|0;if((k|0)==((c[179598]|0)+8|0)){break}if((h+(c[h>>2]|0)|0)==(k|0)){t=k}else{_i(34792,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;t=c[l>>2]|0}if((c[t+12>>2]|0)!=(h|0)){_i(34424,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n}if((c[j>>2]|0)!=0){b=o;d=p;e=q;f=r;g=l;continue}if((c[(c[l>>2]|0)+4>>2]|0)!=0){b=o;d=p;e=q;f=r;g=l;continue}_i(33840,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;b=o;d=p;e=q;f=r;g=l}g=c[143848]|0;f=g+8|0;e=0;d=c[g+16>>2]|0;while(1){if((c[d+4>>2]|0)==0){u=e}else{u=(c[d>>2]|0)+e|0}g=c[d+8>>2]|0;if((g|0)==(f|0)){break}else{e=u;d=g}}_i(33232,(n=i,i=i+8|0,c[n>>2]=c[154356],n)|0);i=n;_i(32744,(n=i,i=i+8|0,c[n>>2]=c[154354],n)|0);i=n;_i(46552,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;_i(32152,(n=i,i=i+8|0,c[n>>2]=c[196488],n)|0);i=n;_i(31760,(n=i,i=i+8|0,c[n>>2]=c[196489],n)|0);i=n;d=c[196490]|0;if((d|0)!=(c[196489]|0)){_i(31416,(n=i,i=i+8|0,c[n>>2]=d,n)|0);i=n}_i(30800,(n=i,i=i+8|0,c[n>>2]=c[196491],n)|0);i=n;_i(46552,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;_i(30120,(n=i,i=i+8|0,c[n>>2]=c[196492],n)|0);i=n;_i(29776,(n=i,i=i+8|0,c[n>>2]=c[196493],n)|0);i=n;d=c[196494]|0;if((d|0)!=(c[196493]|0)){_i(29496,(n=i,i=i+8|0,c[n>>2]=d,n)|0);i=n}_i(29024,(n=i,i=i+8|0,c[n>>2]=c[196495],n)|0);i=n;_i(46552,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;_i(28736,(n=i,i=i+8|0,c[n>>2]=(c[196493]|0)+(c[196489]|0),n)|0);i=n;d=c[196491]|0;e=c[196489]|0;f=(d|0)>(e|0)?d-e|0:0;e=c[196495]|0;d=c[196493]|0;if((e|0)<=(d|0)){v=f;_i(28376,(n=i,i=i+8|0,c[n>>2]=v,n)|0);i=n;_i(46552,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;_i(27976,(n=i,i=i+16|0,c[n>>2]=r,c[n+8>>2]=q,n)|0);i=n;_i(27616,(n=i,i=i+8|0,c[n>>2]=p,n)|0);i=n;_i(27160,(n=i,i=i+8|0,c[n>>2]=o,n)|0);i=n;w=r-p|0;x=w-o|0;_i(26432,(n=i,i=i+8|0,c[n>>2]=x,n)|0);i=n;_i(25816,(n=i,i=i+8|0,c[n>>2]=u,n)|0);i=n;i=a;return}v=e-d+f|0;_i(28376,(n=i,i=i+8|0,c[n>>2]=v,n)|0);i=n;_i(46552,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;_i(27976,(n=i,i=i+16|0,c[n>>2]=r,c[n+8>>2]=q,n)|0);i=n;_i(27616,(n=i,i=i+8|0,c[n>>2]=p,n)|0);i=n;_i(27160,(n=i,i=i+8|0,c[n>>2]=o,n)|0);i=n;w=r-p|0;x=w-o|0;_i(26432,(n=i,i=i+8|0,c[n>>2]=x,n)|0);i=n;_i(25816,(n=i,i=i+8|0,c[n>>2]=u,n)|0);i=n;i=a;return}function sj(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;if((Nk()|0)!=0){aj(0,22360,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b}d=jk(22096,21880,33)|0;e=c[430624]|0;if((e|0)==0){f=5}else{if((c[e+32>>2]|0)==0){f=5}else{g=21448;h=1}}if((f|0)==5){g=21200;h=56}f=c[d+32>>2]|0;if((f|0)<(h|0)){c[154356]=h<<20;_i(g,(b=i,i=i+16|0,c[b>>2]=h,c[b+8>>2]=h,b)|0);i=b;j=c[154356]|0}else{h=f<<20;c[154356]=h;j=h}h=Hx(j+31|0,1)|0;c[154358]=h;if((h|0)==0){aj(0,20992,(b=i,i=i+8|0,c[b>>2]=(j|0)/1048576|0,b)|0);i=b}else{c[154358]=h+31&-32;ug();Zx(785952,0,16)|0;Zx(785968,0,16)|0;c[196486]=785952;c[196484]=785968;_i(20616,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;xo();Pi(20840,66);i=a;return}}function tj(){var a=0,b=0;a=i;ug();Zx(785952|0,0|0,16|0)|0;Zx(785968|0,0|0,16|0)|0;c[196486]=785952;c[196484]=785968;_i(20616,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;xo();i=a;return}function uj(){var a=0,b=0,d=0,e=0;a=c[196489]|0;b=c[196490]|0;d=c[196493]|0;e=c[196494]|0;return(c[154356]|0)-((a|0)>(b|0)?a:b)-((d|0)>(e|0)?d:e)|0}function vj(){c[196488]=c[196489];c[196492]=c[196493];return}function wj(){return(c[196492]|c[196488]|0)!=0|0}function xj(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;d=i;e=c[154358]|0;if((e|0)==0){aj(0,20352,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;return 0}g=c[196484]|0;h=c[g+8>>2]|0;j=c[g+4>>2]|0;do{if((b|0)!=2&(h|0)==(j|0)){k=c[196486]|0;if((b|0)==1&(k|0)!=785952){if(((c[g+12>>2]|0)-h|0)<=((c[k+12>>2]|0)-(c[k+4>>2]|0)|0)){break}c[196484]=k;c[196486]=g;break}if(!((b|0)==0&(k|0)!=785968)){break}if(((c[g+12>>2]|0)-h|0)<=((c[k+12>>2]|0)-(c[k+4>>2]|0)|0)){break}c[196484]=k;c[196486]=g}else{if((h|0)!=(j|0)){break}k=c[196486]|0;if(((c[g+12>>2]|0)-j|0)<=((c[k+12>>2]|0)-(c[k+4>>2]|0)|0)){break}c[196484]=k;c[196486]=g}}while(0);g=a+31&-32;if(((c[196490]|0)+g+(c[196494]|0)|0)>(c[154356]|0)){aj(1,19920,(f=i,i=i+8|0,c[f>>2]=g,f)|0);i=f;return 0}f=c[196486]|0;if((f|0)==785952){a=c[196489]|0;j=a+g|0;c[196489]=j;l=a;m=785952;n=j;o=e+l|0;p=m+8|0;c[p>>2]=n;Zx(o|0,0,g|0)|0;i=d;return o|0}else{j=f+4|0;a=(c[j>>2]|0)+g|0;c[j>>2]=a;l=(c[154356]|0)-a|0;m=f;n=a;o=e+l|0;p=m+8|0;c[p>>2]=n;Zx(o|0,0,g|0)|0;i=d;return o|0}return 0}function yj(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;b=i;d=c[154358]|0;if((d|0)==0){e=nj(a,1)|0;Zx(e|0,0,a|0)|0;f=e;i=b;return f|0}e=c[196484]|0;g=c[e+8>>2]|0;do{if((g|0)==(c[e+4>>2]|0)){h=c[196486]|0;j=c[h+4>>2]|0;if(((c[e+12>>2]|0)-g|0)<=((c[h+12>>2]|0)-j|0)){k=e;l=j;m=g;break}c[196484]=h;c[196486]=e;k=h;l=g;m=c[h+8>>2]|0}else{k=e;l=c[(c[196486]|0)+4>>2]|0;m=g}}while(0);g=a+11&-4;a=m+g|0;if((a+l|0)>(c[154356]|0)){aj(1,19360,(l=i,i=i+8|0,c[l>>2]=g,l)|0);i=l;return 0}c[k+8>>2]=a;if((k|0)==785952){n=m;o=785952}else{n=(c[154356]|0)-a|0;o=k}k=o+12|0;if((a|0)>(c[k>>2]|0)){c[k>>2]=a}c[d+n>>2]=-1991018350;c[d+(n+4)>>2]=g;f=d+(n+8)|0;i=b;return f|0}function zj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=c[154358]|0;if((d|0)==0){mj(a);i=b;return}e=a-8|0;f=e;if(!((c[f>>2]|0)==-1991018350)){aj(0,19048,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g}c[f>>2]=-1991018349;f=c[196484]|0;if((f|0)==785952){h=(c[196490]|0)-(c[a-4>>2]|0)|0;if((e|0)==(d+h|0)){c[196490]=h;i=b;return}else{_i(18792,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;i=b;return}}else{h=f+8|0;f=c[h>>2]|0;if((e|0)==(d+((c[154356]|0)-f)|0)){c[h>>2]=f-(c[a-4>>2]|0);i=b;return}else{_i(18792,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;i=b;return}}}function Aj(){var a=0;if((c[154358]|0)==0){return}a=c[196484]|0;c[a+8>>2]=c[a+4>>2];return}function Bj(){var a=0,b=0,d=0,e=0;a=i;fj(18640);b=jk(18640,18544,16)|0;c[429578]=b;d=c[b+32>>2]|0;if((d|0)==1){_i(18400,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;c[429574]=Vk(18264)|0;c[429576]=Vk(18168)|0}else if((d|0)==2){_i(18008,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;_k(18264,1718296,1)|0;_k(18168,1718304,1)|0}else if((d|0)==0){i=a;return}if((c[429574]|0)!=0&(c[429576]|0)!=0){i=a;return}nk(17736,18544);c[429574]=0;c[429576]=0;_i(17352,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;i=a;return}function Cj(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;b=i;i=i+24|0;d=b|0;e=c[374458]|0;if((c[375996]|0)>(e|0)){c[374458]=e+1;f=a;g=1497840+((e&255)*24|0)|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];i=b;return}g=ax()|0;if((g|0)!=0){f=(Wx(g|0)|0)+1|0;e=nj(f,1)|0;Zx(e|0,0,f|0)|0;by(e|0,g|0)|0;g=c[375996]|0;h=g&255;if((g-(c[374458]|0)|0)>255){_i(17216,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;j=1497860+(h*24|0)|0;k=c[j>>2]|0;if((k|0)!=0){mj(k)}c[374458]=(c[374458]|0)+1;l=c[375996]|0;m=j}else{l=g;m=1497860+(h*24|0)|0}c[375996]=l+1;c[1497840+(h*24|0)>>2]=Jd()|0;c[1497844+(h*24|0)>>2]=5;c[1497848+(h*24|0)>>2]=0;c[1497852+(h*24|0)>>2]=0;c[1497856+(h*24|0)>>2]=f;c[m>>2]=e}e=c[374458]|0;if((c[375996]|0)>(e|0)){c[374458]=e+1;m=a;f=1497840+((e&255)*24|0)|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[m+16>>2]=c[f+16>>2];c[m+20>>2]=c[f+20>>2];i=b;return}else{f=d;Zx(f|0,0,20)|0;c[a>>2]=Jd()|0;d=a+4|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];c[d+16>>2]=c[f+16>>2];i=b;return}}function Dj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;i=i+48|0;d=b|0;e=b+24|0;do{if((c[(c[429578]|0)+32>>2]|0)==2){if((bl(d,24,c[429574]|0)|0)!=24){aj(0,17136,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}g=d+16|0;h=c[g>>2]|0;if((h|0)==0){break}j=nj(h,1)|0;Zx(j|0,0,h|0)|0;c[d+20>>2]=j;h=bl(j,c[g>>2]|0,c[429574]|0)|0;if((h|0)==(c[g>>2]|0)){break}aj(0,17136,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}else{Cj(e);g=d;h=e;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];c[g+16>>2]=c[h+16>>2];c[g+20>>2]=c[h+20>>2];if((c[(c[429578]|0)+32>>2]|0)!=1){break}if((cl(g,24,c[429574]|0)|0)!=24){aj(0,16968,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}g=d+16|0;h=c[g>>2]|0;if((h|0)==0){break}j=cl(c[d+20>>2]|0,h,c[429574]|0)|0;if((j|0)==(c[g>>2]|0)){break}aj(0,16968,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f}}while(0);f=a;a=d;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];c[f+12>>2]=c[a+12>>2];c[f+16>>2]=c[a+16>>2];c[f+20>>2]=c[a+20>>2];i=b;return}function Ej(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((c[(c[423404]|0)+32>>2]|0)==0){e=0}else{e=Jd()|0}Qg(a,b);if((c[(c[423404]|0)+32>>2]|0)==0){i=d;return}b=Jd()|0;if((c[(c[423404]|0)+32>>2]|0)!=3){i=d;return}_i(16728,(a=i,i=i+8|0,c[a>>2]=b-e,a)|0);i=a;i=d;return}function Fj(){var a=0,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;a=i;i=i+16472|0;b=a|0;d=a+16416|0;e=a+16448|0;Tl(d,a+32|0,16384);f=e;g=e|0;h=e+4|0;j=e+8|0;k=e+12|0;l=e+20|0;a:while(1){m=c[423408]|0;if((c[423410]|0)>(m|0)){c[423408]=m+1;n=1693648+((m&1023)*24|0)|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];c[f+16>>2]=c[n+16>>2];c[f+20>>2]=c[n+20>>2]}else{Dj(e)}o=c[g>>2]|0;p=c[h>>2]|0;n=c[j>>2]|0;m=c[k>>2]|0;q=c[l>>2]|0;switch(p|0){case 1:{Nw(n,m,o);break};case 4:{Qw(n,m,o);break};case 0:{break a;break};case 2:{Jw(n);break};case 3:{Gw(n,m,o);break};case 5:{Ai(q);Ai(46552);break};default:{r=22;break a}}if((q|0)==0){continue}mj(q)}if((r|0)==22){aj(0,16592,(s=i,i=i+8|0,c[s>>2]=p,s)|0);i=s;return 0}p=(vm(0,b,d)|0)!=0;if(p&(c[469154]|0)==0){do{Iw(b,d);p=(vm(0,b,d)|0)!=0;}while(p&(c[469154]|0)==0)}p=(vm(1,b,d)|0)!=0;if(!(p&(c[469154]|0)==0)){t=16384;u=0;i=a;return o|0}do{do{if((c[(c[423400]|0)+32>>2]|0)!=0){if((c[(c[423404]|0)+32>>2]|0)==0){v=0}else{v=Jd()|0}Qg(b,d);if((c[(c[423404]|0)+32>>2]|0)==0){break}p=Jd()|0;if((c[(c[423404]|0)+32>>2]|0)!=3){break}_i(16728,(s=i,i=i+8|0,c[s>>2]=p-v,s)|0);i=s}}while(0);p=(vm(1,b,d)|0)!=0;}while(p&(c[469154]|0)==0);t=16384;u=0;i=a;return o|0}function Gj(){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;b=i;i=i+40|0;d=b+16|0;e=d|0;f=d+4|0;g=d+8|0;h=b|0;while(1){Dj(d);j=c[e>>2]|0;k=c[f>>2]|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];if((k|0)==0){break}l=c[423410]|0;m=l&1023;if((l-(c[423408]|0)|0)>1023){if(!(a[61272]|0)){a[61272]=1;_i(16856,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n}n=c[1693668+(m*24|0)>>2]|0;if((n|0)!=0){mj(n)}c[423408]=(c[423408]|0)+1;o=c[423410]|0}else{a[61272]=0;o=l}c[1693648+(m*24|0)>>2]=j;c[1693652+(m*24|0)>>2]=k;k=1693656+(m*24|0)|0;c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];c[423410]=o+1}i=b;return j|0}function Hj(){var a=0,b=0,d=0,e=0;a=i;b=xi()|0;d=yi(1)|0;if((b|0)>2){oc(d|0,Ji(2)|0);i=a;return}if((b|0)!=2){i=a;return}b=Uc(d|0)|0;if((b|0)==0){_i(60872,(e=i,i=i+8|0,c[e>>2]=d,e)|0);i=e;i=a;return}else{_i(16464,(e=i,i=i+16|0,c[e>>2]=d,c[e+8>>2]=b,e)|0);i=e;i=a;return}}function Ij(){var b=0,d=0;Bi(0,60488);Di();a:do{if((c[429560]|0)>0){b=0;while(1){d=1722504+(b<<2)|0;Mi(c[d>>2]|0);if((tn(yi(0)|0,49544)|0)==0){break}b=b+1|0;if((tn(yi(0)|0,48776)|0)==0){break}if((b|0)>=(c[429560]|0)){break a}}a[c[d>>2]|0]=0;return}}while(0);Bi(0,60056);Di();Bi(0,60008);Di();return}function Jj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!((c[429586]|0)==0&(c[429588]|0)!=0)){return}e=Hx(1,8)|0;f=e;c[e+4>>2]=48;g=Hx(4,1)|0;c[e>>2]=g;c[469154]=(c[469154]|0)+1;c[g>>2]=b;e=c[(c[430914]|0)+32>>2]|0;h=g+4|0;c[h>>2]=e;c[g+8>>2]=d;c[429586]=1;if((c[(c[423400]|0)+32>>2]|0)==0){i=e}else{Ig(59880);i=c[h>>2]|0}if((i|0)!=0){if((b|0)!=0){Kw(0)}Ew(59880,b,0)}Il(a,f);return}function Kj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;b=c[a>>2]|0;d=c[b+8>>2]|0;e=c[b>>2]|0;f=c[b+4>>2]|0;if((b|0)!=0){Gx(b)}Gx(a);c[469154]=(c[469154]|0)-1;Bk(1);Ij();if((e|0)!=0){Tm()}if((f|0)!=0){Fw();Vw(0)}c[429586]=0;if((d|0)==0){return}ae[c[d+4>>2]&127](d,0);return}function Lj(){var a=0;a=yi(1)|0;if((Yk(a,c[(c[430924]|0)+4>>2]|0)|0)==0){nk(59832,2551544);Jj(0,1,0);return}else{nk(59832,yi(1)|0);Jj(0,1,0);return}}
|
|
|
|
|
|
|
|
function _r(b,d){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=i;i=i+256|0;f=e|0;g=f|0;h=a[b]|0;if(h<<24>>24==0){j=d;k=256;l=0;i=e;return j|0}else{m=b;n=d;o=h}a:while(1){h=(n|0)==0;d=m;p=o;b:while(1){q=d+1|0;c:do{if(p<<24>>24==1){r=a[q]|0;if((r|0)==114){s=d+2|0;t=a[s]|0;if((t&255)>>>0<2>>>0){u=s;v=0}else{w=s;s=0;x=t;while(1){t=w+1|0;a[f+s|0]=x;y=s+1|0;z=a[t]|0;if((z&255)>>>0<2>>>0){u=t;v=y;break}else{w=t;s=y;x=z}}}a[f+v|0]=0;A=(a[u]|0)==0?u:u+1|0;x=c[154404]|0;d:do{if((x|0)!=0){s=x;while(1){if((Tx(c[s>>2]|0,g)|0)==0){B=+((Yx()|0)&32767|0)/32767.0;w=~~(B*+(c[s+4>>2]|0));z=c[s+8>>2]|0;y=(z|0)!=0;if((w|0)<1|y^1){C=z;D=y}else{y=w;w=z;while(1){z=c[w+4>>2]|0;t=(z|0)!=0;if((y|0)<2|t^1){C=z;D=t;break}else{y=y-1|0;w=z}}}if(D){break}}s=c[s+12>>2]|0;if((s|0)==0){break d}}if((c[C>>2]|0)!=0){E=A;break c}}}while(0);if(h){break b}else{F=n}while(1){if((Tx(c[F>>2]|0,g)|0)==0){E=A;break c}F=c[F+4>>2]|0;if((F|0)==0){break b}}}else if((r|0)==118){x=d+2|0;while(1){s=a[x]|0;G=s<<24>>24==0;H=x+1|0;if(s<<24>>24!=1&(G^1)){x=H}else{break}}E=G?x:H;break}else{ue[c[636260]&31](4,33488,(I=i,i=i+8|0,c[I>>2]=b,I)|0);i=I;E=q;break}}else{E=q}}while(0);q=a[E]|0;if(q<<24>>24==0){j=n;J=23;break a}else{d=E;p=q}}iv(34064,(I=i,i=i+16|0,c[I>>2]=g,c[I+8>>2]=g,I)|0);i=I;p=kv((Wx(g|0)|0)+9|0)|0;d=p;h=p+8|0;c[p>>2]=h;by(h|0,g|0)|0;c[p+4>>2]=n;p=a[A]|0;if(p<<24>>24==0){j=d;J=23;break}else{m=A;n=d;o=p}}if((J|0)==23){k=256;l=0;i=e;return j|0}return 0}function $r(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if((a|0)==0){return}else{b=a}while(1){a=c[b+16>>2]|0;d=c[b>>2]|0;if((d|0)!=0){e=d;while(1){d=c[e+12>>2]|0;f=c[e+8>>2]|0;if((f|0)!=0){g=f;while(1){f=c[g+12>>2]|0;do{if((c[g>>2]|0)==2){h=c[g+4>>2]|0;if((h|0)==0){break}else{i=h}while(1){h=c[i+4>>2]|0;nv(i);if((h|0)==0){break}else{i=h}}}}while(0);nv(g);if((f|0)==0){break}else{g=f}}}g=c[e+4>>2]|0;if((g|0)!=0){nv(g)}nv(e);if((d|0)==0){break}else{e=d}}}e=c[b+12>>2]|0;if((e|0)!=0){g=e;while(1){e=c[g+8>>2]|0;nv(g);if((e|0)==0){break}else{g=e}}}nv(b);if((a|0)==0){break}else{b=a}}return}function as(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,C=0,D=0,E=0;d=i;if((b|0)==0){e=0;f=0;g=38}else{h=1;j=0;k=0;l=b;while(1){m=l|0;n=c[m>>2]|0;do{if((n&3|0)==0){if((n&16|0)==0){o=(n&8|0)==0?k:1;p=j;q=0;r=n;break}s=c[l+8>>2]|0;if((s|0)==0){o=k;p=j;q=0;r=n;break}else{t=j;u=s}while(1){s=(c[u>>2]|0)==1?1:t;v=c[u+12>>2]|0;if((v|0)==0){o=k;p=s;q=0;r=n;break}else{t=s;u=v}}}else{if((n&9|0)!=9){o=k;p=j;q=h;r=n;break}v=l+4|0;s=b;do{a:do{if((s|0)!=(l|0)){if((c[s>>2]&18|0)!=16){break}w=c[s+8>>2]|0;if((w|0)!=0){x=w;do{w=c[x>>2]|0;do{if((w|0)==1){break a}else if((w|0)==2){y=c[x+4>>2]|0;if((y|0)==0){break}else{z=y}do{if(!((Nr(c[z>>2]|0,c[v>>2]|0,0)|0)==-1)){break a}z=c[z+4>>2]|0;}while((z|0)!=0)}}while(0);x=c[x+12>>2]|0;}while((x|0)!=0)}sv(a,28496,(A=i,i=i+8|0,c[A>>2]=c[v>>2],A)|0);i=A}}while(0);s=c[s+12>>2]|0;}while((s|0)!=0);o=k;p=j;q=h;r=c[m>>2]|0}}while(0);if((r&10|0)==10){m=l+4|0;n=b;do{do{if((n|0)!=(l|0)){s=c[n>>2]|0;if((s&2|0)!=0){break}if((s&8|0)!=0){v=n+4|0;if((Nr(c[v>>2]|0,c[m>>2]|0,0)|0)==-1){break}x=c[v>>2]|0;sv(a,28184,(A=i,i=i+16|0,c[A>>2]=c[m>>2],c[A+8>>2]=x,A)|0);i=A;break}if((s&16|0)==0){break}s=c[n+8>>2]|0;if((s|0)==0){break}else{B=s}do{do{if((c[B>>2]|0)==2){s=c[B+4>>2]|0;if((s|0)==0){break}else{C=s}do{s=C|0;if(!((Nr(c[s>>2]|0,c[m>>2]|0,0)|0)==-1)){x=c[s>>2]|0;sv(a,27760,(A=i,i=i+16|0,c[A>>2]=c[m>>2],c[A+8>>2]=x,A)|0);i=A}C=c[C+4>>2]|0;}while((C|0)!=0)}}while(0);B=c[B+12>>2]|0;}while((B|0)!=0)}}while(0);n=c[n+12>>2]|0;}while((n|0)!=0)}n=c[l+12>>2]|0;if((n|0)==0){break}else{h=q;j=p;k=o;l=n}}if((q|0)==0){D=o;E=p}else{e=o;f=p;g=38}}if((g|0)==38){sv(a,27368,(A=i,i=i+1|0,i=i+7&-8,c[A>>2]=0,A)|0);i=A;D=e;E=f}if((E|0)==0|(D|0)==0){i=d;return}sv(a,26816,(A=i,i=i+1|0,i=i+7&-8,c[A>>2]=0,A)|0);i=A;i=d;return}function bs(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,A=0,B=0,C=0,D=0,E=0;d=i;i=i+1576|0;e=d+256|0;f=d+512|0;h=d|0;j=e|0;k=f|0;hw(17600);l=bw(b)|0;a:do{if((l|0)==0){ue[c[636260]&31](3,60360,(m=i,i=i+8|0,c[m>>2]=b,m)|0);i=m;n=0}else{b:do{if((Yv(l,f)|0)==0){o=0}else{p=f+1036|0;q=0;c:while(1){if((Tx(k,53624)|0)!=0){r=7;break}s=mv(20)|0;t=s;u=s;c[u>>2]=0;c[s+16>>2]=q;do{v=mv(16)|0;w=v;c[w>>2]=0;x=v+4|0;c[x>>2]=0;y=v+8|0;c[y>>2]=0;c[v+12>>2]=c[u>>2];c[u>>2]=v;do{if((Av(l,32336)|0)==0){if((Av(l,31904)|0)==0){break}c[w>>2]=c[w>>2]|2}else{c[w>>2]=c[w>>2]|1}}while(0);do{if((Av(l,31568)|0)==0){if((Av(l,31184)|0)!=0){c[w>>2]=c[w>>2]|64;break}if((Av(l,30392)|0)!=0){c[w>>2]=c[w>>2]|128;break}if((Av(l,29928)|0)!=0){c[w>>2]=c[w>>2]|256;break}if((Av(l,52544)|0)!=0){c[w>>2]=c[w>>2]|16;v=Vr(l,49880)|0;c[y>>2]=v;if((v|0)==0){r=23;break c}else{break}}v=(Av(l,25576)|0)==0;A=c[w>>2]|0;if(v){c[w>>2]=A|8;if((_v(l,1,0,f)|0)==0){r=35;break c}sw(k);v=mv((Wx(k|0)|0)+1|0)|0;c[x>>2]=v;by(v|0,k|0)|0;break}c[w>>2]=A|32;a[j]=0;do{if((_v(l,1,0,f)|0)==0){r=27;break c}sw(k);if((a[j]|0)!=0){A=e+(Wx(j|0)|0)|0;z=92;a[A]=z;z=z>>8;a[A+1|0]=z}$x(j|0,k|0)|0;}while((Av(l,50648)|0)!=0);if((Zv(l,25088)|0)==0){r=32;break c}A=mv((Wx(j|0)|0)+1|0)|0;c[x>>2]=A;by(A|0,j|0)|0}else{c[w>>2]=c[w>>2]|4}}while(0);Av(l,50648)|0;}while((Av(l,49192)|0)==0);as(l,c[u>>2]|0);if((Zv(l,39408)|0)==0){r=40;break}if((_v(l,3,0,f)|0)==0){r=40;break}g[s+4>>2]=+g[p>>2];if((Zv(l,57048)|0)==0){r=42;break}w=s+8|0;c[w>>2]=0;if((Av(l,55680)|0)==0){x=s+12|0;do{if((Tr(l,h)|0)==0){r=46;break c}y=mv((Wx(h|0)|0)+13|0)|0;A=y+12|0;c[y>>2]=A;by(A|0,h|0)|0;g[y+4>>2]=-40.0;c[y+8>>2]=c[x>>2];c[x>>2]=y;c[w>>2]=(c[w>>2]|0)+1;}while((Av(l,55680)|0)==0)}if((Yv(l,f)|0)==0){o=t;break b}else{q=t}}if((r|0)==7){rv(l,26112,(m=i,i=i+8|0,c[m>>2]=k,m)|0);i=m;$r(q);cw(l);n=0;break a}else if((r|0)==23){$r(t);n=0;break a}else if((r|0)==27){$r(t);cw(l);n=0;break a}else if((r|0)==32){$r(t);cw(l);n=0;break a}else if((r|0)==35){$r(t);cw(l);n=0;break a}else if((r|0)==40){$r(t);cw(l);n=0;break a}else if((r|0)==42){$r(t);cw(l);n=0;break a}else if((r|0)==46){$r(t);cw(l);n=0;break a}}}while(0);cw(l);ue[c[636260]&31](1,45464,(m=i,i=i+8|0,c[m>>2]=b,m)|0);i=m;do{if((c[636484]|0)==0){r=55}else{if((o|0)==0){break}else{B=0;C=o}while(1){p=c[C+12>>2]|0;if((p|0)==0){D=B}else{w=B;x=p;while(1){p=_r(c[x>>2]|0,w)|0;s=c[x+8>>2]|0;if((s|0)==0){D=p;break}else{w=p;x=s}}}x=c[C+16>>2]|0;if((x|0)==0){break}else{B=D;C=x}}if((D|0)==0){r=55;break}else{E=D}while(1){q=c[E+4>>2]|0;nv(E);if((q|0)==0){r=55;break}else{E=q}}}}while(0);if((r|0)==55){if((o|0)!=0){n=o;break}}ue[c[636260]&31](1,24680,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;n=0}}while(0);i=d;return n|0}function cs(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,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,ba=0,ca=0;d=i;i=i+1320|0;e=d+256|0;f=d|0;h=e|0;j=0;k=0;l=0;m=0;n=0;o=0;a:while(1){p=(j|0)!=0;q=p^1;if((l|0)==0|q){r=m}else{r=kv(l)|0}hw(17600);s=bw(a)|0;if((s|0)==0){t=6;break}if(p){u=r;v=r+4|0}else{u=n;v=r}b:do{if((Yv(s,e)|0)==0){w=k;x=4;y=v;z=o;t=46}else{p=u|0;A=k;B=4;C=v;D=o;while(1){while(1){if((Tx(h,22728)|0)!=0){t=45;break a}if((_v(s,1,0,e)|0)==0){t=17;break a}sw(h);if((Zv(s,57048)|0)==0){t=19;break a}if((tn(h,b)|0)==0){break}else{E=1}while(1){if(($v(s,e)|0)==0){t=40;break a}if((Tx(h,57048)|0)==0){F=E+1|0}else{F=(((Tx(h,55680)|0)==0)<<31>>31)+E|0}if((F|0)==0){break}else{E=F}}if((Yv(s,e)|0)==0){w=A;x=B;y=C;z=D;t=46;break b}}if(($v(s,e)|0)==0){t=23;break a}else{G=B;H=C;I=D}while(1){if((Tx(h,55680)|0)==0){break}if((Tx(h,22224)|0)!=0){t=26;break a}if((_v(s,1,0,e)|0)==0){t=29;break a}if((Zv(s,57048)|0)==0){t=29;break a}sw(h);if((H|0)==0|q){J=I;K=H}else{L=H;ay(H|0,h|0,32)|0;c[H+36>>2]=0;c[H+40>>2]=c[p>>2];c[p>>2]=L;J=L;K=H+44|0}L=G+44|0;if((Av(s,55680)|0)==0){M=J+36|0;N=J+32|0;O=L;P=K;while(1){if((Tr(s,f)|0)==0){t=35;break a}Q=(Wx(f|0)|0)+4&-4;if((P|0)==0|q){R=P}else{g[P+4>>2]=-40.0;c[P+8>>2]=c[M>>2];c[M>>2]=P;S=P+12|0;c[P>>2]=S;by(S|0,f|0)|0;c[N>>2]=(c[N>>2]|0)+1;R=P+(Q+12)|0}S=O+12+Q|0;if((Av(s,55680)|0)==0){O=S;P=R}else{T=S;U=R;break}}}else{T=L;U=K}if(($v(s,e)|0)==0){t=23;break a}else{G=T;H=U;I=J}}if((Yv(s,e)|0)==0){break}else{A=1;B=G;C=H;D=I}}cw(s);V=I;W=H;X=G;Y=1}}while(0);if((t|0)==46){t=0;cw(s);if((w|0)==0){t=47;break}else{V=z;W=y;X=x;Y=w}}q=j+1|0;if((q|0)<2){j=q;k=Y;l=X;m=W;n=u;o=V}else{t=48;break}}do{if((t|0)==6){ue[c[636260]&31](3,60360,(Z=i,i=i+8|0,c[Z>>2]=a,Z)|0);i=Z;_=0}else if((t|0)==17){cw(s);_=0}else if((t|0)==19){cw(s);_=0}else if((t|0)==23){cw(s);_=0}else if((t|0)==26){rv(s,22016,(Z=i,i=i+8|0,c[Z>>2]=h,Z)|0);i=Z;cw(s);_=0}else if((t|0)==29){cw(s);_=0}else if((t|0)==35){cw(s);_=0}else if((t|0)==40){cw(s);_=0}else if((t|0)==45){rv(s,21736,(Z=i,i=i+8|0,c[Z>>2]=h,Z)|0);i=Z;cw(s);_=0}else if((t|0)==47){ue[c[636260]&31](3,21352,(Z=i,i=i+16|0,c[Z>>2]=b,c[Z+8>>2]=a,Z)|0);i=Z;_=0}else if((t|0)==48){ue[c[636260]&31](1,21088,(Z=i,i=i+16|0,c[Z>>2]=b,c[Z+8>>2]=a,Z)|0);i=Z;if((c[636484]|0)==0){_=u;break}V=c[u>>2]|0;if((V|0)==0){_=u;break}else{$=0;aa=V}while(1){V=c[aa+36>>2]|0;if((V|0)==0){ba=$}else{o=$;n=V;while(1){V=_r(c[n>>2]|0,o)|0;W=c[n+8>>2]|0;if((W|0)==0){ba=V;break}else{o=V;n=W}}}n=c[aa+40>>2]|0;if((n|0)==0){break}else{$=ba;aa=n}}if((ba|0)==0){_=u;break}else{ca=ba}while(1){n=c[ca+4>>2]|0;nv(ca);if((n|0)==0){_=u;break}else{ca=n}}}}while(0);i=d;return _|0}function ds(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;e=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;g=8;i=e;return g|0}h=c[2545392+(a<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,57544,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;g=8;i=e;return g|0}a=h+312|0;j=c[a>>2]|0;if((j|0)!=0){nv(j)}c[a>>2]=0;do{if(+bv(20896)!=0.0){k=0}else{a=0;j=-1;a:while(1){l=c[785680+(a<<2)>>2]|0;do{if((l|0)==0){m=(j|0)==-1?a:j}else{if((Tx(b,l+4|0)|0)!=0){m=j;break}if((Tx(d,l+68|0)|0)==0){n=12;break a}else{m=j}}}while(0);o=a+1|0;if((o|0)<64){a=o;j=m}else{break}}if((n|0)==12){c[h+312>>2]=c[l>>2];g=0;i=e;return g|0}if(!((m|0)==-1)){k=m;break}ue[c[636260]&31](4,20696,(f=i,i=i+16|0,c[f>>2]=d,c[f+8>>2]=b,f)|0);i=f;g=8;i=e;return g|0}}while(0);m=cs(b,d)|0;l=h+312|0;c[l>>2]=m;if((m|0)==0){ue[c[636260]&31](4,20424,(f=i,i=i+16|0,c[f>>2]=d,c[f+8>>2]=b,f)|0);i=f;g=8;i=e;return g|0}if(+bv(20896)!=0.0){g=0;i=e;return g|0}f=kv(132)|0;m=785680+(k<<2)|0;c[m>>2]=f;c[f>>2]=c[l>>2];rn((c[m>>2]|0)+68|0,d,64);rn((c[m>>2]|0)+4|0,b,64);g=0;i=e;return g|0}function es(b,d,e,f,h,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;var 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,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0;k=i;i=i+256|0;l=k|0;m=l|0;n=l|0;o=a[d]|0;a:do{if(o<<24>>24==0){p=0;q=0}else{r=(j|0)==0;s=0;t=0;u=d;v=o;b:while(1){w=s;x=u;y=v;c:while(1){z=x;A=y;while(1){B=z+1|0;if(!(A<<24>>24==1)){C=42;break}D=a[B]|0;if((D|0)==118){E=z+2|0;F=a[E]|0;if((F&255)>>>0<2>>>0){G=0;H=F<<24>>24==0?E:z+3|0}else{I=0;J=E;E=F;while(1){K=J+1|0;L=(I*10|0)-48+(E<<24>>24)|0;M=a[K]|0;if((M&255)>>>0<2>>>0){break}else{I=L;J=K;E=M}}if((L|0)>8){C=11;break b}else{G=L;H=M<<24>>24==0?K:J+2|0}}N=a[f+264+(G<<3)|0]|0;if(N<<24>>24>-1){C=13;break}else{O=H}}else if((D|0)==114){break c}else{ue[c[636260]&31](4,18704,(P=i,i=i+8|0,c[P>>2]=d,P)|0);i=P;O=B}E=a[O]|0;if(E<<24>>24==0){p=w;q=t;break a}else{z=O;A=E}}if((C|0)==13){C=0;E=c[f+264+(G<<3)+4>>2]|0;if((E|0)>0){I=(E|0)>1?E:1;Vx(m|0,f+(N<<24>>24)|0,I)|0;Q=I}else{Q=0}a[l+Q|0]=0;do{if(r){I=c[33776]|0;if((I|0)==0){break}else{R=I}do{do{if((c[R>>2]&h|0)!=0){I=R+8|0;E=c[I>>2]|0;F=c[E+8>>2]|0;if((F|0)==0){break}Pr(n,c[F>>2]|0,c[E>>2]|0);E=c[F+8>>2]|0;if((E|0)==0){break}else{S=E}do{Pr(n,c[S>>2]|0,c[c[I>>2]>>2]|0);S=c[S+8>>2]|0;}while((S|0)!=0)}}while(0);R=c[R+12>>2]|0;}while((R|0)!=0)}else{Sr(n,h)}}while(0);if(((Wx(n|0)|0)+w|0)>>>0>255>>>0){C=24;break b}by(b+w|0,n|0)|0;T=H;U=(Wx(n|0)|0)+w|0}else if((C|0)==42){C=0;V=w+1|0;a[b+w|0]=A;if((w|0)>254){C=43;break b}else{T=B;U=V}}D=a[T]|0;if(D<<24>>24==0){p=U;q=t;break a}else{w=U;x=T;y=D}}y=z+2|0;x=a[y]|0;if((x&255)>>>0<2>>>0){W=0;X=y}else{D=0;J=y;y=x;while(1){x=J+1|0;a[l+D|0]=y;I=D+1|0;E=a[x]|0;if((E&255)>>>0<2>>>0){W=I;X=x;break}else{D=I;J=x;y=E}}}a[l+W|0]=0;y=(a[X]|0)==0?X:X+1|0;J=c[154404]|0;if((J|0)==0){C=36;break}else{Y=J}while(1){if((Tx(c[Y>>2]|0,n)|0)==0){Z=+((Yx()|0)&32767|0)/32767.0;J=~~(Z*+(c[Y+4>>2]|0));D=c[Y+8>>2]|0;E=(D|0)!=0;if((J|0)<1|E^1){_=D;$=E}else{E=J;J=D;while(1){D=c[J+4>>2]|0;x=(D|0)!=0;if((E|0)<2|x^1){_=D;$=x;break}else{E=E-1|0;J=D}}}if($){break}}J=c[Y+12>>2]|0;if((J|0)==0){C=36;break b}else{Y=J}}J=c[_>>2]|0;if((J|0)==0){C=36;break}if(((Wx(J|0)|0)+w|0)>>>0>255>>>0){C=38;break}by(b+w|0,J|0)|0;E=(Wx(J|0)|0)+w|0;J=a[y]|0;if(J<<24>>24==0){p=E;q=1;break a}else{s=E;t=1;u=y;v=J}}if((C|0)==11){ue[c[636260]&31](3,20160,(P=i,i=i+16|0,c[P>>2]=d,c[P+8>>2]=L,P)|0);i=P;aa=0;ba=256;ca=0;i=k;return aa|0}else if((C|0)==24){ue[c[636260]&31](3,19592,(P=i,i=i+8|0,c[P>>2]=d,P)|0);i=P;aa=0;ba=256;ca=0;i=k;return aa|0}else if((C|0)==36){ue[c[636260]&31](3,19120,(P=i,i=i+8|0,c[P>>2]=n,P)|0);i=P;aa=0;ba=256;ca=0;i=k;return aa|0}else if((C|0)==38){ue[c[636260]&31](3,18880,(P=i,i=i+8|0,c[P>>2]=d,P)|0);i=P;aa=0;ba=256;ca=0;i=k;return aa|0}else if((C|0)==43){ue[c[636260]&31](3,18880,(P=i,i=i+8|0,c[P>>2]=d,P)|0);i=P;p=V;q=t;break}}}while(0);a[b+p|0]=0;p=c[33776]|0;if((p|0)==0){aa=q;ba=256;ca=0;i=k;return aa|0}else{da=p}while(1){d:do{if((c[da>>2]&e|0)!=0){Z=+((Yx()|0)&32767|0)/32767.0;ea=Z*+g[da+4>>2];if(!(ea!=0.0)){break}p=c[da+8>>2]|0;if((p|0)==0){break}else{fa=0.0;ga=p}while(1){Z=fa+ +g[ga+4>>2];if(ea<Z){break}V=c[ga+8>>2]|0;if((V|0)==0){break d}else{fa=Z;ga=V}}y=ga|0;w=p;do{if((w|0)!=(ga|0)){Pr(b,c[w>>2]|0,c[y>>2]|0)}w=c[w+8>>2]|0;}while((w|0)!=0)}}while(0);t=c[da+12>>2]|0;if((t|0)==0){aa=q;break}else{da=t}}ba=256;ca=0;i=k;return aa|0}function fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0;d=c[c[a+312>>2]>>2]|0;if((d|0)==0){e=0;return e|0}else{f=d}while(1){if((tn(f|0,b)|0)==0){break}d=c[f+40>>2]|0;if((d|0)==0){e=0;h=17;break}else{f=d}}if((h|0)==17){return e|0}b=f+36|0;f=c[b>>2]|0;if((f|0)==0){e=0;return e|0}else{i=0;j=f}do{k=+g[j+4>>2];i=(k<=+yp())+i|0;j=c[j+8>>2]|0;}while((j|0)!=0);if((i|0)<1){j=c[b>>2]|0;if((j|0)==0){e=0;return e|0}else{l=0.0;m=0;n=j}while(1){k=+g[n+4>>2];j=l==0.0|k<l;o=j?n:m;f=c[n+8>>2]|0;if((f|0)==0){break}else{l=j?k:l;m=o;n=f}}if((o|0)==0){e=0;return e|0}e=c[o>>2]|0;return e|0}o=Yx()|0;n=c[b>>2]|0;if((n|0)==0){e=0;return e|0}b=~~(+(i|0)*(+(o&32767|0)/32767.0));o=n;while(1){p=o+4|0;l=+g[p>>2];if(l>+yp()){q=b}else{if((b|0)<1){break}else{q=b-1|0}}n=c[o+8>>2]|0;if((n|0)==0){e=0;h=17;break}else{b=q;o=n}}if((h|0)==17){return e|0}g[p>>2]=+yp()+20.0;e=c[o>>2]|0;return e|0}function gs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}g=c[2545392+(a<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}a=c[c[g+312>>2]>>2]|0;if((a|0)==0){f=0;i=d;return f|0}else{h=a}while(1){if((tn(h|0,b)|0)==0){break}a=c[h+40>>2]|0;if((a|0)==0){f=0;j=12;break}else{h=a}}if((j|0)==12){i=d;return f|0}if(+bv(18304)!=0.0){j=h+32|0;a=c[j>>2]|0;ue[c[636260]&31](1,18200,(e=i,i=i+16|0,c[e>>2]=b,c[e+8>>2]=a,e)|0);i=e;ue[c[636260]&31](1,18056,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;k=j}else{k=h+32|0}f=c[k>>2]|0;i=d;return f|0}function hs(b,d,e,f,g,h,j,k,l,m,n){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;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;o=i;i=i+584|0;p=o+256|0;q=p|0;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(r=i,i=i+8|0,c[r>>2]=b,r)|0);i=r;s=328;t=0;i=o;return}u=c[2545392+(b<<2)>>2]|0;if((u|0)==0){ue[c[636260]&31](4,57544,(r=i,i=i+8|0,c[r>>2]=b,r)|0);i=r;s=328;t=0;i=o;return}if((c[u+312>>2]|0)==0){s=328;t=0;i=o;return}b=fs(u,d)|0;if((b|0)==0){s=328;t=0;i=o;return}Zx(q|0,0,328)|0;if((f|0)==0){v=0}else{$x(q|0,f|0)|0;a[p+264|0]=0;c[p+268>>2]=Wx(f|0)|0;v=Wx(f|0)|0}if((g|0)==0){w=v}else{$x(q|0,g|0)|0;a[p+272|0]=v;c[p+276>>2]=Wx(g|0)|0;w=(Wx(g|0)|0)+v|0}if((h|0)==0){x=w}else{$x(q|0,h|0)|0;a[p+280|0]=w;c[p+284>>2]=Wx(h|0)|0;x=(Wx(h|0)|0)+w|0}if((j|0)==0){y=x}else{$x(q|0,j|0)|0;a[p+288|0]=x;c[p+292>>2]=Wx(j|0)|0;y=(Wx(j|0)|0)+x|0}if((k|0)==0){z=y}else{$x(q|0,k|0)|0;a[p+296|0]=y;c[p+300>>2]=Wx(k|0)|0;z=(Wx(k|0)|0)+y|0}if((l|0)==0){A=z}else{$x(q|0,l|0)|0;a[p+304|0]=z;c[p+308>>2]=Wx(l|0)|0;A=(Wx(l|0)|0)+z|0}z=A&255;if((m|0)==0){B=z}else{$x(q|0,m|0)|0;a[p+312|0]=z;c[p+316>>2]=Wx(m|0)|0;B=(Wx(m|0)|0)+A&255}if((n|0)!=0){$x(q|0,n|0)|0;a[p+320|0]=B;c[p+324>>2]=Wx(n|0)|0}n=o|0;by(n|0,b|0)|0;b=u+40|0;u=0;while(1){if((es(b,n,e,p,0,0)|0)==0){C=26;break}by(n|0,b|0)|0;B=u+1|0;if((B|0)<10){u=B}else{break}}do{if((C|0)==26){if((u|0)>9){break}s=328;t=0;i=o;return}}while(0);ue[c[636260]&31](2,18560,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;ue[c[636260]&31](2,18432,(r=i,i=i+8|0,c[r>>2]=b,r)|0);i=r;s=328;t=0;i=o;return}function is(b,d,e,f,h,j,k,l,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var 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.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;q=i;i=i+912|0;r=q|0;s=q+256|0;t=q+584|0;u=s|0;v=t|0;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(w=i,i=i+8|0,c[w>>2]=b,w)|0);i=w;x=0;y=328;z=0;A=328;B=0;i=q;return x|0}C=c[2545392+(b<<2)>>2]|0;if((C|0)==0){ue[c[636260]&31](4,57544,(w=i,i=i+8|0,c[w>>2]=b,w)|0);i=w;x=0;y=328;z=0;A=328;B=0;i=q;return x|0}Zx(u|0,0,328)|0;by(u|0,d|0)|0;b=c[154362]|0;if((b|0)==0){x=0;y=328;z=0;A=328;B=0;i=q;return x|0}D=C|0;E=C+8|0;F=0;G=0;H=-1;I=b;while(1){b=c[I>>2]|0;a:do{if((b|0)==0){J=H;K=G;L=F}else{M=0;N=b;while(1){O=N|0;P=c[O>>2]|0;do{if((P&4|0)==0){if((P&32|0)!=0){Q=(Nr(c[N+4>>2]|0,E,0)|0)!=-1|0;break}if((P&64|0)!=0){Q=(c[D>>2]|0)==1|0;break}if((P&128|0)!=0){Q=(c[D>>2]|0)==2|0;break}if((P&256|0)!=0){Q=(c[D>>2]|0)==0|0;break}if((P&16|0)!=0){Q=Xr(c[N+8>>2]|0,s)|0;break}if((P&8|0)==0){Q=0;break}Q=(Or(d,c[N+4>>2]|0,0)|0)!=0|0}else{Q=(Nr(d,E,0)|0)!=-1|0}}while(0);P=c[O>>2]|0;do{if((P&1|0)==0){R=(Q|0)!=0;if((P&2|0)==0){S=R?1:M;break}else{if(R){J=H;K=G;L=F;break a}else{S=M;break}}}else{if((Q|0)==0){J=H;K=G;L=F;break a}else{S=M}}}while(0);P=c[N+12>>2]|0;if((P|0)==0){break}else{M=S;N=P}}if((S|0)==0){J=H;K=G;L=F;break}N=I+4|0;if(!(+g[N>>2]>+(H|0))){J=H;K=G;L=F;break}M=I+12|0;P=c[M>>2]|0;if((P|0)==0){T=0.0}else{O=0;R=P;do{U=+g[R+4>>2];O=(U<=+yp())+O|0;R=c[R+8>>2]|0;}while((R|0)!=0);T=+(O|0)}R=~~(T*(+((Yx()|0)&32767|0)/32767.0));P=c[M>>2]|0;V=(P|0)!=0;if((R|0)<1|V^1){W=P;X=V}else{V=R;R=P;while(1){+yp();P=c[R+8>>2]|0;Y=(P|0)!=0;if((V|0)<2|Y^1){W=P;X=Y;break}else{V=V-1|0;R=P}}}if(!X){J=H;K=G;L=F;break}Vx(v|0,u|0,328)|0;J=~~+g[N>>2];K=W;L=I}}while(0);b=c[I+16>>2]|0;if((b|0)==0){break}else{F=L;G=K;H=J;I=b}}if((K|0)==0){x=0;y=328;z=0;A=328;B=0;i=q;return x|0}I=Wx(v|0)|0;if((h|0)==0){Z=I}else{$x(v|0,h|0)|0;a[t+264|0]=I;c[t+268>>2]=Wx(h|0)|0;Z=(Wx(h|0)|0)+I|0}if((j|0)==0){_=Z}else{$x(v|0,j|0)|0;a[t+272|0]=Z;c[t+276>>2]=Wx(j|0)|0;_=(Wx(j|0)|0)+Z|0}if((k|0)==0){$=_}else{$x(v|0,k|0)|0;a[t+280|0]=_;c[t+284>>2]=Wx(k|0)|0;$=(Wx(k|0)|0)+_|0}if((l|0)==0){aa=$}else{$x(v|0,l|0)|0;a[t+288|0]=$;c[t+292>>2]=Wx(l|0)|0;aa=(Wx(l|0)|0)+$|0}if((m|0)==0){ba=aa}else{$x(v|0,m|0)|0;a[t+296|0]=aa;c[t+300>>2]=Wx(m|0)|0;ba=(Wx(m|0)|0)+aa|0}if((n|0)==0){ca=ba}else{$x(v|0,n|0)|0;a[t+304|0]=ba;c[t+308>>2]=Wx(n|0)|0;ca=(Wx(n|0)|0)+ba|0}ba=ca&255;if((o|0)==0){da=ba}else{$x(v|0,o|0)|0;a[t+312|0]=ba;c[t+316>>2]=Wx(o|0)|0;da=(Wx(o|0)|0)+ca&255}if((p|0)!=0){$x(v|0,p|0)|0;a[t+320|0]=da;c[t+324>>2]=Wx(p|0)|0}if(!(+bv(17936)!=0.0)){g[K+4>>2]=+yp()+20.0;p=r|0;by(p|0,c[K>>2]|0)|0;K=C+40|0;da=0;while(1){if((es(K,p,e,t,f,1)|0)==0){ea=70;break}by(p|0,K|0)|0;v=da+1|0;if((v|0)<10){da=v}else{break}}do{if((ea|0)==70){if((da|0)>9){break}else{x=1}y=328;z=0;A=328;B=0;i=q;return x|0}}while(0);ue[c[636260]&31](2,18560,(w=i,i=i+1|0,i=i+7&-8,c[w>>2]=0,w)|0);i=w;ue[c[636260]&31](2,18432,(w=i,i=i+8|0,c[w>>2]=K,w)|0);i=w;x=1;y=328;z=0;A=328;B=0;i=q;return x|0}K=c[L+12>>2]|0;if((K|0)==0){x=1;y=328;z=0;A=328;B=0;i=q;return x|0}L=r|0;r=C+40|0;da=K;while(1){by(L|0,c[da>>2]|0)|0;K=0;while(1){if((es(r,L,e,t,f,1)|0)==0){ea=61;break}by(L|0,r|0)|0;p=K+1|0;if((p|0)<10){K=p}else{ea=62;break}}if((ea|0)==61){ea=0;if((K|0)>9){ea=62}else{fa=0}}if((ea|0)==62){ea=0;ue[c[636260]&31](2,18560,(w=i,i=i+1|0,i=i+7&-8,c[w>>2]=0,w)|0);i=w;ue[c[636260]&31](2,18432,(w=i,i=i+8|0,c[w>>2]=r,w)|0);i=w;fa=0}while(1){p=C+40+fa|0;v=a[p]|0;if((v<<24>>24|0)==126){ca=fa+1|0;o=C+40+ca|0;_x(p|0,o|0,(Wx(o|0)|0)+1|0)|0;fa=ca;continue}else if((v<<24>>24|0)==0){break}else{fa=fa+1|0;continue}}ue[c[636260]&31](1,18432,(w=i,i=i+8|0,c[w>>2]=r,w)|0);i=w;K=c[da+8>>2]|0;if((K|0)==0){x=1;break}else{da=K}}y=328;z=0;A=328;B=0;i=q;return x|0}function js(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;e=0;i=b;return e|0}f=c[2545392+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,57544,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;e=0;i=b;return e|0}else{e=Wx(f+40|0)|0;i=b;return e|0}return 0}function ks(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;f=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;i=f;return}h=c[2545392+(b<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,57544,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;i=f;return}b=h+40|0;j=a[b]|0;if(j<<24>>24==0){i=f;return}else{k=0;l=j}while(1){if((l<<24>>24|0)==0){break}else if((l<<24>>24|0)==126){j=k+1|0;m=h+40+j|0;_x(h+40+k|0,m|0,(Wx(m|0)|0)+1|0)|0;n=j}else{n=k+1|0}k=n;l=a[h+40+n|0]|0}do{if(+bv(18304)!=0.0){ue[c[636260]&31](1,18432,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g}else{if((e|0)==2){n=c[h+4>>2]|0;l=Hn(17280,(g=i,i=i+16|0,c[g>>2]=d,c[g+8>>2]=b,g)|0)|0;i=g;su(n,l);break}else if((e|0)==1){l=c[h+4>>2]|0;n=Hn(17520,(g=i,i=i+8|0,c[g>>2]=b,g)|0)|0;i=g;su(l,n);break}else{n=c[h+4>>2]|0;l=Hn(17176,(g=i,i=i+8|0,c[g>>2]=b,g)|0)|0;i=g;su(n,l);break}}}while(0);a[b]=0;i=f;return}function ls(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;f=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;i=f;return}h=c[2545392+(b<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,57544,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;i=f;return}else{j=0}while(1){g=h+40+j|0;b=a[g]|0;if((b<<24>>24|0)==126){k=j+1|0;l=h+40+k|0;_x(g|0,l|0,(Wx(l|0)|0)+1|0)|0;j=k;continue}else if((b<<24>>24|0)==0){break}else{j=j+1|0;continue}}j=h+40|0;h=e-1|0;ay(d|0,j|0,h|0)|0;a[d+h|0]=0;a[j]=0;i=f;return}function ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}f=c[2545392+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}if((b|0)==1){c[f>>2]=1;i=d;return}else if((b|0)==2){c[f>>2]=2;i=d;return}else{c[f>>2]=0;i=d;return}}function ns(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=i;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;i=f;return}h=c[2545392+(b<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,57544,(g=i,i=i+8|0,c[g>>2]=b,g)|0);i=g;i=f;return}else{c[h+4>>2]=e;e=h+8|0;Zx(e|0,0,32)|0;ay(e|0,d|0,32)|0;a[h+39|0]=0;i=f;return}}function os(){var a=0,b=0,d=0,e=0,f=0;a=1;while(1){b=2545392+(a<<2)|0;d=a+1|0;if((c[b>>2]|0)==0){break}if((d|0)<65){a=d}else{e=0;f=5;break}}if((f|0)==5){return e|0}c[b>>2]=kv(316)|0;e=a;return e|0}function ps(a){a=a|0;var b=0,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;b=i;i=i+280|0;d=b|0;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,48984,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=276;h=0;i=b;return}j=2545392+(a<<2)|0;if((c[j>>2]|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=276;h=0;i=b;return}do{if(+bv(20896)!=0.0){k=c[j>>2]|0;if((k|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;break}l=k+312|0;k=c[l>>2]|0;if((k|0)!=0){nv(k)}c[l>>2]=0}}while(0);l=c[j>>2]|0;a:do{if((l|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e}else{k=c[l+300>>2]|0;if((k|0)==0){break}m=d|0;c[m>>2]=c[k>>2];g[d+4>>2]=+g[k+4>>2];c[d+8>>2]=c[k+8>>2];rn(d+12|0,k+12|0,256);k=c[m>>2]|0;if((k|0)==0){break}m=d|0;n=d+4|0;o=d+8|0;p=d+12|0;q=k;while(1){k=c[j>>2]|0;b:do{if((k|0)==0){ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e}else{r=k+300|0;s=c[r>>2]|0;while(1){if((s|0)==0){break b}t=s+272|0;u=c[t>>2]|0;if((c[s>>2]|0)==(q|0)){break}else{s=u}}v=s+268|0;w=c[v>>2]|0;if((u|0)==0){c[k+304>>2]=w}else{c[u+268>>2]=w}w=c[v>>2]|0;x=c[t>>2]|0;if((w|0)==0){c[r>>2]=x}else{c[w+272>>2]=x}x=c[210616]|0;if((x|0)!=0){c[x+268>>2]=s}c[v>>2]=0;c[t>>2]=c[210616];c[210616]=s;v=k+308|0;c[v>>2]=(c[v>>2]|0)-1}}while(0);k=c[j>>2]|0;if((k|0)==0){break}v=c[k+300>>2]|0;if((v|0)==0){break a}c[m>>2]=c[v>>2];g[n>>2]=+g[v+4>>2];c[o>>2]=c[v+8>>2];rn(p,v+12|0,256);q=c[m>>2]|0;if((q|0)==0){break a}}ue[c[636260]&31](4,57544,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e}}while(0);nv(c[j>>2]|0);c[j>>2]=0;f=276;h=0;i=b;return}function qs(){c[33776]=Qr(dv(17088,16928)|0)|0;c[154404]=Ur(dv(16768,16656)|0)|0;c[179592]=Wr(dv(16496,60912)|0)|0;if(+ev(60776,60248)!=0.0){Hr();return 0}c[154362]=bs(dv(59960,59864)|0)|0;Hr();return 0}function rs(){var a=0,b=0,d=0,e=0,f=0,g=0;a=0;while(1){if((c[2545392+(a<<2)>>2]|0)!=0){ps(a)}b=a+1|0;if((b|0)<64){a=b}else{d=0;break}}do{a=785680+(d<<2)|0;b=c[a>>2]|0;if((b|0)!=0){nv(c[b>>2]|0);nv(c[a>>2]|0);c[a>>2]=0}d=d+1|0;}while((d|0)<64);d=c[414936]|0;if((d|0)!=0){nv(d)}c[414936]=0;d=c[179592]|0;if((d|0)!=0){a=d;while(1){d=c[a+16>>2]|0;b=c[a+12>>2]|0;if((b|0)!=0){e=b;while(1){b=c[e+12>>2]|0;do{if((c[e>>2]|0)==2){f=c[e+4>>2]|0;if((f|0)==0){break}else{g=f}while(1){f=c[g+4>>2]|0;nv(g);if((f|0)==0){break}else{g=f}}}}while(0);nv(e);if((b|0)==0){break}else{e=b}}}nv(a);if((d|0)==0){break}else{a=d}}}c[179592]=0;a=c[154404]|0;if((a|0)!=0){nv(a)}c[154404]=0;a=c[33776]|0;if((a|0)!=0){nv(a)}c[33776]=0;a=c[154362]|0;if((a|0)==0){c[154362]=0;return}$r(a);c[154362]=0;return}function ss(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.0,r=0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0.0,F=0,G=0,H=0.0,I=0,J=0.0,K=0.0,L=0;h=i;i=i+1024|0;j=h|0;k=j;if((a|0)>256){ue[c[636260]&31](2,48128,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;c[f>>2]=0;c[e>>2]=0;c[d>>2]=0;m=0;n=1024;o=0;i=h;return m|0}p=(a|0)>0;do{if(p){q=0.0;r=0;while(1){if(+g[b+(r<<2)>>2]<0.0){s=q}else{s=q+1.0}t=r+1|0;if((t|0)<(a|0)){q=s;r=t}else{break}}if(s<3.0){break}Vx(k|0,b|0,a<<2)|0;a:do{if(p){q=0.0;r=0;while(1){u=+g[j+(r<<2)>>2];if(u<0.0){v=q}else{v=q+u}t=r+1|0;if((t|0)<(a|0)){q=v;r=t}else{break}}b:do{if(v>0.0){q=v;r=0;while(1){u=+g[j+(r<<2)>>2];if(u<0.0){w=q}else{x=q-u;if(x>0.0){w=x}else{y=r;break b}}t=r+1|0;if((t|0)<(a|0)){q=w;r=t}else{z=17;break}}}else{z=17}}while(0);c:do{if((z|0)==17){r=0;t=~~(+(a|0)*(+((Yx()|0)&32767|0)/32767.0));while(1){if(!(+g[j+(t<<2)>>2]<0.0)){y=t;break c}A=r+1|0;if((A|0)<(a|0)){r=A;t=(t+1|0)%(a|0)|0}else{y=0;break}}}}while(0);c[d>>2]=y;g[j+(y<<2)>>2]=-1.0;q=0.0;t=0;while(1){x=+g[j+(t<<2)>>2];if(x<0.0){B=q}else{B=q+x}r=t+1|0;if((r|0)<(a|0)){q=B;t=r}else{break}}d:do{if(B>0.0){q=B;t=0;while(1){x=+g[j+(t<<2)>>2];if(x<0.0){C=q}else{u=q-x;if(u>0.0){C=u}else{D=t;break d}}r=t+1|0;if((r|0)<(a|0)){q=C;t=r}else{z=29;break}}}else{z=29}}while(0);e:do{if((z|0)==29){t=0;r=~~(+(a|0)*(+((Yx()|0)&32767|0)/32767.0));while(1){if(!(+g[j+(r<<2)>>2]<0.0)){D=r;break e}A=t+1|0;if((A|0)<(a|0)){t=A;r=(r+1|0)%(a|0)|0}else{D=0;break}}}}while(0);c[e>>2]=D;g[j+(D<<2)>>2]=-1.0;if(p){E=0.0;F=0}else{z=46;break}do{q=+g[j+(F<<2)>>2];E=q>=0.0&q>E?q:E;F=F+1|0;}while((F|0)<(a|0));if(p){G=0}else{z=46;break}do{r=j+(G<<2)|0;q=+g[r>>2];if(!(q<0.0)){g[r>>2]=E-q}G=G+1|0;}while((G|0)<(a|0));if(p){H=0.0;I=0}else{z=46;break}while(1){q=+g[j+(I<<2)>>2];if(q<0.0){J=H}else{J=H+q}r=I+1|0;if((r|0)<(a|0)){H=J;I=r}else{break}}if(J>0.0){q=J;r=0;while(1){u=+g[j+(r<<2)>>2];if(u<0.0){K=q}else{x=q-u;if(x>0.0){K=x}else{L=r;break a}}t=r+1|0;if((t|0)<(a|0)){q=K;r=t}else{break}}}r=0;t=~~(+(a|0)*(+((Yx()|0)&32767|0)/32767.0));while(1){if(!(+g[j+(t<<2)>>2]<0.0)){L=t;break a}A=r+1|0;if((A|0)<(a|0)){r=A;t=(t+1|0)%(a|0)|0}else{L=0;break}}}else{Yx()|0;c[d>>2]=0;Yx()|0;c[e>>2]=0;g[j>>2]=-1.0;z=46}}while(0);if((z|0)==46){Yx()|0;L=0}c[f>>2]=L;m=1;n=1024;o=0;i=h;return m|0}}while(0);ue[c[636260]&31](2,57368,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0);i=l;c[f>>2]=0;c[e>>2]=0;c[d>>2]=0;m=0;n=1024;o=0;i=h;return m|0}function ts(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;do{if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;g=0}else{h=c[2545128+(a<<2)>>2]|0;if((h|0)!=0){g=h;break}ue[c[636260]&31](4,17552,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;g=0}}while(0);do{if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;j=0}else{a=c[2545128+(b<<2)>>2]|0;if((a|0)!=0){j=a;break}ue[c[636260]&31](4,17552,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;j=0}}while(0);if((d-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f}b=c[2545128+(d<<2)>>2]|0;if((b|0)==0){ue[c[636260]&31](4,17552,(f=i,i=i+8|0,c[f>>2]=d,f)|0);i=f}else{nu(c[g>>2]|0,c[j>>2]|0,c[b>>2]|0);i=e;return}}function us(a,b){a=a|0;b=b|0;return}function vs(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e}f=c[2545128+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e}else{lu(c[f>>2]|0);i=d;return}}function ws(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;b=i;i=i+1128|0;d=b|0;e=d|0;f=b+1064|0;g=~~+ev(60304,58768);if((g|0)<0){ue[c[636260]&31](3,56960,(h=i,i=i+8|0,c[h>>2]=g,h)|0);i=h;fv(60304,58768);j=256}else{j=g}ay(f|0,a|0,64)|0;hw(55664);a=bw(f)|0;if((a|0)==0){ue[c[636260]&31](3,54648,(h=i,i=i+8|0,c[h>>2]=f,h)|0);i=h;k=0;l=64;m=0;n=1060;o=0;i=b;return k|0}g=mv((j*236|0)+8|0)|0;p=g;q=g+4|0;c[q>>2]=g+8;r=g;c[r>>2]=0;a:do{if((Yv(a,d)|0)!=0){while(1){if((Tx(e,53608)|0)!=0){s=14;break}t=c[r>>2]|0;if((t|0)>=(j|0)){s=8;break}u=c[q>>2]|0;v=u+(t*236|0)|0;Zx(v|0,0,236)|0;if((_v(a,1,0,d)|0)==0){s=10;break}sw(e);ay(v|0,e|0,31)|0;if((Dw(a,3208,v)|0)==0){s=12;break}c[u+(t*236|0)+232>>2]=c[r>>2];c[r>>2]=(c[r>>2]|0)+1;if((Yv(a,d)|0)==0){break a}}if((s|0)==8){rv(a,52512,(h=i,i=i+8|0,c[h>>2]=j,h)|0);i=h;nv(g);cw(a);k=0;l=64;m=0;n=1060;o=0;i=b;return k|0}else if((s|0)==10){nv(g);cw(a);k=0;l=64;m=0;n=1060;o=0;i=b;return k|0}else if((s|0)==12){nv(g);cw(a);k=0;l=64;m=0;n=1060;o=0;i=b;return k|0}else if((s|0)==14){rv(a,51560,(h=i,i=i+8|0,c[h>>2]=e,h)|0);i=h;nv(g);cw(a);k=0;l=64;m=0;n=1060;o=0;i=b;return k|0}}}while(0);cw(a);if((c[r>>2]|0)==0){ue[c[636260]&31](2,50624,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h}ue[c[636260]&31](1,49864,(h=i,i=i+8|0,c[h>>2]=f,h)|0);i=h;k=p;l=64;m=0;n=1060;o=0;i=b;return k|0}function xs(){var a=0,b=0,d=0,e=0,f=0,j=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;a=i;i=i+128|0;b=a|0;d=c[179596]|0;if((d|0)!=0){e=d;while(1){d=c[e+144>>2]|0;nv(e);if((d|0)==0){break}else{e=d}}}c[179596]=0;e=c[469156]|0;if((e|0)!=0){d=e;while(1){e=c[d+160>>2]|0;nv(d);if((e|0)==0){break}else{d=e}}}c[469156]=0;d=Po(0)|0;if((d|0)==0){f=0;j=0}else{e=d;d=0;k=0;while(1){do{if((Qo(e,46056,b,128)|0)==0){l=k;m=d}else{if((Tx(b,45448)|0)==0){n=kv(148)|0;o=n;Ro(e,44576,o)|0;Qo(e,43976,n+16|0,128)|0;c[n+12>>2]=gr(o)|0;c[n+144>>2]=c[179596];c[179596]=n;l=k;m=d+1|0;break}if((Tx(b,43320)|0)!=0){l=k;m=d;break}n=kv(164)|0;o=n;Ro(e,44576,o)|0;Qo(e,43976,n+16|0,128)|0;So(e,42760,n+144|0)|0;So(e,42160,n+148|0)|0;So(e,41648,n+152|0)|0;So(e,41232,n+156|0)|0;p=gr(o)|0;c[n+12>>2]=p;if((p|0)==0){q=+g[n+4>>2];r=+g[n+8>>2];ue[c[636260]&31](1,40360,(s=i,i=i+24|0,h[s>>3]=+g[o>>2],h[s+8>>3]=q,h[s+16>>3]=r,s)|0);i=s;nv(n);l=k;m=d;break}else{c[n+160>>2]=c[469156];c[469156]=n;l=k+1|0;m=d;break}}}while(0);n=Po(e)|0;if((n|0)==0){f=m;j=l;break}else{e=n;d=m;k=l}}}if((c[636484]|0)==0){t=128;u=0;i=a;return}ue[c[636260]&31](1,39728,(s=i,i=i+8|0,c[s>>2]=f,s)|0);i=s;ue[c[636260]&31](1,39392,(s=i,i=i+8|0,c[s>>2]=j,s)|0);i=s;t=128;u=0;i=a;return}function ys(){var a=0,b=0,d=0,e=0,f=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.0,H=0.0,I=0.0;a=i;i=i+264|0;b=a|0;d=a+8|0;e=a+144|0;f=a+160|0;j=a+176|0;k=a+16|0;xs();l=c[193342]|0;if((l|0)!=0){nv(l)}l=~~+ev(48296,58768);m=kv(l*60|0)|0;c[193342]=m;n=l-1|0;if((n|0)>0){l=0;o=m;while(1){p=l+1|0;c[o+(l*60|0)+56>>2]=o+(p*60|0);q=c[193342]|0;if((p|0)<(n|0)){l=p;o=q}else{r=q;break}}}else{r=m}c[r+(n*60|0)+56>>2]=0;c[210614]=c[193342];c[193340]=0;c[164930]=0;n=c[195394]|0;if((n|0)==0){s=128;t=0;i=a;return}if((up()|0)==0){s=128;t=0;i=a;return}r=n|0;m=c[r>>2]|0;if((m|0)>0){o=n+4|0;l=0;q=m;while(1){m=c[o>>2]|0;if((c[m+(l*236|0)+192>>2]|0)==0){iv(38840,(u=i,i=i+8|0,c[u>>2]=m+(l*236|0),u)|0);i=u;v=c[r>>2]|0}else{v=q}m=l+1|0;if((m|0)<(v|0)){l=m;q=v}else{break}}}v=Po(0)|0;a:do{if((v|0)!=0){q=n+4|0;l=e|0;o=e+4|0;m=e+8|0;p=f|0;w=f+4|0;x=f+8|0;y=j+8|0;z=v;b:while(1){c:do{if((Qo(z,46056,k,128)|0)!=0){c[b>>2]=0;To(z,38384,b)|0;A=c[r>>2]|0;d:do{if((A|0)>0){B=c[q>>2]|0;C=0;while(1){D=C+1|0;if((Tx(k,B+(C*236|0)|0)|0)==0){E=C;break d}if((D|0)<(A|0)){C=D}else{E=D;break}}}else{E=0}}while(0);if((E|0)>=(A|0)){iv(38e3,(u=i,i=i+8|0,c[u>>2]=k,u)|0);i=u;break}if((Ro(z,44576,l)|0)==0){ue[c[636260]&31](3,37616,(u=i,i=i+8|0,c[u>>2]=k,u)|0);i=u;break}do{if((c[b>>2]&1|0)==0){F=0}else{if(((Ko(l)|0)&32|0)!=0){F=0;break}g[p>>2]=+g[l>>2];g[w>>2]=+g[o>>2];g[x>>2]=+g[m>>2]+-32.0;C=c[q>>2]|0;Jo(j,l,C+(E*236|0)+208|0,C+(E*236|0)+220|0,p,-1,65537);if(+g[y>>2]<1.0){F=0;break}C=c[q>>2]|0;B=_p(l,C+(E*236|0)+208|0,C+(E*236|0)+220|0)|0;iv(37248,(u=i,i=i+16|0,c[u>>2]=(c[q>>2]|0)+(E*236|0),c[u+8>>2]=B,u)|0);i=u;if((B|0)==0){break c}else{F=B}}}while(0);A=c[210614]|0;if((A|0)==0){break b}B=A+56|0;c[210614]=c[B>>2];Zx(A|0,0,60)|0;C=(c[164930]|0)+1|0;c[164930]=C;c[A>>2]=C;g[A+48>>2]=0.0;c[A+44>>2]=0;C=A+8|0;c[C>>2]=0;To(z,36832,d)|0;if((c[d>>2]|0)!=0){c[C>>2]=c[C>>2]|1}To(z,36456,d)|0;if((c[d>>2]|0)!=0){c[C>>2]=c[C>>2]|2}To(z,35512,d)|0;if((c[d>>2]|0)!=0){c[C>>2]=c[C>>2]|4}To(z,34928,d)|0;if((c[d>>2]|0)!=0){c[C>>2]=c[C>>2]|8}if((Tx(k,34536)|0)==0){c[C>>2]=c[C>>2]|16;So(z,42160,A+12|0)|0}do{if((c[b>>2]&1|0)==0){C=c[q>>2]|0;if((Dp(l,C+(E*236|0)+208|0,C+(E*236|0)+220|0)|0)!=0){break}G=+g[l>>2];H=+g[o>>2];I=+g[m>>2];ue[c[636260]&31](1,34024,(u=i,i=i+32|0,c[u>>2]=k,h[u+8>>3]=G,h[u+16>>3]=H,h[u+24>>3]=I,u)|0);i=u}}while(0);c[A+4>>2]=E;g[A+16>>2]=+g[l>>2];g[A+20>>2]=+g[o>>2];g[A+24>>2]=+g[m>>2];do{if((F|0)==0){C=c[q>>2]|0;D=aq(l,C+(E*236|0)+208|0,C+(E*236|0)+220|0,A+32|0)|0;c[A+28>>2]=D;if((D|0)!=0){break}I=+g[l>>2];H=+g[o>>2];G=+g[m>>2];ue[c[636260]&31](1,33432,(u=i,i=i+32|0,c[u>>2]=k,h[u+8>>3]=I,h[u+16>>3]=H,h[u+24>>3]=G,u)|0);i=u}else{c[A+28>>2]=F;g[A+32>>2]=+g[l>>2];g[A+36>>2]=+g[o>>2];g[A+40>>2]=+g[m>>2]}}while(0);D=c[193340]|0;if((D|0)!=0){c[D+52>>2]=A}c[A+52>>2]=0;c[B>>2]=c[193340];c[193340]=A}}while(0);z=Po(z)|0;if((z|0)==0){break a}}ue[c[636260]&31](4,47056,(u=i,i=i+1|0,i=i+7&-8,c[u>>2]=0,u)|0);i=u;s=128;t=0;i=a;return}}while(0);ue[c[636260]&31](1,32824,(u=i,i=i+8|0,c[u>>2]=c[164930],u)|0);i=u;s=128;t=0;i=a;return}function zs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=c[195394]|0;if((f|0)==0){return}g=c[193340]|0;a:do{if((g|0)!=0){h=g;while(1){if((c[h>>2]|0)==(b|0)){break}i=c[h+56>>2]|0;if((i|0)==0){break a}else{h=i}}i=e-1|0;ay(d|0,(c[f+4>>2]|0)+((c[h+4>>2]|0)*236|0)+32|0,i|0)|0;a[d+i|0]=0;return}}while(0);a[d]=0;return}function As(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2545128+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,17552,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}else{Zx(e+468|0,0,2048)|0;i=b;return}}function Bs(b){b=b|0;var d=0,e=0,f=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;d=i;i=i+32|0;e=d|0;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;i=d;return}j=c[2545128+(b<<2)>>2]|0;if((j|0)==0){ue[c[636260]&31](4,17552,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;i=d;return}b=e|0;k=e+31|0;e=0;do{l=j+1492+(e<<2)|0;m=+g[l>>2];if(!(m<+yp())){n=j+468+(e<<2)|0;o=c[n>>2]|0;p=c[195394]|0;a:do{if((p|0)!=0){q=c[193340]|0;b:do{if((q|0)!=0){r=q;while(1){if((c[r>>2]|0)==(o|0)){break}s=c[r+56>>2]|0;if((s|0)==0){break b}else{r=s}}ay(b|0,(c[p+4>>2]|0)+((c[r+4>>2]|0)*236|0)+32|0,31)|0;a[k]=0;break a}}while(0);a[b]=0}}while(0);p=c[n>>2]|0;m=+g[l>>2];t=m- +yp();iv(31864,(f=i,i=i+24|0,c[f>>2]=b,c[f+8>>2]=p,h[f+16>>3]=t,f)|0);i=f}e=e+1|0;}while((e|0)<256);i=d;return}function Cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0.0,l=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}f=c[2545128+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}else{h=0}while(1){if((c[f+468+(h<<2)>>2]|0)==(b|0)){j=f+1492+(h<<2)|0;k=+g[j>>2];if(!(k<+yp())){break}}e=h+1|0;if((e|0)<256){h=e}else{l=9;break}}if((l|0)==9){i=d;return}g[j>>2]=0.0;i=d;return}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,h=0,j=0,k=0,l=0.0,m=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0.0;i=d;return+f}h=c[2545128+(a<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0.0;i=d;return+f}else{j=0}while(1){if((c[h+468+(j<<2)>>2]|0)==(b|0)){k=h+1492+(j<<2)|0;l=+g[k>>2];if(!(l<+yp())){break}}e=j+1|0;if((e|0)<256){j=e}else{f=0.0;m=9;break}}if((m|0)==9){i=d;return+f}l=+g[k>>2];f=l- +yp();i=d;return+f}function Es(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,n=0.0,o=0,p=0,q=0,r=0;e=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;i=e;return}h=c[2545128+(a<<2)>>2]|0;if((h|0)==0){ue[c[636260]&31](4,17552,(f=i,i=i+8|0,c[f>>2]=a,f)|0);i=f;i=e;return}if(!(d<0.0)){f=0;while(1){j=h+468+(f<<2)|0;a=f+1|0;if((c[j>>2]|0)==(b|0)){k=19;break}if((a|0)<256){f=a}else{l=0;break}}if((k|0)==19){c[j>>2]=b;g[h+1492+(f<<2)>>2]=+yp()+d;i=e;return}while(1){m=h+1492+(l<<2)|0;n=+g[m>>2];f=l+1|0;if(n<+yp()){break}if((f|0)<256){l=f}else{k=23;break}}if((k|0)==23){i=e;return}c[h+468+(l<<2)>>2]=b;g[m>>2]=+yp()+d;i=e;return}m=c[195394]|0;if((m|0)==0){i=e;return}l=c[193340]|0;if((l|0)==0){i=e;return}else{o=l}while(1){if((c[o>>2]|0)==(b|0)){break}l=c[o+56>>2]|0;if((l|0)==0){k=23;break}else{o=l}}if((k|0)==23){i=e;return}d=+g[(c[m+4>>2]|0)+((c[o+4>>2]|0)*236|0)+204>>2];n=d!=0.0?d:30.0;d=n<10.0?10.0:n;o=0;while(1){p=h+468+(o<<2)|0;m=o+1|0;if((c[p>>2]|0)==(b|0)){k=13;break}if((m|0)<256){o=m}else{q=0;break}}if((k|0)==13){c[p>>2]=b;g[h+1492+(o<<2)>>2]=d+ +yp();i=e;return}while(1){r=h+1492+(q<<2)|0;n=+g[r>>2];o=q+1|0;if(n<+yp()){break}if((o|0)<256){q=o}else{k=23;break}}if((k|0)==23){i=e;return}c[h+468+(q<<2)>>2]=b;g[r>>2]=d+ +yp();i=e;return}function Fs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((c[195394]|0)==0){e=-1;return e|0}f=c[193340]|0;a:do{if((a|0)>-1){h=f;while(1){if((h|0)==0){e=-1;break}i=c[h+56>>2]|0;if((c[h>>2]|0)==(a|0)){j=i;break a}else{h=i}}return e|0}else{j=f}}while(0);if((j|0)==0){e=-1;return e|0}else{k=j}b:while(1){j=c[196758]|0;do{if((j|0)==2){f=c[k+8>>2]|0;if((f&4|0)==0){l=f;m=11}}else{f=c[k+8>>2]|0;if((j|0)>2){if((f&2|0)==0){l=f;m=11;break}else{break}}else{if((f&1|0)==0){l=f;m=11;break}else{break}}}}while(0);do{if((m|0)==11){m=0;if((l&8|0)!=0){break}n=k+4|0;if((tn(b,(c[(c[195394]|0)+4>>2]|0)+((c[n>>2]|0)*236|0)+32|0)|0)==0){break b}}}while(0);j=c[k+56>>2]|0;if((j|0)==0){e=-1;m=17;break}else{k=j}}if((m|0)==17){return e|0}c[d+12>>2]=c[k+28>>2];g[d>>2]=+g[k+32>>2];g[d+4>>2]=+g[k+36>>2];g[d+8>>2]=+g[k+40>>2];c[d+40>>2]=c[k+44>>2];m=c[n>>2]|0;n=c[(c[195394]|0)+4>>2]|0;g[d+16>>2]=+g[n+(m*236|0)+208>>2];g[d+20>>2]=+g[n+(m*236|0)+212>>2];g[d+24>>2]=+g[n+(m*236|0)+216>>2];g[d+28>>2]=+g[n+(m*236|0)+220>>2];g[d+32>>2]=+g[n+(m*236|0)+224>>2];g[d+36>>2]=+g[n+(m*236|0)+228>>2];m=k|0;c[d+44>>2]=c[m>>2];n=d+48|0;c[n>>2]=1;if(+g[k+48>>2]!=0.0){c[n>>2]=5}e=c[m>>2]|0;return e|0}function Gs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0;d=c[179596]|0;if((d|0)==0){e=0;return e|0}else{f=d}while(1){if((tn(f+16|0,a)|0)==0){break}d=c[f+144>>2]|0;if((d|0)==0){e=0;h=5;break}else{f=d}}if((h|0)==5){return e|0}c[b+12>>2]=c[f+12>>2];g[b>>2]=+g[f>>2];g[b+4>>2]=+g[f+4>>2];g[b+8>>2]=+g[f+8>>2];c[b+40>>2]=0;g[b+16>>2]=-8.0;g[b+20>>2]=-8.0;g[b+24>>2]=-8.0;g[b+28>>2]=8.0;g[b+32>>2]=8.0;g[b+36>>2]=8.0;e=1;return e|0}function Hs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0;d=(a|0)<0?0:a;a=c[469156]|0;if((a|0)==0){e=0;return e|0}else{f=d;h=a}while(1){if((f|0)<1){break}a=c[h+160>>2]|0;if((a|0)==0){e=0;i=5;break}else{f=f-1|0;h=a}}if((i|0)==5){return e|0}c[b+12>>2]=c[h+12>>2];g[b>>2]=+g[h>>2];g[b+4>>2]=+g[h+4>>2];g[b+8>>2]=+g[h+8>>2];c[b+40>>2]=0;g[b+16>>2]=-8.0;g[b+20>>2]=-8.0;g[b+24>>2]=-8.0;g[b+28>>2]=8.0;g[b+32>>2]=8.0;g[b+36>>2]=8.0;e=d+1|0;return e|0}function Is(){var a=0,b=0,d=0,e=0,f=0,h=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.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.0,H=0.0,I=0.0,J=0,K=0,L=0.0,M=0.0,N=0,O=0.0,P=0.0,Q=0,R=0.0,S=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0,$=0,aa=0.0,ba=0.0,ca=0;a=i;i=i+144|0;b=a|0;d=c[193340]|0;if((d|0)!=0){e=d;while(1){d=e+56|0;f=c[d>>2]|0;h=+g[e+48>>2];do{if(h!=0.0){if(!(h<+yp())){break}j=e+52|0;k=c[j>>2]|0;l=c[d>>2]|0;if((k|0)==0){c[193340]=l}else{c[k+56>>2]=l}l=c[d>>2]|0;if((l|0)!=0){c[l+52>>2]=c[j>>2]}c[d>>2]=c[210614];c[210614]=e}}while(0);if((f|0)==0){break}else{e=f}}}e=c[195394]|0;if((e|0)==0){m=140;n=0;i=a;return}d=op(0)|0;if((d|0)==0){m=140;n=0;i=a;return}j=b+24|0;l=b+60|0;k=b+28|0;o=b+64|0;p=b+32|0;q=b+68|0;r=e+4|0;s=e|0;e=d;do{a:do{if((ip(e)|0)==2){d=hp(e)|0;if((d|0)==0){break}gp(e,b);h=+g[j>>2];if(h!=+g[l>>2]){break}t=+g[k>>2];if(t!=+g[o>>2]){break}u=+g[p>>2];if(u!=+g[q>>2]){break}v=c[193340]|0;b:do{if((v|0)!=0){w=v;while(1){x=c[w+44>>2]|0;if((x|0)!=0&(x|0)==(e|0)){y=22;break}x=c[w+56>>2]|0;if((x|0)==0){break}else{w=x}}do{if((y|0)==22){y=0;x=c[w+4>>2]|0;z=c[r>>2]|0;if((c[z+(x*236|0)+192>>2]|0)==(d|0)){A=w+16|0;B=w+20|0;do{if(!(h!=+g[A>>2])){if(t!=+g[B>>2]){break}if(!(u!=+g[w+24>>2])){break a}}}while(0);g[A>>2]=h;g[B>>2]=+g[k>>2];g[w+24>>2]=+g[p>>2];c[w+28>>2]=aq(A,z+(x*236|0)+208|0,z+(x*236|0)+220|0,w+32|0)|0;if((w|0)==0){break}else{break a}}C=w+52|0;D=c[C>>2]|0;E=w+56|0;F=c[E>>2]|0;if((D|0)==0){c[193340]=F}else{c[D+56>>2]=F}F=c[E>>2]|0;if((F|0)!=0){c[F+52>>2]=c[C>>2]}c[E>>2]=c[210614];c[210614]=w}}while(0);w=c[193340]|0;if((w|0)==0){break}E=c[196758]|0;G=+g[j>>2];H=+g[k>>2];I=+g[p>>2];c:do{if((E|0)==2){C=w;while(1){F=C+44|0;do{if((c[F>>2]|0)==0){if((c[C+8>>2]&4|0)!=0){break}D=c[C+4>>2]|0;J=c[r>>2]|0;if((c[J+(D*236|0)+192>>2]|0)!=(d|0)){break}K=C+16|0;L=+g[K>>2];M=L-G;N=C+20|0;O=+g[N>>2];P=O-H;Q=C+24|0;R=+g[Q>>2];S=R-I;if(+T(M*M+P*P+S*S)<30.0){U=C;V=F;W=K;X=N;Y=Q;Z=L;_=D;$=J;aa=O;ba=R;break c}}}while(0);C=c[C+56>>2]|0;if((C|0)==0){break b}}}else{if((E|0)>2){C=w;while(1){x=C+44|0;do{if((c[x>>2]|0)==0){if((c[C+8>>2]&2|0)!=0){break}z=c[C+4>>2]|0;A=c[r>>2]|0;if((c[A+(z*236|0)+192>>2]|0)!=(d|0)){break}B=C+16|0;R=+g[B>>2];O=R-G;F=C+20|0;L=+g[F>>2];S=L-H;J=C+24|0;P=+g[J>>2];M=P-I;if(+T(O*O+S*S+M*M)<30.0){U=C;V=x;W=B;X=F;Y=J;Z=R;_=z;$=A;aa=L;ba=P;break c}}}while(0);C=c[C+56>>2]|0;if((C|0)==0){break b}}}else{C=w;while(1){x=C+44|0;do{if((c[x>>2]|0)==0){if((c[C+8>>2]&1|0)!=0){break}A=c[C+4>>2]|0;z=c[r>>2]|0;if((c[z+(A*236|0)+192>>2]|0)!=(d|0)){break}J=C+16|0;P=+g[J>>2];L=P-G;F=C+20|0;R=+g[F>>2];M=R-H;B=C+24|0;S=+g[B>>2];O=S-I;if(+T(L*L+M*M+O*O)<30.0){U=C;V=x;W=J;X=F;Y=B;Z=P;_=A;$=z;aa=R;ba=S;break c}}}while(0);C=c[C+56>>2]|0;if((C|0)==0){break b}}}}}while(0);c[V>>2]=e;if(!(G!=Z|H!=aa|I!=ba)){break a}g[W>>2]=G;g[X>>2]=+g[k>>2];g[Y>>2]=+g[p>>2];c[U+28>>2]=aq(W,$+(_*236|0)+208|0,$+(_*236|0)+220|0,U+32|0)|0;break a}}while(0);v=c[s>>2]|0;d:do{if((v|0)>0){w=c[r>>2]|0;E=0;while(1){C=E+1|0;if((c[w+(E*236|0)+192>>2]|0)==(d|0)){ca=E;break d}if((C|0)<(v|0)){E=C}else{ca=C;break}}}else{ca=0}}while(0);if((ca|0)>=(v|0)){break}d=c[210614]|0;if((d|0)==0){ue[c[636260]&31](4,47056,(E=i,i=i+1|0,i=i+7&-8,c[E>>2]=0,E)|0);i=E;break}E=d+56|0;c[210614]=c[E>>2];Zx(d|0,0,60)|0;c[d+44>>2]=e;c[d>>2]=(c[164930]|0)+e;c[d+4>>2]=ca;w=d+16|0;g[w>>2]=+g[j>>2];g[d+20>>2]=+g[k>>2];g[d+24>>2]=+g[p>>2];C=c[r>>2]|0;x=aq(w,C+(ca*236|0)+208|0,C+(ca*236|0)+220|0,d+32|0)|0;c[d+28>>2]=x;if(($p(x)|0)!=0){c[E>>2]=c[210614];c[210614]=d;break}g[d+48>>2]=+yp()+30.0;x=c[193340]|0;if((x|0)!=0){c[x+52>>2]=d}c[d+52>>2]=0;c[E>>2]=c[193340];c[193340]=d}}while(0);e=op(e)|0;}while((e|0)!=0);m=140;n=0;i=a;return}function Js(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;d=i;i=i+32|0;e=d|0;if((b-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;i=d;return}g=c[2545128+(b<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,17552,(f=i,i=i+8|0,c[f>>2]=b,f)|0);i=f;i=d;return}b=g+464|0;if((c[b>>2]|0)<1){i=d;return}h=e|0;j=e+31|0;e=1;while(1){k=c[g+16+(e*56|0)+44>>2]|0;l=c[195394]|0;a:do{if((l|0)!=0){m=c[193340]|0;b:do{if((m|0)!=0){n=m;while(1){if((c[n>>2]|0)==(k|0)){break}o=c[n+56>>2]|0;if((o|0)==0){break b}else{n=o}}ay(h|0,(c[l+4>>2]|0)+((c[n+4>>2]|0)*236|0)+32|0,31)|0;a[j]=0;break a}}while(0);a[h]=0}}while(0);iv(31560,(f=i,i=i+16|0,c[f>>2]=e,c[f+8>>2]=h,f)|0);i=f;if((e|0)<(c[b>>2]|0)){e=e+1|0}else{break}}i=d;return}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}f=c[2545128+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}g=f+464|0;h=c[g>>2]|0;if((h|0)>6){ue[c[636260]&31](3,31160,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;Js(a);i=d;return}else{a=h+1|0;c[g>>2]=a;Vx(f+16+(a*56|0)|0,b|0,56)|0;i=d;return}}function Ls(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2545128+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,17552,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}d=e+464|0;e=c[d>>2]|0;if((e|0)<=0){i=b;return}c[d>>2]=e-1;i=b;return}function Ms(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2545128+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,17552,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}else{c[e+464>>2]=0;i=b;return}}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}g=c[2545128+(a<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}e=c[g+464>>2]|0;if((e|0)==0){f=0;i=d;return f|0}Vx(b|0,g+16+(e*56|0)|0,56)|0;f=1;i=d;return f|0}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}g=c[2545128+(a<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=0;i=d;return f|0}e=c[g+464>>2]|0;if((e|0)<2){f=0;i=d;return f|0}Vx(b|0,g+16+((e-1|0)*56|0)|0,56)|0;f=1;i=d;return f|0}function Ps(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.0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0;f=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;j=0;i=f;return j|0}k=2545128+(a<<2)|0;l=c[k>>2]|0;if((l|0)==0){ue[c[636260]&31](4,17552,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;j=0;i=f;return j|0}m=l|0;if((c[m>>2]|0)==0){j=0;i=f;return j|0}n=ct(b,c[l+8>>2]|0)|0;do{if((n|0)==0){o=9}else{if((Yp(n)|0)==0){o=9;break}c[l+12>>2]=n;p=n}}while(0);do{if((o|0)==9){n=c[l+12>>2]|0;if((n|0)==0){j=0}else{p=n;break}i=f;return j|0}}while(0);n=c[195394]|0;if((n|0)==0){j=0;i=f;return j|0}q=c[193340]|0;if((q|0)==0){j=0;i=f;return j|0}r=n+4|0;s=l+4|0;t=0.0;u=0;v=q;while(1){q=c[196758]|0;do{if((q|0)==2){w=c[v+8>>2]|0;if((w&4|0)==0){x=w;o=18}else{y=u;z=t}}else{w=c[v+8>>2]|0;if((q|0)>2){if((w&2|0)==0){x=w;o=18;break}else{y=u;z=t;break}}else{if((w&1|0)==0){x=w;o=18;break}else{y=u;z=t;break}}}}while(0);do{if((o|0)==18){o=0;q=v+8|0;if((x&8|0)!=0){y=u;z=t;break}w=v+28|0;if((c[w>>2]|0)==0){y=u;z=t;break}if((c[v+44>>2]|0)==0){if((x&16|0)==0){y=u;z=t;break}}A=c[(c[s>>2]|0)+(c[(c[r>>2]|0)+((c[v+4>>2]|0)*236|0)+232>>2]<<2)>>2]|0;if((A|0)<0){y=u;z=t;break}B=+ju(d,c[m>>2]|0,A);if(+g[v+48>>2]!=0.0){C=B+ +g[(c[376e3]|0)+16>>2]}else{C=B}if((c[q>>2]&16|0)==0){D=C}else{D=C*+g[v+12>>2]}if(!(D>0.0)){y=u;z=t;break}q=Kq(p,b,c[w>>2]|0,e)|0;if((q|0)<=0){y=u;z=t;break}w=c[v>>2]|0;A=c[k>>2]|0;a:do{if((A|0)==0){ue[c[636260]&31](4,17552,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;E=0.0}else{F=0;while(1){if((c[A+468+(F<<2)>>2]|0)==(w|0)){G=A+1492+(F<<2)|0;B=+g[G>>2];if(!(B<+yp())){break}}H=F+1|0;if((H|0)<256){F=H}else{E=0.0;break a}}B=+g[G>>2];E=B- +yp()}}while(0);if(E- +(q|0)*.009>0.0){y=u;z=t;break}B=D/(+(q|0)*.01);if(!(B>t)){y=u;z=t;break}y=v;z=B}}while(0);A=c[v+56>>2]|0;if((A|0)==0){break}else{t=z;u=y;v=A}}if((y|0)==0){j=0;i=f;return j|0}v=c[y+4>>2]|0;u=c[n+4>>2]|0;z=+g[y+32>>2];t=+g[y+36>>2];D=+g[y+40>>2];E=+g[u+(v*236|0)+208>>2];C=+g[u+(v*236|0)+212>>2];B=+g[u+(v*236|0)+216>>2];I=+g[u+(v*236|0)+220>>2];J=+g[u+(v*236|0)+224>>2];K=+g[u+(v*236|0)+228>>2];n=c[y+28>>2]|0;G=c[y+44>>2]|0;e=c[y>>2]|0;b=+g[y+48>>2]!=0.0;p=(c[y+8>>2]|0)>>>3&2|(b?5:1);do{if(b){L=10.0}else{M=+g[u+(v*236|0)+204>>2];N=M!=0.0?M:30.0;if(!(N<10.0)){L=N;break}L=10.0}}while(0);u=0;while(1){O=l+468+(u<<2)|0;b=u+1|0;if((c[O>>2]|0)==(e|0)){o=46;break}if((b|0)<256){u=b}else{P=0;o=48;break}}b:do{if((o|0)==46){c[O>>2]=e;g[l+1492+(u<<2)>>2]=L+ +yp()}else if((o|0)==48){while(1){o=0;Q=l+1492+(P<<2)|0;N=+g[Q>>2];b=P+1|0;if(N<+yp()){break}if((b|0)<256){P=b;o=48}else{break b}}c[l+468+(P<<2)>>2]=e;g[Q>>2]=L+ +yp()}}while(0);Q=c[k>>2]|0;if((Q|0)==0){ue[c[636260]&31](4,17552,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;j=1;i=f;return j|0}k=Q+464|0;P=c[k>>2]|0;if((P|0)>6){ue[c[636260]&31](3,31160,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0);i=h;Js(a);j=1;i=f;return j|0}else{a=P+1|0;c[k>>2]=a;g[Q+16+(a*56|0)>>2]=z;g[Q+16+(a*56|0)+4>>2]=t;g[Q+16+(a*56|0)+8>>2]=D;c[Q+16+(a*56|0)+12>>2]=n;g[Q+16+(a*56|0)+16>>2]=E;g[Q+16+(a*56|0)+20>>2]=C;g[Q+16+(a*56|0)+24>>2]=B;g[Q+16+(a*56|0)+28>>2]=I;g[Q+16+(a*56|0)+32>>2]=J;g[Q+16+(a*56|0)+36>>2]=K;c[Q+16+(a*56|0)+40>>2]=G;c[Q+16+(a*56|0)+44>>2]=e;c[Q+16+(a*56|0)+48>>2]=p;c[Q+16+(a*56|0)+52>>2]=v;j=1;i=f;return j|0}return 0}function Qs(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;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.0,z=0,A=0,B=0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0,M=0,N=0.0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0;j=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(k=i,i=i+8|0,c[k>>2]=a,k)|0);i=k;l=0;i=j;return l|0}m=2545128+(a<<2)|0;n=c[m>>2]|0;if((n|0)==0){ue[c[636260]&31](4,17552,(k=i,i=i+8|0,c[k>>2]=a,k)|0);i=k;l=0;i=j;return l|0}o=n|0;if((c[o>>2]|0)==0){l=0;i=j;return l|0}p=ct(b,c[n+8>>2]|0)|0;do{if((p|0)==0){q=9}else{if((Yp(p)|0)==0){q=9;break}c[n+12>>2]=p;r=p}}while(0);do{if((q|0)==9){p=c[n+12>>2]|0;if((p|0)==0){l=0}else{r=p;break}i=j;return l|0}}while(0);p=(f|0)!=0;if(p){s=Kq(r,b,c[f+12>>2]|0,e)|0}else{s=99999}t=c[195394]|0;if((t|0)==0){l=0;i=j;return l|0}u=c[193340]|0;if((u|0)==0){l=0;i=j;return l|0}v=t+4|0;w=n+4|0;x=f+12|0;y=0.0;f=0;z=u;while(1){u=c[196758]|0;do{if((u|0)==2){A=c[z+8>>2]|0;if((A&4|0)==0){B=A;q=20}else{C=f;D=y}}else{A=c[z+8>>2]|0;if((u|0)>2){if((A&2|0)==0){B=A;q=20;break}else{C=f;D=y;break}}else{if((A&1|0)==0){B=A;q=20;break}else{C=f;D=y;break}}}}while(0);do{if((q|0)==20){q=0;u=z+8|0;if((B&8|0)!=0){C=f;D=y;break}A=z+28|0;if((c[A>>2]|0)==0){C=f;D=y;break}if((c[z+44>>2]|0)==0){if((B&16|0)==0){C=f;D=y;break}}E=c[(c[w>>2]|0)+(c[(c[v>>2]|0)+((c[z+4>>2]|0)*236|0)+232>>2]<<2)>>2]|0;if((E|0)<0){C=f;D=y;break}F=+ju(d,c[o>>2]|0,E);E=z+48|0;if(+g[E>>2]!=0.0){G=F+ +g[(c[376e3]|0)+16>>2]}else{G=F}if((c[u>>2]&16|0)==0){H=G}else{H=G*+g[z+12>>2]}if(!(H>0.0)){C=f;D=y;break}u=Kq(r,b,c[A>>2]|0,e)|0;if((u|0)<=0){C=f;D=y;break}F=+(u|0);if(!(F<h)){C=f;D=y;break}I=c[z>>2]|0;J=c[m>>2]|0;a:do{if((J|0)==0){ue[c[636260]&31](4,17552,(k=i,i=i+8|0,c[k>>2]=a,k)|0);i=k;K=0.0}else{L=0;while(1){if((c[J+468+(L<<2)>>2]|0)==(I|0)){M=J+1492+(L<<2)|0;N=+g[M>>2];if(!(N<+yp())){break}}O=L+1|0;if((O|0)<256){L=O}else{K=0.0;break a}}N=+g[M>>2];K=N- +yp()}}while(0);if(K- +(u|0)*.009>0.0){C=f;D=y;break}N=H/(F*.01);if(!(N>y)){C=f;D=y;break}do{if(p){if(+g[E>>2]!=0.0){P=0;break}P=Kq(c[A>>2]|0,z+32|0,c[x>>2]|0,e)|0}else{P=0}}while(0);A=(P|0)>(s|0);C=A?f:z;D=A?y:N}}while(0);A=c[z+56>>2]|0;if((A|0)==0){break}else{y=D;f=C;z=A}}if((C|0)==0){l=0;i=j;return l|0}z=c[C+4>>2]|0;f=c[t+4>>2]|0;D=+g[C+32>>2];y=+g[C+36>>2];H=+g[C+40>>2];K=+g[f+(z*236|0)+208>>2];h=+g[f+(z*236|0)+212>>2];G=+g[f+(z*236|0)+216>>2];F=+g[f+(z*236|0)+220>>2];Q=+g[f+(z*236|0)+224>>2];R=+g[f+(z*236|0)+228>>2];t=c[C+28>>2]|0;s=c[C+44>>2]|0;P=c[C>>2]|0;e=+g[C+48>>2]!=0.0;x=(c[C+8>>2]|0)>>>3&2|(e?5:1);do{if(e){S=10.0}else{T=+g[f+(z*236|0)+204>>2];U=T!=0.0?T:30.0;if(!(U<10.0)){S=U;break}S=10.0}}while(0);f=0;while(1){V=n+468+(f<<2)|0;e=f+1|0;if((c[V>>2]|0)==(P|0)){q=52;break}if((e|0)<256){f=e}else{W=0;q=54;break}}b:do{if((q|0)==52){c[V>>2]=P;g[n+1492+(f<<2)>>2]=S+ +yp()}else if((q|0)==54){while(1){q=0;X=n+1492+(W<<2)|0;U=+g[X>>2];e=W+1|0;if(U<+yp()){break}if((e|0)<256){W=e;q=54}else{break b}}c[n+468+(W<<2)>>2]=P;g[X>>2]=S+ +yp()}}while(0);X=c[m>>2]|0;if((X|0)==0){ue[c[636260]&31](4,17552,(k=i,i=i+8|0,c[k>>2]=a,k)|0);i=k;l=1;i=j;return l|0}m=X+464|0;W=c[m>>2]|0;if((W|0)>6){ue[c[636260]&31](3,31160,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;Js(a);l=1;i=j;return l|0}else{a=W+1|0;c[m>>2]=a;g[X+16+(a*56|0)>>2]=D;g[X+16+(a*56|0)+4>>2]=y;g[X+16+(a*56|0)+8>>2]=H;c[X+16+(a*56|0)+12>>2]=t;g[X+16+(a*56|0)+16>>2]=K;g[X+16+(a*56|0)+20>>2]=h;g[X+16+(a*56|0)+24>>2]=G;g[X+16+(a*56|0)+28>>2]=F;g[X+16+(a*56|0)+32>>2]=Q;g[X+16+(a*56|0)+36>>2]=R;c[X+16+(a*56|0)+40>>2]=s;c[X+16+(a*56|0)+44>>2]=P;c[X+16+(a*56|0)+48>>2]=x;c[X+16+(a*56|0)+52>>2]=z;l=1;i=j;return l|0}return 0}function Rs(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0;c=i;i=i+64|0;d=c|0;e=c+16|0;f=c+32|0;h=c+48|0;j=d|0;k=e|0;br(2,j,k);l=+g[b+20>>2]- +g[e+4>>2];m=+g[b+24>>2]- +g[e+8>>2];n=+g[b+28>>2]- +g[j>>2];o=+g[b+32>>2]- +g[d+4>>2];p=+g[b+36>>2]- +g[d+8>>2];q=+g[b>>2];r=+g[b+16>>2]- +g[k>>2]+q;g[f>>2]=r;s=+g[b+4>>2];g[f+4>>2]=l+s;l=+g[b+8>>2];g[f+8>>2]=m+l;g[h>>2]=n+q;g[h+4>>2]=o+s;g[h+8>>2]=p+l;b=0;l=r;while(1){r=+g[a+(b<<2)>>2];if(r<l){t=0;u=6;break}k=b+1|0;if(r>+g[h+(b<<2)>>2]){t=0;u=6;break}if((k|0)>=3){t=1;u=6;break}b=k;l=+g[f+(k<<2)>>2]}if((u|0)==6){i=c;return t|0}return 0}function Ss(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.0,o=0,p=0.0,q=0.0;d=i;i=i+248|0;f=d|0;h=d+144|0;j=d+160|0;if((c[e+48>>2]&1|0)==0){k=0;l=140;m=0;i=d;return k|0}n=+g[e+16>>2];o=h|0;p=+g[e+20>>2];q=+g[e+24>>2];g[o>>2]=+g[e>>2]+(n+n)*.5;g[h+4>>2]=+g[e+4>>2]+(p+p)*.5;g[h+8>>2]=+g[e+8>>2]+(q+q)*.5;Jo(j,b,0,0,o,a,1);do{if(!(+g[j+8>>2]<1.0)){a=c[e+40>>2]|0;if((a|0)<1){k=0;l=140;m=0;i=d;return k|0}gp(a,f);q=+g[f+12>>2];if(q<+yp()+-.5){k=1}else{break}l=140;m=0;i=d;return k|0}}while(0);k=0;l=140;m=0;i=d;return k|0}function Ts(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=2545128+(a<<2)|0;f=c[e>>2]|0;if((f|0)==0){ue[c[636260]&31](4,17552,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}Zx(f+16|0,0,452)|0;f=c[e>>2]|0;if((f|0)==0){ue[c[636260]&31](4,17552,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}else{Zx(f+468|0,0,2048)|0;i=b;return}}function Us(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;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=9;i=d;return f|0}g=c[2545128+(a<<2)>>2]|0;if((g|0)==0){ue[c[636260]&31](4,17552,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;f=9;i=d;return f|0}a=eu(b)|0;c[g>>2]=a;if((a|0)==0){ue[c[636260]&31](4,30368,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;f=9;i=d;return f|0}b=c[195394]|0;if((b|0)==0){f=9;i=d;return f|0}h=b|0;j=kv(c[h>>2]<<2)|0;if((c[h>>2]|0)>0){k=b+4|0;b=0;do{l=fu(a,(c[k>>2]|0)+(b*236|0)|0)|0;c[j+(b<<2)>>2]=l;if((l|0)<0){l=(c[k>>2]|0)+(b*236|0)|0;iv(49152,(e=i,i=i+16|0,c[e>>2]=b,c[e+8>>2]=l,e)|0);i=e}b=b+1|0;}while((b|0)<(c[h>>2]|0))}c[g+4>>2]=j;f=0;i=d;return f|0}function Vs(a){a=a|0;var b=0,d=0,e=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=c[2545128+(a<<2)>>2]|0;if((e|0)==0){ue[c[636260]&31](4,17552,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}d=c[e>>2]|0;if((d|0)!=0){cu(d)}d=c[e+4>>2]|0;if((d|0)==0){i=b;return}nv(d);i=b;return}function Ws(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=1;while(1){d=2545128+(b<<2)|0;e=b+1|0;if((c[d>>2]|0)==0){break}if((e|0)<65){b=e}else{f=0;g=5;break}}if((g|0)==5){return f|0}g=kv(2516)|0;c[d>>2]=g;c[g+8>>2]=a;f=b;return f|0}function Xs(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,19664,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=2545128+(a<<2)|0;f=c[e>>2]|0;if((f|0)==0){ue[c[636260]&31](4,29896,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}d=c[f>>2]|0;if((d|0)!=0){cu(d)}d=c[f+4>>2]|0;if((d|0)!=0){nv(d)}nv(c[e>>2]|0);c[e>>2]=0;i=b;return}function Ys(){var a=0,b=0,d=0;a=i;c[196758]=~~+ev(29624,29328);b=ws(dv(28872,28488)|0)|0;c[195394]=b;if((b|0)==0){ue[c[636260]&31](4,28152,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;d=10;i=a;return d|0}else{c[376e3]=cv(27744,27360)|0;d=0;i=a;return d|0}return 0}function Zs(){var a=0,b=0,d=0,e=0;a=c[195394]|0;if((a|0)!=0){nv(a)}c[195394]=0;a=c[193342]|0;if((a|0)!=0){nv(a)}c[193342]=0;c[210614]=0;c[193340]=0;c[164930]=0;a=c[179596]|0;if((a|0)!=0){b=a;while(1){a=c[b+144>>2]|0;nv(b);if((a|0)==0){break}else{b=a}}}c[179596]=0;b=c[469156]|0;if((b|0)!=0){a=b;while(1){b=c[a+160>>2]|0;nv(a);if((b|0)==0){break}else{a=b}}}c[469156]=0;a=1;do{b=2545128+(a<<2)|0;d=c[b>>2]|0;if((d|0)!=0){e=c[d>>2]|0;if((e|0)!=0){cu(e)}e=c[d+4>>2]|0;if((e|0)!=0){nv(e)}nv(c[b>>2]|0);c[b>>2]=0}a=a+1|0;}while((a|0)<65);return}function _s(){var a=0,b=0,d=0,e=0,f=0;a=1;while(1){b=2544736+(a<<2)|0;d=a+1|0;if((c[b>>2]|0)==0){break}if((d|0)<65){a=d}else{e=0;f=5;break}}if((f|0)==5){return e|0}c[b>>2]=kv(772)|0;e=a;return e|0}function $s(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}e=2544736+(a<<2)|0;f=c[e>>2]|0;if((f|0)==0){ue[c[636260]&31](4,57128,(d=i,i=i+8|0,c[d>>2]=a,d)|0);i=d;i=b;return}else{nv(f);c[e>>2]=0;i=b;return}}function at(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;d=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}f=c[2544736+(a<<2)>>2]|0;if((f|0)==0){ue[c[636260]&31](4,57128,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;i=d;return}g[f>>2]=+g[b>>2];g[f+4>>2]=+g[b+4>>2];g[f+8>>2]=+g[b+8>>2];g[f+12>>2]=+g[b+12>>2];g[f+16>>2]=+g[b+16>>2];g[f+20>>2]=+g[b+20>>2];g[f+24>>2]=+g[b+24>>2];g[f+28>>2]=+g[b+28>>2];g[f+32>>2]=+g[b+32>>2];c[f+36>>2]=c[b+36>>2];c[f+40>>2]=c[b+40>>2];g[f+44>>2]=+g[b+44>>2];c[f+48>>2]=c[b+48>>2];g[f+52>>2]=+g[b+52>>2];g[f+56>>2]=+g[b+56>>2];g[f+60>>2]=+g[b+60>>2];e=f+96|0;f=c[e>>2]|0;a=f&-3;c[e>>2]=a;h=b+64|0;if((c[h>>2]&2|0)==0){j=a}else{a=f|2;c[e>>2]=a;j=a}a=j&-33;c[e>>2]=a;if((c[h>>2]&32|0)==0){k=a}else{a=j|32;c[e>>2]=a;k=a}a=k&-17;c[e>>2]=a;if((c[h>>2]&16|0)==0){l=a}else{a=k|16;c[e>>2]=a;l=a}a=l&-513;c[e>>2]=a;if((c[h>>2]&512|0)==0){m=a}else{a=l|512;c[e>>2]=a;m=a}c[e>>2]=m&-65;if((c[h>>2]&64|0)==0){i=d;return}c[e>>2]=m|64;i=d;return}function bt(a){a=a|0;var b=0,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.0,B=0.0,C=0.0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0.0,Q=0.0,R=0.0,S=0,U=0,V=0,W=0,X=0.0,Y=0;b=i;i=i+176|0;d=b|0;e=b+40|0;f=b+160|0;h=gr(a)|0;do{if((h|0)==0){j=0}else{if((Yp(h)|0)==0){j=h;break}else{k=h}l=120;m=0;n=40;o=0;i=b;return k|0}}while(0);h=f|0;g[h>>2]=+g[a>>2];p=a+4|0;q=f+4|0;g[q>>2]=+g[p>>2];r=a+8|0;s=f+8|0;g[s>>2]=+g[r>>2]+4.0;f=d|0;t=e|0;u=mr(a,h,f,t,10)|0;a:do{if((u|0)>0){v=0;while(1){w=d+(v<<2)|0;x=v+1|0;if((Yp(c[w>>2]|0)|0)!=0){break}if((x|0)<(u|0)){v=x}else{y=1;z=j;A=999999.0;break a}}k=c[w>>2]|0;l=120;m=0;n=40;o=0;i=b;return k|0}else{y=1;z=j;A=999999.0}}while(0);while(1){B=+(y*12|0|0);j=1;w=z;u=0;C=A;while(1){D=+(j<<3|0);v=1;x=w;E=u;F=C;while(1){G=+g[p>>2];H=+g[r>>2];g[h>>2]=D+ +g[a>>2];g[q>>2]=+(v<<3|0)+G;g[s>>2]=B+H;I=mr(a,h,f,t,10)|0;if((I|0)>0){J=0;K=x;L=E;H=F;while(1){M=d+(J<<2)|0;do{if((Yp(c[M>>2]|0)|0)==0){N=H;O=L}else{G=+g[e+(J*12|0)>>2]- +g[a>>2];P=+g[e+(J*12|0)+4>>2]- +g[p>>2];Q=+g[e+(J*12|0)+8>>2]- +g[r>>2];R=+T(G*G+P*P+Q*Q);if(!(R<H)){N=H;O=L;break}N=R;O=c[M>>2]|0}}while(0);if((K|0)==0){S=c[M>>2]|0}else{S=K}U=J+1|0;if((U|0)<(I|0)){J=U;K=S;L=O;H=N}else{V=S;W=O;X=N;break}}}else{V=x;W=E;X=F}L=v-1|0;if((L|0)>-2){v=L;x=V;E=W;F=X}else{break}}E=j-1|0;if((E|0)>-2){j=E;w=V;u=W;C=X}else{break}}u=y-1|0;if((W|0)!=0){k=W;Y=20;break}if((u|0)>-2){y=u;z=V;A=X}else{k=V;Y=20;break}}if((Y|0)==20){l=120;m=0;n=40;o=0;i=b;return k|0}return 0}function ct(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.0,w=0.0,x=0.0;d=i;i=i+240|0;e=d|0;f=d+48|0;h=d+64|0;j=d+112|0;k=d+200|0;l=d+80|0;m=d+96|0;br(4,l,m);n=h|0;g[n>>2]=+g[a>>2];o=a+4|0;p=h+4|0;g[p>>2]=+g[o>>2];q=a+8|0;r=h+8|0;g[r>>2]=+g[q>>2]+-3.0;Jo(j,a,l,m,n,b,65537);b=c[j+80>>2]|0;do{if((c[j+4>>2]|0)==0){if(+g[j+8>>2]>=1.0|(b|0)==1023){break}if((b|0)==1022){s=bt(a)|0;t=44;u=0;i=d;return s|0}m=hp(b)|0;do{if(((c[717328+(m<<2)>>2]|0)-1|0)>>>0<2>>>0){l=Yq(0,m)|0;if((l|0)==0){break}Wq(l,e);s=c[e>>2]|0;t=44;u=0;i=d;return s|0}}while(0);m=(Hp(a)|0)==0;l=bt(a)|0;if(!m){s=l;t=44;u=0;i=d;return s|0}do{if((l|0)!=0){if((Yp(l)|0)==0){break}else{s=l}t=44;u=0;i=d;return s|0}}while(0);v=+g[a>>2];l=f|0;g[l>>2]=v;w=+g[o>>2];m=f+4|0;g[m>>2]=w;x=+g[q>>2];h=f+8|0;g[h>>2]=x;g[n>>2]=v;g[p>>2]=w;g[r>>2]=x+-800.0;lr(k,l,n,4,-1);if((c[k>>2]|0)==0){x=+g[k+16>>2];w=+g[k+12>>2];g[l>>2]=+g[k+8>>2];g[m>>2]=w;g[h>>2]=x}s=bt(l)|0;t=44;u=0;i=d;return s|0}}while(0);s=bt(a)|0;t=44;u=0;i=d;return s|0}function dt(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0;e=i;i=i+216|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+64|0;m=e+80|0;n=e+96|0;o=e+112|0;p=e+128|0;Zx(m|0,0,12)|0;q=n;c[q>>2]=c[15326];c[q+4>>2]=c[15327];c[q+8>>2]=c[15328];q=o;c[q>>2]=c[15330];c[q+4>>2]=c[15331];c[q+8>>2]=c[15332];q=c[d+4>>2]&65535;Mo(q,m|0,f|0,h|0,0);if((kp(q,j|0)|0)==0){ue[c[636260]&31](1,47128,(m=i,i=i+8|0,c[m>>2]=q,m)|0);i=m;r=0;i=e;return r|0}else{s=0}while(1){t=+g[a+(s<<2)>>2];u=+g[j+(s<<2)>>2];if(t>u+ +g[h+(s<<2)>>2]+16.0){r=0;v=10;break}m=s+1|0;if(t<u+ +g[f+(s<<2)>>2]+-16.0){r=0;v=10;break}if((m|0)<2){s=m}else{v=6;break}}if((v|0)==6){u=+g[a>>2];s=k|0;g[s>>2]=u;t=+g[a+4>>2];g[k+4>>2]=t;w=+g[a+8>>2];g[k+8>>2]=w+24.0;k=l|0;g[k>>2]=u;g[l+4>>2]=t;g[l+8>>2]=w+-48.0;Jo(p,s,n|0,o|0,k,b,65537);b=c[p+80>>2]|0;do{if((c[p+4>>2]|0)==0){if((c[p>>2]|0)!=0|(b|0)==1023){break}if((jp(b)|0)==(q|0)){r=1}else{break}i=e;return r|0}}while(0);r=0;i=e;return r|0}else if((v|0)==10){i=e;return r|0}return 0}function et(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;b=i;i=i+256|0;d=b+128|0;e=b|0;f=d|0;Zx(717328,0,1024)|0;g=Po(0)|0;if((g|0)==0){h=128;j=0;k=128;l=0;i=b;return}m=d+1|0;d=g;do{a:do{if((Qo(d,40448,e,128)|0)!=0){if((Qo(d,35560,f,128)|0)==0){break}do{if((a[f]|0)==0){n=0}else{g=Vc(m|0)|0;if(!(g>>>0>255>>>0)){n=g;break}ue[c[636260]&31](1,30408,(g=i,i=i+8|0,c[g>>2]=e,g)|0);i=g;break a}}while(0);if((tn(e,26136)|0)==0){c[717328+(n<<2)>>2]=2;break}if((tn(e,22736)|0)==0){c[717328+(n<<2)>>2]=1;break}if((tn(e,19632)|0)==0){c[717328+(n<<2)>>2]=3;break}if((tn(e,17536)|0)!=0){break}c[717328+(n<<2)>>2]=4}}while(0);d=Po(d)|0;}while((d|0)!=0);h=128;j=0;k=128;l=0;i=b;return}function ft(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,h=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0;d=i;i=i+16|0;e=d|0;f=e|0;zp(a,b,c,f);h=0;while(1){j=+g[e+(h<<2)>>2];k=+g[b+(h<<2)>>2];if(j>k){l=+g[c+(h<<2)>>2];if(j>l){m=l;break}}if(j<k){l=+g[c+(h<<2)>>2];if(j<l){m=l;break}}n=h+1|0;if((n|0)<3){h=n}else{o=11;break}}if((o|0)==11){l=+g[a>>2]- +g[f>>2];p=+g[a+4>>2]- +g[e+4>>2];q=+g[a+8>>2]- +g[e+8>>2];r=l*l+p*p+q*q;i=d;return+r}e=+S(+(j-k))<+S(+(j-m));if(e){s=b;t=b}else{s=c;t=c}m=+g[a+8>>2]- +g[t+8>>2];j=+g[a+4>>2]- +g[s+4>>2];k=+g[a>>2]- +g[s>>2];r=m*m+(j*j+k*k);i=d;return+r}function gt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0;switch(c[b+36>>2]&16777215|0){case 13:{f=0;break};case 11:{f=0;break};case 18:{f=0;break};case 7:{f=0;break};case 12:{f=0;break};case 10:{f=0;break};case 5:{f=0;break};case 14:{f=0;break};case 19:{f=0;break};default:{f=1}}if((e|0)<=0){h=0;return h|0}i=b+12|0;j=a+4|0;k=a+8|0;l=b+16|0;m=b+20|0;n=b+24|0;if((f|0)==0){f=0;b=0;while(1){o=+g[d+(f*20|0)+12>>2];p=d+(f*20|0)|0;q=+ft(p,a,i);do{if(q<o*o){r=+g[a>>2]- +g[p>>2];s=+g[j>>2]- +g[d+(f*20|0)+4>>2];t=+g[k>>2]- +g[d+(f*20|0)+8>>2];if(r*r+s*s+t*t>q){u=c[d+(f*20|0)+16>>2]|0;break}t=+g[i>>2]- +g[p>>2];s=+g[l>>2]- +g[d+(f*20|0)+4>>2];r=+g[m>>2]- +g[d+(f*20|0)+8>>2];if(!(t*t+s*s+r*r>q)){u=b;break}u=c[d+(f*20|0)+16>>2]|0}else{u=b}}while(0);p=f+1|0;if((u|0)==1){h=1;v=28;break}if((p|0)<(e|0)){f=p;b=u}else{h=u;v=28;break}}if((v|0)==28){return h|0}}else{w=0;x=0}while(1){q=+g[d+(w*20|0)+12>>2];o=q*q;u=d+(w*20|0)|0;q=+ft(u,a,i);do{if(q<o){r=+g[a>>2]- +g[u>>2];s=+g[j>>2]- +g[d+(w*20|0)+4>>2];t=+g[k>>2]- +g[d+(w*20|0)+8>>2];if(!(r*r+s*s+t*t>q)){v=24;break}y=c[d+(w*20|0)+16>>2]|0}else{v=24}}while(0);do{if((v|0)==24){v=0;q=+ft(u,i,n);if(!(q<o)){y=x;break}t=+g[i>>2]- +g[u>>2];s=+g[l>>2]- +g[d+(w*20|0)+4>>2];r=+g[m>>2]- +g[d+(w*20|0)+8>>2];if(!(t*t+s*s+r*r>q)){y=x;break}y=c[d+(w*20|0)+16>>2]|0}}while(0);u=w+1|0;if((y|0)==1){h=1;v=28;break}if((u|0)<(e|0)){w=u;x=y}else{h=y;v=28;break}}if((v|0)==28){return h|0}return 0}function ht(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0,j=0;f=i;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;i=f;return}j=c[2544736+(a<<2)>>2]|0;if((j|0)==0){ue[c[636260]&31](4,57128,(h=i,i=i+8|0,c[h>>2]=a,h)|0);i=h;i=f;return}h=j+768|0;if((e|0)==0){c[h>>2]=0;i=f;return}a=c[h>>2]|0;if((a|0)>31){i=f;return}g[j+128+(a*20|0)>>2]=+g[b>>2];g[j+128+((c[h>>2]|0)*20|0)+4>>2]=+g[b+4>>2];g[j+128+((c[h>>2]|0)*20|0)+8>>2]=+g[b+8>>2];g[j+128+((c[h>>2]|0)*20|0)+12>>2]=d;c[j+128+((c[h>>2]|0)*20|0)+16>>2]=e;c[h>>2]=(c[h>>2]|0)+1;i=f;return}function it(a,b,d,f,h,j,k,l,m,n,o,p){a=a|0;b=b|0;d=d|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var 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.0,H=0,I=0,J=0;q=i;i=i+48|0;r=q|0;if((b|0)==0){s=0;t=44;u=0;i=q;return s|0}if((dq(b)|0)==0){if((dq(c[l+12>>2]|0)|0)==0){v=m}else{w=4}}else{w=4}if((w|0)==4){v=m|8388608}m=Xq(b,0)|0;if((m|0)==0){s=0;t=44;u=0;i=q;return s|0}x=l+12|0;l=r|0;y=r+36|0;z=~v;A=r+24|0;B=r+40|0;C=(p|0)==0;D=0;E=0;F=m;while(1){do{if((c[h>>2]|0)==(F|0)){G=+g[j>>2];if(G<+yp()){w=10;break}if((c[k>>2]|0)>4){H=E;I=D}else{w=10}}else{w=10}}while(0);do{if((w|0)==10){w=0;Wq(F,r);if((c[x>>2]|0)==(d|0)){if((c[l>>2]|0)==(f|0)){H=E;I=D;break}}if(((xq(c[y>>2]|0)|0)&z|0)!=0){H=E;I=D;break}if(((Bq(c[l>>2]|0)|0)&z|0)!=0){H=E;I=D;break}m=Kq(c[l>>2]|0,A,c[x>>2]|0,v)|0;if((m|0)==0){H=E;I=D;break}if((gt(a,r,n,o)|0)==0){J=(e[B>>1]|0)+m|0;m=(D|0)==0|(J|0)<(D|0);H=m?F:E;I=m?J:D;break}if(C){H=E;I=D;break}c[p>>2]=c[p>>2]|256;H=E;I=D}}while(0);J=Xq(b,F)|0;if((J|0)==0){s=H;break}else{D=I;E=H;F=J}}t=44;u=0;i=q;return s|0}function jt(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.0,J=0.0,K=0.0,L=0.0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0;h=i;i=i+64|0;j=h|0;k=h+16|0;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(l=i,i=i+8|0,c[l>>2]=a,l)|0);i=l;m=0;n=44;o=0;i=h;return m|0}p=c[2544736+(a<<2)>>2]|0;if((p|0)==0){ue[c[636260]&31](4,57128,(l=i,i=i+8|0,c[l>>2]=a,l)|0);i=l;m=0;n=44;o=0;i=h;return m|0}l=c[p+76>>2]|0;if((l|0)==0|(b|0)==0){m=0;n=44;o=0;i=h;return m|0}a=k+12|0;q=j|0;r=k+16|0;s=j+4|0;t=k+20|0;u=j+8|0;j=f+4|0;v=f+8|0;w=k+36|0;x=k+24|0;y=k+28|0;z=k+32|0;A=k|0;B=p+72|0;C=p+116|0;D=p+120|0;E=p+124|0;F=b+12|0;G=c[p+68>>2]|0;H=l;I=0.0;J=+g[p>>2];K=+g[p+4>>2];L=+g[p+8>>2];a:while(1){if(!((H|0)!=0&I<e)){m=0;M=18;break}Wq(H,k);g[q>>2]=+g[a>>2]-J;g[s>>2]=+g[r>>2]-K;g[u>>2]=+g[t>>2]-L;N=I+ +dn(q);if(!(N<e)){M=9;break}O=+g[a>>2];g[f>>2]=O;P=+g[r>>2];g[j>>2]=P;Q=+g[t>>2];g[v>>2]=Q;switch(c[w>>2]&16777215|0){case 18:case 11:case 19:{R=N;break};case 10:case 12:case 13:{m=1;M=18;break a;break};default:{g[q>>2]=+g[x>>2]-O;g[s>>2]=+g[y>>2]-P;g[u>>2]=+g[z>>2]-Q;Q=N+ +dn(q);if(!(Q<e)){M=13;break a}g[f>>2]=+g[x>>2];g[j>>2]=+g[y>>2];g[v>>2]=+g[z>>2];R=Q}}p=it(x,c[A>>2]|0,c[B>>2]|0,G,C,D,E,b,d,0,0,0)|0;S=+g[x>>2];T=+g[y>>2];U=+g[z>>2];l=c[A>>2]|0;if((l|0)==(c[F>>2]|0)){M=15;break}else{G=l;H=p;I=R;J=S;K=T;L=U}}if((M|0)==9){Q=e-I;g[f>>2]=J+Q*+g[q>>2];g[j>>2]=K+Q*+g[s>>2];g[v>>2]=L+Q*+g[u>>2];m=1;n=44;o=0;i=h;return m|0}else if((M|0)==13){Q=e-N;g[f>>2]=+g[a>>2]+Q*+g[q>>2];g[j>>2]=+g[r>>2]+Q*+g[s>>2];g[v>>2]=+g[t>>2]+Q*+g[u>>2];m=1;n=44;o=0;i=h;return m|0}else if((M|0)==15){t=b|0;g[q>>2]=+g[t>>2]-S;r=b+4|0;g[s>>2]=+g[r>>2]-T;a=b+8|0;g[u>>2]=+g[a>>2]-U;if(R+ +dn(q)<e){g[f>>2]=+g[t>>2];g[j>>2]=+g[r>>2];g[v>>2]=+g[a>>2];m=1;n=44;o=0;i=h;return m|0}else{U=e-R;g[f>>2]=+g[x>>2]+U*+g[q>>2];g[j>>2]=+g[y>>2]+U*+g[s>>2];g[v>>2]=+g[z>>2]+U*+g[u>>2];m=1;n=44;o=0;i=h;return m|0}}else if((M|0)==18){n=44;o=0;i=h;return m|0}return 0}function kt(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,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.0,M=0;h=i;i=i+264|0;j=h|0;k=h+88|0;l=h+176|0;m=h+248|0;if((d|0)==0|(b|0)==0){n=0;o=44;p=0;i=h;return n|0}q=d+12|0;r=c[q>>2]|0;if((r|0)==0){n=0;o=44;p=0;i=h;return n|0}s=h+224|0;c[s>>2]=0;t=m|0;g[t>>2]=+g[a>>2];u=m+4|0;g[u>>2]=+g[a+4>>2];v=m+8|0;g[v>>2]=+g[a+8>>2];a=h+232|0;m=h+240|0;w=d+40|0;x=d|0;y=l+12|0;z=k+8|0;A=l+24|0;B=j+8|0;C=l|0;D=l+28|0;E=l+32|0;F=b;G=b;b=0;H=r;while(1){if((F|0)==(H|0)){n=0;I=13;break}J=it(t,F,r,G,s,a,m,d,e,0,0,0)|0;if((J|0)==0){n=0;I=13;break}Wq(J,l);Jo(k,x,0,0,y,c[w>>2]|0,65537);if(!(+g[z>>2]<1.0)){I=7;break}Jo(j,x,0,0,A,c[w>>2]|0,65537);if(!(+g[B>>2]<1.0)){I=9;break}J=c[C>>2]|0;K=c[q>>2]|0;L=+g[A>>2];if((J|0)==(K|0)){I=11;break}g[t>>2]=L;g[u>>2]=+g[D>>2];g[v>>2]=+g[E>>2];M=b+1|0;if((M|0)<20){G=F;F=J;b=M;H=K}else{n=0;I=13;break}}if((I|0)==7){g[f>>2]=+g[y>>2];g[f+4>>2]=+g[l+16>>2];g[f+8>>2]=+g[l+20>>2];n=1;o=44;p=0;i=h;return n|0}else if((I|0)==9){g[f>>2]=+g[A>>2];g[f+4>>2]=+g[D>>2];g[f+8>>2]=+g[E>>2];n=1;o=44;p=0;i=h;return n|0}else if((I|0)==11){g[f>>2]=L;g[f+4>>2]=+g[D>>2];g[f+8>>2]=+g[E>>2];n=1;o=44;p=0;i=h;return n|0}else if((I|0)==13){o=44;p=0;i=h;return n|0}return 0}function lt(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.0,p=0.0;d=i;i=i+64|0;e=d|0;f=d+16|0;h=d+32|0;j=d+48|0;Zx(j|0,0,12)|0;k=c[a+4>>2]&65535;l=e|0;m=f|0;n=h|0;Mo(k,j|0,l,m,n);if((kp(k,n)|0)==0){ue[c[636260]&31](1,47128,(j=i,i=i+8|0,c[j>>2]=k,j)|0);i=j}o=+g[e+4>>2]+ +g[f+4>>2];p=+g[e+8>>2]+ +g[f+8>>2];g[b>>2]=(+g[l>>2]+ +g[m>>2])*.5+ +g[n>>2];g[b+4>>2]=o*.5+ +g[h+4>>2];n=b+8|0;g[n>>2]=p*.5+ +g[h+8>>2];g[n>>2]=+g[a+20>>2];i=d;return}function mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0.0,m=0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;e=i;i=i+112|0;f=e|0;h=e+16|0;j=e+32|0;k=e+72|0;l=+g[a>>2];m=f|0;g[m>>2]=l;n=a+4|0;o=+g[n>>2];p=f+4|0;g[p>>2]=o;q=+g[a+8>>2];r=f+8|0;g[r>>2]=q;f=h|0;g[f>>2]=l;s=h+4|0;g[s>>2]=o;t=h+8|0;g[t>>2]=q+-60.0;lr(j,m,f,4,d);if(!(+g[j+4>>2]<1.0)){u=1.0;i=e;return+u}h=b+4|0;v=k|0;w=k+8|0;x=k+12|0;y=k+16|0;z=8;q=+g[j+16>>2]+1.0;while(1){A=+(z|0);o=+g[a>>2]+A*+g[b>>2];g[m>>2]=o;l=+g[n>>2]+A*+g[h>>2];g[p>>2]=l;B=q+24.0;g[r>>2]=B;g[f>>2]=o;g[s>>2]=l;g[t>>2]=B;g[t>>2]=B-(+g[(c[64876]|0)+16>>2]+48.0);lr(k,m,f,4,d);C=+g[y>>2];if((c[v>>2]|0)==0){if(C<q- +g[(c[64872]|0)+16>>2]+-8.0){D=5;break}else{E=C}}else{E=q}j=z+8|0;if((j|0)<101){z=j;q=E}else{break}}do{if((D|0)==5){E=+g[x>>2];g[f>>2]=+g[w>>2];g[s>>2]=E;g[t>>2]=C+-20.0;if(((Ko(f)|0)&32|0)==0){u=A}else{break}i=e;return+u}}while(0);u=0.0;i=e;return+u}function nt(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,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0,y=0.0;e=i;i=i+168|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+88|0;m=e+128|0;n=a|0;o=j|0;g[o>>2]=+g[n>>2];p=a+4|0;q=j+4|0;g[q>>2]=+g[p>>2];r=a+8|0;s=+g[r>>2];t=j+8|0;g[t>>2]=s;g[t>>2]=s+ +g[(c[64876]|0)+16>>2];j=a+36|0;lr(k,n,o,2,c[j>>2]|0);s=+g[k+8>>2];u=+g[k+12>>2];v=+g[k+16>>2];if((c[k>>2]|0)!=0){w=0;i=e;return w|0}if(v- +g[r>>2]<+g[(c[64872]|0)+16>>2]){w=0;i=e;return w|0}k=h|0;g[k>>2]=+g[b>>2];x=h+4|0;g[x>>2]=+g[b+4>>2];g[h+8>>2]=0.0;+dn(k);y=+g[a+44>>2]*d*.5;g[o>>2]=+g[n>>2]+ +g[k>>2]*y;g[q>>2]=+g[p>>2]+ +g[x>>2]*y;x=f|0;g[x>>2]=s;p=f+4|0;g[p>>2]=u;n=f+8|0;g[n>>2]=v;g[t>>2]=v;lr(l,x,o,2,c[j>>2]|0);v=+g[l+8>>2];u=+g[l+12>>2];if((c[l>>2]|0)!=0){w=0;i=e;return w|0}s=+g[l+16>>2];g[x>>2]=v;g[p>>2]=u;g[n>>2]=s;g[o>>2]=v;g[q>>2]=u;g[t>>2]=+g[r>>2];lr(m,x,o,2,c[j>>2]|0);if((c[m>>2]|0)!=0){w=0;i=e;return w|0}if(!(+g[m+4>>2]<1.0)){w=0;i=e;return w|0}if(+g[m+16>>2]- +g[r>>2]<+g[(c[64872]|0)+16>>2]){w=0;i=e;return w|0}r=a+40|0;yu(c[r>>2]|0);Ju(c[r>>2]|0,k,d);k=a+96|0;c[k>>2]=c[k>>2]|1;w=1;i=e;return w|0}function ot(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.0,E=0.0,F=0.0;f=i;i=i+168|0;h=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+64|0;n=f+80|0;o=a|0;p=a+36|0;q=(Gp(o,c[a+48>>2]|0,c[p>>2]|0)|0)==0;r=a+96|0;s=c[r>>2]|0;if(q){t=s}else{q=s|2;c[r>>2]=q;t=q}q=a+96|0;if((t&2|0)==0){if((t&1|0)==0){u=1;v=84;w=0;i=f;return u|0}if(!(+g[a+20>>2]<50.0)){u=1;v=84;w=0;i=f;return u|0}Ju(c[a+40>>2]|0,b,d);u=1;v=84;w=0;i=f;return u|0}if((nt(a,b,d)|0)!=0){u=1;v=84;w=0;i=f;return u|0}c[q>>2]=c[q>>2]&-2;q=(e&6|0)==2?4:2;t=h|0;g[t>>2]=+g[b>>2];r=h+4|0;g[r>>2]=+g[b+4>>2];b=h+8|0;g[b>>2]=0.0;+dn(t);do{if((e&4|0)==0){if(!(+mt(o,t,c[p>>2]|0)>0.0)){x=e;break}x=e|4}else{x=e}}while(0);e=j|0;g[e>>2]=+g[t>>2]*d;g[j+4>>2]=+g[r>>2]*d;r=j+8|0;g[r>>2]=+g[b>>2]*d;b=k|0;g[b>>2]=+g[a+12>>2];g[k+4>>2]=+g[a+16>>2];g[k+8>>2]=+g[a+20>>2];k=(x&4|0)!=0;if(k){g[r>>2]=400.0;y=61;z=1;A=30}else{y=60;z=2;A=2}r=m|0;g[r>>2]=+g[o>>2];j=a+4|0;g[m+4>>2]=+g[j>>2];g[m+8>>2]=+g[a+8>>2]+.5;Jp(n,c[p>>2]|0,r,q,1,b,e,z,A,.10000000149011612,y,0,0)|0;if(!((c[n+80>>2]|0)<(A|0)|k^1)){u=0;v=84;w=0;i=f;return u|0}A=c[n+68>>2]|0;if((A&56|0)!=0){u=0;v=84;w=0;i=f;return u|0}do{if((A&1|0)==0){B=n|0;C=l|0}else{y=l|0;+on(n+16|0,y);z=n|0;if(+mt(z,y,c[p>>2]|0)>0.0){u=0;v=84;w=0;i=f;return u|0}if(+mt(z,t,c[p>>2]|0)>0.0){u=0}else{B=z;C=y;break}v=84;w=0;i=f;return u|0}}while(0);D=+g[B>>2]- +g[o>>2];g[C>>2]=D;E=+g[n+4>>2]- +g[j>>2];g[l+4>>2]=E;g[l+8>>2]=0.0;F=+T(D*D+E*E+0.0);if(F<+g[a+44>>2]*d*.5){u=0;v=84;w=0;i=f;return u|0}if(k){yu(c[a+40>>2]|0)}k=a+40|0;if((x&2|0)!=0){Au(c[k>>2]|0)}Ju(c[k>>2]|0,t,d);u=1;v=84;w=0;i=f;return u|0}function pt(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;f=i;i=i+16|0;h=f|0;if((a-1|0)>>>0>63>>>0){ue[c[636260]&31](4,47520,(j=i,i=i+8|0,c[j>>2]=a,j)|0);i=j;k=0;i=f;return k|0}l=c[2544736+(a<<2)>>2]|0;if((l|0)==0){ue[c[636260]&31](4,57128,(j=i,i=i+8|0,c[j>>2]=a,j)|0);i=j;k=0;i=f;return k|0}if((Hp(l|0)|0)==0){k=ot(l,b,d,e)|0;i=f;return k|0}else{e=h|0;g[e>>2]=+g[b>>2];g[h+4>>2]=+g[b+4>>2];g[h+8>>2]=+g[b+8>>2];+dn(e);Ju(c[l+40>>2]|0,e,d);k=1;i=f;return k|0}return 0}function qt(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.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0;f=i;i=i+224|0;h=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+136|0;n=a+48|0;o=h|0;p=j|0;br(c[n>>2]|0,o,p);q=+g[b>>2];r=+g[b+4>>2];s=+g[b+8>>2];if(+S(+(s+(q*0.0+r*0.0)))<.7){b=h+8|0;g[b>>2]=+g[(c[64872]|0)+16>>2]+ +g[b>>2];b=j+8|0;g[b>>2]=+g[b>>2]+-10.0}b=a|0;j=k|0;g[j>>2]=+g[b>>2]+q*3.0;h=a+4|0;t=k+4|0;g[t>>2]=+g[h>>2]+r*3.0;u=a+8|0;v=k+8|0;g[v>>2]=+g[u>>2]+s*3.0;k=a+36|0;Jo(l,b,o,p,j,c[k>>2]|0,33619969);w=c[l+80>>2]|0;do{if((c[l+4>>2]|0)==0){if((w-1022|0)>>>0<2>>>0){break}c[e+8>>2]=1;c[e+12>>2]=w;i=f;return}}while(0);if((d|0)==0){i=f;return}if((Yp(c[a+64>>2]|0)|0)!=0){i=f;return}br(c[n>>2]|0,o,p);g[j>>2]=+g[b>>2];g[t>>2]=+g[h>>2];g[v>>2]=+g[u>>2]+-3.0;Jo(m,b,o,p,j,c[k>>2]|0,65537);k=c[m+80>>2]|0;if((c[m+4>>2]|0)!=0){i=f;return}if((k-1022|0)>>>0<2>>>0){i=f;return}c[e+8>>2]=1;c[e+12>>2]=k;k=e+20|0;c[k>>2]=c[k>>2]|32;i=f;return}function rt(a,b,d){a=a|0;b=b|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.0,q=0.0,r=0.0,s=0.0;e=i;i=i+72|0;f=e|0;h=e+16|0;j=h;Zx(j|0,0,52)|0;k=b|0;l=f|0;g[l>>2]=+g[d+12>>2]- +g[k>>2];m=b+4|0;n=f+4|0;g[n>>2]=+g[d+16>>2]- +g[m>>2];o=f+8|0;g[o>>2]=0.0;p=+dn(l);qt(b,l,1,h);if(p<10.0){g[l>>2]=+g[d+24>>2]- +g[k>>2];g[n>>2]=+g[d+28>>2]- +g[m>>2];g[o>>2]=0.0;q=+dn(l)}else{q=p}if(((ir(c[d>>2]|0)|0)&2|0)==0&q<20.0){Au(c[b+40>>2]|0)}q=+mt(k,l,c[b+36>>2]|0);k=q>0.0;do{if((c[b+96>>2]&512|0)==0){if(!k){r=400.0;break}r=400.0-(360.0-q*2.0)}else{if(k){s=200.0-(180.0-q)}else{s=200.0}Bu(c[b+40>>2]|0);r=s}}while(0);Ju(c[b+40>>2]|0,l,r);g[h+28>>2]=+g[l>>2];g[h+32>>2]=+g[n>>2];g[h+36>>2]=+g[o>>2];Vx(a|0,j|0,52)|0;i=e;return}function st(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0.0;e=i;i=i+72|0;f=e|0;h=e+16|0;j=h;Zx(j|0,0,52)|0;k=f|0;g[k>>2]=+g[d+12>>2]- +g[b>>2];l=f+4|0;g[l>>2]=+g[d+16>>2]- +g[b+4>>2];d=f+8|0;g[d>>2]=0.0;m=+dn(k);qt(b,k,1,h);if(m<9.0){yu(c[b+40>>2]|0)}else{Ju(c[b+40>>2]|0,k,360.0-(360.0-(m>60.0?360.0:m*6.0)))}g[h+28>>2]=+g[k>>2];g[h+32>>2]=+g[l>>2];g[h+36>>2]=+g[d>>2];Vx(a|0,j|0,52)|0;i=e;return}function tt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0;e=i;i=i+88|0;f=e|0;h=e+16|0;j=e+32|0;k=j;Zx(k|0,0,52)|0;l=+g[d+24>>2]- +g[b>>2];m=f|0;g[m>>2]=l;n=+g[d+28>>2]- +g[b+4>>2];o=f+4|0;g[o>>2]=n;p=f+8|0;g[p>>2]=+g[d+32>>2]- +g[b+8>>2];d=h|0;g[d>>2]=l;g[h+4>>2]=n;g[h+8>>2]=0.0;n=(+((Yx()|0)&32767|0)/32767.0+-.5)*2.0*40.0+15.0;g[p>>2]=+g[p>>2]+n;+dn(m);n=+dn(d);d=b+40|0;Fu(c[d>>2]|0);if(n<40.0){Du(c[d>>2]|0)}gn(m,j+40|0);d=j+20|0;c[d>>2]=c[d>>2]|1;g[j+28>>2]=+g[m>>2];g[j+32>>2]=+g[o>>2];g[j+36>>2]=+g[p>>2];Vx(a|0,k|0,52)|0;i=e;return}function ut(a,b,d){a=a|0;b=b|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,r=0.0,s=0.0,t=0.0;e=i;i=i+88|0;f=e|0;h=e+16|0;j=e+32|0;k=j;Zx(k|0,0,52)|0;if((c[b+96>>2]&16|0)!=0){Vx(a|0,k|0,52)|0;l=52;m=0;i=e;return}n=b|0;o=h|0;g[o>>2]=+g[n>>2];p=b+4|0;g[h+4>>2]=+g[p>>2];q=b+8|0;g[h+8>>2]=+g[q>>2]+-32.0;if(((Ko(o)|0)&56|0)==0){Vx(a|0,k|0,52)|0;l=52;m=0;i=e;return}else{r=+g[d+24>>2]- +g[n>>2];n=f|0;s=+g[d+28>>2]- +g[p>>2];p=f+4|0;t=+g[d+32>>2]- +g[q>>2];q=f+8|0;g[n>>2]=r+(+((Yx()|0)&32767|0)/32767.0+-.5)*2.0*10.0;g[p>>2]=s+(+((Yx()|0)&32767|0)/32767.0+-.5)*2.0*10.0;g[q>>2]=t+((+((Yx()|0)&32767|0)/32767.0+-.5)*2.0*10.0+70.0);Ju(c[b+40>>2]|0,n,400.0);gn(n,j+40|0);b=j+20|0;c[b>>2]=c[b>>2]|1;g[j+28>>2]=+g[n>>2];g[j+32>>2]=+g[p>>2];g[j+36>>2]=+g[q>>2];Vx(a|0,k|0,52)|0;l=52;m=0;i=e;return}}function vt(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;e=i;i=i+96|0;f=e|0;h=e+16|0;j=e+32|0;k=e+40|0;l=k;Zx(l|0,0,52)|0;m=d+12|0;n=b|0;o=h|0;g[o>>2]=+g[m>>2]- +g[n>>2];p=d+16|0;q=b+4|0;r=h+4|0;g[r>>2]=+g[p>>2]- +g[q>>2];s=h+8|0;g[s>>2]=+g[d+20>>2]- +g[b+8>>2];+dn(o);qt(b,o,1,k);h=d+24|0;t=+g[m>>2];u=+g[h>>2]-t;g[o>>2]=u;o=d+28|0;v=+g[p>>2];w=+g[o>>2]-v;g[r>>2]=w;g[s>>2]=0.0;x=+T(u*u+w*w+0.0);s=f|0;g[s>>2]=t- +g[n>>2];r=f+4|0;g[r>>2]=v- +g[q>>2];p=f+8|0;g[p>>2]=0.0;v=+dn(s);do{if(v<48.0){g[s>>2]=+g[h>>2]- +g[n>>2];g[r>>2]=+g[o>>2]- +g[q>>2];g[p>>2]=0.0;+dn(s);if(x<20.0){g[j>>2]=100.0;break}if((Pp(0.0,m,h,j)|0)!=0){break}g[j>>2]=400.0}else{if(x<20.0){g[j>>2]=400.0-(256.0-(v>64.0?256.0:v*4.0));break}else{g[j>>2]=400.0;break}}}while(0);qt(b,s,1,k);Ju(c[b+40>>2]|0,s,+g[j>>2]);g[k+28>>2]=+g[s>>2];g[k+32>>2]=+g[r>>2];g[k+36>>2]=+g[p>>2];Vx(a|0,l|0,52)|0;i=e;return}function wt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0.0;h=+g[b>>2]*.1;i=+g[b+4>>2]*.1;j=+g[(c[64898]|0)+16>>2]*.01;k=d+8|0;l=+g[a+8>>2];m=+g[a+4>>2];n=+g[a>>2];o=+g[b+8>>2]*.1;b=0;while(1){p=o-j;q=l+p;if(p<0.0){r=+g[k>>2];if(q<r){s=4;break}}a=b+1|0;if((a|0)<50){l=q;m=i+m;n=h+n;o=p;b=a}else{s=6;break}}if((s|0)==4){o=(r-l)/p;g[e>>2]=+g[d>>2]-(n+h*o);g[e+4>>2]=+g[d+4>>2]-(m+i*o);g[e+8>>2]=+g[k>>2]-(l+p*o);o=+dn(e);t=1;u=400.0-(400.0-(o>32.0?416.0:o*13.0));g[f>>2]=u;return t|0}else if((s|0)==6){g[e>>2]=0.0;g[e+4>>2]=0.0;g[e+8>>2]=0.0;t=0;u=400.0;g[f>>2]=u;return t|0}return 0}function xt(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0.0,E=0,F=0.0,G=0,H=0,I=0,J=0;e=i;i=i+128|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+64|0;m=e+72|0;n=m;Zx(n|0,0,52)|0;o=d+24|0;p=b|0;q=f|0;g[q>>2]=+g[o>>2]- +g[p>>2];r=d+28|0;s=b+4|0;t=f+4|0;g[t>>2]=+g[r>>2]- +g[s>>2];u=d+32|0;g[f+8>>2]=+g[u>>2]- +g[b+8>>2];qt(b,q,1,m);f=k|0;g[f>>2]=+g[o>>2]- +g[p>>2];d=k+4|0;g[d>>2]=+g[r>>2]- +g[s>>2];s=k+8|0;g[s>>2]=0.0;k=+dn(f)>16.0;v=+g[o>>2];if(k){g[j>>2]=v+ +g[f>>2]*16.0;g[j+4>>2]=+g[r>>2]+ +g[d>>2]*16.0;g[j+8>>2]=+g[u>>2]+ +g[s>>2]*16.0}else{g[j>>2]=v;g[j+4>>2]=+g[r>>2];g[j+8>>2]=+g[u>>2]}u=h|0;if((wt(p,b+12|0,j|0,u,l)|0)==0){g[u>>2]=+g[q>>2];q=h+4|0;g[q>>2]=+g[t>>2];t=h+8|0;g[t>>2]=0.0;g[l>>2]=400.0;w=400.0;x=q;y=t;z=b+40|0;A=c[z>>2]|0;Ju(A,u,w);B=+g[u>>2];C=m+28|0;g[C>>2]=B;D=+g[x>>2];E=m+32|0;g[E>>2]=D;F=+g[y>>2];G=m+36|0;g[G>>2]=F;H=a;Vx(H|0,n|0,52)|0;I=52;J=0;i=e;return}else{w=+g[l>>2];x=h+4|0;y=h+8|0;z=b+40|0;A=c[z>>2]|0;Ju(A,u,w);B=+g[u>>2];C=m+28|0;g[C>>2]=B;D=+g[x>>2];E=m+32|0;g[E>>2]=D;F=+g[y>>2];G=m+36|0;g[G>>2]=F;H=a;Vx(H|0,n|0,52)|0;I=52;J=0;i=e;return}}function yt(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0;e=i;i=i+128|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+64|0;m=e+80|0;n=e+112|0;Zx(m|0,0,28)|0;Zx(n|0,0,12)|0;o=l|0;Ip(d,o);p=d+12|0;q=f|0;g[q>>2]=+g[o>>2]- +g[p>>2];r=l+4|0;s=d+16|0;t=f+4|0;g[t>>2]=+g[r>>2]- +g[s>>2];u=f+8|0;g[u>>2]=0.0;+dn(q);v=+g[p>>2];w=+g[s>>2];f=d+20|0;x=+g[f>>2];y=x+1.0;g[o>>2]=v+ +g[q>>2]*80.0;g[r>>2]=w+ +g[t>>2]*80.0;z=l+8|0;g[z>>2]=x+ +g[u>>2]*80.0;l=k|0;A=k+4|0;B=k+8|0;k=b+92|0;C=0;while(1){if((C|0)>=80){D=5;break}E=C+10|0;x=+(E|0);g[l>>2]=v+x*+g[q>>2];g[A>>2]=w+x*+g[t>>2];g[B>>2]=y+x*+g[u>>2]+1.0;F=gr(l)|0;if((F|0)==(c[k>>2]|0)){C=E}else{D=4;break}}if((D|0)==4){y=+g[p>>2];w=+(C|0);g[o>>2]=y+w*+g[q>>2];v=+g[s>>2];g[r>>2]=v+w*+g[t>>2];g[z>>2]=+g[f>>2]+w*+g[u>>2];G=y;H=v}else if((D|0)==5){G=+g[p>>2];H=+g[s>>2]}s=b|0;p=h|0;g[p>>2]=+g[s>>2]-G;D=b+4|0;f=h+4|0;g[f>>2]=+g[D>>2]-H;z=h+8|0;g[z>>2]=0.0;H=+dn(p);h=j|0;g[h>>2]=+g[s>>2]- +g[o>>2];C=j+4|0;g[C>>2]=+g[D>>2]- +g[r>>2];k=j+8|0;g[k>>2]=0.0;G=+dn(h);if(+g[p>>2]*+g[h>>2]+ +g[f>>2]*+g[C>>2]+ +g[z>>2]*+g[k>>2]<-.8|G<5.0){g[q>>2]=+g[d+24>>2]- +g[s>>2];g[t>>2]=+g[d+28>>2]- +g[D>>2];g[u>>2]=0.0;+dn(q);do{if(H<24.0){d=b+40|0;yu(c[d>>2]|0);I=d}else{d=b+40|0;if(!(H<32.0)){I=d;break}zu(c[d>>2]|0);I=d}}while(0);Ju(c[I>>2]|0,q,600.0);c[b+100>>2]=c[b+76>>2]}else{g[q>>2]=+g[o>>2]- +g[s>>2];g[t>>2]=+g[r>>2]- +g[D>>2];g[u>>2]=0.0;+dn(q);Ju(c[b+40>>2]|0,q,400.0-(400.0-(G>80.0?400.0:G*5.0)))}G=+g[q>>2];H=+g[t>>2];v=+g[u>>2];u=a;c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];c[u+8>>2]=c[m+8>>2];c[u+12>>2]=c[m+12>>2];c[u+16>>2]=c[m+16>>2];c[u+20>>2]=c[m+20>>2];c[u+24>>2]=c[m+24>>2];g[a+28>>2]=G;g[a+32>>2]=H;g[a+36>>2]=v;m=a+40|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];i=e;return}function zt(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0;e=i;i=i+80|0;f=e|0;h=e+16|0;j=e+32|0;k=e+64|0;Zx(j|0,0,28)|0;Zx(k|0,0,12)|0;if((c[b+100>>2]|0)==0){l=a;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];c[l+16>>2]=c[j+16>>2];c[l+20>>2]=c[j+20>>2];c[l+24>>2]=c[j+24>>2];g[a+28>>2]=0.0;g[a+32>>2]=0.0;g[a+36>>2]=0.0;l=a+40|0;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];m=28;n=0;o=12;p=0;i=e;return}l=d+24|0;q=f|0;g[q>>2]=+g[l>>2]- +g[b>>2];r=d+28|0;s=f+4|0;g[s>>2]=+g[r>>2]- +g[b+4>>2];t=f+8|0;g[t>>2]=0.0;u=+dn(q);f=h|0;g[f>>2]=+g[l>>2]- +g[d+12>>2];l=h+4|0;g[l>>2]=+g[r>>2]- +g[d+16>>2];d=h+8|0;g[d>>2]=0.0;+dn(f);if(+g[q>>2]*+g[f>>2]+ +g[s>>2]*+g[l>>2]+ +g[t>>2]*+g[d>>2]<-.5&u<24.0){d=a;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];c[d+16>>2]=c[j+16>>2];c[d+20>>2]=c[j+20>>2];c[d+24>>2]=c[j+24>>2];g[a+28>>2]=0.0;g[a+32>>2]=0.0;g[a+36>>2]=0.0;d=a+40|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];m=28;n=0;o=12;p=0;i=e;return}else{Ju(c[b+40>>2]|0,q,800.0);u=+g[q>>2];v=+g[s>>2];w=+g[t>>2];t=a;c[t>>2]=c[j>>2];c[t+4>>2]=c[j+4>>2];c[t+8>>2]=c[j+8>>2];c[t+12>>2]=c[j+12>>2];c[t+16>>2]=c[j+16>>2];c[t+20>>2]=c[j+20>>2];c[t+24>>2]=c[j+24>>2];g[a+28>>2]=u;g[a+32>>2]=v;g[a+36>>2]=w;j=a+40|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];m=28;n=0;o=12;p=0;i=e;return}}function At(a,b,d){a=a|0;b=b|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,r=0.0;e=i;i=i+72|0;f=e|0;h=e+16|0;j=h;Zx(j|0,0,52)|0;k=b+96|0;l=c[k>>2]|0;if((l&32|0)!=0){Vx(a|0,j|0,52)|0;m=52;n=0;i=e;return}o=f|0;g[o>>2]=+g[d+12>>2]- +g[b>>2];p=f+4|0;g[p>>2]=+g[d+16>>2]- +g[b+4>>2];q=f+8|0;g[q>>2]=(l&4|0)==0?0.0:+g[d+20>>2]- +g[b+8>>2];r=+dn(o);qt(b,o,1,h);d=c[b+40>>2]|0;if(r<30.0){Ju(d,o,200.0)}else{Ju(d,o,400.0)}if((c[k>>2]&4|0)!=0){k=h+20|0;c[k>>2]=c[k>>2]|2}g[h+28>>2]=+g[o>>2];g[h+32>>2]=+g[p>>2];g[h+36>>2]=+g[q>>2];Vx(a|0,j|0,52)|0;m=52;n=0;i=e;return}function Bt(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0,E=0.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.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0;e=i;i=i+200|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+64|0;m=e+80|0;n=e+96|0;o=e+112|0;p=e+128|0;q=e+144|0;r=q;Zx(r|0,0,52)|0;s=b|0;a:do{if((dt(s,c[b+36>>2]|0,d)|0)==0){t=+g[s>>2];u=+g[d+24>>2]-t;v=l|0;g[v>>2]=u;w=b+4|0;x=+g[w>>2];y=+g[d+28>>2]-x;z=l+4|0;g[z>>2]=y;A=b+8|0;B=+g[A>>2];C=+g[d+32>>2]-B;D=l+8|0;g[D>>2]=C;E=+T(C*C+(u*u+y*y));if(E<64.0){y=360.0-(360.0-(E>60.0?360.0:E*6.0));F=b+96|0;if((c[F>>2]&4|0)==0){if((nt(b,v,50.0)|0)==0&y>5.0){G=12}}else{if(y>5.0){G=12}}if((G|0)==12){Ju(c[b+40>>2]|0,v,y)}g[q+28>>2]=+g[v>>2];g[q+32>>2]=+g[z>>2];g[q+36>>2]=+g[D>>2];if((c[F>>2]&4|0)!=0){F=q+20|0;c[F>>2]=c[F>>2]|2}g[b+112>>2]=0.0;Vx(a|0,r|0,52)|0;H=52;I=0;i=e;return}F=m|0;g[F>>2]=+g[d+12>>2]-t;J=m+4|0;g[J>>2]=+g[d+16>>2]-x;K=d+20|0;L=m+8|0;M=b+96|0;g[L>>2]=(c[M>>2]&4|0)==0?0.0:+g[K>>2]-B;B=+dn(F);Zx(k|0,0,12)|0;N=c[d+4>>2]&65535;O=j|0;Mo(N,k|0,f|0,h|0,O);do{if((kp(N,O)|0)==0){ue[c[636260]&31](1,47128,(P=i,i=i+8|0,c[P>>2]=N,P)|0);i=P;}else{if(+g[j+8>>2]+ +g[h+8>>2]>=+g[K>>2]){break}P=p|0;lt(d,P);Q=n|0;g[Q>>2]=+g[P>>2]- +g[s>>2];P=n+4|0;g[P>>2]=+g[p+4>>2]- +g[w>>2];R=n+8|0;g[R>>2]=(c[M>>2]&4|0)==0?0.0:+g[p+8>>2]- +g[A>>2];x=+dn(Q);do{if(B<20.0|x<B){S=x;U=+g[R>>2];V=+g[P>>2];W=+g[Q>>2]}else{t=+g[F>>2];y=+g[Q>>2];E=+g[J>>2];u=+g[P>>2];C=+g[L>>2];X=+g[R>>2];if(t*y+E*u+C*X<0.0){S=x;U=X;V=u;W=y;break}S=B;U=C;V=E;W=t}}while(0);g[v>>2]=W;g[z>>2]=V;g[D>>2]=U;qt(b,v,0,q);x=400.0-(400.0-(S>60.0?360.0:S*6.0));do{if((c[M>>2]&4|0)==0){if((nt(b,v,50.0)|0)!=0){break}Ju(c[b+40>>2]|0,v,x)}}while(0);g[q+28>>2]=+g[v>>2];g[q+32>>2]=+g[z>>2];g[q+36>>2]=+g[D>>2];if((c[M>>2]&4|0)==0){break a}R=q+20|0;c[R>>2]=c[R>>2]|2;break a}}while(0);g[v>>2]=+g[F>>2];g[z>>2]=+g[J>>2];g[D>>2]=+g[L>>2];qt(b,v,0,q);x=360.0-(360.0-(B>60.0?360.0:B*6.0));do{if((c[M>>2]&4|0)==0){if(!((nt(b,v,50.0)|0)==0&x>5.0)){break}Ju(c[b+40>>2]|0,v,x)}}while(0);g[q+28>>2]=+g[v>>2];g[q+32>>2]=+g[z>>2];g[q+36>>2]=+g[D>>2];L=q+20|0;J=c[L>>2]|0;if((c[M>>2]&4|0)==0){Y=J}else{F=J|2;c[L>>2]=F;Y=F}c[q+4>>2]=1;c[q+20>>2]=Y|4;Vx(a|0,r|0,52)|0;H=52;I=0;i=e;return}else{F=~~(+g[b+8>>2]- +g[d+32>>2]);if(!(+(((F|0)>-1?F:-F|0)|0)<+g[(c[64876]|0)+16>>2])){F=p|0;lt(d,F);L=o|0;g[L>>2]=+g[F>>2]- +g[s>>2];F=o+4|0;g[F>>2]=+g[p+4>>2]- +g[b+4>>2];J=o+8|0;g[J>>2]=0.0;x=+dn(L);if(!(x>10.0)){break}Ju(c[b+40>>2]|0,L,400.0-(400.0-(x>100.0?400.0:x*4.0)));g[q+28>>2]=+g[L>>2];g[q+32>>2]=+g[F>>2];g[q+36>>2]=+g[J>>2];break}J=o|0;g[J>>2]=+g[d+24>>2]- +g[s>>2];F=o+4|0;g[F>>2]=+g[d+28>>2]- +g[b+4>>2];L=o+8|0;g[L>>2]=0.0;+dn(J);if((nt(b,J,100.0)|0)==0){Ju(c[b+40>>2]|0,J,400.0)}g[q+28>>2]=+g[J>>2];g[q+32>>2]=+g[F>>2];g[q+36>>2]=+g[L>>2]}}while(0);Vx(a|0,r|0,52)|0;H=52;I=0;i=e;return}function Ct(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;e=i;i=i+104|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;Zx(k|0,0,52)|0;l=f|0;lt(d,l);m=+g[b>>2];n=h|0;g[n>>2]=+g[l>>2]-m;o=+g[b+4>>2];g[h+4>>2]=+g[f+4>>2]-o;p=+g[b+8>>2];q=+g[f+8>>2]-p;g[h+8>>2]=q;h=j|0;g[h>>2]=+g[d+24>>2]-m;g[j+4>>2]=+g[d+28>>2]-o;o=+g[d+32>>2]-p;g[j+8>>2]=o;if(+S(+q)<+S(+o)){+dn(n);Ju(c[b+40>>2]|0,n,300.0);r=a;Vx(r|0,k|0,52)|0;s=52;t=0;i=e;return}else{+dn(h);Ju(c[b+40>>2]|0,h,300.0);r=a;Vx(r|0,k|0,52)|0;s=52;t=0;i=e;return}}function Dt(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.0,q=0.0,r=0.0,s=0,t=0.0;f=i;i=i+48|0;h=f|0;j=f+16|0;k=f+32|0;Zx(k|0,0,12)|0;l=a+4|0;m=c[l>>2]&65535;if((kp(m,e)|0)==0){ue[c[636260]&31](1,60256,(n=i,i=i+8|0,c[n>>2]=m,n)|0);i=n;g[b>>2]=0.0;g[b+4>>2]=0.0;g[b+8>>2]=0.0;g[d>>2]=0.0;g[d+4>>2]=0.0;g[d+8>>2]=0.0;i=f;return}n=h|0;o=j|0;Mo(m,k|0,n,o,0);p=(+g[n>>2]+ +g[o>>2])*.5;q=(+g[h+4>>2]+ +g[j+4>>2])*.5;r=(+g[h+8>>2]+ +g[j+8>>2])*.5;g[b>>2]=p;j=b+4|0;g[j>>2]=q;h=b+8|0;g[h>>2]=r;g[d>>2]=p;o=d+4|0;g[o>>2]=q;n=d+8|0;g[n>>2]=r;k=c[l>>2]>>16;l=c[a+8>>2]|0;a=l>>16;m=l&65535;s=m>>>0>32767>>>0?l|-65536:m;if((k&1|0)!=0){g[b>>2]=+(a|0);g[d>>2]=+(s|0);g[e>>2]=p+ +g[e>>2];g[e+4>>2]=q;g[e+8>>2]=r;i=f;return}t=+(a|0);if((k&2|0)==0){g[h>>2]=t;g[n>>2]=+(s|0);g[e>>2]=p;g[e+4>>2]=q;n=e+8|0;g[n>>2]=r+ +g[n>>2];i=f;return}else{g[j>>2]=t;g[o>>2]=+(s|0);g[e>>2]=p;s=e+4|0;g[s>>2]=q+ +g[s>>2];g[e+8>>2]=r;i=f;return}}function Et(a,b,d){a=a|0;b=b|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,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0.0,A=0.0,B=0,C=0,D=0.0,E=0.0,F=0,G=0.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.0,U=0.0,V=0.0,W=0.0,X=0.0;e=i;i=i+184|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+64|0;m=e+80|0;n=e+96|0;o=e+112|0;p=e+128|0;q=p;Zx(q|0,0,52)|0;r=m|0;s=n|0;t=o|0;Dt(d,r,s,t);u=b|0;do{if((dt(u,c[b+36>>2]|0,d)|0)==0){v=+g[u>>2];w=+g[d+24>>2]-v;x=f|0;g[x>>2]=w;y=b+4|0;z=+g[y>>2];A=+g[d+28>>2]-z;B=f+4|0;g[B>>2]=A;C=b+8|0;D=+g[C>>2];E=+g[d+32>>2]-D;F=f+8|0;g[F>>2]=E;G=+T(E*E+(w*w+A*A));if(G<64.0){A=360.0-(360.0-(G>60.0?360.0:G*6.0));H=b+96|0;if((c[H>>2]&4|0)==0){if((nt(b,x,50.0)|0)==0&A>5.0){I=12}}else{if(A>5.0){I=12}}if((I|0)==12){Ju(c[b+40>>2]|0,x,A)}g[p+28>>2]=+g[x>>2];g[p+32>>2]=+g[B>>2];g[p+36>>2]=+g[F>>2];if((c[H>>2]&4|0)!=0){H=p+20|0;c[H>>2]=c[H>>2]|2}g[b+112>>2]=0.0;Vx(a|0,q|0,52)|0;J=52;K=0;i=e;return}H=h|0;g[H>>2]=+g[d+12>>2]-v;L=h+4|0;g[L>>2]=+g[d+16>>2]-z;M=h+8|0;N=b+96|0;g[M>>2]=(c[N>>2]&4|0)==0?0.0:+g[d+20>>2]-D;D=+dn(H);z=+g[t>>2]- +g[r>>2];g[x>>2]=z;v=+g[o+4>>2]- +g[m+4>>2];g[B>>2]=v;A=+g[o+8>>2]- +g[m+8>>2];g[F>>2]=A;if(+T(A*A+(z*z+v*v))>16.0){g[x>>2]=+g[H>>2];g[B>>2]=+g[L>>2];g[F>>2]=+g[M>>2];qt(b,x,0,p);v=360.0-(360.0-(D>60.0?360.0:D*6.0));do{if((c[N>>2]&4|0)==0){if(!((nt(b,x,50.0)|0)==0&v>5.0)){break}Ju(c[b+40>>2]|0,x,v)}}while(0);g[p+28>>2]=+g[x>>2];g[p+32>>2]=+g[B>>2];g[p+36>>2]=+g[F>>2];O=p+20|0;P=c[O>>2]|0;if((c[N>>2]&4|0)==0){Q=P}else{R=P|2;c[O>>2]=R;Q=R}c[p+4>>2]=2;c[p+20>>2]=Q|4;Vx(a|0,q|0,52)|0;J=52;K=0;i=e;return}R=l|0;lt(d,R);O=j|0;g[O>>2]=+g[R>>2]- +g[u>>2];R=j+4|0;g[R>>2]=+g[l+4>>2]- +g[y>>2];P=j+8|0;g[P>>2]=(c[N>>2]&4|0)==0?0.0:+g[l+8>>2]- +g[C>>2];v=+dn(O);do{if(D<20.0|v<D){S=v;U=+g[P>>2];V=+g[R>>2];W=+g[O>>2]}else{z=+g[H>>2];A=+g[O>>2];G=+g[L>>2];w=+g[R>>2];E=+g[M>>2];X=+g[P>>2];if(z*A+G*w+E*X<0.0){S=v;U=X;V=w;W=A;break}S=D;U=E;V=G;W=z}}while(0);g[x>>2]=W;g[B>>2]=V;g[F>>2]=U;qt(b,x,0,p);D=400.0-(400.0-(S>60.0?360.0:S*6.0));do{if((c[N>>2]&4|0)==0){if((nt(b,x,50.0)|0)!=0){break}Ju(c[b+40>>2]|0,x,D)}}while(0);g[p+28>>2]=+g[x>>2];g[p+32>>2]=+g[B>>2];g[p+36>>2]=+g[F>>2];if((c[N>>2]&4|0)==0){break}P=p+20|0;c[P>>2]=c[P>>2]|2}else{D=+g[t>>2]- +g[s>>2];g[f>>2]=D;v=+g[o+4>>2]- +g[n+4>>2];g[f+4>>2]=v;z=+g[o+8>>2]- +g[n+8>>2];g[f+8>>2]=z;if(!(+T(z*z+(D*D+v*v))<24.0)){P=l|0;lt(d,P);M=k|0;g[M>>2]=+g[P>>2]- +g[u>>2];P=k+4|0;g[P>>2]=+g[l+4>>2]- +g[b+4>>2];R=k+8|0;g[R>>2]=0.0;v=+dn(M);if(!(v>10.0)){break}Ju(c[b+40>>2]|0,M,400.0-(400.0-(v>100.0?400.0:v*4.0)));g[p+28>>2]=+g[M>>2];g[p+32>>2]=+g[P>>2];g[p+36>>2]=+g[R>>2];break}R=k|0;g[R>>2]=+g[d+24>>2]- +g[u>>2];P=k+4|0;g[P>>2]=+g[d+28>>2]- +g[b+4>>2];M=k+8|0;g[M>>2]=0.0;+dn(R);if((nt(b,R,100.0)|0)==0){Ju(c[b+40>>2]|0,R,400.0)}g[p+28>>2]=+g[R>>2];g[p+32>>2]=+g[P>>2];g[p+36>>2]=+g[M>>2]}}while(0);Vx(a|0,q|0,52)|0;J=52;K=0;i=e;return}function Ft(a,b,d){a=a|0;b=b|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.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0;e=i;i=i+136|0;f=e|0;h=e+32|0;j=e+48|0;k=e+64|0;l=e+80|0;m=e+96|0;n=e+120|0;Zx(m|0,0,20)|0;Zx(n|0,0,12)|0;o=h|0;p=f|0;Dt(d,e+16|0,o,p);q=+g[p>>2]- +g[o>>2];o=j|0;g[o>>2]=q;r=+g[f+4>>2]- +g[h+4>>2];p=j+4|0;g[p>>2]=r;s=+g[f+8>>2]- +g[h+8>>2];h=j+8|0;g[h>>2]=s;do{if(+T(s*s+(q*q+r*r))<16.0){j=k|0;g[j>>2]=+g[d+24>>2]- +g[b>>2];g[k+4>>2]=+g[d+28>>2]- +g[b+4>>2];f=b+96|0;g[k+8>>2]=(c[f>>2]&4|0)==0?0.0:+g[d+32>>2]- +g[b+8>>2];t=+dn(j);u=360.0-(360.0-(t>60.0?360.0:t*6.0));if(u>5.0){Ju(c[b+40>>2]|0,o,u);v=+g[o>>2];w=+g[p>>2];x=+g[h>>2]}else{v=q;w=r;x=s}y=x;z=(c[f>>2]|0)>>>1&2;A=v;B=w}else{f=l|0;lt(d,f);j=k|0;g[j>>2]=+g[f>>2]- +g[b>>2];f=k+4|0;g[f>>2]=+g[l+4>>2]- +g[b+4>>2];C=k+8|0;g[C>>2]=(c[b+96>>2]&4|0)==0?0.0:+g[l+8>>2]- +g[b+8>>2];u=+dn(j);if(!(u>5.0)){y=0.0;z=0;A=0.0;B=0.0;break}Ju(c[b+40>>2]|0,j,400.0-(400.0-(u>100.0?400.0:u*4.0)));y=+g[C>>2];z=0;A=+g[j>>2];B=+g[f>>2]}}while(0);b=a;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];c[b+16>>2]=c[m+16>>2];c[a+20>>2]=z;c[a+24>>2]=0;g[a+28>>2]=A;g[a+32>>2]=B;g[a+36>>2]=y;z=a+40|0;c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];c[z+8>>2]=c[n+8>>2];i=e;return}function Gt(a,b,d){a=a|0;b=b|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.0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0.0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0.0,Q=0.0,R=0.0,U=0;e=i;i=i+336|0;f=e|0;h=e+144|0;j=e+200|0;k=e+216|0;l=e+232|0;m=e+248|0;n=h;Zx(n|0,0,52)|0;o=b+96|0;p=c[o>>2]|0;q=+g[(c[164922]|0)+16>>2];if((p&256|0)!=0){if(q!=0.0){su(c[b+40>>2]|0,c[(c[466014]|0)+4>>2]|0);r=c[o>>2]|0}else{r=p}c[o>>2]=r&-129;Vx(a|0,n|0,52)|0;s=52;t=0;i=e;return}if((~~q|0)==0){c[h+24>>2]=~~+g[(c[15492]|0)+16>>2];c[h+20>>2]=16}do{if((p&128|0)==0){g[b+104>>2]=+yp();r=b|0;q=+g[r>>2];u=j|0;g[u>>2]=+g[d+12>>2]-q;v=b+4|0;w=+g[v>>2];x=j+4|0;g[x>>2]=+g[d+16>>2]-w;y=b+8|0;z=+g[y>>2];A=j+8|0;g[A>>2]=(c[o>>2]&4|0)==0?0.0:+g[d+20>>2]-z;B=b+24|0;C=q+ +g[B>>2];D=l|0;g[D>>2]=C;E=b+28|0;q=w+ +g[E>>2];F=l+4|0;g[F>>2]=q;G=b+32|0;w=z+ +g[G>>2];H=l+8|0;g[H>>2]=w;I=d+24|0;J=k|0;g[J>>2]=+g[I>>2]-C;K=d+28|0;g[k+4>>2]=+g[K>>2]-q;L=d+32|0;g[k+8>>2]=+g[L>>2]-w;w=+dn(u);M=h+40|0;gn(J,M);J=h+20|0;c[J>>2]=c[J>>2]|1;do{if(w<5.0){q=+g[M>>2];C=+g[b+52>>2];z=q-C;do{if(q>C){if(!(z>180.0)){N=z;break}N=z+-360.0}else{if(!(z<-180.0)){N=z;break}N=z+360.0}}while(0);if(!(+S(+N)<2.0)){O=49;break}z=+g[h+44>>2];C=+g[b+56>>2];q=z-C;do{if(z>C){if(!(q>180.0)){P=q;break}P=q+-360.0}else{if(!(q<-180.0)){P=q;break}P=q+360.0}}while(0);if(!(+S(+P)<2.0)){O=49;break}g[D>>2]=+g[r>>2]+ +g[B>>2];g[F>>2]=+g[v>>2]+ +g[E>>2];g[H>>2]=+g[y>>2]+ +g[G>>2];Jo(m,D,0,0,I,c[b+36>>2]|0,1);q=+g[m+16>>2];C=+g[m+20>>2];z=+g[I>>2]- +g[m+12>>2];g[u>>2]=z;Q=+g[K>>2]-q;g[x>>2]=Q;q=+g[L>>2]-C;g[A>>2]=q;if(+T(q*q+(z*z+Q*Q))>16.0){c[h>>2]=1;Vx(a|0,n|0,52)|0;s=52;t=0;i=e;return}J=c[b+40>>2]|0;if(+g[(c[164922]|0)+16>>2]!=0.0){su(J,c[(c[466012]|0)+4>>2]|0)}else{uu(J)}c[o>>2]=c[o>>2]|128;g[b+108>>2]=999999.0}else{O=49}}while(0);if((O|0)==49){if(w<70.0){R=300.0-(300.0-w*4.0)}else{R=400.0}qt(b,u,1,h);Ju(c[b+40>>2]|0,u,R);g[h+28>>2]=+g[u>>2];g[h+32>>2]=+g[x>>2];g[h+36>>2]=+g[A>>2]}L=gr(r)|0;if((L|0)==0){break}if((L|0)==(c[b+92>>2]|0)){break}g[b+112>>2]=0.0}else{a:do{if((p&64|0)==0){L=op(0)|0;if((L|0)==0){U=0;break}K=f+128|0;I=L;while(1){L=ip(I)|0;if((L|0)==(~~+g[(c[375998]|0)+16>>2]|0)){gp(I,f);if((c[K>>2]|0)==(~~+g[(c[15492]|0)+16>>2]|0)){U=1;break a}}L=op(I)|0;if((L|0)==0){U=0;break}else{I=L}}}else{U=2}}while(0);w=+g[d+24>>2]- +g[b>>2];g[j>>2]=w;Q=+g[d+28>>2]- +g[b+4>>2];g[j+4>>2]=Q;g[j+8>>2]=0.0;z=+T(w*w+Q*Q+0.0);r=(U|0)!=0;b:do{if(r&z<48.0){if(!(+g[b+108>>2]-z<1.0)){break}if(+g[(c[164922]|0)+16>>2]!=0.0){su(c[b+40>>2]|0,c[(c[466014]|0)+4>>2]|0)}c[o>>2]=c[o>>2]&-385|256;g[b+112>>2]=0.0;Vx(a|0,n|0,52)|0;s=52;t=0;i=e;return}else{do{if(r){if((U|0)==2){if(z>+g[b+108>>2]+-2.0){break}}g[b+104>>2]=+yp();break b}}while(0);Q=+g[b+104>>2];if(!(Q<+yp()+-.4)){break}if(+g[(c[164922]|0)+16>>2]!=0.0){su(c[b+40>>2]|0,c[(c[466014]|0)+4>>2]|0)}c[o>>2]=c[o>>2]&-385|256;g[b+112>>2]=0.0;Vx(a|0,n|0,52)|0;s=52;t=0;i=e;return}}while(0);if((~~+g[(c[164922]|0)+16>>2]|0)==0){uu(c[b+40>>2]|0)}g[b+108>>2]=z}}while(0);Vx(a|0,n|0,52)|0;s=52;t=0;i=e;return}function Ht(a,b,d){a=a|0;b=b|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.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0;e=i;i=i+72|0;f=e|0;h=e+16|0;j=h;Zx(j|0,0,52)|0;k=b|0;l=f|0;g[l>>2]=+g[d+12>>2]- +g[k>>2];m=b+4|0;n=f+4|0;g[n>>2]=+g[d+16>>2]- +g[m>>2];o=f+8|0;g[o>>2]=0.0;p=+dn(l);f=h+40|0;gn(l,f);g[f>>2]=90.0;do{if(p<5.0){q=+g[b+52>>2];r=90.0-q;do{if(q<90.0){if(!(r>180.0)){s=r;break}s=r+-360.0}else{if(!(r<-180.0)){s=r;break}s=r+360.0}}while(0);if(!(+S(+s)<5.0)){t=15;break}r=+g[h+44>>2];q=+g[b+56>>2];u=r-q;do{if(r>q){if(!(u>180.0)){v=u;break}v=u+-360.0}else{if(!(u<-180.0)){v=u;break}v=u+360.0}}while(0);if(!(+S(+v)<5.0)){t=15;break}g[l>>2]=+g[d+24>>2]- +g[k>>2];g[n>>2]=+g[d+28>>2]- +g[m>>2];g[o>>2]=0.0;+dn(l);w=b+40|0;yu(c[w>>2]|0);uu(c[w>>2]|0);Ju(c[w>>2]|0,l,800.0);c[b+100>>2]=c[b+76>>2]}else{t=15}}while(0);if((t|0)==15){Ju(c[b+40>>2]|0,l,400.0-(400.0-(p>80.0?400.0:p*5.0)))}gn(l,f);g[f>>2]=90.0;t=b+40|0;Ku(c[t>>2]|0,f);f=h+20|0;c[f>>2]=c[f>>2]|8;tu(c[t>>2]|0,~~+g[(c[15490]|0)+16>>2]);c[h+24>>2]=~~+g[(c[15490]|0)+16>>2];c[f>>2]=c[f>>2]|16;g[h+28>>2]=+g[l>>2];g[h+32>>2]=+g[n>>2];g[h+36>>2]=+g[o>>2];Vx(a|0,j|0,52)|0;i=e;return}function It(a,b,d){a=a|0;b=b|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.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0;e=i;i=i+72|0;f=e|0;h=e+16|0;j=h;Zx(j|0,0,52)|0;k=b|0;l=f|0;g[l>>2]=+g[d+12>>2]- +g[k>>2];m=b+4|0;n=f+4|0;g[n>>2]=+g[d+16>>2]- +g[m>>2];o=f+8|0;g[o>>2]=0.0;p=+dn(l);f=h+40|0;do{if(p<5.0){q=+g[b+52>>2];r=0.0-q;do{if(q<0.0){if(!(r>180.0)){s=r;break}s=r+-360.0}else{if(!(r<-180.0)){s=r;break}s=r+360.0}}while(0);if(!(+S(+s)<5.0)){t=15;break}r=+g[b+56>>2];q=0.0-r;do{if(r<0.0){if(!(q>180.0)){u=q;break}u=q+-360.0}else{if(!(q<-180.0)){u=q;break}u=q+360.0}}while(0);if(!(+S(+u)<5.0)){t=15;break}g[l>>2]=+g[d+24>>2]- +g[k>>2];g[n>>2]=+g[d+28>>2]- +g[m>>2];g[o>>2]=0.0;+dn(l);v=b+40|0;yu(c[v>>2]|0);uu(c[v>>2]|0);Ju(c[v>>2]|0,l,800.0);c[b+100>>2]=c[b+76>>2]}else{t=15}}while(0);if((t|0)==15){Ju(c[b+40>>2]|0,l,400.0-(400.0-(p>80.0?400.0:p*5.0)))}gn(l,f);g[f>>2]=90.0;t=b+40|0;Ku(c[t>>2]|0,f);f=h+20|0;c[f>>2]=c[f>>2]|8;tu(c[t>>2]|0,~~+g[(c[15494]|0)+16>>2]);c[h+24>>2]=~~+g[(c[15494]|0)+16>>2];c[f>>2]=c[f>>2]|16;g[h+28>>2]=+g[l>>2];g[h+32>>2]=+g[n>>2];g[h+36>>2]=+g[o>>2];Vx(a|0,j|0,52)|0;i=e;return}function Jt(a,b,d){a=a|0;b=b|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,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0;e=i;i=i+72|0;f=e|0;h=e+16|0;j=e+24|0;k=e+56|0;Zx(j|0,0,28)|0;Zx(k|0,0,12)|0;if((c[b+100>>2]|0)==0){l=a;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];c[l+16>>2]=c[j+16>>2];c[l+20>>2]=c[j+20>>2];c[l+24>>2]=c[j+24>>2];g[a+28>>2]=0.0;g[a+32>>2]=0.0;g[a+36>>2]=0.0;l=a+40|0;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];m=28;n=0;o=12;p=0;i=e;return}l=b|0;q=d+24|0;r=f|0;if((wt(l,b+12|0,q,r,h)|0)==0){g[r>>2]=+g[q>>2]- +g[l>>2];l=f+4|0;g[l>>2]=+g[d+28>>2]- +g[b+4>>2];d=f+8|0;g[d>>2]=0.0;+dn(r);g[h>>2]=400.0;s=400.0;t=l;u=d}else{s=+g[h>>2];t=f+4|0;u=f+8|0}Ju(c[b+40>>2]|0,r,s);s=+g[r>>2];v=+g[t>>2];w=+g[u>>2];u=a;c[u>>2]=c[j>>2];c[u+4>>2]=c[j+4>>2];c[u+8>>2]=c[j+8>>2];c[u+12>>2]=c[j+12>>2];c[u+16>>2]=c[j+16>>2];c[u+20>>2]=c[j+20>>2];c[u+24>>2]=c[j+24>>2];g[a+28>>2]=s;g[a+32>>2]=v;g[a+36>>2]=w;j=a+40|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];m=28;n=0;o=12;p=0;i=e;return}function Kt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0;e=i;i=i+80|0;f=e|0;h=e+8|0;j=e+24|0;k=j;Zx(k|0,0,52)|0;l=b|0;m=d+24|0;n=h|0;if((wt(l,b+12|0,m,n,f)|0)==0){g[n>>2]=+g[m>>2]- +g[l>>2];l=h+4|0;g[l>>2]=+g[d+28>>2]- +g[b+4>>2];d=h+8|0;g[d>>2]=0.0;+dn(n);g[f>>2]=400.0;o=400.0;p=l;q=d}else{o=+g[f>>2];p=h+4|0;q=h+8|0}qt(b,n,1,j);Ju(c[b+40>>2]|0,n,o);g[j+28>>2]=+g[n>>2];g[j+32>>2]=+g[p>>2];g[j+36>>2]=+g[q>>2];Vx(a|0,k|0,52)|0;i=e;return}function Lt(a,b,d){a=a|0;b=b|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.0,q=0.0;e=i;i=i+72|0;f=e|0;h=e+56|0;j=f;Zx(j|0,0,52)|0;k=b|0;l=h|0;g[l>>2]=+g[d>>2]- +g[k>>2];m=b+4|0;n=h+4|0;g[n>>2]=+g[d+4>>2]- +g[m>>2];o=b+96|0;if((c[o>>2]&4|0)==0){g[h+8>>2]=0.0;c[f+16>>2]=2}else{g[h+8>>2]=+g[d+8>>2]- +g[b+8>>2];c[f+16>>2]=8}p=+dn(l);q=400.0-(400.0-(p>100.0?400.0:p*4.0));qt(b,l,1,f);Ju(c[b+40>>2]|0,l,q<10.0?0.0:q);g[f+28>>2]=+g[l>>2];g[f+32>>2]=+g[n>>2];g[f+36>>2]=+g[h+8>>2];if((c[o>>2]&4|0)!=0){gn(l,f+40|0);l=f+20|0;c[l>>2]=c[l>>2]|2}c[b+76>>2]=0;c[b+68>>2]=0;c[b+72>>2]=c[d+12>>2];g[b+80>>2]=+g[k>>2];g[b+84>>2]=+g[m>>2];g[b+88>>2]=+g[b+8>>2];Vx(a|0,j|0,52)|0;i=e;return}
|
|
|
|
|
|
|
|
function zp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0;e=i;i=i+16|0;f=e|0;h=+g[b>>2];j=+g[a>>2]-h;k=b+4|0;l=+g[k>>2];m=+g[a+4>>2]-l;n=b+8|0;o=+g[n>>2];p=+g[a+8>>2]-o;a=f|0;g[a>>2]=+g[c>>2]-h;q=f+4|0;g[q>>2]=+g[c+4>>2]-l;r=f+8|0;g[r>>2]=+g[c+8>>2]-o;+dn(a);o=+g[a>>2];l=+g[q>>2];h=+g[r>>2];s=j*o+m*l+p*h;g[d>>2]=+g[b>>2]+o*s;g[d+4>>2]=+g[k>>2]+l*s;g[d+8>>2]=+g[n>>2]+h*s;i=e;return}function Ap(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+64|0;if((a|0)==0){d=0;i=b;return d|0}c[637705]=0;Pq();e=b|0;by(2550904,a|0)|0;lp();Wo()|0;xn(e,64,59032,(f=i,i=i+8|0,c[f>>2]=a,f)|0)|0;i=f;a=rp(e)|0;if((a|0)==0){ue[c[636260]&31](1,57216,(f=i,i=i+8|0,c[f>>2]=e,f)|0);i=f;ay(2550840,e|0,64)|0;Ep();cr();er();vq();$q();d=0;i=b;return d|0}else{c[637704]=0;d=a;i=b;return d|0}return 0}function Bp(){var a=0;c[637777]=~~+ev(55792,54824);c[637776]=~~+ev(53832,52712);c[154352]=cv(60536,36112)|0;a=c[637778]|0;if((a|0)!=0){nv(a)}c[637778]=mv((c[637776]|0)*148|0)|0;mp();c[637709]=0;return 0}function Cp(){var a=0,b=0;a=i;ar();Vo();Pq();dr();fr();pp();b=c[637778]|0;if((b|0)!=0){nv(b)}Zx(2550816,0,480)|0;ue[c[636260]&31](1,51760,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0);i=b;i=a;return}function Dp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;e=i;i=i+104|0;f=e|0;h=e+16|0;j=f|0;g[j>>2]=+g[a>>2];k=a+4|0;g[f+4>>2]=+g[k>>2];l=a+8|0;g[f+8>>2]=+g[l>>2]+-100.0;Jo(h,a,b,d,j,0,1);if((c[h+4>>2]|0)!=0){m=0;i=e;return m|0}n=+g[h+20>>2];o=+g[h+16>>2];g[a>>2]=+g[h+12>>2];g[k>>2]=o;g[l>>2]=n;m=1;i=e;return m|0}function Ep(){g[637824]=0.0;g[637825]=0.0;g[637826]=-1.0;g[637827]=+ev(51152,57864);g[637828]=+ev(47640,40848);g[637829]=+ev(36096,30760);g[637830]=+ev(26408,23008);g[637831]=+ev(19896,17752);g[637832]=+ev(60512,58992);g[637833]=+ev(57192,58992);g[637834]=+ev(55768,40848);g[637835]=+ev(54800,53824);g[637836]=+ev(52688,51752);g[637837]=+ev(50760,23008);g[637838]=+ev(5e4,49256);g[637839]=+ev(48424,47184);g[637840]=+ev(46168,45576);g[637841]=+ev(44736,44080);g[637842]=+ev(43424,42848);g[637843]=+ev(42264,41736);g[637844]=+ev(41296,40536);g[637845]=+ev(39880,39464);g[637846]=+ev(38960,17752);g[637847]=+ev(38464,38064);g[637848]=+ev(37680,40848);g[637849]=+ev(37352,36960);g[637850]=+ev(36528,35648);g[637851]=+ev(35040,34568);g[637852]=+ev(34168,36960);g[637853]=+ev(33576,35648);g[637854]=+ev(32872,35648);g[637855]=+ev(32368,31936);g[637856]=+ev(31600,36960);g[637857]=+ev(31208,36960);g[637858]=+ev(30464,38064);g[637859]=+ev(29952,36960);g[637860]=+ev(29656,35648);g[637861]=+ev(29360,28928);g[637862]=+ev(28608,28264);return}function Fp(a){a=a|0;var b=0,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;b=i;i=i+16|0;d=b|0;e=d|0;g[e>>2]=+g[a>>2];f=a+4|0;h=d+4|0;g[h>>2]=+g[f>>2];j=a+8|0;g[d+8>>2]=+g[j>>2];d=gr(e)|0;do{if((d|0)==0){g[e>>2]=+g[e>>2]+1.0;k=gr(e)|0;if((k|0)!=0){l=k;break}g[h>>2]=+g[h>>2]+1.0;k=gr(e)|0;if((k|0)!=0){l=k;break}g[e>>2]=+g[e>>2]+-2.0;k=gr(e)|0;if((k|0)!=0){l=k;break}g[h>>2]=+g[h>>2]+-2.0;k=gr(e)|0;if((k|0)==0){m=0}else{l=k;break}i=b;return m|0}else{l=d}}while(0);d=c[637759]|0;if((c[d+(l*28|0)+4>>2]&2|0)==0){m=0;i=b;return m|0}if((c[d+(l*28|0)+8>>2]&2|0)==0){m=0;i=b;return m|0}d=c[637757]|0;e=d+(l*48|0)+4|0;h=c[e>>2]|0;if((h|0)<=0){m=0;i=b;return m|0}k=d+(l*48|0)+8|0;l=0;d=h;a:while(1){h=c[(c[637755]|0)+((c[k>>2]|0)+l<<2)>>2]|0;n=(h|0)>-1?h:-h|0;o=c[637753]|0;do{if((c[o+(n*24|0)+4>>2]&2|0)==0){p=d}else{q=c[o+(n*24|0)>>2]^h>>>31;r=c[637747]|0;s=~~(+g[r+(q*20|0)>>2]*+g[a>>2]+ +g[r+(q*20|0)+4>>2]*+g[f>>2]+ +g[r+(q*20|0)+8>>2]*+g[j>>2]- +g[r+(q*20|0)+12>>2]);if((((s|0)>-1?s:-s|0)|0)>=3){p=d;break}if((nr(n,a,.10000000149011612)|0)!=0){m=1;t=15;break a}p=c[e>>2]|0}}while(0);n=l+1|0;if((n|0)<(p|0)){l=n;d=p}else{m=0;t=15;break}}if((t|0)==15){i=b;return m|0}return 0}function Gp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0;e=i;i=i+56|0;f=e|0;h=e+16|0;j=f|0;g[j>>2]=+g[a>>2];g[f+4>>2]=+g[a+4>>2];k=a+8|0;g[f+8>>2]=+g[k>>2]+-10.0;lr(h,a,j,b,d);if((c[h>>2]|0)!=0){l=0;i=e;return l|0}if(!(+g[h+4>>2]<1.0)){l=0;i=e;return l|0}if(+g[k>>2]- +g[h+16>>2]>10.0){l=0;i=e;return l|0}k=tr(c[h+32>>2]|0)|0;l=+g[k+8>>2]+(+g[k>>2]*0.0+ +g[k+4>>2]*0.0)>=+g[637840]|0;i=e;return l|0}function Hp(a){a=a|0;var b=0,c=0,d=0;b=i;i=i+16|0;c=b|0;d=c|0;g[d>>2]=+g[a>>2];g[c+4>>2]=+g[a+4>>2];g[c+8>>2]=+g[a+8>>2]+-2.0;a=((Ko(d)|0)&56|0)!=0|0;i=b;return a|0}function Ip(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;d=i;i=i+168|0;e=d+32|0;f=d+48|0;h=d+64|0;j=d+80|0;k=a+12|0;l=e|0;g[l>>2]=+g[k>>2]- +g[a+24>>2];m=a+16|0;n=e+4|0;g[n>>2]=+g[m>>2]- +g[a+28>>2];o=e+8|0;g[o>>2]=0.0;+dn(l);e=f|0;g[e>>2]=+g[k>>2];k=f+4|0;g[k>>2]=+g[m>>2];m=f+8|0;g[m>>2]=+g[a+20>>2]+1.0;a=h|0;g[a>>2]=+g[l>>2]*400.0;g[h+4>>2]=+g[n>>2]*400.0;g[h+8>>2]=+g[o>>2]*400.0;Np(j,-1,e,2,1,62464,a,1,2,.10000000149011612,124,0,d|0,d+16|0,0)|0;g[b>>2]=+g[j>>2];a=b+4|0;g[a>>2]=+g[j+4>>2];o=b+8|0;g[o>>2]=+g[j+8>>2];if((c[j+68>>2]&56|0)==0){p=84;q=0;i=d;return}g[b>>2]=+g[e>>2];g[a>>2]=+g[k>>2];g[o>>2]=+g[m>>2];p=84;q=0;i=d;return}function Jp(a,b,c,d,e,f,g,h,j,k,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=+k;l=l|0;m=m|0;n=n|0;var o=0,p=0;o=i;i=i+32|0;p=Np(a,b,c,d,e,f,g,h,j,k,l,m,o|0,o+16|0,n)|0;i=o;return p|0}function Kp(a,b){a=a|0;b=+b;var c=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0;c=i;i=i+184|0;d=c|0;e=c+16|0;f=c+32|0;h=c+48|0;j=c+64|0;k=c+80|0;l=c+96|0;m=j|0;g[m>>2]=90.0;g[j+4>>2]=0.0;g[j+8>>2]=0.0;n=+g[a>>2];j=d|0;o=a+4|0;p=+g[o>>2];q=a+8|0;r=+g[q>>2]+8.0;s=f|0;t=h|0;hn(m,s,t,0);u=+g[s>>2];v=n+(u*8.0+ +g[t>>2]*8.0);g[j>>2]=v;n=+g[f+4>>2];w=p+(n*8.0+ +g[h+4>>2]*8.0);g[d+4>>2]=w;p=+g[f+8>>2];x=r+(p*8.0+ +g[h+8>>2]*8.0+-8.0);g[d+8>>2]=x;d=e|0;g[d>>2]=v+u*500.0;g[e+4>>2]=w+n*500.0;g[e+8>>2]=x+p*500.0;Jo(l,j,0,0,d,1,1);p=+g[l+12>>2];x=+g[l+16>>2];n=+g[l+20>>2];w=+g[a>>2];u=+g[o>>2];v=+g[q>>2];r=p-(w+0.0);y=x-(u+0.0);z=n-(v+4.0);A=b- +T(r*r+y*y+z*z)*.5;q=k|0;g[q>>2]=w-p;g[k+4>>2]=u-x;o=k+8|0;g[o>>2]=v-n;+dn(q);i=c;return+(+g[637843]+(A<0.0?0.0:A*.5*1600.0)/200.0*+g[o>>2])}function Lp(a){a=a|0;return+(+Kp(a,120.0))}function Mp(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.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,F=0;j=i;i=i+80|0;k=j|0;l=j+16|0;m=j+32|0;n=j+48|0;o=j+64|0;p=k|0;q=l|0;br(e,p,q);r=+g[f>>2]- +g[q>>2];g[m>>2]=r;g[m+4>>2]=+g[f+4>>2]- +g[l+4>>2];g[m+8>>2]=+g[f+8>>2]- +g[l+8>>2];g[n>>2]=+g[h>>2]- +g[p>>2];g[n+4>>2]=+g[h+4>>2]- +g[k+4>>2];g[n+8>>2]=+g[h+8>>2]- +g[k+8>>2];k=a+8|0;g[k>>2]=+g[d>>2];h=d+4|0;p=a+12|0;g[p>>2]=+g[h>>2];l=d+8|0;f=a+16|0;g[f>>2]=+g[l>>2];q=a+4|0;g[q>>2]=1.0;e=0;s=r;while(1){r=+g[b+(e<<2)>>2];if(r<s){if(+g[d+(e<<2)>>2]<s){t=0;u=17;break}}v=+g[n+(e<<2)>>2];if(r>v){if(+g[d+(e<<2)>>2]>v){t=0;u=17;break}}w=e+1|0;if((w|0)>=3){u=8;break}e=w;s=+g[m+(w<<2)>>2]}if((u|0)==8){s=+g[d>>2];v=+g[b>>2];r=s-v;g[o>>2]=r;e=b+4|0;x=+g[h>>2]- +g[e>>2];g[o+4>>2]=x;h=b+8|0;y=+g[l>>2]- +g[h>>2];g[o+8>>2]=y;l=0;z=r;A=v;v=s;a:while(1){s=+g[(z>0.0?m:n)+(l<<2)>>2];B=A-s;C=B/(B-(v-s));w=l+1|0;D=(l|0)>1?0:w;s=+g[b+(D<<2)>>2]+C*+g[o+(D<<2)>>2];do{if(s>+g[m+(D<<2)>>2]){if(!(s<+g[n+(D<<2)>>2])){break}E=(D|0)>1?0:D+1|0;B=+g[b+(E<<2)>>2]+C*+g[o+(E<<2)>>2];if(!(B>+g[m+(E<<2)>>2])){break}if(B<+g[n+(E<<2)>>2]){F=l;break a}}}while(0);if((w|0)>=3){F=w;break}l=w;z=+g[o+(w<<2)>>2];A=+g[b+(w<<2)>>2];v=+g[d+(w<<2)>>2]}if((F|0)==3){t=0;i=j;return t|0}c[a>>2]=0;g[q>>2]=C;Zx(a+20|0,0,16)|0;g[k>>2]=+g[b>>2]+C*r;g[p>>2]=+g[e>>2]+C*x;g[f>>2]=+g[h>>2]+C*y;t=1;i=j;return t|0}else if((u|0)==17){i=j;return t|0}return 0}function Np(a,b,d,e,f,h,j,k,l,m,n,o,p,q,r){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;l=l|0;m=+m;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var 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.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0,_=0.0,$=0,aa=0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0,ma=0.0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0.0,hb=0.0,ib=0.0,jb=0,kb=0,lb=0,mb=0,nb=0.0,ob=0.0,pb=0.0,qb=0,rb=0,sb=0.0,tb=0.0,ub=0,vb=0.0,wb=0.0,xb=0.0,yb=0.0,zb=0.0,Ab=0.0,Bb=0.0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0.0,Hb=0.0,Ib=0,Jb=0,Kb=0.0,Lb=0,Mb=0,Nb=0.0,Ob=0.0,Pb=0,Qb=0,Rb=0.0,Sb=0.0,Tb=0.0,Ub=0.0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0.0,Zb=0,_b=0,$b=0.0,ac=0.0,bc=0.0,cc=0,dc=0,ec=0,fc=0.0,gc=0.0,hc=0.0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0.0,xc=0,yc=0.0,zc=0.0,Ac=0.0,Bc=0.0,Cc=0.0,Dc=0.0,Ec=0.0,Fc=0.0,Gc=0.0,Hc=0.0,Ic=0.0,Jc=0.0,Kc=0.0,Lc=0.0,Mc=0.0,Nc=0.0,Oc=0.0,Pc=0.0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0.0,Wc=0.0,Xc=0.0,Yc=0,Zc=0,_c=0.0,$c=0.0,ad=0.0,bd=0.0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0;s=i;i=i+648|0;t=s|0;u=s+40|0;v=s+56|0;w=s+136|0;x=s+376|0;y=s+392|0;z=s+408|0;A=s+424|0;B=s+440|0;C=s+456|0;D=s+472|0;E=s+488|0;F=s+528|0;G=s+568|0;H=s+608|0;I=E;J=m>0.0?m:.10000000149011612;m=+g[637827];K=+g[637828];L=+g[637829];M=+g[637830];N=+g[637831];O=+g[637833];P=+g[637834];Q=+g[637835];R=+g[637836];S=+g[637837];U=+g[637838];V=+g[637839];W=+g[637840];X=+g[637843];Zx(a|0,0,84)|0;Zx(I|0,0,36)|0;Y=+g[d>>2];Z=x|0;g[Z>>2]=Y;_=+g[d+4>>2];$=x+4|0;g[$>>2]=_;aa=x+8|0;ba=+g[d+8>>2]+.25;g[aa>>2]=ba;ca=J*+g[h>>2];da=J*+g[h+4>>2];ea=J*+g[h+8>>2];a:do{if((l|0)>0){h=u|0;d=u+4|0;x=u+8|0;fa=J;ga=D|0;ha=j+4|0;ia=D+4|0;ja=j+8|0;ka=D+8|0;la=1.0/J;ma=J*X;na=C|0;oa=C+4|0;pa=C+8|0;qa=y|0;ra=y+4|0;sa=y+8|0;ta=F;ua=(r|0)!=0;va=E|0;wa=E+8|0;xa=(n&4992|0)==0;ya=(n&2048|0)==0;za=E+12|0;Aa=E+16|0;Ba=E+4|0;Ca=E+32|0;Da=(n&1024|0)==0;Ea=A|0;Fa=A+4|0;Ga=A+8|0;Ha=B|0;Ia=B+4|0;Ja=B+8|0;Ka=G|0;La=G+8|0;Ma=G+12|0;Na=G+16|0;Oa=G+32|0;Pa=(n&32|0)==0;Qa=v|0;Ra=w|0;Sa=(n&512|0)==0;Ta=(n&128|0)==0;Ua=(n&256|0)==0;Va=(n&4096|0)==0;Wa=t|0;Xa=t+16|0;Ya=t+32|0;Za=t+4|0;_a=(n&1|0)==0;$a=(n&2|0)==0;ab=(n&64|0)==0;bb=H|0;cb=H+16|0;db=z|0;eb=z+4|0;fb=z+8|0;gb=ea;hb=da;ib=ca;jb=-1;kb=0;lb=f;mb=e;nb=Y;ob=_;pb=ba;b:while(1){g[h>>2]=nb;g[d>>2]=ob;g[x>>2]=pb+-2.0;qb=(Ko(h)|0)&56;rb=(qb|0)!=0;sb=fa*(rb?N:L)*.1;tb=gb-sb;ub=(lb|0)==0;if((qb|lb|0)==0){vb=ib;wb=hb;xb=tb}else{yb=ib*la;zb=hb*la;Ab=+T(yb*yb+zb*zb);if(Ab!=0.0){Bb=Ab-(rb?m:M)*J*(Ab<K?K:Ab);Cb=(Bb<0.0?0.0:Bb)/Ab;Db=yb*Cb;Eb=zb*Cb}else{Db=yb;Eb=zb}vb=J*Db;wb=J*Eb;xb=J*tb*la}if((kb|0)<(k|0)){g[ga>>2]=+g[j>>2];g[ia>>2]=+g[ha>>2];tb=+g[ja>>2];g[ka>>2]=tb;do{if(ub){if(rb){Fb=Q;Gb=U;Hb=xb;Ib=jb;Jb=0}else{Kb=xb;Lb=jb;Mb=0;Nb=S;Ob=O;Pb=14}}else{qb=tb<-300.0;Qb=qb&1;zb=qb?P:O;if(rb){Fb=Q;Gb=U;Hb=xb;Ib=jb;Jb=Qb;break}if(!(tb>1.0)){Kb=xb;Lb=jb;Mb=Qb;Nb=R;Ob=zb;Pb=14;break}Kb=ma-sb+5.0;Lb=kb;Mb=Qb;Nb=S;Ob=zb;Pb=14}}while(0);if((Pb|0)==14){Pb=0;g[ka>>2]=0.0;Fb=Ob;Gb=Nb;Hb=Kb;Ib=Lb;Jb=Mb}sb=+dn(ga);tb=sb>Fb?Fb:sb;sb=vb*la;zb=wb*la;yb=Hb*la;Cb=+g[ga>>2];Ab=+g[ia>>2];Bb=+g[ka>>2];Rb=tb-(sb*Cb+zb*Ab+yb*Bb);if(Rb>0.0){Sb=J*Gb*tb;tb=Sb>Rb?Rb:Sb;Tb=sb+Cb*tb;Ub=zb+Ab*tb;Vb=yb+Bb*tb}else{Tb=sb;Ub=zb;Vb=yb}yb=J*Tb;zb=J*Ub;sb=J*Vb;if((Jb|0)==0){Wb=sb;Xb=zb;Yb=yb;Zb=Ib;Pb=18}else{_b=4;$b=sb;ac=zb;bc=yb;cc=Ib}}else{Wb=xb;Xb=wb;Yb=vb;Zb=jb;Pb=18}do{if((Pb|0)==18){Pb=0;if((mb|0)!=4){_b=mb;$b=Wb;ac=Xb;bc=Yb;cc=Zb;break}_b=((jr(Z)|0)&2^2)+2|0;$b=Wb;ac=Xb;bc=Yb;cc=Zb}}while(0);yb=+g[Z>>2];g[na>>2]=yb;zb=+g[$>>2];g[oa>>2]=zb;sb=+g[aa>>2];g[pa>>2]=sb;ub=kb-cc|0;Qb=rb^1;qb=Ta|(kb|0)==0;dc=lb;ec=0;tb=bc;Bb=ac;Ab=$b;fc=bc;gc=ac;hc=$b;Cb=yb;yb=zb;zb=sb;while(1){g[qa>>2]=tb+Cb;g[ra>>2]=Bb+yb;g[sa>>2]=Ab+zb;lr(F,Z,qa,_b,b);Vx(I|0,ta|0,36)|0;if(ua){if((c[va>>2]|0)!=0){ue[c[636260]&31](1,27840,(ic=i,i=i+1|0,i=i+7&-8,c[ic>>2]=0,ic)|0);i=ic}dp(Z,wa,1)}c:do{if(!xa){ic=mr(Z,wa,Qa,Ra,20)|0;if((ic|0)<=0){break}jc=c[637759]|0;if(Sa){if(qb){kc=0;while(1){if(!Ua){lc=c[v+(kc<<2)>>2]|0;if((c[jc+(lc*28|0)>>2]&64|0)!=0){mc=kc;nc=lc;Pb=53;break b}}if(!Va){lc=c[v+(kc<<2)>>2]|0;if((c[jc+(lc*28|0)>>2]&8|0)!=0){oc=kc;pc=lc;Pb=56;break b}}kc=kc+1|0;if((kc|0)>=(ic|0)){break c}}}else{qc=0}while(1){kc=v+(qc<<2)|0;if((c[jc+((c[kc>>2]|0)*28|0)>>2]&128|0)!=0){rc=qc;sc=kc;Pb=50;break b}if(!Ua){kc=c[v+(qc<<2)>>2]|0;if((c[jc+(kc*28|0)>>2]&64|0)!=0){mc=qc;nc=kc;Pb=53;break b}}if(!Va){kc=c[v+(qc<<2)>>2]|0;if((c[jc+(kc*28|0)>>2]&8|0)!=0){oc=qc;pc=kc;Pb=56;break b}}qc=qc+1|0;if((qc|0)>=(ic|0)){break c}}}if(qb){kc=0;while(1){if((c[v+(kc<<2)>>2]|0)==(o|0)){tc=kc;Pb=48;break b}if(!Ua){lc=c[v+(kc<<2)>>2]|0;if((c[jc+(lc*28|0)>>2]&64|0)!=0){mc=kc;nc=lc;Pb=53;break b}}if(!Va){lc=c[v+(kc<<2)>>2]|0;if((c[jc+(lc*28|0)>>2]&8|0)!=0){oc=kc;pc=lc;Pb=56;break b}}kc=kc+1|0;if((kc|0)>=(ic|0)){break c}}}else{uc=0}do{if((c[v+(uc<<2)>>2]|0)==(o|0)){tc=uc;Pb=48;break b}kc=v+(uc<<2)|0;if((c[jc+((c[kc>>2]|0)*28|0)>>2]&128|0)!=0){rc=uc;sc=kc;Pb=50;break b}if(!Ua){kc=c[v+(uc<<2)>>2]|0;if((c[jc+(kc*28|0)>>2]&64|0)!=0){mc=uc;nc=kc;Pb=53;break b}}if(!Va){kc=c[v+(uc<<2)>>2]|0;if((c[jc+(kc*28|0)>>2]&8|0)!=0){oc=uc;pc=kc;Pb=56;break b}}uc=uc+1|0;}while((uc|0)<(ic|0))}}while(0);if(!ya){if((Mp(E,Z,wa,_b,p,q)|0)!=0){Pb=60;break b}}g[Z>>2]=+g[wa>>2];g[$>>2]=+g[za>>2];g[aa>>2]=+g[Aa>>2];d:do{if(+g[Ba>>2]<1.0){ic=tr(c[Ca>>2]|0)|0;do{if(Da){vc=ic+8|0}else{jc=ic+8|0;if(!(+g[jc>>2]+(+g[ic>>2]*0.0+ +g[ic+4>>2]*0.0)>W)){vc=jc;break}g[Ea>>2]=+g[Z>>2];g[Fa>>2]=+g[$>>2];g[Ga>>2]=+g[aa>>2]+.5;if((gr(Ea)|0)==(o|0)){Pb=66;break b}else{vc=jc}}}while(0);do{if(!(+g[vc>>2]!=0.0|(ub|0)<3&(cc|0)>-1)){sb=+g[Z>>2]+ +g[ic>>2]*-.25;g[Ea>>2]=sb;Sb=+g[$>>2]+ +g[ic+4>>2]*-.25;g[Fa>>2]=Sb;Rb=+g[aa>>2]+ +g[vc>>2]*-.25;g[Ha>>2]=sb;g[Ia>>2]=Sb;g[Ja>>2]=Rb;g[Ga>>2]=V+Rb;lr(G,Ea,Ha,_b,b);Rb=+g[La>>2];Sb=+g[Ma>>2];sb=+g[Na>>2];if((c[Ka>>2]|0)!=0){break}jc=tr(c[Oa>>2]|0)|0;if(!(+g[jc+8>>2]+(+g[jc>>2]*0.0+ +g[jc+4>>2]*0.0)>W)){break}wc=+g[qa>>2]-Rb;Rb=+g[ra>>2]-Sb;do{if(ua){if(!(sb- +g[aa>>2]>.125)){break}g[Ea>>2]=+g[Z>>2];g[Fa>>2]=+g[$>>2];g[Ga>>2]=sb;dp(Z,Ea,3)}}while(0);g[aa>>2]=sb;xc=dc;yc=wc;zc=Rb;Ac=0.0;Bc=fc;Cc=gc;Dc=0.0;break d}}while(0);Sb=+g[ic>>2];Ec=+g[ic+4>>2];Fc=Bb*Ec;Gc=+g[vc>>2];Hc=Ab*Gc;Ic=tb-Sb*(tb*Sb+Fc+Hc);Jc=Sb*Ic;Kc=Bb-Ec*(Hc+(Fc+Jc));Fc=Ab-Gc*(Hc+(Jc+Ec*Kc));Jc=gc*Ec;Hc=hc*Gc;Lc=fc-Sb*(fc*Sb+Jc+Hc);Mc=Sb*Lc;Nc=gc-Ec*(Hc+(Jc+Mc));Oc=hc-Gc*(Hc+(Mc+Ec*Nc));jc=Gc+(Sb*0.0+Ec*0.0)>W?1:dc;if(Pa){xc=jc;yc=Ic;zc=Kc;Ac=Fc;Bc=Lc;Cc=Nc;Dc=Oc;break}kc=(jc|0)==0;if(hc<0.0&Oc>hc&kc){Pc=hc}else{if(kc){xc=0;yc=Ic;zc=Kc;Ac=Fc;Bc=Lc;Cc=Nc;Dc=Oc;break}Pc=Oc-hc}if(!(Pc!=0.0)){xc=jc;yc=Ic;zc=Kc;Ac=Fc;Bc=Lc;Cc=Nc;Dc=Oc;break}Ec=Pc*10.0;if(Ec*Ec*1.0e-4>40.0&Qb){Pb=80;break b}else{xc=jc;yc=Ic;zc=Kc;Ac=Fc;Bc=Lc;Cc=Nc;Dc=Oc}}else{xc=dc;yc=tb;zc=Bb;Ac=Ab;Bc=fc;Cc=gc;Dc=hc}}while(0);if((ec|0)>19){Qc=0;Pb=102;break b}if(!(+g[Ba>>2]<1.0)){break}dc=xc;ec=ec+1|0;tb=yc;Bb=zc;Ab=Ac;fc=Bc;gc=Cc;hc=Dc;Cb=+g[Z>>2];yb=+g[$>>2];zb=+g[aa>>2]}if(!(Dc>10.0)){g[db>>2]=+g[Z>>2];g[eb>>2]=+g[$>>2];g[fb>>2]=+g[aa>>2]+-22.0;Rc=Ko(db)|0;Sc=gr(Z)|0;ec=c[(c[637759]|0)+(Sc*28|0)>>2]|0;Tc=(Rc>>>1&8|Rc<<1&16|Rc>>>3&4|ec<<3&16|ec<<1&8|ec<<2&4)&n;if((Tc|0)!=0){Pb=86;break}}g[h>>2]=+g[Z>>2];g[d>>2]=+g[$>>2];g[x>>2]=+g[aa>>2]+-10.0;lr(t,Z,h,_b,b);zb=+g[Xa>>2];ec=c[Ya>>2]|0;do{if((c[Wa>>2]|0)==0){if(!(+g[Za>>2]<1.0)){Pb=93;break}if(+g[aa>>2]-zb>10.0){Pb=93;break}dc=tr(ec)|0;if(!(+g[dc+8>>2]+(+g[dc>>2]*0.0+ +g[dc+4>>2]*0.0)>=+g[637840])){Pb=93;break}if(_a){Uc=1}else{Pb=92;break b}}else{Pb=93}}while(0);do{if((Pb|0)==93){Pb=0;if(!$a){Pb=94;break b}if(ab){Uc=0;break}zb=+g[Z>>2];g[Ea>>2]=zb;yb=+g[$>>2];g[Fa>>2]=yb;Cb=+g[aa>>2];g[Ga>>2]=Cb;g[qa>>2]=zb;g[ra>>2]=yb;g[sa>>2]=Cb-(+g[637842]+48.0);lr(H,Ea,qa,4,-1);if((c[bb>>2]|0)!=0){Uc=0;break}if(!(+g[cb>>2]<+g[aa>>2]- +g[637839]+-1.0)){Uc=0;break}if(((Ko(qa)|0)&32|0)==0){Pb=99;break b}else{Uc=0}}}while(0);ec=kb+1|0;Cb=+g[Z>>2];yb=+g[$>>2];zb=+g[aa>>2];if((ec|0)<(l|0)){gb=Dc;hb=Cc;ib=Bc;jb=cc;kb=ec;lb=Uc;mb=_b;nb=Cb;ob=yb;pb=zb}else{Vc=Dc;Wc=Cc;Xc=Bc;Yc=ec;Zc=_b;_c=Cb;$c=yb;ad=zb;bd=la;break a}}if((Pb|0)==48){g[a>>2]=+g[w+(tc*12|0)>>2];g[a+4>>2]=+g[w+(tc*12|0)+4>>2];g[a+8>>2]=+g[w+(tc*12|0)+8>>2];g[a+16>>2]=fc*la;g[a+20>>2]=gc*la;g[a+24>>2]=hc*la;c[a+12>>2]=o;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=512;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==50){g[a>>2]=+g[w+(rc*12|0)>>2];g[a+4>>2]=+g[w+(rc*12|0)+4>>2];g[a+8>>2]=+g[w+(rc*12|0)+8>>2];g[a+16>>2]=fc*la;g[a+20>>2]=gc*la;g[a+24>>2]=hc*la;c[a+12>>2]=c[sc>>2];Vx(a+28|0,I|0,36)|0;c[a+68>>2]=128;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==53){g[a>>2]=+g[w+(mc*12|0)>>2];g[a+4>>2]=+g[w+(mc*12|0)+4>>2];g[a+8>>2]=+g[w+(mc*12|0)+8>>2];c[a+12>>2]=nc;g[a+16>>2]=fc*la;g[a+20>>2]=gc*la;g[a+24>>2]=hc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=256;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==56){g[a>>2]=+g[w+(oc*12|0)>>2];g[a+4>>2]=+g[w+(oc*12|0)+4>>2];g[a+8>>2]=+g[w+(oc*12|0)+8>>2];c[a+12>>2]=pc;g[a+16>>2]=fc*la;g[a+20>>2]=gc*la;g[a+24>>2]=hc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=4096;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==60){mb=a|0;g[mb>>2]=+g[wa>>2];g[a+4>>2]=+g[za>>2];g[a+8>>2]=+g[Aa>>2];c[a+12>>2]=gr(mb)|0;g[a+16>>2]=fc*la;g[a+20>>2]=gc*la;g[a+24>>2]=hc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=2048;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==66){g[a>>2]=+g[Ea>>2];g[a+4>>2]=+g[Fa>>2];g[a+8>>2]=+g[Ga>>2];c[a+12>>2]=o;g[a+16>>2]=fc*la;g[a+20>>2]=gc*la;g[a+24>>2]=hc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=1024;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==80){g[a>>2]=+g[Z>>2];g[a+4>>2]=+g[$>>2];g[a+8>>2]=+g[aa>>2];c[a+12>>2]=gr(Z)|0;g[a+16>>2]=Lc;g[a+20>>2]=Nc;g[a+24>>2]=Oc;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=32;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==86){g[a>>2]=+g[Z>>2];g[a+4>>2]=+g[$>>2];g[a+8>>2]=+g[aa>>2];c[a+12>>2]=Sc;g[a+16>>2]=Bc*la;g[a+20>>2]=Cc*la;g[a+24>>2]=Dc*la;c[a+68>>2]=Tc;c[a+64>>2]=_b;c[a+72>>2]=Rc;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==92){g[a>>2]=+g[Z>>2];g[a+4>>2]=+g[$>>2];g[a+8>>2]=+g[aa>>2];c[a+12>>2]=gr(Z)|0;g[a+16>>2]=Bc*la;g[a+20>>2]=Cc*la;g[a+24>>2]=Dc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=1;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==94){g[a>>2]=+g[Z>>2];g[a+4>>2]=+g[$>>2];g[a+8>>2]=+g[aa>>2];c[a+12>>2]=gr(Z)|0;g[a+16>>2]=Bc*la;g[a+20>>2]=Cc*la;g[a+24>>2]=Dc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=2;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==99){g[a>>2]=+g[na>>2];g[a+4>>2]=+g[oa>>2];g[a+8>>2]=+g[pa>>2];c[a+12>>2]=gr(na)|0;g[a+16>>2]=Bc*la;g[a+20>>2]=Cc*la;g[a+24>>2]=Dc*la;Vx(a+28|0,I|0,36)|0;c[a+68>>2]=64;c[a+64>>2]=_b;c[a+72>>2]=0;g[a+76>>2]=J*+(kb|0);c[a+80>>2]=kb;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}else if((Pb|0)==102){cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}}else{Vc=ea;Wc=da;Xc=ca;Yc=0;Zc=e;_c=Y;$c=_;ad=ba;bd=1.0/J}}while(0);g[a>>2]=_c;g[a+4>>2]=$c;g[a+8>>2]=ad;c[a+12>>2]=gr(Z)|0;g[a+16>>2]=Xc*bd;g[a+20>>2]=Wc*bd;g[a+24>>2]=Vc*bd;c[a+68>>2]=0;c[a+64>>2]=Zc;c[a+72>>2]=0;g[a+76>>2]=J*+(Yc|0);c[a+80>>2]=Yc;Qc=1;cd=36;dd=0;ed=240;fd=0;gd=80;hd=0;i=s;return Qc|0}function Op(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;l=l|0;m=m|0;return Np(a,b,c,d,e,f,g,h,i,j,2048,0,k,l,m)|0}function Pp(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0,k=0.0;e=+g[637829];f=+g[637832];h=e*.5;i=a/e;e=i;a=+g[b+8>>2]+e*h*e- +g[c+8>>2];if(a<0.0){g[d>>2]=f;j=0;return j|0}e=+T(a/h);h=+g[c>>2]- +g[b>>2];a=+g[c+4>>2]- +g[b+4>>2];k=i+e;if(k==0.0){g[d>>2]=f;j=0;return j|0}e=+T(h*h+a*a)/k;g[d>>2]=e;if(!(e>f)){j=1;return j|0}g[d>>2]=f;j=0;return j|0}function Qp(a,b){a=a|0;b=b|0;var d=0,e=0,f=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;d=(b|0)>-1?b:-b|0;e=c[637749]|0;f=(c[a+52>>2]|0)+(d<<2)|0;h=c[f>>2]|0;if((h|0)!=0){return((b|0)>0?h:-h|0)|0}h=a+8|0;i=c[h>>2]|0;j=c[a+12>>2]|0;k=c[a+48>>2]|0;l=c[637745]|0;m=a|0;n=a+4|0;a=e+(d<<3)|0;o=c[a>>2]|0;p=c[k+(o<<2)>>2]|0;if((p|0)==0){q=c[m>>2]|0;r=c[n>>2]|0;g[r+(q*12|0)>>2]=+g[l+(o*12|0)>>2];g[r+(q*12|0)+4>>2]=+g[l+(o*12|0)+4>>2];g[r+(q*12|0)+8>>2]=+g[l+(o*12|0)+8>>2];c[j+(i<<3)>>2]=q;c[k+(c[a>>2]<<2)>>2]=c[m>>2];c[m>>2]=(c[m>>2]|0)+1}else{c[j+(i<<3)>>2]=p}p=e+(d<<3)+4|0;d=c[p>>2]|0;e=c[k+(d<<2)>>2]|0;if((e|0)==0){a=c[m>>2]|0;q=c[n>>2]|0;g[q+(a*12|0)>>2]=+g[l+(d*12|0)>>2];g[q+(a*12|0)+4>>2]=+g[l+(d*12|0)+4>>2];g[q+(a*12|0)+8>>2]=+g[l+(d*12|0)+8>>2];c[j+(i<<3)+4>>2]=a;c[k+(c[p>>2]<<2)>>2]=c[m>>2];c[m>>2]=(c[m>>2]|0)+1;s=c[h>>2]|0;c[f>>2]=s;t=c[h>>2]|0;u=t+1|0;c[h>>2]=u;v=(b|0)>0;w=-t|0;x=v?t:w;return x|0}else{c[j+(i<<3)+4>>2]=e;s=c[h>>2]|0;c[f>>2]=s;t=c[h>>2]|0;u=t+1|0;c[h>>2]=u;v=(b|0)>0;w=-t|0;x=v?t:w;return x|0}return 0}function Rp(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;d=(b|0)>-1?b:-b|0;e=c[637753]|0;if((c[e+(d*24|0)+4>>2]&2|0)==0){f=0;return f|0}g=a+56|0;h=c[(c[g>>2]|0)+(d<<2)>>2]|0;if((h|0)!=0){return((b|0)>0?h:-h|0)|0}h=a+24|0;i=c[h>>2]|0;j=c[a+28>>2]|0;k=j+(i*24|0)|0;l=e+(d*24|0)|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];c[k+16>>2]=c[l+16>>2];c[k+20>>2]=c[l+20>>2];l=j+(i*24|0)+8|0;c[l>>2]=0;k=a+16|0;m=j+(i*24|0)+12|0;c[m>>2]=c[k>>2];i=e+(d*24|0)+8|0;if((c[i>>2]|0)>0){j=e+(d*24|0)+12|0;e=a+20|0;n=0;do{o=Qp(a,c[(c[637751]|0)+((c[j>>2]|0)+n<<2)>>2]|0)|0;if((o|0)!=0){c[(c[e>>2]|0)+((c[l>>2]|0)+(c[m>>2]|0)<<2)>>2]=o;c[l>>2]=(c[l>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+1}n=n+1|0;}while((n|0)<(c[i>>2]|0))}c[(c[g>>2]|0)+(d<<2)>>2]=c[h>>2];d=c[h>>2]|0;c[h>>2]=d+1;f=(b|0)>0?d:-d|0;return f|0}function Sp(a){a=a|0;c[a+4>>2]=kv((c[637744]|0)*12|0)|0;c[a>>2]=0;c[a+12>>2]=kv(c[637748]<<3)|0;c[a+8>>2]=1;c[a+20>>2]=kv(c[637750]<<2)|0;c[a+16>>2]=0;c[a+28>>2]=kv((c[637752]|0)*24|0)|0;c[a+24>>2]=1;c[a+36>>2]=kv(c[637754]<<2)|0;c[a+32>>2]=0;c[a+44>>2]=kv((c[637756]|0)*48|0)|0;c[a+40>>2]=c[637756];c[a+48>>2]=kv(c[637744]<<2)|0;c[a+52>>2]=kv(c[637748]<<2)|0;c[a+56>>2]=kv(c[637752]<<2)|0;return}function Tp(a){a=a|0;var b=0;b=c[637745]|0;if((b|0)!=0){nv(b)}c[637745]=c[a+4>>2];c[637744]=c[a>>2];b=c[637749]|0;if((b|0)!=0){nv(b)}c[637749]=c[a+12>>2];c[637748]=c[a+8>>2];b=c[637751]|0;if((b|0)!=0){nv(b)}c[637751]=c[a+20>>2];c[637750]=c[a+16>>2];b=c[637753]|0;if((b|0)!=0){nv(b)}c[637753]=c[a+28>>2];c[637752]=c[a+24>>2];b=c[637755]|0;if((b|0)!=0){nv(b)}c[637755]=c[a+36>>2];c[637754]=c[a+32>>2];b=c[637757]|0;if((b|0)!=0){nv(b)}c[637757]=c[a+44>>2];c[637756]=c[a+40>>2];nv(c[a+48>>2]|0);nv(c[a+52>>2]|0);nv(c[a+56>>2]|0);return}function Up(){var a=0,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;a=i;i=i+64|0;b=a|0;Sp(b);if((c[637756]|0)>1){d=b+44|0;e=b+32|0;f=b+36|0;g=1;do{h=c[637757]|0;j=c[d>>2]|0;Vx(j+(g*48|0)|0,h+(g*48|0)|0,48)|0;k=j+(g*48|0)+4|0;c[k>>2]=0;l=j+(g*48|0)+8|0;c[l>>2]=c[e>>2];j=h+(g*48|0)+4|0;if((c[j>>2]|0)>0){m=h+(g*48|0)+8|0;h=0;do{n=Rp(b,c[(c[637755]|0)+((c[m>>2]|0)+h<<2)>>2]|0)|0;if((n|0)!=0){c[(c[f>>2]|0)+((c[k>>2]|0)+(c[l>>2]|0)<<2)>>2]=n;c[k>>2]=(c[k>>2]|0)+1;c[e>>2]=(c[e>>2]|0)+1}h=h+1|0;}while((h|0)<(c[j>>2]|0))}g=g+1|0;}while((g|0)<(c[637756]|0))}if((c[637760]|0)<=0){Tp(b);o=c[636260]|0;ue[o&31](1,50416,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;q=60;r=0;i=a;return}g=c[637761]|0;e=c[b+56>>2]|0;f=c[b+52>>2]|0;d=0;do{j=c[g+(d*44|0)+36>>2]&16777215;do{if(!((j|0)==11|(j|0)==18|(j|0)==19)){h=g+(d*44|0)+4|0;k=c[h>>2]|0;l=c[e+(((k|0)>-1?k:-k|0)<<2)>>2]|0;c[h>>2]=(k|0)<0?-l|0:l;l=g+(d*44|0)+8|0;k=c[l>>2]|0;h=c[f+(((k|0)>-1?k:-k|0)<<2)>>2]|0;c[l>>2]=h;if((k|0)>=0){break}c[l>>2]=-h}}while(0);d=d+1|0;}while((d|0)<(c[637760]|0));Tp(b);o=c[636260]|0;ue[o&31](1,50416,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;q=60;r=0;i=a;return}function Vp(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;b=c[a+12>>2]|0;d=c[637751]|0;e=c[d+(b<<2)>>2]|0;f=c[637749]|0;h=c[f+(((e|0)>-1?e:-e|0)<<3)+(e>>>31<<2)>>2]|0;e=c[637745]|0;i=(c[a+8>>2]|0)-1|0;if((i|0)<=1){j=0.0;return+j}k=+g[e+(h*12|0)>>2];l=+g[e+(h*12|0)+4>>2];m=+g[e+(h*12|0)+8>>2];n=0.0;h=1;while(1){a=c[d+(b+h<<2)>>2]|0;o=a>>>31;p=(a|0)>-1?a:-a|0;a=c[f+(p<<3)+(o<<2)>>2]|0;q=+g[e+(a*12|0)>>2]-k;r=+g[e+(a*12|0)+4>>2]-l;s=+g[e+(a*12|0)+8>>2]-m;a=c[f+(p<<3)+((o^1)<<2)>>2]|0;t=+g[e+(a*12|0)>>2]-k;u=+g[e+(a*12|0)+4>>2]-l;v=+g[e+(a*12|0)+8>>2]-m;w=r*v-s*u;x=s*t-q*v;v=q*u-r*t;t=n+ +T(v*v+(w*w+x*x))*.5;a=h+1|0;if((a|0)<(i|0)){n=t;h=a}else{j=t;break}}return+j}function Wp(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0.0,t=0.0;b=c[637757]|0;d=c[b+(a*48|0)+8>>2]|0;e=c[637755]|0;f=c[e+(d<<2)>>2]|0;h=c[637753]|0;i=c[(c[637751]|0)+(c[h+(((f|0)>-1?f:-f|0)*24|0)+12>>2]<<2)>>2]|0;f=c[(c[637749]|0)+(((i|0)>-1?i:-i|0)<<3)>>2]|0;i=c[637745]|0;j=+g[i+(f*12|0)>>2];k=+g[i+(f*12|0)+4>>2];l=+g[i+(f*12|0)+8>>2];f=c[b+(a*48|0)+4>>2]|0;if((f|0)<=0){m=0.0;n=m/3.0;return+n}b=c[637747]|0;o=0.0;i=0;while(1){p=c[e+(d+i<<2)>>2]|0;q=(p|0)>-1?p:-p|0;p=h+(q*24|0)|0;r=(c[h+(q*24|0)+20>>2]|0)!=(a|0)^c[p>>2];s=j*+g[b+(r*20|0)>>2]+k*+g[b+(r*20|0)+4>>2]+l*+g[b+(r*20|0)+8>>2]- +g[b+(r*20|0)+12>>2];t=o- +Vp(p)*s;p=i+1|0;if((p|0)<(f|0)){o=t;i=p}else{m=t;break}}n=m/3.0;return+n}function Xp(a){a=a|0;return(c[(c[637759]|0)+(a*28|0)+4>>2]|0)>>>2&1|0}function Yp(a){a=a|0;var b=0,d=0,e=0;b=i;if((a|0)>-1&(c[637756]|0)>(a|0)){d=c[(c[637759]|0)+(a*28|0)+20>>2]|0;i=b;return d|0}else{tp(53776,(e=i,i=i+8|0,c[e>>2]=a,e)|0);i=e;d=0;i=b;return d|0}return 0}function Zp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|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.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=i;i=i+496|0;k=j|0;l=j+8|0;m=j+24|0;n=j+40|0;o=j+56|0;p=j+72|0;q=j+456|0;r=p|0;s=j+200|0;t=j+328|0;So(b,50384,k)|0;if(!(+g[k>>2]!=0.0)){g[k>>2]=1.0e3}g[m+8>>2]=0.0;g[m+4>>2]=0.0;k=m|0;g[k>>2]=0.0;Qo(b,57792,r,128)|0;if((a[r]|0)==0){u=0}else{u=Vc(p+1|0)|0}p=l|0;Mo(u,k,e,f,p);v=+g[p>>2];g[e>>2]=v+ +g[e>>2];k=l+4|0;w=+g[k>>2];u=e+4|0;g[u>>2]=w+ +g[u>>2];r=l+8|0;x=+g[r>>2];l=e+8|0;g[l>>2]=x+ +g[l>>2];y=v+ +g[f>>2];g[f>>2]=y;m=f+4|0;v=w+ +g[m>>2];g[m>>2]=v;m=f+8|0;w=x+ +g[m>>2];g[m>>2]=w;x=+g[u>>2]+v;v=+g[l>>2]+w;w=(+g[e>>2]+y)*.5;g[p>>2]=w;y=x*.5;g[k>>2]=y;x=v*.5;g[r>>2]=x;e=n|0;g[e>>2]=w;g[n+4>>2]=y;g[n+8>>2]=x+64.0;lr(q,e,p,4,-1);if((c[q>>2]|0)==0){x=+g[q+16>>2];y=+g[q+12>>2];g[d>>2]=+g[q+8>>2];g[d+4>>2]=y;g[d+8>>2]=x;z=x}else{ue[c[636260]&31](1,47608,(A=i,i=i+1|0,i=i+7&-8,c[A>>2]=0,A)|0);i=A;g[d>>2]=+g[p>>2];g[d+4>>2]=+g[k>>2];x=+g[r>>2];g[d+8>>2]=x;z=x}g[d+8>>2]=z+.125;Qo(b,40816,s,128)|0;b=Po(0)|0;a:do{if((b|0)!=0){d=b;while(1){if((Qo(d,36080,t,128)|0)!=0){if((Tx(t,s)|0)==0){break}}q=Po(d)|0;if((q|0)==0){break a}else{d=q}}q=o|0;Ro(d,26400,q)|0;z=+g[o+8>>2]- +g[r>>2];x=+g[637829];y=+T(z/(x*.5));if(y!=0.0){g[h>>2]=+g[q>>2]- +g[p>>2];q=h+4|0;g[q>>2]=+g[o+4>>2]- +g[k>>2];e=h+8|0;g[e>>2]=z;z=+dn(h)/y*1.100000023841858;g[h>>2]=+g[h>>2]*z;g[q>>2]=z*+g[q>>2];g[e>>2]=x*y;B=1;C=128;D=0;E=128;F=0;G=128;H=0;i=j;return B|0}else{ue[c[636260]&31](1,22976,(A=i,i=i+1|0,i=i+7&-8,c[A>>2]=0,A)|0);i=A;B=0;C=128;D=0;E=128;F=0;G=128;H=0;i=j;return B|0}}}while(0);ue[c[636260]&31](1,30680,(A=i,i=i+8|0,c[A>>2]=s,A)|0);i=A;B=0;C=128;D=0;E=128;F=0;G=128;H=0;i=j;return B|0}function _p(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.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.0,G=0;e=i;i=i+328|0;f=e+16|0;h=e+32|0;j=e+48|0;k=e+112|0;l=k;m=e+200|0;n=~~+ev(19872,17728);o=+g[a>>2];p=h|0;g[p>>2]=o+ +g[b>>2];q=+g[a+4>>2];g[h+4>>2]=q+ +g[b+4>>2];r=+g[a+8>>2];g[h+8>>2]=r+ +g[b+8>>2];b=j|0;g[b>>2]=o+ +g[d>>2];g[j+4>>2]=q+ +g[d+4>>2];g[j+8>>2]=r+ +g[d+8>>2];d=Po(0)|0;if((d|0)==0){s=0;t=128;u=0;v=84;w=0;i=e;return s|0}j=e|0;h=e+64|0;a=e+80|0;x=e+96|0;y=f|0;z=f+4|0;A=f+8|0;f=k+80|0;B=d;a:while(1){b:do{if((Qo(B,60472,m,128)|0)!=0){if((Tx(m,58976)|0)!=0){break}if((Zp(B,j,h,a,x)|0)==0){break}C=qr(h,a,-1,4)|0;c:do{if((C|0)!=0){d=c[637759]|0;D=C;while(1){if((c[d+((c[D+4>>2]|0)*28|0)>>2]&128|0)!=0){break}D=c[D+16>>2]|0;if((D|0)==0){break c}}g[y>>2]=0.0;g[z>>2]=0.0;g[A>>2]=0.0;Zx(l|0,0,84)|0;Op(k,-1,j,2,0,x,y,0,30,.10000000149011612,p,b,n)|0;if((c[f>>2]|0)<30){break a}or(C);break b}}while(0);ue[c[636260]&31](1,57152,(D=i,i=i+1|0,i=i+7&-8,c[D>>2]=0,D)|0);i=D;or(C)}}while(0);D=Po(B)|0;if((D|0)==0){s=0;E=20;break}else{B=D}}if((E|0)==20){t=128;u=0;v=84;w=0;i=e;return s|0}E=c[637759]|0;B=0;r=0.0;f=C;while(1){n=c[f+4>>2]|0;do{if((c[E+(n*28|0)>>2]&128|0)==0){F=r;G=B}else{q=+Wp(n);if(q<r){F=r;G=B;break}F=q;G=n}}while(0);n=c[f+16>>2]|0;if((n|0)==0){break}else{B=G;r=F;f=n}}or(C);s=G;t=128;u=0;v=84;w=0;i=e;return s|0}function $p(a){a=a|0;return c[(c[637759]|0)+(a*28|0)>>2]&128|0}function aq(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.0,A=0,B=0.0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;f=i;i=i+144|0;h=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+64|0;n=f+104|0;o=m;if((c[637704]|0)==0){ue[c[636260]&31](3,55712,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0);i=p;q=0;r=36;s=0;i=f;return q|0}t=k|0;g[t>>2]=+g[a>>2];u=a+4|0;v=k+4|0;g[v>>2]=+g[u>>2];w=a+8|0;x=k+8|0;g[x>>2]=+g[w>>2];k=gr(t)|0;do{if((k|0)==0){y=0;do{z=+(y|0)*4.0;A=0;do{B=+(A|0)*4.0;C=-1;do{D=B*+(C|0);E=-1;do{F=+g[u>>2];G=+g[w>>2];g[t>>2]=D+ +g[a>>2];g[v>>2]=B*+(E|0)+F;g[x>>2]=z+G;H=gr(t)|0;E=E+1|0;}while((E|0)<2&(H|0)==0);C=C+1|0;}while((C|0)<2&(H|0)==0);A=A+1|0;}while((A|0)<5&(H|0)==0);y=y+1|0;I=(H|0)==0;}while((y|0)<5&I);if(!I){J=H;K=13;break}L=e+4|0;M=e+8|0}else{J=k;K=13}}while(0);do{if((K|0)==13){k=l|0;g[k>>2]=+g[t>>2];g[l+4>>2]=+g[v>>2];z=+g[x>>2];g[x>>2]=z+.25;g[l+8>>2]=z+-50.0;lr(n,t,k,4,-1);Vx(o|0,n|0,36)|0;if((c[m>>2]|0)==0){k=m+8|0;H=gr(k)|0;g[e>>2]=+g[k>>2];k=e+4|0;g[k>>2]=+g[m+12>>2];I=e+8|0;g[I>>2]=+g[m+16>>2];if((H|0)==0){L=k;M=I;break}else{q=H}r=36;s=0;i=f;return q|0}else{g[e>>2]=+g[t>>2];g[e+4>>2]=+g[v>>2];g[e+8>>2]=+g[x>>2];q=J;r=36;s=0;i=f;return q|0}}}while(0);g[e>>2]=+g[a>>2];g[L>>2]=+g[u>>2];g[M>>2]=+g[w>>2];z=+g[a>>2];a=h|0;g[a>>2]=z+ +g[b>>2];B=+g[u>>2];g[h+4>>2]=B+ +g[b+4>>2];D=+g[w>>2];g[h+8>>2]=D+ +g[b+8>>2];b=j|0;g[b>>2]=z+ +g[d>>2];g[j+4>>2]=B+ +g[d+4>>2];g[j+8>>2]=D+ +g[d+8>>2];d=qr(a,b,-1,4)|0;a:do{if((d|0)==0){N=0}else{b=c[637759]|0;a=d;while(1){j=c[a+4>>2]|0;if((c[b+(j*28|0)+4>>2]&5|0)!=0){N=j;break a}j=c[a+16>>2]|0;if((j|0)==0){O=d;break}else{a=j}}while(1){a=c[O+4>>2]|0;if((a|0)!=0){N=a;break a}if((c[637756]|0)>0){if((c[(c[637759]|0)+20>>2]|0)!=0){N=0;break a}}else{tp(53776,(p=i,i=i+8|0,c[p>>2]=0,p)|0);i=p}a=c[O+16>>2]|0;if((a|0)==0){N=0;break}else{O=a}}}}while(0);or(d);q=N;r=36;s=0;i=f;return q|0}function bq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0;d=c[637753]|0;e=b+8|0;g[e>>2]=0.0;f=b+4|0;g[f>>2]=0.0;g[b>>2]=0.0;h=c[d+(a*24|0)+8>>2]|0;if((h|0)<=0){i=0.0;j=0.0;k=0.0;l=+(h|0);m=.5/l;n=m;o=i*n;g[b>>2]=o;p=n*j;g[f>>2]=p;q=n*k;g[e>>2]=q;return}r=c[d+(a*24|0)+12>>2]|0;a=c[637751]|0;d=c[637749]|0;s=c[637745]|0;t=0;u=0.0;v=0.0;w=0.0;while(1){x=c[a+(r+t<<2)>>2]|0;y=(x|0)>-1?x:-x|0;x=c[d+(y<<3)>>2]|0;z=u+ +g[s+(x*12|0)>>2];g[b>>2]=z;A=v+ +g[s+(x*12|0)+4>>2];g[f>>2]=A;B=w+ +g[s+(x*12|0)+8>>2];g[e>>2]=B;x=c[d+(y<<3)+4>>2]|0;C=z+ +g[s+(x*12|0)>>2];g[b>>2]=C;z=A+ +g[s+(x*12|0)+4>>2];g[f>>2]=z;A=B+ +g[s+(x*12|0)+8>>2];g[e>>2]=A;x=t+1|0;if((x|0)<(h|0)){t=x;u=C;v=z;w=A}else{i=C;j=z;k=A;break}}l=+(h|0);m=.5/l;n=m;o=i*n;g[b>>2]=o;p=n*j;g[f>>2]=p;q=n*k;g[e>>2]=q;return}function cq(a){a=a|0;return(c[(c[637759]|0)+(a*28|0)+8>>2]|0)>>>1&1^1|0}function dq(a){a=a|0;return c[(c[637759]|0)+(a*28|0)>>2]&256|0}function eq(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,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0;e=i;i=i+16|0;f=e|0;h=c[637759]|0;if((c[h+(a*28|0)+4>>2]&4|0)==0){j=0;i=e;return j|0}if((c[h+(d*28|0)+4>>2]&4|0)==0){j=0;i=e;return j|0}if((c[h+(d*28|0)+8>>2]&2|0)==0){j=0;i=e;return j|0}h=c[637757]|0;k=0;while(1){if(+g[h+(a*48|0)+12+(k<<2)>>2]>+g[h+(d*48|0)+24+(k<<2)>>2]+10.0){j=0;l=25;break}m=k+1|0;if(+g[h+(a*48|0)+24+(k<<2)>>2]<+g[h+(d*48|0)+12+(k<<2)>>2]+-10.0){j=0;l=25;break}if((m|0)<3){k=m}else{l=6;break}}if((l|0)==6){k=h+(a*48|0)+4|0;m=c[k>>2]|0;if((m|0)<=0){j=0;i=e;return j|0}n=h+(a*48|0)+8|0;o=h+(d*48|0)+4|0;p=h+(d*48|0)+8|0;h=f|0;q=0;r=c[o>>2]|0;s=m;a:while(1){m=c[637755]|0;t=c[m+((c[n>>2]|0)+q<<2)>>2]|0;u=t>>>31;v=(t|0)>-1?t:-t|0;if((r|0)>0){t=0;w=m;m=r;while(1){x=c[w+((c[p>>2]|0)+t<<2)>>2]|0;if((v|0)==(((x|0)>-1?x:-x|0)|0)){bq(v,h);if(((Ko(h)|0)&56|0)!=0){break a}y=c[o>>2]|0}else{y=m}x=t+1|0;if((x|0)>=(y|0)){break}t=x;w=c[637755]|0;m=y}z=y;A=c[k>>2]|0}else{z=r;A=s}m=q+1|0;if((m|0)<(A|0)){q=m;r=z;s=A}else{j=0;l=25;break}}if((l|0)==25){i=e;return j|0}A=c[637753]|0;s=c[164946]|0;if((s|0)==0){j=0;i=e;return j|0}z=c[s+44>>2]|0;do{if((z|0)==0){tp(54768,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;r=c[164946]|0;c[164946]=c[r+44>>2];c[164928]=(c[164928]|0)+1;if((r|0)==0){j=0}else{B=r;break}i=e;return j|0}else{c[164946]=z;c[164928]=(c[164928]|0)+1;B=s}}while(0);c[B>>2]=d;c[B+4>>2]=v;c[B+8>>2]=0;C=+g[h>>2];g[B+12>>2]=C;D=+g[f+4>>2];g[B+16>>2]=D;E=+g[f+8>>2];g[B+20>>2]=E;f=c[A+(v*24|0)>>2]^u;u=c[637747]|0;g[B+24>>2]=C+ +g[u+(f*20|0)>>2]*-2.0;g[B+28>>2]=D+ +g[u+(f*20|0)+4>>2]*-2.0;g[B+32>>2]=E+ +g[u+(f*20|0)+8>>2]*-2.0;c[B+36>>2]=8;f=B+40|0;b[f>>1]=1;if(+Wp(d)<800.0){b[f>>1]=201}c[B+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=B;c[154376]=(c[154376]|0)+1;j=1;i=e;return j|0}else if((l|0)==25){i=e;return j|0}return 0}function fq(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,r=0,s=0.0,t=0.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,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0,R=0,S=0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0.0,$=0.0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0,Aa=0,Ba=0.0,Ca=0.0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0,Ia=0.0,Ja=0,Ka=0,La=0,Ma=0,Na=0.0,Oa=0.0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0.0,Ya=0.0,Za=0,_a=0,$a=0,ab=0.0,bb=0.0,cb=0.0,db=0.0,eb=0.0,fb=0.0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0.0,qb=0,rb=0.0,sb=0.0,tb=0.0,ub=0.0,vb=0.0,wb=0.0,xb=0.0,yb=0.0,zb=0.0,Ab=0,Bb=0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0.0,Hb=0.0,Ib=0,Jb=0,Kb=0,Lb=0.0,Mb=0.0,Nb=0,Ob=0.0,Pb=0.0,Qb=0,Rb=0,Sb=0,Tb=0.0,Ub=0.0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0.0,Zb=0,_b=0,$b=0,ac=0,bc=0;e=i;i=i+16|0;f=e|0;h=c[637759]|0;if((c[h+(a*28|0)+4>>2]&1|0)==0){j=0;i=e;return j|0}if((c[h+(d*28|0)+4>>2]&1|0)==0){j=0;i=e;return j|0}h=c[637757]|0;k=0;while(1){if(+g[h+(a*48|0)+12+(k<<2)>>2]>+g[h+(d*48|0)+24+(k<<2)>>2]+10.0){j=0;l=38;break}m=k+1|0;if(+g[h+(a*48|0)+24+(k<<2)>>2]<+g[h+(d*48|0)+12+(k<<2)>>2]+-10.0){j=0;l=38;break}if((m|0)<2){k=m}else{l=7;break}}if((l|0)==7){if(+g[h+(d*48|0)+20>>2]>+g[h+(a*48|0)+32>>2]){j=0;i=e;return j|0}k=h+(a*48|0)+4|0;m=c[k>>2]|0;if((m|0)<=0){j=0;i=e;return j|0}n=h+(a*48|0)+8|0;o=h+(d*48|0)+4|0;p=h+(d*48|0)+8|0;h=f|0;q=f+4|0;r=f+8|0;s=0.0;t=99999.0;f=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;F=m;while(1){m=c[637755]|0;G=c[m+((c[n>>2]|0)+u<<2)>>2]|0;H=(G|0)>-1?G:-G|0;G=c[637753]|0;do{if((c[G+(H*24|0)+4>>2]&4|0)==0){I=E;J=D;K=C;L=B;M=A;N=z;O=y;P=x;Q=w;R=v;S=f;U=t;V=s;W=F}else{X=c[o>>2]|0;if((X|0)<=0){I=E;J=D;K=C;L=B;M=A;N=z;O=y;P=x;Q=w;R=v;S=f;U=t;V=s;W=F;break}Y=G+(H*24|0)+8|0;Z=G+(H*24|0)+12|0;_=s;$=t;aa=f;ba=0;ca=v;da=w;ea=x;fa=y;ga=z;ha=A;ia=B;ja=C;ka=D;la=E;ma=m;na=G;oa=X;while(1){X=c[ma+((c[p>>2]|0)+ba<<2)>>2]|0;pa=(X|0)>-1?X:-X|0;do{if((c[na+(pa*24|0)+4>>2]&4|0)==0){qa=la;ra=ka;sa=ja;ta=ia;ua=ha;va=ga;wa=fa;xa=ea;ya=da;za=ca;Aa=aa;Ba=$;Ca=_;Da=oa}else{X=c[Y>>2]|0;if((X|0)<=0){qa=la;ra=ka;sa=ja;ta=ia;ua=ha;va=ga;wa=fa;xa=ea;ya=da;za=ca;Aa=aa;Ba=$;Ca=_;Da=oa;break}Ea=na+(pa*24|0)+8|0;Fa=na+(pa*24|0)+12|0;Ga=na+(pa*24|0)|0;Ha=_;Ia=$;Ja=aa;Ka=0;La=ca;Ma=da;Na=ea;Oa=fa;Pa=ga;Qa=ha;Ra=ia;Sa=ja;Ta=ka;Ua=la;Va=c[Ea>>2]|0;Wa=X;while(1){if((Va|0)>0){Xa=Ha;Ya=Ia;X=Ja;Za=0;_a=La;$a=Ma;ab=Na;bb=Oa;cb=Pa;db=Qa;eb=Ra;fb=Sa;gb=Ta;hb=Ua;while(1){ib=c[637751]|0;jb=c[ib+((c[Z>>2]|0)+Ka<<2)>>2]|0;kb=(jb|0)>-1?jb:-jb|0;lb=c[ib+((c[Fa>>2]|0)+Za<<2)>>2]|0;do{if((kb|0)==(((lb|0)>-1?lb:-lb|0)|0)){ib=jb>>>31;mb=c[637749]|0;nb=c[mb+(kb<<3)+4>>2]|0;ob=c[637745]|0;pb=+g[ob+(nb*12|0)>>2];qb=c[mb+(kb<<3)>>2]|0;rb=+g[ob+(qb*12|0)>>2];sb=pb-rb;tb=+g[ob+(nb*12|0)+4>>2];ub=+g[ob+(qb*12|0)+4>>2];vb=tb-ub;wb=+g[ob+(nb*12|0)+8>>2];xb=+g[ob+(qb*12|0)+8>>2];yb=wb-xb;zb=+T(sb*sb+vb*vb+yb*yb);yb=(pb+rb)*.5;rb=(tb+ub)*.5;ub=(wb+xb)*.5;qb=c[mb+(kb<<3)+(ib<<2)>>2]|0;nb=c[mb+(kb<<3)+((ib^1)<<2)>>2]|0;xb=+g[ob+(qb*12|0)>>2]- +g[ob+(nb*12|0)>>2];wb=+g[ob+(qb*12|0)+4>>2]- +g[ob+(nb*12|0)+4>>2];tb=+g[ob+(qb*12|0)+8>>2]- +g[ob+(nb*12|0)+8>>2];nb=c[Ga>>2]|0;ob=c[637747]|0;qb=ob+(nb*20|0)|0;ib=ob+(nb*20|0)+8|0;mb=ob+(nb*20|0)+4|0;g[h>>2]=wb*+g[ib>>2]-tb*+g[mb>>2];g[q>>2]=tb*+g[qb>>2]-xb*+g[ib>>2];g[r>>2]=xb*+g[mb>>2]-wb*+g[qb>>2];+dn(h);wb=+g[h>>2];xb=yb+wb*5.0;tb=+g[q>>2];pb=rb+tb*5.0;vb=+g[r>>2];sb=yb+wb*.1;wb=rb+tb*.1;tb=ub+vb*.1;rb=ub+vb*5.0+.125;vb=tb+(sb*-0.0+wb*-0.0);if(!(vb<Ya)){if(!(vb<Ya+1.0&zb>Xa)){Ab=hb;Bb=gb;Cb=fb;Db=eb;Eb=db;Fb=cb;Gb=bb;Hb=ab;Ib=$a;Jb=_a;Kb=X;Lb=Ya;Mb=Xa;break}}Ab=d;Bb=jb;Cb=sb;Db=wb;Eb=tb;Fb=xb;Gb=pb;Hb=rb;Ib=2;Jb=1;Kb=1;Lb=vb;Mb=zb}else{Ab=hb;Bb=gb;Cb=fb;Db=eb;Eb=db;Fb=cb;Gb=bb;Hb=ab;Ib=$a;Jb=_a;Kb=X;Lb=Ya;Mb=Xa}}while(0);jb=Za+1|0;Nb=c[Ea>>2]|0;if((jb|0)<(Nb|0)){Xa=Mb;Ya=Lb;X=Kb;Za=jb;_a=Jb;$a=Ib;ab=Hb;bb=Gb;cb=Fb;db=Eb;eb=Db;fb=Cb;gb=Bb;hb=Ab}else{break}}Ob=Mb;Pb=Lb;Qb=Kb;Rb=Jb;Sb=Ib;Tb=Hb;Ub=Gb;Vb=Fb;Wb=Eb;Xb=Db;Yb=Cb;Zb=Bb;_b=Ab;$b=Nb;ac=c[Y>>2]|0}else{Ob=Ha;Pb=Ia;Qb=Ja;Rb=La;Sb=Ma;Tb=Na;Ub=Oa;Vb=Pa;Wb=Qa;Xb=Ra;Yb=Sa;Zb=Ta;_b=Ua;$b=Va;ac=Wa}hb=Ka+1|0;if((hb|0)<(ac|0)){Ha=Ob;Ia=Pb;Ja=Qb;Ka=hb;La=Rb;Ma=Sb;Na=Tb;Oa=Ub;Pa=Vb;Qa=Wb;Ra=Xb;Sa=Yb;Ta=Zb;Ua=_b;Va=$b;Wa=ac}else{break}}qa=_b;ra=Zb;sa=Yb;ta=Xb;ua=Wb;va=Vb;wa=Ub;xa=Tb;ya=Sb;za=Rb;Aa=Qb;Ba=Pb;Ca=Ob;Da=c[o>>2]|0}}while(0);pa=ba+1|0;if((pa|0)>=(Da|0)){break}_=Ca;$=Ba;aa=Aa;ba=pa;ca=za;da=ya;ea=xa;fa=wa;ga=va;ha=ua;ia=ta;ja=sa;ka=ra;la=qa;ma=c[637755]|0;na=c[637753]|0;oa=Da}I=qa;J=ra;K=sa;L=ta;M=ua;N=va;O=wa;P=xa;Q=ya;R=za;S=Aa;U=Ba;V=Ca;W=c[k>>2]|0}}while(0);G=u+1|0;if((G|0)<(W|0)){s=V;t=U;f=S;u=G;v=R;w=Q;x=P;y=O;z=N;A=M;B=L;C=K;D=J;E=I;F=W}else{break}}if((S|0)==0){j=0;i=e;return j|0}S=c[164946]|0;if((S|0)==0){j=0;i=e;return j|0}W=c[S+44>>2]|0;do{if((W|0)==0){tp(54768,(F=i,i=i+1|0,i=i+7&-8,c[F>>2]=0,F)|0);i=F;F=c[164946]|0;c[164946]=c[F+44>>2];c[164928]=(c[164928]|0)+1;if((F|0)==0){j=0}else{bc=F;break}i=e;return j|0}else{c[164946]=W;c[164928]=(c[164928]|0)+1;bc=S}}while(0);c[bc>>2]=I;c[bc+4>>2]=0;c[bc+8>>2]=J;g[bc+12>>2]=K;g[bc+16>>2]=L;g[bc+20>>2]=M;g[bc+24>>2]=N;g[bc+28>>2]=O;g[bc+32>>2]=P;c[bc+36>>2]=Q;Q=bc+40|0;b[Q>>1]=R;c[bc+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=bc;bc=c[637759]|0;do{if((c[bc+(a*28|0)+8>>2]&2|0)!=0){if((c[bc+(d*28|0)+8>>2]&2|0)!=0){break}b[Q>>1]=~~(+g[637849]+ +((R&65535)>>>0))}}while(0);c[154392]=(c[154392]|0)+1;j=1;i=e;return j|0}else if((l|0)==38){i=e;return j|0}return 0}function gq(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,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.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0.0,Wa=0.0,Xa=0.0,Ya=0.0,Za=0.0,_a=0.0,$a=0.0,ab=0.0,bb=0.0,cb=0.0,db=0.0,eb=0.0,fb=0.0,gb=0.0,hb=0.0,ib=0.0,jb=0.0,kb=0.0,lb=0.0,mb=0.0,nb=0.0,ob=0.0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0.0,yb=0.0,zb=0.0,Ab=0.0,Bb=0.0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0.0,Mb=0,Nb=0,Ob=0.0,Pb=0.0,Qb=0.0,Rb=0.0,Sb=0.0,Tb=0.0,Ub=0.0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0.0,Zb=0.0,_b=0.0,$b=0.0,ac=0.0,bc=0.0,cc=0.0,dc=0.0,ec=0.0,fc=0.0,gc=0.0,hc=0.0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0.0,oc=0.0,pc=0.0,qc=0.0,rc=0.0,sc=0.0,tc=0.0,uc=0.0,vc=0.0,wc=0.0,xc=0.0,yc=0.0,zc=0.0,Ac=0.0,Bc=0.0,Cc=0.0,Dc=0.0,Ec=0.0,Fc=0.0,Gc=0.0,Hc=0.0,Ic=0.0,Jc=0.0,Kc=0.0,Lc=0.0,Mc=0.0,Nc=0.0,Oc=0.0,Pc=0,Qc=0,Rc=0.0,Sc=0,Tc=0,Uc=0,Vc=0.0,Wc=0,Xc=0,Yc=0.0,Zc=0.0,_c=0.0,$c=0.0,ad=0.0,bd=0.0,cd=0.0,dd=0.0,ed=0.0,fd=0.0,gd=0.0,hd=0.0,id=0.0,jd=0.0,kd=0.0,ld=0.0,md=0.0,nd=0.0,od=0.0,pd=0.0,qd=0.0,rd=0.0,sd=0.0,td=0.0,ud=0.0,vd=0.0,wd=0.0,xd=0.0,yd=0,zd=0,Ad=0,Bd=0,Cd=0.0,Dd=0.0,Ed=0.0,Fd=0.0,Gd=0.0,Hd=0.0,Id=0.0,Jd=0,Kd=0.0,Ld=0.0,Md=0.0,Nd=0.0,Od=0.0,Pd=0.0,Qd=0.0,Rd=0.0,Sd=0.0,Td=0.0,Ud=0.0,Vd=0.0,Wd=0.0,Xd=0.0,Yd=0.0,Zd=0.0,_d=0.0,$d=0.0,ae=0.0,be=0.0,ce=0.0,de=0.0,ee=0.0,fe=0.0,ge=0.0,he=0.0,ie=0.0,je=0.0,ke=0,le=0,me=0.0,ne=0,oe=0.0,pe=0.0,qe=0.0,re=0.0,se=0.0,te=0.0,ue=0.0,ve=0.0,we=0.0,xe=0.0,ye=0.0,ze=0.0,Ae=0.0,Be=0.0,Ce=0.0,De=0.0,Ee=0.0,Fe=0.0,Ge=0.0,He=0.0,Ie=0.0,Je=0.0,Ke=0.0,Le=0.0,Me=0.0,Ne=0.0,Oe=0.0,Pe=0.0,Qe=0.0,Re=0.0,Se=0.0,Te=0.0,Ue=0.0,Ve=0.0,We=0.0,Xe=0.0,Ye=0.0,Ze=0.0,_e=0.0,$e=0.0,af=0.0,bf=0.0,cf=0.0,df=0.0,ef=0.0,ff=0.0,gf=0.0,hf=0.0,jf=0.0,kf=0.0,lf=0.0,mf=0.0,nf=0,of=0,pf=0,qf=0.0,rf=0.0,sf=0.0,tf=0.0,uf=0.0,vf=0.0,wf=0.0,xf=0.0,yf=0.0,zf=0.0,Af=0.0,Bf=0.0,Cf=0.0,Df=0.0,Ef=0.0,Ff=0.0,Gf=0.0,Hf=0.0,If=0.0,Jf=0.0,Kf=0.0,Lf=0.0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0;e=i;i=i+184|0;f=e|0;h=e+40|0;j=e+56|0;k=e+72|0;l=e+88|0;m=e+104|0;n=e+144|0;o=m;p=c[637759]|0;q=c[p+(a*28|0)+4>>2]|0;if((q&5|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}if((c[p+(d*28|0)+4>>2]&5|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}p=c[637757]|0;w=q&4;q=0;while(1){if(+g[p+(a*48|0)+12+(q<<2)>>2]>+g[p+(d*48|0)+24+(q<<2)>>2]+10.0){r=0;x=118;break}y=q+1|0;if(+g[p+(a*48|0)+24+(q<<2)>>2]<+g[p+(d*48|0)+12+(q<<2)>>2]+-10.0){r=0;x=118;break}if((y|0)<2){q=y}else{x=5;break}}if((x|0)==5){q=p+(a*48|0)+4|0;y=c[q>>2]|0;if((y|0)<=0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}z=p+(a*48|0)+8|0;A=(w|0)==0;w=h|0;B=h+4|0;C=h+8|0;h=p+(d*48|0)+4|0;D=p+(d*48|0)+8|0;p=j|0;E=j+4|0;F=j+8|0;G=k|0;H=k+4|0;I=k+8|0;J=0;K=0;L=0;M=0.0;N=0.0;O=99999.0;P=99999.0;Q=0.0;R=0.0;U=0.0;V=0.0;W=0.0;X=0.0;Y=0.0;Z=0.0;_=0.0;$=0.0;aa=0.0;ba=0.0;ca=0.0;da=0.0;ea=0.0;fa=0.0;ga=0.0;ha=0.0;ia=0;ja=0;ka=y;while(1){y=c[(c[637755]|0)+((c[z>>2]|0)+ja<<2)>>2]|0;la=(y|0)>-1?y:-y|0;ma=c[637753]|0;na=ma+(la*24|0)+4|0;oa=c[na>>2]|0;do{if((oa&4|0)==0){if(A){pa=ia;qa=ha;ra=ga;sa=fa;ta=ea;ua=da;va=ca;wa=ba;xa=aa;ya=$;za=_;Aa=Z;Ba=Y;Ca=X;Da=W;Ea=V;Fa=U;Ga=R;Ha=Q;Ia=P;Ja=O;Ka=N;La=M;Ma=L;Na=K;Oa=J;Pa=ka;break}Qa=y>>>31^1^c[ma+(la*24|0)>>2];Ra=c[637747]|0;if(+g[Ra+(Qa*20|0)+8>>2]+(+g[Ra+(Qa*20|0)>>2]*0.0+ +g[Ra+(Qa*20|0)+4>>2]*0.0)<.7){pa=ia;qa=ha;ra=ga;sa=fa;ta=ea;ua=da;va=ca;wa=ba;xa=aa;ya=$;za=_;Aa=Z;Ba=Y;Ca=X;Da=W;Ea=V;Fa=U;Ga=R;Ha=Q;Ia=P;Ja=O;Ka=N;La=M;Ma=L;Na=K;Oa=J;Pa=ka}else{x=12}}else{x=12}}while(0);do{if((x|0)==12){x=0;Qa=ma+(la*24|0)+8|0;if((c[Qa>>2]|0)<=0){pa=ia;qa=ha;ra=ga;sa=fa;ta=ea;ua=da;va=ca;wa=ba;xa=aa;ya=$;za=_;Aa=Z;Ba=Y;Ca=X;Da=W;Ea=V;Fa=U;Ga=R;Ha=Q;Ia=P;Ja=O;Ka=N;La=M;Ma=L;Na=K;Oa=J;Pa=ka;break}Ra=ma+(la*24|0)+12|0;Sa=J;Ta=K;Ua=L;Va=M;Wa=N;Xa=O;Ya=P;Za=Q;_a=R;$a=U;ab=V;bb=W;cb=X;db=Y;eb=Z;fb=_;gb=$;hb=aa;ib=ba;jb=ca;kb=da;lb=ea;mb=fa;nb=ga;ob=ha;pb=ia;qb=0;rb=oa;while(1){sb=c[(c[637751]|0)+((c[Ra>>2]|0)+qb<<2)>>2]|0;if((rb&4|0)==0){tb=(sb^y)>>>31^1}else{tb=sb>>>31}ub=(sb|0)>-1?sb:-sb|0;sb=c[637749]|0;vb=c[sb+(ub<<3)+(((tb|0)==0)<<2)>>2]|0;wb=c[637745]|0;xb=+g[wb+(vb*12|0)>>2];yb=+g[wb+(vb*12|0)+4>>2];zb=+g[wb+(vb*12|0)+8>>2];vb=c[sb+(ub<<3)+(tb<<2)>>2]|0;Ab=+g[wb+(vb*12|0)>>2];Bb=+g[wb+(vb*12|0)+4>>2];Cb=+g[wb+(vb*12|0)+8>>2];Db=Ab-xb;Eb=Bb-yb;Fb=(Cb-zb)*0.0;g[w>>2]=Eb-Fb;g[B>>2]=Fb-Db;g[C>>2]=Db*0.0-Eb*0.0;+dn(w);vb=c[h>>2]|0;if((vb|0)>0){Eb=+g[B>>2];Db=+g[w>>2];Fb=+g[C>>2];wb=c[D>>2]|0;sb=c[637755]|0;Gb=c[637753]|0;Hb=c[637751]|0;Ib=c[637749]|0;Jb=c[637745]|0;Kb=Sa;Lb=xb*Db+yb*Eb+zb*Fb;Mb=Ta;Nb=Ua;Ob=Va;Pb=Wa;Qb=Xa;Rb=Ya;Sb=zb;zb=yb;yb=xb;xb=Cb;Cb=Bb;Bb=Ab;Ab=Za;Tb=_a;Ub=$a;Vb=ab;Wb=bb;Xb=cb;Yb=db;Zb=eb;_b=fb;$b=gb;ac=hb;bc=ib;cc=jb;dc=kb;ec=lb;fc=mb;gc=nb;hc=ob;ic=pb;jc=0;while(1){kc=c[sb+(wb+jc<<2)>>2]|0;lc=(kc|0)>-1?kc:-kc|0;do{if((c[Gb+(lc*24|0)+4>>2]&4|0)==0){mc=ic;nc=hc;oc=gc;pc=fc;qc=ec;rc=dc;sc=cc;tc=bc;uc=ac;vc=$b;wc=_b;xc=Zb;yc=Yb;zc=Xb;Ac=Wb;Bc=Vb;Cc=Ub;Dc=Tb;Ec=Ab;Fc=Bb;Gc=Cb;Hc=xb;Ic=yb;Jc=zb;Kc=Sb;Lc=Rb;Mc=Qb;Nc=Pb;Oc=Ob;Pc=Nb;Qc=Mb;Rc=Lb;Sc=Kb}else{kc=c[Gb+(lc*24|0)+8>>2]|0;if((kc|0)<=0){mc=ic;nc=hc;oc=gc;pc=fc;qc=ec;rc=dc;sc=cc;tc=bc;uc=ac;vc=$b;wc=_b;xc=Zb;yc=Yb;zc=Xb;Ac=Wb;Bc=Vb;Cc=Ub;Dc=Tb;Ec=Ab;Fc=Bb;Gc=Cb;Hc=xb;Ic=yb;Jc=zb;Kc=Sb;Lc=Rb;Mc=Qb;Nc=Pb;Oc=Ob;Pc=Nb;Qc=Mb;Rc=Lb;Sc=Kb;break}Tc=c[Gb+(lc*24|0)+12>>2]|0;Uc=Kb;Vc=Lb;Wc=Mb;Xc=Nb;Yc=Ob;Zc=Pb;_c=Qb;$c=Rb;ad=Sb;bd=zb;cd=yb;dd=xb;ed=Cb;fd=Bb;gd=Ab;hd=Tb;id=Ub;jd=Vb;kd=Wb;ld=Xb;md=Yb;nd=Zb;od=_b;pd=$b;qd=ac;rd=bc;sd=cc;td=dc;ud=ec;vd=fc;wd=gc;xd=hc;yd=ic;zd=0;while(1){Ad=c[Hb+(Tc+zd<<2)>>2]|0;Bd=(Ad|0)>-1?Ad:-Ad|0;Ad=c[Ib+(Bd<<3)>>2]|0;Cd=+g[Jb+(Ad*12|0)>>2];Dd=+g[Jb+(Ad*12|0)+4>>2];Ed=+g[Jb+(Ad*12|0)+8>>2];Ad=c[Ib+(Bd<<3)+4>>2]|0;Fd=+g[Jb+(Ad*12|0)>>2];Gd=+g[Jb+(Ad*12|0)+4>>2];Hd=+g[Jb+(Ad*12|0)+8>>2];Id=Cd*Db+Dd*Eb+Ed*Fb-Vc;do{if(Id<-.1|Id>.1){Jd=yd;Kd=xd;Ld=wd;Md=vd;Nd=ud;Od=td;Pd=sd;Qd=rd;Rd=qd;Sd=pd;Td=od;Ud=nd;Vd=md;Wd=ld;Xd=kd;Yd=jd;Zd=id;_d=hd;$d=gd;ae=fd;be=ed;ce=dd;de=cd;ee=bd;fe=ad;ge=$c;he=_c;ie=Zc;je=Yc;ke=Xc;le=Wc;me=Vc;ne=Uc}else{oe=Fd*Db+Gd*Eb+Hd*Fb-Vc;if(oe<-.1|oe>.1){Jd=yd;Kd=xd;Ld=wd;Md=vd;Nd=ud;Od=td;Pd=sd;Qd=rd;Rd=qd;Sd=pd;Td=od;Ud=nd;Vd=md;Wd=ld;Xd=kd;Yd=jd;Zd=id;_d=hd;$d=gd;ae=fd;be=ed;ce=dd;de=cd;ee=bd;fe=ad;ge=$c;he=_c;ie=Zc;je=Yc;ke=Xc;le=Wc;me=Vc;ne=Uc;break}oe=Fb*0.0;pe=oe-Eb;qe=Db-oe;oe=Eb*0.0-Db*0.0;re=pe*pe+qe*qe+oe*oe;se=(cd*pe+bd*qe+ad*oe)/re;te=(fd*pe+ed*qe+dd*oe)/re;ue=(Cd*pe+Dd*qe+Ed*oe)/re;ve=(Fd*pe+Gd*qe+Hd*oe)/re;if(se>te){we=cd;xe=bd;ye=fd;ze=ed;Ae=ad;Be=dd;Ce=se;De=te}else{we=fd;xe=ed;ye=cd;ze=bd;Ae=dd;Be=ad;Ce=te;De=se}if(ue>ve){Ee=Cd;Fe=Dd;Ge=Fd;He=Gd;Ie=Ed;Je=Hd;Ke=ue;Le=ve}else{Ee=Fd;Fe=Gd;Ge=Cd;He=Dd;Ie=Hd;Je=Ed;Ke=ve;Le=ue}if(!(Ce>Le&Ke>De)){Jd=yd;Kd=xd;Ld=wd;Md=vd;Nd=ud;Od=td;Pd=sd;Qd=rd;Rd=qd;Sd=pd;Td=od;Ud=nd;Vd=md;Wd=ld;Xd=kd;Yd=jd;Zd=id;_d=hd;$d=gd;ae=we;be=xe;ce=Ae;de=ye;ee=ze;fe=Be;ge=$c;he=_c;ie=Zc;je=Yc;ke=Xc;le=Wc;me=Vc;ne=Uc;break}ue=De;ve=Le;do{if(ue+-.5<ve){se=Ke;te=Ce;if(!(se<te+.5)){x=34;break}if(!(ve+-.5<ue)){x=34;break}if(!(te<se+.5)){x=34;break}Me=Ee;Ne=Fe;Oe=Ie;Pe=we;Qe=xe;Re=Ae;Se=Ge;Te=He;Ue=Je;Ve=ye;We=ze;Xe=Be;Ye=Ie-Ae;Ze=Je-Be}else{x=34}}while(0);do{if((x|0)==34){x=0;do{if(ue>ve+-.1&ue<ve+.1){_e=Ge;$e=He;af=Je;bf=ye;cf=ze;df=Be;ef=Je-Be}else{if(De<Le){se=Be+(Ae-Be)*(Le-De)/(Ce-De);_e=Ge;$e=He;af=Je;bf=Ge;cf=He;df=se;ef=Je-se;break}else{se=Je+(De-Le)*(Ie-Je)/(Ke-Le);_e=ye;$e=ze;af=se;bf=ye;cf=ze;df=Be;ef=se-Be;break}}}while(0);se=Ce;te=Ke;if(se>te+-.1&se<te+.1){Me=Ee;Ne=Fe;Oe=Ie;Pe=we;Qe=xe;Re=Ae;Se=_e;Te=$e;Ue=af;Ve=bf;We=cf;Xe=df;Ye=Ie-Ae;Ze=ef;break}if(Ce<Ke){te=Je+(Ce-Le)*(Ie-Je)/(Ke-Le);Me=we;Ne=xe;Oe=te;Pe=we;Qe=xe;Re=Ae;Se=_e;Te=$e;Ue=af;Ve=bf;We=cf;Xe=df;Ye=te-Ae;Ze=ef;break}else{te=Be+(Ae-Be)*(Ke-De)/(Ce-De);Me=Ee;Ne=Fe;Oe=Ie;Pe=Ee;Qe=Fe;Re=te;Se=_e;Te=$e;Ue=af;Ve=bf;We=cf;Xe=df;Ye=Ie-te;Ze=ef;break}}}while(0);do{if(Ze>Ye+-1.0&Ze<Ye+1.0){ve=(Ve+Pe)*.5;g[p>>2]=ve;ue=(We+Qe)*.5;g[E>>2]=ue;te=(Xe+Re)*.5;g[F>>2]=te;se=(Se+Me)*.5;g[G>>2]=se;re=(Te+Ne)*.5;g[H>>2]=re;oe=(Ue+Oe)*.5;g[I>>2]=oe;ff=Ze;gf=ve;hf=ue;jf=te;kf=se;lf=re;mf=oe}else{if(Ze<Ye){g[p>>2]=Ve;g[E>>2]=We;g[F>>2]=Xe;g[G>>2]=Se;g[H>>2]=Te;g[I>>2]=Ue;ff=Ze;gf=Ve;hf=We;jf=Xe;kf=Se;lf=Te;mf=Ue;break}else{g[p>>2]=Pe;g[E>>2]=Qe;g[F>>2]=Re;g[G>>2]=Me;g[H>>2]=Ne;g[I>>2]=Oe;ff=Ye;gf=Pe;hf=Qe;jf=Re;kf=Me;lf=Ne;mf=Oe;break}}}while(0);oe=Me-Se;re=Ne-Te;se=Oe-Ue;te=+T(se*se+(re*re+oe*oe));if((c[na>>2]&4|0)==0){if(!(ff<$c)){if(!(ff<$c+1.0&te>Zc)){Jd=yd;Kd=xd;Ld=wd;Md=vd;Nd=ud;Od=td;Pd=sd;Qd=rd;Rd=qd;Sd=pd;Td=od;Ud=nd;Vd=md;Wd=ld;Xd=kd;Yd=jd;Zd=id;_d=hd;$d=gd;ae=we;be=xe;ce=Ae;de=ye;ee=ze;fe=Be;ge=$c;he=_c;ie=Zc;je=Yc;ke=Xc;le=Wc;me=ff;ne=Uc;break}}Jd=yd;Kd=Db;Ld=Eb;Md=Fb;Nd=kf;Od=lf;Pd=mf;Qd=gf;Rd=hf;Sd=jf;Td=od;Ud=nd;Vd=md;Wd=ld;Xd=kd;Yd=jd;Zd=id;_d=hd;$d=gd;ae=we;be=xe;ce=Ae;de=ye;ee=ze;fe=Be;ge=ff;he=_c;ie=te;je=Yc;ke=Xc;le=ub;me=ff;ne=1;break}else{if(!(ff<_c)){if(!(ff<_c+1.0&te>Yc)){Jd=yd;Kd=xd;Ld=wd;Md=vd;Nd=ud;Od=td;Pd=sd;Qd=rd;Rd=qd;Sd=pd;Td=od;Ud=nd;Vd=md;Wd=ld;Xd=kd;Yd=jd;Zd=id;_d=hd;$d=gd;ae=we;be=xe;ce=Ae;de=ye;ee=ze;fe=Be;ge=$c;he=_c;ie=Zc;je=Yc;ke=Xc;le=Wc;me=ff;ne=Uc;break}}Jd=ub;Kd=xd;Ld=wd;Md=vd;Nd=ud;Od=td;Pd=sd;Qd=rd;Rd=qd;Sd=pd;Td=Db;Ud=Eb;Vd=Fb;Wd=kf;Xd=lf;Yd=mf;Zd=gf;_d=hf;$d=jf;ae=we;be=xe;ce=Ae;de=ye;ee=ze;fe=Be;ge=$c;he=ff;ie=Zc;je=te;ke=1;le=Wc;me=ff;ne=Uc;break}}}while(0);Ad=zd+1|0;if((Ad|0)<(kc|0)){Uc=ne;Vc=me;Wc=le;Xc=ke;Yc=je;Zc=ie;_c=he;$c=ge;ad=fe;bd=ee;cd=de;dd=ce;ed=be;fd=ae;gd=$d;hd=_d;id=Zd;jd=Yd;kd=Xd;ld=Wd;md=Vd;nd=Ud;od=Td;pd=Sd;qd=Rd;rd=Qd;sd=Pd;td=Od;ud=Nd;vd=Md;wd=Ld;xd=Kd;yd=Jd;zd=Ad}else{mc=Jd;nc=Kd;oc=Ld;pc=Md;qc=Nd;rc=Od;sc=Pd;tc=Qd;uc=Rd;vc=Sd;wc=Td;xc=Ud;yc=Vd;zc=Wd;Ac=Xd;Bc=Yd;Cc=Zd;Dc=_d;Ec=$d;Fc=ae;Gc=be;Hc=ce;Ic=de;Jc=ee;Kc=fe;Lc=ge;Mc=he;Nc=ie;Oc=je;Pc=ke;Qc=le;Rc=me;Sc=ne;break}}}}while(0);lc=jc+1|0;if((lc|0)<(vb|0)){Kb=Sc;Lb=Rc;Mb=Qc;Nb=Pc;Ob=Oc;Pb=Nc;Qb=Mc;Rb=Lc;Sb=Kc;zb=Jc;yb=Ic;xb=Hc;Cb=Gc;Bb=Fc;Ab=Ec;Tb=Dc;Ub=Cc;Vb=Bc;Wb=Ac;Xb=zc;Yb=yc;Zb=xc;_b=wc;$b=vc;ac=uc;bc=tc;cc=sc;dc=rc;ec=qc;fc=pc;gc=oc;hc=nc;ic=mc;jc=lc}else{nf=Sc;of=Qc;pf=Pc;qf=Oc;rf=Nc;sf=Mc;tf=Lc;uf=Ec;vf=Dc;wf=Cc;xf=Bc;yf=Ac;zf=zc;Af=yc;Bf=xc;Cf=wc;Df=vc;Ef=uc;Ff=tc;Gf=sc;Hf=rc;If=qc;Jf=pc;Kf=oc;Lf=nc;Mf=mc;break}}}else{nf=Sa;of=Ta;pf=Ua;qf=Va;rf=Wa;sf=Xa;tf=Ya;uf=Za;vf=_a;wf=$a;xf=ab;yf=bb;zf=cb;Af=db;Bf=eb;Cf=fb;Df=gb;Ef=hb;Ff=ib;Gf=jb;Hf=kb;If=lb;Jf=mb;Kf=nb;Lf=ob;Mf=pb}jc=qb+1|0;if((jc|0)>=(c[Qa>>2]|0)){break}Sa=nf;Ta=of;Ua=pf;Va=qf;Wa=rf;Xa=sf;Ya=tf;Za=uf;_a=vf;$a=wf;ab=xf;bb=yf;cb=zf;db=Af;eb=Bf;fb=Cf;gb=Df;hb=Ef;ib=Ff;jb=Gf;kb=Hf;lb=If;mb=Jf;nb=Kf;ob=Lf;pb=Mf;qb=jc;rb=c[na>>2]|0}pa=Mf;qa=Lf;ra=Kf;sa=Jf;ta=If;ua=Hf;va=Gf;wa=Ff;xa=Ef;ya=Df;za=Cf;Aa=Bf;Ba=Af;Ca=zf;Da=yf;Ea=xf;Fa=wf;Ga=vf;Ha=uf;Ia=tf;Ja=sf;Ka=rf;La=qf;Ma=pf;Na=of;Oa=nf;Pa=c[q>>2]|0}}while(0);na=ja+1|0;if((na|0)<(Pa|0)){J=Oa;K=Na;L=Ma;M=La;N=Ka;O=Ja;P=Ia;Q=Ha;R=Ga;U=Fa;V=Ea;W=Da;X=Ca;Y=Ba;Z=Aa;_=za;$=ya;aa=xa;ba=wa;ca=va;da=ua;ea=ta;fa=sa;ga=ra;ha=qa;ia=pa;ja=na;ka=Pa}else{break}}Pa=(Ma|0)!=0;if(Pa&Ja>=0.0&Ja<+g[637839]){Ma=c[164946]|0;if((Ma|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}ka=c[Ma+44>>2]|0;do{if((ka|0)==0){tp(54768,(Nf=i,i=i+1|0,i=i+7&-8,c[Nf>>2]=0,Nf)|0);i=Nf;ja=c[164946]|0;c[164946]=c[ja+44>>2];c[164928]=(c[164928]|0)+1;if((ja|0)==0){r=0}else{Of=ja;break}s=36;t=0;u=40;v=0;i=e;return r|0}else{c[164946]=ka;c[164928]=(c[164928]|0)+1;Of=Ma}}while(0);c[Of>>2]=d;c[Of+4>>2]=0;c[Of+8>>2]=pa;g[Of+12>>2]=Fa+za*.1;g[Of+16>>2]=Ga+Aa*.1;g[Of+20>>2]=Ha+Ba*.1;g[Of+24>>2]=Ca+za*5.0;g[Of+28>>2]=Da+Aa*5.0;g[Of+32>>2]=Ea+Ba*5.0;c[Of+36>>2]=2;Ma=Of+40|0;b[Ma>>1]=0;ka=c[637759]|0;do{if((c[ka+(a*28|0)+8>>2]&2|0)!=0){if((c[ka+(d*28|0)+8>>2]&2|0)!=0){break}b[Ma>>1]=~~(+g[637849]+0.0)}}while(0);c[Of+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Of;c[154378]=(c[154378]|0)+1;r=1;s=36;t=0;u=40;v=0;i=e;return r|0}Of=(Oa|0)!=0;do{if(Of){Oa=l|0;g[Oa>>2]=ta+qa*-2.0;g[l+4>>2]=ua+ra*-2.0;g[l+8>>2]=va+sa*-2.0- +g[637841];Ma=gr(Oa)|0;Oa=c[637759]|0;if((c[Oa+(Ma*28|0)+4>>2]&4|0)==0){Pf=1;break}if(!(Ia<+g[637841]+24.0)){Pf=Of;break}if((c[Oa+(a*28|0)+8>>2]&2|0)==0){Pf=Of;break}if((c[Oa+(d*28|0)+8>>2]&2|0)==0){Pf=Of;break}Oa=c[164946]|0;if((Oa|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}Ma=c[Oa+44>>2]|0;do{if((Ma|0)==0){tp(54768,(Nf=i,i=i+1|0,i=i+7&-8,c[Nf>>2]=0,Nf)|0);i=Nf;ka=c[164946]|0;c[164946]=c[ka+44>>2];c[164928]=(c[164928]|0)+1;if((ka|0)==0){r=0}else{Qf=ka;break}s=36;t=0;u=40;v=0;i=e;return r|0}else{c[164946]=Ma;c[164928]=(c[164928]|0)+1;Qf=Oa}}while(0);c[Qf>>2]=d;c[Qf+4>>2]=0;c[Qf+8>>2]=Na;g[Qf+12>>2]=wa;g[Qf+16>>2]=xa;g[Qf+20>>2]=ya;g[Qf+24>>2]=ta+qa*15.0;g[Qf+28>>2]=ua+ra*15.0;g[Qf+32>>2]=va+sa*15.0;c[Qf+36>>2]=9;b[Qf+40>>1]=~~+g[637846];c[Qf+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Qf;c[154368]=(c[154368]|0)+1;r=1;s=36;t=0;u=40;v=0;i=e;return r|0}else{Pf=0}}while(0);do{if(Pa&Ja>0.0&Ja<+g[637842]){if(Pf){if(!(Ja-Ia<16.0)){break}}Qf=c[637759]|0;if((c[Qf+(a*28|0)+8>>2]&2|0)==0){break}if((c[Qf+(d*28|0)+8>>2]&2|0)==0){break}Qf=c[164946]|0;if((Qf|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}Na=c[Qf+44>>2]|0;do{if((Na|0)==0){tp(54768,(Nf=i,i=i+1|0,i=i+7&-8,c[Nf>>2]=0,Nf)|0);i=Nf;Of=c[164946]|0;c[164946]=c[Of+44>>2];c[164928]=(c[164928]|0)+1;if((Of|0)==0){r=0}else{Rf=Of;break}s=36;t=0;u=40;v=0;i=e;return r|0}else{c[164946]=Na;c[164928]=(c[164928]|0)+1;Rf=Qf}}while(0);c[Rf>>2]=d;c[Rf+4>>2]=0;c[Rf+8>>2]=pa;g[Rf+12>>2]=Fa+za*.1;g[Rf+16>>2]=Ga+Aa*.1;g[Rf+20>>2]=Ha+Ba*.1;g[Rf+24>>2]=Ca+za*5.0;g[Rf+28>>2]=Da+Aa*5.0;g[Rf+32>>2]=Ea+Ba*5.0;c[Rf+36>>2]=4;b[Rf+40>>1]=~~+g[637848];c[Rf+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Rf;c[154396]=(c[154396]|0)+1;r=1;s=36;t=0;u=40;v=0;i=e;return r|0}}while(0);if(!(Pa&Ja<0.0)){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}if(Ja>-0.0- +g[637839]){Pa=c[164946]|0;if((Pa|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}Rf=c[Pa+44>>2]|0;do{if((Rf|0)==0){tp(54768,(Nf=i,i=i+1|0,i=i+7&-8,c[Nf>>2]=0,Nf)|0);i=Nf;Pf=c[164946]|0;c[164946]=c[Pf+44>>2];c[164928]=(c[164928]|0)+1;if((Pf|0)==0){r=0}else{Sf=Pf;break}s=36;t=0;u=40;v=0;i=e;return r|0}else{c[164946]=Rf;c[164928]=(c[164928]|0)+1;Sf=Pa}}while(0);c[Sf>>2]=d;c[Sf+4>>2]=0;c[Sf+8>>2]=pa;g[Sf+12>>2]=Fa+za*.1;g[Sf+16>>2]=Ga+Aa*.1;g[Sf+20>>2]=Ha+Ba*.1;g[Sf+24>>2]=Ca+za*5.0;g[Sf+28>>2]=Da+Aa*5.0;g[Sf+32>>2]=Ea+Ba*5.0;c[Sf+36>>2]=2;b[Sf+40>>1]=1;c[Sf+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Sf;c[154372]=(c[154372]|0)+1;r=1;s=36;t=0;u=40;v=0;i=e;return r|0}Ia=+g[637861];do{if(Ia!=0.0){if(+S(+Ja)<Ia){break}else{r=0}s=36;t=0;u=40;v=0;i=e;return r|0}}while(0);Ia=Ca+za*2.0;za=Da+Aa*2.0;Aa=Ea+Ba*2.0;Sf=j|0;g[Sf>>2]=Ia;g[j+4>>2]=za;g[j+8>>2]=Ha;j=k|0;g[j>>2]=Ia;g[k+4>>2]=za;g[k+8>>2]=Aa+4.0;lr(n,Sf,j,2,-1);Vx(o|0,n|0,36)|0;if((c[m>>2]|0)!=0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}if(+g[m+4>>2]<1.0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}n=m+16|0;g[n>>2]=+g[n>>2]+1.0;if((gr(m+8|0)|0)!=(d|0)){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}m=mr(Sf,j,f|0,0,10)|0;a:do{if((m|0)>0){j=c[637759]|0;Sf=0;while(1){n=Sf+1|0;if((c[j+((c[f+(Sf<<2)>>2]|0)*28|0)>>2]&8|0)!=0){r=0;break}if((n|0)<(m|0)){Sf=n}else{break a}}s=36;t=0;u=40;v=0;i=e;return r|0}}while(0);m=c[164946]|0;if((m|0)==0){r=0;s=36;t=0;u=40;v=0;i=e;return r|0}f=c[m+44>>2]|0;do{if((f|0)==0){tp(54768,(Nf=i,i=i+1|0,i=i+7&-8,c[Nf>>2]=0,Nf)|0);i=Nf;Sf=c[164946]|0;c[164946]=c[Sf+44>>2];c[164928]=(c[164928]|0)+1;if((Sf|0)==0){r=0}else{Tf=Sf;break}s=36;t=0;u=40;v=0;i=e;return r|0}else{c[164946]=f;c[164928]=(c[164928]|0)+1;Tf=m}}while(0);c[Tf>>2]=d;c[Tf+4>>2]=0;c[Tf+8>>2]=pa;g[Tf+12>>2]=Fa;g[Tf+16>>2]=Ga;g[Tf+20>>2]=Ha;g[Tf+24>>2]=Ia;g[Tf+28>>2]=za;g[Tf+32>>2]=Aa;c[Tf+36>>2]=7;Aa=+S(+Ja);Ja=+g[637829];za=Ja;pa=~~(+g[637851]+Aa*50.0/za);m=Tf+40|0;b[m>>1]=pa;f=c[637759]|0;do{if((c[f+(d*28|0)+4>>2]&4|0)==0){if((c[f+(d*28|0)>>2]&128|0)!=0){break}Ia=Ja*+T(Aa*2.0/za);Ha=Ia*Ia*1.0e-4;if(Ha>+g[637844]){Nf=~~(+((pa&65535)>>>0)+ +g[637859]);b[m>>1]=Nf;Uf=Nf}else{Uf=pa}if(!(Ha>+g[637845])){break}b[m>>1]=~~(+g[637860]+ +((Uf&65535)>>>0))}}while(0);c[Tf+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Tf;c[154370]=(c[154370]|0)+1;r=1;s=36;t=0;u=40;v=0;i=e;return r|0}else if((x|0)==118){s=36;t=0;u=40;v=0;i=e;return r|0}return 0}function hq(a,b,c,d,e,f,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=+l;var m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0,C=0.0,D=0.0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,U=0.0,V=0.0,W=0,X=0.0,Y=0.0,Z=0,_=0.0,$=0,aa=0.0,ba=0.0,ca=0,da=0.0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0;m=+g[b>>2];n=+g[a>>2];o=m-n;p=b+4|0;q=+g[p>>2];r=a+4|0;s=+g[r>>2];t=q-s;u=b+8|0;v=a+8|0;w=+g[d>>2];x=+g[c>>2];y=w-x;z=d+4|0;A=+g[z>>2];B=c+4|0;C=+g[B>>2];D=A-C;E=d+8|0;F=c+8|0;if(y!=0.0){G=D/y;H=C-x*G;I=y*G+D*H;J=(n*y+s*D+ +g[v>>2]*0.0-I)/y;K=(m*y+q*D+ +g[u>>2]*0.0-I)/y;L=K;M=H+G*K;N=J;O=G*J+H}else{L=x;M=q;N=x;O=s}if(o!=0.0){q=t/o;H=s-q*n;J=+g[F>>2];G=o*q+t*H;K=(o*x+t*C+J*0.0-G)/o;y=+g[E>>2];I=(o*w+t*A+y*0.0-G)/o;P=I;Q=H+q*I;R=K;S=H+q*K;U=J;V=y}else{P=n;Q=A;R=n;S=C;U=+g[F>>2];V=+g[E>>2]}y=+g[f+12>>2];J=+g[f>>2];K=+g[f+4>>2];q=+g[f+8>>2];H=q*0.0;I=(y-(N*J+O*K+H))/q;o=(y-(L*J+M*K+H))/q;q=+g[e+12>>2];H=+g[e>>2];K=+g[e+4>>2];J=+g[e+8>>2];y=J*0.0;G=(q-(R*H+S*K+y))/J;t=(q-(P*H+Q*K+y))/J;do{if((N-x)*(N-w)+(O-C)*(O-A)+(I-U)*(I-V)>0.0){W=0;X=l}else{J=N-n;y=O-s;K=+g[v>>2];H=I-K;q=+T(J*J+y*y+H*H);H=q;y=l;if(!(H>y+-.5&H<y+.5)){if(!(q<l)){W=1;X=l;break}g[h>>2]=n;g[h+4>>2]=+g[r>>2];g[h+8>>2]=+g[v>>2];g[j>>2]=+g[a>>2];g[j+4>>2]=+g[r>>2];g[j+8>>2]=+g[v>>2];g[i>>2]=N;g[i+4>>2]=O;g[i+8>>2]=I;g[k>>2]=N;g[k+4>>2]=O;g[k+8>>2]=I;W=1;X=q;break}q=+g[h>>2];y=n-q;e=h+4|0;H=+g[e>>2];J=s-H;f=h+8|0;D=+g[f>>2];m=K-D;Y=+T(y*y+J*J+m*m);m=+g[j>>2];J=n-m;Z=j+4|0;y=+g[Z>>2];_=s-y;$=j+8|0;aa=+g[$>>2];ba=K-aa;K=+T(J*J+_*_+ba*ba);ba=m-q;q=y-H;H=aa-D;D=+T(ba*ba+q*q+H*H);do{if(Y>K){if(!(Y>D)){break}g[j>>2]=n;g[Z>>2]=+g[r>>2];g[$>>2]=+g[v>>2]}else{if(!(K>D)){break}g[h>>2]=n;g[e>>2]=+g[r>>2];g[f>>2]=+g[v>>2]}}while(0);D=+g[i>>2];K=N-D;f=i+4|0;Y=+g[f>>2];H=O-Y;e=i+8|0;q=+g[e>>2];ba=I-q;aa=+T(K*K+H*H+ba*ba);ba=+g[k>>2];H=N-ba;$=k+4|0;K=+g[$>>2];y=O-K;Z=k+8|0;m=+g[Z>>2];_=I-m;J=+T(H*H+y*y+_*_);_=ba-D;D=K-Y;Y=m-q;q=+T(_*_+D*D+Y*Y);if(aa>J){if(!(aa>q)){W=1;X=l;break}g[k>>2]=N;g[$>>2]=O;g[Z>>2]=I;W=1;X=l;break}else{if(!(J>q)){W=1;X=l;break}g[i>>2]=N;g[f>>2]=O;g[e>>2]=I;W=1;X=l;break}}}while(0);do{if((L- +g[c>>2])*(L- +g[d>>2])+(M- +g[B>>2])*(M- +g[z>>2])+(o- +g[F>>2])*(o- +g[E>>2])>0.0){ca=W;da=X}else{l=+g[b>>2];I=L-l;O=+g[p>>2];N=M-O;n=+g[u>>2];s=o-n;V=+T(I*I+N*N+s*s);s=V;N=X;if(!(s>N+-.5&s<N+.5)){if(!(V<X)){ca=1;da=X;break}g[h>>2]=l;g[h+4>>2]=+g[p>>2];g[h+8>>2]=+g[u>>2];g[j>>2]=+g[b>>2];g[j+4>>2]=+g[p>>2];g[j+8>>2]=+g[u>>2];g[i>>2]=L;g[i+4>>2]=M;g[i+8>>2]=o;g[k>>2]=L;g[k+4>>2]=M;g[k+8>>2]=o;ca=1;da=V;break}V=+g[h>>2];N=l-V;e=h+4|0;s=+g[e>>2];I=O-s;f=h+8|0;U=+g[f>>2];A=n-U;C=+T(N*N+I*I+A*A);A=+g[j>>2];I=l-A;Z=j+4|0;N=+g[Z>>2];w=O-N;$=j+8|0;O=+g[$>>2];x=n-O;n=+T(I*I+w*w+x*x);x=A-V;V=N-s;s=O-U;U=+T(x*x+V*V+s*s);do{if(C>n){if(!(C>U)){break}g[j>>2]=l;g[Z>>2]=+g[p>>2];g[$>>2]=+g[u>>2]}else{if(!(n>U)){break}g[h>>2]=l;g[e>>2]=+g[p>>2];g[f>>2]=+g[u>>2]}}while(0);l=+g[i>>2];U=L-l;f=i+4|0;n=+g[f>>2];C=M-n;e=i+8|0;s=+g[e>>2];V=o-s;x=+T(U*U+C*C+V*V);V=+g[k>>2];C=L-V;$=k+4|0;U=+g[$>>2];O=M-U;Z=k+8|0;N=+g[Z>>2];A=o-N;w=+T(C*C+O*O+A*A);A=V-l;l=U-n;n=N-s;s=+T(A*A+l*l+n*n);if(x>w){if(!(x>s)){ca=1;da=X;break}g[k>>2]=L;g[$>>2]=M;g[Z>>2]=o;ca=1;da=X;break}else{if(!(w>s)){ca=1;da=X;break}g[i>>2]=L;g[f>>2]=M;g[e>>2]=o;ca=1;da=X;break}}}while(0);do{if((R- +g[a>>2])*(R- +g[b>>2])+(S- +g[r>>2])*(S- +g[p>>2])+(G- +g[v>>2])*(G- +g[u>>2])>0.0){ea=ca;fa=da}else{X=R- +g[c>>2];o=S- +g[B>>2];M=G- +g[F>>2];L=+T(X*X+o*o+M*M);M=L;o=da;if(!(M>o+-.5&M<o+.5)){if(!(L<da)){ea=1;fa=da;break}g[h>>2]=R;g[h+4>>2]=S;g[h+8>>2]=G;g[j>>2]=R;g[j+4>>2]=S;g[j+8>>2]=G;g[i>>2]=+g[c>>2];g[i+4>>2]=+g[B>>2];g[i+8>>2]=+g[F>>2];g[k>>2]=+g[c>>2];g[k+4>>2]=+g[B>>2];g[k+8>>2]=+g[F>>2];ea=1;fa=L;break}L=+g[h>>2];o=R-L;W=h+4|0;M=+g[W>>2];X=S-M;e=h+8|0;s=+g[e>>2];w=G-s;x=+T(o*o+X*X+w*w);w=+g[j>>2];X=R-w;f=j+4|0;o=+g[f>>2];n=S-o;Z=j+8|0;l=+g[Z>>2];A=G-l;N=+T(X*X+n*n+A*A);A=w-L;L=o-M;M=l-s;s=+T(A*A+L*L+M*M);do{if(x>N){if(!(x>s)){break}g[j>>2]=R;g[f>>2]=S;g[Z>>2]=G}else{if(!(N>s)){break}g[h>>2]=R;g[W>>2]=S;g[e>>2]=G}}while(0);s=+g[c>>2];N=+g[i>>2];x=s-N;M=+g[B>>2];e=i+4|0;L=+g[e>>2];A=M-L;l=+g[F>>2];W=i+8|0;o=+g[W>>2];w=l-o;n=+T(x*x+A*A+w*w);w=+g[k>>2];A=s-w;Z=k+4|0;x=+g[Z>>2];X=M-x;f=k+8|0;M=+g[f>>2];U=l-M;l=+T(A*A+X*X+U*U);U=w-N;N=x-L;L=M-o;o=+T(U*U+N*N+L*L);if(n>l){if(!(n>o)){ea=1;fa=da;break}g[k>>2]=s;g[Z>>2]=+g[B>>2];g[f>>2]=+g[F>>2];ea=1;fa=da;break}else{if(!(l>o)){ea=1;fa=da;break}g[i>>2]=s;g[e>>2]=+g[B>>2];g[W>>2]=+g[F>>2];ea=1;fa=da;break}}}while(0);da=+g[a>>2];G=+g[r>>2];S=+g[v>>2];if((P-da)*(P- +g[b>>2])+(Q-G)*(Q- +g[p>>2])+(t-S)*(t- +g[u>>2])>0.0){if((ea|0)!=0){ga=fa;return+ga}R=+g[c>>2]-da;s=+g[B>>2]-G;o=+g[F>>2]-S;l=+T(R*R+s*s+o*o);if(l<fa){g[h>>2]=da;g[h+4>>2]=+g[r>>2];g[h+8>>2]=+g[v>>2];g[j>>2]=+g[a>>2];g[j+4>>2]=+g[r>>2];g[j+8>>2]=+g[v>>2];g[i>>2]=+g[c>>2];g[i+4>>2]=+g[B>>2];g[i+8>>2]=+g[F>>2];g[k>>2]=+g[c>>2];g[k+4>>2]=+g[B>>2];g[k+8>>2]=+g[F>>2];ha=l;ia=+g[a>>2];ja=+g[r>>2];ka=+g[v>>2]}else{ha=fa;ia=da;ja=G;ka=S}S=+g[d>>2]-ia;G=+g[z>>2]-ja;ja=+g[E>>2]-ka;ka=+T(S*S+G*G+ja*ja);if(ka<ha){g[h>>2]=ia;g[h+4>>2]=+g[r>>2];g[h+8>>2]=+g[v>>2];g[j>>2]=+g[a>>2];g[j+4>>2]=+g[r>>2];g[j+8>>2]=+g[v>>2];g[i>>2]=+g[d>>2];g[i+4>>2]=+g[z>>2];g[i+8>>2]=+g[E>>2];g[k>>2]=+g[d>>2];g[k+4>>2]=+g[z>>2];g[k+8>>2]=+g[E>>2];la=ka}else{la=ha}ha=+g[b>>2];ka=+g[c>>2]-ha;ia=+g[p>>2];ja=+g[B>>2]-ia;G=+g[u>>2];S=+g[F>>2]-G;da=+T(ka*ka+ja*ja+S*S);if(da<la){g[h>>2]=ha;g[h+4>>2]=+g[p>>2];g[h+8>>2]=+g[u>>2];g[j>>2]=+g[b>>2];g[j+4>>2]=+g[p>>2];g[j+8>>2]=+g[u>>2];g[i>>2]=+g[c>>2];g[i+4>>2]=+g[B>>2];g[i+8>>2]=+g[F>>2];g[k>>2]=+g[c>>2];g[k+4>>2]=+g[B>>2];g[k+8>>2]=+g[F>>2];ma=da;na=+g[b>>2];oa=+g[p>>2];pa=+g[u>>2]}else{ma=la;na=ha;oa=ia;pa=G}G=+g[d>>2]-na;ia=+g[z>>2]-oa;oa=+g[E>>2]-pa;pa=+T(G*G+ia*ia+oa*oa);if(!(pa<ma)){ga=ma;return+ga}g[h>>2]=na;g[h+4>>2]=+g[p>>2];g[h+8>>2]=+g[u>>2];g[j>>2]=+g[b>>2];g[j+4>>2]=+g[p>>2];g[j+8>>2]=+g[u>>2];g[i>>2]=+g[d>>2];g[i+4>>2]=+g[z>>2];g[i+8>>2]=+g[E>>2];g[k>>2]=+g[d>>2];g[k+4>>2]=+g[z>>2];g[k+8>>2]=+g[E>>2];ga=pa;return+ga}pa=P- +g[d>>2];na=Q- +g[z>>2];ma=t- +g[E>>2];oa=+T(pa*pa+na*na+ma*ma);ma=oa;na=fa;if(!(ma>na+-.5&ma<na+.5)){if(!(oa<fa)){ga=fa;return+ga}g[h>>2]=P;g[h+4>>2]=Q;g[h+8>>2]=t;g[j>>2]=P;g[j+4>>2]=Q;g[j+8>>2]=t;g[i>>2]=+g[d>>2];g[i+4>>2]=+g[z>>2];g[i+8>>2]=+g[E>>2];g[k>>2]=+g[d>>2];g[k+4>>2]=+g[z>>2];g[k+8>>2]=+g[E>>2];ga=oa;return+ga}oa=+g[h>>2];na=P-oa;u=h+4|0;ma=+g[u>>2];pa=Q-ma;p=h+8|0;ia=+g[p>>2];G=t-ia;ha=+T(na*na+pa*pa+G*G);G=+g[j>>2];pa=P-G;b=j+4|0;na=+g[b>>2];la=Q-na;F=j+8|0;da=+g[F>>2];S=t-da;ja=+T(pa*pa+la*la+S*S);S=G-oa;oa=na-ma;ma=da-ia;ia=+T(S*S+oa*oa+ma*ma);do{if(ha>ja){if(!(ha>ia)){break}g[j>>2]=P;g[b>>2]=Q;g[F>>2]=t}else{if(!(ja>ia)){break}g[h>>2]=P;g[u>>2]=Q;g[p>>2]=t}}while(0);t=+g[d>>2];Q=+g[i>>2];P=t-Q;ia=+g[z>>2];d=i+4|0;ja=+g[d>>2];ha=ia-ja;ma=+g[E>>2];p=i+8|0;oa=+g[p>>2];S=ma-oa;da=+T(P*P+ha*ha+S*S);S=+g[k>>2];ha=t-S;u=k+4|0;P=+g[u>>2];na=ia-P;h=k+8|0;ia=+g[h>>2];G=ma-ia;ma=+T(ha*ha+na*na+G*G);G=S-Q;Q=P-ja;ja=ia-oa;oa=+T(G*G+Q*Q+ja*ja);if(da>ma){if(!(da>oa)){ga=fa;return+ga}g[k>>2]=t;g[u>>2]=+g[z>>2];g[h>>2]=+g[E>>2];ga=fa;return+ga}else{if(!(ma>oa)){ga=fa;return+ga}g[i>>2]=t;g[d>>2]=+g[z>>2];g[p>>2]=+g[E>>2];ga=fa;return+ga}return 0.0}function iq(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,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.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0.0,ua=0,va=0,wa=0,xa=0.0,ya=0,za=0.0,Aa=0,Ba=0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0.0,Na=0.0,Oa=0.0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0.0,Xa=0.0,Ya=0.0,Za=0.0,_a=0,$a=0.0,ab=0.0,bb=0,cb=0;e=i;i=i+400|0;f=e|0;h=e+40|0;j=e+48|0;k=e+64|0;l=e+80|0;m=e+96|0;n=e+112|0;o=e+128|0;p=e+144|0;q=e+160|0;r=e+176|0;s=e+192|0;t=e+232|0;u=e+320|0;v=e+360|0;w=s;x=c[637759]|0;if((c[x+(a*28|0)+4>>2]&1|0)==0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}if((c[x+(d*28|0)+4>>2]&1|0)==0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}if((c[x+(a*28|0)+8>>2]&2|0)==0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}if((c[x+(d*28|0)+8>>2]&2|0)==0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}x=c[637757]|0;E=+g[637843];F=+g[637829];G=F*.5;H=E/F;F=+g[637832]*(+T(+g[637862]/G)+H)*2.0;I=H;H=I*G*I;J=0;while(1){if(+g[x+(a*48|0)+12+(J<<2)>>2]>F+ +g[x+(d*48|0)+24+(J<<2)>>2]){K=80;break}L=J+1|0;if(+g[x+(a*48|0)+24+(J<<2)>>2]<+g[x+(d*48|0)+12+(J<<2)>>2]-F){K=80;break}if((L|0)<2){J=L}else{K=9;break}}if((K|0)==9){if(+g[x+(d*48|0)+20>>2]>H+ +g[x+(a*48|0)+32>>2]){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}J=x+(a*48|0)+4|0;L=c[J>>2]|0;if((L|0)>0){M=x+(a*48|0)+8|0;N=x+(d*48|0)+4|0;O=x+(d*48|0)+8|0;x=j|0;P=l|0;Q=k|0;R=m|0;H=999999.0;U=0;V=L;while(1){L=c[637755]|0;W=c[L+((c[M>>2]|0)+U<<2)>>2]|0;X=(W|0)>-1?W:-W|0;W=c[637753]|0;do{if((c[W+(X*24|0)+4>>2]&4|0)==0){Y=H;Z=V}else{_=c[N>>2]|0;if((_|0)<=0){Y=H;Z=V;break}$=W+(X*24|0)+8|0;aa=W+(X*24|0)+12|0;ba=W+(X*24|0)|0;I=H;ca=0;da=_;_=L;ea=W;while(1){fa=c[_+((c[O>>2]|0)+ca<<2)>>2]|0;ga=(fa|0)>-1?fa:-fa|0;do{if((c[ea+(ga*24|0)+4>>2]&4|0)==0){ha=I;ia=da}else{fa=c[$>>2]|0;if((fa|0)<=0){ha=I;ia=da;break}ja=ea+(ga*24|0)+8|0;ka=ea+(ga*24|0)+12|0;la=ea+(ga*24|0)|0;G=I;ma=0;na=c[ja>>2]|0;oa=fa;while(1){fa=c[637751]|0;pa=c[fa+((c[aa>>2]|0)+ma<<2)>>2]|0;qa=(pa|0)>-1?pa:-pa|0;pa=c[637749]|0;if((na|0)>0){ra=pa+(qa<<3)|0;sa=pa+(qa<<3)+4|0;ta=G;qa=0;ua=fa;fa=pa;while(1){pa=c[ua+((c[ka>>2]|0)+qa<<2)>>2]|0;va=(pa|0)>-1?pa:-pa|0;pa=c[637745]|0;wa=c[637747]|0;xa=+hq(pa+((c[ra>>2]|0)*12|0)|0,pa+((c[sa>>2]|0)*12|0)|0,pa+((c[fa+(va<<3)>>2]|0)*12|0)|0,pa+((c[fa+(va<<3)+4>>2]|0)*12|0)|0,wa+((c[ba>>2]|0)*20|0)|0,wa+((c[la>>2]|0)*20|0)|0,x,P,Q,R,ta);wa=qa+1|0;ya=c[ja>>2]|0;if((wa|0)>=(ya|0)){break}ta=xa;qa=wa;ua=c[637751]|0;fa=c[637749]|0}za=xa;Aa=ya;Ba=c[$>>2]|0}else{za=G;Aa=na;Ba=oa}fa=ma+1|0;if((fa|0)<(Ba|0)){G=za;ma=fa;na=Aa;oa=Ba}else{break}}ha=za;ia=c[N>>2]|0}}while(0);ga=ca+1|0;if((ga|0)>=(ia|0)){break}I=ha;ca=ga;da=ia;_=c[637755]|0;ea=c[637753]|0}Y=ha;Z=c[J>>2]|0}}while(0);W=U+1|0;if((W|0)<(Z|0)){H=Y;U=W;V=Z}else{break}}Z=j+4|0;V=j+8|0;U=l+4|0;J=l+8|0;Ca=Y;Da=+g[x>>2];Ea=+g[Q>>2];Fa=+g[Z>>2];Ga=+g[k+4>>2];Ha=+g[V>>2];Ia=+g[k+8>>2];Ja=+g[P>>2];Ka=+g[R>>2];La=+g[U>>2];Ma=+g[m+4>>2];Na=+g[J>>2];Oa=+g[m+8>>2];Pa=x;Qa=Z;Ra=V;Sa=P;Ta=U;Ua=J}else{Ca=999999.0;Da=0.0;Ea=0.0;Fa=0.0;Ga=0.0;Ha=0.0;Ia=0.0;Ja=0.0;Ka=0.0;La=0.0;Ma=0.0;Na=0.0;Oa=0.0;Pa=j|0;Qa=j+4|0;Ra=j+8|0;Sa=l|0;Ta=l+4|0;Ua=l+8|0}Y=(Da+Ea)*.5;g[Pa>>2]=Y;Ea=(Fa+Ga)*.5;g[Qa>>2]=Ea;Ga=(Ha+Ia)*.5;g[Ra>>2]=Ga;Ia=(Ja+Ka)*.5;g[Sa>>2]=Ia;Ka=(La+Ma)*.5;g[Ta>>2]=Ka;Ma=(Na+Oa)*.5;g[Ua>>2]=Ma;if(!(Ca>4.0&Ca<F)){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}do{if(Ca>48.0){K=35}else{if(!(+S(+(Ga-Ma))<8.0)){K=35;break}g[h>>2]=400.0;Va=7;Wa=Ia;Xa=Y;Ya=Ka;Za=Ea}}while(0);do{if((K|0)==35){if((Pp(0.0,Pa,Sa,h)|0)!=0){g[h>>2]=+g[h>>2]*1.2000000476837158;Va=7;Wa=+g[Sa>>2];Xa=+g[Pa>>2];Ya=+g[Ta>>2];Za=+g[Qa>>2];break}if((Pp(E,Pa,Sa,h)|0)==0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}g[h>>2]=+g[h>>2]*1.0499999523162842;Ea=+g[Sa>>2];Ka=+g[Pa>>2];Y=Ea-Ka;g[p>>2]=Y;Ia=+g[Ta>>2];Ma=+g[Qa>>2];Ga=Ia-Ma;g[p+4>>2]=Ga;g[p+8>>2]=0.0;if(!(+T(Y*Y+Ga*Ga+0.0)<10.0)){Va=5;Wa=Ea;Xa=Ka;Ya=Ia;Za=Ma;break}y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}}while(0);l=p|0;g[l>>2]=Wa-Xa;j=p+4|0;g[j>>2]=Ya-Za;J=p+8|0;g[J>>2]=+g[Ua>>2]- +g[Ra>>2];+dn(l);Za=+g[Pa>>2]+ +g[l>>2];p=n|0;g[p>>2]=Za;Ya=+g[Qa>>2]+ +g[j>>2];U=n+4|0;g[U>>2]=Ya;Xa=+g[Ra>>2]+ +g[J>>2];P=n+8|0;g[P>>2]=Xa;n=o|0;g[n>>2]=Za;V=o+4|0;g[V>>2]=Ya;Z=o+8|0;g[Z>>2]=Xa+-100.0;lr(u,p,n,2,-1);Vx(w|0,u|0,36)|0;u=s|0;if((c[u>>2]|0)!=0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}o=s+4|0;do{if(+g[o>>2]<1.0){x=c[s+32>>2]|0;m=c[637747]|0;if(+g[m+(x*20|0)+8>>2]+(+g[m+(x*20|0)>>2]*0.0+ +g[m+(x*20|0)+4>>2]*0.0)<.7){break}if(((Ko(s+8|0)|0)&24|0)!=0){break}if(+g[P>>2]- +g[s+16>>2]>+g[637842]){break}y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}}while(0);Xa=+g[Sa>>2]+ +g[l>>2]*-1.0;g[p>>2]=Xa;Ya=+g[Ta>>2]+ +g[j>>2]*-1.0;g[U>>2]=Ya;Za=+g[Ua>>2]+ +g[J>>2]*-1.0;g[P>>2]=Za;g[n>>2]=Xa;g[V>>2]=Ya;g[Z>>2]=Za+-100.0;lr(v,p,n,2,-1);Vx(w|0,v|0,36)|0;if((c[u>>2]|0)!=0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}do{if(+g[o>>2]<1.0){u=c[s+32>>2]|0;v=c[637747]|0;if(+g[v+(u*20|0)+8>>2]+(+g[v+(u*20|0)>>2]*0.0+ +g[v+(u*20|0)+4>>2]*0.0)<.7){break}if(((Ko(s+8|0)|0)&24|0)!=0){break}if(+g[P>>2]- +g[s+16>>2]>+g[637842]){break}y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}}while(0);g[r+4>>2]=0.0;s=r|0;g[s>>2]=0.0;o=(Va|0)==5;g[r+8>>2]=o?+g[637843]:0.0;g[l>>2]=+g[Sa>>2]- +g[Pa>>2];g[j>>2]=+g[Ta>>2]- +g[Qa>>2];g[J>>2]=0.0;+dn(l);Za=+g[j>>2];Ya=+g[J>>2]*0.0;Xa=Za-Ya;Wa=+g[l>>2];E=Ya-Wa;Ya=Wa*0.0-Za*0.0;r=c[637759]|0;if((c[r+(a*28|0)>>2]&8|0)==0){_a=c[r+(d*28|0)>>2]<<9&4096^4157}else{_a=61}r=q|0;u=q+4|0;v=q+8|0;q=t+80|0;w=t+68|0;x=t|0;m=t+4|0;R=t+8|0;k=f|0;Q=0;a:while(1){do{if((Q|0)==1){Za=Xa+ +g[n>>2];g[n>>2]=Za;Wa=E+ +g[V>>2];g[V>>2]=Wa;g[Z>>2]=Ya+ +g[Z>>2];$a=Za;ab=Wa}else{Wa=+g[Sa>>2];if((Q|0)==2){Za=Wa-Xa;g[n>>2]=Za;Ma=+g[Ta>>2]-E;g[V>>2]=Ma;g[Z>>2]=+g[Ua>>2]-Ya;$a=Za;ab=Ma;break}else{g[n>>2]=Wa;Ma=+g[Ta>>2];g[V>>2]=Ma;g[Z>>2]=+g[Ua>>2];$a=Wa;ab=Ma;break}}}while(0);g[l>>2]=$a- +g[Pa>>2];g[j>>2]=ab- +g[Qa>>2];g[J>>2]=0.0;+dn(l);Ma=+g[h>>2];g[r>>2]=+g[l>>2]*Ma;g[u>>2]=+g[j>>2]*Ma;g[v>>2]=+g[J>>2]*Ma;Jp(t,-1,Pa,2,1,r,s,3,30,.10000000149011612,_a,0,0)|0;if((c[q>>2]|0)>29){K=80;break}if((c[w>>2]&4120|0)!=0){K=80;break}g[p>>2]=+g[x>>2]+ +g[l>>2]*-64.0;g[U>>2]=+g[m>>2]+ +g[j>>2]*-64.0;g[P>>2]=+g[R>>2]+ +g[J>>2]*-64.0+1.0;ia=mr(x,p,k,0,10)|0;if((ia|0)>0){N=0;while(1){Ba=N+1|0;if((c[f+(N<<2)>>2]|0)==(d|0)){K=63;break a}if((Ba|0)<(ia|0)){N=Ba}else{break}}}N=Q+1|0;if((N|0)<3){Q=N}else{K=80;break}}if((K|0)==63){if((Q|0)>2){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}Q=c[164946]|0;if((Q|0)==0){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}f=c[Q+44>>2]|0;do{if((f|0)==0){tp(54768,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;k=c[164946]|0;c[164946]=c[k+44>>2];c[164928]=(c[164928]|0)+1;if((k|0)!=0){bb=k;break}y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}else{c[164946]=f;c[164928]=(c[164928]|0)+1;bb=Q}}while(0);c[bb>>2]=d;c[bb+4>>2]=0;c[bb+8>>2]=0;g[bb+12>>2]=+g[Pa>>2];g[bb+16>>2]=+g[Qa>>2];g[bb+20>>2]=+g[Ra>>2];g[bb+24>>2]=+g[Sa>>2];g[bb+28>>2]=+g[Ta>>2];g[bb+32>>2]=+g[Ua>>2];c[bb+36>>2]=Va;ab=+g[Sa>>2];$a=+g[Pa>>2];Ya=ab-$a;g[l>>2]=Ya;E=+g[Ta>>2];Xa=+g[Qa>>2];Ma=E-Xa;g[j>>2]=Ma;Wa=+g[Ua>>2];Za=+g[Ra>>2];Ia=Wa-Za;g[J>>2]=0.0;do{if((Va|0)==7){if(!(Ia>+T(Ya*Ya+Ma*Ma+0.0))){K=71;break}J=~~(+g[637851]+Ia*50.0/+g[637829]);b[bb+40>>1]=J;cb=J}else{K=71}}while(0);if((K|0)==71){Ia=$a-ab;ab=Xa-E;E=Za-Wa;Xa=+T(Ia*Ia+ab*ab+E*E)*240.0;Va=~~(+g[637852]+Xa/+g[637833]);b[bb+40>>1]=Va;cb=Va}do{if((c[(c[637759]|0)+(d*28|0)>>2]&128|0)==0){Xa=+g[637829];E=Xa*+T(+S(+(Za-Wa))*2.0/Xa);Xa=E*E*1.0e-4;if(Xa>+g[637844]){b[bb+40>>1]=~~(+g[637859]+ +((cb&65535)>>>0));break}if(!(Xa>+g[637845])){break}b[bb+40>>1]=~~(+g[637860]+ +((cb&65535)>>>0))}}while(0);c[bb+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=bb;if(o){c[154386]=(c[154386]|0)+1;y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}else{c[154370]=(c[154370]|0)+1;y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}}else if((K|0)==80){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}}else if((K|0)==80){y=84;z=0;A=36;B=0;C=40;D=0;i=e;return 0}return 0}function jq(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,r=0.0,s=0.0,t=0.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.0,N=0.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,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0.0,ha=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0.0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0.0,Ha=0.0,Ia=0,Ja=0,Ka=0,La=0.0,Ma=0.0,Na=0.0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0,Xa=0,Ya=0.0,Za=0.0,_a=0.0,$a=0,ab=0,bb=0,cb=0;e=i;i=i+128|0;f=e|0;h=e+16|0;j=e+32|0;k=e+48|0;l=e+88|0;m=k;n=c[637759]|0;if((c[n+(a*28|0)+4>>2]&2|0)==0){o=0;p=36;q=0;i=e;return o|0}if((c[n+(d*28|0)+4>>2]&2|0)==0){o=0;p=36;q=0;i=e;return o|0}r=+g[637829];s=+g[637843]/r;t=s*r*.5*s;n=c[637757]|0;u=c[n+(a*48|0)+4>>2]|0;if((u|0)<=0){o=0;p=36;q=0;i=e;return o|0}v=c[n+(a*48|0)+8>>2]|0;w=c[637755]|0;x=c[637753]|0;y=n+(d*48|0)+4|0;z=n+(d*48|0)+8|0;n=c[637751]|0;A=0;B=0;s=-9999.0;r=-9999.0;C=0;D=0;E=0;F=0;while(1){G=c[w+(v+D<<2)>>2]|0;H=(G|0)>-1?G:-G|0;I=x+(H*24|0)|0;do{if((c[x+(H*24|0)+4>>2]&2|0)==0){J=F;K=E;L=C;M=r;N=s;O=B;P=A}else{Q=c[y>>2]|0;if((Q|0)<=0){J=F;K=E;L=C;M=r;N=s;O=B;P=A;break}R=c[z>>2]|0;S=x+(H*24|0)+8|0;T=x+(H*24|0)+12|0;U=A;V=B;W=s;X=r;Y=C;Z=0;_=E;$=F;while(1){aa=c[w+(R+Z<<2)>>2]|0;ba=(aa|0)>-1?aa:-aa|0;ca=x+(ba*24|0)|0;a:do{if((c[x+(ba*24|0)+4>>2]&2|0)==0){da=$;ea=_;fa=Y;ga=X;ha=W;ia=V;ja=U}else{ka=c[S>>2]|0;if((ka|0)<=0){da=$;ea=_;fa=Y;ga=X;ha=W;ia=V;ja=U;break}la=c[T>>2]|0;ma=c[x+(ba*24|0)+8>>2]|0;na=x+(ba*24|0)+12|0;if((ma|0)>0){oa=U;pa=V;qa=W;ra=X;sa=Y;ta=0;ua=_;va=$}else{wa=0;xa=ma;while(1){ya=wa+1|0;if((xa|0)==0&(ya|0)<(ka|0)){wa=ya;xa=0}else{da=$;ea=_;fa=Y;ga=X;ha=W;ia=V;ja=U;break a}}}while(1){xa=c[n+(la+ta<<2)>>2]|0;wa=c[na>>2]|0;ya=(xa|0)>-1?xa:-xa|0;za=0;while(1){Aa=c[n+(wa+za<<2)>>2]|0;Ba=za+1|0;if((ya|0)==(((Aa|0)>-1?Aa:-Aa|0)|0)){Ca=13;break}if((Ba|0)<(ma|0)){za=Ba}else{Da=va;Ea=ua;Fa=sa;Ga=ra;Ha=qa;Ia=pa;Ja=oa;Ka=Ba;break}}if((Ca|0)==13){Ca=0;La=+Vp(I);Ma=+Vp(ca);ya=La>qa&Ma>ra;Da=ya?ca:va;Ea=ya?I:ua;Fa=ya?xa:sa;Ga=ya?Ma:ra;Ha=ya?La:qa;Ia=ya?G:pa;Ja=ya?aa:oa;Ka=za}ya=ta+1|0;if((Ka|0)==(ma|0)&(ya|0)<(ka|0)){oa=Ja;pa=Ia;qa=Ha;ra=Ga;sa=Fa;ta=ya;ua=Ea;va=Da}else{da=Da;ea=Ea;fa=Fa;ga=Ga;ha=Ha;ia=Ia;ja=Ja;break}}}}while(0);aa=Z+1|0;if((aa|0)<(Q|0)){U=ja;V=ia;W=ha;X=ga;Y=fa;Z=aa;_=ea;$=da}else{J=da;K=ea;L=fa;M=ga;N=ha;O=ia;P=ja;break}}}}while(0);G=D+1|0;if((G|0)<(u|0)){A=P;B=O;s=N;r=M;C=L;D=G;E=K;F=J}else{break}}if((K|0)==0|(J|0)==0){o=0;p=36;q=0;i=e;return o|0}F=(L|0)>-1?L:-L|0;E=c[637749]|0;D=L>>>31;L=c[E+(F<<3)+(D<<2)>>2]|0;C=c[637745]|0;M=+g[C+(L*12|0)>>2];r=+g[C+(L*12|0)+4>>2];N=+g[C+(L*12|0)+8>>2];L=c[E+(F<<3)+((D^1)<<2)>>2]|0;s=+g[C+(L*12|0)>>2];ha=+g[C+(L*12|0)+4>>2];ga=+g[C+(L*12|0)+8>>2];Ha=(M+s)*.5;Ga=(r+ha)*.5;ra=(N+ga)*.5;L=K|0;C=c[L>>2]^O>>>31;D=c[637747]|0;E=c[J>>2]^P>>>31;qa=s-M;M=ha-r;r=ga-N;B=D+(C*20|0)|0;A=j|0;u=D+(C*20|0)+4|0;ja=D+(C*20|0)+8|0;g[A>>2]=r*+g[u>>2]-M*+g[ja>>2];C=j+4|0;g[C>>2]=qa*+g[ja>>2]-r*+g[B>>2];ia=j+8|0;g[ia>>2]=M*+g[B>>2]-qa*+g[u>>2];+dn(A);N=+g[A>>2];ga=Ha+N*-32.0;ha=+g[C>>2];s=Ga+ha*-32.0;X=+g[ia>>2];W=ra+X*-32.0;La=Ha+N*32.0;N=Ga+ha*32.0;ha=ra+X*32.0;X=+g[B>>2];ra=+g[u>>2];Ga=+g[ja>>2];ia=~~(Ga+(X*0.0+ra*0.0));C=(((ia|0)>-1?ia:-ia|0)|0)<1;Ha=+g[D+(E*20|0)>>2];Ma=+g[D+(E*20|0)+4>>2];Na=+g[D+(E*20|0)+8>>2];E=~~(Na+(Ha*0.0+Ma*0.0));D=(((E|0)>-1?E:-E|0)|0)<1;if(!(C|D)){o=0;p=36;q=0;i=e;return o|0}do{if(C&D){if(!(X*Ha+ra*Ma+Ga*Na>.7)){break}E=~~(r+(qa*0.0+M*0.0));if((((E|0)>-1?E:-E|0)|0)>=1){break}E=c[164946]|0;if((E|0)==0){o=0;p=36;q=0;i=e;return o|0}ia=c[E+44>>2]|0;do{if((ia|0)==0){tp(54768,(Oa=i,i=i+1|0,i=i+7&-8,c[Oa>>2]=0,Oa)|0);i=Oa;A=c[164946]|0;c[164946]=c[A+44>>2];c[164928]=(c[164928]|0)+1;if((A|0)==0){o=0}else{Pa=A;break}p=36;q=0;i=e;return o|0}else{c[164946]=ia;c[164928]=(c[164928]|0)+1;Pa=E}}while(0);c[Pa>>2]=d;c[Pa+4>>2]=O;c[Pa+8>>2]=F;g[Pa+12>>2]=ga;g[Pa+16>>2]=s;g[Pa+20>>2]=W;g[Pa+24>>2]=La+ +g[B>>2]*-3.0;g[Pa+28>>2]=N+ +g[u>>2]*-3.0;g[Pa+32>>2]=ha+ +g[ja>>2]*-3.0;c[Pa+36>>2]=6;b[Pa+40>>1]=10;c[Pa+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Pa;c[154382]=(c[154382]|0)+1;E=c[164946]|0;if((E|0)==0){o=0;p=36;q=0;i=e;return o|0}ia=c[E+44>>2]|0;do{if((ia|0)==0){tp(54768,(Oa=i,i=i+1|0,i=i+7&-8,c[Oa>>2]=0,Oa)|0);i=Oa;A=c[164946]|0;c[164946]=c[A+44>>2];c[164928]=(c[164928]|0)+1;if((A|0)==0){o=0}else{Qa=A;break}p=36;q=0;i=e;return o|0}else{c[164946]=ia;c[164928]=(c[164928]|0)+1;Qa=E}}while(0);c[Qa>>2]=a;c[Qa+4>>2]=P;c[Qa+8>>2]=F;g[Qa+12>>2]=La;g[Qa+16>>2]=N;g[Qa+20>>2]=ha;g[Qa+24>>2]=ga+ +g[B>>2]*-3.0;g[Qa+28>>2]=s+ +g[u>>2]*-3.0;g[Qa+32>>2]=W+ +g[ja>>2]*-3.0;c[Qa+36>>2]=6;b[Qa+40>>1]=10;c[Qa+44>>2]=c[(c[637662]|0)+(d<<2)>>2];c[(c[637662]|0)+(d<<2)>>2]=Qa;c[154382]=(c[154382]|0)+1;o=1;p=36;q=0;i=e;return o|0}}while(0);if(!C){o=0;p=36;q=0;i=e;return o|0}if((c[J+4>>2]&4|0)!=0){J=c[164946]|0;if((J|0)==0){o=0;p=36;q=0;i=e;return o|0}C=c[J+44>>2]|0;do{if((C|0)==0){tp(54768,(Oa=i,i=i+1|0,i=i+7&-8,c[Oa>>2]=0,Oa)|0);i=Oa;Qa=c[164946]|0;c[164946]=c[Qa+44>>2];c[164928]=(c[164928]|0)+1;if((Qa|0)==0){o=0}else{Ra=Qa;break}p=36;q=0;i=e;return o|0}else{c[164946]=C;c[164928]=(c[164928]|0)+1;Ra=J}}while(0);c[Ra>>2]=d;c[Ra+4>>2]=O;c[Ra+8>>2]=F;g[Ra+12>>2]=ga;g[Ra+16>>2]=s;g[Ra+20>>2]=W;J=Ra+24|0;g[J>>2]=La;C=Ra+28|0;g[C>>2]=N;Qa=Ra+32|0;M=ha+16.0;g[Qa>>2]=M;g[J>>2]=La+ +g[B>>2]*-15.0;g[C>>2]=N+ +g[u>>2]*-15.0;g[Qa>>2]=M+ +g[ja>>2]*-15.0;c[Ra+36>>2]=6;b[Ra+40>>1]=10;c[Ra+44>>2]=c[(c[637662]|0)+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=Ra;c[154382]=(c[154382]|0)+1;Ra=c[164946]|0;if((Ra|0)==0){o=0;p=36;q=0;i=e;return o|0}ja=c[Ra+44>>2]|0;do{if((ja|0)==0){tp(54768,(Oa=i,i=i+1|0,i=i+7&-8,c[Oa>>2]=0,Oa)|0);i=Oa;Qa=c[164946]|0;c[164946]=c[Qa+44>>2];c[164928]=(c[164928]|0)+1;if((Qa|0)==0){o=0}else{Sa=Qa;break}p=36;q=0;i=e;return o|0}else{c[164946]=ja;c[164928]=(c[164928]|0)+1;Sa=Ra}}while(0);c[Sa>>2]=a;c[Sa+4>>2]=P;c[Sa+8>>2]=F;g[Sa+12>>2]=La;g[Sa+16>>2]=N;g[Sa+20>>2]=ha;g[Sa+24>>2]=ga;g[Sa+28>>2]=s;g[Sa+32>>2]=W;c[Sa+36>>2]=7;b[Sa+40>>1]=10;c[Sa+44>>2]=c[(c[637662]|0)+(d<<2)>>2];c[(c[637662]|0)+(d<<2)>>2]=Sa;c[154370]=(c[154370]|0)+1;o=1;p=36;q=0;i=e;return o|0}Sa=c[K+8>>2]|0;if((Sa|0)>0){d=c[K+12>>2]|0;K=c[637751]|0;F=c[637749]|0;P=c[637745]|0;Ra=0;W=99999.0;s=0.0;ga=0.0;ja=0;while(1){Qa=c[K+(d+ja<<2)>>2]|0;u=(Qa|0)>-1?Qa:-Qa|0;Qa=c[F+(u<<3)>>2]|0;C=c[F+(u<<3)+4>>2]|0;ha=(+g[P+(Qa*12|0)+8>>2]+ +g[P+(C*12|0)+8>>2])*.5;if(ha<W){Ta=(+g[P+(C*12|0)>>2]+ +g[P+(Qa*12|0)>>2])*.5;Ua=(+g[P+(C*12|0)+4>>2]+ +g[P+(Qa*12|0)+4>>2])*.5;Va=ha;Wa=u}else{Ta=ga;Ua=s;Va=W;Wa=Ra}u=ja+1|0;if((u|0)<(Sa|0)){Ra=Wa;W=Va;s=Ua;ga=Ta;ja=u}else{Xa=Wa;Ya=Va;Za=Ua;_a=Ta;break}}}else{Xa=0;Ya=99999.0;Za=0.0;_a=0.0}Wa=c[L>>2]|0;L=c[637747]|0;ja=L+(Wa*20|0)|0;Ta=_a+ +g[ja>>2]*5.0;Ra=f|0;g[Ra>>2]=Ta;Sa=L+(Wa*20|0)+4|0;Ua=Za+ +g[Sa>>2]*5.0;g[f+4>>2]=Ua;P=L+(Wa*20|0)+8|0;Va=Ya+ +g[P>>2]*5.0;Wa=f+8|0;f=h|0;g[f>>2]=Ta;g[h+4>>2]=Ua;g[Wa>>2]=Va+5.0;g[h+8>>2]=Va+-100.0;lr(l,Ra,f,2,-1);Vx(m|0,l|0,36)|0;l=k+16|0;g[l>>2]=+g[l>>2]+1.0;m=k+8|0;f=gr(m)|0;Ra=c[637757]|0;h=c[Ra+(f*48|0)+4>>2]|0;b:do{if((h|0)>0){L=c[Ra+(f*48|0)+8>>2]|0;F=c[637755]|0;d=c[637753]|0;K=c[637747]|0;u=0;while(1){Qa=c[F+(L+u<<2)>>2]|0;C=(Qa|0)>-1?Qa:-Qa|0;if((c[d+(C*24|0)+4>>2]&2|0)!=0){Qa=c[d+(C*24|0)>>2]|0;C=~~(+g[K+(Qa*20|0)+8>>2]+(+g[K+(Qa*20|0)>>2]*0.0+ +g[K+(Qa*20|0)+4>>2]*0.0));if((((C|0)>-1?C:-C|0)|0)<1){$a=u;break b}}C=u+1|0;if((C|0)<(h|0)){u=C}else{$a=C;break}}}else{$a=0}}while(0);if(($a|0)<(h|0)|(f|0)==(a|0)){o=0;p=36;q=0;i=e;return o|0}h=c[637662]|0;$a=c[h+(a<<2)>>2]|0;c:do{if(($a|0)!=0){Ra=$a;while(1){if((c[Ra>>2]|0)==(f|0)){o=0;break}Ra=c[Ra+44>>2]|0;if((Ra|0)==0){break c}}p=36;q=0;i=e;return o|0}}while(0);$a=c[h+(f<<2)>>2]|0;d:do{if(($a|0)!=0){Ra=$a;while(1){if((c[Ra>>2]|0)==(a|0)){o=0;break}Ra=c[Ra+44>>2]|0;if((Ra|0)==0){break d}}p=36;q=0;i=e;return o|0}}while(0);if(!(+g[Wa>>2]- +g[l>>2]<t)){o=0;p=36;q=0;i=e;return o|0}Wa=c[164946]|0;if((Wa|0)==0){o=0;p=36;q=0;i=e;return o|0}$a=c[Wa+44>>2]|0;do{if(($a|0)==0){tp(54768,(Oa=i,i=i+1|0,i=i+7&-8,c[Oa>>2]=0,Oa)|0);i=Oa;Ra=c[164946]|0;c[164946]=c[Ra+44>>2];c[164928]=(c[164928]|0)+1;if((Ra|0)==0){o=0;p=36;q=0;i=e;return o|0}else{ab=Ra;bb=c[637662]|0;break}}else{c[164946]=$a;c[164928]=(c[164928]|0)+1;ab=Wa;bb=h}}while(0);c[ab>>2]=f;c[ab+4>>2]=O;c[ab+8>>2]=Xa;g[ab+12>>2]=_a;g[ab+16>>2]=Za;g[ab+20>>2]=Ya;g[ab+24>>2]=+g[m>>2];h=k+12|0;g[ab+28>>2]=+g[h>>2];g[ab+32>>2]=+g[l>>2];c[ab+36>>2]=6;b[ab+40>>1]=10;c[ab+44>>2]=c[bb+(a<<2)>>2];c[(c[637662]|0)+(a<<2)>>2]=ab;c[154382]=(c[154382]|0)+1;ab=c[164946]|0;if((ab|0)==0){o=0;p=36;q=0;i=e;return o|0}bb=c[ab+44>>2]|0;do{if((bb|0)==0){tp(54768,(Oa=i,i=i+1|0,i=i+7&-8,c[Oa>>2]=0,Oa)|0);i=Oa;k=c[164946]|0;c[164946]=c[k+44>>2];c[164928]=(c[164928]|0)+1;if((k|0)==0){o=0}else{cb=k;break}p=36;q=0;i=e;return o|0}else{c[164946]=bb;c[164928]=(c[164928]|0)+1;cb=ab}}while(0);c[cb>>2]=a;c[cb+4>>2]=O;c[cb+8>>2]=Xa;g[cb+12>>2]=+g[m>>2];g[cb+16>>2]=+g[h>>2];g[cb+20>>2]=+g[l>>2];g[cb+24>>2]=_a+ +g[ja>>2]*-5.0;g[cb+28>>2]=Za+ +g[Sa>>2]*-5.0;g[cb+32>>2]=Ya+ +g[P>>2]*-5.0+10.0;c[cb+36>>2]=5;b[cb+40>>1]=10;c[cb+44>>2]=c[(c[637662]|0)+(f<<2)>>2];c[(c[637662]|0)+(f<<2)>>2]=cb;c[154386]=(c[154386]|0)+1;o=1;p=36;q=0;i=e;return o|0}function kq(){var a=0,d=0,e=0,f=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,ba=0,ca=0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;a=i;i=i+784|0;d=a|0;e=a+392|0;f=a+520|0;j=a+528|0;k=a+544|0;l=a+560|0;m=a+576|0;n=a+592|0;o=a+608|0;p=a+624|0;q=a+640|0;r=a+656|0;s=a+744|0;t=a+8|0;u=a+136|0;v=a+264|0;w=e|0;x=Po(0)|0;if((x|0)==0){y=84;z=0;A=128;B=0;C=128;D=0;E=128;F=0;G=128;H=0;i=a;return}I=o+8|0;J=o+4|0;K=o|0;o=e+1|0;e=l|0;L=m|0;M=j|0;N=j+4|0;O=j+8|0;j=k|0;P=n|0;Q=k+4|0;R=n+4|0;S=k+8|0;k=n+8|0;n=s|0;T=p|0;U=p+4|0;V=p+8|0;p=q+8|0;W=q+4|0;X=q|0;q=r|0;Y=r+68|0;Z=r+4|0;_=r+8|0;$=l+4|0;aa=l+8|0;l=m+4|0;ba=m+8|0;m=x;do{a:do{if((Qo(m,60472,v,128)|0)!=0){do{if((Tx(v,51728)|0)==0){Qo(m,57792,w,128)|0;ue[c[636260]&31](1,50728,(ca=i,i=i+8|0,c[ca>>2]=w,ca)|0);i=ca;g[I>>2]=0.0;g[J>>2]=0.0;g[K>>2]=0.0;Mo(Vc(o|0)|0,K,e,L,M);if((Qo(m,40816,t,128)|0)==0){da=+g[N>>2];ea=+g[O>>2];ue[c[636260]&31](3,49944,(ca=i,i=i+24|0,h[ca>>3]=+g[M>>2],h[ca+8>>3]=da,h[ca+16>>3]=ea,ca)|0);i=ca;break a}x=Po(0)|0;if((x|0)==0){break a}else{fa=x}b:while(1){do{if((Qo(fa,60472,v,128)|0)!=0){if((Tx(v,49232)|0)!=0){break}if((Qo(fa,36080,u,128)|0)==0){break}if((Tx(u,t)|0)==0){break b}}}while(0);x=Po(fa)|0;if((x|0)==0){break a}else{fa=x}}if((Qo(fa,40816,t,128)|0)!=0){break}ue[c[636260]&31](3,48384,(ca=i,i=i+1|0,i=i+7&-8,c[ca>>2]=0,ca)|0);i=ca;break a}else{if((Tx(v,47160)|0)!=0){break a}Qo(m,57792,w,128)|0;ue[c[636260]&31](1,46136,(ca=i,i=i+8|0,c[ca>>2]=w,ca)|0);i=ca;g[I>>2]=0.0;g[J>>2]=0.0;g[K>>2]=0.0;Mo(Vc(o|0)|0,K,e,L,M);if((Qo(m,40816,t,128)|0)!=0){break}ea=+g[N>>2];da=+g[O>>2];ue[c[636260]&31](3,45520,(ca=i,i=i+24|0,h[ca>>3]=+g[M>>2],h[ca+8>>3]=ea,h[ca+16>>3]=da,ca)|0);i=ca;break a}}while(0);x=Po(0)|0;c:do{if((x|0)!=0){ga=x;while(1){if((Qo(ga,36080,u,128)|0)!=0){if((Tx(u,t)|0)==0){break}}ha=Po(ga)|0;if((ha|0)==0){break c}else{ga=ha}}if((Ro(ga,26400,j)|0)==0){ue[c[636260]&31](3,44032,(ca=i,i=i+8|0,c[ca>>2]=t,ca)|0);i=ca;break a}ha=gr(j)|0;if((c[(c[637759]|0)+(ha*28|0)>>2]&192|0)==0){g[P>>2]=+g[j>>2];g[R>>2]=+g[Q>>2];g[k>>2]=+g[S>>2]+-64.0;lr(s,j,P,4,-1);if((c[n>>2]|0)!=0){ue[c[636260]&31](3,43384,(ca=i,i=i+8|0,c[ca>>2]=t,ca)|0);i=ca;break a}So(ga,42840,f)|0;da=+g[f>>2];if(da!=0.0){g[K>>2]=0.0;g[J>>2]=da;g[I>>2]=0.0;hn(K,T,0,0);g[T>>2]=+g[T>>2]*400.0;g[U>>2]=+g[U>>2]*400.0;g[V>>2]=+g[V>>2]*400.0}else{g[V>>2]=0.0;g[U>>2]=0.0;g[T>>2]=0.0}g[p>>2]=0.0;g[W>>2]=0.0;g[X>>2]=0.0;Jp(r,-1,j,2,0,T,X,0,30,.10000000149011612,445,0,0)|0;ia=gr(q)|0;if((c[Y>>2]&24|0)!=0){ue[c[636260]&31](2,42216,(ca=i,i=i+8|0,c[ca>>2]=t,ca)|0);i=ca}g[j>>2]=+g[q>>2];g[Q>>2]=+g[Z>>2];g[S>>2]=+g[_>>2];ja=ia}else{ja=ha}da=+g[M>>2];ea=da+ +g[e>>2];g[e>>2]=ea;ka=+g[N>>2];la=ka+ +g[$>>2];g[$>>2]=la;ma=+g[O>>2];na=ma+ +g[aa>>2];g[aa>>2]=na;oa=da+ +g[L>>2];g[L>>2]=oa;da=ka+ +g[l>>2];g[l>>2]=da;ka=ma+ +g[ba>>2];g[ba>>2]=ka;ma=(ea+oa)*.5;oa=(la+da)*.5;da=(ka+na)*.5;ha=qr(e,L,-1,4)|0;d:do{if((ha|0)==0){ue[c[636260]&31](1,41696,(ca=i,i=i+1|0,i=i+7&-8,c[ca>>2]=0,ca)|0);i=ca}else{ia=ha;do{pa=c[ia+4>>2]|0;if((c[(c[637759]|0)+(pa*28|0)>>2]&64|0)!=0){qa=c[164946]|0;if((qa|0)==0){break d}ra=c[qa+44>>2]|0;if((ra|0)==0){tp(54768,(ca=i,i=i+1|0,i=i+7&-8,c[ca>>2]=0,ca)|0);i=ca;sa=c[164946]|0;c[164946]=c[sa+44>>2];c[164928]=(c[164928]|0)+1;if((sa|0)==0){break d}else{ta=sa}}else{c[164946]=ra;c[164928]=(c[164928]|0)+1;ta=qa}c[ta>>2]=ja;c[ta+4>>2]=0;c[ta+8>>2]=0;g[ta+12>>2]=ma;g[ta+16>>2]=oa;g[ta+20>>2]=da;g[ta+24>>2]=+g[j>>2];g[ta+28>>2]=+g[Q>>2];g[ta+32>>2]=+g[S>>2];qa=ta+36|0;c[qa>>2]=10;do{if((To(m,52672,d)|0)==0){ua=0}else{ra=c[d>>2]|0;if((ra|0)==2){ua=33554432;break}else if((ra|0)==1){ua=16777216;break}else{ua=0;break}}}while(0);c[qa>>2]=c[qa>>2]|ua;b[ta+40>>1]=~~+g[637847];c[ta+44>>2]=c[(c[637662]|0)+(pa<<2)>>2];c[(c[637662]|0)+(pa<<2)>>2]=ta;c[154374]=(c[154374]|0)+1}ia=c[ia+16>>2]|0;}while((ia|0)!=0)}}while(0);or(ha);break a}}while(0);ue[c[636260]&31](3,44688,(ca=i,i=i+8|0,c[ca>>2]=t,ca)|0);i=ca}}while(0);m=Po(m)|0;}while((m|0)!=0);y=84;z=0;A=128;B=0;C=128;D=0;E=128;F=0;G=128;H=0;i=a;return}function lq(){var a=0,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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0.0,Ma=0.0,Na=0.0,Oa=0.0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0.0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0.0,gb=0,hb=0,ib=0,jb=0.0,kb=0;a=i;i=i+600|0;d=a|0;e=a+8|0;f=a+16|0;h=a+24|0;j=a+32|0;k=a+288|0;l=a+304|0;m=a+320|0;n=a+336|0;o=a+352|0;p=a+368|0;q=a+384|0;r=a+400|0;s=a+416|0;t=a+432|0;u=a+464|0;v=a+496|0;w=a+528|0;x=a+560|0;y=j|0;z=a+160|0;Zx(n|0,0,12)|0;A=Po(0)|0;if((A|0)==0){B=128;C=0;D=128;E=0;i=a;return}F=j+1|0;j=n|0;n=k|0;G=l|0;H=m|0;I=m+4|0;J=m+8|0;K=k+4|0;L=l+4|0;M=l+8|0;N=t|0;O=t+4|0;P=t+8|0;Q=t+12|0;R=u|0;S=u+4|0;T=u+8|0;U=u+12|0;V=t+16|0;W=t+20|0;X=t+24|0;Y=t+28|0;Z=u+16|0;_=u+20|0;$=u+24|0;aa=u+28|0;ba=o|0;ca=o+4|0;da=o+8|0;o=v|0;ea=v+4|0;fa=v+8|0;ga=v+12|0;ha=w|0;ia=w+4|0;ja=w+8|0;ka=w+12|0;la=v+16|0;ma=v+20|0;na=v+24|0;oa=v+28|0;pa=w+16|0;qa=w+20|0;ra=w+24|0;sa=w+28|0;ta=p|0;ua=p+4|0;va=p+8|0;p=q|0;wa=q+4|0;xa=q+8|0;q=r|0;ya=r+4|0;za=r+8|0;r=x+4|0;Aa=s|0;Ba=s+4|0;Ca=s+8|0;Da=k+8|0;Ea=A;do{do{if((Qo(Ea,60472,z,128)|0)!=0){if((Tx(z,41280)|0)!=0){break}if((Qo(Ea,57792,y,128)|0)==0){ue[c[636260]&31](3,40464,(Fa=i,i=i+1|0,i=i+7&-8,c[Fa>>2]=0,Fa)|0);i=Fa;break}A=Vc(F|0)|0;if((A|0)<1){ue[c[636260]&31](3,39840,(Fa=i,i=i+1|0,i=i+7&-8,c[Fa>>2]=0,Fa)|0);i=Fa;break}Mo(A,j,n,G,H);Ro(Ea,26400,H)|0;Ga=+g[J>>2];Ha=+g[H>>2];Ia=+g[I>>2];So(Ea,39456,e)|0;if(!(+g[e>>2]!=0.0)){g[e>>2]=8.0}So(Ea,38952,f)|0;if(!(+g[f>>2]!=0.0)){g[f>>2]=+g[M>>2]- +g[Da>>2]- +g[e>>2]}So(Ea,50384,h)|0;if(!(+g[h>>2]!=0.0)){g[h>>2]=200.0}Ja=+g[n>>2];Ka=+g[G>>2];La=+g[K>>2];Ma=+g[L>>2];Na=+g[M>>2];Oa=Na-(Ga-(Ga- +g[f>>2]))+2.0;Ga=Ja+-1.0;g[n>>2]=Ga;Pa=Ka+1.0;g[G>>2]=Pa;Qa=La+-1.0;g[K>>2]=Qa;Ra=Ma+1.0;g[L>>2]=Ra;g[Da>>2]=+g[Da>>2]+-1.0;g[M>>2]=Na+1.0;Sa=Ha+(Ja+Ka)*.5;Ka=Ia+(La+Ma)*.5;Ma=Na+2.0;Na=(Ga+Pa)*.5;La=(Qa+Ra)*.5;g[N>>2]=Ga;g[O>>2]=Na;g[P>>2]=Pa;g[Q>>2]=Na;g[R>>2]=La;g[S>>2]=Ra;g[T>>2]=La;g[U>>2]=Qa;g[V>>2]=Ga;g[W>>2]=Pa;g[X>>2]=Pa;g[Y>>2]=Ga;g[Z>>2]=Ra;g[_>>2]=Ra;g[$>>2]=Qa;g[aa>>2]=Qa;Qa=Oa+16.0;Ra=Ma+16.0;Ga=Ma+32.0;Pa=Ma+24.0;Ma=Oa+24.0;Ta=0;do{a:do{if((Ta|0)<8){g[ba>>2]=+g[H>>2]+ +g[t+(Ta<<2)>>2];g[ca>>2]=+g[I>>2]+ +g[u+(Ta<<2)>>2];g[da>>2]=Qa;Ua=0;Va=gr(ba)|0;while(1){if((Va|0)!=0){if((c[(c[637759]|0)+(Va*28|0)+4>>2]&5|0)!=0){break}}g[da>>2]=+g[da>>2]+4.0;Wa=gr(ba)|0;Xa=Ua+1|0;if((Xa|0)<16){Ua=Xa;Va=Wa}else{break a}}if((Ua|0)<=15){Ya=Va;Za=24}}else{g[ba>>2]=Sa;g[ca>>2]=Ka;g[da>>2]=Pa;Wa=gr(ba)|0;if((Wa|0)==0){break}g[ba>>2]=Sa;g[ca>>2]=Ka;g[da>>2]=Ma;Ya=Wa;Za=24}}while(0);if((Za|0)==24){Za=0;Wa=0;do{Ia=+g[n>>2]+-4.0;g[n>>2]=Ia;Ja=+g[G>>2]+4.0;g[G>>2]=Ja;Ha=+g[K>>2]+-4.0;g[K>>2]=Ha;_a=+g[L>>2]+4.0;g[L>>2]=_a;g[Da>>2]=+g[Da>>2]+-4.0;g[M>>2]=+g[M>>2]+4.0;g[o>>2]=Ia;g[ea>>2]=Na;g[fa>>2]=Ja;g[ga>>2]=Na;g[ha>>2]=La;g[ia>>2]=_a;g[ja>>2]=La;g[ka>>2]=Ha;g[la>>2]=Ia;g[ma>>2]=Ja;g[na>>2]=Ja;g[oa>>2]=Ia;g[pa>>2]=_a;g[qa>>2]=_a;g[ra>>2]=Ha;g[sa>>2]=Ha;Xa=Wa;$a=1;Ha=Ia;Ia=La;while(1){g[ta>>2]=+g[H>>2]+Ha;g[ua>>2]=+g[I>>2]+Ia;g[va>>2]=Ra;ab=0;bb=gr(ta)|0;b:while(1){do{if((bb|0)!=0){if((c[(c[637759]|0)+(bb*28|0)+4>>2]&5|0)==0){break}g[p>>2]=Sa;g[wa>>2]=Ka;g[xa>>2]=Ga;g[q>>2]=+g[ta>>2];g[ya>>2]=+g[ua>>2];g[za>>2]=+g[va>>2]+1.0;lr(x,p,q,4,-1);if(!(+g[r>>2]<1.0)){Za=31;break b}}}while(0);g[va>>2]=+g[va>>2]+4.0;cb=gr(ta)|0;db=ab+1|0;if((db|0)<16){ab=db;bb=cb}else{eb=Xa;break}}c:do{if((Za|0)==31){Za=0;if((ab|0)>15|(bb|0)==(Ya|0)){eb=Xa;break}if((c[(c[637759]|0)+(bb*28|0)+4>>2]&1|0)==0){eb=Xa;break}cb=c[(c[637662]|0)+(Ya<<2)>>2]|0;if((cb|0)!=0){db=cb;do{if((c[db>>2]|0)==(bb|0)){eb=Xa;break c}db=c[db+44>>2]|0;}while((db|0)!=0)}g[Aa>>2]=+g[ba>>2]-Sa;g[Ba>>2]=+g[ca>>2]-Ka;g[Ca>>2]=+g[da>>2]-Oa;+dn(Aa);_a=+g[ba>>2]+ +g[Aa>>2]*24.0;g[Aa>>2]=_a;g[Ba>>2]=+g[ca>>2]+ +g[Ba>>2]*24.0;g[Ca>>2]=+g[da>>2];db=0;Ja=_a;while(1){fb=+g[m+(db<<2)>>2];if(Ja<fb+ +g[k+(db<<2)>>2]){break}cb=db+1|0;if(Ja>fb+ +g[l+(db<<2)>>2]){break}if((cb|0)>=3){eb=Xa;break c}db=cb;Ja=+g[s+(cb<<2)>>2]}if((db|0)>2){eb=Xa;break}cb=c[164946]|0;if((cb|0)==0){eb=Xa;break}gb=c[cb+44>>2]|0;if((gb|0)==0){tp(54768,(Fa=i,i=i+1|0,i=i+7&-8,c[Fa>>2]=0,Fa)|0);i=Fa;hb=c[164946]|0;c[164946]=c[hb+44>>2];c[164928]=(c[164928]|0)+1;if((hb|0)==0){eb=Xa;break}ib=hb;jb=+g[Aa>>2]}else{c[164946]=gb;c[164928]=(c[164928]|0)+1;ib=cb;jb=_a}c[ib>>2]=bb;c[ib+4>>2]=A;c[ib+8>>2]=~~+g[f>>2];g[ib+12>>2]=jb;g[ib+16>>2]=+g[Ba>>2];g[ib+20>>2]=+g[Ca>>2];g[ib+24>>2]=+g[ta>>2];g[ib+28>>2]=+g[ua>>2];g[ib+32>>2]=+g[va>>2];cb=ib+36|0;c[cb>>2]=11;do{if((To(Ea,52672,d)|0)==0){kb=0}else{gb=c[d>>2]|0;if((gb|0)==2){kb=33554432;break}else if((gb|0)==1){kb=16777216;break}else{kb=0;break}}}while(0);c[cb>>2]=c[cb>>2]|kb;b[ib+40>>1]=~~(+g[637858]+ +g[f>>2]*100.0/+g[h>>2]);c[ib+44>>2]=c[(c[637662]|0)+(Ya<<2)>>2];c[(c[637662]|0)+(Ya<<2)>>2]=ib;c[154394]=(c[154394]|0)+1;eb=9999}}while(0);if(($a|0)>=8){break}_a=+g[v+($a<<2)>>2];Ja=+g[w+($a<<2)>>2];Xa=eb;$a=$a+1|0;Ha=_a;Ia=Ja}Wa=eb+1|0;}while((Wa|0)<3)}Ta=Ta+1|0;}while((Ta|0)<9)}}while(0);Ea=Po(Ea)|0;}while((Ea|0)!=0);B=128;C=0;D=128;E=0;i=a;return}function mq(a,d,e,f){a=a|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,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0.0,ha=0,ia=0.0,ja=0,ka=0.0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0,Ha=0;h=i;i=i+88|0;j=h|0;k=h+8|0;l=h+24|0;m=h+40|0;n=h+56|0;o=h+72|0;if((c[637756]|0)<=1){p=0;i=h;return p|0}q=k|0;r=l|0;s=k+4|0;t=l+4|0;u=k+8|0;k=l+8|0;l=m|0;v=n|0;w=m+4|0;x=n+4|0;y=m+8|0;m=n+8|0;n=(f|0)!=0;f=o|0;z=o+4|0;A=o+8|0;o=(d|0)>0;B=0;C=0;D=1;E=0;a:while(1){F=c[637757]|0;G=F+(D*48|0)+4|0;H=c[G>>2]|0;do{if((H|0)>0){I=F+(D*48|0)+8|0;J=999999.0;K=B;L=0;M=E;N=H;while(1){O=c[(c[637755]|0)+((c[I>>2]|0)+L<<2)>>2]|0;P=(O|0)>-1?O:-O|0;Q=c[637753]|0;b:do{if((c[Q+(P*24|0)+4>>2]&4|0)==0){R=M;S=K;U=J;V=N}else{W=(c[637747]|0)+((c[Q+(P*24|0)>>2]|0)*20|0)|0;X=Q+(P*24|0)+8|0;Y=c[X>>2]|0;if((Y|0)<=0){R=M;S=K;U=J;V=N;break}Z=Q+(P*24|0)+12|0;if(o){_=J;$=K;aa=0;ba=M}else{ca=0;while(1){da=ca+1|0;if((da|0)<(Y|0)){ca=da}else{R=M;S=K;U=J;V=N;break b}}}while(1){ca=c[(c[637751]|0)+((c[Z>>2]|0)+aa<<2)>>2]|0;Y=(ca|0)>-1?ca:-ca|0;ca=c[637749]|0;da=c[637745]|0;ea=da+((c[ca+(Y<<3)>>2]|0)*12|0)|0;fa=da+((c[ca+(Y<<3)+4>>2]|0)*12|0)|0;ga=_;Y=$;ca=0;da=ba;while(1){ha=ca+1|0;ia=+hq(ea,fa,a+(ca*12|0)|0,a+(((ha|0)==(d|0)?0:ha)*12|0)|0,W,e,q,l,r,v,ga);ja=ia<ga;ka=ja?ia:ga;la=ja?O:Y;ma=ja?W:da;if((ha|0)<(d|0)){ga=ka;Y=la;ca=ha;da=ma}else{break}}da=aa+1|0;if((da|0)<(c[X>>2]|0)){_=ka;$=la;aa=da;ba=ma}else{break}}R=ma;S=la;U=ka;V=c[G>>2]|0}}while(0);O=L+1|0;if((O|0)<(V|0)){J=U;K=S;L=O;M=R;N=V}else{break}}if(U>192.0){na=C;oa=R;pa=S;break}J=+g[s>>2]+ +g[t>>2];ga=+g[u>>2]+ +g[k>>2];ia=(+g[q>>2]+ +g[r>>2])*.5;g[q>>2]=ia;qa=J*.5;g[s>>2]=qa;J=ga*.5;g[u>>2]=J;ga=+g[w>>2]+ +g[x>>2];ra=+g[y>>2]+ +g[m>>2];sa=(+g[l>>2]+ +g[v>>2])*.5;g[l>>2]=sa;ta=ga*.5;g[w>>2]=ta;ga=ra*.5;g[y>>2]=ga;if(n){ua=sa;va=ia;wa=ta;xa=qa;ya=ga;za=J}else{g[q>>2]=sa;g[s>>2]=ta;g[u>>2]=ga;g[l>>2]=ia;g[w>>2]=qa;g[y>>2]=J;ua=ia;va=sa;wa=qa;xa=ta;ya=J;za=ga}ga=ua-va;J=wa-xa;ta=+T(ga*ga+J*J+0.0);J=+g[637829];if(ta>+g[637832]*(+T(+g[637862]/(J*.5))+ +g[637843]/J)*2.0){na=C;oa=R;pa=S;break}if(ya+-32.0>za|ya<za+-128.0){na=C;oa=R;pa=S;break}if(ta>32.0){if((Pp(0.0,q,l,j)|0)==0){na=C;oa=R;pa=S;break}Aa=+g[u>>2];Ba=+g[y>>2]}else{Aa=za;Ba=ya}ta=Aa+1.0;g[u>>2]=ta;J=Ba+1.0;g[y>>2]=J;if(n){ga=+g[l>>2];g[f>>2]=ga;Ca=ga;Da=J;Ea=+g[w>>2]}else{J=+g[q>>2];g[f>>2]=J;Ca=J;Da=ta;Ea=+g[s>>2]}g[z>>2]=Ea;g[A>>2]=Da;if((R|0)==0){Fa=0.0}else{ta=+g[R+8>>2];Fa=(+g[R+12>>2]-(+g[R>>2]*Ca+ +g[R+4>>2]*Ea+ta*Da))/ta}g[A>>2]=Fa;if((nr(S,f,.10000000149011612)|0)==0){if(+g[y>>2]+-16.0>+g[u>>2]){na=C;oa=R;pa=S;break}}N=c[164946]|0;if((N|0)==0){p=C;Ga=37;break a}M=c[N+44>>2]|0;if((M|0)==0){tp(54768,(L=i,i=i+1|0,i=i+7&-8,c[L>>2]=0,L)|0);i=L;L=c[164946]|0;c[164946]=c[L+44>>2];c[164928]=(c[164928]|0)+1;if((L|0)==0){p=C;Ga=37;break a}else{Ha=L}}else{c[164946]=M;c[164928]=(c[164928]|0)+1;Ha=N}c[Ha>>2]=D;c[Ha+4>>2]=0;c[Ha+8>>2]=0;N=Ha+12|0;g[N>>2]=+g[q>>2];g[Ha+16>>2]=+g[s>>2];g[Ha+20>>2]=+g[u>>2];M=Ha+24|0;g[M>>2]=+g[l>>2];g[Ha+28>>2]=+g[w>>2];g[Ha+32>>2]=+g[y>>2];c[Ha+36>>2]=0;b[Ha+40>>1]=0;c[Ha+44>>2]=C;if(n){ep(N,M,1);na=Ha;oa=R;pa=S;break}else{ep(N,M,2);na=Ha;oa=R;pa=S;break}}else{na=C;oa=E;pa=B}}while(0);G=D+1|0;if((G|0)<(c[637756]|0)){B=pa;C=na;D=G;E=oa}else{p=na;Ga=37;break}}if((Ga|0)==37){i=h;return p|0}return 0}
|
|
|
|
|
|
|
|
function qx(a,b,e){a=a|0;b=b|0;e=e|0;var 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;if((b|0)==0){f=0;return f|0}g=~a;a:do{if((e|0)==0){h=g}else{a=b;i=e;j=g;while(1){if((a&3|0)==0){break}k=c[8264+(((d[a]|0)^j&255)<<2)>>2]^j>>>8;l=i-1|0;if((l|0)==0){h=k;break a}else{a=a+1|0;i=l;j=k}}k=a;if(i>>>0>31>>>0){l=i;m=j;n=k;while(1){o=c[n>>2]^m;p=c[10312+((o>>>8&255)<<2)>>2]^c[11336+((o&255)<<2)>>2]^c[9288+((o>>>16&255)<<2)>>2]^c[8264+(o>>>24<<2)>>2]^c[n+4>>2];o=c[10312+((p>>>8&255)<<2)>>2]^c[11336+((p&255)<<2)>>2]^c[9288+((p>>>16&255)<<2)>>2]^c[8264+(p>>>24<<2)>>2]^c[n+8>>2];p=c[10312+((o>>>8&255)<<2)>>2]^c[11336+((o&255)<<2)>>2]^c[9288+((o>>>16&255)<<2)>>2]^c[8264+(o>>>24<<2)>>2]^c[n+12>>2];o=c[10312+((p>>>8&255)<<2)>>2]^c[11336+((p&255)<<2)>>2]^c[9288+((p>>>16&255)<<2)>>2]^c[8264+(p>>>24<<2)>>2]^c[n+16>>2];p=c[10312+((o>>>8&255)<<2)>>2]^c[11336+((o&255)<<2)>>2]^c[9288+((o>>>16&255)<<2)>>2]^c[8264+(o>>>24<<2)>>2]^c[n+20>>2];o=c[10312+((p>>>8&255)<<2)>>2]^c[11336+((p&255)<<2)>>2]^c[9288+((p>>>16&255)<<2)>>2]^c[8264+(p>>>24<<2)>>2]^c[n+24>>2];p=n+32|0;q=c[10312+((o>>>8&255)<<2)>>2]^c[11336+((o&255)<<2)>>2]^c[9288+((o>>>16&255)<<2)>>2]^c[8264+(o>>>24<<2)>>2]^c[n+28>>2];o=c[10312+((q>>>8&255)<<2)>>2]^c[11336+((q&255)<<2)>>2]^c[9288+((q>>>16&255)<<2)>>2]^c[8264+(q>>>24<<2)>>2];q=l-32|0;if(q>>>0>31>>>0){l=q;m=o;n=p}else{r=q;s=o;t=p;break}}}else{r=i;s=j;t=k}if(r>>>0>3>>>0){n=r;m=s;l=t;while(1){a=l+4|0;p=c[l>>2]^m;o=c[10312+((p>>>8&255)<<2)>>2]^c[11336+((p&255)<<2)>>2]^c[9288+((p>>>16&255)<<2)>>2]^c[8264+(p>>>24<<2)>>2];p=n-4|0;if(p>>>0>3>>>0){n=p;m=o;l=a}else{u=p;v=o;w=a;break}}}else{u=r;v=s;w=t}if((u|0)==0){h=v;break}l=v;m=u;n=w;while(1){k=c[8264+(((d[n]|0)^l&255)<<2)>>2]^l>>>8;j=m-1|0;if((j|0)==0){h=k;break}else{l=k;m=j;n=n+1|0}}}}while(0);f=~h;return f|0}function rx(e,f){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,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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0;g=c[e+28>>2]|0;h=g;i=e|0;j=c[i>>2]|0;k=e+4|0;l=j+((c[k>>2]|0)-6)|0;m=e+12|0;n=c[m>>2]|0;o=e+16|0;p=c[o>>2]|0;q=n+(p-258)|0;r=c[h+44>>2]|0;s=c[h+48>>2]|0;t=c[h+52>>2]|0;u=h+56|0;v=h+60|0;w=c[h+76>>2]|0;x=c[h+80>>2]|0;y=(1<<c[h+84>>2])-1|0;z=(1<<c[h+88>>2])-1|0;A=n+(p+~f)|0;f=t-1|0;p=(s|0)==0;B=(c[h+40>>2]|0)-1|0;h=B+s|0;C=s-1|0;D=A-1|0;E=A-s|0;F=j-1|0;j=n-1|0;n=c[u>>2]|0;G=c[v>>2]|0;a:while(1){if(G>>>0<15>>>0){H=F+2|0;I=H;J=((d[F+1|0]|0)<<G)+n+((d[H]|0)<<G+8)|0;K=G+16|0}else{I=F;J=n;K=G}H=J&y;L=a[w+(H<<2)|0]|0;M=b[w+(H<<2)+2>>1]|0;N=d[w+(H<<2)+1|0]|0;H=J>>>(N>>>0);O=K-N|0;do{if(L<<24>>24==0){P=M&255;Q=H;R=O;S=6}else{N=M;T=H;U=O;V=L;while(1){W=V&255;if((W&16|0)!=0){break}if((W&64|0)!=0){S=53;break a}X=(T&(1<<W)-1)+(N&65535)|0;Y=a[w+(X<<2)|0]|0;Z=b[w+(X<<2)+2>>1]|0;_=d[w+(X<<2)+1|0]|0;$=T>>>(_>>>0);aa=U-_|0;if(Y<<24>>24==0){S=5;break}else{N=Z;T=$;U=aa;V=Y}}if((S|0)==5){S=0;P=Z&255;Q=$;R=aa;S=6;break}V=N&65535;Y=W&15;if((Y|0)==0){ba=V;ca=I;da=T;ea=U}else{if(U>>>0<Y>>>0){_=I+1|0;fa=_;ga=((d[_]|0)<<U)+T|0;ha=U+8|0}else{fa=I;ga=T;ha=U}ba=(ga&(1<<Y)-1)+V|0;ca=fa;da=ga>>>(Y>>>0);ea=ha-Y|0}if(ea>>>0<15>>>0){Y=ca+2|0;ia=Y;ja=((d[ca+1|0]|0)<<ea)+da+((d[Y]|0)<<ea+8)|0;ka=ea+16|0}else{ia=ca;ja=da;ka=ea}Y=ja&z;V=b[x+(Y<<2)+2>>1]|0;_=d[x+(Y<<2)+1|0]|0;X=ja>>>(_>>>0);la=ka-_|0;_=d[x+(Y<<2)|0]|0;if((_&16|0)==0){Y=V;ma=X;na=la;oa=_;while(1){if((oa&64|0)!=0){S=50;break a}pa=(ma&(1<<oa)-1)+(Y&65535)|0;qa=b[x+(pa<<2)+2>>1]|0;ra=d[x+(pa<<2)+1|0]|0;sa=ma>>>(ra>>>0);ta=na-ra|0;ra=d[x+(pa<<2)|0]|0;if((ra&16|0)==0){Y=qa;ma=sa;na=ta;oa=ra}else{ua=qa;va=sa;wa=ta;xa=ra;break}}}else{ua=V;va=X;wa=la;xa=_}oa=ua&65535;Y=xa&15;do{if(wa>>>0<Y>>>0){N=ia+1|0;ra=((d[N]|0)<<wa)+va|0;ta=wa+8|0;if(!(ta>>>0<Y>>>0)){ya=N;za=ra;Aa=ta;break}N=ia+2|0;ya=N;za=((d[N]|0)<<ta)+ra|0;Aa=wa+16|0}else{ya=ia;za=va;Aa=wa}}while(0);_=(za&(1<<Y)-1)+oa|0;Ba=za>>>(Y>>>0);Ca=Aa-Y|0;la=j;X=la-A|0;if(!(_>>>0>X>>>0)){V=j+(-_|0)|0;ra=ba;ta=j;while(1){a[ta+1|0]=a[V+1|0]|0;a[ta+2|0]=a[V+2|0]|0;N=V+3|0;Da=ta+3|0;a[Da]=a[N]|0;Ea=ra-3|0;if(Ea>>>0>2>>>0){V=N;ra=Ea;ta=Da}else{break}}if((Ea|0)==0){Fa=ya;Ga=Da;Ha=Ba;Ia=Ca;break}ra=ta+4|0;a[ra]=a[V+4|0]|0;if(!(Ea>>>0>1>>>0)){Fa=ya;Ga=ra;Ha=Ba;Ia=Ca;break}ra=ta+5|0;a[ra]=a[V+5|0]|0;Fa=ya;Ga=ra;Ha=Ba;Ia=Ca;break}ra=_-X|0;if(ra>>>0>r>>>0){S=20;break a}do{if(p){Y=t+(B-ra)|0;if(!(ra>>>0<ba>>>0)){Ja=Y;Ka=ba;La=j;break}oa=ba-ra|0;N=_-la|0;sa=Y;Y=ra;qa=j;do{sa=sa+1|0;qa=qa+1|0;a[qa]=a[sa]|0;Y=Y-1|0;}while((Y|0)!=0);Ja=j+(D+N+(1-_))|0;Ka=oa;La=j+(A+N)|0}else{if(!(s>>>0<ra>>>0)){Y=t+(C-ra)|0;if(!(ra>>>0<ba>>>0)){Ja=Y;Ka=ba;La=j;break}sa=ba-ra|0;qa=_-la|0;pa=Y;Y=ra;Ma=j;do{pa=pa+1|0;Ma=Ma+1|0;a[Ma]=a[pa]|0;Y=Y-1|0;}while((Y|0)!=0);Ja=j+(D+qa+(1-_))|0;Ka=sa;La=j+(A+qa)|0;break}Y=t+(h-ra)|0;pa=ra-s|0;if(!(pa>>>0<ba>>>0)){Ja=Y;Ka=ba;La=j;break}Ma=ba-pa|0;N=_-la|0;oa=Y;Y=pa;pa=j;do{oa=oa+1|0;pa=pa+1|0;a[pa]=a[oa]|0;Y=Y-1|0;}while((Y|0)!=0);Y=j+(E+N)|0;if(!(s>>>0<Ma>>>0)){Ja=f;Ka=Ma;La=Y;break}oa=Ma-s|0;pa=f;qa=s;sa=Y;do{pa=pa+1|0;sa=sa+1|0;a[sa]=a[pa]|0;qa=qa-1|0;}while((qa|0)!=0);Ja=j+(D+N+(1-_))|0;Ka=oa;La=j+(A+N)|0}}while(0);if(Ka>>>0>2>>>0){_=La;la=Ka;ra=Ja;while(1){a[_+1|0]=a[ra+1|0]|0;a[_+2|0]=a[ra+2|0]|0;X=ra+3|0;V=_+3|0;a[V]=a[X]|0;ta=la-3|0;if(ta>>>0>2>>>0){_=V;la=ta;ra=X}else{Na=V;Oa=ta;Pa=X;break}}}else{Na=La;Oa=Ka;Pa=Ja}if((Oa|0)==0){Fa=ya;Ga=Na;Ha=Ba;Ia=Ca;break}ra=Na+1|0;a[ra]=a[Pa+1|0]|0;if(!(Oa>>>0>1>>>0)){Fa=ya;Ga=ra;Ha=Ba;Ia=Ca;break}ra=Na+2|0;a[ra]=a[Pa+2|0]|0;Fa=ya;Ga=ra;Ha=Ba;Ia=Ca}}while(0);if((S|0)==6){S=0;L=j+1|0;a[L]=P;Fa=I;Ga=L;Ha=Q;Ia=R}if(Fa>>>0<l>>>0&Ga>>>0<q>>>0){F=Fa;j=Ga;n=Ha;G=Ia}else{Qa=Fa;Ra=Ga;Sa=Ha;Ta=Ia;break}}do{if((S|0)==20){c[e+24>>2]=42560;c[g>>2]=27;Qa=ya;Ra=j;Sa=Ba;Ta=Ca}else if((S|0)==50){c[e+24>>2]=56152;c[g>>2]=27;Qa=ia;Ra=j;Sa=ma;Ta=na}else if((S|0)==53){if((W&32|0)==0){c[e+24>>2]=46512;c[g>>2]=27;Qa=I;Ra=j;Sa=T;Ta=U;break}else{c[g>>2]=11;Qa=I;Ra=j;Sa=T;Ta=U;break}}}while(0);U=Ta>>>3;T=Qa+(-U|0)|0;j=Ta-(U<<3)|0;Ta=(1<<j)-1&Sa;c[i>>2]=Qa+(1-U);c[m>>2]=Ra+1;if(T>>>0<l>>>0){Ua=l-T|0}else{Ua=l-T|0}c[k>>2]=Ua+5;if(Ra>>>0<q>>>0){Va=q-Ra|0;Wa=Va+257|0;c[o>>2]=Wa;c[u>>2]=Ta;c[v>>2]=j;return}else{Va=q-Ra|0;Wa=Va+257|0;c[o>>2]=Wa;c[u>>2]=Ta;c[v>>2]=j;return}}function sx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if((e|0)==0){g=-6;return g|0}if(!((a[e]|0)==49&(f|0)==56)){g=-6;return g|0}if((b|0)==0){g=-2;return g|0}f=b+24|0;c[f>>2]=0;e=b+32|0;h=c[e>>2]|0;if((h|0)==0){c[e>>2]=34;c[b+40>>2]=0;i=34}else{i=h}h=b+36|0;if((c[h>>2]|0)==0){c[h>>2]=20}e=b+40|0;j=he[i&63](c[e>>2]|0,1,9520)|0;if((j|0)==0){g=-4;return g|0}i=b+28|0;c[i>>2]=j;if((d|0)<0){c[j+8>>2]=0;k=-d|0}else{c[j+8>>2]=(d>>4)+1;k=d}if((k-8|0)>>>0>7>>>0){ae[c[h>>2]&127](c[e>>2]|0,j);c[i>>2]=0;g=-2;return g|0}c[j+36>>2]=k;c[j+52>>2]=0;j=c[i>>2]|0;if((j|0)==0){g=-2;return g|0}i=j;c[i+28>>2]=0;c[b+20>>2]=0;c[b+8>>2]=0;c[f>>2]=0;c[b+48>>2]=1;c[j>>2]=0;c[i+4>>2]=0;c[i+12>>2]=0;c[i+20>>2]=32768;c[i+32>>2]=0;c[i+40>>2]=0;c[i+44>>2]=0;c[i+48>>2]=0;c[i+56>>2]=0;c[i+60>>2]=0;j=i+1328|0;c[i+108>>2]=j;c[i+80>>2]=j;c[i+76>>2]=j;g=0;return g|0}function tx(f,g){f=f|0;g=g|0;var 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,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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0;if((f|0)==0){h=-2;return h|0}i=c[f+28>>2]|0;if((i|0)==0){h=-2;return h|0}j=f+12|0;k=c[j>>2]|0;if((k|0)==0){h=-2;return h|0}l=f|0;m=c[l>>2]|0;do{if((m|0)==0){if((c[f+4>>2]|0)==0){break}else{h=-2}return h|0}}while(0);n=i;o=i;i=c[o>>2]|0;if((i|0)==11){c[o>>2]=12;p=c[j>>2]|0;q=c[l>>2]|0;r=12}else{p=k;q=m;r=i}i=f+16|0;m=c[i>>2]|0;k=f+4|0;s=c[k>>2]|0;t=n+56|0;u=n+60|0;v=n+8|0;w=n+36|0;x=f+24|0;y=n+20|0;z=n+24|0;A=f+48|0;B=n+12|0;C=(g|0)==5;D=n+4|0;E=n+76|0;F=n+84|0;G=n+80|0;H=n+88|0;I=n+64|0;J=n+72|0;K=n+68|0;L=n+44|0;M=n+48|0;N=n+52|0;O=n+40|0;P=f+20|0;Q=n+28|0;R=n+96|0;S=n+100|0;T=n+92|0;U=n+104|0;V=n+1328|0;W=n+108|0;X=n+112|0;Y=n+752|0;Z=0;_=m;$=c[u>>2]|0;aa=c[t>>2]|0;ba=m;m=s;ca=p;p=q;q=r;a:while(1){b:do{switch(q|0){case 20:{da=Z;ea=$;fa=aa;ga=m;ha=p;ia=130;break};case 22:{ja=Z;ka=$;la=aa;ma=m;na=p;ia=150;break};case 14:{oa=$;pa=aa;qa=m;ra=p;sa=c[I>>2]|0;ia=52;break};case 15:{if($>>>0<14>>>0){r=p;ta=m;ua=aa;va=$;while(1){if((ta|0)==0){wa=Z;xa=_;ya=va;za=ua;Aa=0;Ba=r;Ca=ba;break a}Da=ta-1|0;Ea=r+1|0;Fa=((d[r]|0)<<va)+ua|0;Ga=va+8|0;if(Ga>>>0<14>>>0){r=Ea;ta=Da;ua=Fa;va=Ga}else{Ha=Ea;Ia=Da;Ja=Fa;Ka=Ga;break}}}else{Ha=p;Ia=m;Ja=aa;Ka=$}va=(Ja&31)+257|0;c[R>>2]=va;ua=(Ja>>>5&31)+1|0;c[S>>2]=ua;c[T>>2]=(Ja>>>10&15)+4;ta=Ja>>>14;r=Ka-14|0;if(va>>>0>286>>>0|ua>>>0>30>>>0){c[x>>2]=25760;c[o>>2]=27;La=Z;Ma=_;Na=r;Oa=ta;Pa=ba;Qa=Ia;Ra=ca;Sa=Ha;break b}else{c[U>>2]=0;c[o>>2]=16;Ta=Ha;Ua=Ia;Va=ta;Wa=r;Xa=0;ia=62;break b}break};case 9:{if($>>>0<32>>>0){r=p;ta=m;ua=aa;va=$;while(1){if((ta|0)==0){wa=Z;xa=_;ya=va;za=ua;Aa=0;Ba=r;Ca=ba;break a}Ga=ta-1|0;Fa=r+1|0;Da=((d[r]|0)<<va)+ua|0;Ea=va+8|0;if(Ea>>>0<32>>>0){r=Fa;ta=Ga;ua=Da;va=Ea}else{Ya=Fa;Za=Ga;_a=Da;break}}}else{Ya=p;Za=m;_a=aa}va=cd(_a|0)|0;c[z>>2]=va;c[A>>2]=va;c[o>>2]=10;$a=0;ab=0;bb=Za;cb=Ya;ia=31;break};case 0:{if((c[v>>2]|0)==0){c[o>>2]=12;La=Z;Ma=_;Na=$;Oa=aa;Pa=ba;Qa=m;Ra=ca;Sa=p;break b}if($>>>0<16>>>0){va=p;ua=m;ta=aa;r=$;while(1){if((ua|0)==0){wa=Z;xa=_;ya=r;za=ta;Aa=0;Ba=va;Ca=ba;break a}Da=ua-1|0;Ga=va+1|0;Fa=((d[va]|0)<<r)+ta|0;Ea=r+8|0;if(Ea>>>0<16>>>0){va=Ga;ua=Da;ta=Fa;r=Ea}else{db=Ga;eb=Da;fb=Fa;gb=Ea;break}}}else{db=p;eb=m;fb=aa;gb=$}if(((((fb<<8&65280)+(fb>>>8)|0)>>>0)%31|0|0)!=0){c[x>>2]=56128;c[o>>2]=27;La=Z;Ma=_;Na=gb;Oa=fb;Pa=ba;Qa=eb;Ra=ca;Sa=db;break b}if((fb&15|0)!=8){c[x>>2]=46480;c[o>>2]=27;La=Z;Ma=_;Na=gb;Oa=fb;Pa=ba;Qa=eb;Ra=ca;Sa=db;break b}r=fb>>>4;ta=(r&15)+8|0;if(ta>>>0>(c[w>>2]|0)>>>0){c[x>>2]=40016;c[o>>2]=27;La=Z;Ma=_;Na=gb-4|0;Oa=r;Pa=ba;Qa=eb;Ra=ca;Sa=db;break b}else{c[y>>2]=1<<ta;ta=px(0,0,0)|0;c[z>>2]=ta;c[A>>2]=ta;c[o>>2]=fb>>>12&2^11;La=Z;Ma=_;Na=0;Oa=0;Pa=ba;Qa=eb;Ra=ca;Sa=db;break b}break};case 10:{$a=$;ab=aa;bb=m;cb=p;ia=31;break};case 11:{hb=$;ib=aa;jb=m;kb=p;ia=34;break};case 12:{lb=$;mb=aa;nb=m;ob=p;ia=35;break};case 13:{ta=$&7;r=aa>>>(ta>>>0);ua=$-ta|0;if(ua>>>0<32>>>0){ta=p;va=m;Ea=r;Fa=ua;while(1){if((va|0)==0){wa=Z;xa=_;ya=Fa;za=Ea;Aa=0;Ba=ta;Ca=ba;break a}Da=va-1|0;Ga=ta+1|0;pb=((d[ta]|0)<<Fa)+Ea|0;qb=Fa+8|0;if(qb>>>0<32>>>0){ta=Ga;va=Da;Ea=pb;Fa=qb}else{rb=Ga;sb=Da;tb=pb;ub=qb;break}}}else{rb=p;sb=m;tb=r;ub=ua}Fa=tb&65535;if((Fa|0)==(tb>>>16^65535|0)){c[I>>2]=Fa;c[o>>2]=14;oa=0;pa=0;qa=sb;ra=rb;sa=Fa;ia=52;break b}else{c[x>>2]=30080;c[o>>2]=27;La=Z;Ma=_;Na=ub;Oa=tb;Pa=ba;Qa=sb;Ra=ca;Sa=rb;break b}break};case 16:{Fa=c[U>>2]|0;if(Fa>>>0<(c[T>>2]|0)>>>0){Ta=p;Ua=m;Va=aa;Wa=$;Xa=Fa;ia=62}else{vb=p;wb=m;xb=aa;yb=$;zb=Fa;ia=66}break};case 18:{Ab=Z;Bb=$;Cb=aa;Db=m;Eb=p;ia=106;break};case 26:{Fb=1;Gb=$;Hb=aa;Ib=m;Jb=p;Kb=ba;ia=173;break a;break};case 27:{wa=-3;xa=_;ya=$;za=aa;Aa=m;Ba=p;Ca=ba;break a;break};case 28:{ia=182;break a;break};case 21:{Lb=Z;Mb=$;Nb=aa;Ob=m;Pb=p;Qb=c[J>>2]|0;ia=141;break};case 17:{Rb=Z;Sb=$;Tb=aa;Ub=m;Vb=p;Wb=c[U>>2]|0;ia=71;break};case 23:{if((ba|0)==0){Fb=Z;Gb=$;Hb=aa;Ib=m;Jb=p;Kb=0;ia=173;break a}a[ca]=c[I>>2];c[o>>2]=18;La=Z;Ma=_;Na=$;Oa=aa;Pa=ba-1|0;Qa=m;Ra=ca+1|0;Sa=p;break};case 24:{if((c[v>>2]|0)==0){Xb=_;Yb=$;Zb=aa;_b=m;$b=p;ia=172;break a}if($>>>0<32>>>0){Fa=p;Ea=m;va=aa;ta=$;while(1){if((Ea|0)==0){wa=Z;xa=_;ya=ta;za=va;Aa=0;Ba=Fa;Ca=ba;break a}qb=Ea-1|0;pb=Fa+1|0;Da=((d[Fa]|0)<<ta)+va|0;Ga=ta+8|0;if(Ga>>>0<32>>>0){Fa=pb;Ea=qb;va=Da;ta=Ga}else{ac=pb;bc=qb;cc=Da;dc=Ga;break}}}else{ac=p;bc=m;cc=aa;dc=$}ta=_-ba|0;c[P>>2]=(c[P>>2]|0)+ta;c[Q>>2]=(c[Q>>2]|0)+ta;if((_|0)!=(ba|0)){va=px(c[z>>2]|0,ca+(-ta|0)|0,ta)|0;c[z>>2]=va;c[A>>2]=va}va=cd(cc|0)|0;if((va|0)==(c[z>>2]|0)){Xb=ba;Yb=0;Zb=0;_b=bc;$b=ac;ia=172;break a}c[x>>2]=54504;c[o>>2]=27;La=Z;Ma=ba;Na=dc;Oa=cc;Pa=ba;Qa=bc;Ra=ca;Sa=ac;break};case 19:{ec=Z;fc=$;gc=aa;hc=m;ic=p;jc=c[J>>2]|0;ia=124;break};default:{h=-2;ia=183;break a}}}while(0);do{if((ia|0)==31){ia=0;if((c[B>>2]|0)==0){ia=32;break a}va=px(0,0,0)|0;c[z>>2]=va;c[A>>2]=va;c[o>>2]=11;hb=$a;ib=ab;jb=bb;kb=cb;ia=34}else if((ia|0)==52){ia=0;if((sa|0)==0){c[o>>2]=11;La=Z;Ma=_;Na=oa;Oa=pa;Pa=ba;Qa=qa;Ra=ca;Sa=ra;break}va=sa>>>0>qa>>>0?qa:sa;ta=va>>>0>ba>>>0?ba:va;if((ta|0)==0){Fb=Z;Gb=oa;Hb=pa;Ib=qa;Jb=ra;Kb=ba;ia=173;break a}Vx(ca|0,ra|0,ta)|0;c[I>>2]=(c[I>>2]|0)-ta;La=Z;Ma=_;Na=oa;Oa=pa;Pa=ba-ta|0;Qa=qa-ta|0;Ra=ca+ta|0;Sa=ra+ta|0}else if((ia|0)==62){while(1){ia=0;if(Wa>>>0<3>>>0){ta=Ta;va=Ua;Ea=Va;Fa=Wa;while(1){if((va|0)==0){wa=Z;xa=_;ya=Fa;za=Ea;Aa=0;Ba=ta;Ca=ba;break a}ua=va-1|0;r=ta+1|0;Ga=((d[ta]|0)<<Fa)+Ea|0;Da=Fa+8|0;if(Da>>>0<3>>>0){ta=r;va=ua;Ea=Ga;Fa=Da}else{kc=r;lc=ua;mc=Ga;nc=Da;break}}}else{kc=Ta;lc=Ua;mc=Va;nc=Wa}c[U>>2]=Xa+1;b[n+112+((e[3744+(Xa<<1)>>1]|0)<<1)>>1]=mc&7;Fa=mc>>>3;Ea=nc-3|0;va=c[U>>2]|0;if(va>>>0<(c[T>>2]|0)>>>0){Ta=kc;Ua=lc;Va=Fa;Wa=Ea;Xa=va;ia=62}else{vb=kc;wb=lc;xb=Fa;yb=Ea;zb=va;ia=66;break}}}}while(0);do{if((ia|0)==34){ia=0;if(C){Fb=Z;Gb=hb;Hb=ib;Ib=jb;Jb=kb;Kb=ba;ia=173;break a}else{lb=hb;mb=ib;nb=jb;ob=kb;ia=35}}else if((ia|0)==66){ia=0;if(zb>>>0<19>>>0){va=zb;do{c[U>>2]=va+1;b[n+112+((e[3744+(va<<1)>>1]|0)<<1)>>1]=0;va=c[U>>2]|0;}while(va>>>0<19>>>0)}c[W>>2]=V;c[E>>2]=V;c[F>>2]=7;va=wx(0,X,19,W,F,Y)|0;if((va|0)==0){c[U>>2]=0;c[o>>2]=17;Rb=0;Sb=yb;Tb=xb;Ub=wb;Vb=vb;Wb=0;ia=71;break}else{c[x>>2]=22312;c[o>>2]=27;La=va;Ma=_;Na=yb;Oa=xb;Pa=ba;Qa=wb;Ra=ca;Sa=vb;break}}}while(0);c:do{if((ia|0)==35){ia=0;if((c[D>>2]|0)!=0){va=lb&7;c[o>>2]=24;La=Z;Ma=_;Na=lb-va|0;Oa=mb>>>(va>>>0);Pa=ba;Qa=nb;Ra=ca;Sa=ob;break}if(lb>>>0<3>>>0){va=ob;Ea=nb;Fa=mb;ta=lb;while(1){if((Ea|0)==0){wa=Z;xa=_;ya=ta;za=Fa;Aa=0;Ba=va;Ca=ba;break a}Da=Ea-1|0;Ga=va+1|0;ua=((d[va]|0)<<ta)+Fa|0;r=ta+8|0;if(r>>>0<3>>>0){va=Ga;Ea=Da;Fa=ua;ta=r}else{oc=Ga;pc=Da;qc=ua;rc=r;break}}}else{oc=ob;pc=nb;qc=mb;rc=lb}c[D>>2]=qc&1;ta=qc>>>1&3;if((ta|0)==0){c[o>>2]=13}else if((ta|0)==1){c[E>>2]=3808;c[F>>2]=9;c[G>>2]=5856;c[H>>2]=5;c[o>>2]=18}else if((ta|0)==2){c[o>>2]=15}else if((ta|0)==3){c[x>>2]=35256;c[o>>2]=27}La=Z;Ma=_;Na=rc-3|0;Oa=qc>>>3;Pa=ba;Qa=pc;Ra=ca;Sa=oc}else if((ia|0)==71){ia=0;ta=c[R>>2]|0;Fa=c[S>>2]|0;do{if(Wb>>>0<(Fa+ta|0)>>>0){Ea=Vb;va=Ub;r=Tb;ua=Sb;Da=Wb;Ga=ta;qb=Fa;d:while(1){pb=(1<<c[F>>2])-1|0;sc=pb&r;tc=c[E>>2]|0;uc=d[tc+(sc<<2)+1|0]|0;if(uc>>>0>ua>>>0){vc=Ea;wc=va;xc=r;yc=ua;while(1){if((wc|0)==0){wa=Rb;xa=_;ya=yc;za=xc;Aa=0;Ba=vc;Ca=ba;break a}zc=wc-1|0;Ac=vc+1|0;Bc=((d[vc]|0)<<yc)+xc|0;Cc=yc+8|0;Dc=pb&Bc;Ec=d[tc+(Dc<<2)+1|0]|0;if(Ec>>>0>Cc>>>0){vc=Ac;wc=zc;xc=Bc;yc=Cc}else{Fc=Ac;Gc=zc;Hc=Bc;Ic=Cc;Jc=Dc;Kc=Ec;break}}}else{Fc=Ea;Gc=va;Hc=r;Ic=ua;Jc=sc;Kc=uc}yc=b[tc+(Jc<<2)+2>>1]|0;e:do{if((yc&65535)>>>0<16>>>0){if(Ic>>>0<Kc>>>0){xc=Fc;wc=Gc;vc=Hc;pb=Ic;while(1){if((wc|0)==0){wa=Rb;xa=_;ya=pb;za=vc;Aa=0;Ba=xc;Ca=ba;break a}Ec=wc-1|0;Dc=xc+1|0;Cc=((d[xc]|0)<<pb)+vc|0;Bc=pb+8|0;if(Bc>>>0<Kc>>>0){xc=Dc;wc=Ec;vc=Cc;pb=Bc}else{Lc=Dc;Mc=Ec;Nc=Cc;Oc=Bc;break}}}else{Lc=Fc;Mc=Gc;Nc=Hc;Oc=Ic}c[U>>2]=Da+1;b[n+112+(Da<<1)>>1]=yc;Pc=Oc-Kc|0;Qc=Nc>>>(Kc>>>0);Rc=Mc;Sc=Lc}else{if((yc<<16>>16|0)==16){pb=Kc+2|0;if(Ic>>>0<pb>>>0){vc=Fc;wc=Gc;xc=Hc;Bc=Ic;while(1){if((wc|0)==0){wa=Rb;xa=_;ya=Bc;za=xc;Aa=0;Ba=vc;Ca=ba;break a}Cc=wc-1|0;Ec=vc+1|0;Dc=((d[vc]|0)<<Bc)+xc|0;zc=Bc+8|0;if(zc>>>0<pb>>>0){vc=Ec;wc=Cc;xc=Dc;Bc=zc}else{Tc=Ec;Uc=Cc;Vc=Dc;Wc=zc;break}}}else{Tc=Fc;Uc=Gc;Vc=Hc;Wc=Ic}Xc=Vc>>>(Kc>>>0);Yc=Wc-Kc|0;if((Da|0)==0){ia=88;break d}Zc=b[n+112+(Da-1<<1)>>1]|0;_c=(Xc&3)+3|0;$c=Yc-2|0;ad=Xc>>>2;bd=Uc;dd=Tc}else if((yc<<16>>16|0)==17){Bc=Kc+3|0;if(Ic>>>0<Bc>>>0){xc=Fc;wc=Gc;vc=Hc;pb=Ic;while(1){if((wc|0)==0){wa=Rb;xa=_;ya=pb;za=vc;Aa=0;Ba=xc;Ca=ba;break a}zc=wc-1|0;Dc=xc+1|0;Cc=((d[xc]|0)<<pb)+vc|0;Ec=pb+8|0;if(Ec>>>0<Bc>>>0){xc=Dc;wc=zc;vc=Cc;pb=Ec}else{ed=Dc;fd=zc;gd=Cc;hd=Ec;break}}}else{ed=Fc;fd=Gc;gd=Hc;hd=Ic}pb=gd>>>(Kc>>>0);Zc=0;_c=(pb&7)+3|0;$c=-3-Kc+hd|0;ad=pb>>>3;bd=fd;dd=ed}else{pb=Kc+7|0;if(Ic>>>0<pb>>>0){vc=Fc;wc=Gc;xc=Hc;Bc=Ic;while(1){if((wc|0)==0){wa=Rb;xa=_;ya=Bc;za=xc;Aa=0;Ba=vc;Ca=ba;break a}Ec=wc-1|0;Cc=vc+1|0;zc=((d[vc]|0)<<Bc)+xc|0;Dc=Bc+8|0;if(Dc>>>0<pb>>>0){vc=Cc;wc=Ec;xc=zc;Bc=Dc}else{id=Cc;jd=Ec;kd=zc;ld=Dc;break}}}else{id=Fc;jd=Gc;kd=Hc;ld=Ic}Bc=kd>>>(Kc>>>0);Zc=0;_c=(Bc&127)+11|0;$c=-7-Kc+ld|0;ad=Bc>>>7;bd=jd;dd=id}if((Da+_c|0)>>>0>(qb+Ga|0)>>>0){ia=97;break d}else{md=_c;nd=Da}while(1){Bc=md-1|0;c[U>>2]=nd+1;b[n+112+(nd<<1)>>1]=Zc;if((Bc|0)==0){Pc=$c;Qc=ad;Rc=bd;Sc=dd;break e}md=Bc;nd=c[U>>2]|0}}}while(0);yc=c[U>>2]|0;od=c[R>>2]|0;tc=c[S>>2]|0;if(yc>>>0<(tc+od|0)>>>0){Ea=Sc;va=Rc;r=Qc;ua=Pc;Da=yc;Ga=od;qb=tc}else{ia=100;break}}if((ia|0)==88){ia=0;c[x>>2]=19320;c[o>>2]=27;La=Rb;Ma=_;Na=Yc;Oa=Xc;Pa=ba;Qa=Uc;Ra=ca;Sa=Tc;break c}else if((ia|0)==97){ia=0;c[x>>2]=19320;c[o>>2]=27;La=Rb;Ma=_;Na=$c;Oa=ad;Pa=ba;Qa=bd;Ra=ca;Sa=dd;break c}else if((ia|0)==100){ia=0;if((c[o>>2]|0)==27){La=Rb;Ma=_;Na=Pc;Oa=Qc;Pa=ba;Qa=Rc;Ra=ca;Sa=Sc;break c}else{pd=od;qd=Pc;rd=Qc;sd=Rc;td=Sc;break}}}else{pd=ta;qd=Sb;rd=Tb;sd=Ub;td=Vb}}while(0);c[W>>2]=V;c[E>>2]=V;c[F>>2]=9;ta=wx(1,X,pd,W,F,Y)|0;if((ta|0)!=0){c[x>>2]=17320;c[o>>2]=27;La=ta;Ma=_;Na=qd;Oa=rd;Pa=ba;Qa=sd;Ra=ca;Sa=td;break}c[G>>2]=c[W>>2];c[H>>2]=6;ta=wx(2,n+112+(c[R>>2]<<1)|0,c[S>>2]|0,W,H,Y)|0;if((ta|0)==0){c[o>>2]=18;Ab=0;Bb=qd;Cb=rd;Db=sd;Eb=td;ia=106;break}else{c[x>>2]=60032;c[o>>2]=27;La=ta;Ma=_;Na=qd;Oa=rd;Pa=ba;Qa=sd;Ra=ca;Sa=td;break}}}while(0);do{if((ia|0)==106){ia=0;if(Db>>>0>5>>>0&ba>>>0>257>>>0){c[j>>2]=ca;c[i>>2]=ba;c[l>>2]=Eb;c[k>>2]=Db;c[t>>2]=Cb;c[u>>2]=Bb;rx(f,_);La=Ab;Ma=_;Na=c[u>>2]|0;Oa=c[t>>2]|0;Pa=c[i>>2]|0;Qa=c[k>>2]|0;Ra=c[j>>2]|0;Sa=c[l>>2]|0;break}ta=(1<<c[F>>2])-1|0;Fa=ta&Cb;qb=c[E>>2]|0;Ga=a[qb+(Fa<<2)+1|0]|0;Da=Ga&255;if(Da>>>0>Bb>>>0){ua=Eb;r=Db;va=Cb;Ea=Bb;while(1){if((r|0)==0){wa=Ab;xa=_;ya=Ea;za=va;Aa=0;Ba=ua;Ca=ba;break a}tc=r-1|0;yc=ua+1|0;uc=((d[ua]|0)<<Ea)+va|0;sc=Ea+8|0;Bc=ta&uc;xc=a[qb+(Bc<<2)+1|0]|0;wc=xc&255;if(wc>>>0>sc>>>0){ua=yc;r=tc;va=uc;Ea=sc}else{ud=yc;vd=tc;wd=uc;xd=sc;yd=xc;zd=Bc;Ad=wc;break}}}else{ud=Eb;vd=Db;wd=Cb;xd=Bb;yd=Ga;zd=Fa;Ad=Da}Ea=a[qb+(zd<<2)|0]|0;va=b[qb+(zd<<2)+2>>1]|0;r=Ea&255;do{if(Ea<<24>>24==0){Bd=0;Cd=yd;Dd=va;Ed=xd;Fd=wd;Gd=vd;Hd=ud}else{if((r&240|0)!=0){Bd=Ea;Cd=yd;Dd=va;Ed=xd;Fd=wd;Gd=vd;Hd=ud;break}ua=va&65535;ta=(1<<Ad+r)-1|0;wc=((wd&ta)>>>(Ad>>>0))+ua|0;Bc=a[qb+(wc<<2)+1|0]|0;if(((Bc&255)+Ad|0)>>>0>xd>>>0){xc=ud;sc=vd;uc=wd;tc=xd;while(1){if((sc|0)==0){wa=Ab;xa=_;ya=tc;za=uc;Aa=0;Ba=xc;Ca=ba;break a}yc=sc-1|0;vc=xc+1|0;pb=((d[xc]|0)<<tc)+uc|0;Dc=tc+8|0;zc=((pb&ta)>>>(Ad>>>0))+ua|0;Ec=a[qb+(zc<<2)+1|0]|0;if(((Ec&255)+Ad|0)>>>0>Dc>>>0){xc=vc;sc=yc;uc=pb;tc=Dc}else{Id=vc;Jd=yc;Kd=pb;Ld=Dc;Md=zc;Nd=Ec;break}}}else{Id=ud;Jd=vd;Kd=wd;Ld=xd;Md=wc;Nd=Bc}Bd=a[qb+(Md<<2)|0]|0;Cd=Nd;Dd=b[qb+(Md<<2)+2>>1]|0;Ed=Ld-Ad|0;Fd=Kd>>>(Ad>>>0);Gd=Jd;Hd=Id}}while(0);qb=Cd&255;r=Fd>>>(qb>>>0);va=Ed-qb|0;c[I>>2]=Dd&65535;qb=Bd&255;if(Bd<<24>>24==0){c[o>>2]=23;La=Ab;Ma=_;Na=va;Oa=r;Pa=ba;Qa=Gd;Ra=ca;Sa=Hd;break}if((qb&32|0)!=0){c[o>>2]=11;La=Ab;Ma=_;Na=va;Oa=r;Pa=ba;Qa=Gd;Ra=ca;Sa=Hd;break}if((qb&64|0)==0){Ea=qb&15;c[J>>2]=Ea;c[o>>2]=19;ec=Ab;fc=va;gc=r;hc=Gd;ic=Hd;jc=Ea;ia=124;break}else{c[x>>2]=58544;c[o>>2]=27;La=Ab;Ma=_;Na=va;Oa=r;Pa=ba;Qa=Gd;Ra=ca;Sa=Hd;break}}}while(0);if((ia|0)==124){ia=0;if((jc|0)==0){Od=fc;Pd=gc;Qd=hc;Rd=ic}else{if(fc>>>0<jc>>>0){r=ic;va=hc;Ea=gc;qb=fc;while(1){if((va|0)==0){wa=ec;xa=_;ya=qb;za=Ea;Aa=0;Ba=r;Ca=ba;break a}Da=va-1|0;Fa=r+1|0;Ga=((d[r]|0)<<qb)+Ea|0;tc=qb+8|0;if(tc>>>0<jc>>>0){r=Fa;va=Da;Ea=Ga;qb=tc}else{Sd=Fa;Td=Da;Ud=Ga;Vd=tc;break}}}else{Sd=ic;Td=hc;Ud=gc;Vd=fc}c[I>>2]=(c[I>>2]|0)+((1<<jc)-1&Ud);Od=Vd-jc|0;Pd=Ud>>>(jc>>>0);Qd=Td;Rd=Sd}c[o>>2]=20;da=ec;ea=Od;fa=Pd;ga=Qd;ha=Rd;ia=130}do{if((ia|0)==130){ia=0;qb=(1<<c[H>>2])-1|0;Ea=qb&fa;va=c[G>>2]|0;r=a[va+(Ea<<2)+1|0]|0;tc=r&255;if(tc>>>0>ea>>>0){Ga=ha;Da=ga;Fa=fa;uc=ea;while(1){if((Da|0)==0){wa=da;xa=_;ya=uc;za=Fa;Aa=0;Ba=Ga;Ca=ba;break a}sc=Da-1|0;xc=Ga+1|0;ua=((d[Ga]|0)<<uc)+Fa|0;ta=uc+8|0;Ec=qb&ua;zc=a[va+(Ec<<2)+1|0]|0;Dc=zc&255;if(Dc>>>0>ta>>>0){Ga=xc;Da=sc;Fa=ua;uc=ta}else{Wd=xc;Xd=sc;Yd=ua;Zd=ta;_d=zc;$d=Ec;ae=Dc;break}}}else{Wd=ha;Xd=ga;Yd=fa;Zd=ea;_d=r;$d=Ea;ae=tc}uc=a[va+($d<<2)|0]|0;Fa=b[va+($d<<2)+2>>1]|0;Da=uc&255;if((Da&240|0)==0){Ga=Fa&65535;qb=(1<<ae+Da)-1|0;Da=((Yd&qb)>>>(ae>>>0))+Ga|0;Dc=a[va+(Da<<2)+1|0]|0;if(((Dc&255)+ae|0)>>>0>Zd>>>0){Ec=Wd;zc=Xd;ta=Yd;ua=Zd;while(1){if((zc|0)==0){wa=da;xa=_;ya=ua;za=ta;Aa=0;Ba=Ec;Ca=ba;break a}sc=zc-1|0;xc=Ec+1|0;pb=((d[Ec]|0)<<ua)+ta|0;yc=ua+8|0;vc=((pb&qb)>>>(ae>>>0))+Ga|0;Cc=a[va+(vc<<2)+1|0]|0;if(((Cc&255)+ae|0)>>>0>yc>>>0){Ec=xc;zc=sc;ta=pb;ua=yc}else{be=xc;ce=sc;de=pb;ee=yc;fe=vc;ge=Cc;break}}}else{be=Wd;ce=Xd;de=Yd;ee=Zd;fe=Da;ge=Dc}he=a[va+(fe<<2)|0]|0;ie=ge;je=b[va+(fe<<2)+2>>1]|0;ke=ee-ae|0;le=de>>>(ae>>>0);me=ce;ne=be}else{he=uc;ie=_d;je=Fa;ke=Zd;le=Yd;me=Xd;ne=Wd}ua=ie&255;ta=le>>>(ua>>>0);zc=ke-ua|0;ua=he&255;if((ua&64|0)==0){c[K>>2]=je&65535;Ec=ua&15;c[J>>2]=Ec;c[o>>2]=21;Lb=da;Mb=zc;Nb=ta;Ob=me;Pb=ne;Qb=Ec;ia=141;break}else{c[x>>2]=56760;c[o>>2]=27;La=da;Ma=_;Na=zc;Oa=ta;Pa=ba;Qa=me;Ra=ca;Sa=ne;break}}}while(0);do{if((ia|0)==141){ia=0;if((Qb|0)==0){oe=Mb;pe=Nb;qe=Ob;re=Pb;se=c[K>>2]|0}else{if(Mb>>>0<Qb>>>0){ta=Pb;zc=Ob;Ec=Nb;ua=Mb;while(1){if((zc|0)==0){wa=Lb;xa=_;ya=ua;za=Ec;Aa=0;Ba=ta;Ca=ba;break a}Ga=zc-1|0;qb=ta+1|0;tc=((d[ta]|0)<<ua)+Ec|0;Ea=ua+8|0;if(Ea>>>0<Qb>>>0){ta=qb;zc=Ga;Ec=tc;ua=Ea}else{te=qb;ue=Ga;ve=tc;we=Ea;break}}}else{te=Pb;ue=Ob;ve=Nb;we=Mb}ua=(c[K>>2]|0)+((1<<Qb)-1&ve)|0;c[K>>2]=ua;oe=we-Qb|0;pe=ve>>>(Qb>>>0);qe=ue;re=te;se=ua}if(se>>>0>(_-ba+(c[L>>2]|0)|0)>>>0){c[x>>2]=55408;c[o>>2]=27;La=Lb;Ma=_;Na=oe;Oa=pe;Pa=ba;Qa=qe;Ra=ca;Sa=re;break}else{c[o>>2]=22;ja=Lb;ka=oe;la=pe;ma=qe;na=re;ia=150;break}}}while(0);do{if((ia|0)==150){ia=0;if((ba|0)==0){Fb=ja;Gb=ka;Hb=la;Ib=ma;Jb=na;Kb=0;ia=173;break a}ua=_-ba|0;Ec=c[K>>2]|0;if(Ec>>>0>ua>>>0){zc=Ec-ua|0;ua=c[M>>2]|0;if(zc>>>0>ua>>>0){ta=zc-ua|0;xe=(c[N>>2]|0)+((c[O>>2]|0)-ta)|0;ye=ta}else{xe=(c[N>>2]|0)+(ua-zc)|0;ye=zc}zc=c[I>>2]|0;ze=xe;Ae=ye>>>0>zc>>>0?zc:ye;Be=zc}else{zc=c[I>>2]|0;ze=ca+(-Ec|0)|0;Ae=zc;Be=zc}zc=Ae>>>0>ba>>>0?ba:Ae;c[I>>2]=Be-zc;Ec=~ba;ua=~Ae;ta=Ec>>>0>ua>>>0?Ec:ua;ua=ze;Ec=zc;Fa=ca;while(1){a[Fa]=a[ua]|0;uc=Ec-1|0;if((uc|0)==0){break}else{ua=ua+1|0;Ec=uc;Fa=Fa+1|0}}Fa=ba-zc|0;Ec=ca+~ta|0;if((c[I>>2]|0)!=0){La=ja;Ma=_;Na=ka;Oa=la;Pa=Fa;Qa=ma;Ra=Ec;Sa=na;break}c[o>>2]=18;La=ja;Ma=_;Na=ka;Oa=la;Pa=Fa;Qa=ma;Ra=Ec;Sa=na}}while(0);Z=La;_=Ma;$=Na;aa=Oa;ba=Pa;m=Qa;ca=Ra;p=Sa;q=c[o>>2]|0}if((ia|0)==32){c[j>>2]=ca;c[i>>2]=ba;c[l>>2]=cb;c[k>>2]=bb;c[t>>2]=ab;c[u>>2]=$a;h=2;return h|0}else if((ia|0)==172){c[o>>2]=26;wa=1;xa=Xb;ya=Yb;za=Zb;Aa=_b;Ba=$b;Ca=ba}else if((ia|0)==173){wa=Fb;xa=_;ya=Gb;za=Hb;Aa=Ib;Ba=Jb;Ca=Kb}else if((ia|0)==182){h=-4;return h|0}else if((ia|0)==183){return h|0}c[j>>2]=ca;c[i>>2]=Ca;c[l>>2]=Ba;c[k>>2]=Aa;c[t>>2]=za;c[u>>2]=ya;do{if((c[O>>2]|0)==0){if(!((c[o>>2]|0)>>>0<24>>>0)){break}if((xa|0)!=(c[i>>2]|0)){ia=177}}else{ia=177}}while(0);do{if((ia|0)==177){if((ux(f,xa)|0)==0){break}c[o>>2]=28;h=-4;return h|0}}while(0);ia=c[k>>2]|0;k=c[i>>2]|0;i=xa-k|0;O=f+8|0;c[O>>2]=s-ia+(c[O>>2]|0);c[P>>2]=(c[P>>2]|0)+i;c[Q>>2]=(c[Q>>2]|0)+i;Q=(xa|0)==(k|0);if(!((c[v>>2]|0)==0|Q)){v=px(c[z>>2]|0,(c[j>>2]|0)+(-i|0)|0,i)|0;c[z>>2]=v;c[A>>2]=v}c[f+44>>2]=((c[D>>2]|0)!=0?64:0)+(c[u>>2]|0)+((c[o>>2]|0)==11?128:0);h=((s|0)==(ia|0)&Q|(g|0)==4)&(wa|0)==0?-5:wa;return h|0}function ux(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;d=c[a+28>>2]|0;e=d+52|0;f=c[e>>2]|0;do{if((f|0)==0){g=he[c[a+32>>2]&63](c[a+40>>2]|0,1<<c[d+36>>2],1)|0;c[e>>2]=g;if((g|0)==0){h=1}else{i=g;break}return h|0}else{i=f}}while(0);f=d+40|0;g=c[f>>2]|0;if((g|0)==0){j=1<<c[d+36>>2];c[f>>2]=j;c[d+48>>2]=0;c[d+44>>2]=0;k=j}else{k=g}g=b-(c[a+16>>2]|0)|0;if(!(g>>>0<k>>>0)){Vx(i|0,(c[a+12>>2]|0)+(-k|0)|0,k)|0;c[d+48>>2]=0;c[d+44>>2]=c[f>>2];h=0;return h|0}b=d+48|0;j=c[b>>2]|0;l=k-j|0;k=l>>>0>g>>>0?g:l;l=a+12|0;Vx(i+j|0,(c[l>>2]|0)+(-g|0)|0,k)|0;j=g-k|0;if((g|0)!=(k|0)){Vx(c[e>>2]|0,(c[l>>2]|0)+(-j|0)|0,j)|0;c[b>>2]=j;c[d+44>>2]=c[f>>2];h=0;return h|0}j=(c[b>>2]|0)+g|0;l=c[f>>2]|0;c[b>>2]=(j|0)==(l|0)?0:j;j=d+44|0;d=c[j>>2]|0;if(!(d>>>0<l>>>0)){h=0;return h|0}c[j>>2]=d+g;h=0;return h|0}function vx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((a|0)==0){b=-2;return b|0}d=a+28|0;e=c[d>>2]|0;if((e|0)==0){b=-2;return b|0}f=a+36|0;g=c[f>>2]|0;if((g|0)==0){b=-2;return b|0}h=c[e+52>>2]|0;i=a+40|0;if((h|0)==0){j=g;k=e}else{ae[g&127](c[i>>2]|0,h);j=c[f>>2]|0;k=c[d>>2]|0}ae[j&127](c[i>>2]|0,k);c[d>>2]=0;b=0;return b|0}function wx(d,f,g,h,j,k){d=d|0;f=f|0;g=g|0;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,W=0,X=0,Y=0,Z=0;l=i;i=i+32|0;m=l|0;n=i;i=i+32|0;Zx(m|0,0,32)|0;o=(g|0)==0;if(!o){p=0;do{q=m+(e[f+(p<<1)>>1]<<1)|0;b[q>>1]=(b[q>>1]|0)+1;p=p+1|0;}while(p>>>0<g>>>0)}p=c[j>>2]|0;q=15;while(1){r=q-1|0;if((b[m+(q<<1)>>1]|0)!=0){break}if((r|0)==0){s=7;break}else{q=r}}if((s|0)==7){r=c[h>>2]|0;c[h>>2]=r+4;a[r|0]=64;a[r+1|0]=1;b[r+2>>1]=0;r=c[h>>2]|0;c[h>>2]=r+4;a[r|0]=64;a[r+1|0]=1;b[r+2>>1]=0;c[j>>2]=1;t=0;i=l;return t|0}r=p>>>0>q>>>0?q:p;p=1;while(1){u=p+1|0;if((b[m+(p<<1)>>1]|0)!=0){v=p;break}if(u>>>0<16>>>0){p=u}else{v=u;break}}p=r>>>0<v>>>0?v:r;r=1;u=2;while(1){w=u-(e[m+(r<<1)>>1]|0)|0;x=r+1|0;if((w|0)<0){t=-1;s=55;break}if(!(x>>>0<16>>>0)){break}r=x;u=w<<1}if((s|0)==55){i=l;return t|0}do{if((w|0)>0){if((d|0)!=0&(q|0)==1){break}else{t=-1}i=l;return t|0}}while(0);b[n+2>>1]=0;w=b[m+2>>1]|0;b[n+4>>1]=w;u=(b[m+4>>1]|0)+w&65535;b[n+6>>1]=u;w=(b[m+6>>1]|0)+u&65535;b[n+8>>1]=w;u=(b[m+8>>1]|0)+w&65535;b[n+10>>1]=u;w=(b[m+10>>1]|0)+u&65535;b[n+12>>1]=w;u=(b[m+12>>1]|0)+w&65535;b[n+14>>1]=u;w=(b[m+14>>1]|0)+u&65535;b[n+16>>1]=w;u=(b[m+16>>1]|0)+w&65535;b[n+18>>1]=u;w=(b[m+18>>1]|0)+u&65535;b[n+20>>1]=w;u=(b[m+20>>1]|0)+w&65535;b[n+22>>1]=u;w=(b[m+22>>1]|0)+u&65535;b[n+24>>1]=w;u=(b[m+24>>1]|0)+w&65535;b[n+26>>1]=u;w=(b[m+26>>1]|0)+u&65535;b[n+28>>1]=w;b[n+30>>1]=(b[m+28>>1]|0)+w;if(!o){o=0;do{w=b[f+(o<<1)>>1]|0;if(!(w<<16>>16==0)){u=n+((w&65535)<<1)|0;w=b[u>>1]|0;b[u>>1]=w+1;b[k+((w&65535)<<1)>>1]=o}o=o+1|0;}while(o>>>0<g>>>0)}do{if((d|0)==1){g=1<<p;if(g>>>0>1455>>>0){t=1}else{y=3038;z=2974;A=256;B=g;C=1;break}i=l;return t|0}else if((d|0)==0){y=k;z=k;A=19;B=1<<p;C=0}else{y=3680;z=3616;A=-1;B=1<<p;C=0}}while(0);d=B-1|0;g=p&255;o=c[h>>2]|0;n=-1;w=0;u=B;B=0;r=p;x=0;D=v;a:while(1){v=1<<r;E=w;F=x;G=D;while(1){H=G-B|0;I=H&255;J=b[k+(F<<1)>>1]|0;K=J&65535;do{if((K|0)<(A|0)){L=0;M=J}else{if((K|0)<=(A|0)){L=96;M=0;break}L=b[z+(K<<1)>>1]&255;M=b[y+(K<<1)>>1]|0}}while(0);K=1<<H;J=E>>>(B>>>0);N=v;while(1){O=N-K|0;P=O+J|0;a[o+(P<<2)|0]=L;a[o+(P<<2)+1|0]=I;b[o+(P<<2)+2>>1]=M;if((N|0)==(K|0)){break}else{N=O}}N=1<<G-1;while(1){if((N&E|0)==0){break}else{N=N>>>1}}if((N|0)==0){Q=0}else{Q=(N-1&E)+N|0}R=F+1|0;K=m+(G<<1)|0;J=(b[K>>1]|0)-1&65535;b[K>>1]=J;if(J<<16>>16==0){if((G|0)==(q|0)){break a}S=e[f+(e[k+(R<<1)>>1]<<1)>>1]|0}else{S=G}if(!(S>>>0>p>>>0)){E=Q;F=R;G=S;continue}T=Q&d;if((T|0)==(n|0)){E=Q;F=R;G=S}else{break}}G=(B|0)==0?p:B;F=o+(v<<2)|0;E=S-G|0;b:do{if(S>>>0<q>>>0){J=E;K=1<<E;H=S;while(1){O=K-(e[m+(H<<1)>>1]|0)|0;if((O|0)<1){U=J;break b}P=J+1|0;V=P+G|0;if(V>>>0<q>>>0){J=P;K=O<<1;H=V}else{U=P;break}}}else{U=E}}while(0);E=(1<<U)+u|0;if(C&E>>>0>1455>>>0){t=1;s=55;break}a[(c[h>>2]|0)+(T<<2)|0]=U;a[(c[h>>2]|0)+(T<<2)+1|0]=g;v=c[h>>2]|0;b[v+(T<<2)+2>>1]=(F-v|0)>>>2;o=F;n=T;w=Q;u=E;B=G;r=U;x=R;D=S}if((s|0)==55){i=l;return t|0}c:do{if((Q|0)!=0){s=q;S=B;D=Q;R=I;x=o;while(1){do{if((S|0)==0){W=x;X=R;Y=0;Z=s}else{if((D&d|0)==(n|0)){W=x;X=R;Y=S;Z=s;break}W=c[h>>2]|0;X=g;Y=0;Z=p}}while(0);U=D>>>(Y>>>0);a[W+(U<<2)|0]=64;a[W+(U<<2)+1|0]=X;b[W+(U<<2)+2>>1]=0;U=1<<Z-1;while(1){if((U&D|0)==0){break}else{U=U>>>1}}if((U|0)==0){break c}r=(U-1&D)+U|0;if((r|0)==0){break}else{s=Z;S=Y;D=r;R=X;x=W}}}}while(0);c[h>>2]=(c[h>>2]|0)+(u<<2);c[j>>2]=p;t=0;i=l;return t|0}function xx(a,b,c){a=a|0;b=b|0;c=c|0;return Fx(da(c,b)|0)|0}function yx(a,b){a=a|0;b=b|0;Gx(b);return}function zx(a){a=a|0;c[142754]=a;return}function Ax(){var b=0,d=0,e=0,f=0,g=0,h=0;b=i;i=i+16|0;d=b|0;e=b+8|0;if(a[744]|0){f=c[31624]|0;if((f|0)==0){if((c[638024]|0)>0){g=0;do{a[d]=8;xd(1,d|0,1)|0;a[d]=32;xd(1,d|0,1)|0;a[d]=8;xd(1,d|0,1)|0;g=g+1|0;}while((g|0)<(c[638024]|0))}a[e]=8;xd(1,e|0,1)|0;a[e]=32;xd(1,e|0,1)|0;a[e]=8;xd(1,e|0,1)|0;h=c[31624]|0}else{h=f}c[31624]=h+1;Hb(0,1,2552024)|0}h=Xb(0,3,(f=i,i=i+8|0,c[f>>2]=0,f)|0)|0;i=f;Xb(0,4,(f=i,i=i+8|0,c[f>>2]=h&-2049,f)|0)|0;i=f;i=b;return}function Bx(a){a=a|0;Cx();return}function Cx(){var b=0,e=0,f=0,g=0,h=0,j=0,k=0;b=i;i=i+64|0;e=b|0;qb(21,1)|0;qb(22,1)|0;qb(18,104)|0;f=Xb(0,3,(g=i,i=i+8|0,c[g>>2]=0,g)|0)|0;i=g;Xb(0,4,(g=i,i=i+8|0,c[g>>2]=f|2048,g)|0)|0;i=g;if((c[142754]|0)==0){_i(42488,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;a[744]=0;a[752]=1;h=60;j=0;i=b;return}Sj(2552096);Jb(0,2552024)|0;c[638022]=d[2552043]|0;Vx(e|0,2552024,60)|0;g=e+12|0;c[g>>2]=c[g>>2]&-11;g=e|0;c[g>>2]=c[g>>2]&-49;a[e+23|0]=1;a[e+22|0]=0;Hb(0,1,e|0)|0;a[744]=1;c[31624]=0;xd(1,56120,1)|0;if((c[638024]|0)>0){k=0}else{h=60;j=0;i=b;return}do{xd(1,2552108+k|0,1)|0;k=k+1|0;}while((k|0)<(c[638024]|0));h=60;j=0;i=b;return}function Dx(){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,x=0,y=0,z=0,A=0;b=i;i=i+216|0;d=b|0;e=b+8|0;f=b+16|0;g=b+24|0;h=b+32|0;j=b+40|0;k=b+48|0;l=b+56|0;m=b+64|0;n=b+72|0;o=b+80|0;p=b+88|0;q=p;r=i;i=i+8|0;if(!(a[744]|0)){if(!(a[752]|0)){s=0;i=b;return s|0}t=p|0;Zx(q|0,0,128)|0;c[t>>2]=1;c[r>>2]=0;c[r+4>>2]=0;if((Tb(1,p|0,0,0,r|0)|0)==-1){s=0;i=b;return s|0}if((c[t>>2]&1|0)==0){s=0;i=b;return s|0}t=hb(0,2645312,256)|0;if((t|0)==0){a[752]=0;s=0;i=b;return s|0}if((t|0)<1){s=0;i=b;return s|0}a[2645312+(t-1)|0]=0;s=2645312;i=b;return s|0}if((hb(0,o|0,1)|0)==-1){s=0;i=b;return s|0}t=a[o]|0;do{if((t<<24>>24|0)!=(c[638022]|0)){if((t<<24>>24|0)==127|(t<<24>>24|0)==8){break}if(!(t<<24>>24!=0&t<<24>>24<32)){r=c[638024]|0;if(r>>>0>254>>>0){s=0;i=b;return s|0}a[2552108+r|0]=t;c[638024]=(c[638024]|0)+1;xd(1,o|0,1)|0;s=0;i=b;return s|0}if((t<<24>>24|0)==10){if((c[638024]|0)!=0){r=31;while(1){p=r-1|0;Vx(126504+(r*268|0)|0,126504+(p*268|0)|0,268)|0;if((p|0)>0){r=p}else{break}}Vx(126504,2552096,268)|0;r=c[196496]|0;if((r|0)<32){c[196496]=r+1}c[946]=-1}rn(2645312,2552108,256);Sj(2552096);a[o]=10;xd(1,o|0,1)|0;xd(1,56120,1)|0;s=2645312;i=b;return s|0}else if((t<<24>>24|0)==9){do{if(a[744]|0){r=c[31624]|0;if((r|0)!=0){c[31624]=r+1;break}if((c[638024]|0)>0){r=0;do{a[f]=8;xd(1,f|0,1)|0;a[f]=32;xd(1,f|0,1)|0;a[f]=8;xd(1,f|0,1)|0;r=r+1|0;}while((r|0)<(c[638024]|0))}a[m]=8;xd(1,m|0,1)|0;a[m]=32;xd(1,m|0,1)|0;a[m]=8;xd(1,m|0,1)|0;c[31624]=(c[31624]|0)+1}}while(0);Zj(2552096);if(!(a[744]|0)){s=0;i=b;return s|0}r=(c[31624]|0)-1|0;c[31624]=r;if((r|0)!=0){s=0;i=b;return s|0}xd(1,56120,1)|0;if((c[638024]|0)>0){u=0}else{s=0;i=b;return s|0}while(1){xd(1,2552108+u|0,1)|0;r=u+1|0;if((r|0)<(c[638024]|0)){u=r}else{s=0;break}}i=b;return s|0}else{do{if(!((hb(0,o|0,1)|0)==-1)){r=a[o]|0;if(!((r<<24>>24|0)==91|(r<<24>>24|0)==79)){break}if((hb(0,o|0,1)|0)==-1){break}r=a[o]|0;if((r|0)==65){p=(c[946]|0)+1|0;do{if((p|0)<(c[196496]|0)){c[946]=p;q=126504+(p*268|0)|0;if((q|0)==0){break}if(!(a[744]|0)){Vx(2552096,q|0,268)|0;break}v=c[31624]|0;if((v|0)==0){if((c[638024]|0)>0){w=0;do{a[e]=8;xd(1,e|0,1)|0;a[e]=32;xd(1,e|0,1)|0;a[e]=8;xd(1,e|0,1)|0;w=w+1|0;}while((w|0)<(c[638024]|0))}a[l]=8;xd(1,l|0,1)|0;a[l]=32;xd(1,l|0,1)|0;a[l]=8;xd(1,l|0,1)|0;c[31624]=(c[31624]|0)+1;w=a[744]|0;Vx(2552096,q|0,268)|0;if(!w){break}}else{c[31624]=v+1;Vx(2552096,q|0,268)|0}w=(c[31624]|0)-1|0;c[31624]=w;if((w|0)!=0){break}xd(1,56120,1)|0;if((c[638024]|0)>0){x=0}else{break}do{xd(1,2552108+x|0,1)|0;x=x+1|0;}while((x|0)<(c[638024]|0))}}while(0);while(1){if((hb(0,k|0,1)|0)==-1){s=0;break}}i=b;return s|0}else if((r|0)==66){p=c[946]|0;if((p|0)>-1){q=p-1|0;c[946]=q;y=q}else{y=p}if((y|0)==-1){z=0}else{z=126504+(y*268|0)|0}do{if(a[744]|0){p=c[31624]|0;if((p|0)!=0){c[31624]=p+1;break}if((c[638024]|0)>0){p=0;do{a[d]=8;xd(1,d|0,1)|0;a[d]=32;xd(1,d|0,1)|0;a[d]=8;xd(1,d|0,1)|0;p=p+1|0;}while((p|0)<(c[638024]|0))}a[j]=8;xd(1,j|0,1)|0;a[j]=32;xd(1,j|0,1)|0;a[j]=8;xd(1,j|0,1)|0;c[31624]=(c[31624]|0)+1}}while(0);if((z|0)==0){Sj(2552096)}else{Vx(2552096,z|0,268)|0}do{if(a[744]|0){p=(c[31624]|0)-1|0;c[31624]=p;if((p|0)!=0){break}xd(1,56120,1)|0;if((c[638024]|0)>0){A=0}else{break}do{xd(1,2552108+A|0,1)|0;A=A+1|0;}while((A|0)<(c[638024]|0))}}while(0);while(1){if((hb(0,h|0,1)|0)==-1){s=0;break}}i=b;return s|0}else if((r|0)==67|(r|0)==68){s=0;i=b;return s|0}else{break}}}while(0);p=c[638022]|0;$i(46424,(q=i,i=i+16|0,c[q>>2]=a[o]|0,c[q+8>>2]=p,q)|0);i=q;while(1){if((hb(0,g|0,1)|0)==-1){s=0;break}}i=b;return s|0}}}while(0);g=c[638024]|0;if((g|0)<=0){s=0;i=b;return s|0}o=g-1|0;c[638024]=o;a[2552108+o|0]=0;a[n]=8;xd(1,n|0,1)|0;a[n]=32;xd(1,n|0,1)|0;a[n]=8;xd(1,n|0,1)|0;s=0;i=b;return s|0}function Ex(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+16|0;e=d|0;f=d+8|0;if((a[b]|0)==0){i=d;return}do{if(a[744]|0){g=c[31624]|0;if((g|0)!=0){c[31624]=g+1;break}if((c[638024]|0)>0){g=0;do{a[e]=8;xd(1,e|0,1)|0;a[e]=32;xd(1,e|0,1)|0;a[e]=8;xd(1,e|0,1)|0;g=g+1|0;}while((g|0)<(c[638024]|0))}a[f]=8;xd(1,f|0,1)|0;a[f]=32;xd(1,f|0,1)|0;a[f]=8;xd(1,f|0,1)|0;c[31624]=(c[31624]|0)+1}}while(0);f=c[430926]|0;do{if((f|0)==0){h=11}else{if((c[f+32>>2]|0)==0){h=11;break}gx(b)}}while(0);if((h|0)==11){Fc(b|0,c[q>>2]|0)|0}if(!(a[744]|0)){i=d;return}if((a[b+((Wx(b|0)|0)-1)|0]|0)!=10){c[31622]=(c[31622]|0)+1;i=d;return}b=(c[31624]|0)-1|0;c[31624]=b;do{if((b|0)==0){xd(1,56120,1)|0;if((c[638024]|0)>0){j=0}else{break}do{xd(1,2552108+j|0,1)|0;j=j+1|0;}while((j|0)<(c[638024]|0))}}while(0);if((c[31622]|0)<=0){i=d;return}do{do{if(a[744]|0){j=(c[31624]|0)-1|0;c[31624]=j;if((j|0)!=0){break}xd(1,56120,1)|0;if((c[638024]|0)>0){k=0}else{break}do{xd(1,2552108+k|0,1)|0;k=k+1|0;}while((k|0)<(c[638024]|0))}}while(0);j=(c[31622]|0)-1|0;c[31622]=j;}while((j|0)>0);i=d;return}function Fx(a){a=a|0;var b=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,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,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;do{if(a>>>0<245>>>0){if(a>>>0<11>>>0){b=16}else{b=a+11&-8}d=b>>>3;e=c[637888]|0;f=e>>>(d>>>0);if((f&3|0)!=0){g=(f&1^1)+d|0;h=g<<1;i=2551592+(h<<2)|0;j=2551592+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do{if((i|0)==(l|0)){c[637888]=e&~(1<<g)}else{if(l>>>0<(c[637892]|0)>>>0){ld();return 0}m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break}else{ld();return 0}}}while(0);l=g<<3;c[h+4>>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}if(!(b>>>0>(c[637890]|0)>>>0)){o=b;break}if((f|0)!=0){j=2<<d;l=f<<d&(j|-j);j=(l&-l)-1|0;l=j>>>12&16;i=j>>>(l>>>0);j=i>>>5&8;m=i>>>(j>>>0);i=m>>>2&4;p=m>>>(i>>>0);m=p>>>1&2;q=p>>>(m>>>0);p=q>>>1&1;r=(j|l|i|m|p)+(q>>>(p>>>0))|0;p=r<<1;q=2551592+(p<<2)|0;m=2551592+(p+2<<2)|0;p=c[m>>2]|0;i=p+8|0;l=c[i>>2]|0;do{if((q|0)==(l|0)){c[637888]=e&~(1<<r)}else{if(l>>>0<(c[637892]|0)>>>0){ld();return 0}j=l+12|0;if((c[j>>2]|0)==(p|0)){c[j>>2]=q;c[m>>2]=l;break}else{ld();return 0}}}while(0);l=r<<3;m=l-b|0;c[p+4>>2]=b|3;q=p;e=q+b|0;c[q+(b|4)>>2]=m|1;c[q+l>>2]=m;l=c[637890]|0;if((l|0)!=0){q=c[637893]|0;d=l>>>3;l=d<<1;f=2551592+(l<<2)|0;k=c[637888]|0;h=1<<d;do{if((k&h|0)==0){c[637888]=k|h;s=f;t=2551592+(l+2<<2)|0}else{d=2551592+(l+2<<2)|0;g=c[d>>2]|0;if(!(g>>>0<(c[637892]|0)>>>0)){s=g;t=d;break}ld();return 0}}while(0);c[t>>2]=q;c[s+12>>2]=q;c[q+8>>2]=s;c[q+12>>2]=f}c[637890]=m;c[637893]=e;n=i;return n|0}l=c[637889]|0;if((l|0)==0){o=b;break}h=(l&-l)-1|0;l=h>>>12&16;k=h>>>(l>>>0);h=k>>>5&8;p=k>>>(h>>>0);k=p>>>2&4;r=p>>>(k>>>0);p=r>>>1&2;d=r>>>(p>>>0);r=d>>>1&1;g=c[2551856+((h|l|k|p|r)+(d>>>(r>>>0))<<2)>>2]|0;r=g;d=g;p=(c[g+4>>2]&-8)-b|0;while(1){g=c[r+16>>2]|0;if((g|0)==0){k=c[r+20>>2]|0;if((k|0)==0){break}else{u=k}}else{u=g}g=(c[u+4>>2]&-8)-b|0;k=g>>>0<p>>>0;r=u;d=k?u:d;p=k?g:p}r=d;i=c[637892]|0;if(r>>>0<i>>>0){ld();return 0}e=r+b|0;m=e;if(!(r>>>0<e>>>0)){ld();return 0}e=c[d+24>>2]|0;f=c[d+12>>2]|0;do{if((f|0)==(d|0)){q=d+20|0;g=c[q>>2]|0;if((g|0)==0){k=d+16|0;l=c[k>>2]|0;if((l|0)==0){v=0;break}else{w=l;x=k}}else{w=g;x=q}while(1){q=w+20|0;g=c[q>>2]|0;if((g|0)!=0){w=g;x=q;continue}q=w+16|0;g=c[q>>2]|0;if((g|0)==0){break}else{w=g;x=q}}if(x>>>0<i>>>0){ld();return 0}else{c[x>>2]=0;v=w;break}}else{q=c[d+8>>2]|0;if(q>>>0<i>>>0){ld();return 0}g=q+12|0;if((c[g>>2]|0)!=(d|0)){ld();return 0}k=f+8|0;if((c[k>>2]|0)==(d|0)){c[g>>2]=f;c[k>>2]=q;v=f;break}else{ld();return 0}}}while(0);a:do{if((e|0)!=0){f=c[d+28>>2]|0;i=2551856+(f<<2)|0;do{if((d|0)==(c[i>>2]|0)){c[i>>2]=v;if((v|0)!=0){break}c[637889]=c[637889]&~(1<<f);break a}else{if(e>>>0<(c[637892]|0)>>>0){ld();return 0}q=e+16|0;if((c[q>>2]|0)==(d|0)){c[q>>2]=v}else{c[e+20>>2]=v}if((v|0)==0){break a}}}while(0);if(v>>>0<(c[637892]|0)>>>0){ld();return 0}c[v+24>>2]=e;f=c[d+16>>2]|0;do{if((f|0)!=0){if(f>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[v+16>>2]=f;c[f+24>>2]=v;break}}}while(0);f=c[d+20>>2]|0;if((f|0)==0){break}if(f>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[v+20>>2]=f;c[f+24>>2]=v;break}}}while(0);if(p>>>0<16>>>0){e=p+b|0;c[d+4>>2]=e|3;f=r+(e+4)|0;c[f>>2]=c[f>>2]|1}else{c[d+4>>2]=b|3;c[r+(b|4)>>2]=p|1;c[r+(p+b)>>2]=p;f=c[637890]|0;if((f|0)!=0){e=c[637893]|0;i=f>>>3;f=i<<1;q=2551592+(f<<2)|0;k=c[637888]|0;g=1<<i;do{if((k&g|0)==0){c[637888]=k|g;y=q;z=2551592+(f+2<<2)|0}else{i=2551592+(f+2<<2)|0;l=c[i>>2]|0;if(!(l>>>0<(c[637892]|0)>>>0)){y=l;z=i;break}ld();return 0}}while(0);c[z>>2]=e;c[y+12>>2]=e;c[e+8>>2]=y;c[e+12>>2]=q}c[637890]=p;c[637893]=m}n=d+8|0;return n|0}else{if(a>>>0>4294967231>>>0){o=-1;break}f=a+11|0;g=f&-8;k=c[637889]|0;if((k|0)==0){o=g;break}r=-g|0;i=f>>>8;do{if((i|0)==0){A=0}else{if(g>>>0>16777215>>>0){A=31;break}f=(i+1048320|0)>>>16&8;l=i<<f;h=(l+520192|0)>>>16&4;j=l<<h;l=(j+245760|0)>>>16&2;B=14-(h|f|l)+(j<<l>>>15)|0;A=g>>>((B+7|0)>>>0)&1|B<<1}}while(0);i=c[2551856+(A<<2)>>2]|0;b:do{if((i|0)==0){C=0;D=r;E=0}else{if((A|0)==31){F=0}else{F=25-(A>>>1)|0}d=0;m=r;p=i;q=g<<F;e=0;while(1){B=c[p+4>>2]&-8;l=B-g|0;if(l>>>0<m>>>0){if((B|0)==(g|0)){C=p;D=l;E=p;break b}else{G=p;H=l}}else{G=d;H=m}l=c[p+20>>2]|0;B=c[p+16+(q>>>31<<2)>>2]|0;j=(l|0)==0|(l|0)==(B|0)?e:l;if((B|0)==0){C=G;D=H;E=j;break}else{d=G;m=H;p=B;q=q<<1;e=j}}}}while(0);if((E|0)==0&(C|0)==0){i=2<<A;r=k&(i|-i);if((r|0)==0){o=g;break}i=(r&-r)-1|0;r=i>>>12&16;e=i>>>(r>>>0);i=e>>>5&8;q=e>>>(i>>>0);e=q>>>2&4;p=q>>>(e>>>0);q=p>>>1&2;m=p>>>(q>>>0);p=m>>>1&1;I=c[2551856+((i|r|e|q|p)+(m>>>(p>>>0))<<2)>>2]|0}else{I=E}if((I|0)==0){J=D;K=C}else{p=I;m=D;q=C;while(1){e=(c[p+4>>2]&-8)-g|0;r=e>>>0<m>>>0;i=r?e:m;e=r?p:q;r=c[p+16>>2]|0;if((r|0)!=0){p=r;m=i;q=e;continue}r=c[p+20>>2]|0;if((r|0)==0){J=i;K=e;break}else{p=r;m=i;q=e}}}if((K|0)==0){o=g;break}if(!(J>>>0<((c[637890]|0)-g|0)>>>0)){o=g;break}q=K;m=c[637892]|0;if(q>>>0<m>>>0){ld();return 0}p=q+g|0;k=p;if(!(q>>>0<p>>>0)){ld();return 0}e=c[K+24>>2]|0;i=c[K+12>>2]|0;do{if((i|0)==(K|0)){r=K+20|0;d=c[r>>2]|0;if((d|0)==0){j=K+16|0;B=c[j>>2]|0;if((B|0)==0){L=0;break}else{M=B;N=j}}else{M=d;N=r}while(1){r=M+20|0;d=c[r>>2]|0;if((d|0)!=0){M=d;N=r;continue}r=M+16|0;d=c[r>>2]|0;if((d|0)==0){break}else{M=d;N=r}}if(N>>>0<m>>>0){ld();return 0}else{c[N>>2]=0;L=M;break}}else{r=c[K+8>>2]|0;if(r>>>0<m>>>0){ld();return 0}d=r+12|0;if((c[d>>2]|0)!=(K|0)){ld();return 0}j=i+8|0;if((c[j>>2]|0)==(K|0)){c[d>>2]=i;c[j>>2]=r;L=i;break}else{ld();return 0}}}while(0);c:do{if((e|0)!=0){i=c[K+28>>2]|0;m=2551856+(i<<2)|0;do{if((K|0)==(c[m>>2]|0)){c[m>>2]=L;if((L|0)!=0){break}c[637889]=c[637889]&~(1<<i);break c}else{if(e>>>0<(c[637892]|0)>>>0){ld();return 0}r=e+16|0;if((c[r>>2]|0)==(K|0)){c[r>>2]=L}else{c[e+20>>2]=L}if((L|0)==0){break c}}}while(0);if(L>>>0<(c[637892]|0)>>>0){ld();return 0}c[L+24>>2]=e;i=c[K+16>>2]|0;do{if((i|0)!=0){if(i>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[L+16>>2]=i;c[i+24>>2]=L;break}}}while(0);i=c[K+20>>2]|0;if((i|0)==0){break}if(i>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[L+20>>2]=i;c[i+24>>2]=L;break}}}while(0);d:do{if(J>>>0<16>>>0){e=J+g|0;c[K+4>>2]=e|3;i=q+(e+4)|0;c[i>>2]=c[i>>2]|1}else{c[K+4>>2]=g|3;c[q+(g|4)>>2]=J|1;c[q+(J+g)>>2]=J;i=J>>>3;if(J>>>0<256>>>0){e=i<<1;m=2551592+(e<<2)|0;r=c[637888]|0;j=1<<i;do{if((r&j|0)==0){c[637888]=r|j;O=m;P=2551592+(e+2<<2)|0}else{i=2551592+(e+2<<2)|0;d=c[i>>2]|0;if(!(d>>>0<(c[637892]|0)>>>0)){O=d;P=i;break}ld();return 0}}while(0);c[P>>2]=k;c[O+12>>2]=k;c[q+(g+8)>>2]=O;c[q+(g+12)>>2]=m;break}e=p;j=J>>>8;do{if((j|0)==0){Q=0}else{if(J>>>0>16777215>>>0){Q=31;break}r=(j+1048320|0)>>>16&8;i=j<<r;d=(i+520192|0)>>>16&4;B=i<<d;i=(B+245760|0)>>>16&2;l=14-(d|r|i)+(B<<i>>>15)|0;Q=J>>>((l+7|0)>>>0)&1|l<<1}}while(0);j=2551856+(Q<<2)|0;c[q+(g+28)>>2]=Q;c[q+(g+20)>>2]=0;c[q+(g+16)>>2]=0;m=c[637889]|0;l=1<<Q;if((m&l|0)==0){c[637889]=m|l;c[j>>2]=e;c[q+(g+24)>>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break}l=c[j>>2]|0;if((Q|0)==31){R=0}else{R=25-(Q>>>1)|0}e:do{if((c[l+4>>2]&-8|0)==(J|0)){S=l}else{j=l;m=J<<R;while(1){T=j+16+(m>>>31<<2)|0;i=c[T>>2]|0;if((i|0)==0){break}if((c[i+4>>2]&-8|0)==(J|0)){S=i;break e}else{j=i;m=m<<1}}if(T>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[T>>2]=e;c[q+(g+24)>>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break d}}}while(0);l=S+8|0;m=c[l>>2]|0;i=c[637892]|0;if(S>>>0<i>>>0){ld();return 0}if(m>>>0<i>>>0){ld();return 0}else{c[m+12>>2]=e;c[l>>2]=e;c[q+(g+8)>>2]=m;c[q+(g+12)>>2]=S;c[q+(g+24)>>2]=0;break}}}while(0);n=K+8|0;return n|0}}while(0);K=c[637890]|0;if(!(o>>>0>K>>>0)){S=K-o|0;T=c[637893]|0;if(S>>>0>15>>>0){J=T;c[637893]=J+o;c[637890]=S;c[J+(o+4)>>2]=S|1;c[J+K>>2]=S;c[T+4>>2]=o|3}else{c[637890]=0;c[637893]=0;c[T+4>>2]=K|3;S=T+(K+4)|0;c[S>>2]=c[S>>2]|1}n=T+8|0;return n|0}T=c[637891]|0;if(o>>>0<T>>>0){S=T-o|0;c[637891]=S;T=c[637894]|0;K=T;c[637894]=K+o;c[K+(o+4)>>2]=S|1;c[T+4>>2]=o|3;n=T+8|0;return n|0}do{if((c[179326]|0)==0){T=id(30)|0;if((T-1&T|0)==0){c[179328]=T;c[179327]=T;c[179329]=-1;c[179330]=-1;c[179331]=0;c[637999]=0;c[179326]=(Dd(0)|0)&-16^1431655768;break}else{ld();return 0}}}while(0);T=o+48|0;S=c[179328]|0;K=o+47|0;J=S+K|0;R=-S|0;S=J&R;if(!(S>>>0>o>>>0)){n=0;return n|0}Q=c[637998]|0;do{if((Q|0)!=0){O=c[637996]|0;P=O+S|0;if(P>>>0<=O>>>0|P>>>0>Q>>>0){n=0}else{break}return n|0}}while(0);f:do{if((c[637999]&4|0)==0){Q=c[637894]|0;g:do{if((Q|0)==0){U=182}else{P=Q;O=2552e3;while(1){V=O|0;L=c[V>>2]|0;if(!(L>>>0>P>>>0)){W=O+4|0;if((L+(c[W>>2]|0)|0)>>>0>P>>>0){break}}L=c[O+8>>2]|0;if((L|0)==0){U=182;break g}else{O=L}}if((O|0)==0){U=182;break}P=J-(c[637891]|0)&R;if(!(P>>>0<2147483647>>>0)){X=0;break}e=Yc(P|0)|0;L=(e|0)==((c[V>>2]|0)+(c[W>>2]|0)|0);Y=L?e:-1;Z=L?P:0;_=e;$=P;U=191}}while(0);do{if((U|0)==182){Q=Yc(0)|0;if((Q|0)==-1){X=0;break}P=Q;e=c[179327]|0;L=e-1|0;if((L&P|0)==0){aa=S}else{aa=S-P+(L+P&-e)|0}e=c[637996]|0;P=e+aa|0;if(!(aa>>>0>o>>>0&aa>>>0<2147483647>>>0)){X=0;break}L=c[637998]|0;if((L|0)!=0){if(P>>>0<=e>>>0|P>>>0>L>>>0){X=0;break}}L=Yc(aa|0)|0;P=(L|0)==(Q|0);Y=P?Q:-1;Z=P?aa:0;_=L;$=aa;U=191}}while(0);h:do{if((U|0)==191){L=-$|0;if(!((Y|0)==-1)){ba=Z;ca=Y;U=202;break f}do{if((_|0)!=-1&$>>>0<2147483647>>>0&$>>>0<T>>>0){P=c[179328]|0;Q=K-$+P&-P;if(!(Q>>>0<2147483647>>>0)){da=$;break}if((Yc(Q|0)|0)==-1){Yc(L|0)|0;X=Z;break h}else{da=Q+$|0;break}}else{da=$}}while(0);if((_|0)==-1){X=Z}else{ba=da;ca=_;U=202;break f}}}while(0);c[637999]=c[637999]|4;ea=X;U=199}else{ea=0;U=199}}while(0);do{if((U|0)==199){if(!(S>>>0<2147483647>>>0)){break}X=Yc(S|0)|0;_=Yc(0)|0;if(!((_|0)!=-1&(X|0)!=-1&X>>>0<_>>>0)){break}da=_-X|0;_=da>>>0>(o+40|0)>>>0;if(_){ba=_?da:ea;ca=X;U=202}}}while(0);do{if((U|0)==202){ea=(c[637996]|0)+ba|0;c[637996]=ea;if(ea>>>0>(c[637997]|0)>>>0){c[637997]=ea}ea=c[637894]|0;i:do{if((ea|0)==0){S=c[637892]|0;if((S|0)==0|ca>>>0<S>>>0){c[637892]=ca}c[638e3]=ca;c[638001]=ba;c[638003]=0;c[637897]=c[179326];c[637896]=-1;S=0;do{X=S<<1;da=2551592+(X<<2)|0;c[2551592+(X+3<<2)>>2]=da;c[2551592+(X+2<<2)>>2]=da;S=S+1|0;}while(S>>>0<32>>>0);S=ca+8|0;if((S&7|0)==0){fa=0}else{fa=-S&7}S=ba-40-fa|0;c[637894]=ca+fa;c[637891]=S;c[ca+(fa+4)>>2]=S|1;c[ca+(ba-36)>>2]=40;c[637895]=c[179330]}else{S=2552e3;while(1){ga=c[S>>2]|0;ha=S+4|0;ia=c[ha>>2]|0;if((ca|0)==(ga+ia|0)){U=214;break}da=c[S+8>>2]|0;if((da|0)==0){break}else{S=da}}do{if((U|0)==214){if((c[S+12>>2]&8|0)!=0){break}da=ea;if(!(da>>>0>=ga>>>0&da>>>0<ca>>>0)){break}c[ha>>2]=ia+ba;X=(c[637891]|0)+ba|0;_=ea+8|0;if((_&7|0)==0){ja=0}else{ja=-_&7}_=X-ja|0;c[637894]=da+ja;c[637891]=_;c[da+(ja+4)>>2]=_|1;c[da+(X+4)>>2]=40;c[637895]=c[179330];break i}}while(0);if(ca>>>0<(c[637892]|0)>>>0){c[637892]=ca}S=ca+ba|0;X=2552e3;while(1){ka=X|0;if((c[ka>>2]|0)==(S|0)){U=224;break}da=c[X+8>>2]|0;if((da|0)==0){break}else{X=da}}do{if((U|0)==224){if((c[X+12>>2]&8|0)!=0){break}c[ka>>2]=ca;S=X+4|0;c[S>>2]=(c[S>>2]|0)+ba;S=ca+8|0;if((S&7|0)==0){la=0}else{la=-S&7}S=ca+(ba+8)|0;if((S&7|0)==0){ma=0}else{ma=-S&7}S=ca+(ma+ba)|0;da=S;_=la+o|0;Z=ca+_|0;$=Z;K=S-(ca+la)-o|0;c[ca+(la+4)>>2]=o|3;j:do{if((da|0)==(c[637894]|0)){T=(c[637891]|0)+K|0;c[637891]=T;c[637894]=$;c[ca+(_+4)>>2]=T|1}else{if((da|0)==(c[637893]|0)){T=(c[637890]|0)+K|0;c[637890]=T;c[637893]=$;c[ca+(_+4)>>2]=T|1;c[ca+(T+_)>>2]=T;break}T=ba+4|0;Y=c[ca+(T+ma)>>2]|0;if((Y&3|0)==1){aa=Y&-8;W=Y>>>3;k:do{if(Y>>>0<256>>>0){V=c[ca+((ma|8)+ba)>>2]|0;R=c[ca+(ba+12+ma)>>2]|0;J=2551592+(W<<1<<2)|0;do{if((V|0)!=(J|0)){if(V>>>0<(c[637892]|0)>>>0){ld();return 0}if((c[V+12>>2]|0)==(da|0)){break}ld();return 0}}while(0);if((R|0)==(V|0)){c[637888]=c[637888]&~(1<<W);break}do{if((R|0)==(J|0)){na=R+8|0}else{if(R>>>0<(c[637892]|0)>>>0){ld();return 0}L=R+8|0;if((c[L>>2]|0)==(da|0)){na=L;break}ld();return 0}}while(0);c[V+12>>2]=R;c[na>>2]=V}else{J=S;L=c[ca+((ma|24)+ba)>>2]|0;O=c[ca+(ba+12+ma)>>2]|0;do{if((O|0)==(J|0)){Q=ma|16;P=ca+(T+Q)|0;e=c[P>>2]|0;if((e|0)==0){M=ca+(Q+ba)|0;Q=c[M>>2]|0;if((Q|0)==0){oa=0;break}else{pa=Q;qa=M}}else{pa=e;qa=P}while(1){P=pa+20|0;e=c[P>>2]|0;if((e|0)!=0){pa=e;qa=P;continue}P=pa+16|0;e=c[P>>2]|0;if((e|0)==0){break}else{pa=e;qa=P}}if(qa>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[qa>>2]=0;oa=pa;break}}else{P=c[ca+((ma|8)+ba)>>2]|0;if(P>>>0<(c[637892]|0)>>>0){ld();return 0}e=P+12|0;if((c[e>>2]|0)!=(J|0)){ld();return 0}M=O+8|0;if((c[M>>2]|0)==(J|0)){c[e>>2]=O;c[M>>2]=P;oa=O;break}else{ld();return 0}}}while(0);if((L|0)==0){break}O=c[ca+(ba+28+ma)>>2]|0;V=2551856+(O<<2)|0;do{if((J|0)==(c[V>>2]|0)){c[V>>2]=oa;if((oa|0)!=0){break}c[637889]=c[637889]&~(1<<O);break k}else{if(L>>>0<(c[637892]|0)>>>0){ld();return 0}R=L+16|0;if((c[R>>2]|0)==(J|0)){c[R>>2]=oa}else{c[L+20>>2]=oa}if((oa|0)==0){break k}}}while(0);if(oa>>>0<(c[637892]|0)>>>0){ld();return 0}c[oa+24>>2]=L;J=ma|16;O=c[ca+(J+ba)>>2]|0;do{if((O|0)!=0){if(O>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[oa+16>>2]=O;c[O+24>>2]=oa;break}}}while(0);O=c[ca+(T+J)>>2]|0;if((O|0)==0){break}if(O>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[oa+20>>2]=O;c[O+24>>2]=oa;break}}}while(0);ra=ca+((aa|ma)+ba)|0;sa=aa+K|0}else{ra=da;sa=K}T=ra+4|0;c[T>>2]=c[T>>2]&-2;c[ca+(_+4)>>2]=sa|1;c[ca+(sa+_)>>2]=sa;T=sa>>>3;if(sa>>>0<256>>>0){W=T<<1;Y=2551592+(W<<2)|0;O=c[637888]|0;L=1<<T;do{if((O&L|0)==0){c[637888]=O|L;ta=Y;ua=2551592+(W+2<<2)|0}else{T=2551592+(W+2<<2)|0;V=c[T>>2]|0;if(!(V>>>0<(c[637892]|0)>>>0)){ta=V;ua=T;break}ld();return 0}}while(0);c[ua>>2]=$;c[ta+12>>2]=$;c[ca+(_+8)>>2]=ta;c[ca+(_+12)>>2]=Y;break}W=Z;L=sa>>>8;do{if((L|0)==0){va=0}else{if(sa>>>0>16777215>>>0){va=31;break}O=(L+1048320|0)>>>16&8;aa=L<<O;T=(aa+520192|0)>>>16&4;V=aa<<T;aa=(V+245760|0)>>>16&2;R=14-(T|O|aa)+(V<<aa>>>15)|0;va=sa>>>((R+7|0)>>>0)&1|R<<1}}while(0);L=2551856+(va<<2)|0;c[ca+(_+28)>>2]=va;c[ca+(_+20)>>2]=0;c[ca+(_+16)>>2]=0;Y=c[637889]|0;R=1<<va;if((Y&R|0)==0){c[637889]=Y|R;c[L>>2]=W;c[ca+(_+24)>>2]=L;c[ca+(_+12)>>2]=W;c[ca+(_+8)>>2]=W;break}R=c[L>>2]|0;if((va|0)==31){wa=0}else{wa=25-(va>>>1)|0}l:do{if((c[R+4>>2]&-8|0)==(sa|0)){xa=R}else{L=R;Y=sa<<wa;while(1){ya=L+16+(Y>>>31<<2)|0;aa=c[ya>>2]|0;if((aa|0)==0){break}if((c[aa+4>>2]&-8|0)==(sa|0)){xa=aa;break l}else{L=aa;Y=Y<<1}}if(ya>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[ya>>2]=W;c[ca+(_+24)>>2]=L;c[ca+(_+12)>>2]=W;c[ca+(_+8)>>2]=W;break j}}}while(0);R=xa+8|0;Y=c[R>>2]|0;J=c[637892]|0;if(xa>>>0<J>>>0){ld();return 0}if(Y>>>0<J>>>0){ld();return 0}else{c[Y+12>>2]=W;c[R>>2]=W;c[ca+(_+8)>>2]=Y;c[ca+(_+12)>>2]=xa;c[ca+(_+24)>>2]=0;break}}}while(0);n=ca+(la|8)|0;return n|0}}while(0);X=ea;_=2552e3;while(1){za=c[_>>2]|0;if(!(za>>>0>X>>>0)){Aa=c[_+4>>2]|0;Ba=za+Aa|0;if(Ba>>>0>X>>>0){break}}_=c[_+8>>2]|0}_=za+(Aa-39)|0;if((_&7|0)==0){Ca=0}else{Ca=-_&7}_=za+(Aa-47+Ca)|0;Z=_>>>0<(ea+16|0)>>>0?X:_;_=Z+8|0;$=ca+8|0;if(($&7|0)==0){Da=0}else{Da=-$&7}$=ba-40-Da|0;c[637894]=ca+Da;c[637891]=$;c[ca+(Da+4)>>2]=$|1;c[ca+(ba-36)>>2]=40;c[637895]=c[179330];c[Z+4>>2]=27;c[_>>2]=c[638e3];c[_+4>>2]=c[638001];c[_+8>>2]=c[638002];c[_+12>>2]=c[638003];c[638e3]=ca;c[638001]=ba;c[638003]=0;c[638002]=_;_=Z+28|0;c[_>>2]=7;if((Z+32|0)>>>0<Ba>>>0){$=_;while(1){_=$+4|0;c[_>>2]=7;if(($+8|0)>>>0<Ba>>>0){$=_}else{break}}}if((Z|0)==(X|0)){break}$=Z-ea|0;_=X+($+4)|0;c[_>>2]=c[_>>2]&-2;c[ea+4>>2]=$|1;c[X+$>>2]=$;_=$>>>3;if($>>>0<256>>>0){K=_<<1;da=2551592+(K<<2)|0;S=c[637888]|0;j=1<<_;do{if((S&j|0)==0){c[637888]=S|j;Ea=da;Fa=2551592+(K+2<<2)|0}else{_=2551592+(K+2<<2)|0;Y=c[_>>2]|0;if(!(Y>>>0<(c[637892]|0)>>>0)){Ea=Y;Fa=_;break}ld();return 0}}while(0);c[Fa>>2]=ea;c[Ea+12>>2]=ea;c[ea+8>>2]=Ea;c[ea+12>>2]=da;break}K=ea;j=$>>>8;do{if((j|0)==0){Ga=0}else{if($>>>0>16777215>>>0){Ga=31;break}S=(j+1048320|0)>>>16&8;X=j<<S;Z=(X+520192|0)>>>16&4;_=X<<Z;X=(_+245760|0)>>>16&2;Y=14-(Z|S|X)+(_<<X>>>15)|0;Ga=$>>>((Y+7|0)>>>0)&1|Y<<1}}while(0);j=2551856+(Ga<<2)|0;c[ea+28>>2]=Ga;c[ea+20>>2]=0;c[ea+16>>2]=0;da=c[637889]|0;Y=1<<Ga;if((da&Y|0)==0){c[637889]=da|Y;c[j>>2]=K;c[ea+24>>2]=j;c[ea+12>>2]=ea;c[ea+8>>2]=ea;break}Y=c[j>>2]|0;if((Ga|0)==31){Ha=0}else{Ha=25-(Ga>>>1)|0}m:do{if((c[Y+4>>2]&-8|0)==($|0)){Ia=Y}else{j=Y;da=$<<Ha;while(1){Ja=j+16+(da>>>31<<2)|0;X=c[Ja>>2]|0;if((X|0)==0){break}if((c[X+4>>2]&-8|0)==($|0)){Ia=X;break m}else{j=X;da=da<<1}}if(Ja>>>0<(c[637892]|0)>>>0){ld();return 0}else{c[Ja>>2]=K;c[ea+24>>2]=j;c[ea+12>>2]=ea;c[ea+8>>2]=ea;break i}}}while(0);$=Ia+8|0;Y=c[$>>2]|0;da=c[637892]|0;if(Ia>>>0<da>>>0){ld();return 0}if(Y>>>0<da>>>0){ld();return 0}else{c[Y+12>>2]=K;c[$>>2]=K;c[ea+8>>2]=Y;c[ea+12>>2]=Ia;c[ea+24>>2]=0;break}}}while(0);ea=c[637891]|0;if(!(ea>>>0>o>>>0)){break}Y=ea-o|0;c[637891]=Y;ea=c[637894]|0;$=ea;c[637894]=$+o;c[$+(o+4)>>2]=Y|1;c[ea+4>>2]=o|3;n=ea+8|0;return n|0}}while(0);c[(_c()|0)>>2]=12;n=0;return n|0}function Gx(a){a=a|0;var b=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,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;if((a|0)==0){return}b=a-8|0;d=b;e=c[637892]|0;if(b>>>0<e>>>0){ld()}f=c[a-4>>2]|0;g=f&3;if((g|0)==1){ld()}h=f&-8;i=a+(h-8)|0;j=i;a:do{if((f&1|0)==0){k=c[b>>2]|0;if((g|0)==0){return}l=-8-k|0;m=a+l|0;n=m;o=k+h|0;if(m>>>0<e>>>0){ld()}if((n|0)==(c[637893]|0)){p=a+(h-4)|0;if((c[p>>2]&3|0)!=3){q=n;r=o;break}c[637890]=o;c[p>>2]=c[p>>2]&-2;c[a+(l+4)>>2]=o|1;c[i>>2]=o;return}p=k>>>3;if(k>>>0<256>>>0){k=c[a+(l+8)>>2]|0;s=c[a+(l+12)>>2]|0;t=2551592+(p<<1<<2)|0;do{if((k|0)!=(t|0)){if(k>>>0<e>>>0){ld()}if((c[k+12>>2]|0)==(n|0)){break}ld()}}while(0);if((s|0)==(k|0)){c[637888]=c[637888]&~(1<<p);q=n;r=o;break}do{if((s|0)==(t|0)){u=s+8|0}else{if(s>>>0<e>>>0){ld()}v=s+8|0;if((c[v>>2]|0)==(n|0)){u=v;break}ld()}}while(0);c[k+12>>2]=s;c[u>>2]=k;q=n;r=o;break}t=m;p=c[a+(l+24)>>2]|0;v=c[a+(l+12)>>2]|0;do{if((v|0)==(t|0)){w=a+(l+20)|0;x=c[w>>2]|0;if((x|0)==0){y=a+(l+16)|0;z=c[y>>2]|0;if((z|0)==0){A=0;break}else{B=z;C=y}}else{B=x;C=w}while(1){w=B+20|0;x=c[w>>2]|0;if((x|0)!=0){B=x;C=w;continue}w=B+16|0;x=c[w>>2]|0;if((x|0)==0){break}else{B=x;C=w}}if(C>>>0<e>>>0){ld()}else{c[C>>2]=0;A=B;break}}else{w=c[a+(l+8)>>2]|0;if(w>>>0<e>>>0){ld()}x=w+12|0;if((c[x>>2]|0)!=(t|0)){ld()}y=v+8|0;if((c[y>>2]|0)==(t|0)){c[x>>2]=v;c[y>>2]=w;A=v;break}else{ld()}}}while(0);if((p|0)==0){q=n;r=o;break}v=c[a+(l+28)>>2]|0;m=2551856+(v<<2)|0;do{if((t|0)==(c[m>>2]|0)){c[m>>2]=A;if((A|0)!=0){break}c[637889]=c[637889]&~(1<<v);q=n;r=o;break a}else{if(p>>>0<(c[637892]|0)>>>0){ld()}k=p+16|0;if((c[k>>2]|0)==(t|0)){c[k>>2]=A}else{c[p+20>>2]=A}if((A|0)==0){q=n;r=o;break a}}}while(0);if(A>>>0<(c[637892]|0)>>>0){ld()}c[A+24>>2]=p;t=c[a+(l+16)>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[637892]|0)>>>0){ld()}else{c[A+16>>2]=t;c[t+24>>2]=A;break}}}while(0);t=c[a+(l+20)>>2]|0;if((t|0)==0){q=n;r=o;break}if(t>>>0<(c[637892]|0)>>>0){ld()}else{c[A+20>>2]=t;c[t+24>>2]=A;q=n;r=o;break}}else{q=d;r=h}}while(0);d=q;if(!(d>>>0<i>>>0)){ld()}A=a+(h-4)|0;e=c[A>>2]|0;if((e&1|0)==0){ld()}do{if((e&2|0)==0){if((j|0)==(c[637894]|0)){B=(c[637891]|0)+r|0;c[637891]=B;c[637894]=q;c[q+4>>2]=B|1;if((q|0)!=(c[637893]|0)){return}c[637893]=0;c[637890]=0;return}if((j|0)==(c[637893]|0)){B=(c[637890]|0)+r|0;c[637890]=B;c[637893]=q;c[q+4>>2]=B|1;c[d+B>>2]=B;return}B=(e&-8)+r|0;C=e>>>3;b:do{if(e>>>0<256>>>0){u=c[a+h>>2]|0;g=c[a+(h|4)>>2]|0;b=2551592+(C<<1<<2)|0;do{if((u|0)!=(b|0)){if(u>>>0<(c[637892]|0)>>>0){ld()}if((c[u+12>>2]|0)==(j|0)){break}ld()}}while(0);if((g|0)==(u|0)){c[637888]=c[637888]&~(1<<C);break}do{if((g|0)==(b|0)){D=g+8|0}else{if(g>>>0<(c[637892]|0)>>>0){ld()}f=g+8|0;if((c[f>>2]|0)==(j|0)){D=f;break}ld()}}while(0);c[u+12>>2]=g;c[D>>2]=u}else{b=i;f=c[a+(h+16)>>2]|0;t=c[a+(h|4)>>2]|0;do{if((t|0)==(b|0)){p=a+(h+12)|0;v=c[p>>2]|0;if((v|0)==0){m=a+(h+8)|0;k=c[m>>2]|0;if((k|0)==0){E=0;break}else{F=k;G=m}}else{F=v;G=p}while(1){p=F+20|0;v=c[p>>2]|0;if((v|0)!=0){F=v;G=p;continue}p=F+16|0;v=c[p>>2]|0;if((v|0)==0){break}else{F=v;G=p}}if(G>>>0<(c[637892]|0)>>>0){ld()}else{c[G>>2]=0;E=F;break}}else{p=c[a+h>>2]|0;if(p>>>0<(c[637892]|0)>>>0){ld()}v=p+12|0;if((c[v>>2]|0)!=(b|0)){ld()}m=t+8|0;if((c[m>>2]|0)==(b|0)){c[v>>2]=t;c[m>>2]=p;E=t;break}else{ld()}}}while(0);if((f|0)==0){break}t=c[a+(h+20)>>2]|0;u=2551856+(t<<2)|0;do{if((b|0)==(c[u>>2]|0)){c[u>>2]=E;if((E|0)!=0){break}c[637889]=c[637889]&~(1<<t);break b}else{if(f>>>0<(c[637892]|0)>>>0){ld()}g=f+16|0;if((c[g>>2]|0)==(b|0)){c[g>>2]=E}else{c[f+20>>2]=E}if((E|0)==0){break b}}}while(0);if(E>>>0<(c[637892]|0)>>>0){ld()}c[E+24>>2]=f;b=c[a+(h+8)>>2]|0;do{if((b|0)!=0){if(b>>>0<(c[637892]|0)>>>0){ld()}else{c[E+16>>2]=b;c[b+24>>2]=E;break}}}while(0);b=c[a+(h+12)>>2]|0;if((b|0)==0){break}if(b>>>0<(c[637892]|0)>>>0){ld()}else{c[E+20>>2]=b;c[b+24>>2]=E;break}}}while(0);c[q+4>>2]=B|1;c[d+B>>2]=B;if((q|0)!=(c[637893]|0)){H=B;break}c[637890]=B;return}else{c[A>>2]=e&-2;c[q+4>>2]=r|1;c[d+r>>2]=r;H=r}}while(0);r=H>>>3;if(H>>>0<256>>>0){d=r<<1;e=2551592+(d<<2)|0;A=c[637888]|0;E=1<<r;do{if((A&E|0)==0){c[637888]=A|E;I=e;J=2551592+(d+2<<2)|0}else{r=2551592+(d+2<<2)|0;h=c[r>>2]|0;if(!(h>>>0<(c[637892]|0)>>>0)){I=h;J=r;break}ld()}}while(0);c[J>>2]=q;c[I+12>>2]=q;c[q+8>>2]=I;c[q+12>>2]=e;return}e=q;I=H>>>8;do{if((I|0)==0){K=0}else{if(H>>>0>16777215>>>0){K=31;break}J=(I+1048320|0)>>>16&8;d=I<<J;E=(d+520192|0)>>>16&4;A=d<<E;d=(A+245760|0)>>>16&2;r=14-(E|J|d)+(A<<d>>>15)|0;K=H>>>((r+7|0)>>>0)&1|r<<1}}while(0);I=2551856+(K<<2)|0;c[q+28>>2]=K;c[q+20>>2]=0;c[q+16>>2]=0;r=c[637889]|0;d=1<<K;c:do{if((r&d|0)==0){c[637889]=r|d;c[I>>2]=e;c[q+24>>2]=I;c[q+12>>2]=q;c[q+8>>2]=q}else{A=c[I>>2]|0;if((K|0)==31){L=0}else{L=25-(K>>>1)|0}d:do{if((c[A+4>>2]&-8|0)==(H|0)){M=A}else{J=A;E=H<<L;while(1){N=J+16+(E>>>31<<2)|0;h=c[N>>2]|0;if((h|0)==0){break}if((c[h+4>>2]&-8|0)==(H|0)){M=h;break d}else{J=h;E=E<<1}}if(N>>>0<(c[637892]|0)>>>0){ld()}else{c[N>>2]=e;c[q+24>>2]=J;c[q+12>>2]=q;c[q+8>>2]=q;break c}}}while(0);A=M+8|0;B=c[A>>2]|0;E=c[637892]|0;if(M>>>0<E>>>0){ld()}if(B>>>0<E>>>0){ld()}else{c[B+12>>2]=e;c[A>>2]=e;c[q+8>>2]=B;c[q+12>>2]=M;c[q+24>>2]=0;break}}}while(0);q=(c[637896]|0)-1|0;c[637896]=q;if((q|0)==0){O=2552008}else{return}while(1){q=c[O>>2]|0;if((q|0)==0){break}else{O=q+8|0}}c[637896]=-1;return}function Hx(a,b){a=a|0;b=b|0;var d=0,e=0;do{if((a|0)==0){d=0}else{e=da(b,a)|0;if(!((b|a)>>>0>65535>>>0)){d=e;break}d=((e>>>0)/(a>>>0)|0|0)==(b|0)?e:-1}}while(0);b=Fx(d)|0;if((b|0)==0){return b|0}if((c[b-4>>2]&3|0)==0){return b|0}Zx(b|0,0,d|0)|0;return b|0}function Ix(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=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,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0,la=0,ma=0.0,na=0.0,oa=0,pa=0.0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0.0,za=0,Aa=0.0,Ba=0,Ca=0.0,Da=0,Ea=0,Fa=0,Ga=0.0,Ha=0,Ia=0.0,Ja=0.0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0.0,Ac=0,Bc=0,Cc=0.0,Dc=0.0,Ec=0.0,Fc=0.0,Gc=0.0,Hc=0.0,Ic=0.0,Jc=0,Kc=0,Lc=0.0,Mc=0,Nc=0;g=i;i=i+512|0;h=g|0;if((e|0)==1){j=-1074;k=53}else if((e|0)==2){j=-1074;k=53}else if((e|0)==0){j=-149;k=24}else{l=0.0;i=g;return+l}e=b+4|0;m=b+100|0;do{n=c[e>>2]|0;if(n>>>0<(c[m>>2]|0)>>>0){c[e>>2]=n+1;o=d[n]|0}else{o=Lx(b)|0}}while((fb(o|0)|0)!=0);do{if((o|0)==45|(o|0)==43){n=1-(((o|0)==45)<<1)|0;p=c[e>>2]|0;if(p>>>0<(c[m>>2]|0)>>>0){c[e>>2]=p+1;q=d[p]|0;r=n;break}else{q=Lx(b)|0;r=n;break}}else{q=o;r=1}}while(0);o=0;n=q;while(1){if((n|32|0)!=(a[25744+o|0]|0)){u=o;v=n;break}do{if(o>>>0<7>>>0){q=c[e>>2]|0;if(q>>>0<(c[m>>2]|0)>>>0){c[e>>2]=q+1;w=d[q]|0;break}else{w=Lx(b)|0;break}}else{w=n}}while(0);q=o+1|0;if(q>>>0<8>>>0){o=q;n=w}else{u=q;v=w;break}}do{if((u|0)==3){x=23}else if((u|0)!=8){w=(f|0)==0;if(!(u>>>0<4>>>0|w)){if((u|0)==8){break}else{x=23;break}}a:do{if((u|0)==0){n=0;o=v;while(1){if((o|32|0)!=(a[51384+n|0]|0)){y=o;z=n;break a}do{if(n>>>0<2>>>0){q=c[e>>2]|0;if(q>>>0<(c[m>>2]|0)>>>0){c[e>>2]=q+1;A=d[q]|0;break}else{A=Lx(b)|0;break}}else{A=o}}while(0);q=n+1|0;if(q>>>0<3>>>0){n=q;o=A}else{y=A;z=q;break}}}else{y=v;z=u}}while(0);if((z|0)==3){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;B=d[o]|0}else{B=Lx(b)|0}if((B|0)==40){C=1}else{if((c[m>>2]|0)==0){l=+s;i=g;return+l}c[e>>2]=(c[e>>2]|0)-1;l=+s;i=g;return+l}while(1){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;D=d[o]|0}else{D=Lx(b)|0}if(!((D-48|0)>>>0<10>>>0|(D-65|0)>>>0<26>>>0)){if(!((D-97|0)>>>0<26>>>0|(D|0)==95)){break}}C=C+1|0}if((D|0)==41){l=+s;i=g;return+l}o=(c[m>>2]|0)==0;if(!o){c[e>>2]=(c[e>>2]|0)-1}if(w){c[(_c()|0)>>2]=22;Kx(b,0);l=0.0;i=g;return+l}if((C|0)==0|o){l=+s;i=g;return+l}else{E=C}while(1){o=E-1|0;c[e>>2]=(c[e>>2]|0)-1;if((o|0)==0){l=+s;break}else{E=o}}i=g;return+l}else if((z|0)==0){do{if((y|0)==48){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;F=d[o]|0}else{F=Lx(b)|0}if((F|32|0)!=120){if((c[m>>2]|0)==0){G=48;break}c[e>>2]=(c[e>>2]|0)-1;G=48;break}o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;I=d[o]|0;J=0}else{I=Lx(b)|0;J=0}while(1){if((I|0)==46){x=70;break}else if((I|0)!=48){K=I;L=0;M=0;N=0;O=0;P=J;Q=0;R=0;T=1.0;U=0.0;V=0;break}o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;I=d[o]|0;J=1;continue}else{I=Lx(b)|0;J=1;continue}}b:do{if((x|0)==70){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;W=d[o]|0}else{W=Lx(b)|0}if((W|0)==48){X=-1;Y=-1}else{K=W;L=0;M=0;N=0;O=0;P=J;Q=1;R=0;T=1.0;U=0.0;V=0;break}while(1){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;Z=d[o]|0}else{Z=Lx(b)|0}if((Z|0)!=48){K=Z;L=0;M=0;N=X;O=Y;P=1;Q=1;R=0;T=1.0;U=0.0;V=0;break b}o=fy(Y,X,-1,-1)|0;X=H;Y=o}}}while(0);c:while(1){o=K-48|0;do{if(o>>>0<10>>>0){_=o;x=84}else{n=K|32;q=(K|0)==46;if(!((n-97|0)>>>0<6>>>0|q)){$=K;break c}if(q){if((Q|0)==0){aa=L;ba=M;ca=L;ea=M;fa=P;ga=1;ha=R;ia=T;ja=U;ka=V;break}else{$=46;break c}}else{_=(K|0)>57?n-87|0:o;x=84;break}}}while(0);if((x|0)==84){x=0;o=0;do{if((L|0)<(o|0)|(L|0)==(o|0)&M>>>0<8>>>0){la=R;ma=T;na=U;oa=_+(V<<4)|0}else{n=0;if((L|0)<(n|0)|(L|0)==(n|0)&M>>>0<14>>>0){pa=T*.0625;la=R;ma=pa;na=U+pa*+(_|0);oa=V;break}if(!((_|0)!=0&(R|0)==0)){la=R;ma=T;na=U;oa=V;break}la=1;ma=T;na=U+T*.5;oa=V}}while(0);o=fy(M,L,1,0)|0;aa=H;ba=o;ca=N;ea=O;fa=1;ga=Q;ha=la;ia=ma;ja=na;ka=oa}o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;K=d[o]|0;L=aa;M=ba;N=ca;O=ea;P=fa;Q=ga;R=ha;T=ia;U=ja;V=ka;continue}else{K=Lx(b)|0;L=aa;M=ba;N=ca;O=ea;P=fa;Q=ga;R=ha;T=ia;U=ja;V=ka;continue}}if((P|0)==0){o=(c[m>>2]|0)==0;if(!o){c[e>>2]=(c[e>>2]|0)-1}do{if(w){Kx(b,0)}else{if(o){break}n=c[e>>2]|0;c[e>>2]=n-1;if((Q|0)==0){break}c[e>>2]=n-2}}while(0);l=+(r|0)*0.0;i=g;return+l}o=(Q|0)==0;n=o?M:O;q=o?L:N;o=0;if((L|0)<(o|0)|(L|0)==(o|0)&M>>>0<8>>>0){o=V;p=L;qa=M;while(1){ra=o<<4;sa=fy(qa,p,1,0)|0;ta=H;ua=0;if((ta|0)<(ua|0)|(ta|0)==(ua|0)&sa>>>0<8>>>0){o=ra;p=ta;qa=sa}else{va=ra;break}}}else{va=V}do{if(($|32|0)==112){qa=Jx(b,f)|0;p=H;if(!((qa|0)==0&(p|0)==(-2147483648|0))){wa=p;xa=qa;break}if(w){Kx(b,0);l=0.0;i=g;return+l}else{if((c[m>>2]|0)==0){wa=0;xa=0;break}c[e>>2]=(c[e>>2]|0)-1;wa=0;xa=0;break}}else{if((c[m>>2]|0)==0){wa=0;xa=0;break}c[e>>2]=(c[e>>2]|0)-1;wa=0;xa=0}}while(0);qa=fy(n<<2|0>>>30,q<<2|n>>>30,-32,-1)|0;p=fy(qa,H,xa,wa)|0;qa=H;if((va|0)==0){l=+(r|0)*0.0;i=g;return+l}o=0;if((qa|0)>(o|0)|(qa|0)==(o|0)&p>>>0>(-j|0)>>>0){c[(_c()|0)>>2]=34;l=+(r|0)*1.7976931348623157e+308*1.7976931348623157e+308;i=g;return+l}o=j-106|0;ra=(o|0)<0|0?-1:0;if((qa|0)<(ra|0)|(qa|0)==(ra|0)&p>>>0<o>>>0){c[(_c()|0)>>2]=34;l=+(r|0)*2.2250738585072014e-308*2.2250738585072014e-308;i=g;return+l}if((va|0)>-1){o=va;pa=U;ra=qa;sa=p;while(1){ta=o<<1;if(pa<.5){ya=pa;za=ta}else{ya=pa+-1.0;za=ta|1}Aa=pa+ya;ta=fy(sa,ra,-1,-1)|0;ua=H;if((za|0)>-1){o=za;pa=Aa;ra=ua;sa=ta}else{Ba=za;Ca=Aa;Da=ua;Ea=ta;break}}}else{Ba=va;Ca=U;Da=qa;Ea=p}sa=0;ra=gy(32,0,j,(j|0)<0|0?-1:0)|0;o=fy(Ea,Da,ra,H)|0;ra=H;if((sa|0)>(ra|0)|(sa|0)==(ra|0)&k>>>0>o>>>0){ra=o;Fa=(ra|0)<0?0:ra}else{Fa=k}do{if((Fa|0)<53){pa=+(r|0);Aa=+Zb(+(+Mx(1.0,84-Fa|0)),+pa);if(!((Fa|0)<32&Ca!=0.0)){Ga=Ca;Ha=Ba;Ia=Aa;Ja=pa;break}ra=Ba&1;Ga=(ra|0)==0?0.0:Ca;Ha=(ra^1)+Ba|0;Ia=Aa;Ja=pa}else{Ga=Ca;Ha=Ba;Ia=0.0;Ja=+(r|0)}}while(0);pa=Ja*Ga+(Ia+Ja*+(Ha>>>0>>>0))-Ia;if(!(pa!=0.0)){c[(_c()|0)>>2]=34}l=+Nx(pa,Ea);i=g;return+l}else{G=y}}while(0);p=j+k|0;qa=-p|0;ra=G;o=0;while(1){if((ra|0)==46){x=139;break}else if((ra|0)!=48){Ka=ra;La=0;Ma=o;Na=0;Oa=0;break}sa=c[e>>2]|0;if(sa>>>0<(c[m>>2]|0)>>>0){c[e>>2]=sa+1;ra=d[sa]|0;o=1;continue}else{ra=Lx(b)|0;o=1;continue}}d:do{if((x|0)==139){ra=c[e>>2]|0;if(ra>>>0<(c[m>>2]|0)>>>0){c[e>>2]=ra+1;Pa=d[ra]|0}else{Pa=Lx(b)|0}if((Pa|0)==48){Qa=-1;Ra=-1}else{Ka=Pa;La=1;Ma=o;Na=0;Oa=0;break}while(1){ra=c[e>>2]|0;if(ra>>>0<(c[m>>2]|0)>>>0){c[e>>2]=ra+1;Sa=d[ra]|0}else{Sa=Lx(b)|0}if((Sa|0)!=48){Ka=Sa;La=1;Ma=1;Na=Qa;Oa=Ra;break d}ra=fy(Ra,Qa,-1,-1)|0;Qa=H;Ra=ra}}}while(0);o=h|0;c[o>>2]=0;ra=Ka-48|0;sa=(Ka|0)==46;e:do{if(ra>>>0<10>>>0|sa){n=h+496|0;q=Na;ta=Oa;ua=0;Ta=0;Ua=0;Va=Ma;Wa=La;Xa=0;Ya=0;Za=Ka;_a=ra;$a=sa;while(1){do{if($a){if((Wa|0)==0){ab=Ya;bb=Xa;cb=1;db=Va;eb=Ua;gb=ua;hb=Ta;ib=ua;jb=Ta}else{kb=q;lb=ta;mb=ua;nb=Ta;ob=Ua;pb=Va;qb=Xa;rb=Ya;sb=Za;break e}}else{ub=fy(Ta,ua,1,0)|0;vb=H;wb=(Za|0)!=48;if((Xa|0)>=125){if(!wb){ab=Ya;bb=Xa;cb=Wa;db=Va;eb=Ua;gb=vb;hb=ub;ib=q;jb=ta;break}c[n>>2]=c[n>>2]|1;ab=Ya;bb=Xa;cb=Wa;db=Va;eb=Ua;gb=vb;hb=ub;ib=q;jb=ta;break}xb=h+(Xa<<2)|0;if((Ya|0)==0){yb=_a}else{yb=Za-48+((c[xb>>2]|0)*10|0)|0}c[xb>>2]=yb;xb=Ya+1|0;zb=(xb|0)==9;ab=zb?0:xb;bb=(zb&1)+Xa|0;cb=Wa;db=1;eb=wb?ub:Ua;gb=vb;hb=ub;ib=q;jb=ta}}while(0);ub=c[e>>2]|0;if(ub>>>0<(c[m>>2]|0)>>>0){c[e>>2]=ub+1;Ab=d[ub]|0}else{Ab=Lx(b)|0}ub=Ab-48|0;vb=(Ab|0)==46;if(ub>>>0<10>>>0|vb){q=ib;ta=jb;ua=gb;Ta=hb;Ua=eb;Va=db;Wa=cb;Xa=bb;Ya=ab;Za=Ab;_a=ub;$a=vb}else{Bb=ib;Cb=jb;Db=gb;Eb=hb;Fb=eb;Gb=db;Hb=cb;Ib=bb;Jb=ab;Kb=Ab;x=162;break}}}else{Bb=Na;Cb=Oa;Db=0;Eb=0;Fb=0;Gb=Ma;Hb=La;Ib=0;Jb=0;Kb=Ka;x=162}}while(0);if((x|0)==162){sa=(Hb|0)==0;kb=sa?Db:Bb;lb=sa?Eb:Cb;mb=Db;nb=Eb;ob=Fb;pb=Gb;qb=Ib;rb=Jb;sb=Kb}sa=(pb|0)!=0;do{if(sa){if((sb|32|0)!=101){x=171;break}ra=Jx(b,f)|0;$a=H;do{if((ra|0)==0&($a|0)==(-2147483648|0)){if(w){Kx(b,0);l=0.0;i=g;return+l}else{if((c[m>>2]|0)==0){Lb=0;Mb=0;break}c[e>>2]=(c[e>>2]|0)-1;Lb=0;Mb=0;break}}else{Lb=$a;Mb=ra}}while(0);ra=fy(Mb,Lb,lb,kb)|0;Nb=H;Ob=ra}else{x=171}}while(0);do{if((x|0)==171){if(!((sb|0)>-1)){Nb=kb;Ob=lb;break}if((c[m>>2]|0)==0){Nb=kb;Ob=lb;break}c[e>>2]=(c[e>>2]|0)-1;Nb=kb;Ob=lb}}while(0);if(!sa){c[(_c()|0)>>2]=22;Kx(b,0);l=0.0;i=g;return+l}w=c[o>>2]|0;if((w|0)==0){l=+(r|0)*0.0;i=g;return+l}ra=0;do{if((Ob|0)==(nb|0)&(Nb|0)==(mb|0)&((mb|0)<(ra|0)|(mb|0)==(ra|0)&nb>>>0<10>>>0)){if(!(k>>>0>30>>>0)){if((w>>>(k>>>0)|0)!=0){break}}l=+(r|0)*+(w>>>0>>>0);i=g;return+l}}while(0);w=(j|0)/-2|0;ra=(w|0)<0|0?-1:0;if((Nb|0)>(ra|0)|(Nb|0)==(ra|0)&Ob>>>0>w>>>0){c[(_c()|0)>>2]=34;l=+(r|0)*1.7976931348623157e+308*1.7976931348623157e+308;i=g;return+l}w=j-106|0;ra=(w|0)<0|0?-1:0;if((Nb|0)<(ra|0)|(Nb|0)==(ra|0)&Ob>>>0<w>>>0){c[(_c()|0)>>2]=34;l=+(r|0)*2.2250738585072014e-308*2.2250738585072014e-308;i=g;return+l}if((rb|0)==0){Pb=qb}else{if((rb|0)<9){w=h+(qb<<2)|0;ra=rb;sa=c[w>>2]|0;do{sa=sa*10|0;ra=ra+1|0;}while((ra|0)<9);c[w>>2]=sa}Pb=qb+1|0}ra=Ob;do{if((ob|0)<9){if(!((ob|0)<=(ra|0)&(ra|0)<18)){break}if((ra|0)==9){l=+(r|0)*+((c[o>>2]|0)>>>0>>>0);i=g;return+l}if((ra|0)<9){l=+(r|0)*+((c[o>>2]|0)>>>0>>>0)/+(c[7608+(8-ra<<2)>>2]|0);i=g;return+l}$a=k+27+(ra*-3|0)|0;_a=c[o>>2]|0;if(($a|0)<=30){if((_a>>>($a>>>0)|0)!=0){break}}l=+(r|0)*+(_a>>>0>>>0)*+(c[7608+(ra-10<<2)>>2]|0);i=g;return+l}}while(0);o=(ra|0)%9|0;if((o|0)==0){Qb=0;Rb=Pb;Sb=0;Tb=ra}else{sa=(ra|0)>-1?o:o+9|0;o=c[7608+(8-sa<<2)>>2]|0;do{if((Pb|0)==0){Ub=0;Vb=0;Wb=ra}else{w=1e9/(o|0)|0;_a=ra;$a=0;Za=0;Ya=0;while(1){Xa=h+(Za<<2)|0;Wa=c[Xa>>2]|0;Va=((Wa>>>0)/(o>>>0)|0)+Ya|0;c[Xa>>2]=Va;Xb=da((Wa>>>0)%(o>>>0)|0,w)|0;Wa=Za+1|0;if((Za|0)==($a|0)&(Va|0)==0){Yb=Wa&127;_b=_a-9|0}else{Yb=$a;_b=_a}if((Wa|0)==(Pb|0)){break}else{_a=_b;$a=Yb;Za=Wa;Ya=Xb}}if((Xb|0)==0){Ub=Pb;Vb=Yb;Wb=_b;break}c[h+(Pb<<2)>>2]=Xb;Ub=Pb+1|0;Vb=Yb;Wb=_b}}while(0);Qb=Vb;Rb=Ub;Sb=0;Tb=9-sa+Wb|0}f:while(1){o=h+(Qb<<2)|0;if((Tb|0)<18){ra=Rb;Ya=Sb;while(1){Za=0;$a=ra+127|0;_a=ra;while(1){w=$a&127;Wa=h+(w<<2)|0;Va=c[Wa>>2]|0;Xa=fy(Va<<29|0>>>3,0<<29|Va>>>3,Za,0)|0;Va=H;Ua=0;if(Va>>>0>Ua>>>0|Va>>>0==Ua>>>0&Xa>>>0>1e9>>>0){Ua=qy(Xa,Va,1e9,0)|0;Ta=ry(Xa,Va,1e9,0)|0;$b=Ua;ac=Ta}else{$b=0;ac=Xa}c[Wa>>2]=ac;Wa=(w|0)==(Qb|0);if((w|0)!=(_a+127&127|0)|Wa){bc=_a}else{bc=(ac|0)==0?w:_a}if(Wa){break}else{Za=$b;$a=w-1|0;_a=bc}}_a=Ya-29|0;if(($b|0)==0){ra=bc;Ya=_a}else{cc=_a;dc=bc;ec=$b;break}}}else{if((Tb|0)==18){fc=Rb;gc=Sb}else{hc=Qb;ic=Rb;jc=Sb;kc=Tb;break}while(1){if(!((c[o>>2]|0)>>>0<9007199>>>0)){hc=Qb;ic=fc;jc=gc;kc=18;break f}Ya=0;ra=fc+127|0;_a=fc;while(1){$a=ra&127;Za=h+($a<<2)|0;w=c[Za>>2]|0;Wa=fy(w<<29|0>>>3,0<<29|w>>>3,Ya,0)|0;w=H;Xa=0;if(w>>>0>Xa>>>0|w>>>0==Xa>>>0&Wa>>>0>1e9>>>0){Xa=qy(Wa,w,1e9,0)|0;Ta=ry(Wa,w,1e9,0)|0;lc=Xa;mc=Ta}else{lc=0;mc=Wa}c[Za>>2]=mc;Za=($a|0)==(Qb|0);if(($a|0)!=(_a+127&127|0)|Za){nc=_a}else{nc=(mc|0)==0?$a:_a}if(Za){break}else{Ya=lc;ra=$a-1|0;_a=nc}}_a=gc-29|0;if((lc|0)==0){fc=nc;gc=_a}else{cc=_a;dc=nc;ec=lc;break}}}o=Qb+127&127;if((o|0)==(dc|0)){_a=dc+127&127;ra=h+((dc+126&127)<<2)|0;c[ra>>2]=c[ra>>2]|c[h+(_a<<2)>>2];oc=_a}else{oc=dc}c[h+(o<<2)>>2]=ec;Qb=o;Rb=oc;Sb=cc;Tb=Tb+9|0}g:while(1){pc=ic+1&127;sa=h+((ic+127&127)<<2)|0;o=hc;_a=jc;ra=kc;while(1){Ya=(ra|0)==18;$a=(ra|0)>27?9:1;qc=o;rc=_a;while(1){Za=0;while(1){Wa=Za+qc&127;if((Wa|0)==(ic|0)){sc=2;break}Ta=c[h+(Wa<<2)>>2]|0;Wa=c[7600+(Za<<2)>>2]|0;if(Ta>>>0<Wa>>>0){sc=2;break}Xa=Za+1|0;if(Ta>>>0>Wa>>>0){sc=Za;break}if((Xa|0)<2){Za=Xa}else{sc=Xa;break}}if((sc|0)==2&Ya){break g}tc=$a+rc|0;if((qc|0)==(ic|0)){qc=ic;rc=tc}else{break}}Ya=(1<<$a)-1|0;Za=1e9>>>($a>>>0);uc=ra;vc=qc;Xa=qc;wc=0;do{Wa=h+(Xa<<2)|0;Ta=c[Wa>>2]|0;w=(Ta>>>($a>>>0))+wc|0;c[Wa>>2]=w;wc=da(Ta&Ya,Za)|0;Ta=(Xa|0)==(vc|0)&(w|0)==0;Xa=Xa+1&127;uc=Ta?uc-9|0:uc;vc=Ta?Xa:vc;}while((Xa|0)!=(ic|0));if((wc|0)==0){o=vc;_a=tc;ra=uc;continue}if((pc|0)!=(vc|0)){break}c[sa>>2]=c[sa>>2]|1;o=vc;_a=tc;ra=uc}c[h+(ic<<2)>>2]=wc;hc=vc;ic=pc;jc=tc;kc=uc}ra=qc&127;if((ra|0)==(ic|0)){c[h+(pc-1<<2)>>2]=0;xc=pc}else{xc=ic}pa=+((c[h+(ra<<2)>>2]|0)>>>0>>>0);ra=qc+1&127;if((ra|0)==(xc|0)){_a=xc+1&127;c[h+(_a-1<<2)>>2]=0;yc=_a}else{yc=xc}Aa=+(r|0);zc=Aa*(pa*1.0e9+ +((c[h+(ra<<2)>>2]|0)>>>0>>>0));ra=rc+53|0;_a=ra-j|0;if((_a|0)<(k|0)){Ac=(_a|0)<0?0:_a;Bc=1}else{Ac=k;Bc=0}if((Ac|0)<53){pa=+Zb(+(+Mx(1.0,105-Ac|0)),+zc);Cc=+tb(+zc,+(+Mx(1.0,53-Ac|0)));Dc=pa;Ec=Cc;Fc=pa+(zc-Cc)}else{Dc=0.0;Ec=0.0;Fc=zc}o=qc+2&127;do{if((o|0)==(yc|0)){Gc=Ec}else{sa=c[h+(o<<2)>>2]|0;do{if(sa>>>0<5e8>>>0){if((sa|0)==0){if((qc+3&127|0)==(yc|0)){Hc=Ec;break}}Hc=Aa*.25+Ec}else{if(sa>>>0>5e8>>>0){Hc=Aa*.75+Ec;break}if((qc+3&127|0)==(yc|0)){Hc=Aa*.5+Ec;break}else{Hc=Aa*.75+Ec;break}}}while(0);if((53-Ac|0)<=1){Gc=Hc;break}if(+tb(+Hc,+1.0)!=0.0){Gc=Hc;break}Gc=Hc+1.0}}while(0);Aa=Fc+Gc-Dc;do{if((ra&2147483647|0)>(-2-p|0)){if(+S(+Aa)<9007199254740992.0){Ic=Aa;Jc=Bc;Kc=rc}else{Ic=Aa*.5;Jc=(Bc|0)!=0&(Ac|0)==(_a|0)?0:Bc;Kc=rc+1|0}if((Kc+50|0)<=(qa|0)){if(!((Jc|0)!=0&Gc!=0.0)){Lc=Ic;Mc=Kc;break}}c[(_c()|0)>>2]=34;Lc=Ic;Mc=Kc}else{Lc=Aa;Mc=rc}}while(0);l=+Nx(Lc,Mc);i=g;return+l}else{if((c[m>>2]|0)!=0){c[e>>2]=(c[e>>2]|0)-1}c[(_c()|0)>>2]=22;Kx(b,0);l=0.0;i=g;return+l}}}while(0);do{if((x|0)==23){b=(c[m>>2]|0)==0;if(!b){c[e>>2]=(c[e>>2]|0)-1}if(u>>>0<4>>>0|(f|0)==0|b){break}else{Nc=u}do{c[e>>2]=(c[e>>2]|0)-1;Nc=Nc-1|0;}while(Nc>>>0>3>>>0)}}while(0);l=+(r|0)*t;i=g;return+l}function Jx(a,b){a=a|0;b=b|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,v=0,w=0;e=a+4|0;f=c[e>>2]|0;g=a+100|0;if(f>>>0<(c[g>>2]|0)>>>0){c[e>>2]=f+1;h=d[f]|0}else{h=Lx(a)|0}do{if((h|0)==45|(h|0)==43){f=(h|0)==45|0;i=c[e>>2]|0;if(i>>>0<(c[g>>2]|0)>>>0){c[e>>2]=i+1;j=d[i]|0}else{j=Lx(a)|0}if((j-48|0)>>>0<10>>>0|(b|0)==0){k=f;l=j;break}if((c[g>>2]|0)==0){k=f;l=j;break}c[e>>2]=(c[e>>2]|0)-1;k=f;l=j}else{k=0;l=h}}while(0);if((l-48|0)>>>0>9>>>0){if((c[g>>2]|0)==0){m=-2147483648;n=0;return(H=m,n)|0}c[e>>2]=(c[e>>2]|0)-1;m=-2147483648;n=0;return(H=m,n)|0}else{o=l;p=0}while(1){q=o-48+p|0;l=c[e>>2]|0;if(l>>>0<(c[g>>2]|0)>>>0){c[e>>2]=l+1;r=d[l]|0}else{r=Lx(a)|0}if(!((r-48|0)>>>0<10>>>0&(q|0)<214748364)){break}o=r;p=q*10|0}p=q;o=(q|0)<0|0?-1:0;if((r-48|0)>>>0<10>>>0){q=r;l=o;h=p;while(1){j=py(h,l,10,0)|0;b=H;f=fy(q,(q|0)<0|0?-1:0,-48,-1)|0;i=fy(f,H,j,b)|0;b=H;j=c[e>>2]|0;if(j>>>0<(c[g>>2]|0)>>>0){c[e>>2]=j+1;s=d[j]|0}else{s=Lx(a)|0}j=21474836;if((s-48|0)>>>0<10>>>0&((b|0)<(j|0)|(b|0)==(j|0)&i>>>0<2061584302>>>0)){q=s;l=b;h=i}else{t=s;u=b;v=i;break}}}else{t=r;u=o;v=p}if((t-48|0)>>>0<10>>>0){do{t=c[e>>2]|0;if(t>>>0<(c[g>>2]|0)>>>0){c[e>>2]=t+1;w=d[t]|0}else{w=Lx(a)|0}}while((w-48|0)>>>0<10>>>0)}if((c[g>>2]|0)!=0){c[e>>2]=(c[e>>2]|0)-1}e=(k|0)!=0;k=gy(0,0,v,u)|0;m=e?H:u;n=e?k:v;return(H=m,n)|0}function Kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0)){c[a+100>>2]=e+b;return}else{c[a+100>>2]=d;return}}function Lx(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=b+104|0;f=c[e>>2]|0;if((f|0)==0){g=3}else{if((c[b+108>>2]|0)<(f|0)){g=3}}do{if((g|0)==3){f=Px(b)|0;if((f|0)<0){break}h=c[e>>2]|0;i=c[b+8>>2]|0;do{if((h|0)==0){g=8}else{j=c[b+4>>2]|0;k=h-(c[b+108>>2]|0)-1|0;if((i-j|0)<=(k|0)){g=8;break}c[b+100>>2]=j+k}}while(0);if((g|0)==8){c[b+100>>2]=i}h=c[b+4>>2]|0;if((i|0)!=0){k=b+108|0;c[k>>2]=i+1-h+(c[k>>2]|0)}k=h-1|0;if((d[k]|0|0)==(f|0)){l=f;return l|0}a[k]=f;l=f;return l|0}}while(0);c[b+100>>2]=0;l=-1;return l|0}function Mx(a,b){a=+a;b=b|0;var d=0.0,e=0,f=0.0,g=0;do{if((b|0)>1023){d=a*8.98846567431158e+307;e=b-1023|0;if((e|0)<=1023){f=d;g=e;break}e=b-2046|0;f=d*8.98846567431158e+307;g=(e|0)>1023?1023:e}else{if(!((b|0)<-1022)){f=a;g=b;break}d=a*2.2250738585072014e-308;e=b+1022|0;if(!((e|0)<-1022)){f=d;g=e;break}e=b+2044|0;f=d*2.2250738585072014e-308;g=(e|0)<-1022?-1022:e}}while(0);return+(f*(c[k>>2]=0<<20|0>>>12,c[k+4>>2]=g+1023<<20|0>>>12,+h[k>>3]))}function Nx(a,b){a=+a;b=b|0;return+(+Mx(a,b))}function Ox(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+74|0;e=a[d]|0;a[d]=e-1&255|e;e=b+20|0;d=b+44|0;if((c[e>>2]|0)>>>0>(c[d>>2]|0)>>>0){he[c[b+36>>2]&63](b,0,0)|0}c[b+16>>2]=0;c[b+28>>2]=0;c[e>>2]=0;e=b|0;f=c[e>>2]|0;if((f&20|0)==0){g=c[d>>2]|0;c[b+8>>2]=g;c[b+4>>2]=g;h=0;return h|0}if((f&4|0)==0){h=-1;return h|0}c[e>>2]=f|32;h=-1;return h|0}function Px(a){a=a|0;var b=0,e=0,f=0,g=0;b=i;i=i+8|0;e=b|0;if((c[a+8>>2]|0)==0){if((Ox(a)|0)==0){f=3}else{g=-1}}else{f=3}do{if((f|0)==3){if((he[c[a+32>>2]&63](a,e,1)|0)!=1){g=-1;break}g=d[e]|0}}while(0);i=b;return g|0}function Qx(a){a=a|0;return+(+Rx(a,0))}function Rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0.0,j=0,k=0,l=0,m=0;d=i;i=i+112|0;e=d|0;Zx(e|0,0,112)|0;f=e+4|0;c[f>>2]=a;g=e+8|0;c[g>>2]=-1;c[e+44>>2]=a;c[e+76>>2]=-1;Kx(e,0);h=+Ix(e,1,1);j=(c[f>>2]|0)-(c[g>>2]|0)+(c[e+108>>2]|0)|0;if((b|0)==0){k=112;l=0;i=d;return+h}if((j|0)==0){m=a}else{m=a+j|0}c[b>>2]=m;k=112;l=0;i=d;return+h}function Sx(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((d|0)==0){e=0;return e|0}else{f=d;g=b;h=c}while(1){i=a[g]|0;j=a[h]|0;if(!(i<<24>>24==j<<24>>24)){break}c=f-1|0;if((c|0)==0){e=0;k=5;break}else{f=c;g=g+1|0;h=h+1|0}}if((k|0)==5){return e|0}e=(i&255)-(j&255)|0;return e|0}function Tx(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=a[b]|0;e=a[c]|0;if(d<<24>>24!=e<<24>>24|d<<24>>24==0|e<<24>>24==0){f=d;g=e;h=f&255;i=g&255;j=h-i|0;return j|0}else{k=b;l=c}while(1){c=k+1|0;b=l+1|0;e=a[c]|0;d=a[b]|0;if(e<<24>>24!=d<<24>>24|e<<24>>24==0|d<<24>>24==0){f=e;g=d;break}else{k=c;l=b}}h=f&255;i=g&255;j=h-i|0;return j|0}function Ux(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)==0){f=0;return f|0}g=a[b]|0;a:do{if(g<<24>>24==0){h=c;i=0}else{j=b;k=c;l=e;m=g;while(1){n=l-1|0;o=a[k]|0;if(!((n|0)!=0&o<<24>>24!=0&m<<24>>24==o<<24>>24)){h=k;i=m;break a}o=j+1|0;p=k+1|0;q=a[o]|0;if(q<<24>>24==0){h=p;i=0;break}else{j=o;k=p;l=n;m=q}}}}while(0);f=(i&255)-(d[h]|0)|0;return f|0}function Vx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return bc(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function Wx(b){b=b|0;var c=0;c=b;while(a[c]|0){c=c+1|0}return c-b|0}function Xx(a){a=a|0;var b=0;b=(da(c[a>>2]|0,31010991)|0)+1735287159&2147483647;c[a>>2]=b;return b|0}function Yx(){return Xx(o)|0}function Zx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;g=b&3;h=d|d<<8|d<<16|d<<24;i=f&~3;if(g){g=b+4-g|0;while((b|0)<(g|0)){a[b]=d;b=b+1|0}}while((b|0)<(i|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b]=d;b=b+1|0}return b-e|0}function _x(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b]=a[c]|0}b=e}else{Vx(b,c,d)|0}return b|0}function $x(b,c){b=b|0;c=c|0;var d=0,e=0;d=b+(Wx(b)|0)|0;do{a[d+e|0]=a[c+e|0];e=e+1|0}while(a[c+(e-1)|0]|0);return b|0}function ay(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;while((e|0)<(d|0)){a[b+e|0]=f?0:a[c+e|0]|0;f=f?1:(a[c+e|0]|0)==0;e=e+1|0}return b|0}function by(b,c){b=b|0;c=c|0;var d=0;do{a[b+d|0]=a[c+d|0];d=d+1|0}while(a[c+(d-1)|0]|0);return b|0}function cy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;w=w+1|0;c[a>>2]=w;while((e|0)<40){if((c[d+(e<<2)>>2]|0)==0){c[d+(e<<2)>>2]=w;c[d+((e<<2)+4)>>2]=b;c[d+((e<<2)+8)>>2]=0;return 0}e=e+2|0}hc(116);hc(111);hc(111);hc(32);hc(109);hc(97);hc(110);hc(121);hc(32);hc(115);hc(101);hc(116);hc(106);hc(109);hc(112);hc(115);hc(32);hc(105);hc(110);hc(32);hc(97);hc(32);hc(102);hc(117);hc(110);hc(99);hc(116);hc(105);hc(111);hc(110);hc(32);hc(99);hc(97);hc(108);hc(108);hc(44);hc(32);hc(98);hc(117);hc(105);hc(108);hc(100);hc(32);hc(119);hc(105);hc(116);hc(104);hc(32);hc(97);hc(32);hc(104);hc(105);hc(103);hc(104);hc(101);hc(114);hc(32);hc(118);hc(97);hc(108);hc(117);hc(101);hc(32);hc(102);hc(111);hc(114);hc(32);hc(77);hc(65);hc(88);hc(95);hc(83);hc(69);hc(84);hc(74);hc(77);hc(80);hc(83);hc(10);ea(0);return 0}function dy(a,b){a=a|0;b=b|0;var d=0,e=0;while((d|0)<20){e=c[b+(d<<2)>>2]|0;if((e|0)==0)break;if((e|0)==(a|0)){return c[b+((d<<2)+4)>>2]|0}d=d+2|0}return 0}function ey(a){a=a|0;if((a|0)<65)return a|0;if((a|0)>90)return a|0;return a-65+97|0}function fy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return(H=b+d+(e>>>0<a>>>0|0)>>>0,e|0)|0}function gy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return(H=e,a-c>>>0|0)|0}function hy(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}H=a<<c-32;return 0}function iy(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}H=0;return b>>>c-32|0}function jy(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}H=(b|0)<0?-1:0;return b>>c-32|0}function ky(b){b=b|0;var c=0;c=a[n+(b>>>24)|0]|0;if((c|0)<8)return c|0;c=a[n+(b>>16&255)|0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>8&255)|0]|0;if((c|0)<8)return c+16|0;return(a[n+(b&255)|0]|0)+24|0}function ly(b){b=b|0;var c=0;c=a[m+(b&255)|0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)|0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)|0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)|0]|0)+24|0}function my(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=da(d,c)|0;f=a>>>16;a=(e>>>16)+(da(d,f)|0)|0;d=b>>>16;b=da(d,c)|0;return(H=(a>>>16)+(da(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function ny(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=gy(e^a,f^b,e,f)|0;b=H;a=g^e;e=h^f;f=gy((sy(i,b,gy(g^c,h^d,g,h)|0,H,0)|0)^a,H^e,a,e)|0;return(H=H,f)|0}function oy(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;f=i;i=i+8|0;g=f|0;h=b>>31|((b|0)<0?-1:0)<<1;j=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;l=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;m=gy(h^a,j^b,h,j)|0;b=H;sy(m,b,gy(k^d,l^e,k,l)|0,H,g)|0;l=gy(c[g>>2]^h,c[g+4>>2]^j,h,j)|0;j=H;i=f;return(H=j,l)|0}function py(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=my(e,a)|0;f=H;return(H=(da(b,a)|0)+(da(d,e)|0)+f|f&0,c|0|0)|0}function qy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=sy(a,b,c,d,0)|0;return(H=H,e)|0}function ry(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+8|0;g=f|0;sy(a,b,d,e,g)|0;i=f;return(H=c[g+4>>2]|0,c[g>>2]|0)|0}function sy(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,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,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0;g=a;h=b;i=h;j=d;k=e;l=k;if((i|0)==0){m=(f|0)!=0;if((l|0)==0){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return(H=n,o)|0}else{if(!m){n=0;o=0;return(H=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return(H=n,o)|0}}m=(l|0)==0;do{if((j|0)==0){if(m){if((f|0)!=0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return(H=n,o)|0}if((g|0)==0){if((f|0)!=0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return(H=n,o)|0}p=l-1|0;if((p&l|0)==0){if((f|0)!=0){c[f>>2]=a|0;c[f+4>>2]=p&i|b&0}n=0;o=i>>>((ly(l|0)|0)>>>0);return(H=n,o)|0}p=(ky(l|0)|0)-(ky(i|0)|0)|0;if(p>>>0<=30){q=p+1|0;r=31-p|0;s=q;t=i<<r|g>>>(q>>>0);u=i>>>(q>>>0);v=0;w=g<<r;break}if((f|0)==0){n=0;o=0;return(H=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(H=n,o)|0}else{if(!m){r=(ky(l|0)|0)-(ky(i|0)|0)|0;if(r>>>0<=31){q=r+1|0;p=31-r|0;x=r-31>>31;s=q;t=g>>>(q>>>0)&x|i<<p;u=i>>>(q>>>0)&x;v=0;w=g<<p;break}if((f|0)==0){n=0;o=0;return(H=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(H=n,o)|0}p=j-1|0;if((p&j|0)!=0){x=(ky(j|0)|0)+33-(ky(i|0)|0)|0;q=64-x|0;r=32-x|0;y=r>>31;z=x-32|0;A=z>>31;s=x;t=r-1>>31&i>>>(z>>>0)|(i<<r|g>>>(x>>>0))&A;u=A&i>>>(x>>>0);v=g<<q&y;w=(i<<q|g>>>(z>>>0))&y|g<<r&x-33>>31;break}if((f|0)!=0){c[f>>2]=p&g;c[f+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return(H=n,o)|0}else{p=ly(j|0)|0;n=i>>>(p>>>0)|0;o=i<<32-p|g>>>(p>>>0)|0;return(H=n,o)|0}}}while(0);if((s|0)==0){B=w;C=v;D=u;E=t;F=0;G=0}else{g=d|0|0;d=k|e&0;e=fy(g,d,-1,-1)|0;k=H;i=w;w=v;v=u;u=t;t=s;s=0;while(1){I=w>>>31|i<<1;J=s|w<<1;j=u<<1|i>>>31|0;a=u>>>31|v<<1|0;gy(e,k,j,a)|0;b=H;h=b>>31|((b|0)<0?-1:0)<<1;K=h&1;L=gy(j,a,h&g,(((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1)&d)|0;M=H;b=t-1|0;if((b|0)==0){break}else{i=I;w=J;v=M;u=L;t=b;s=K}}B=I;C=J;D=M;E=L;F=0;G=K}K=C;C=0;if((f|0)!=0){c[f>>2]=E;c[f+4>>2]=D}n=(K|0)>>>31|(B|C)<<1|(C<<1|K>>>31)&0|F;o=(K<<1|0>>>31)&-2|G;return(H=n,o)|0}function ty(a){a=a|0;Qc(a|0)}function uy(a){a=a|0;return Dd(a|0)|0}function vy(a,b){a=a|0;b=b|0;return ed(a|0,b|0)|0}function wy(){return Jd()|0}function xy(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Xd[a&7](b|0,c|0,d|0,e|0,f|0)}function yy(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ja(0,a|0,b|0,c|0,d|0,e|0)}function zy(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return Yd[a&7](b|0,c|0,d|0,e|0,f|0,+g)|0}function Ay(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return ja(0,a|0,b|0,c|0,d|0,e|0,+f)|0}function By(a,b,c){a=a|0;b=b|0;c=+c;Zd[a&7](b|0,+c)}function Cy(a,b){a=a|0;b=+b;ja(0,a|0,+b)}function Dy(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return _d[a&7](b|0,c|0,d|0,+e,f|0)|0}function Ey(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return ja(0,a|0,b|0,c|0,+d,e|0)|0}function Fy(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=+k;l=l|0;m=m|0;n=n|0;return $d[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,+k,l|0,m|0,n|0)|0}function Gy(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;l=l|0;m=m|0;return ja(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,+j,k|0,l|0,m|0)|0}function Hy(a,b,c){a=a|0;b=b|0;c=c|0;ae[a&127](b|0,c|0)}function Iy(a,b){a=a|0;b=b|0;ja(0,a|0,b|0)}function Jy(a,b){a=a|0;b=b|0;return be[a&127](b|0)|0}function Ky(a){a=a|0;return ja(0,a|0)|0}function Ly(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)}function My(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ja(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function Ny(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;de[a&7](b|0,c|0,+d,e|0)}function Oy(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;ja(0,a|0,b|0,+c,d|0)}function Py(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;return ee[a&3](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)|0}function Qy(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;return ja(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)|0}function Ry(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return fe[a&7](b|0,c|0,+d,e|0)|0}function Sy(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;return ja(0,a|0,b|0,+c,d|0)|0}function Ty(a,b){a=a|0;b=+b;return ge[a&7](+b)|0}function Uy(a){a=+a;return ja(0,+a)|0}function Vy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return he[a&63](b|0,c|0,d|0)|0}function Wy(a,b,c){a=a|0;b=b|0;c=c|0;return ja(0,a|0,b|0,c|0)|0}function Xy(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function Yy(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return ja(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function Zy(a,b){a=a|0;b=b|0;je[a&127](b|0)}function _y(a){a=a|0;ja(0,a|0)}function $y(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;ke[a&7](b|0,+c,d|0)}function az(a,b,c){a=a|0;b=+b;c=c|0;ja(0,a|0,+b,c|0)}function bz(a,b,c){a=a|0;b=b|0;c=c|0;return+le[a&7](b|0,c|0)}function cz(a,b){a=a|0;b=b|0;return+ja(0,a|0,b|0)}function dz(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;return me[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0)|0}function ez(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return ja(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)|0}function fz(a,b,c){a=a|0;b=b|0;c=+c;return ne[a&7](b|0,+c)|0}function gz(a,b){a=a|0;b=+b;return ja(0,a|0,+b)|0}function hz(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;oe[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function iz(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ja(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0)}function jz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return+pe[a&7](b|0,c|0,+d,+e)}function kz(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return+ja(0,a|0,b|0,+c,+d)}function lz(a,b,c){a=a|0;b=b|0;c=c|0;return qe[a&63](b|0,c|0)|0}function mz(a,b){a=a|0;b=b|0;return ja(0,a|0,b|0)|0}function nz(a){a=a|0;return+re[a&7]()}function oz(){return+ja(0)}function pz(a){a=a|0;return se[a&31]()|0}function qz(){return ja(0)|0}function rz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return te[a&15](b|0,c|0,d|0,e|0,f|0)|0}function sz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ja(0,a|0,b|0,c|0,d|0,e|0)|0}function tz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&31](b|0,c|0,d|0)}function uz(a,b,c){a=a|0;b=b|0;c=c|0;ja(0,a|0,b|0,c|0)}function vz(a){a=a|0;ve[a&255]()}function wz(){ja(0)}function xz(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return we[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function yz(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ja(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function zz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return xe[a&31](b|0,c|0,d|0,e|0)|0}function Az(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ja(0,a|0,b|0,c|0,d|0)|0}function Bz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;ye[a&7](b|0,c|0,+d)}function Cz(a,b,c){a=a|0;b=b|0;c=+c;ja(0,a|0,b|0,+c)}function Dz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ze[a&15](b|0,c|0,d|0,e|0)}function Ez(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ja(0,a|0,b|0,c|0,d|0)}function Fz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ea(0)}function Gz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;ea(1);return 0}function Hz(a,b){a=a|0;b=+b;ea(2)}function Iz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;ea(3);return 0}function Jz(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;l=l|0;m=m|0;ea(4);return 0}function Kz(a,b){a=a|0;b=b|0;ea(5)}function Lz(a){a=a|0;ea(6);return 0}function Mz(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ea(7)}function Nz(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;ea(8)}function Oz(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;ea(9);return 0}function Pz(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;ea(10);return 0}function Qz(a){a=+a;ea(11);return 0}function Rz(a,b,c){a=a|0;b=b|0;c=c|0;ea(12);return 0}function Sz(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ea(13);return 0}function Tz(a){a=a|0;ea(14)}function Uz(a,b,c){a=a|0;b=+b;c=c|0;ea(15)}function Vz(a,b){a=a|0;b=b|0;ea(16);return 0.0}function Wz(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;ea(17);return 0}function Xz(a,b){a=a|0;b=+b;ea(18);return 0}function Yz(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ea(19)}function Zz(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;ea(20);return 0.0}function _z(a,b){a=a|0;b=b|0;ea(21);return 0}function $z(){ea(22);return 0.0}function aA(){ea(23);return 0}function bA(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ea(24);return 0}function cA(a,b,c){a=a|0;b=b|0;c=c|0;ea(25)}function dA(){ea(26)}function eA(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ea(27);return 0}function fA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ea(28);return 0}function gA(a,b,c){a=a|0;b=b|0;c=+c;ea(29)}function hA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ea(30)}
|
|
|
|
|
|
|
|
|
|
// EMSCRIPTEN_END_FUNCS
|
|
var Xd=[Fz,Fz,yy,Fz,ef,Fz,Fz,Fz];var Yd=[Gz,Gz,Ay,Gz,Qs,Gz,Gz,Gz];var Zd=[Hz,Hz,Cy,Hz,Lu,Hz,vs,Hz];var _d=[Iz,Iz,Ey,Iz,jt,Iz,Iz,Iz];var $d=[Jz,Jz,Gy,Jz,Jp,Jz,Jz,Jz];var ae=[Kz,Kz,Iy,Kz,Ir,Kz,Yh,Kz,su,Kz,ms,Kz,Ik,Kz,pu,Kz,Jl,Kz,Ku,Kz,yx,Kz,ix,Kz,lg,Kz,Vi,Kz,Pl,Kz,ff,Kz,wl,Kz,Xf,Kz,Cs,Kz,Ks,Kz,qu,Kz,Cu,Kz,Fl,Kz,Rr,Kz,Kj,Kz,_i,Kz,Nj,Kz,Nl,Kz,at,Kz,dj,Kz,Ol,Kz,tu,Kz,Fg,Kz,ox,Kz,us,Kz,nk,Kz,gp,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz,Kz];var be=[Lz,Lz,Ky,Lz,hr,Lz,Yp,Lz,Pv,Lz,gr,Lz,tg,Lz,Gv,Lz,Ko,Lz,Nv,Lz,zv,Lz,ew,Lz,js,Lz,Lr,Lz,bf,Lz,xv,Lz,Sv,Lz,Cv,Lz,Hp,Lz,Qv,Lz,Wu,Lz,gf,Lz,Hv,Lz,Iv,Lz,Jv,Lz,dw,Lz,Ws,Lz,Tv,Lz,Rv,Lz,uy,Lz,jf,Lz,Po,Lz,Ov,Lz,Vv,Lz,yv,Lz,Wv,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz,Lz];var ce=[Mz,Mz,My,Mz,hs,Mz,Mz,Mz];var de=[Nz,Nz,Oy,Nz,ht,Nz,Nz,Nz];var ee=[Oz,Oz,Qy,Oz];var fe=[Pz,Pz,Sy,Pz,pt,Pz,Pz,Pz];var ge=[Qz,Qz,Uy,Qz,Vu,Qz,Qz,Qz];var he=[Rz,Rz,Wy,Rz,gw,Rz,jk,Rz,Ro,Rz,ds,Rz,Te,Rz,el,Rz,Yr,Rz,Uu,Rz,fo,Rz,Nr,Rz,cl,Rz,So,Rz,Kl,Rz,To,Rz,al,Rz,xx,Rz,Fs,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz,Rz];var ie=[Sz,Sz,Yy,Sz,Vq,Sz,Sz,Sz];var je=[Tz,Tz,_y,Tz,Nt,Tz,ru,Tz,Df,Tz,Yt,Tz,Kf,Tz,Wt,Tz,uu,Tz,Vg,Tz,Vs,Tz,hf,Tz,Js,Tz,Fu,Tz,Uj,Tz,Gl,Tz,$s,Tz,Du,Tz,fj,Tz,rk,Tz,ty,Tz,Hu,Tz,Ms,Tz,Ts,Tz,As,Tz,Ff,Tz,Uk,Tz,lf,Tz,Gu,Tz,Iu,Tz,vr,Tz,Gf,Tz,Bs,Tz,Ig,Tz,Wj,Tz,Eu,Tz,If,Tz,xu,Tz,wu,Tz,Jf,Tz,vu,Tz,Nu,Tz,Ls,Tz,Xs,Tz,lx,Tz,Hf,Tz,Sg,Tz,Au,Tz,Pt,Tz,ps,Tz,Vm,Tz,Ot,Tz,Bx,Tz,zu,Tz,Ef,Tz,Yj,Tz,Mr,Tz,Ue,Tz,yu,Tz,Tz,Tz,Tz,Tz,Tz,Tz,Tz,Tz,Tz,Tz];var ke=[Uz,Uz,az,Uz,Mu,Uz,Uz,Uz];var le=[Vz,Vz,cz,Vz,Br,Vz,Ds,Vz];var me=[Wz,Wz,ez,Wz,is,Wz,Wz,Wz];var ne=[Xz,Xz,gz,Xz,Ar,Xz,Xz,Xz];var oe=[Yz,Yz,iz,Yz,$e,Yz,af,Yz];var pe=[Zz,Zz,kz,Zz,Cr,Zz,Zz,Zz];var qe=[_z,_z,mz,_z,Vt,_z,fw,_z,Dr,_z,Xu,_z,dh,_z,so,_z,Gs,_z,gs,_z,sr,_z,ct,_z,Us,_z,Rs,_z,Tu,_z,lo,_z,vl,_z,ko,_z,io,_z,Os,_z,Ns,_z,Aq,_z,Hs,_z,cf,_z,Kr,_z,Hx,_z,Tt,_z,vy,_z,Do,_z,_z,_z,_z,_z,_z,_z];var re=[$z,$z,oz,$z,yp,$z,$z,$z];var se=[aA,aA,qz,aA,Rg,aA,ex,aA,vp,aA,kf,aA,wy,aA,os,aA,Ug,aA,Fj,aA,df,aA,Su,aA,_s,aA,Xt,aA,Ru,aA,lj,aA];var te=[bA,bA,sz,bA,mr,bA,ss,bA,kt,bA,bA,bA,bA,bA,bA,bA];var ue=[cA,cA,uz,cA,ls,cA,rn,cA,aj,cA,Ut,cA,_e,cA,ks,cA,zs,cA,Jr,cA,ts,cA,br,cA,ns,cA,cA,cA,cA,cA,cA,cA];var ve=[dA,dA,wz,dA,Jk,dA,Vf,dA,Lj,dA,rl,dA,mx,dA,Is,dA,mm,dA,Rw,dA,Ak,dA,ak,dA,wm,dA,Wi,dA,qo,dA,Rf,dA,Nf,dA,Of,dA,vk,dA,pl,dA,$w,dA,eg,dA,ag,dA,Pj,dA,wi,dA,Hj,dA,Fi,dA,bg,dA,zi,dA,Ck,dA,uk,dA,bk,dA,wk,dA,rj,dA,Zf,dA,Qj,dA,Sf,dA,Ei,dA,Tw,dA,Wf,dA,Uf,dA,Yf,dA,Tf,dA,Oj,dA,Lf,dA,Pf,dA,cj,dA,tl,dA,fh,dA,yk,dA,_f,dA,nl,dA,$f,dA,ys,dA,Gi,dA,ql,dA,Tm,dA,dg,dA,Di,dA,Qf,dA,cg,dA,fg,dA,ck,dA,po,dA,tk,dA,Ui,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA,dA];var we=[eA,eA,yz,eA,_q,eA,eA,eA];var xe=[fA,fA,Az,fA,go,fA,Er,fA,Ss,fA,jo,fA,Kq,fA,Ps,fA,Qo,fA,ho,fA,Yu,fA,rr,fA,fA,fA,fA,fA,fA,fA,fA,fA];var ye=[gA,gA,Cz,gA,Ju,gA,Es,gA];var ze=[hA,hA,Ez,hA,Fr,hA,Mt,hA,Zr,hA,mf,hA,hA,hA,hA,hA];return{_strlen:Wx,_strcat:$x,_main:nx,_Z_Free:mj,_CON_SetIsTTY:zx,_calloc:Hx,_rand_r:Xx,_Z_Malloc:oj,_strncpy:ay,_Com_Error:aj,_memset:Zx,_atof:Qx,_memcpy:Vx,_VM_GetCurrent:Fo,_Com_ProxyCallback:bj,_VM_SetCurrent:Go,_S_Malloc:pj,_rand:Yx,_testSetjmp:dy,_saveSetjmp:cy,_free:Gx,_Com_Printf:_i,_memmove:_x,_tolower:ey,_Cvar_VariableString:fk,_malloc:Fx,_Cvar_Set:nk,_Com_GetCDN:_j,_Com_GetManifest:$j,_strcpy:by,runPostSets:Qe,stackAlloc:Ae,stackSave:Be,stackRestore:Ce,setThrew:De,setTempRet0:Ge,setTempRet1:He,setTempRet2:Ie,setTempRet3:Je,setTempRet4:Ke,setTempRet5:Le,setTempRet6:Me,setTempRet7:Ne,setTempRet8:Oe,setTempRet9:Pe,dynCall_viiiii:xy,dynCall_iiiiiif:zy,dynCall_vif:By,dynCall_iiiifi:Dy,dynCall_iiiiiiiiiifiii:Fy,dynCall_vii:Hy,dynCall_ii:Jy,dynCall_viiiiiiiiiii:Ly,dynCall_viifi:Ny,dynCall_iiiiiiiiiiiiii:Py,dynCall_iiifi:Ry,dynCall_if:Ty,dynCall_iiii:Vy,dynCall_iiiiiiiiiiii:Xy,dynCall_vi:Zy,dynCall_vifi:$y,dynCall_fii:bz,dynCall_iiiiiiiiiiiii:dz,dynCall_iif:fz,dynCall_viiiiiii:hz,dynCall_fiiff:jz,dynCall_iii:lz,dynCall_f:nz,dynCall_i:pz,dynCall_iiiiii:rz,dynCall_viii:tz,dynCall_v:vz,dynCall_iiiiiiiii:xz,dynCall_iiiii:zz,dynCall_viif:Bz,dynCall_viiii:Dz}})
|
|
|
|
|
|
// EMSCRIPTEN_END_ASM
|
|
({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "jsCall": jsCall, "invoke_viiiii": invoke_viiiii, "invoke_iiiiiif": invoke_iiiiiif, "invoke_vif": invoke_vif, "invoke_iiiifi": invoke_iiiifi, "invoke_iiiiiiiiiifiii": invoke_iiiiiiiiiifiii, "invoke_vii": invoke_vii, "invoke_ii": invoke_ii, "invoke_viiiiiiiiiii": invoke_viiiiiiiiiii, "invoke_viifi": invoke_viifi, "invoke_iiiiiiiiiiiiii": invoke_iiiiiiiiiiiiii, "invoke_iiifi": invoke_iiifi, "invoke_if": invoke_if, "invoke_iiii": invoke_iiii, "invoke_iiiiiiiiiiii": invoke_iiiiiiiiiiii, "invoke_vi": invoke_vi, "invoke_vifi": invoke_vifi, "invoke_fii": invoke_fii, "invoke_iiiiiiiiiiiii": invoke_iiiiiiiiiiiii, "invoke_iif": invoke_iif, "invoke_viiiiiii": invoke_viiiiiii, "invoke_fiiff": invoke_fiiff, "invoke_iii": invoke_iii, "invoke_f": invoke_f, "invoke_i": invoke_i, "invoke_iiiiii": invoke_iiiiii, "invoke_viii": invoke_viii, "invoke_v": invoke_v, "invoke_iiiiiiiii": invoke_iiiiiiiii, "invoke_iiiii": invoke_iiiii, "invoke_viif": invoke_viif, "invoke_viiii": invoke_viiii, "_llvm_lifetime_end": _llvm_lifetime_end, "_lseek": _lseek, "_getaddrinfo": _getaddrinfo, "__scanString": __scanString, "_fclose": _fclose, "_glLinkProgram": _glLinkProgram, "_glHint": _glHint, "_fflush": _fflush, "_strtol": _strtol, "_fputc": _fputc, "_glGetString": _glGetString, "_fwrite": _fwrite, "_send": _send, "_mktime": _mktime, "__inet_pton6_raw": __inet_pton6_raw, "_dlerror": _dlerror, "_rint": _rint, "_glCompileShader": _glCompileShader, "_isspace": _isspace, "_localtime": _localtime, "_read": _read, "__inet_ntop6_raw": __inet_ntop6_raw, "_sprintf": _sprintf, "_Sys_ErrorDialog": _Sys_ErrorDialog, "_dlclose": _dlclose, "_fileno": _fileno, "_strstr": _strstr, "_ctime": _ctime, "_fsync": _fsync, "_signal": _signal, "_remove": _remove, "_recvfrom": _recvfrom, "_fmod": _fmod, "_sendto": _sendto, "_sscanf": _sscanf, "_glCreateShader": _glCreateShader, "_round": _round, "_llvm_va_end": _llvm_va_end, "_snprintf": _snprintf, "_VM_Compile": _VM_Compile, "_Sys_Mkdir": _Sys_Mkdir, "_glVertexAttribPointer": _glVertexAttribPointer, "__getFloat": __getFloat, "_freeaddrinfo": _freeaddrinfo, "_connect": _connect, "_close": _close, "_tcsetattr": _tcsetattr, "_strchr": _strchr, "_tcgetattr": _tcgetattr, "_VM_SuspendCompiled": _VM_SuspendCompiled, "_clock": _clock, "___setErrNo": ___setErrNo, "_emscripten_exit_with_live_runtime": _emscripten_exit_with_live_runtime, "_Sys_PID": _Sys_PID, "_Sys_Cwd": _Sys_Cwd, "_ftell": _ftell, "_glDeleteProgram": _glDeleteProgram, "_exit": _exit, "_select": _select, "_asctime": _asctime, "_strrchr": _strrchr, "_glAttachShader": _glAttachShader, "_fcntl": _fcntl, "_ferror": _ferror, "_copysign": _copysign, "_localtime_r": _localtime_r, "_glBindAttribLocation": _glBindAttribLocation, "_asctime_r": _asctime_r, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_getnameinfo": _getnameinfo, "_recv": _recv, "_dlopen": _dlopen, "_setsockopt": _setsockopt, "_cos": _cos, "_putchar": _putchar, "_socket": _socket, "_glActiveTexture": _glActiveTexture, "_VM_Destroy": _VM_Destroy, "_mkport": _mkport, "_glDetachShader": _glDetachShader, "__exit": __exit, "_Sys_SetEnv": _Sys_SetEnv, "_Sys_FreeFileList": _Sys_FreeFileList, "_tzset": _tzset, "_fabsf": _fabsf, "_floorf": _floorf, "__inet_pton4_raw": __inet_pton4_raw, "_glDisableVertexAttribArray": _glDisableVertexAttribArray, "_gethostbyname": _gethostbyname, "_toupper": _toupper, "_glShaderSource": _glShaderSource, "_pread": _pread, "_fopen": _fopen, "_open": _open, "_sqrtf": _sqrtf, "_gethostname": _gethostname, "_glDisable": _glDisable, "_isalnum": _isalnum, "_fputs": _fputs, "_qsort": _qsort, "_Sys_PlatformInit": _Sys_PlatformInit, "_Sys_Sleep": _Sys_Sleep, "_Sys_DefaultHomePath": _Sys_DefaultHomePath, "_Sys_PlatformExit": _Sys_PlatformExit, "_glEnableVertexAttribArray": _glEnableVertexAttribArray, "_rmdir": _rmdir, "_glBindBuffer": _glBindBuffer, "_glIsEnabled": _glIsEnabled, "_Sys_PIDIsRunning": _Sys_PIDIsRunning, "_srand": _srand, "_VM_CallCompiled": _VM_CallCompiled, "_gai_strerror": _gai_strerror, "__formatString": __formatString, "_getenv": _getenv, "_atoi": _atoi, "_vfprintf": _vfprintf, "_glGetFloatv": _glGetFloatv, "_sbrk": _sbrk, "_Sys_FS_Shutdown": _Sys_FS_Shutdown, "___errno_location": ___errno_location, "_strerror": _strerror, "_glGetIntegerv": _glGetIntegerv, "_llvm_lifetime_start": _llvm_lifetime_start, "_llvm_bswap_i32": _llvm_bswap_i32, "__parseInt": __parseInt, "_Sys_RandomBytes": _Sys_RandomBytes, "_vsnprintf": _vsnprintf, "_glUseProgram": _glUseProgram, "_htonl": _htonl, "_sysconf": _sysconf, "_dlsym": _dlsym, "_fread": _fread, "_abort": _abort, "_fprintf": _fprintf, "__read_sockaddr": __read_sockaddr, "___buildEnvironment": ___buildEnvironment, "__reallyNegative": __reallyNegative, "__write_sockaddr": __write_sockaddr, "_strncat": _strncat, "_htons": _htons, "_glEnable": _glEnable, "_Sys_ListFiles": _Sys_ListFiles, "_fseek": _fseek, "_sqrt": _sqrt, "_write": _write, "_sin": _sin, "_Sys_GetCurrentUser": _Sys_GetCurrentUser, "_ceilf": _ceilf, "_longjmp": _longjmp, "_emscripten_set_main_loop": _emscripten_set_main_loop, "_time": _time, "_Sys_Dirname": _Sys_Dirname, "_if_nametoindex": _if_nametoindex, "_strpbrk": _strpbrk, "_ioctl": _ioctl, "_unlink": _unlink, "_Sys_Milliseconds": _Sys_Milliseconds, "__inet_ntop4_raw": __inet_ntop4_raw, "_pwrite": _pwrite, "_fabs": _fabs, "_strerror_r": _strerror_r, "_bind": _bind, "_atan2": _atan2, "_glGetBooleanv": _glGetBooleanv, "_setvbuf": _setvbuf, "_llvm_bswap_i16": _llvm_bswap_i16, "_Sys_FS_Startup": _Sys_FS_Startup, "_Sys_FOpen": _Sys_FOpen, "_Sys_Mkfifo": _Sys_Mkfifo, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "cttz_i8": cttz_i8, "ctlz_i8": ctlz_i8, "___rand_seed": ___rand_seed, "NaN": NaN, "Infinity": Infinity, "_stdout": _stdout, "_stderr": _stderr, "_in6addr_any": _in6addr_any }, buffer);
|
|
var _strlen = Module["_strlen"] = asm["_strlen"];
|
|
var _strcat = Module["_strcat"] = asm["_strcat"];
|
|
var _main = Module["_main"] = asm["_main"];
|
|
var _Z_Free = Module["_Z_Free"] = asm["_Z_Free"];
|
|
var _CON_SetIsTTY = Module["_CON_SetIsTTY"] = asm["_CON_SetIsTTY"];
|
|
var _calloc = Module["_calloc"] = asm["_calloc"];
|
|
var _rand_r = Module["_rand_r"] = asm["_rand_r"];
|
|
var _Z_Malloc = Module["_Z_Malloc"] = asm["_Z_Malloc"];
|
|
var _strncpy = Module["_strncpy"] = asm["_strncpy"];
|
|
var _Com_Error = Module["_Com_Error"] = asm["_Com_Error"];
|
|
var _memset = Module["_memset"] = asm["_memset"];
|
|
var _atof = Module["_atof"] = asm["_atof"];
|
|
var _memcpy = Module["_memcpy"] = asm["_memcpy"];
|
|
var _VM_GetCurrent = Module["_VM_GetCurrent"] = asm["_VM_GetCurrent"];
|
|
var _Com_ProxyCallback = Module["_Com_ProxyCallback"] = asm["_Com_ProxyCallback"];
|
|
var _VM_SetCurrent = Module["_VM_SetCurrent"] = asm["_VM_SetCurrent"];
|
|
var _S_Malloc = Module["_S_Malloc"] = asm["_S_Malloc"];
|
|
var _rand = Module["_rand"] = asm["_rand"];
|
|
var _testSetjmp = Module["_testSetjmp"] = asm["_testSetjmp"];
|
|
var _saveSetjmp = Module["_saveSetjmp"] = asm["_saveSetjmp"];
|
|
var _free = Module["_free"] = asm["_free"];
|
|
var _Com_Printf = Module["_Com_Printf"] = asm["_Com_Printf"];
|
|
var _memmove = Module["_memmove"] = asm["_memmove"];
|
|
var _tolower = Module["_tolower"] = asm["_tolower"];
|
|
var _Cvar_VariableString = Module["_Cvar_VariableString"] = asm["_Cvar_VariableString"];
|
|
var _malloc = Module["_malloc"] = asm["_malloc"];
|
|
var _Cvar_Set = Module["_Cvar_Set"] = asm["_Cvar_Set"];
|
|
var _Com_GetCDN = Module["_Com_GetCDN"] = asm["_Com_GetCDN"];
|
|
var _Com_GetManifest = Module["_Com_GetManifest"] = asm["_Com_GetManifest"];
|
|
var _strcpy = Module["_strcpy"] = asm["_strcpy"];
|
|
var runPostSets = Module["runPostSets"] = asm["runPostSets"];
|
|
var dynCall_viiiii = Module["dynCall_viiiii"] = asm["dynCall_viiiii"];
|
|
var dynCall_iiiiiif = Module["dynCall_iiiiiif"] = asm["dynCall_iiiiiif"];
|
|
var dynCall_vif = Module["dynCall_vif"] = asm["dynCall_vif"];
|
|
var dynCall_iiiifi = Module["dynCall_iiiifi"] = asm["dynCall_iiiifi"];
|
|
var dynCall_iiiiiiiiiifiii = Module["dynCall_iiiiiiiiiifiii"] = asm["dynCall_iiiiiiiiiifiii"];
|
|
var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
|
|
var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"];
|
|
var dynCall_viiiiiiiiiii = Module["dynCall_viiiiiiiiiii"] = asm["dynCall_viiiiiiiiiii"];
|
|
var dynCall_viifi = Module["dynCall_viifi"] = asm["dynCall_viifi"];
|
|
var dynCall_iiiiiiiiiiiiii = Module["dynCall_iiiiiiiiiiiiii"] = asm["dynCall_iiiiiiiiiiiiii"];
|
|
var dynCall_iiifi = Module["dynCall_iiifi"] = asm["dynCall_iiifi"];
|
|
var dynCall_if = Module["dynCall_if"] = asm["dynCall_if"];
|
|
var dynCall_iiii = Module["dynCall_iiii"] = asm["dynCall_iiii"];
|
|
var dynCall_iiiiiiiiiiii = Module["dynCall_iiiiiiiiiiii"] = asm["dynCall_iiiiiiiiiiii"];
|
|
var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"];
|
|
var dynCall_vifi = Module["dynCall_vifi"] = asm["dynCall_vifi"];
|
|
var dynCall_fii = Module["dynCall_fii"] = asm["dynCall_fii"];
|
|
var dynCall_iiiiiiiiiiiii = Module["dynCall_iiiiiiiiiiiii"] = asm["dynCall_iiiiiiiiiiiii"];
|
|
var dynCall_iif = Module["dynCall_iif"] = asm["dynCall_iif"];
|
|
var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = asm["dynCall_viiiiiii"];
|
|
var dynCall_fiiff = Module["dynCall_fiiff"] = asm["dynCall_fiiff"];
|
|
var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"];
|
|
var dynCall_f = Module["dynCall_f"] = asm["dynCall_f"];
|
|
var dynCall_i = Module["dynCall_i"] = asm["dynCall_i"];
|
|
var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"];
|
|
var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"];
|
|
var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"];
|
|
var dynCall_iiiiiiiii = Module["dynCall_iiiiiiiii"] = asm["dynCall_iiiiiiiii"];
|
|
var dynCall_iiiii = Module["dynCall_iiiii"] = asm["dynCall_iiiii"];
|
|
var dynCall_viif = Module["dynCall_viif"] = asm["dynCall_viif"];
|
|
var dynCall_viiii = Module["dynCall_viiii"] = asm["dynCall_viiii"];
|
|
|
|
Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) };
|
|
Runtime.stackSave = function() { return asm['stackSave']() };
|
|
Runtime.stackRestore = function(top) { asm['stackRestore'](top) };
|
|
|
|
// TODO: strip out parts of this we do not need
|
|
|
|
//======= begin closure i64 code =======
|
|
|
|
// Copyright 2009 The Closure Library Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
/**
|
|
* @fileoverview Defines a Long class for representing a 64-bit two's-complement
|
|
* integer value, which faithfully simulates the behavior of a Java "long". This
|
|
* implementation is derived from LongLib in GWT.
|
|
*
|
|
*/
|
|
|
|
var i64Math = (function() { // Emscripten wrapper
|
|
var goog = { math: {} };
|
|
|
|
|
|
/**
|
|
* Constructs a 64-bit two's-complement integer, given its low and high 32-bit
|
|
* values as *signed* integers. See the from* functions below for more
|
|
* convenient ways of constructing Longs.
|
|
*
|
|
* The internal representation of a long is the two given signed, 32-bit values.
|
|
* We use 32-bit pieces because these are the size of integers on which
|
|
* Javascript performs bit-operations. For operations like addition and
|
|
* multiplication, we split each number into 16-bit pieces, which can easily be
|
|
* multiplied within Javascript's floating-point representation without overflow
|
|
* or change in sign.
|
|
*
|
|
* In the algorithms below, we frequently reduce the negative case to the
|
|
* positive case by negating the input(s) and then post-processing the result.
|
|
* Note that we must ALWAYS check specially whether those values are MIN_VALUE
|
|
* (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as
|
|
* a positive number, it overflows back into a negative). Not handling this
|
|
* case would often result in infinite recursion.
|
|
*
|
|
* @param {number} low The low (signed) 32 bits of the long.
|
|
* @param {number} high The high (signed) 32 bits of the long.
|
|
* @constructor
|
|
*/
|
|
goog.math.Long = function(low, high) {
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
this.low_ = low | 0; // force into 32 signed bits.
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
this.high_ = high | 0; // force into 32 signed bits.
|
|
};
|
|
|
|
|
|
// NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the
|
|
// from* methods on which they depend.
|
|
|
|
|
|
/**
|
|
* A cache of the Long representations of small integer values.
|
|
* @type {!Object}
|
|
* @private
|
|
*/
|
|
goog.math.Long.IntCache_ = {};
|
|
|
|
|
|
/**
|
|
* Returns a Long representing the given (32-bit) integer value.
|
|
* @param {number} value The 32-bit integer in question.
|
|
* @return {!goog.math.Long} The corresponding Long value.
|
|
*/
|
|
goog.math.Long.fromInt = function(value) {
|
|
if (-128 <= value && value < 128) {
|
|
var cachedObj = goog.math.Long.IntCache_[value];
|
|
if (cachedObj) {
|
|
return cachedObj;
|
|
}
|
|
}
|
|
|
|
var obj = new goog.math.Long(value | 0, value < 0 ? -1 : 0);
|
|
if (-128 <= value && value < 128) {
|
|
goog.math.Long.IntCache_[value] = obj;
|
|
}
|
|
return obj;
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns a Long representing the given value, provided that it is a finite
|
|
* number. Otherwise, zero is returned.
|
|
* @param {number} value The number in question.
|
|
* @return {!goog.math.Long} The corresponding Long value.
|
|
*/
|
|
goog.math.Long.fromNumber = function(value) {
|
|
if (isNaN(value) || !isFinite(value)) {
|
|
return goog.math.Long.ZERO;
|
|
} else if (value <= -goog.math.Long.TWO_PWR_63_DBL_) {
|
|
return goog.math.Long.MIN_VALUE;
|
|
} else if (value + 1 >= goog.math.Long.TWO_PWR_63_DBL_) {
|
|
return goog.math.Long.MAX_VALUE;
|
|
} else if (value < 0) {
|
|
return goog.math.Long.fromNumber(-value).negate();
|
|
} else {
|
|
return new goog.math.Long(
|
|
(value % goog.math.Long.TWO_PWR_32_DBL_) | 0,
|
|
(value / goog.math.Long.TWO_PWR_32_DBL_) | 0);
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns a Long representing the 64-bit integer that comes by concatenating
|
|
* the given high and low bits. Each is assumed to use 32 bits.
|
|
* @param {number} lowBits The low 32-bits.
|
|
* @param {number} highBits The high 32-bits.
|
|
* @return {!goog.math.Long} The corresponding Long value.
|
|
*/
|
|
goog.math.Long.fromBits = function(lowBits, highBits) {
|
|
return new goog.math.Long(lowBits, highBits);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns a Long representation of the given string, written using the given
|
|
* radix.
|
|
* @param {string} str The textual representation of the Long.
|
|
* @param {number=} opt_radix The radix in which the text is written.
|
|
* @return {!goog.math.Long} The corresponding Long value.
|
|
*/
|
|
goog.math.Long.fromString = function(str, opt_radix) {
|
|
if (str.length == 0) {
|
|
throw Error('number format error: empty string');
|
|
}
|
|
|
|
var radix = opt_radix || 10;
|
|
if (radix < 2 || 36 < radix) {
|
|
throw Error('radix out of range: ' + radix);
|
|
}
|
|
|
|
if (str.charAt(0) == '-') {
|
|
return goog.math.Long.fromString(str.substring(1), radix).negate();
|
|
} else if (str.indexOf('-') >= 0) {
|
|
throw Error('number format error: interior "-" character: ' + str);
|
|
}
|
|
|
|
// Do several (8) digits each time through the loop, so as to
|
|
// minimize the calls to the very expensive emulated div.
|
|
var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 8));
|
|
|
|
var result = goog.math.Long.ZERO;
|
|
for (var i = 0; i < str.length; i += 8) {
|
|
var size = Math.min(8, str.length - i);
|
|
var value = parseInt(str.substring(i, i + size), radix);
|
|
if (size < 8) {
|
|
var power = goog.math.Long.fromNumber(Math.pow(radix, size));
|
|
result = result.multiply(power).add(goog.math.Long.fromNumber(value));
|
|
} else {
|
|
result = result.multiply(radixToPower);
|
|
result = result.add(goog.math.Long.fromNumber(value));
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
|
|
|
|
// NOTE: the compiler should inline these constant values below and then remove
|
|
// these variables, so there should be no runtime penalty for these.
|
|
|
|
|
|
/**
|
|
* Number used repeated below in calculations. This must appear before the
|
|
* first call to any from* function below.
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_16_DBL_ = 1 << 16;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_24_DBL_ = 1 << 24;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_32_DBL_ =
|
|
goog.math.Long.TWO_PWR_16_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_31_DBL_ =
|
|
goog.math.Long.TWO_PWR_32_DBL_ / 2;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_48_DBL_ =
|
|
goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_64_DBL_ =
|
|
goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_32_DBL_;
|
|
|
|
|
|
/**
|
|
* @type {number}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_63_DBL_ =
|
|
goog.math.Long.TWO_PWR_64_DBL_ / 2;
|
|
|
|
|
|
/** @type {!goog.math.Long} */
|
|
goog.math.Long.ZERO = goog.math.Long.fromInt(0);
|
|
|
|
|
|
/** @type {!goog.math.Long} */
|
|
goog.math.Long.ONE = goog.math.Long.fromInt(1);
|
|
|
|
|
|
/** @type {!goog.math.Long} */
|
|
goog.math.Long.NEG_ONE = goog.math.Long.fromInt(-1);
|
|
|
|
|
|
/** @type {!goog.math.Long} */
|
|
goog.math.Long.MAX_VALUE =
|
|
goog.math.Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0);
|
|
|
|
|
|
/** @type {!goog.math.Long} */
|
|
goog.math.Long.MIN_VALUE = goog.math.Long.fromBits(0, 0x80000000 | 0);
|
|
|
|
|
|
/**
|
|
* @type {!goog.math.Long}
|
|
* @private
|
|
*/
|
|
goog.math.Long.TWO_PWR_24_ = goog.math.Long.fromInt(1 << 24);
|
|
|
|
|
|
/** @return {number} The value, assuming it is a 32-bit integer. */
|
|
goog.math.Long.prototype.toInt = function() {
|
|
return this.low_;
|
|
};
|
|
|
|
|
|
/** @return {number} The closest floating-point representation to this value. */
|
|
goog.math.Long.prototype.toNumber = function() {
|
|
return this.high_ * goog.math.Long.TWO_PWR_32_DBL_ +
|
|
this.getLowBitsUnsigned();
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {number=} opt_radix The radix in which the text should be written.
|
|
* @return {string} The textual representation of this value.
|
|
*/
|
|
goog.math.Long.prototype.toString = function(opt_radix) {
|
|
var radix = opt_radix || 10;
|
|
if (radix < 2 || 36 < radix) {
|
|
throw Error('radix out of range: ' + radix);
|
|
}
|
|
|
|
if (this.isZero()) {
|
|
return '0';
|
|
}
|
|
|
|
if (this.isNegative()) {
|
|
if (this.equals(goog.math.Long.MIN_VALUE)) {
|
|
// We need to change the Long value before it can be negated, so we remove
|
|
// the bottom-most digit in this base and then recurse to do the rest.
|
|
var radixLong = goog.math.Long.fromNumber(radix);
|
|
var div = this.div(radixLong);
|
|
var rem = div.multiply(radixLong).subtract(this);
|
|
return div.toString(radix) + rem.toInt().toString(radix);
|
|
} else {
|
|
return '-' + this.negate().toString(radix);
|
|
}
|
|
}
|
|
|
|
// Do several (6) digits each time through the loop, so as to
|
|
// minimize the calls to the very expensive emulated div.
|
|
var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 6));
|
|
|
|
var rem = this;
|
|
var result = '';
|
|
while (true) {
|
|
var remDiv = rem.div(radixToPower);
|
|
var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();
|
|
var digits = intval.toString(radix);
|
|
|
|
rem = remDiv;
|
|
if (rem.isZero()) {
|
|
return digits + result;
|
|
} else {
|
|
while (digits.length < 6) {
|
|
digits = '0' + digits;
|
|
}
|
|
result = '' + digits + result;
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
/** @return {number} The high 32-bits as a signed value. */
|
|
goog.math.Long.prototype.getHighBits = function() {
|
|
return this.high_;
|
|
};
|
|
|
|
|
|
/** @return {number} The low 32-bits as a signed value. */
|
|
goog.math.Long.prototype.getLowBits = function() {
|
|
return this.low_;
|
|
};
|
|
|
|
|
|
/** @return {number} The low 32-bits as an unsigned value. */
|
|
goog.math.Long.prototype.getLowBitsUnsigned = function() {
|
|
return (this.low_ >= 0) ?
|
|
this.low_ : goog.math.Long.TWO_PWR_32_DBL_ + this.low_;
|
|
};
|
|
|
|
|
|
/**
|
|
* @return {number} Returns the number of bits needed to represent the absolute
|
|
* value of this Long.
|
|
*/
|
|
goog.math.Long.prototype.getNumBitsAbs = function() {
|
|
if (this.isNegative()) {
|
|
if (this.equals(goog.math.Long.MIN_VALUE)) {
|
|
return 64;
|
|
} else {
|
|
return this.negate().getNumBitsAbs();
|
|
}
|
|
} else {
|
|
var val = this.high_ != 0 ? this.high_ : this.low_;
|
|
for (var bit = 31; bit > 0; bit--) {
|
|
if ((val & (1 << bit)) != 0) {
|
|
break;
|
|
}
|
|
}
|
|
return this.high_ != 0 ? bit + 33 : bit + 1;
|
|
}
|
|
};
|
|
|
|
|
|
/** @return {boolean} Whether this value is zero. */
|
|
goog.math.Long.prototype.isZero = function() {
|
|
return this.high_ == 0 && this.low_ == 0;
|
|
};
|
|
|
|
|
|
/** @return {boolean} Whether this value is negative. */
|
|
goog.math.Long.prototype.isNegative = function() {
|
|
return this.high_ < 0;
|
|
};
|
|
|
|
|
|
/** @return {boolean} Whether this value is odd. */
|
|
goog.math.Long.prototype.isOdd = function() {
|
|
return (this.low_ & 1) == 1;
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {boolean} Whether this Long equals the other.
|
|
*/
|
|
goog.math.Long.prototype.equals = function(other) {
|
|
return (this.high_ == other.high_) && (this.low_ == other.low_);
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {boolean} Whether this Long does not equal the other.
|
|
*/
|
|
goog.math.Long.prototype.notEquals = function(other) {
|
|
return (this.high_ != other.high_) || (this.low_ != other.low_);
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {boolean} Whether this Long is less than the other.
|
|
*/
|
|
goog.math.Long.prototype.lessThan = function(other) {
|
|
return this.compare(other) < 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {boolean} Whether this Long is less than or equal to the other.
|
|
*/
|
|
goog.math.Long.prototype.lessThanOrEqual = function(other) {
|
|
return this.compare(other) <= 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {boolean} Whether this Long is greater than the other.
|
|
*/
|
|
goog.math.Long.prototype.greaterThan = function(other) {
|
|
return this.compare(other) > 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {boolean} Whether this Long is greater than or equal to the other.
|
|
*/
|
|
goog.math.Long.prototype.greaterThanOrEqual = function(other) {
|
|
return this.compare(other) >= 0;
|
|
};
|
|
|
|
|
|
/**
|
|
* Compares this Long with the given one.
|
|
* @param {goog.math.Long} other Long to compare against.
|
|
* @return {number} 0 if they are the same, 1 if the this is greater, and -1
|
|
* if the given one is greater.
|
|
*/
|
|
goog.math.Long.prototype.compare = function(other) {
|
|
if (this.equals(other)) {
|
|
return 0;
|
|
}
|
|
|
|
var thisNeg = this.isNegative();
|
|
var otherNeg = other.isNegative();
|
|
if (thisNeg && !otherNeg) {
|
|
return -1;
|
|
}
|
|
if (!thisNeg && otherNeg) {
|
|
return 1;
|
|
}
|
|
|
|
// at this point, the signs are the same, so subtraction will not overflow
|
|
if (this.subtract(other).isNegative()) {
|
|
return -1;
|
|
} else {
|
|
return 1;
|
|
}
|
|
};
|
|
|
|
|
|
/** @return {!goog.math.Long} The negation of this value. */
|
|
goog.math.Long.prototype.negate = function() {
|
|
if (this.equals(goog.math.Long.MIN_VALUE)) {
|
|
return goog.math.Long.MIN_VALUE;
|
|
} else {
|
|
return this.not().add(goog.math.Long.ONE);
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the sum of this and the given Long.
|
|
* @param {goog.math.Long} other Long to add to this one.
|
|
* @return {!goog.math.Long} The sum of this and the given Long.
|
|
*/
|
|
goog.math.Long.prototype.add = function(other) {
|
|
// Divide each number into 4 chunks of 16 bits, and then sum the chunks.
|
|
|
|
var a48 = this.high_ >>> 16;
|
|
var a32 = this.high_ & 0xFFFF;
|
|
var a16 = this.low_ >>> 16;
|
|
var a00 = this.low_ & 0xFFFF;
|
|
|
|
var b48 = other.high_ >>> 16;
|
|
var b32 = other.high_ & 0xFFFF;
|
|
var b16 = other.low_ >>> 16;
|
|
var b00 = other.low_ & 0xFFFF;
|
|
|
|
var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
|
|
c00 += a00 + b00;
|
|
c16 += c00 >>> 16;
|
|
c00 &= 0xFFFF;
|
|
c16 += a16 + b16;
|
|
c32 += c16 >>> 16;
|
|
c16 &= 0xFFFF;
|
|
c32 += a32 + b32;
|
|
c48 += c32 >>> 16;
|
|
c32 &= 0xFFFF;
|
|
c48 += a48 + b48;
|
|
c48 &= 0xFFFF;
|
|
return goog.math.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the difference of this and the given Long.
|
|
* @param {goog.math.Long} other Long to subtract from this.
|
|
* @return {!goog.math.Long} The difference of this and the given Long.
|
|
*/
|
|
goog.math.Long.prototype.subtract = function(other) {
|
|
return this.add(other.negate());
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the product of this and the given long.
|
|
* @param {goog.math.Long} other Long to multiply with this.
|
|
* @return {!goog.math.Long} The product of this and the other.
|
|
*/
|
|
goog.math.Long.prototype.multiply = function(other) {
|
|
if (this.isZero()) {
|
|
return goog.math.Long.ZERO;
|
|
} else if (other.isZero()) {
|
|
return goog.math.Long.ZERO;
|
|
}
|
|
|
|
if (this.equals(goog.math.Long.MIN_VALUE)) {
|
|
return other.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO;
|
|
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
|
|
return this.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO;
|
|
}
|
|
|
|
if (this.isNegative()) {
|
|
if (other.isNegative()) {
|
|
return this.negate().multiply(other.negate());
|
|
} else {
|
|
return this.negate().multiply(other).negate();
|
|
}
|
|
} else if (other.isNegative()) {
|
|
return this.multiply(other.negate()).negate();
|
|
}
|
|
|
|
// If both longs are small, use float multiplication
|
|
if (this.lessThan(goog.math.Long.TWO_PWR_24_) &&
|
|
other.lessThan(goog.math.Long.TWO_PWR_24_)) {
|
|
return goog.math.Long.fromNumber(this.toNumber() * other.toNumber());
|
|
}
|
|
|
|
// Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.
|
|
// We can skip products that would overflow.
|
|
|
|
var a48 = this.high_ >>> 16;
|
|
var a32 = this.high_ & 0xFFFF;
|
|
var a16 = this.low_ >>> 16;
|
|
var a00 = this.low_ & 0xFFFF;
|
|
|
|
var b48 = other.high_ >>> 16;
|
|
var b32 = other.high_ & 0xFFFF;
|
|
var b16 = other.low_ >>> 16;
|
|
var b00 = other.low_ & 0xFFFF;
|
|
|
|
var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
|
|
c00 += a00 * b00;
|
|
c16 += c00 >>> 16;
|
|
c00 &= 0xFFFF;
|
|
c16 += a16 * b00;
|
|
c32 += c16 >>> 16;
|
|
c16 &= 0xFFFF;
|
|
c16 += a00 * b16;
|
|
c32 += c16 >>> 16;
|
|
c16 &= 0xFFFF;
|
|
c32 += a32 * b00;
|
|
c48 += c32 >>> 16;
|
|
c32 &= 0xFFFF;
|
|
c32 += a16 * b16;
|
|
c48 += c32 >>> 16;
|
|
c32 &= 0xFFFF;
|
|
c32 += a00 * b32;
|
|
c48 += c32 >>> 16;
|
|
c32 &= 0xFFFF;
|
|
c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
|
|
c48 &= 0xFFFF;
|
|
return goog.math.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns this Long divided by the given one.
|
|
* @param {goog.math.Long} other Long by which to divide.
|
|
* @return {!goog.math.Long} This Long divided by the given one.
|
|
*/
|
|
goog.math.Long.prototype.div = function(other) {
|
|
if (other.isZero()) {
|
|
throw Error('division by zero');
|
|
} else if (this.isZero()) {
|
|
return goog.math.Long.ZERO;
|
|
}
|
|
|
|
if (this.equals(goog.math.Long.MIN_VALUE)) {
|
|
if (other.equals(goog.math.Long.ONE) ||
|
|
other.equals(goog.math.Long.NEG_ONE)) {
|
|
return goog.math.Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE
|
|
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
|
|
return goog.math.Long.ONE;
|
|
} else {
|
|
// At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.
|
|
var halfThis = this.shiftRight(1);
|
|
var approx = halfThis.div(other).shiftLeft(1);
|
|
if (approx.equals(goog.math.Long.ZERO)) {
|
|
return other.isNegative() ? goog.math.Long.ONE : goog.math.Long.NEG_ONE;
|
|
} else {
|
|
var rem = this.subtract(other.multiply(approx));
|
|
var result = approx.add(rem.div(other));
|
|
return result;
|
|
}
|
|
}
|
|
} else if (other.equals(goog.math.Long.MIN_VALUE)) {
|
|
return goog.math.Long.ZERO;
|
|
}
|
|
|
|
if (this.isNegative()) {
|
|
if (other.isNegative()) {
|
|
return this.negate().div(other.negate());
|
|
} else {
|
|
return this.negate().div(other).negate();
|
|
}
|
|
} else if (other.isNegative()) {
|
|
return this.div(other.negate()).negate();
|
|
}
|
|
|
|
// Repeat the following until the remainder is less than other: find a
|
|
// floating-point that approximates remainder / other *from below*, add this
|
|
// into the result, and subtract it from the remainder. It is critical that
|
|
// the approximate value is less than or equal to the real value so that the
|
|
// remainder never becomes negative.
|
|
var res = goog.math.Long.ZERO;
|
|
var rem = this;
|
|
while (rem.greaterThanOrEqual(other)) {
|
|
// Approximate the result of division. This may be a little greater or
|
|
// smaller than the actual value.
|
|
var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));
|
|
|
|
// We will tweak the approximate result by changing it in the 48-th digit or
|
|
// the smallest non-fractional digit, whichever is larger.
|
|
var log2 = Math.ceil(Math.log(approx) / Math.LN2);
|
|
var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48);
|
|
|
|
// Decrease the approximation until it is smaller than the remainder. Note
|
|
// that if it is too large, the product overflows and is negative.
|
|
var approxRes = goog.math.Long.fromNumber(approx);
|
|
var approxRem = approxRes.multiply(other);
|
|
while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
|
|
approx -= delta;
|
|
approxRes = goog.math.Long.fromNumber(approx);
|
|
approxRem = approxRes.multiply(other);
|
|
}
|
|
|
|
// We know the answer can't be zero... and actually, zero would cause
|
|
// infinite recursion since we would make no progress.
|
|
if (approxRes.isZero()) {
|
|
approxRes = goog.math.Long.ONE;
|
|
}
|
|
|
|
res = res.add(approxRes);
|
|
rem = rem.subtract(approxRem);
|
|
}
|
|
return res;
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns this Long modulo the given one.
|
|
* @param {goog.math.Long} other Long by which to mod.
|
|
* @return {!goog.math.Long} This Long modulo the given one.
|
|
*/
|
|
goog.math.Long.prototype.modulo = function(other) {
|
|
return this.subtract(this.div(other).multiply(other));
|
|
};
|
|
|
|
|
|
/** @return {!goog.math.Long} The bitwise-NOT of this value. */
|
|
goog.math.Long.prototype.not = function() {
|
|
return goog.math.Long.fromBits(~this.low_, ~this.high_);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the bitwise-AND of this Long and the given one.
|
|
* @param {goog.math.Long} other The Long with which to AND.
|
|
* @return {!goog.math.Long} The bitwise-AND of this and the other.
|
|
*/
|
|
goog.math.Long.prototype.and = function(other) {
|
|
return goog.math.Long.fromBits(this.low_ & other.low_,
|
|
this.high_ & other.high_);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the bitwise-OR of this Long and the given one.
|
|
* @param {goog.math.Long} other The Long with which to OR.
|
|
* @return {!goog.math.Long} The bitwise-OR of this and the other.
|
|
*/
|
|
goog.math.Long.prototype.or = function(other) {
|
|
return goog.math.Long.fromBits(this.low_ | other.low_,
|
|
this.high_ | other.high_);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns the bitwise-XOR of this Long and the given one.
|
|
* @param {goog.math.Long} other The Long with which to XOR.
|
|
* @return {!goog.math.Long} The bitwise-XOR of this and the other.
|
|
*/
|
|
goog.math.Long.prototype.xor = function(other) {
|
|
return goog.math.Long.fromBits(this.low_ ^ other.low_,
|
|
this.high_ ^ other.high_);
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns this Long with bits shifted to the left by the given amount.
|
|
* @param {number} numBits The number of bits by which to shift.
|
|
* @return {!goog.math.Long} This shifted to the left by the given amount.
|
|
*/
|
|
goog.math.Long.prototype.shiftLeft = function(numBits) {
|
|
numBits &= 63;
|
|
if (numBits == 0) {
|
|
return this;
|
|
} else {
|
|
var low = this.low_;
|
|
if (numBits < 32) {
|
|
var high = this.high_;
|
|
return goog.math.Long.fromBits(
|
|
low << numBits,
|
|
(high << numBits) | (low >>> (32 - numBits)));
|
|
} else {
|
|
return goog.math.Long.fromBits(0, low << (numBits - 32));
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns this Long with bits shifted to the right by the given amount.
|
|
* @param {number} numBits The number of bits by which to shift.
|
|
* @return {!goog.math.Long} This shifted to the right by the given amount.
|
|
*/
|
|
goog.math.Long.prototype.shiftRight = function(numBits) {
|
|
numBits &= 63;
|
|
if (numBits == 0) {
|
|
return this;
|
|
} else {
|
|
var high = this.high_;
|
|
if (numBits < 32) {
|
|
var low = this.low_;
|
|
return goog.math.Long.fromBits(
|
|
(low >>> numBits) | (high << (32 - numBits)),
|
|
high >> numBits);
|
|
} else {
|
|
return goog.math.Long.fromBits(
|
|
high >> (numBits - 32),
|
|
high >= 0 ? 0 : -1);
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns this Long with bits shifted to the right by the given amount, with
|
|
* the new top bits matching the current sign bit.
|
|
* @param {number} numBits The number of bits by which to shift.
|
|
* @return {!goog.math.Long} This shifted to the right by the given amount, with
|
|
* zeros placed into the new leading bits.
|
|
*/
|
|
goog.math.Long.prototype.shiftRightUnsigned = function(numBits) {
|
|
numBits &= 63;
|
|
if (numBits == 0) {
|
|
return this;
|
|
} else {
|
|
var high = this.high_;
|
|
if (numBits < 32) {
|
|
var low = this.low_;
|
|
return goog.math.Long.fromBits(
|
|
(low >>> numBits) | (high << (32 - numBits)),
|
|
high >>> numBits);
|
|
} else if (numBits == 32) {
|
|
return goog.math.Long.fromBits(high, 0);
|
|
} else {
|
|
return goog.math.Long.fromBits(high >>> (numBits - 32), 0);
|
|
}
|
|
}
|
|
};
|
|
|
|
//======= begin jsbn =======
|
|
|
|
var navigator = { appName: 'Modern Browser' }; // polyfill a little
|
|
|
|
// Copyright (c) 2005 Tom Wu
|
|
// All Rights Reserved.
|
|
// http://www-cs-students.stanford.edu/~tjw/jsbn/
|
|
|
|
/*
|
|
* Copyright (c) 2003-2005 Tom Wu
|
|
* All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the
|
|
* "Software"), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
* the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be
|
|
* included in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
|
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
* IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
|
|
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
|
|
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
|
|
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
|
|
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*
|
|
* In addition, the following condition applies:
|
|
*
|
|
* All redistributions must retain an intact copy of this copyright notice
|
|
* and disclaimer.
|
|
*/
|
|
|
|
// Basic JavaScript BN library - subset useful for RSA encryption.
|
|
|
|
// Bits per digit
|
|
var dbits;
|
|
|
|
// JavaScript engine analysis
|
|
var canary = 0xdeadbeefcafe;
|
|
var j_lm = ((canary&0xffffff)==0xefcafe);
|
|
|
|
// (public) Constructor
|
|
function BigInteger(a,b,c) {
|
|
if(a != null)
|
|
if("number" == typeof a) this.fromNumber(a,b,c);
|
|
else if(b == null && "string" != typeof a) this.fromString(a,256);
|
|
else this.fromString(a,b);
|
|
}
|
|
|
|
// return new, unset BigInteger
|
|
function nbi() { return new BigInteger(null); }
|
|
|
|
// am: Compute w_j += (x*this_i), propagate carries,
|
|
// c is initial carry, returns final carry.
|
|
// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
|
|
// We need to select the fastest one that works in this environment.
|
|
|
|
// am1: use a single mult and divide to get the high bits,
|
|
// max digit bits should be 26 because
|
|
// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
|
|
function am1(i,x,w,j,c,n) {
|
|
while(--n >= 0) {
|
|
var v = x*this[i++]+w[j]+c;
|
|
c = Math.floor(v/0x4000000);
|
|
w[j++] = v&0x3ffffff;
|
|
}
|
|
return c;
|
|
}
|
|
// am2 avoids a big mult-and-extract completely.
|
|
// Max digit bits should be <= 30 because we do bitwise ops
|
|
// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
|
|
function am2(i,x,w,j,c,n) {
|
|
var xl = x&0x7fff, xh = x>>15;
|
|
while(--n >= 0) {
|
|
var l = this[i]&0x7fff;
|
|
var h = this[i++]>>15;
|
|
var m = xh*l+h*xl;
|
|
l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
|
|
c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
|
|
w[j++] = l&0x3fffffff;
|
|
}
|
|
return c;
|
|
}
|
|
// Alternately, set max digit bits to 28 since some
|
|
// browsers slow down when dealing with 32-bit numbers.
|
|
function am3(i,x,w,j,c,n) {
|
|
var xl = x&0x3fff, xh = x>>14;
|
|
while(--n >= 0) {
|
|
var l = this[i]&0x3fff;
|
|
var h = this[i++]>>14;
|
|
var m = xh*l+h*xl;
|
|
l = xl*l+((m&0x3fff)<<14)+w[j]+c;
|
|
c = (l>>28)+(m>>14)+xh*h;
|
|
w[j++] = l&0xfffffff;
|
|
}
|
|
return c;
|
|
}
|
|
if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
|
|
BigInteger.prototype.am = am2;
|
|
dbits = 30;
|
|
}
|
|
else if(j_lm && (navigator.appName != "Netscape")) {
|
|
BigInteger.prototype.am = am1;
|
|
dbits = 26;
|
|
}
|
|
else { // Mozilla/Netscape seems to prefer am3
|
|
BigInteger.prototype.am = am3;
|
|
dbits = 28;
|
|
}
|
|
|
|
BigInteger.prototype.DB = dbits;
|
|
BigInteger.prototype.DM = ((1<<dbits)-1);
|
|
BigInteger.prototype.DV = (1<<dbits);
|
|
|
|
var BI_FP = 52;
|
|
BigInteger.prototype.FV = Math.pow(2,BI_FP);
|
|
BigInteger.prototype.F1 = BI_FP-dbits;
|
|
BigInteger.prototype.F2 = 2*dbits-BI_FP;
|
|
|
|
// Digit conversions
|
|
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
|
|
var BI_RC = new Array();
|
|
var rr,vv;
|
|
rr = "0".charCodeAt(0);
|
|
for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
|
|
rr = "a".charCodeAt(0);
|
|
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
|
|
rr = "A".charCodeAt(0);
|
|
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
|
|
|
|
function int2char(n) { return BI_RM.charAt(n); }
|
|
function intAt(s,i) {
|
|
var c = BI_RC[s.charCodeAt(i)];
|
|
return (c==null)?-1:c;
|
|
}
|
|
|
|
// (protected) copy this to r
|
|
function bnpCopyTo(r) {
|
|
for(var i = this.t-1; i >= 0; --i) r[i] = this[i];
|
|
r.t = this.t;
|
|
r.s = this.s;
|
|
}
|
|
|
|
// (protected) set from integer value x, -DV <= x < DV
|
|
function bnpFromInt(x) {
|
|
this.t = 1;
|
|
this.s = (x<0)?-1:0;
|
|
if(x > 0) this[0] = x;
|
|
else if(x < -1) this[0] = x+DV;
|
|
else this.t = 0;
|
|
}
|
|
|
|
// return bigint initialized to value
|
|
function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
|
|
|
|
// (protected) set from string and radix
|
|
function bnpFromString(s,b) {
|
|
var k;
|
|
if(b == 16) k = 4;
|
|
else if(b == 8) k = 3;
|
|
else if(b == 256) k = 8; // byte array
|
|
else if(b == 2) k = 1;
|
|
else if(b == 32) k = 5;
|
|
else if(b == 4) k = 2;
|
|
else { this.fromRadix(s,b); return; }
|
|
this.t = 0;
|
|
this.s = 0;
|
|
var i = s.length, mi = false, sh = 0;
|
|
while(--i >= 0) {
|
|
var x = (k==8)?s[i]&0xff:intAt(s,i);
|
|
if(x < 0) {
|
|
if(s.charAt(i) == "-") mi = true;
|
|
continue;
|
|
}
|
|
mi = false;
|
|
if(sh == 0)
|
|
this[this.t++] = x;
|
|
else if(sh+k > this.DB) {
|
|
this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;
|
|
this[this.t++] = (x>>(this.DB-sh));
|
|
}
|
|
else
|
|
this[this.t-1] |= x<<sh;
|
|
sh += k;
|
|
if(sh >= this.DB) sh -= this.DB;
|
|
}
|
|
if(k == 8 && (s[0]&0x80) != 0) {
|
|
this.s = -1;
|
|
if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;
|
|
}
|
|
this.clamp();
|
|
if(mi) BigInteger.ZERO.subTo(this,this);
|
|
}
|
|
|
|
// (protected) clamp off excess high words
|
|
function bnpClamp() {
|
|
var c = this.s&this.DM;
|
|
while(this.t > 0 && this[this.t-1] == c) --this.t;
|
|
}
|
|
|
|
// (public) return string representation in given radix
|
|
function bnToString(b) {
|
|
if(this.s < 0) return "-"+this.negate().toString(b);
|
|
var k;
|
|
if(b == 16) k = 4;
|
|
else if(b == 8) k = 3;
|
|
else if(b == 2) k = 1;
|
|
else if(b == 32) k = 5;
|
|
else if(b == 4) k = 2;
|
|
else return this.toRadix(b);
|
|
var km = (1<<k)-1, d, m = false, r = "", i = this.t;
|
|
var p = this.DB-(i*this.DB)%k;
|
|
if(i-- > 0) {
|
|
if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }
|
|
while(i >= 0) {
|
|
if(p < k) {
|
|
d = (this[i]&((1<<p)-1))<<(k-p);
|
|
d |= this[--i]>>(p+=this.DB-k);
|
|
}
|
|
else {
|
|
d = (this[i]>>(p-=k))&km;
|
|
if(p <= 0) { p += this.DB; --i; }
|
|
}
|
|
if(d > 0) m = true;
|
|
if(m) r += int2char(d);
|
|
}
|
|
}
|
|
return m?r:"0";
|
|
}
|
|
|
|
// (public) -this
|
|
function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
|
|
|
|
// (public) |this|
|
|
function bnAbs() { return (this.s<0)?this.negate():this; }
|
|
|
|
// (public) return + if this > a, - if this < a, 0 if equal
|
|
function bnCompareTo(a) {
|
|
var r = this.s-a.s;
|
|
if(r != 0) return r;
|
|
var i = this.t;
|
|
r = i-a.t;
|
|
if(r != 0) return (this.s<0)?-r:r;
|
|
while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
|
|
return 0;
|
|
}
|
|
|
|
// returns bit length of the integer x
|
|
function nbits(x) {
|
|
var r = 1, t;
|
|
if((t=x>>>16) != 0) { x = t; r += 16; }
|
|
if((t=x>>8) != 0) { x = t; r += 8; }
|
|
if((t=x>>4) != 0) { x = t; r += 4; }
|
|
if((t=x>>2) != 0) { x = t; r += 2; }
|
|
if((t=x>>1) != 0) { x = t; r += 1; }
|
|
return r;
|
|
}
|
|
|
|
// (public) return the number of bits in "this"
|
|
function bnBitLength() {
|
|
if(this.t <= 0) return 0;
|
|
return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
|
|
}
|
|
|
|
// (protected) r = this << n*DB
|
|
function bnpDLShiftTo(n,r) {
|
|
var i;
|
|
for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
|
|
for(i = n-1; i >= 0; --i) r[i] = 0;
|
|
r.t = this.t+n;
|
|
r.s = this.s;
|
|
}
|
|
|
|
// (protected) r = this >> n*DB
|
|
function bnpDRShiftTo(n,r) {
|
|
for(var i = n; i < this.t; ++i) r[i-n] = this[i];
|
|
r.t = Math.max(this.t-n,0);
|
|
r.s = this.s;
|
|
}
|
|
|
|
// (protected) r = this << n
|
|
function bnpLShiftTo(n,r) {
|
|
var bs = n%this.DB;
|
|
var cbs = this.DB-bs;
|
|
var bm = (1<<cbs)-1;
|
|
var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;
|
|
for(i = this.t-1; i >= 0; --i) {
|
|
r[i+ds+1] = (this[i]>>cbs)|c;
|
|
c = (this[i]&bm)<<bs;
|
|
}
|
|
for(i = ds-1; i >= 0; --i) r[i] = 0;
|
|
r[ds] = c;
|
|
r.t = this.t+ds+1;
|
|
r.s = this.s;
|
|
r.clamp();
|
|
}
|
|
|
|
// (protected) r = this >> n
|
|
function bnpRShiftTo(n,r) {
|
|
r.s = this.s;
|
|
var ds = Math.floor(n/this.DB);
|
|
if(ds >= this.t) { r.t = 0; return; }
|
|
var bs = n%this.DB;
|
|
var cbs = this.DB-bs;
|
|
var bm = (1<<bs)-1;
|
|
r[0] = this[ds]>>bs;
|
|
for(var i = ds+1; i < this.t; ++i) {
|
|
r[i-ds-1] |= (this[i]&bm)<<cbs;
|
|
r[i-ds] = this[i]>>bs;
|
|
}
|
|
if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;
|
|
r.t = this.t-ds;
|
|
r.clamp();
|
|
}
|
|
|
|
// (protected) r = this - a
|
|
function bnpSubTo(a,r) {
|
|
var i = 0, c = 0, m = Math.min(a.t,this.t);
|
|
while(i < m) {
|
|
c += this[i]-a[i];
|
|
r[i++] = c&this.DM;
|
|
c >>= this.DB;
|
|
}
|
|
if(a.t < this.t) {
|
|
c -= a.s;
|
|
while(i < this.t) {
|
|
c += this[i];
|
|
r[i++] = c&this.DM;
|
|
c >>= this.DB;
|
|
}
|
|
c += this.s;
|
|
}
|
|
else {
|
|
c += this.s;
|
|
while(i < a.t) {
|
|
c -= a[i];
|
|
r[i++] = c&this.DM;
|
|
c >>= this.DB;
|
|
}
|
|
c -= a.s;
|
|
}
|
|
r.s = (c<0)?-1:0;
|
|
if(c < -1) r[i++] = this.DV+c;
|
|
else if(c > 0) r[i++] = c;
|
|
r.t = i;
|
|
r.clamp();
|
|
}
|
|
|
|
// (protected) r = this * a, r != this,a (HAC 14.12)
|
|
// "this" should be the larger one if appropriate.
|
|
function bnpMultiplyTo(a,r) {
|
|
var x = this.abs(), y = a.abs();
|
|
var i = x.t;
|
|
r.t = i+y.t;
|
|
while(--i >= 0) r[i] = 0;
|
|
for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
|
|
r.s = 0;
|
|
r.clamp();
|
|
if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
|
|
}
|
|
|
|
// (protected) r = this^2, r != this (HAC 14.16)
|
|
function bnpSquareTo(r) {
|
|
var x = this.abs();
|
|
var i = r.t = 2*x.t;
|
|
while(--i >= 0) r[i] = 0;
|
|
for(i = 0; i < x.t-1; ++i) {
|
|
var c = x.am(i,x[i],r,2*i,0,1);
|
|
if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
|
|
r[i+x.t] -= x.DV;
|
|
r[i+x.t+1] = 1;
|
|
}
|
|
}
|
|
if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
|
|
r.s = 0;
|
|
r.clamp();
|
|
}
|
|
|
|
// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
|
|
// r != q, this != m. q or r may be null.
|
|
function bnpDivRemTo(m,q,r) {
|
|
var pm = m.abs();
|
|
if(pm.t <= 0) return;
|
|
var pt = this.abs();
|
|
if(pt.t < pm.t) {
|
|
if(q != null) q.fromInt(0);
|
|
if(r != null) this.copyTo(r);
|
|
return;
|
|
}
|
|
if(r == null) r = nbi();
|
|
var y = nbi(), ts = this.s, ms = m.s;
|
|
var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus
|
|
if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
|
|
else { pm.copyTo(y); pt.copyTo(r); }
|
|
var ys = y.t;
|
|
var y0 = y[ys-1];
|
|
if(y0 == 0) return;
|
|
var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);
|
|
var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;
|
|
var i = r.t, j = i-ys, t = (q==null)?nbi():q;
|
|
y.dlShiftTo(j,t);
|
|
if(r.compareTo(t) >= 0) {
|
|
r[r.t++] = 1;
|
|
r.subTo(t,r);
|
|
}
|
|
BigInteger.ONE.dlShiftTo(ys,t);
|
|
t.subTo(y,y); // "negative" y so we can replace sub with am later
|
|
while(y.t < ys) y[y.t++] = 0;
|
|
while(--j >= 0) {
|
|
// Estimate quotient digit
|
|
var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
|
|
if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
|
|
y.dlShiftTo(j,t);
|
|
r.subTo(t,r);
|
|
while(r[i] < --qd) r.subTo(t,r);
|
|
}
|
|
}
|
|
if(q != null) {
|
|
r.drShiftTo(ys,q);
|
|
if(ts != ms) BigInteger.ZERO.subTo(q,q);
|
|
}
|
|
r.t = ys;
|
|
r.clamp();
|
|
if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
|
|
if(ts < 0) BigInteger.ZERO.subTo(r,r);
|
|
}
|
|
|
|
// (public) this mod a
|
|
function bnMod(a) {
|
|
var r = nbi();
|
|
this.abs().divRemTo(a,null,r);
|
|
if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
|
|
return r;
|
|
}
|
|
|
|
// Modular reduction using "classic" algorithm
|
|
function Classic(m) { this.m = m; }
|
|
function cConvert(x) {
|
|
if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
|
|
else return x;
|
|
}
|
|
function cRevert(x) { return x; }
|
|
function cReduce(x) { x.divRemTo(this.m,null,x); }
|
|
function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
|
|
function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
|
|
|
|
Classic.prototype.convert = cConvert;
|
|
Classic.prototype.revert = cRevert;
|
|
Classic.prototype.reduce = cReduce;
|
|
Classic.prototype.mulTo = cMulTo;
|
|
Classic.prototype.sqrTo = cSqrTo;
|
|
|
|
// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
|
|
// justification:
|
|
// xy == 1 (mod m)
|
|
// xy = 1+km
|
|
// xy(2-xy) = (1+km)(1-km)
|
|
// x[y(2-xy)] = 1-k^2m^2
|
|
// x[y(2-xy)] == 1 (mod m^2)
|
|
// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
|
|
// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
|
|
// JS multiply "overflows" differently from C/C++, so care is needed here.
|
|
function bnpInvDigit() {
|
|
if(this.t < 1) return 0;
|
|
var x = this[0];
|
|
if((x&1) == 0) return 0;
|
|
var y = x&3; // y == 1/x mod 2^2
|
|
y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
|
|
y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
|
|
y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
|
|
// last step - calculate inverse mod DV directly;
|
|
// assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
|
|
y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits
|
|
// we really want the negative inverse, and -DV < y < DV
|
|
return (y>0)?this.DV-y:-y;
|
|
}
|
|
|
|
// Montgomery reduction
|
|
function Montgomery(m) {
|
|
this.m = m;
|
|
this.mp = m.invDigit();
|
|
this.mpl = this.mp&0x7fff;
|
|
this.mph = this.mp>>15;
|
|
this.um = (1<<(m.DB-15))-1;
|
|
this.mt2 = 2*m.t;
|
|
}
|
|
|
|
// xR mod m
|
|
function montConvert(x) {
|
|
var r = nbi();
|
|
x.abs().dlShiftTo(this.m.t,r);
|
|
r.divRemTo(this.m,null,r);
|
|
if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
|
|
return r;
|
|
}
|
|
|
|
// x/R mod m
|
|
function montRevert(x) {
|
|
var r = nbi();
|
|
x.copyTo(r);
|
|
this.reduce(r);
|
|
return r;
|
|
}
|
|
|
|
// x = x/R mod m (HAC 14.32)
|
|
function montReduce(x) {
|
|
while(x.t <= this.mt2) // pad x so am has enough room later
|
|
x[x.t++] = 0;
|
|
for(var i = 0; i < this.m.t; ++i) {
|
|
// faster way of calculating u0 = x[i]*mp mod DV
|
|
var j = x[i]&0x7fff;
|
|
var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
|
|
// use am to combine the multiply-shift-add into one call
|
|
j = i+this.m.t;
|
|
x[j] += this.m.am(0,u0,x,i,0,this.m.t);
|
|
// propagate carry
|
|
while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
|
|
}
|
|
x.clamp();
|
|
x.drShiftTo(this.m.t,x);
|
|
if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
|
|
}
|
|
|
|
// r = "x^2/R mod m"; x != r
|
|
function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
|
|
|
|
// r = "xy/R mod m"; x,y != r
|
|
function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
|
|
|
|
Montgomery.prototype.convert = montConvert;
|
|
Montgomery.prototype.revert = montRevert;
|
|
Montgomery.prototype.reduce = montReduce;
|
|
Montgomery.prototype.mulTo = montMulTo;
|
|
Montgomery.prototype.sqrTo = montSqrTo;
|
|
|
|
// (protected) true iff this is even
|
|
function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }
|
|
|
|
// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
|
|
function bnpExp(e,z) {
|
|
if(e > 0xffffffff || e < 1) return BigInteger.ONE;
|
|
var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
|
|
g.copyTo(r);
|
|
while(--i >= 0) {
|
|
z.sqrTo(r,r2);
|
|
if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
|
|
else { var t = r; r = r2; r2 = t; }
|
|
}
|
|
return z.revert(r);
|
|
}
|
|
|
|
// (public) this^e % m, 0 <= e < 2^32
|
|
function bnModPowInt(e,m) {
|
|
var z;
|
|
if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
|
|
return this.exp(e,z);
|
|
}
|
|
|
|
// protected
|
|
BigInteger.prototype.copyTo = bnpCopyTo;
|
|
BigInteger.prototype.fromInt = bnpFromInt;
|
|
BigInteger.prototype.fromString = bnpFromString;
|
|
BigInteger.prototype.clamp = bnpClamp;
|
|
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
|
|
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
|
|
BigInteger.prototype.lShiftTo = bnpLShiftTo;
|
|
BigInteger.prototype.rShiftTo = bnpRShiftTo;
|
|
BigInteger.prototype.subTo = bnpSubTo;
|
|
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
|
|
BigInteger.prototype.squareTo = bnpSquareTo;
|
|
BigInteger.prototype.divRemTo = bnpDivRemTo;
|
|
BigInteger.prototype.invDigit = bnpInvDigit;
|
|
BigInteger.prototype.isEven = bnpIsEven;
|
|
BigInteger.prototype.exp = bnpExp;
|
|
|
|
// public
|
|
BigInteger.prototype.toString = bnToString;
|
|
BigInteger.prototype.negate = bnNegate;
|
|
BigInteger.prototype.abs = bnAbs;
|
|
BigInteger.prototype.compareTo = bnCompareTo;
|
|
BigInteger.prototype.bitLength = bnBitLength;
|
|
BigInteger.prototype.mod = bnMod;
|
|
BigInteger.prototype.modPowInt = bnModPowInt;
|
|
|
|
// "constants"
|
|
BigInteger.ZERO = nbv(0);
|
|
BigInteger.ONE = nbv(1);
|
|
|
|
// jsbn2 stuff
|
|
|
|
// (protected) convert from radix string
|
|
function bnpFromRadix(s,b) {
|
|
this.fromInt(0);
|
|
if(b == null) b = 10;
|
|
var cs = this.chunkSize(b);
|
|
var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
|
|
for(var i = 0; i < s.length; ++i) {
|
|
var x = intAt(s,i);
|
|
if(x < 0) {
|
|
if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
|
|
continue;
|
|
}
|
|
w = b*w+x;
|
|
if(++j >= cs) {
|
|
this.dMultiply(d);
|
|
this.dAddOffset(w,0);
|
|
j = 0;
|
|
w = 0;
|
|
}
|
|
}
|
|
if(j > 0) {
|
|
this.dMultiply(Math.pow(b,j));
|
|
this.dAddOffset(w,0);
|
|
}
|
|
if(mi) BigInteger.ZERO.subTo(this,this);
|
|
}
|
|
|
|
// (protected) return x s.t. r^x < DV
|
|
function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }
|
|
|
|
// (public) 0 if this == 0, 1 if this > 0
|
|
function bnSigNum() {
|
|
if(this.s < 0) return -1;
|
|
else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
|
|
else return 1;
|
|
}
|
|
|
|
// (protected) this *= n, this >= 0, 1 < n < DV
|
|
function bnpDMultiply(n) {
|
|
this[this.t] = this.am(0,n-1,this,0,0,this.t);
|
|
++this.t;
|
|
this.clamp();
|
|
}
|
|
|
|
// (protected) this += n << w words, this >= 0
|
|
function bnpDAddOffset(n,w) {
|
|
if(n == 0) return;
|
|
while(this.t <= w) this[this.t++] = 0;
|
|
this[w] += n;
|
|
while(this[w] >= this.DV) {
|
|
this[w] -= this.DV;
|
|
if(++w >= this.t) this[this.t++] = 0;
|
|
++this[w];
|
|
}
|
|
}
|
|
|
|
// (protected) convert to radix string
|
|
function bnpToRadix(b) {
|
|
if(b == null) b = 10;
|
|
if(this.signum() == 0 || b < 2 || b > 36) return "0";
|
|
var cs = this.chunkSize(b);
|
|
var a = Math.pow(b,cs);
|
|
var d = nbv(a), y = nbi(), z = nbi(), r = "";
|
|
this.divRemTo(d,y,z);
|
|
while(y.signum() > 0) {
|
|
r = (a+z.intValue()).toString(b).substr(1) + r;
|
|
y.divRemTo(d,y,z);
|
|
}
|
|
return z.intValue().toString(b) + r;
|
|
}
|
|
|
|
// (public) return value as integer
|
|
function bnIntValue() {
|
|
if(this.s < 0) {
|
|
if(this.t == 1) return this[0]-this.DV;
|
|
else if(this.t == 0) return -1;
|
|
}
|
|
else if(this.t == 1) return this[0];
|
|
else if(this.t == 0) return 0;
|
|
// assumes 16 < DB < 32
|
|
return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];
|
|
}
|
|
|
|
// (protected) r = this + a
|
|
function bnpAddTo(a,r) {
|
|
var i = 0, c = 0, m = Math.min(a.t,this.t);
|
|
while(i < m) {
|
|
c += this[i]+a[i];
|
|
r[i++] = c&this.DM;
|
|
c >>= this.DB;
|
|
}
|
|
if(a.t < this.t) {
|
|
c += a.s;
|
|
while(i < this.t) {
|
|
c += this[i];
|
|
r[i++] = c&this.DM;
|
|
c >>= this.DB;
|
|
}
|
|
c += this.s;
|
|
}
|
|
else {
|
|
c += this.s;
|
|
while(i < a.t) {
|
|
c += a[i];
|
|
r[i++] = c&this.DM;
|
|
c >>= this.DB;
|
|
}
|
|
c += a.s;
|
|
}
|
|
r.s = (c<0)?-1:0;
|
|
if(c > 0) r[i++] = c;
|
|
else if(c < -1) r[i++] = this.DV+c;
|
|
r.t = i;
|
|
r.clamp();
|
|
}
|
|
|
|
BigInteger.prototype.fromRadix = bnpFromRadix;
|
|
BigInteger.prototype.chunkSize = bnpChunkSize;
|
|
BigInteger.prototype.signum = bnSigNum;
|
|
BigInteger.prototype.dMultiply = bnpDMultiply;
|
|
BigInteger.prototype.dAddOffset = bnpDAddOffset;
|
|
BigInteger.prototype.toRadix = bnpToRadix;
|
|
BigInteger.prototype.intValue = bnIntValue;
|
|
BigInteger.prototype.addTo = bnpAddTo;
|
|
|
|
//======= end jsbn =======
|
|
|
|
// Emscripten wrapper
|
|
var Wrapper = {
|
|
abs: function(l, h) {
|
|
var x = new goog.math.Long(l, h);
|
|
var ret;
|
|
if (x.isNegative()) {
|
|
ret = x.negate();
|
|
} else {
|
|
ret = x;
|
|
}
|
|
HEAP32[tempDoublePtr>>2] = ret.low_;
|
|
HEAP32[tempDoublePtr+4>>2] = ret.high_;
|
|
},
|
|
ensureTemps: function() {
|
|
if (Wrapper.ensuredTemps) return;
|
|
Wrapper.ensuredTemps = true;
|
|
Wrapper.two32 = new BigInteger();
|
|
Wrapper.two32.fromString('4294967296', 10);
|
|
Wrapper.two64 = new BigInteger();
|
|
Wrapper.two64.fromString('18446744073709551616', 10);
|
|
Wrapper.temp1 = new BigInteger();
|
|
Wrapper.temp2 = new BigInteger();
|
|
},
|
|
lh2bignum: function(l, h) {
|
|
var a = new BigInteger();
|
|
a.fromString(h.toString(), 10);
|
|
var b = new BigInteger();
|
|
a.multiplyTo(Wrapper.two32, b);
|
|
var c = new BigInteger();
|
|
c.fromString(l.toString(), 10);
|
|
var d = new BigInteger();
|
|
c.addTo(b, d);
|
|
return d;
|
|
},
|
|
stringify: function(l, h, unsigned) {
|
|
var ret = new goog.math.Long(l, h).toString();
|
|
if (unsigned && ret[0] == '-') {
|
|
// unsign slowly using jsbn bignums
|
|
Wrapper.ensureTemps();
|
|
var bignum = new BigInteger();
|
|
bignum.fromString(ret, 10);
|
|
ret = new BigInteger();
|
|
Wrapper.two64.addTo(bignum, ret);
|
|
ret = ret.toString(10);
|
|
}
|
|
return ret;
|
|
},
|
|
fromString: function(str, base, min, max, unsigned) {
|
|
Wrapper.ensureTemps();
|
|
var bignum = new BigInteger();
|
|
bignum.fromString(str, base);
|
|
var bigmin = new BigInteger();
|
|
bigmin.fromString(min, 10);
|
|
var bigmax = new BigInteger();
|
|
bigmax.fromString(max, 10);
|
|
if (unsigned && bignum.compareTo(BigInteger.ZERO) < 0) {
|
|
var temp = new BigInteger();
|
|
bignum.addTo(Wrapper.two64, temp);
|
|
bignum = temp;
|
|
}
|
|
var error = false;
|
|
if (bignum.compareTo(bigmin) < 0) {
|
|
bignum = bigmin;
|
|
error = true;
|
|
} else if (bignum.compareTo(bigmax) > 0) {
|
|
bignum = bigmax;
|
|
error = true;
|
|
}
|
|
var ret = goog.math.Long.fromString(bignum.toString()); // min-max checks should have clamped this to a range goog.math.Long can handle well
|
|
HEAP32[tempDoublePtr>>2] = ret.low_;
|
|
HEAP32[tempDoublePtr+4>>2] = ret.high_;
|
|
if (error) throw 'range error';
|
|
}
|
|
};
|
|
return Wrapper;
|
|
})();
|
|
|
|
//======= end closure i64 code =======
|
|
|
|
|
|
|
|
// === Auto-generated postamble setup entry stuff ===
|
|
|
|
if (memoryInitializer) {
|
|
function applyData(data) {
|
|
HEAPU8.set(data, STATIC_BASE);
|
|
}
|
|
if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
|
|
applyData(Module['readBinary'](memoryInitializer));
|
|
} else {
|
|
addRunDependency('memory initializer');
|
|
Browser.asyncLoad(memoryInitializer, function(data) {
|
|
applyData(data);
|
|
removeRunDependency('memory initializer');
|
|
}, function(data) {
|
|
throw 'could not load memory initializer ' + memoryInitializer;
|
|
});
|
|
}
|
|
}
|
|
|
|
function ExitStatus(status) {
|
|
this.name = "ExitStatus";
|
|
this.message = "Program terminated with exit(" + status + ")";
|
|
this.status = status;
|
|
};
|
|
ExitStatus.prototype = new Error();
|
|
ExitStatus.prototype.constructor = ExitStatus;
|
|
|
|
var initialStackTop;
|
|
var preloadStartTime = null;
|
|
var calledMain = false;
|
|
|
|
dependenciesFulfilled = function runCaller() {
|
|
// If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
|
|
if (!Module['calledRun'] && shouldRunNow) run();
|
|
if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
|
|
}
|
|
|
|
Module['callMain'] = Module.callMain = function callMain(args) {
|
|
assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)');
|
|
assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');
|
|
|
|
args = args || [];
|
|
|
|
if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
|
|
Module.printErr('preload time: ' + (Date.now() - preloadStartTime) + ' ms');
|
|
}
|
|
|
|
ensureInitRuntime();
|
|
|
|
var argc = args.length+1;
|
|
function pad() {
|
|
for (var i = 0; i < 4-1; i++) {
|
|
argv.push(0);
|
|
}
|
|
}
|
|
var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ];
|
|
pad();
|
|
for (var i = 0; i < argc-1; i = i + 1) {
|
|
argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL));
|
|
pad();
|
|
}
|
|
argv.push(0);
|
|
argv = allocate(argv, 'i32', ALLOC_NORMAL);
|
|
|
|
initialStackTop = STACKTOP;
|
|
|
|
try {
|
|
|
|
var ret = Module['_main'](argc, argv, 0);
|
|
|
|
|
|
// if we're not running an evented main loop, it's time to exit
|
|
if (!Module['noExitRuntime']) {
|
|
exit(ret);
|
|
}
|
|
}
|
|
catch(e) {
|
|
if (e instanceof ExitStatus) {
|
|
// exit() throws this once it's done to make sure execution
|
|
// has been stopped completely
|
|
return;
|
|
} else if (e == 'SimulateInfiniteLoop') {
|
|
// running an evented main loop, don't immediately exit
|
|
Module['noExitRuntime'] = true;
|
|
return;
|
|
} else {
|
|
if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]);
|
|
throw e;
|
|
}
|
|
} finally {
|
|
calledMain = true;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
function run(args) {
|
|
args = args || Module['arguments'];
|
|
|
|
if (preloadStartTime === null) preloadStartTime = Date.now();
|
|
|
|
if (runDependencies > 0) {
|
|
Module.printErr('run() called, but dependencies remain, so not running');
|
|
return;
|
|
}
|
|
|
|
preRun();
|
|
|
|
if (runDependencies > 0) return; // a preRun added a dependency, run will be called later
|
|
if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame
|
|
|
|
function doRun() {
|
|
if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening
|
|
Module['calledRun'] = true;
|
|
|
|
ensureInitRuntime();
|
|
|
|
preMain();
|
|
|
|
if (Module['_main'] && shouldRunNow) {
|
|
Module['callMain'](args);
|
|
}
|
|
|
|
postRun();
|
|
}
|
|
|
|
if (Module['setStatus']) {
|
|
Module['setStatus']('Running...');
|
|
setTimeout(function() {
|
|
setTimeout(function() {
|
|
Module['setStatus']('');
|
|
}, 1);
|
|
if (!ABORT) doRun();
|
|
}, 1);
|
|
} else {
|
|
doRun();
|
|
}
|
|
}
|
|
Module['run'] = Module.run = run;
|
|
|
|
function exit(status) {
|
|
ABORT = true;
|
|
EXITSTATUS = status;
|
|
STACKTOP = initialStackTop;
|
|
|
|
// exit the runtime
|
|
exitRuntime();
|
|
|
|
// TODO We should handle this differently based on environment.
|
|
// In the browser, the best we can do is throw an exception
|
|
// to halt execution, but in node we could process.exit and
|
|
// I'd imagine SM shell would have something equivalent.
|
|
// This would let us set a proper exit status (which
|
|
// would be great for checking test exit statuses).
|
|
// https://github.com/kripken/emscripten/issues/1371
|
|
|
|
// throw an exception to halt the current execution
|
|
throw new ExitStatus(status);
|
|
}
|
|
Module['exit'] = Module.exit = exit;
|
|
|
|
function abort(text) {
|
|
if (text) {
|
|
Module.print(text);
|
|
Module.printErr(text);
|
|
}
|
|
|
|
ABORT = true;
|
|
EXITSTATUS = 1;
|
|
|
|
throw 'abort() at ' + stackTrace();
|
|
}
|
|
Module['abort'] = Module.abort = abort;
|
|
|
|
// {{PRE_RUN_ADDITIONS}}
|
|
|
|
if (Module['preInit']) {
|
|
if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
|
|
while (Module['preInit'].length > 0) {
|
|
Module['preInit'].pop()();
|
|
}
|
|
}
|
|
|
|
// shouldRunNow refers to calling main(), not run().
|
|
var shouldRunNow = true;
|
|
if (Module['noInitialRun']) {
|
|
shouldRunNow = false;
|
|
}
|
|
|
|
|
|
run();
|
|
|
|
// {{POST_RUN_ADDITIONS}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// {{MODULE_ADDITIONS}}
|
|
|
|
|
|
|
|
|
|
|
|
|