function instantiate(info) {
  var bufferView;
  var base64ReverseLookup = new Uint8Array(123/*'z'+1*/);
  for (var i = 25; i >= 0; --i) {
    base64ReverseLookup[48+i] = 52+i; // '0-9'
    base64ReverseLookup[65+i] = i; // 'A-Z'
    base64ReverseLookup[97+i] = 26+i; // 'a-z'
  }
  base64ReverseLookup[43] = 62; // '+'
  base64ReverseLookup[47] = 63; // '/'
  /** @noinline Inlining this function would mean expanding the base64 string 4x times in the source code, which Closure seems to be happy to do. */
  function base64DecodeToExistingUint8Array(uint8Array, offset, b64) {
    var b1, b2, i = 0, j = offset, bLength = b64.length, end = offset + (bLength*3>>2) - (b64[bLength-2] == '=') - (b64[bLength-1] == '=');
    for (; i < bLength; i += 4) {
      b1 = base64ReverseLookup[b64.charCodeAt(i+1)];
      b2 = base64ReverseLookup[b64.charCodeAt(i+2)];
      uint8Array[j++] = base64ReverseLookup[b64.charCodeAt(i)] << 2 | b1 >> 4;
      if (j < end) uint8Array[j++] = b1 << 4 | b2 >> 2;
      if (j < end) uint8Array[j++] = b2 << 6 | base64ReverseLookup[b64.charCodeAt(i+3)];
    }
    return uint8Array;
  }
function initActiveSegments(imports) {
  base64DecodeToExistingUint8Array(bufferView, 1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwp");
  base64DecodeToExistingUint8Array(bufferView, 1072, "EQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAARERE=");
  base64DecodeToExistingUint8Array(bufferView, 1153, "CwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAAL");
  base64DecodeToExistingUint8Array(bufferView, 1211, "DA==");
  base64DecodeToExistingUint8Array(bufferView, 1223, "DAAAAAAMAAAAAAkMAAAAAAAMAAAM");
  base64DecodeToExistingUint8Array(bufferView, 1269, "Dg==");
  base64DecodeToExistingUint8Array(bufferView, 1281, "DQAAAAQNAAAAAAkOAAAAAAAOAAAO");
  base64DecodeToExistingUint8Array(bufferView, 1327, "EA==");
  base64DecodeToExistingUint8Array(bufferView, 1339, "DwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhIS");
  base64DecodeToExistingUint8Array(bufferView, 1394, "EgAAABISEgAAAAAAAAk=");
  base64DecodeToExistingUint8Array(bufferView, 1443, "Cw==");
  base64DecodeToExistingUint8Array(bufferView, 1455, "CgAAAAAKAAAAAAkLAAAAAAALAAAL");
  base64DecodeToExistingUint8Array(bufferView, 1501, "DA==");
  base64DecodeToExistingUint8Array(bufferView, 1513, "DAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAu");
}
function wasm2js_trap() { throw new Error('abort'); }

function asmFunc(imports) {
 var buffer = new ArrayBuffer(16777216);
 var env = imports.env;
 var FUNCTION_TABLE = env.table;
 var HEAP8 = new Int8Array(buffer);
 var HEAP16 = new Int16Array(buffer);
 var HEAP32 = new Int32Array(buffer);
 var HEAPU8 = new Uint8Array(buffer);
 var HEAPU16 = new Uint16Array(buffer);
 var HEAPU32 = new Uint32Array(buffer);
 var HEAPF32 = new Float32Array(buffer);
 var HEAPF64 = new Float64Array(buffer);
 var Math_imul = Math.imul;
 var Math_fround = Math.fround;
 var Math_abs = Math.abs;
 var Math_clz32 = Math.clz32;
 var Math_min = Math.min;
 var Math_max = Math.max;
 var Math_floor = Math.floor;
 var Math_ceil = Math.ceil;
 var Math_trunc = Math.trunc;
 var Math_sqrt = Math.sqrt;
 var nan = NaN;
 var infinity = Infinity;
 var syscall$6 = env.__syscall6;
 var syscall$54 = env.__syscall54;
 // EMSCRIPTEN_START_FUNCS
;
 function main() {
  syscall$6(1, 2) | 0;
  syscall$54(3, 4) | 0;
  FUNCTION_TABLE[HEAP32[257]]();
 }
 
 function other() {
  main();
 }
 
 function foo() {
  wasm2js_trap();
 }
 
 function bar() {
  HEAP32[4] = 3;
  HEAPF32[4] = 7;
  HEAPF64[2] = 11;
  HEAP8[16] = 15;
  HEAP16[8] = 19;
  if (HEAP32[25] == 1) {
   bar()
  }
  if (HEAP32[26] < 2) {
   bar()
  }
  if (HEAPU32[27] < 3) {
   bar()
  }
  if (HEAP16[56] == 1) {
   bar()
  }
  if (HEAP16[58] < 2) {
   bar()
  }
  if (HEAPU16[60] < 2) {
   bar()
  }
  if (HEAP16[62] >>> 0 < 3) {
   bar()
  }
  if (HEAPU16[64] < 3) {
   bar()
  }
  if (HEAP8[132] < 2) {
   bar()
  }
  if (HEAPU8[136] < 2) {
   bar()
  }
  if (HEAP8[140] >>> 0 < 3) {
   bar()
  }
  if (HEAPU8[144] < 3) {
   bar()
  }
  if (bools(314159) >>> 7 | 0) {
   bar()
  }
  if (bools(314159) >> 8) {
   bar()
  }
  if (~~getf32() >>> 0) {
   bar()
  }
  if (~~getf32()) {
   bar()
  }
  if (~~getf64() >>> 0) {
   bar()
  }
  if (~~getf64()) {
   bar()
  }
  if ((geti32() + geti32() | 0) + geti32() | 0) {
   bar()
  }
  if (geti32() + (geti32() + geti32() | 0) | 0) {
   bar()
  }
  if (geti32() + geti32() + (geti32() + geti32()) | 0) {
   bar()
  }
  if (geti32() + geti32() + (geti32() + geti32()) + (geti32() + geti32() + (geti32() + geti32())) | 0) {
   bar()
  }
 }
 
 function geti32() {
  return geti32();
 }
 
 function getf32() {
  return getf32();
 }
 
 function getf64() {
  return getf64();
 }
 
 function __growWasmMemory($0) {
  $0 = $0 | 0;
  return wasm2js_trap() | 0;
 }
 
 function internal($0) {
  return $0;
 }
 
 function sub_zero($0) {
  $0 = $0 | 0;
  return $0 + 5 | 0;
 }
 
 function select($0) {
  $0 = $0 | 0;
  return ($0 ? $0 : HEAP32[4]) | 0;
 }
 
 function bools($0) {
  $0 = $0 | 0;
  var $1 = 0;
  bools(HEAP8[0] & 1);
  bools(HEAP8[0] & 1);
  bools(HEAP16[0] & 1);
  bools(HEAP16[0] & 1);
  bools(HEAP32[0] & 1);
  bools(HEAPU8[0] & 2);
  $1 = $0 ^ 1;
  bools($1);
  if ($1) {
   bools(2)
  }
  if ($0 ^ 2) {
   bools(2)
  }
  bools(!($0 ^ 1));
  wasm2js_trap();
 }
 
 // EMSCRIPTEN_END_FUNCS
;
 bufferView = HEAPU8;
 initActiveSegments(imports);
 FUNCTION_TABLE[1] = foo;
 FUNCTION_TABLE[2] = bar;
 FUNCTION_TABLE[3] = internal;
 function __wasm_memory_size() {
  return buffer.byteLength / 65536 | 0;
 }
 
 return {
  "main": main, 
  "other": other, 
  "__growWasmMemory": __growWasmMemory, 
  "exported": internal, 
  "sub_zero": sub_zero, 
  "select": select, 
  "bools": bools
 };
}

  return asmFunc(info);
}
